From 9fe7e6c7252d1413435c6225c248f084ac42168e Mon Sep 17 00:00:00 2001 From: Jan Lentfer Date: Mon, 25 Jan 2010 19:25:08 +0100 Subject: [PATCH 01/16] sendmail: Update vendor branch to v8.14.4 --- contrib/sendmail-8.14/CACerts | 205 +- contrib/sendmail-8.14/KNOWNBUGS | 13 +- contrib/sendmail-8.14/LICENSE | 6 +- contrib/sendmail-8.14/PGPKEYS | 138 +- contrib/sendmail-8.14/README | 5 +- contrib/sendmail-8.14/README.DRAGONFLY | 39 + contrib/sendmail-8.14/RELEASE_NOTES | 125 +- contrib/sendmail-8.14/cf/README | 8 +- contrib/sendmail-8.14/cf/cf/generic-bsd4.4.cf | 14 +- contrib/sendmail-8.14/cf/cf/generic-hpux10.cf | 14 +- contrib/sendmail-8.14/cf/cf/generic-hpux9.cf | 14 +- contrib/sendmail-8.14/cf/cf/generic-linux.cf | 14 +- contrib/sendmail-8.14/cf/cf/generic-mpeix.cf | 14 +- .../cf/cf/generic-nextstep3.3.cf | 14 +- contrib/sendmail-8.14/cf/cf/generic-osf1.cf | 14 +- .../sendmail-8.14/cf/cf/generic-solaris.cf | 14 +- .../sendmail-8.14/cf/cf/generic-sunos4.1.cf | 14 +- .../sendmail-8.14/cf/cf/generic-ultrix4.cf | 14 +- contrib/sendmail-8.14/cf/cf/submit.cf | 14 +- .../sendmail-8.14/cf/feature/ldap_routing.m4 | 36 +- contrib/sendmail-8.14/cf/m4/cfhead.m4 | 6 +- contrib/sendmail-8.14/cf/m4/proto.m4 | 27 +- contrib/sendmail-8.14/cf/m4/version.m4 | 6 +- contrib/sendmail-8.14/contrib/qtool.pl | 8 +- contrib/sendmail-8.14/contrib/smcontrol.pl | 4 +- contrib/sendmail-8.14/devtools/M4/switch.m4 | 4 +- contrib/sendmail-8.14/devtools/OS/Darwin.8.x | 5 +- contrib/sendmail-8.14/devtools/OS/Linux | 3 +- contrib/sendmail-8.14/devtools/OS/OpenBSD | 29 +- contrib/sendmail-8.14/devtools/OS/QNX.6.x | 23 +- contrib/sendmail-8.14/devtools/OS/SunOS.5.11 | 4 +- contrib/sendmail-8.14/devtools/README | 20 +- contrib/sendmail-8.14/devtools/bin/Build | 12 +- contrib/sendmail-8.14/doc/op/op.me | 42 +- contrib/sendmail-8.14/doc/op/op.ps | 7712 +++++++++-------- .../sendmail-8.14/include/libmilter/mfapi.h | 15 +- .../sendmail-8.14/include/libmilter/mfdef.h | 18 +- contrib/sendmail-8.14/include/sm/conf.h | 23 +- contrib/sendmail-8.14/include/sm/ldap.h | 4 +- contrib/sendmail-8.14/include/sm/sem.h | 5 +- contrib/sendmail-8.14/libmilter/Makefile.m4 | 2 +- contrib/sendmail-8.14/libmilter/comm.c | 17 +- contrib/sendmail-8.14/libmilter/docs/api.html | 8 +- .../libmilter/docs/overview.html | 6 +- .../libmilter/docs/smfi_addheader.html | 10 +- .../libmilter/docs/smfi_chgheader.html | 9 +- .../libmilter/docs/smfi_insheader.html | 9 +- .../libmilter/docs/smfi_opensocket.html | 22 +- .../libmilter/docs/smfi_version.html | 24 +- contrib/sendmail-8.14/libmilter/engine.c | 150 +- contrib/sendmail-8.14/libmilter/example.c | 4 +- contrib/sendmail-8.14/libmilter/handler.c | 21 +- contrib/sendmail-8.14/libmilter/libmilter.h | 3 +- contrib/sendmail-8.14/libmilter/listener.c | 9 +- contrib/sendmail-8.14/libmilter/main.c | 5 +- contrib/sendmail-8.14/libmilter/worker.c | 49 +- contrib/sendmail-8.14/libsm/debug.c | 31 +- contrib/sendmail-8.14/libsm/ldap.c | 33 +- contrib/sendmail-8.14/libsm/mbdb.c | 19 +- contrib/sendmail-8.14/libsm/sem.c | 46 +- contrib/sendmail-8.14/libsm/t-sem.c | 70 +- contrib/sendmail-8.14/libsmdb/smdb1.c | 19 +- contrib/sendmail-8.14/libsmdb/smdb2.c | 13 +- contrib/sendmail-8.14/libsmutil/safefile.c | 3 +- contrib/sendmail-8.14/mail.local/mail.local.c | 31 +- contrib/sendmail-8.14/makemap/makemap.0 | 5 +- contrib/sendmail-8.14/makemap/makemap.8 | 7 +- contrib/sendmail-8.14/makemap/makemap.c | 7 +- contrib/sendmail-8.14/praliases/praliases.0 | 8 +- contrib/sendmail-8.14/praliases/praliases.8 | 10 +- contrib/sendmail-8.14/praliases/praliases.c | 7 +- contrib/sendmail-8.14/sendmail/Makefile.m4 | 2 +- contrib/sendmail-8.14/sendmail/README | 9 +- contrib/sendmail-8.14/sendmail/TRACEFLAGS | 3 +- contrib/sendmail-8.14/sendmail/collect.c | 8 +- contrib/sendmail-8.14/sendmail/conf.c | 81 +- contrib/sendmail-8.14/sendmail/conf.h | 15 +- contrib/sendmail-8.14/sendmail/daemon.c | 27 +- contrib/sendmail-8.14/sendmail/deliver.c | 37 +- contrib/sendmail-8.14/sendmail/envelope.c | 32 +- contrib/sendmail-8.14/sendmail/headers.c | 17 +- contrib/sendmail-8.14/sendmail/main.c | 45 +- contrib/sendmail-8.14/sendmail/map.c | 42 +- contrib/sendmail-8.14/sendmail/mci.c | 29 +- contrib/sendmail-8.14/sendmail/milter.c | 95 +- contrib/sendmail-8.14/sendmail/parseaddr.c | 9 +- contrib/sendmail-8.14/sendmail/queue.c | 89 +- contrib/sendmail-8.14/sendmail/ratectrl.c | 54 +- contrib/sendmail-8.14/sendmail/readcf.c | 181 +- contrib/sendmail-8.14/sendmail/savemail.c | 4 +- contrib/sendmail-8.14/sendmail/sendmail.0 | 4 +- contrib/sendmail-8.14/sendmail/sendmail.8 | 6 +- contrib/sendmail-8.14/sendmail/sendmail.h | 42 +- contrib/sendmail-8.14/sendmail/sfsasl.c | 30 +- contrib/sendmail-8.14/sendmail/sm_resolve.c | 6 +- contrib/sendmail-8.14/sendmail/srvrsmtp.c | 154 +- contrib/sendmail-8.14/sendmail/tls.c | 80 +- contrib/sendmail-8.14/sendmail/usersmtp.c | 14 +- contrib/sendmail-8.14/sendmail/util.c | 15 +- contrib/sendmail-8.14/sendmail/version.c | 6 +- contrib/sendmail-8.14/smrsh/README | 10 +- contrib/sendmail-8.14/vacation/vacation.c | 31 +- 102 files changed, 5952 insertions(+), 4581 deletions(-) create mode 100644 contrib/sendmail-8.14/README.DRAGONFLY diff --git a/contrib/sendmail-8.14/CACerts b/contrib/sendmail-8.14/CACerts index b74fb7f191..dee28194eb 100644 --- a/contrib/sendmail-8.14/CACerts +++ b/contrib/sendmail-8.14/CACerts @@ -1,4 +1,4 @@ -# $Id: CACerts,v 8.3 2007/06/11 22:04:46 ca Exp $ +# $Id: CACerts,v 8.4 2009/06/26 05:46:10 ca Exp $ # This file contains some CA certificates that are used to sign the # certificates of mail servers of members of the sendmail consortium # who may reply to questions etc sent to sendmail.org. @@ -6,73 +6,6 @@ # a certificate signed by one of these CA certificates. # -Certificate: - Data: - Version: 3 (0x2) - Serial Number: 0 (0x0) - Signature Algorithm: md5WithRSAEncryption - Issuer: C=US, ST=California, L=Berkeley, O=Sendmail Consortium, CN=Certificate Authority/emailAddress=certificates@sendmail.org - Validity - Not Before: Feb 1 21:51:47 2003 GMT - Not After : Jan 31 21:51:47 2008 GMT - Subject: C=US, ST=California, L=Berkeley, O=Sendmail Consortium, CN=Certificate Authority/emailAddress=certificates@sendmail.org - Subject Public Key Info: - Public Key Algorithm: rsaEncryption - RSA Public Key: (1024 bit) - Modulus (1024 bit): - 00:9a:fb:dc:4c:a3:58:21:1b:84:78:0a:53:56:b3: - 8d:84:05:b7:db:dd:d7:81:ea:dd:c1:ab:d4:be:d9: - 2b:12:e0:6d:3a:31:d5:f0:7b:13:fc:d8:da:09:0b: - 71:11:8e:b9:48:c4:ab:ae:f5:9c:4c:e2:04:27:8e: - c8:03:3a:aa:00:8b:46:f2:79:09:ae:65:b2:9a:66: - e7:ac:a9:ea:32:f7:4a:4e:fd:da:41:48:34:5a:9d: - b0:42:ea:55:40:17:27:5e:67:9e:e5:ce:dc:84:6d: - 1d:48:37:23:11:68:9d:a8:d4:58:02:05:ea:88:35: - bd:0d:b6:28:d5:cd:d4:d8:95 - Exponent: 65537 (0x10001) - X509v3 extensions: - X509v3 Subject Key Identifier: - DE:CD:6E:B8:89:34:06:3D:E9:CD:A7:FE:45:4F:4E:FB:E1:8D:E7:79 - X509v3 Authority Key Identifier: - keyid:DE:CD:6E:B8:89:34:06:3D:E9:CD:A7:FE:45:4F:4E:FB:E1:8D:E7:79 - DirName:/C=US/ST=California/L=Berkeley/O=Sendmail Consortium/CN=Certificate Authority/emailAddress=certificates@sendmail.org - serial:00 - - X509v3 Basic Constraints: - CA:TRUE - Signature Algorithm: md5WithRSAEncryption - 66:92:b9:57:17:3b:6a:0e:72:b1:85:29:53:9f:11:68:a0:0d: - 79:43:d0:7c:48:73:b9:71:09:50:08:02:03:0b:28:0c:33:9a: - 00:ac:94:69:4f:bc:0f:45:6b:f5:3a:ca:6a:87:a1:7f:28:f7: - 9a:c4:b6:b0:f3:dc:a3:eb:42:95:9f:99:19:f8:b8:84:6d:f1: - 1d:bc:9f:f0:a0:cc:60:2d:00:6b:17:55:33:16:85:d1:73:e1: - 00:59:89:33:19:c4:2e:29:5a:39:a7:0e:e7:9b:d2:4c:c7:b9: - 7d:6a:3e:b4:00:83:86:d3:16:28:fd:ad:55:65:60:4e:14:02: - 46:d3 ------BEGIN CERTIFICATE----- -MIIDsDCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBnTELMAkGA1UEBhMCVVMx -EzARBgNVBAgTCkNhbGlmb3JuaWExETAPBgNVBAcTCEJlcmtlbGV5MRwwGgYDVQQK -ExNTZW5kbWFpbCBDb25zb3J0aXVtMR4wHAYDVQQDExVDZXJ0aWZpY2F0ZSBBdXRo -b3JpdHkxKDAmBgkqhkiG9w0BCQEWGWNlcnRpZmljYXRlc0BzZW5kbWFpbC5vcmcw -HhcNMDMwMjAxMjE1MTQ3WhcNMDgwMTMxMjE1MTQ3WjCBnTELMAkGA1UEBhMCVVMx -EzARBgNVBAgTCkNhbGlmb3JuaWExETAPBgNVBAcTCEJlcmtlbGV5MRwwGgYDVQQK -ExNTZW5kbWFpbCBDb25zb3J0aXVtMR4wHAYDVQQDExVDZXJ0aWZpY2F0ZSBBdXRo -b3JpdHkxKDAmBgkqhkiG9w0BCQEWGWNlcnRpZmljYXRlc0BzZW5kbWFpbC5vcmcw -gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJr73EyjWCEbhHgKU1azjYQFt9vd -14Hq3cGr1L7ZKxLgbTox1fB7E/zY2gkLcRGOuUjEq671nEziBCeOyAM6qgCLRvJ5 -Ca5lsppm56yp6jL3Sk792kFINFqdsELqVUAXJ15nnuXO3IRtHUg3IxFonajUWAIF -6og1vQ22KNXN1NiVAgMBAAGjgf0wgfowHQYDVR0OBBYEFN7NbriJNAY96c2n/kVP -Tvvhjed5MIHKBgNVHSMEgcIwgb+AFN7NbriJNAY96c2n/kVPTvvhjed5oYGjpIGg -MIGdMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTERMA8GA1UEBxMI -QmVya2VsZXkxHDAaBgNVBAoTE1NlbmRtYWlsIENvbnNvcnRpdW0xHjAcBgNVBAMT -FUNlcnRpZmljYXRlIEF1dGhvcml0eTEoMCYGCSqGSIb3DQEJARYZY2VydGlmaWNh -dGVzQHNlbmRtYWlsLm9yZ4IBADAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUA -A4GBAGaSuVcXO2oOcrGFKVOfEWigDXlD0HxIc7lxCVAIAgMLKAwzmgCslGlPvA9F -a/U6ymqHoX8o95rEtrDz3KPrQpWfmRn4uIRt8R28n/CgzGAtAGsXVTMWhdFz4QBZ -iTMZxC4pWjmnDueb0kzHuX1qPrQAg4bTFij9rVVlYE4UAkbT ------END CERTIFICATE----- - - Certificate: Data: Version: 3 (0x2) @@ -144,93 +77,93 @@ Certificate: Data: Version: 3 (0x2) Serial Number: - fa:7c:2c:80:29:3f:c2:64 + c2:3c:61:67:3b:0a:cc:5e Signature Algorithm: md5WithRSAEncryption - Issuer: C=US, ST=California, L=Berkeley, O=Endmail Org, OU=MTA, CN=Claus Assmann CA RSA 2007/emailAddress=ca+ca-rsa2007@esmtp.org + Issuer: C=US, ST=California, L=Berkeley, O=Endmail Org, OU=MTA, CN=Claus Assmann CA RSA 2009/emailAddress=ca+ca-rsa2009@esmtp.org Validity - Not Before: May 4 02:07:56 2007 GMT - Not After : May 3 02:07:56 2010 GMT - Subject: C=US, ST=California, L=Berkeley, O=Endmail Org, OU=MTA, CN=Claus Assmann CA RSA 2007/emailAddress=ca+ca-rsa2007@esmtp.org + Not Before: May 14 04:42:18 2009 GMT + Not After : May 13 04:42:18 2012 GMT + Subject: C=US, ST=California, L=Berkeley, O=Endmail Org, OU=MTA, CN=Claus Assmann CA RSA 2009/emailAddress=ca+ca-rsa2009@esmtp.org Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): - 00:b0:28:91:31:af:82:ce:72:ef:36:ab:7d:e9:b1: - f5:77:66:38:4b:38:1f:5f:3d:12:d3:c8:fd:9a:f4: - d4:f6:b8:90:f9:26:5f:29:f7:43:f9:34:ec:65:62: - 01:bb:64:f1:5d:ea:75:04:3d:92:65:60:a2:06:62: - fa:88:ca:d8:20:50:c8:1e:38:53:b5:18:dd:b7:bd: - c7:08:35:4c:d9:dc:c6:97:56:37:b6:65:33:74:5a: - b2:c3:85:08:2b:b7:26:70:ff:38:02:1a:67:6a:d0: - 49:18:10:4b:f8:db:af:06:9c:b1:a8:82:a1:b1:75: - d2:52:9b:53:0c:ca:a7:e3:15:38:79:6d:a1:f5:ef: - 7c:8b:fd:bd:04:78:f9:e8:1e:b9:92:ea:74:d7:45: - 1e:4c:c8:bd:f4:5c:fc:1a:7f:e7:31:c6:ab:cb:78: - c7:4d:2f:b5:72:10:35:27:4a:1a:fa:53:19:f8:a7: - 59:63:eb:e9:15:ab:dc:71:69:8c:42:1c:96:4e:89: - 80:66:c9:9e:21:d5:3d:08:19:74:a5:f5:07:a0:ae: - de:79:af:fd:42:c2:79:7e:8c:f8:39:22:3b:c3:c4: - 58:3b:d0:0d:e6:a9:11:b6:a2:cd:2e:e5:16:66:fd: - 7e:65:33:94:b0:36:80:27:f5:80:76:a9:e5:df:f2: - cf:ef + 00:d5:f8:d3:48:38:75:df:2e:6b:8b:c4:8d:1d:41: + 5e:ad:4b:96:3d:48:c2:dc:e5:ff:61:98:95:32:03: + e9:b6:71:5a:68:31:bc:e1:5c:aa:0e:70:a7:bc:51: + b7:13:6a:78:54:ae:a6:d0:44:49:1b:5e:37:5b:59: + 20:01:47:a7:ec:41:4c:11:79:8c:25:c1:1b:c0:ed: + 85:b2:de:0f:10:9f:e7:b2:a3:c4:f1:fc:85:51:aa: + d6:68:49:51:3e:04:e1:eb:e9:cd:87:1b:d0:9d:97: + 7b:4c:e1:1e:b1:6a:be:01:0a:a9:97:9a:50:89:e3: + 66:06:4c:07:cb:7e:99:70:13:e8:b4:9c:e7:e6:52: + 38:c0:64:90:42:d0:f5:cf:22:46:22:60:e9:34:70: + 1d:e3:d1:13:33:3a:31:ba:13:06:a8:c2:34:90:47: + c5:a1:bd:2d:7d:98:21:70:de:22:d0:13:11:e5:08: + dd:a0:77:0b:df:34:a7:07:55:de:5a:71:f6:6c:9e: + ec:f7:45:75:1f:22:a9:84:06:c6:4f:84:3d:4e:05: + d7:e4:e5:98:41:61:7b:8e:c9:3b:a6:ed:31:80:7d: + fd:fa:f0:dc:b7:07:82:b8:ec:27:20:39:5f:78:95: + f1:0d:93:8d:f9:4d:21:08:fd:72:89:01:ff:2c:a0: + 71:9d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: - B2:49:6B:52:45:EE:90:36:D2:79:47:03:33:D9:A0:BA:80:50:DA:1C + A7:61:FA:31:AF:A8:E2:5E:93:B6:84:9E:74:08:A2:76:50:87:69:7C X509v3 Authority Key Identifier: - keyid:B2:49:6B:52:45:EE:90:36:D2:79:47:03:33:D9:A0:BA:80:50:DA:1C - DirName:/C=US/ST=California/L=Berkeley/O=Endmail Org/OU=MTA/CN=Claus Assmann CA RSA 2007/emailAddress=ca+ca-rsa2007@esmtp.org - serial:FA:7C:2C:80:29:3F:C2:64 + keyid:A7:61:FA:31:AF:A8:E2:5E:93:B6:84:9E:74:08:A2:76:50:87:69:7C + DirName:/C=US/ST=California/L=Berkeley/O=Endmail Org/OU=MTA/CN=Claus Assmann CA RSA 2009/emailAddress=ca+ca-rsa2009@esmtp.org + serial:C2:3C:61:67:3B:0A:CC:5E X509v3 Basic Constraints: - CA:TRUE + CA:TRUE X509v3 Subject Alternative Name: - email:ca+ca-rsa2007@esmtp.org + email:ca+ca-rsa2009@esmtp.org X509v3 Issuer Alternative Name: - email:ca+ca-rsa2007@esmtp.org + email:ca+ca-rsa2009@esmtp.org Signature Algorithm: md5WithRSAEncryption - 98:98:7c:d3:d0:5b:72:47:15:e6:22:68:bb:78:0e:78:66:e9: - 56:16:d8:bc:9d:5a:dc:27:29:fb:91:2d:6a:21:35:18:56:b4: - 4f:2a:09:c0:08:6f:9a:59:2b:2e:72:9a:fb:50:ba:c7:a9:91: - a0:f9:6c:be:cf:78:42:43:02:70:53:97:ba:6a:e3:da:17:e8: - 1f:c7:3a:5b:e7:bc:eb:e5:24:4c:f5:cf:61:34:1e:20:ed:17: - 63:ef:81:d3:9e:25:fe:cc:05:19:cc:8a:82:c9:4c:3a:b5:6b: - 49:51:76:46:02:aa:60:bb:c4:b9:61:48:33:da:79:8d:46:a3: - 06:20:98:f3:b2:db:3b:ad:c9:1d:0e:97:3d:b7:14:19:d3:7d: - 04:8b:6a:81:e0:11:5b:e1:35:a3:ff:2f:11:86:1c:31:85:7a: - fd:3f:36:ef:99:25:46:2e:b0:cb:43:45:4a:ec:be:d3:3f:a4: - 77:9b:79:cc:ce:92:63:a5:d9:ed:db:a0:9d:5d:7c:d7:80:f6: - c9:41:fb:02:96:8e:fd:f3:da:05:9d:81:a7:25:da:26:35:3b: - a9:0c:8c:f5:a7:5d:48:ec:87:c7:7a:60:51:76:f2:de:9b:14: - 2b:55:8a:43:df:99:19:f3:eb:e7:03:e6:a7:a2:a2:28:dd:d5: - 07:6a:3f:f7 + b3:38:e0:da:a8:07:d8:cc:b8:4d:8c:20:a6:06:2c:f8:27:db: + 8e:28:0f:39:bd:d9:24:c7:9f:e0:4d:d6:b6:63:42:36:0f:d8: + 70:41:e7:9e:a2:24:64:05:ea:85:97:ac:f2:cc:c2:a6:71:bb: + 30:21:c1:c7:c4:54:34:1d:30:09:f0:9b:74:27:93:59:12:4c: + 53:0b:8c:3e:d0:39:ed:4a:d0:d9:66:24:d8:e7:e5:9c:a8:6d: + 5f:56:5d:9a:91:fe:1b:7d:b9:7c:79:9e:1c:b9:71:74:14:f8: + 0c:30:50:f9:b1:22:56:a8:4d:6f:4b:9b:e5:8a:81:33:1b:77: + 75:f6:d8:ce:d4:90:34:86:34:d1:86:75:a9:e1:23:e6:af:c1: + 8e:28:97:47:20:4d:1b:57:09:39:f4:56:01:d2:87:43:3e:29: + f6:c4:5b:7d:8f:9e:bd:ad:36:79:cf:09:70:43:30:21:98:23: + 31:c8:0d:39:ee:77:e1:4a:44:1a:5c:79:2f:6c:ec:8a:3c:db: + 99:a0:11:bc:1a:46:24:51:e7:75:d6:9a:db:ad:dd:55:d4:dd: + ca:81:a0:10:77:96:91:9c:76:30:38:18:f0:82:43:b3:7c:41: + 64:4c:4e:da:66:22:67:cf:b7:d7:10:ba:ed:f4:6d:43:59:00: + d0:82:1e:07 -----BEGIN CERTIFICATE----- -MIIFJzCCBA+gAwIBAgIJAPp8LIApP8JkMA0GCSqGSIb3DQEBBAUAMIGlMQswCQYD +MIIFJzCCBA+gAwIBAgIJAMI8YWc7CsxeMA0GCSqGSIb3DQEBBAUAMIGlMQswCQYD VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTERMA8GA1UEBxMIQmVya2VsZXkx FDASBgNVBAoTC0VuZG1haWwgT3JnMQwwCgYDVQQLEwNNVEExIjAgBgNVBAMTGUNs -YXVzIEFzc21hbm4gQ0EgUlNBIDIwMDcxJjAkBgkqhkiG9w0BCQEWF2NhK2NhLXJz -YTIwMDdAZXNtdHAub3JnMB4XDTA3MDUwNDAyMDc1NloXDTEwMDUwMzAyMDc1Nlow +YXVzIEFzc21hbm4gQ0EgUlNBIDIwMDkxJjAkBgkqhkiG9w0BCQEWF2NhK2NhLXJz +YTIwMDlAZXNtdHAub3JnMB4XDTA5MDUxNDA0NDIxOFoXDTEyMDUxMzA0NDIxOFow gaUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMREwDwYDVQQHEwhC ZXJrZWxleTEUMBIGA1UEChMLRW5kbWFpbCBPcmcxDDAKBgNVBAsTA01UQTEiMCAG -A1UEAxMZQ2xhdXMgQXNzbWFubiBDQSBSU0EgMjAwNzEmMCQGCSqGSIb3DQEJARYX -Y2ErY2EtcnNhMjAwN0Blc210cC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQCwKJExr4LOcu82q33psfV3ZjhLOB9fPRLTyP2a9NT2uJD5Jl8p90P5 -NOxlYgG7ZPFd6nUEPZJlYKIGYvqIytggUMgeOFO1GN23vccINUzZ3MaXVje2ZTN0 -WrLDhQgrtyZw/zgCGmdq0EkYEEv4268GnLGogqGxddJSm1MMyqfjFTh5baH173yL -/b0EePnoHrmS6nTXRR5MyL30XPwaf+cxxqvLeMdNL7VyEDUnShr6Uxn4p1lj6+kV -q9xxaYxCHJZOiYBmyZ4h1T0IGXSl9Qegrt55r/1Cwnl+jPg5IjvDxFg70A3mqRG2 -os0u5RZm/X5lM5SwNoAn9YB2qeXf8s/vAgMBAAGjggFWMIIBUjAdBgNVHQ4EFgQU -sklrUkXukDbSeUcDM9mguoBQ2hwwgdoGA1UdIwSB0jCBz4AUsklrUkXukDbSeUcD -M9mguoBQ2hyhgaukgagwgaUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9y +A1UEAxMZQ2xhdXMgQXNzbWFubiBDQSBSU0EgMjAwOTEmMCQGCSqGSIb3DQEJARYX +Y2ErY2EtcnNhMjAwOUBlc210cC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDV+NNIOHXfLmuLxI0dQV6tS5Y9SMLc5f9hmJUyA+m2cVpoMbzhXKoO +cKe8UbcTanhUrqbQREkbXjdbWSABR6fsQUwReYwlwRvA7YWy3g8Qn+eyo8Tx/IVR +qtZoSVE+BOHr6c2HG9Cdl3tM4R6xar4BCqmXmlCJ42YGTAfLfplwE+i0nOfmUjjA +ZJBC0PXPIkYiYOk0cB3j0RMzOjG6EwaowjSQR8WhvS19mCFw3iLQExHlCN2gdwvf +NKcHVd5acfZsnuz3RXUfIqmEBsZPhD1OBdfk5ZhBYXuOyTum7TGAff368Ny3B4K4 +7CcgOV94lfENk435TSEI/XKJAf8soHGdAgMBAAGjggFWMIIBUjAdBgNVHQ4EFgQU +p2H6Ma+o4l6TtoSedAiidlCHaXwwgdoGA1UdIwSB0jCBz4AUp2H6Ma+o4l6TtoSe +dAiidlCHaXyhgaukgagwgaUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9y bmlhMREwDwYDVQQHEwhCZXJrZWxleTEUMBIGA1UEChMLRW5kbWFpbCBPcmcxDDAK -BgNVBAsTA01UQTEiMCAGA1UEAxMZQ2xhdXMgQXNzbWFubiBDQSBSU0EgMjAwNzEm -MCQGCSqGSIb3DQEJARYXY2ErY2EtcnNhMjAwN0Blc210cC5vcmeCCQD6fCyAKT/C -ZDAMBgNVHRMEBTADAQH/MCIGA1UdEQQbMBmBF2NhK2NhLXJzYTIwMDdAZXNtdHAu -b3JnMCIGA1UdEgQbMBmBF2NhK2NhLXJzYTIwMDdAZXNtdHAub3JnMA0GCSqGSIb3 -DQEBBAUAA4IBAQCYmHzT0FtyRxXmImi7eA54ZulWFti8nVrcJyn7kS1qITUYVrRP -KgnACG+aWSsucpr7ULrHqZGg+Wy+z3hCQwJwU5e6auPaF+gfxzpb57zr5SRM9c9h -NB4g7Rdj74HTniX+zAUZzIqCyUw6tWtJUXZGAqpgu8S5YUgz2nmNRqMGIJjzsts7 -rckdDpc9txQZ030Ei2qB4BFb4TWj/y8RhhwxhXr9PzbvmSVGLrDLQ0VK7L7TP6R3 -m3nMzpJjpdnt26CdXXzXgPbJQfsClo7989oFnYGnJdomNTupDIz1p11I7IfHemBR -dvLemxQrVYpD35kZ8+vnA+anoqIo3dUHaj/3 +BgNVBAsTA01UQTEiMCAGA1UEAxMZQ2xhdXMgQXNzbWFubiBDQSBSU0EgMjAwOTEm +MCQGCSqGSIb3DQEJARYXY2ErY2EtcnNhMjAwOUBlc210cC5vcmeCCQDCPGFnOwrM +XjAMBgNVHRMEBTADAQH/MCIGA1UdEQQbMBmBF2NhK2NhLXJzYTIwMDlAZXNtdHAu +b3JnMCIGA1UdEgQbMBmBF2NhK2NhLXJzYTIwMDlAZXNtdHAub3JnMA0GCSqGSIb3 +DQEBBAUAA4IBAQCzOODaqAfYzLhNjCCmBiz4J9uOKA85vdkkx5/gTda2Y0I2D9hw +QeeeoiRkBeqFl6zyzMKmcbswIcHHxFQ0HTAJ8Jt0J5NZEkxTC4w+0DntStDZZiTY +5+WcqG1fVl2akf4bfbl8eZ4cuXF0FPgMMFD5sSJWqE1vS5vlioEzG3d19tjO1JA0 +hjTRhnWp4SPmr8GOKJdHIE0bVwk59FYB0odDPin2xFt9j569rTZ5zwlwQzAhmCMx +yA057nfhSkQaXHkvbOyKPNuZoBG8GkYkUed11prbrd1V1N3KgaAQd5aRnHYwOBjw +gkOzfEFkTE7aZiJnz7fXELrt9G1DWQDQgh4H -----END CERTIFICATE----- diff --git a/contrib/sendmail-8.14/KNOWNBUGS b/contrib/sendmail-8.14/KNOWNBUGS index 6c7adb11fd..998fb11c7e 100644 --- a/contrib/sendmail-8.14/KNOWNBUGS +++ b/contrib/sendmail-8.14/KNOWNBUGS @@ -47,6 +47,17 @@ This list is not guaranteed to be complete. but some characters might be lost. Fix: obey RFC (2)822 and do not send lines that are longer than 1000 characters. +* milter communication fails if a single header is larger than 64K. + + If a single header is larger than 64KB (which is not possible in the + default configuration) then it cannot be transferred in one block to + libmilter and hence the communication fails. This can be avoided by + increasing the constant MILTER_CHUNK_SIZE in + include/libmilter/mfdef.h and recompiling sendmail, libmilter, and + all (statically linked) milters (or by using an undocumented compile + time option: _FFR_MAXDATASIZE; you have to read the source code in + order to use this properly). + * Sender addresses whose domain part cause a temporary A record lookup failure but have a valid MX record will be temporarily rejected in the default configuration. Solution: fix the DNS at the sender side. @@ -247,4 +258,4 @@ Kresolve sequence dnsmx canon be used if set instead of LOCAL_RELAY ($R). This will be fixed in a future version. -$Revision: 8.59 $, Last updated $Date: 2007/02/21 23:13:58 $ +$Revision: 8.60 $, Last updated $Date: 2007/12/04 01:16:50 $ diff --git a/contrib/sendmail-8.14/LICENSE b/contrib/sendmail-8.14/LICENSE index e8639f5a5a..2c604033ee 100644 --- a/contrib/sendmail-8.14/LICENSE +++ b/contrib/sendmail-8.14/LICENSE @@ -1,7 +1,7 @@ SENDMAIL LICENSE The following license terms and conditions apply, unless a different -license is obtained from Sendmail, Inc., 6425 Christie Ave, Fourth Floor, +license is obtained from Sendmail, Inc., 6475 Christie Ave, Suite 350, Emeryville, CA 94608, USA, or by electronic mail at license@sendmail.com. License Terms: @@ -33,7 +33,7 @@ each of the following conditions is met: forth as paragraph 6 below, in the documentation and/or other materials provided with the distribution. For the purposes of binary distribution the "Copyright Notice" refers to the following language: - "Copyright (c) 1998-2004 Sendmail, Inc. All rights reserved." + "Copyright (c) 1998-2009 Sendmail, Inc. All rights reserved." 4. Neither the name of Sendmail, Inc. nor the University of California nor the names of their contributors may be used to endorse or promote @@ -76,4 +76,4 @@ each of the following conditions is met: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -$Revision: 8.13 $, Last updated $Date: 2004/05/11 23:57:57 $ +$Revision: 8.15 $, Last updated $Date: 2009/03/04 19:58:04 $ diff --git a/contrib/sendmail-8.14/PGPKEYS b/contrib/sendmail-8.14/PGPKEYS index a6d7f5e140..5f89ed4394 100644 --- a/contrib/sendmail-8.14/PGPKEYS +++ b/contrib/sendmail-8.14/PGPKEYS @@ -141,6 +141,142 @@ gpExpdV7qPrw9k01j5rod5PjZlG8zV0= =SR28 -----END PGP PUBLIC KEY BLOCK----- +Type Bits KeyID Created Expires Algorithm Use +pub 1024 0xA77F2429 2009-01-01 ---------- RSA Sign & Encrypt +f16 Fingerprint16 = 33 3A 62 61 2C F3 21 AA 4E 87 47 F2 2F 2C 40 4D +uid Sendmail Signing Key/2009 + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.8 (OpenBSD) + +mQCNA0lcVHwAAAEEAM7aXDJHNH3g0oxbsSUjqRiKh47W4srnfEYREj2Q26AXWzXE +BSyfl6QMRLbSVNIiPOWlMPbZWjCx4c1TNsj3TiiklCcievlvbAPVa3kY2hZ6pmyU +czJq4S/mT1lt+uPOCjvKxo8OLQoFuJMTIS+Ya7LVjW7fJD5yrhKJbpunfyQpAAUR +tDFTZW5kbWFpbCBTaWduaW5nIEtleS8yMDA5IDxzZW5kbWFpbEBTZW5kbWFpbC5P +Ukc+iQCVAwUQSVxUfBKJbpunfyQpAQHirwP+JvK4cBqtw9rxSZ0whmC1N4a2r24f +SH2WDC1zNNeiCHg93udKs3PKLPm688U+WxiaSsrGQXQlGojx7jn1XggTPOG+SteJ +JP/Ea9buJK9KaLaniUm84XxHxa71y3v3+SfhJMpJioY4G6qKqfLZFzmpiwUTvtLR +B9LfWvzvUUHJSTyJAJUDBRBJXFY9wZwdJRLTRh0BAcrBBACYcnhE8cx5eA8WqTR4 +2CVZgxxrIMOrqda+hdpSgsRjUEWRpb5+Es1hfM3OLXqbsywCTUvxeoymVYQr3aSP +sbm+rQ4l6gf7ibpiVZA6vDxh0EfwNYE+aI3AoW03ODoCAaj+utOjGdqzIcec0RpS +zXPI1gWW3sBck95KsiDUYmXYTIkAlQMFEElcVkzvWJZk1DLhnQEByUIEAKOdWew/ +M75xyVbugMGUZnAJrTZPKu9y3V3TLqyET3rGYfLjt6M4R+99j+mkhmi2rOckM9VV +30kvjW9BBarnr13XoMVTtLneoLaVrbMw4aZHRkTdRL14LIj+w1jzEKXDwYylJbGZ +UlmZn7lFkJrLIaBDmQl7GswBJRJvFLQbdzzMiQCVAwUQSVxWVW9Sk9ijm6ZVAQHr +DQP9ECF56TGI8YRPVOzZJzUyOmiMAouRoJ74aWfM8TA2Q8gVtedDc6IHiNzcVjq4 +jOZuMgb1KTPPF/TwWL5MHIFldsMdJ/i0Rml+x4h3Ff+8ZYlJgFBylUmx++nW1rbc +nn9RS/Es+zKsDOnTN5fTFo3br1z2saLnuXNB+SuJmSC8i2CJAJUDBRBJXFZgnBy9 +4uNcVjUBAcdaA/9ur7HbueufNbvr0HoDbhBijagbeqRrzmYtsOtYUfBGEtc5JiNH +r7NIAM66Tog8p9ZZA+qOaGHvujecBOTlokLpPKvcQngOz7c53z3Yop90TnMytUL2 +IExcuCdH4BMy72R5nH5YY5pMqb7pFjcyGDDIM8cxMgbZ3gzvbPDHZMUQ6okAlQMF +EElcVmc4IttHzDdPLQEBJ/0EANME79+Z/BItRKlSgzH52JBGGQZrZi57Pz+hJ+du +K7RgSkhpsXnk1kELvig5TCd2YaDZXoZwUrJLObVKAMI4lpGNTkZlzRRrFXcx4Q14 +YPJ/nay5jkqHvR9neKTsifzdsPVLi9nUDBMtURIQo5yn5AYMloiDzw/HpNGvkk92 +ITqwiQCVAwUQSVxWbolpYrhnjAoDAQHLDgP+L+Od/CoHaVUpsZld1SJKwvelIe1S +wT8SBqppQyDbKw0ZczetUSASt+g8OqJKD88I2no5mjEmHx0lncoKJ06qxpJBIu7A +lbByeE9i8Bn52YKhPGka4AwA3DOm5yR967BncOf/zY65t83hocZL1uKQeHW8wnpR +x3o+RBz2354phxyJAJUDBRBJXFZ2IYPhsTlvB4kBARKHA/sHFkKAvCo5Hto2CJWF +gyBCJUsUuHCaQTkfL4IspkIBjmrsr2KKe0WQUqIlebhhWzVhgYsc8AXZil+pLahC +L9CNQVQpoPKD3mit2+Vsi8254QxQjeYD3jUQT1C6uq6l9IORdIxYah9DNBNHCgwX +PuTMmpU1JQj6haKhGa1kbaQq2IkAlQMFEElcVn3I1e0plfYXcQEB2TYD+wYXb+sU +0vmG51lVWj2BPMvv/lbfzU6KnqXNCD2ra0yu6C83WHNFXEz+JuLYlzLnaKm8DJI/ +SFBZZIxpUaoaFHyGrjbWrDI6oMfvp/dMnJjfibNbmZuVIl2z0TKO98jiJ/+/9e/5 +AtCsSFfyZ6FSTtAHbG1ZOJvhPBub9aELiUCiiQCVAwUQSVxWknCgJE0e+ZJRAQHz +NQP7BYHJwViDWqp9c5DmxM6vHrVq/wsDyPgm52+QpopErCRt2iTpocldHQG/9ZdE +0ENn6PhI49xobh+m0HfoZZ+Cr4LPU7g2ftmEtrxtDN1BYdNQHZLZStUp7A8SsLgL +2IvYSI9iKAmQoWQTAOECDD41o1BOnnM1eraeUyqdmZaFm8iJAJUDBRBJXFaZHnuz +yK+VliUBAVgdBACmbsAKzbNnvfaTCJxqhaJI5uNDCdH7rgoCHEJR4aefPY89Do7b +ixLCyW4wUr7pxqvf/xbEGJHNCG5WnmncXBCnoEVqmHb7J9vQw1o3K6pRPqtTjVBR +VEUUK4xe6ZIOft3FOI5fKAPO5Vc9NlxPDjSJcjR6+B//TpecZ2L9A/Dp+4kAlQMF +EElcVqGXQwEYcJO4QQEBl1YD/AsMu6g/4KiwelIz2rDzm4wzvsQm+cYm47hv2IHV +Fkx5f8mS6um39+4J/FHni7i2bfSuHpRn1RdURR7Gebu7HKYfGTNLNYyKt7U/6VFb +ylDxUTS32sier3GlDrlJrBQ+VDIG4dUaioKoKUXxBhEVzAZrvkYhaiGWIl/K4zz5 +C1qdiQCVAwUQSVxWqdiq8Mr2swcpAQFzwgP9FJOM0MysHIjq/KihatPjerxhud6j +bd1Zo/tIKybvPsJNaeTeR+0IKm+vbAWtYL5oBc2wxgdQAs8tUi5SryK1otMAJ6sj +KNN+QxIp2FEumzReGRo+hCETiusjD9Abbh1L9L7FOkhGhH+m6fBVQIYUytmMFpnQ +qn17I9DVPxpwob+JAJUDBRBJXFa9wCnKQBb0zOkBAd0BA/9yRRB2waP3duE2rYKF +Obsbs3XXOQHEl/rjpIHVmYIqqRSglmlTEXwjKJeCEN9q0PRiazhztEhVJWP8ORRP +fkjlscP25T4A4tMC1F49biMak5MI2ffawVkUVsjIWFF/vFQIqKl4JG8SI/r4Oxep +yaozkowCJX3zZtkEfB2Id1nU9IkAlQMFEElcV0e92o/WP+p9/QEBxQID/R4E3pRI +isTe5RJotQKcsQKo3y+8KkmvfZQ6d3h/n4anq6bs1rRrWKqL6XoM7Nc5teLR3QaW +CVTssPtt3P06WqMm8Ct25iZ8dIyqRN0d0k5dJ6d5Qp4WSCL0TmTQ7wO4q9aCOhGK +YFKCP3i2v8zCOhuqk2pLeOYxl6f912COvmwSiQCVAwUQSVxXVXxLZ22gDhVjAQFU +WAP/TjyHxNVsptLRcFRfMCi9fjkrftbma00pzIaj9d6Ybxt6nMQ8C8TCTrurkXpq +9kGIrFVndsovql8++Y9VsDeh/vLX65mZl8FEVFvbl38+YSYeB44upadibU6uB0iL +zFz6da6gZmm/NENX3UCldIWv35L33EFotQ9GxTn8b0MQnY2JAJUDBRBJXFdl1uCh +/k++Kt0BAQ39BACfVZaig8loIuKosYh5Ydcefe0NZTZOCgPZ+mAzShEeBIN/btA0 ++jMXfu6tEgqUKQnyKCXZcPoZwY9Y0hOqGT2AIkWmZHJ/uKrzXIAcwUTS0TQV1k5x +mHPkZmvr55JDYp/JIbxIZ8QTpTuEzlymow12qMOUhPkL/wOQET9duDMKzokAlQMF +EEli68zPHrUDIjJ6AQEBzacD/RPBzReBSsVar0+B4xEW0i11LKV2Q7gH+y256IDX +3SxML4+GZM9FmEMVhlTbHPOE2rfwFvLrMxCmIqGHjMccJRZpV9OFpXa8z15FRDmJ +U01qOITDcIAiIPgGamifxMOYG4+spaj2sxLGnY/6aowhjh1XNbQPuJ6laNq7bz50 +wzfu +=RCyv +-----END PGP PUBLIC KEY BLOCK----- + +Type Bits KeyID Created Expires Algorithm Use +pub 1024 0xF6B30729 2008-01-18 ---------- RSA Sign & Encrypt +f16 Fingerprint16 = 07 FB 9A F9 F7 94 4B E4 0F 28 D1 8E 23 6F A2 B0 +uid Sendmail Signing Key/2008 + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.8 (Darwin) + +mQCNA0eP9NsAAAEEAM5xPc5UXm01Mnqad8NPc5RkbeWcotxNOZXwrz4qQM6sr/E2 +lEMGgo5FOjWJX3tjtys8gfXZJihz3XMD5RleniW3RIhc2tbTJotNq9Qq9+LmiuBs +lT32O3ZSKsQtHQSfZ0j2bIabC/aQ4Dhfz13wz7x6VvRGwDbX3Niq8Mr2swcpAAUR +tDFTZW5kbWFpbCBTaWduaW5nIEtleS8yMDA4IDxzZW5kbWFpbEBTZW5kbWFpbC5P +Ukc+iQCVAwUQR4/029iq8Mr2swcpAQGa3QP+O6q/DvRLzM03AwIrEPRjdswejima +4BjKYYVQ1Qa7m4pyQeY/0CJScqu5A7p+kCrLqznmHu5aeezvjZy1mW7OCScPrCN9 +yC3IJdu7oX6mGZwPdUnsEyJvtHmiRXkumJtncmhcTZyplmt9ZDHVADQUQWRnyuex +oToSOeMPjS8YBpSJAJUDBRBHj/Xol0MBGHCTuEEBAYnzBAC5U2c8RtxNwwV4wh7V +Q4isNyXcYqUlUL5ZjtsP5+vuHz4d1CtT/tD4jGagy6J30xUuwUcF7AlNLIcn4z98 +GqF/aMCANut3dpGbzzvLYg+SkKkrZKH6fF4QPbdotp8NWKeiihoqD+hD6sVNc3zZ +/JymsmD1T346VpRTwKf4JzkJG4kAlQMFEEeP9hEee7PIr5WWJQEBP1sD/3I5VeiC +lW9fmwaAyOt/BrPIfsieL2TLysXCQbXFObNqqdR9APPlmQAtFdERjopQZu+VKvZd +pInWGaIegibPr4ZyGHmGxmJwYyHCt0MNvjY2oA1WPVRvXz2dno7Q5SFDR0sQaFKe +4knKfzGu8fngy//R1vlO+UE3vTQ3cgTaIpDsiQCVAwUQR4/2GXCgJE0e+ZJRAQEH +6QP9FVDSFnXCSPy+tNFlLhtpjVOEqREG30iezAVZlx+yJVSb3/sG0LRCvXB1w3td +jzW7A1iCvEQVb1yuNSFPb6Dq7TKoSpS8XZyCIetCpzab06D319Ubfcs2lHaDioY6 +ibSaysDrBDETyXg1eQBIUQ+9iltfkI6HRpm5vgz8d4iwieqJAJUDBRBHj/YgyNXt +KZX2F3EBASjtBACNzoDfjET153Zd3PQlj2X6b9BzjS8XHsjMuo+F04u9o3g78MSt ++g2HW5Xi1ORh/LFSrkK7Qi9jLREr3dKQM9jjhfvxidN80H8jNyUIUJ3d1/K123rP +z7GuXhXCfDCq/tjveUiVkoxQ1Q5h2OsXKqC0p7C7qpXKTg2CHLdbYTg/rIkAlQMF +EEeP9mAhg+GxOW8HiQEBRpAEAI9MQwE6xoG08vdkrn8/tZEfK/h3zc3UgT5sjME3 +NPbWD9o0W/KlIA7JKIpIYbX1M3GgGU5rlWmFyuRD5XVvu4NJ761PXAHenhg3wEk9 +TySAwH7Edlhr0M1goALxpjiAzrh+hc0x2rz2jMcuRQlSh19MMe9sc9pDgUaXl7QJ +Z51oiQCVAwUQR4/2colpYrhnjAoDAQHWPAP6AlqqzMhKJtWxVP4k10r06MwuUkOn +tAeuPL4semoKb8lTtuBG14vADXsoavifuq2iv4KQCncGn3yWglCUjG46DKLluZyG +uWjE44PEEiIs1zYzWo9F1Nw2C5VDR41/rzLqNctqr+bXac0lO3aRLgW1SkqJLI41 +M+yXMYkf99dM4cuJAJUDBRBHj/Z6OCLbR8w3Ty0BAUwaBACH9QViBa/sejJULNu8 +3i8B5tq0HOKvAzAQp/a79MxdFnhL8XrIhsTrprh3+/JvljrWLkfMe2tsVBTdTMJf +snjjCijgtuCKaR5ESyu1Kl2E8mhp1A032LWRYYrxSyJqklqNem4HeZAN4N1CzMoS +Iw5ELNeocuNmkBQn1xmkMYXiC4kAlQMFEEeP9pKcHL3i41xWNQEBqjgD/i9sEpQo +0YTW77za+n2rQD3141UZwql/F4cO0ds4sLSwJ3h4Ba8OkATHU1W2LbpogvpfvL6B +1H+4D7vo/VY/fSiNGUb8TjZfcj65ACToYokxK6PwBHL85jaWGh83kMS8pYDBL7zP +sJ3sCyayKwAXOFpT7doaZU5FsC7tNMwlnRCuiQCVAwUQR4/2t29Sk9ijm6ZVAQGP +TQP/Qbj1ZsqZfQn+7SXPmW0Y9+xUUQ351ecD1UX3yhuL195djP/O7ebeTiCBFkaG +gWfMZtNCtaPQr1BhXBF9Xkum4IseUlRz1mTsdrhbAVtL6mGWMYcxQFTx13pHiGYS +IaJhc+XQIxc7wmfW2LjOZpcHi0E2dhcjMEoWZGyEzKI/cJ2JAJUDBRBHj/bE71iW +ZNQy4Z0BAe8aA/4oiv/MRmiRdDrVY8kTIZWb4whGYLqKEScOEuqir0PrMtyEUkzP +YpkM1u3Cf4+zbtmgN16sx6DfyHAVGyI0U14hvnQhuVrrBs23dxGj2iciu14BvNJU +YVaAoAWSp8qA14fDOAGd1H/InQmDZJrAiH61wQwjLrU1oI44Dr+55KHgO4kAlQMF +EEeP9s3BnB0lEtNGHQEBxk4D/2WTAGSVuwDUGeIaHM1NVrgRcFFqrz37farxYNKx +7jZ1EqJXZXTqtSAUVc5LB8ko7V0P8w7CLso3Jj3hvFdYOt+6howpI/FO1Ur6RbTC +ik6RUMbHRvIxpcTzZvRmWlMGcMdJFcCxsliOG7cyjpeuisaGJFIhyqfpAdqMKRn2 +jOrqiQCVAwUQR4/5GcApykAW9MzpAQFuCgQAjaPwttPvJNegPa/KqZFVVO/VDaRm +9Aeiktw8lWlTE7BJ9SIePdsTEbKIzER/gVt85bOptJo6xpXaodoIjXWiSD+PHbdz +tuEp88zv0B0mJcKSRIPt/u+baAgR2dKR1jlNvEjbpCm9rei+vqRNREpdrk32ls5d +VwtrkbnFDuzLcgKJAJUDBRBHj/r11uCh/k++Kt0BAQvcBACq594Jrh+y+Pqf4bCL +8LrBqspvPL9MTMWDdwWvT7Yoaa+cyApuUWqpkyh8alWAwxnJmyw9I14zBr219862 +0Rb1oCo2TDL/pMz8WVpyjD0RIxs4FcoJODD52kYxhLadKk0OrCXfrpWvIcp4sRJa +kOWK3QzpD/0NtFJLZ+BnNq39h4kAlQMFEEeP+wK92o/WP+p9/QEBtVID/1AxNsk7 +/ktDwz/khcTsCLILgtuKh+7jZa6K8FhhoqNXbjyUhZYjGne6No72KJ52P6P7iPLu +SPDOmhu+z0kNTTm0KsWRSzQeUD08qyoB3qNcdxcRgAOJHl0MCXUwSxumfBb4iJq2 +5282RCnsKroyWAhV8KjoJer1hTKCsu58Lqrv +=jDs3 +-----END PGP PUBLIC KEY BLOCK----- + Type Bits KeyID Created Expires Algorithm Use pub 1024 0x7093B841 2006-12-16 ---------- RSA Sign & Encrypt f16 Fingerprint16 = D9 FD C5 6B EE 1E 7A A8 CE 27 D9 B9 55 8B 56 B6 @@ -1729,4 +1865,4 @@ DnF3FZZEzV7oqPwC2jzv/1dD6GFhtgy0cnyoPGUJCyc= =nES8 -----END PGP PUBLIC KEY BLOCK----- -$Revision: 8.25 $, Last updated $Date: 2007/01/02 22:38:08 $ +$Revision: 8.29 $, Last updated $Date: 2009/01/06 05:59:03 $ diff --git a/contrib/sendmail-8.14/README b/contrib/sendmail-8.14/README index b0c25e5b74..8175b1a879 100644 --- a/contrib/sendmail-8.14/README +++ b/contrib/sendmail-8.14/README @@ -38,6 +38,7 @@ the latest updates. 4. Read cf/README. Sendmail is a trademark of Sendmail, Inc. +US Patent Numbers 6865671, 6986037. +-----------------------+ | DIRECTORY PERMISSIONS | @@ -312,7 +313,7 @@ nicer to animals and plants. If the Berkeley DB include files are installed in a location other than those which your compiler searches, you will need to provide that directory when building: - Build -I/path/to/include/directory + ./Build -I/path/to/include/directory If you are using Berkeley DB versions 1.85 or 1.86, you are *strongly* urged to upgrade to DB version 2 or later, available from @@ -464,4 +465,4 @@ sendmail Source for the sendmail program itself. test Some test scripts (currently only for compilation aids). vacation Source for the vacation program. NOT PART OF SENDMAIL! -$Revision: 8.93 $, Last updated $Date: 2005/09/16 20:08:50 $ +$Revision: 8.95 $, Last updated $Date: 2009/04/10 17:49:18 $ diff --git a/contrib/sendmail-8.14/README.DRAGONFLY b/contrib/sendmail-8.14/README.DRAGONFLY new file mode 100644 index 0000000000..987e73e643 --- /dev/null +++ b/contrib/sendmail-8.14/README.DRAGONFLY @@ -0,0 +1,39 @@ + + SENDMAIL-8.14.4 AS USED BY DRAGONFLY + + This distribution was downloaded from the following site: + + ftp://ftp.sendmail.org/pub/sendmail/ + + MD5 (sendmail.8.14.4.tar.gz) = 1b23d5000c8e7bfe82ec1a27f2f5fdc5 + SHA1 (sendmail.8.14.4.tar.gz) = ba192f9a5114437aaec952f503fa2f09ee6dbe57 + + DO NOT CREATE OR EDIT ANY FILES IN THIS DIRECTORY HIERARCHY! THIS + HIERARCHY REPRESENTS AN EXACT COPY OF THE ORIGINAL ARCHIVE. All + modifications are made in the DragonFly build wrapper, in: + + bin/rmail/Makefile + etc/mail/Makefile + etc/sendmail/Makefile + lib/libmilter/Makefile + lib/libsm/Makefile + lib/libsmdb/Makefile + lib/libsmutil/Makefile + libexec/mail.local/Makefile + libexec/smrsh/Makefile + share/doc/smm/08.sendmailop/Makefile + share/sendmail/Makefile + usr.bin/vacation/Makefile + usr.sbin/editmap/Makefile + usr.sbin/mailstats/Makefile + usr.sbin/makemap/Makefile + usr.sbin/praliases/Makefile + usr.sbin/sendmail/Makefile + usr.sbin/mailwrapper/Makefile + + The only additional file added to this directory is README.DRAGONFLY. + + UPGRADE PROCEDURE: + + Download new sendmail distribution and follow development(7) + description on vendor branches. diff --git a/contrib/sendmail-8.14/RELEASE_NOTES b/contrib/sendmail-8.14/RELEASE_NOTES index 8a0b51c344..4e1e8f3830 100644 --- a/contrib/sendmail-8.14/RELEASE_NOTES +++ b/contrib/sendmail-8.14/RELEASE_NOTES @@ -1,11 +1,132 @@ SENDMAIL RELEASE NOTES - $Id: RELEASE_NOTES,v 8.1909 2007/10/31 16:04:13 ca Exp $ + $Id: RELEASE_NOTES,v 8.1963 2009/12/23 04:43:46 ca Exp $ This listing shows the version of the sendmail binary, the version of the sendmail configuration files, the date of release, and a summary of the changes in that release. +8.14.4/8.14.4 2009/12/30 + SECURITY: Handle bogus certificates containing NUL characters + in CNs by placing a string indicating a bad certificate + in the {cn_subject} or {cn_issuer} macro. Patch inspired + by Matthias Andree's changes for fetchmail. + During the generation of a queue identifier an integer overflow + could occur which might result in bogus characters + being used. Based on patch from John Vannoy of + Pepperdine University. + The value of headers, e.g., Precedence, Content-Type, et.al., + was not processed correctly. Patch from Per Hedeland. + Between 8.11.7 and 8.12.0 the length limitation on a return + path was erroneously reduced from MAXNAME (256) to + MAXSHORTSTR (203). Patch from John Gardiner Myers + of Proofpoint; the problem was also noted by Steve + Hubert of University of Washington. + Prevent a crash when a hostname lookup returns a seemingly + valid result which contains a NULL pointer (this seems + to be happening on some Linux versions). + The process title was missing the current load average when + the MTA was delaying connections due to DelayLA. + Patch from Dick St.Peters of NetHeaven. + Do not reset the number of queue entries in shared memory if + only some of them are processed. + Fix overflow of an internal array when parsing some replies + from a milter. Problem found by Scott Rotondo + of Sun Microsystems. + If STARTTLS is turned off in the server (via M=S) then it + would not be initialized for use in the client either. + Patch from Kazuteru Okahashi of IIJ. + If a Diffie-Hellman cipher is selected for STARTTLS, the + handshake could fail with some TLS implementations + because the prime used by the server is not long enough. + Note: the initialization of the DSA/DH parameters for + the server can take a significant amount of time on slow + machines. This can be turned off by setting DHParameters + to none or a file (see doc/op/op.me). Patch from + Petr Lampa of the Brno University of Technology. + Fix handling of `b' modifier for DaemonPortOptions on little + endian machines for loopback address. Patch from + John Beck of Sun Microsystems. + Fix a potential memory leak in libsmdb/smdb1.c found by parfait. + Based on patch from Jonathan Gray of OpenBSD. + If a milter sets the reply code to "421" during the transfer + of the body, the SMTP server will terminate the SMTP session + with that error to match the behavior of the other callbacks. + Return EX_IOERR (instead of 0) if a mail submission fails due to + missing disk space in the mail queue. Based on patch + from Martin Poole of RedHat. + CONFIG: Using FEATURE(`ldap_routing')'s `nodomain' argument would + cause addresses not found in LDAP to be misparsed. + CONFIG: Using a CN restriction did not work for TLS_Clt as it + referred to a wrong macro. Patch from John Gardiner + Myers of Proofpoint. + CONFIG: The option relaytofulladdress of FEATURE(`access_db') + did not work if FEATURE(`relay_hosts_only') is used too. + Problem noted by Kristian Shaw. + CONFIG: The internal function lower() was broken and hence + strcasecmp() did not work either, which could cause + problems for some FEATURE()s if upper case arguments + were used. Patch from Vesa-Matti J Kari of the + University of Helsinki. + LIBMILTER: Fix internal check whether a milter application + is compiled against the same version of libmilter as + it is linked against (especially useful for dynamic + libraries). + LIBMILTER: Fix memory leak that occurred when smfi_setsymlist() + was used. Based on patch by Dan Lukes. + LIBMILTER: Document the effect of SMFIP_HDR_LEADSPC for filters + which add, insert, or replace headers. From Benjamin + Pineau. + LIBMILTER: Fix error messages which refer to "select()" to be + correct if SM_CONF_POLL is used. Based on patch from + John Nemeth. + LIBSM: Fix handling of LDAP search failures where the error is + carried in the search result itself, such as seen with + OpenLDAP proxy servers. + VACATION: Do not refer to a local variable outside its scope. + Based on patch from Mark Costlow of Southwest Cyberport. + Portability: + Enable HAVE_NANOSLEEP for SunOS 5.11. Patch from + John Beck of Sun Microsystems. + Drop NISPLUS from default SunOS 5.11 map definitions. + Patch from John Beck of Sun Microsystems. + +8.14.3/8.14.3 2008/05/03 + During ruleset processing the generation of a key for a map + lookup and the parsing of the default value was broken + for some macros, e.g., $|, which caused the BlankSub + character to be inserted into the workspace and thus + failures, e.g., rules that should have matched did not. + 8.14.2 caused a regression: it accessed (macro) storage which was + freed before. First instance of the problem reported by + Matthew Dillon of DragonFlyBSD; variations of the same + bug reported by Todd C. Miller of OpenBSD, Moritz + Jodeit, and Dave Hayes. + Improve pathname length checks for persistent host status. Patch + from Joerg Sonnenberger of DragonFlyBSD. + Reword misleading SMTP reply text for FEATURE(`badmx'). Problem + noted by Beth Halsema. + The read timeout was fixed to be Timeout.datablock if STARTTLS + was activated. This may cause problems if that value + is lowered from its default. Problem noted by Jens Elkner. + CONFIG: Using LOCAL_TLS_CLIENT caused the tls_client ruleset + to operate incorrectly. Problem found by Werner Wiethege. + LIBMILTER: Omitting some protocol steps via the xxfi_negotiate() + callback did not work properly. The patchlevel of + libmilter has been set to 1 so a milter can determine + whether libmilter contains this fix. + MAKEMAP: If a delimiter is specified (-t) use that also when + dumping a map. Patch from Todd C. Miller of OpenBSD. + Portability: + Add support for Darwin 9.x (Mac OS X 10.5). + Support shared libraries in Darwin 8 and 9. Patch from + Chris Behrens of Concentric. + Add support for SCO OpenServer 6, patch from Boyd Gerber. + DEVTOOLS: Clarify that confSHAREDLIBDIR requires a trailing slash. + Added Files: + devtools/OS/Darwin.9.x + devtools/OS/OSR.i386 + 8.14.2/8.14.2 2007/11/01 If a message was queued and it contained 8 bit characters in a From: or To: header, then those characters could be @@ -24,7 +145,7 @@ summary of the changes in that release. Prior to 8.14 this happened only if milter could delete recipients. ClientRate should trigger when the limit was exceeded (as - documented), not when it was reached. Patch from + documented), not when it was reached. Patch from John Beck of Sun Microsystems. Force a queue run for -qGqueuegroup even if no runners are specified (R=0) and forking (F=f) is requested. diff --git a/contrib/sendmail-8.14/cf/README b/contrib/sendmail-8.14/cf/README index 81689ad800..e3496e927b 100644 --- a/contrib/sendmail-8.14/cf/README +++ b/contrib/sendmail-8.14/cf/README @@ -1008,7 +1008,9 @@ virtusertable A domain-specific form of aliasing, allowing multiple MASQUERADE_DOMAIN_FILE, see below). If VIRTUSER_DOMAIN or VIRTUSER_DOMAIN_FILE is used, then the entries of class {VirtHost} are added to class {R}, i.e., relaying is allowed - to (and from) those domains. The default map definition is: + to (and from) those domains, which by default includes also + all subdomains (see relay_hosts_only). The default map + definition is: hash /etc/mail/virtusertable @@ -3140,7 +3142,7 @@ starts with '+' and the items are separated by '++'. Allowed extensions are: CN:name name must match ${cn_subject} -CN ${server_name} must match ${cn_subject} +CN ${client_name}/${server_name} must match ${cn_subject} CS:name name must match ${cert_subject} CI:name name must match ${cert_issuer} @@ -4699,4 +4701,4 @@ M4 DIVERSIONS 8 DNS based blacklists 9 special local rulesets (1 and 2) -$Revision: 8.722 $, Last updated $Date: 2007/04/03 21:26:58 $ +$Revision: 8.727 $, Last updated $Date: 2009/05/07 23:46:17 $ diff --git a/contrib/sendmail-8.14/cf/cf/generic-bsd4.4.cf b/contrib/sendmail-8.14/cf/cf/generic-bsd4.4.cf index a894b91069..c681756e57 100644 --- a/contrib/sendmail-8.14/cf/cf/generic-bsd4.4.cf +++ b/contrib/sendmail-8.14/cf/cf/generic-bsd4.4.cf @@ -1,5 +1,5 @@ # -# Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers. +# Copyright (c) 1998-2004, 2009 Sendmail, Inc. and its suppliers. # All rights reserved. # Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved. # Copyright (c) 1988, 1993 @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@nother.smi.sendmail.com on Wed Oct 31 09:24:27 PDT 2007 -##### in /extra/home/ca/sm-8.14.2/OpenSource/sendmail-8.14.2/cf/cf +##### built by ca@wiz.smi.sendmail.com on Tue Dec 22 20:49:08 PST 2009 +##### in /extra/home/ca/sm-8.14.4/OpenSource/sendmail-8.14.4/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -27,7 +27,7 @@ ###################################################################### ###################################################################### -##### $Id: cfhead.m4,v 8.116 2004/01/28 22:02:22 ca Exp $ ##### +##### $Id: cfhead.m4,v 8.120 2009/01/23 22:39:21 ca Exp $ ##### ##### $Id: cf.m4,v 8.32 1999/02/07 07:26:14 gshapiro Exp $ ##### ##### $Id: generic-bsd4.4.mc,v 8.10 1999/02/07 07:26:02 gshapiro Exp $ ##### @@ -41,7 +41,7 @@ -##### $Id: proto.m4,v 8.732 2007/04/20 00:53:30 ca Exp $ ##### +##### $Id: proto.m4,v 8.741 2009/12/11 00:04:53 ca Exp $ ##### # level 10 config file format V10/Berkeley @@ -122,7 +122,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.14.2 +DZ8.14.4 ############### @@ -448,6 +448,7 @@ O OperatorChars=.:%@!^/[]+ # once the threshold number of recipients have been rejected #O BadRcptThrottle=0 + # shall we get local names from our installed interfaces? #O DontProbeInterfaces=False @@ -508,6 +509,7 @@ O MaxHeadersLength=32768 # SMTP STARTTLS server options #O TLSSrvOptions + # Input mail filters #O InputMailFilters diff --git a/contrib/sendmail-8.14/cf/cf/generic-hpux10.cf b/contrib/sendmail-8.14/cf/cf/generic-hpux10.cf index be3d11069f..3375295dfb 100644 --- a/contrib/sendmail-8.14/cf/cf/generic-hpux10.cf +++ b/contrib/sendmail-8.14/cf/cf/generic-hpux10.cf @@ -1,5 +1,5 @@ # -# Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers. +# Copyright (c) 1998-2004, 2009 Sendmail, Inc. and its suppliers. # All rights reserved. # Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved. # Copyright (c) 1988, 1993 @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@nother.smi.sendmail.com on Wed Oct 31 09:24:27 PDT 2007 -##### in /extra/home/ca/sm-8.14.2/OpenSource/sendmail-8.14.2/cf/cf +##### built by ca@wiz.smi.sendmail.com on Tue Dec 22 20:49:08 PST 2009 +##### in /extra/home/ca/sm-8.14.4/OpenSource/sendmail-8.14.4/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -27,7 +27,7 @@ ###################################################################### ###################################################################### -##### $Id: cfhead.m4,v 8.116 2004/01/28 22:02:22 ca Exp $ ##### +##### $Id: cfhead.m4,v 8.120 2009/01/23 22:39:21 ca Exp $ ##### ##### $Id: cf.m4,v 8.32 1999/02/07 07:26:14 gshapiro Exp $ ##### ##### $Id: generic-hpux10.mc,v 8.13 2001/05/29 17:29:52 ca Exp $ ##### @@ -42,7 +42,7 @@ -##### $Id: proto.m4,v 8.732 2007/04/20 00:53:30 ca Exp $ ##### +##### $Id: proto.m4,v 8.741 2009/12/11 00:04:53 ca Exp $ ##### # level 10 config file format V10/Berkeley @@ -123,7 +123,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.14.2 +DZ8.14.4 ############### @@ -449,6 +449,7 @@ O OperatorChars=.:%@!^/[]+ # once the threshold number of recipients have been rejected #O BadRcptThrottle=0 + # shall we get local names from our installed interfaces? #O DontProbeInterfaces=False @@ -509,6 +510,7 @@ O MaxHeadersLength=32768 # SMTP STARTTLS server options #O TLSSrvOptions + # Input mail filters #O InputMailFilters diff --git a/contrib/sendmail-8.14/cf/cf/generic-hpux9.cf b/contrib/sendmail-8.14/cf/cf/generic-hpux9.cf index bd9f7aea70..92be3b6be0 100644 --- a/contrib/sendmail-8.14/cf/cf/generic-hpux9.cf +++ b/contrib/sendmail-8.14/cf/cf/generic-hpux9.cf @@ -1,5 +1,5 @@ # -# Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers. +# Copyright (c) 1998-2004, 2009 Sendmail, Inc. and its suppliers. # All rights reserved. # Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved. # Copyright (c) 1988, 1993 @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@nother.smi.sendmail.com on Wed Oct 31 09:24:27 PDT 2007 -##### in /extra/home/ca/sm-8.14.2/OpenSource/sendmail-8.14.2/cf/cf +##### built by ca@wiz.smi.sendmail.com on Tue Dec 22 20:49:08 PST 2009 +##### in /extra/home/ca/sm-8.14.4/OpenSource/sendmail-8.14.4/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -27,7 +27,7 @@ ###################################################################### ###################################################################### -##### $Id: cfhead.m4,v 8.116 2004/01/28 22:02:22 ca Exp $ ##### +##### $Id: cfhead.m4,v 8.120 2009/01/23 22:39:21 ca Exp $ ##### ##### $Id: cf.m4,v 8.32 1999/02/07 07:26:14 gshapiro Exp $ ##### ##### $Id: generic-hpux9.mc,v 8.11 1999/02/07 07:26:02 gshapiro Exp $ ##### @@ -42,7 +42,7 @@ -##### $Id: proto.m4,v 8.732 2007/04/20 00:53:30 ca Exp $ ##### +##### $Id: proto.m4,v 8.741 2009/12/11 00:04:53 ca Exp $ ##### # level 10 config file format V10/Berkeley @@ -123,7 +123,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.14.2 +DZ8.14.4 ############### @@ -449,6 +449,7 @@ O OperatorChars=.:%@!^/[]+ # once the threshold number of recipients have been rejected #O BadRcptThrottle=0 + # shall we get local names from our installed interfaces? #O DontProbeInterfaces=False @@ -509,6 +510,7 @@ O MaxHeadersLength=32768 # SMTP STARTTLS server options #O TLSSrvOptions + # Input mail filters #O InputMailFilters diff --git a/contrib/sendmail-8.14/cf/cf/generic-linux.cf b/contrib/sendmail-8.14/cf/cf/generic-linux.cf index b3220d23a0..cdb635f64a 100644 --- a/contrib/sendmail-8.14/cf/cf/generic-linux.cf +++ b/contrib/sendmail-8.14/cf/cf/generic-linux.cf @@ -1,5 +1,5 @@ # -# Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers. +# Copyright (c) 1998-2004, 2009 Sendmail, Inc. and its suppliers. # All rights reserved. # Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved. # Copyright (c) 1988, 1993 @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@nother.smi.sendmail.com on Wed Oct 31 09:24:27 PDT 2007 -##### in /extra/home/ca/sm-8.14.2/OpenSource/sendmail-8.14.2/cf/cf +##### built by ca@wiz.smi.sendmail.com on Tue Dec 22 20:49:08 PST 2009 +##### in /extra/home/ca/sm-8.14.4/OpenSource/sendmail-8.14.4/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -27,7 +27,7 @@ ###################################################################### ###################################################################### -##### $Id: cfhead.m4,v 8.116 2004/01/28 22:02:22 ca Exp $ ##### +##### $Id: cfhead.m4,v 8.120 2009/01/23 22:39:21 ca Exp $ ##### ##### $Id: cf.m4,v 8.32 1999/02/07 07:26:14 gshapiro Exp $ ##### ##### $Id: generic-linux.mc,v 8.1 1999/09/24 22:48:05 gshapiro Exp $ ##### @@ -46,7 +46,7 @@ -##### $Id: proto.m4,v 8.732 2007/04/20 00:53:30 ca Exp $ ##### +##### $Id: proto.m4,v 8.741 2009/12/11 00:04:53 ca Exp $ ##### # level 10 config file format V10/Berkeley @@ -127,7 +127,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.14.2 +DZ8.14.4 ############### @@ -453,6 +453,7 @@ O OperatorChars=.:%@!^/[]+ # once the threshold number of recipients have been rejected #O BadRcptThrottle=0 + # shall we get local names from our installed interfaces? #O DontProbeInterfaces=False @@ -513,6 +514,7 @@ O MaxHeadersLength=32768 # SMTP STARTTLS server options #O TLSSrvOptions + # Input mail filters #O InputMailFilters diff --git a/contrib/sendmail-8.14/cf/cf/generic-mpeix.cf b/contrib/sendmail-8.14/cf/cf/generic-mpeix.cf index 72f640803c..695ee879fc 100644 --- a/contrib/sendmail-8.14/cf/cf/generic-mpeix.cf +++ b/contrib/sendmail-8.14/cf/cf/generic-mpeix.cf @@ -1,5 +1,5 @@ # -# Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers. +# Copyright (c) 1998-2004, 2009 Sendmail, Inc. and its suppliers. # All rights reserved. # Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved. # Copyright (c) 1988, 1993 @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@nother.smi.sendmail.com on Wed Oct 31 09:24:27 PDT 2007 -##### in /extra/home/ca/sm-8.14.2/OpenSource/sendmail-8.14.2/cf/cf +##### built by ca@wiz.smi.sendmail.com on Tue Dec 22 20:49:08 PST 2009 +##### in /extra/home/ca/sm-8.14.4/OpenSource/sendmail-8.14.4/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -27,7 +27,7 @@ ###################################################################### ###################################################################### -##### $Id: cfhead.m4,v 8.116 2004/01/28 22:02:22 ca Exp $ ##### +##### $Id: cfhead.m4,v 8.120 2009/01/23 22:39:21 ca Exp $ ##### ##### $Id: cf.m4,v 8.32 1999/02/07 07:26:14 gshapiro Exp $ ##### ##### $Id: generic-mpeix.mc,v 8.1 2001/12/13 23:56:37 gshapiro Exp $ ##### @@ -42,7 +42,7 @@ -##### $Id: proto.m4,v 8.732 2007/04/20 00:53:30 ca Exp $ ##### +##### $Id: proto.m4,v 8.741 2009/12/11 00:04:53 ca Exp $ ##### # level 10 config file format V10/Berkeley @@ -123,7 +123,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.14.2 +DZ8.14.4 ############### @@ -449,6 +449,7 @@ O OperatorChars=.:%@!^/[]+ # once the threshold number of recipients have been rejected #O BadRcptThrottle=0 + # shall we get local names from our installed interfaces? #O DontProbeInterfaces=False @@ -509,6 +510,7 @@ O MaxHeadersLength=32768 # SMTP STARTTLS server options #O TLSSrvOptions + # Input mail filters #O InputMailFilters diff --git a/contrib/sendmail-8.14/cf/cf/generic-nextstep3.3.cf b/contrib/sendmail-8.14/cf/cf/generic-nextstep3.3.cf index 86b119858c..3a13c80951 100644 --- a/contrib/sendmail-8.14/cf/cf/generic-nextstep3.3.cf +++ b/contrib/sendmail-8.14/cf/cf/generic-nextstep3.3.cf @@ -1,5 +1,5 @@ # -# Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers. +# Copyright (c) 1998-2004, 2009 Sendmail, Inc. and its suppliers. # All rights reserved. # Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved. # Copyright (c) 1988, 1993 @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@nother.smi.sendmail.com on Wed Oct 31 09:24:27 PDT 2007 -##### in /extra/home/ca/sm-8.14.2/OpenSource/sendmail-8.14.2/cf/cf +##### built by ca@wiz.smi.sendmail.com on Tue Dec 22 20:49:08 PST 2009 +##### in /extra/home/ca/sm-8.14.4/OpenSource/sendmail-8.14.4/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -27,7 +27,7 @@ ###################################################################### ###################################################################### -##### $Id: cfhead.m4,v 8.116 2004/01/28 22:02:22 ca Exp $ ##### +##### $Id: cfhead.m4,v 8.120 2009/01/23 22:39:21 ca Exp $ ##### ##### $Id: cf.m4,v 8.32 1999/02/07 07:26:14 gshapiro Exp $ ##### ##### $Id: generic-nextstep3.3.mc,v 8.10 1999/02/07 07:26:02 gshapiro Exp $ ##### @@ -41,7 +41,7 @@ -##### $Id: proto.m4,v 8.732 2007/04/20 00:53:30 ca Exp $ ##### +##### $Id: proto.m4,v 8.741 2009/12/11 00:04:53 ca Exp $ ##### # level 10 config file format V10/Berkeley @@ -122,7 +122,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.14.2 +DZ8.14.4 ############### @@ -448,6 +448,7 @@ O OperatorChars=.:%@!^/[]+ # once the threshold number of recipients have been rejected #O BadRcptThrottle=0 + # shall we get local names from our installed interfaces? #O DontProbeInterfaces=False @@ -508,6 +509,7 @@ O MaxHeadersLength=32768 # SMTP STARTTLS server options #O TLSSrvOptions + # Input mail filters #O InputMailFilters diff --git a/contrib/sendmail-8.14/cf/cf/generic-osf1.cf b/contrib/sendmail-8.14/cf/cf/generic-osf1.cf index f64af8858a..05421a78e3 100644 --- a/contrib/sendmail-8.14/cf/cf/generic-osf1.cf +++ b/contrib/sendmail-8.14/cf/cf/generic-osf1.cf @@ -1,5 +1,5 @@ # -# Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers. +# Copyright (c) 1998-2004, 2009 Sendmail, Inc. and its suppliers. # All rights reserved. # Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved. # Copyright (c) 1988, 1993 @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@nother.smi.sendmail.com on Wed Oct 31 09:24:27 PDT 2007 -##### in /extra/home/ca/sm-8.14.2/OpenSource/sendmail-8.14.2/cf/cf +##### built by ca@wiz.smi.sendmail.com on Tue Dec 22 20:49:08 PST 2009 +##### in /extra/home/ca/sm-8.14.4/OpenSource/sendmail-8.14.4/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -27,7 +27,7 @@ ###################################################################### ###################################################################### -##### $Id: cfhead.m4,v 8.116 2004/01/28 22:02:22 ca Exp $ ##### +##### $Id: cfhead.m4,v 8.120 2009/01/23 22:39:21 ca Exp $ ##### ##### $Id: cf.m4,v 8.32 1999/02/07 07:26:14 gshapiro Exp $ ##### ##### $Id: generic-osf1.mc,v 8.11 1999/02/07 07:26:02 gshapiro Exp $ ##### @@ -42,7 +42,7 @@ -##### $Id: proto.m4,v 8.732 2007/04/20 00:53:30 ca Exp $ ##### +##### $Id: proto.m4,v 8.741 2009/12/11 00:04:53 ca Exp $ ##### # level 10 config file format V10/Berkeley @@ -123,7 +123,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.14.2 +DZ8.14.4 ############### @@ -449,6 +449,7 @@ O OperatorChars=.:%@!^/[]+ # once the threshold number of recipients have been rejected #O BadRcptThrottle=0 + # shall we get local names from our installed interfaces? #O DontProbeInterfaces=False @@ -509,6 +510,7 @@ O MaxHeadersLength=32768 # SMTP STARTTLS server options #O TLSSrvOptions + # Input mail filters #O InputMailFilters diff --git a/contrib/sendmail-8.14/cf/cf/generic-solaris.cf b/contrib/sendmail-8.14/cf/cf/generic-solaris.cf index 6278ba96df..ad473472df 100644 --- a/contrib/sendmail-8.14/cf/cf/generic-solaris.cf +++ b/contrib/sendmail-8.14/cf/cf/generic-solaris.cf @@ -1,5 +1,5 @@ # -# Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers. +# Copyright (c) 1998-2004, 2009 Sendmail, Inc. and its suppliers. # All rights reserved. # Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved. # Copyright (c) 1988, 1993 @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@nother.smi.sendmail.com on Wed Oct 31 09:24:27 PDT 2007 -##### in /extra/home/ca/sm-8.14.2/OpenSource/sendmail-8.14.2/cf/cf +##### built by ca@wiz.smi.sendmail.com on Tue Dec 22 20:49:08 PST 2009 +##### in /extra/home/ca/sm-8.14.4/OpenSource/sendmail-8.14.4/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -27,7 +27,7 @@ ###################################################################### ###################################################################### -##### $Id: cfhead.m4,v 8.116 2004/01/28 22:02:22 ca Exp $ ##### +##### $Id: cfhead.m4,v 8.120 2009/01/23 22:39:21 ca Exp $ ##### ##### $Id: cf.m4,v 8.32 1999/02/07 07:26:14 gshapiro Exp $ ##### ##### $Id: generic-solaris.mc,v 8.13 2001/06/27 21:46:30 gshapiro Exp $ ##### @@ -41,7 +41,7 @@ -##### $Id: proto.m4,v 8.732 2007/04/20 00:53:30 ca Exp $ ##### +##### $Id: proto.m4,v 8.741 2009/12/11 00:04:53 ca Exp $ ##### # level 10 config file format V10/Berkeley @@ -122,7 +122,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.14.2 +DZ8.14.4 ############### @@ -448,6 +448,7 @@ O OperatorChars=.:%@!^/[]+ # once the threshold number of recipients have been rejected #O BadRcptThrottle=0 + # shall we get local names from our installed interfaces? #O DontProbeInterfaces=False @@ -508,6 +509,7 @@ O MaxHeadersLength=32768 # SMTP STARTTLS server options #O TLSSrvOptions + # Input mail filters #O InputMailFilters diff --git a/contrib/sendmail-8.14/cf/cf/generic-sunos4.1.cf b/contrib/sendmail-8.14/cf/cf/generic-sunos4.1.cf index d098c3146f..b800e767f7 100644 --- a/contrib/sendmail-8.14/cf/cf/generic-sunos4.1.cf +++ b/contrib/sendmail-8.14/cf/cf/generic-sunos4.1.cf @@ -1,5 +1,5 @@ # -# Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers. +# Copyright (c) 1998-2004, 2009 Sendmail, Inc. and its suppliers. # All rights reserved. # Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved. # Copyright (c) 1988, 1993 @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@nother.smi.sendmail.com on Wed Oct 31 09:24:27 PDT 2007 -##### in /extra/home/ca/sm-8.14.2/OpenSource/sendmail-8.14.2/cf/cf +##### built by ca@wiz.smi.sendmail.com on Tue Dec 22 20:49:08 PST 2009 +##### in /extra/home/ca/sm-8.14.4/OpenSource/sendmail-8.14.4/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -27,7 +27,7 @@ ###################################################################### ###################################################################### -##### $Id: cfhead.m4,v 8.116 2004/01/28 22:02:22 ca Exp $ ##### +##### $Id: cfhead.m4,v 8.120 2009/01/23 22:39:21 ca Exp $ ##### ##### $Id: cf.m4,v 8.32 1999/02/07 07:26:14 gshapiro Exp $ ##### ##### $Id: generic-sunos4.1.mc,v 8.11 1999/02/07 07:26:03 gshapiro Exp $ ##### @@ -42,7 +42,7 @@ -##### $Id: proto.m4,v 8.732 2007/04/20 00:53:30 ca Exp $ ##### +##### $Id: proto.m4,v 8.741 2009/12/11 00:04:53 ca Exp $ ##### # level 10 config file format V10/Berkeley @@ -123,7 +123,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.14.2 +DZ8.14.4 ############### @@ -449,6 +449,7 @@ O OperatorChars=.:%@!^/[]+ # once the threshold number of recipients have been rejected #O BadRcptThrottle=0 + # shall we get local names from our installed interfaces? #O DontProbeInterfaces=False @@ -509,6 +510,7 @@ O MaxHeadersLength=32768 # SMTP STARTTLS server options #O TLSSrvOptions + # Input mail filters #O InputMailFilters diff --git a/contrib/sendmail-8.14/cf/cf/generic-ultrix4.cf b/contrib/sendmail-8.14/cf/cf/generic-ultrix4.cf index b6dc7f7100..beab0a95a5 100644 --- a/contrib/sendmail-8.14/cf/cf/generic-ultrix4.cf +++ b/contrib/sendmail-8.14/cf/cf/generic-ultrix4.cf @@ -1,5 +1,5 @@ # -# Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers. +# Copyright (c) 1998-2004, 2009 Sendmail, Inc. and its suppliers. # All rights reserved. # Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved. # Copyright (c) 1988, 1993 @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@nother.smi.sendmail.com on Wed Oct 31 09:24:27 PDT 2007 -##### in /extra/home/ca/sm-8.14.2/OpenSource/sendmail-8.14.2/cf/cf +##### built by ca@wiz.smi.sendmail.com on Tue Dec 22 20:49:09 PST 2009 +##### in /extra/home/ca/sm-8.14.4/OpenSource/sendmail-8.14.4/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -27,7 +27,7 @@ ###################################################################### ###################################################################### -##### $Id: cfhead.m4,v 8.116 2004/01/28 22:02:22 ca Exp $ ##### +##### $Id: cfhead.m4,v 8.120 2009/01/23 22:39:21 ca Exp $ ##### ##### $Id: cf.m4,v 8.32 1999/02/07 07:26:14 gshapiro Exp $ ##### ##### $Id: generic-ultrix4.mc,v 8.11 1999/02/07 07:26:03 gshapiro Exp $ ##### @@ -42,7 +42,7 @@ -##### $Id: proto.m4,v 8.732 2007/04/20 00:53:30 ca Exp $ ##### +##### $Id: proto.m4,v 8.741 2009/12/11 00:04:53 ca Exp $ ##### # level 10 config file format V10/Berkeley @@ -123,7 +123,7 @@ DnMAILER-DAEMON CPREDIRECT # Configuration version number -DZ8.14.2 +DZ8.14.4 ############### @@ -449,6 +449,7 @@ O OperatorChars=.:%@!^/[]+ # once the threshold number of recipients have been rejected #O BadRcptThrottle=0 + # shall we get local names from our installed interfaces? #O DontProbeInterfaces=False @@ -509,6 +510,7 @@ O MaxHeadersLength=32768 # SMTP STARTTLS server options #O TLSSrvOptions + # Input mail filters #O InputMailFilters diff --git a/contrib/sendmail-8.14/cf/cf/submit.cf b/contrib/sendmail-8.14/cf/cf/submit.cf index 22a574cdcb..5286c681be 100644 --- a/contrib/sendmail-8.14/cf/cf/submit.cf +++ b/contrib/sendmail-8.14/cf/cf/submit.cf @@ -1,5 +1,5 @@ # -# Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers. +# Copyright (c) 1998-2004, 2009 Sendmail, Inc. and its suppliers. # All rights reserved. # Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved. # Copyright (c) 1988, 1993 @@ -16,8 +16,8 @@ ##### ##### SENDMAIL CONFIGURATION FILE ##### -##### built by ca@nother.smi.sendmail.com on Wed Oct 31 09:24:27 PDT 2007 -##### in /extra/home/ca/sm-8.14.2/OpenSource/sendmail-8.14.2/cf/cf +##### built by ca@wiz.smi.sendmail.com on Tue Dec 22 20:49:09 PST 2009 +##### in /extra/home/ca/sm-8.14.4/OpenSource/sendmail-8.14.4/cf/cf ##### using ../ as configuration include directory ##### ###################################################################### @@ -27,7 +27,7 @@ ###################################################################### ###################################################################### -##### $Id: cfhead.m4,v 8.116 2004/01/28 22:02:22 ca Exp $ ##### +##### $Id: cfhead.m4,v 8.120 2009/01/23 22:39:21 ca Exp $ ##### ##### $Id: cf.m4,v 8.32 1999/02/07 07:26:14 gshapiro Exp $ ##### ##### $Id: submit.mc,v 8.14 2006/04/05 05:54:41 ca Exp $ ##### ##### $Id: msp.m4,v 1.33 2004/02/09 22:32:38 ca Exp $ ##### @@ -35,7 +35,7 @@ ##### $Id: no_default_msa.m4,v 8.2 2001/02/14 05:03:22 gshapiro Exp $ ##### -##### $Id: proto.m4,v 8.732 2007/04/20 00:53:30 ca Exp $ ##### +##### $Id: proto.m4,v 8.741 2009/12/11 00:04:53 ca Exp $ ##### # level 10 config file format V10/Berkeley @@ -114,7 +114,7 @@ D{MTAHost}[127.0.0.1] # Configuration version number -DZ8.14.2/Submit +DZ8.14.4/Submit ############### @@ -440,6 +440,7 @@ O RunAsUser=smmsp # once the threshold number of recipients have been rejected #O BadRcptThrottle=0 + # shall we get local names from our installed interfaces? O DontProbeInterfaces=True @@ -500,6 +501,7 @@ O PidFile=/var/spool/clientmqueue/sm-client.pid # SMTP STARTTLS server options #O TLSSrvOptions + # Input mail filters #O InputMailFilters diff --git a/contrib/sendmail-8.14/cf/feature/ldap_routing.m4 b/contrib/sendmail-8.14/cf/feature/ldap_routing.m4 index a474f17fbe..227060c20e 100644 --- a/contrib/sendmail-8.14/cf/feature/ldap_routing.m4 +++ b/contrib/sendmail-8.14/cf/feature/ldap_routing.m4 @@ -1,6 +1,6 @@ divert(-1) # -# Copyright (c) 1999-2002, 2004, 2007 Sendmail, Inc. and its suppliers. +# Copyright (c) 1999-2002, 2004, 2007, 2009 Sendmail, Inc. and its suppliers. # All rights reserved. # # By using this file, you agree to the terms and conditions set @@ -10,7 +10,7 @@ divert(-1) # divert(0) -VERSIONID(`$Id: ldap_routing.m4,v 8.15 2007/05/01 17:38:25 ca Exp $') +VERSIONID(`$Id: ldap_routing.m4,v 8.17 2009/06/26 21:11:08 ca Exp $') divert(-1) # Check first two arguments. If they aren't set, may need to warn in proto.m4 @@ -35,12 +35,40 @@ ifelse(len(X`'_ARG6_), `1', `define(`_LDAP_ROUTE_MAPTEMP_', `_QUEUE_')', _ARG6_, `tempfail', `define(`_LDAP_ROUTE_MAPTEMP_', `_TEMPFAIL_')', _ARG6_, `queue', `define(`_LDAP_ROUTE_MAPTEMP_', `_QUEUE_')') +define(`_ATMPF_', `')dnl +dnl check whether arg contains -T`'_ATMPF_ +dnl unless it is a sequence map or just LDAP +dnl note: this does not work if ARG1 begins with space(s), however, as +dnl we issue a warning, hopefully the user will fix it... +ifelse(defn(`_ARG1_'), `', `', + defn(`_ARG1_'), `LDAP', `', + `ifelse(index(_ARG1_, `sequence '), `0', `', + `ifelse(index(_ARG1_, _ATMPF_), `-1', + `errprint(`*** WARNING: missing -T'_ATMPF_` in first argument of FEATURE(`ldap_routing') +') + define(`_ABP_', index(_ARG1_, ` ')) + define(`_NARG1_', `substr(_ARG1_, 0, _ABP_) -T'_ATMPF_` substr(_ARG1_, _ABP_)') + ') + ') + ') +ifelse(defn(`_ARG2_'), `', `', + defn(`_ARG2_'), `LDAP', `', + `ifelse(index(_ARG2_, `sequence '), `0', `', + `ifelse(index(_ARG2_, _ATMPF_), `-1', + `errprint(`*** WARNING: missing -T'_ATMPF_` in second argument of FEATURE(`ldap_routing') +') + define(`_ABP_', index(_ARG2_, ` ')) + define(`_NARG2_', `substr(_ARG2_, 0, _ABP_) -T'_ATMPF_` substr(_ARG2_, _ABP_)') + ') + ') + ') + LOCAL_CONFIG # LDAP routing maps Kldapmh ifelse(len(X`'_ARG1_), `1', `ldap -1 -T -v mailHost -k (&(objectClass=inetLocalMailRecipient)(mailLocalAddress=%0))', - `_ARG1_') + defn(`_NARG1_'), `', `_ARG1_', `_NARG1_') Kldapmra ifelse(len(X`'_ARG2_), `1', `ldap -1 -T -v mailRoutingAddress -k (&(objectClass=inetLocalMailRecipient)(mailLocalAddress=%0))', - `_ARG2_') + defn(`_NARG2_'), `', `_ARG2_', `_NARG2_') diff --git a/contrib/sendmail-8.14/cf/m4/cfhead.m4 b/contrib/sendmail-8.14/cf/m4/cfhead.m4 index 9ccaa24488..e3a7ea5afd 100644 --- a/contrib/sendmail-8.14/cf/m4/cfhead.m4 +++ b/contrib/sendmail-8.14/cf/m4/cfhead.m4 @@ -1,5 +1,5 @@ # -# Copyright (c) 1998-2004 Sendmail, Inc. and its suppliers. +# Copyright (c) 1998-2004, 2009 Sendmail, Inc. and its suppliers. # All rights reserved. # Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved. # Copyright (c) 1988, 1993 @@ -48,7 +48,7 @@ define(`OSTYPE', define(`_ARG_', $2) include(_CF_DIR_`'ostype/$1.m4)POPDIVERT`'') ## helpful functions -define(`lower', `translit(`$1', `ABCDEFGHIJKLMNOPQRSTUVWXYZ', `abcdefghijklmnopqrstuvwx')') +define(`lower', `translit(`$1', `ABCDEFGHIJKLMNOPQRSTUVWXYZ', `abcdefghijklmnopqrstuvwxyz')') define(`strcasecmp', `ifelse(lower($1), lower($2), `1', `0')') ## access to further arguments in FEATURE/HACK define(`_ACC_ARG_1_',`$1') @@ -306,4 +306,4 @@ define(`confMILTER_MACROS_EOM', `{msg_id}') divert(0)dnl -VERSIONID(`$Id: cfhead.m4,v 8.116 2004/01/28 22:02:22 ca Exp $') +VERSIONID(`$Id: cfhead.m4,v 8.120 2009/01/23 22:39:21 ca Exp $') diff --git a/contrib/sendmail-8.14/cf/m4/proto.m4 b/contrib/sendmail-8.14/cf/m4/proto.m4 index 6ef2f1cd01..c021581c37 100644 --- a/contrib/sendmail-8.14/cf/m4/proto.m4 +++ b/contrib/sendmail-8.14/cf/m4/proto.m4 @@ -1,6 +1,6 @@ divert(-1) # -# Copyright (c) 1998-2007 Sendmail, Inc. and its suppliers. +# Copyright (c) 1998-2009 Sendmail, Inc. and its suppliers. # All rights reserved. # Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved. # Copyright (c) 1988, 1993 @@ -13,7 +13,7 @@ divert(-1) # divert(0) -VERSIONID(`$Id: proto.m4,v 8.732 2007/04/20 00:53:30 ca Exp $') +VERSIONID(`$Id: proto.m4,v 8.741 2009/12/11 00:04:53 ca Exp $') # level CF_LEVEL config file format V`'CF_LEVEL/ifdef(`VENDOR_NAME', `VENDOR_NAME', `Berkeley') @@ -580,6 +580,7 @@ _OPTION(MaxRecipientsPerMessage, `confMAX_RCPTS_PER_MESSAGE', `0') # once the threshold number of recipients have been rejected _OPTION(BadRcptThrottle, `confBAD_RCPT_THROTTLE', `0') + # shall we get local names from our installed interfaces? _OPTION(DontProbeInterfaces, `confDONT_PROBE_INTERFACES', `False') @@ -640,6 +641,7 @@ _OPTION(AuthMaxBits, `confAUTH_MAX_BITS', `') # SMTP STARTTLS server options _OPTION(TLSSrvOptions, `confTLS_SRV_OPTIONS', `') + # Input mail filters _OPTION(InputMailFilters, `confINPUT_MAIL_FILTERS', `') @@ -1509,7 +1511,9 @@ ifdef(`_LDAP_ROUTE_DETAIL_', # try without +detail R<> <> <$+> <$+ + $* @ $+> <> $@ $>LDAPExpand <$1> <$2 @ $4> <+$3>')dnl -ifdef(`_LDAP_ROUTE_NODOMAIN_', `dnl', ` +ifdef(`_LDAP_ROUTE_NODOMAIN_', ` +# pretend we did the @domain lookup +R<> <> <$+> <$+ @ $+> <$*> $: <> <> <$1> <@ $3> <$4>', ` # if still no mailRoutingAddress and no mailHost, # try @domain ifelse(_LDAP_ROUTE_DETAIL_, `_PRESERVE_', `dnl @@ -1956,7 +1960,7 @@ R<$+><:$*:><$*> $#error $@ 4.1.2 $: "450 MX lookup failure for "$1 # Recursively run badmx check on each mx. R<$*><:$+:$*><:$*> <$1><:$3><: $4 $(badmx $2 $):> # See if any of them fail. -R<$*><$*><$*:$*> $#error $@ 5.1.2 $:"550 Illegal MX record for recipient host "$1 +R<$*><$*><$*:$*> $#error $@ 5.1.2 $:"550 Illegal MX record for host "$1 # Reverse the mxlists so we can use the same argument order again. R<$*><$*><$*> $:<$1><$3><$2> R<$*><:$+:$*><:$*> <$1><:$3><:$4 $(dnsA $2 $) :> @@ -1965,7 +1969,7 @@ R<$*><:$+:$*><:$*> <$1><:$3><:$4 $(dnsA $2 $) :> R<$*><$*><$*> $:<$1><$3><$2> R<$*><:$+:$*><:$*> <$1><:$3><:$4 $(BadMXIP $2 $) :> -R<$*><$*><$*:$*> $#error $@ 5.1.2 $:"550 Invalid MX record for recipient host "$1', +R<$*><$*><$*:$*> $#error $@ 5.1.2 $:"550 Invalid MX record for host "$1', `dnl') @@ -2139,7 +2143,10 @@ R$+ < @ $=w > $@ RELAY ifdef(`_RELAY_HOSTS_ONLY_', `R$+ < @ $=R > $@ RELAY ifdef(`_ACCESS_TABLE_', `dnl -R$+ < @ $+ > $: <$(access To:$2 $: ? $)> <$1 < @ $2 >> +ifdef(`_RELAY_FULL_ADDR_', `dnl +R$+ < @ $+ > $: <$(access To:$1@$2 $: ? $)> <$1 < @ $2 >> +R <$+ < @ $+ >> $: <$(access To:$2 $: ? $)> <$1 < @ $2 >>',` +R$+ < @ $+ > $: <$(access To:$2 $: ? $)> <$1 < @ $2 >>') dnl workspace: > R <$+ < @ $+ >> $: <$(access $2 $: ? $)> <$1 < @ $2 >>',`dnl')', `R$+ < @ $* $=R > $@ RELAY @@ -2686,12 +2693,12 @@ dnl MAIL: called from check_mail dnl STARTTLS: called from smtp() after STARTTLS has been accepted Stls_client ifdef(`_LOCAL_TLS_CLIENT_', `dnl -R$* $: $1 $| $>"Local_tls_client" $1 -R$* $| $#$* $#$2 -R$* $| $* $: $1', `dnl') +R$* $: $1 $>"Local_tls_client" $1 +R$* $#$* $#$2 +R$* $* $: $1', `dnl') ifdef(`_ACCESS_TABLE_', `dnl dnl store name of other side -R$* $: $(macro {TLS_Name} $@ $&{server_name} $) $1 +R$* $: $(macro {TLS_Name} $@ $&{client_name} $) $1 dnl ignore second arg for now dnl maybe use it to distinguish permanent/temporary error? dnl if MAIL: permanent (STARTTLS has not been offered) diff --git a/contrib/sendmail-8.14/cf/m4/version.m4 b/contrib/sendmail-8.14/cf/m4/version.m4 index 9b34f1a4a9..5ad5ffb902 100644 --- a/contrib/sendmail-8.14/cf/m4/version.m4 +++ b/contrib/sendmail-8.14/cf/m4/version.m4 @@ -1,6 +1,6 @@ divert(-1) # -# Copyright (c) 1998-2007 Sendmail, Inc. and its suppliers. +# Copyright (c) 1998-2009 Sendmail, Inc. and its suppliers. # All rights reserved. # Copyright (c) 1983 Eric P. Allman. All rights reserved. # Copyright (c) 1988, 1993 @@ -11,8 +11,8 @@ divert(-1) # the sendmail distribution. # # -VERSIONID(`$Id: version.m4,v 8.186 2007/10/31 16:04:13 ca Exp $') +VERSIONID(`$Id: version.m4,v 8.205 2009/12/23 04:43:09 ca Exp $') # divert(0) # Configuration version number -DZ8.14.2`'ifdef(`confCF_VERSION', `/confCF_VERSION') +DZ8.14.4`'ifdef(`confCF_VERSION', `/confCF_VERSION') diff --git a/contrib/sendmail-8.14/contrib/qtool.pl b/contrib/sendmail-8.14/contrib/qtool.pl index d6a63ec17e..f2d33c27b4 100755 --- a/contrib/sendmail-8.14/contrib/qtool.pl +++ b/contrib/sendmail-8.14/contrib/qtool.pl @@ -3,7 +3,7 @@ ## Copyright (c) 1998-2002 Sendmail, Inc. and its suppliers. ## All rights reserved. ## -## $Id: qtool.pl,v 8.29 2007/02/16 01:12:08 ca Exp $ +## $Id: qtool.pl,v 8.30 2009/03/04 16:57:30 ca Exp $ ## use strict; use File::Basename; @@ -450,7 +450,7 @@ sub unlock_file ## ## Parameters: ## src_name -- The name of the file to be move. -## dst_nome -- The name of the place to move it to. +## dst_name -- The name of the place to move it to. ## ## Returns: ## error_string -- If undef then no problem. Otherwise it is a @@ -1193,7 +1193,7 @@ sub bounce ## ## This Condition Class checks the modification time of the ## source file and returns true if the file's modification time is -## older than the number of seconds the class was initialzed with. +## older than the number of seconds the class was initialized with. ## package OlderThan; @@ -1286,7 +1286,7 @@ sub check_move ## Eval ## ## Takes a perl expression and evaluates it. The ControlFile object -## for the source QueuedMessage is avaliable through the name '$msg'. +## for the source QueuedMessage is available through the name '$msg'. ## package Eval; diff --git a/contrib/sendmail-8.14/contrib/smcontrol.pl b/contrib/sendmail-8.14/contrib/smcontrol.pl index 4987460e4d..43ae575913 100755 --- a/contrib/sendmail-8.14/contrib/smcontrol.pl +++ b/contrib/sendmail-8.14/contrib/smcontrol.pl @@ -1,4 +1,6 @@ -#!/usr/local/bin/perl -w +#!/usr/bin/perl -w + +# $Id: smcontrol.pl,v 8.8 2008/07/21 21:31:43 ca Exp $ use strict; use Getopt::Std; diff --git a/contrib/sendmail-8.14/devtools/M4/switch.m4 b/contrib/sendmail-8.14/devtools/M4/switch.m4 index e95afdf43b..e63cb17a9f 100644 --- a/contrib/sendmail-8.14/devtools/M4/switch.m4 +++ b/contrib/sendmail-8.14/devtools/M4/switch.m4 @@ -10,7 +10,7 @@ divert(-1) # # Definitions for Makefile construction for sendmail # -# $Id: switch.m4,v 8.16 2000/04/06 18:45:22 peterh Exp $ +# $Id: switch.m4,v 8.17 2008/08/06 22:41:33 guenther Exp $ # divert(0)dnl include(confBUILDTOOLSDIR`/M4/string.m4')dnl @@ -46,7 +46,7 @@ define(`bldPUSH_STRIP_TARGET', define(`bldPRODUCT_START', `define(`bldCURRENT_PRODUCT', `$2')dnl -define(`bldCURRENT_PRD', translit(`$2', `.', `_'))dnl +define(`bldCURRENT_PRD', translit(`$2', `-.', `__'))dnl define(`bldPRODUCT_TYPE', `$1')dnl' )dnl diff --git a/contrib/sendmail-8.14/devtools/OS/Darwin.8.x b/contrib/sendmail-8.14/devtools/OS/Darwin.8.x index 0e078a2b6e..347fa74dfd 100644 --- a/contrib/sendmail-8.14/devtools/OS/Darwin.8.x +++ b/contrib/sendmail-8.14/devtools/OS/Darwin.8.x @@ -1,4 +1,4 @@ -# $Id: Darwin.8.x,v 1.2 2005/06/29 21:16:26 ca Exp $ +# $Id: Darwin.8.x,v 1.4 2008/02/26 21:21:30 ca Exp $ dnl DO NOT EDIT THIS FILE. dnl Place personal settings in devtools/Site/site.config.m4 @@ -8,6 +8,7 @@ define(`confCC', `cc -pipe ${Extra_CC_Flags}') define(`confMAPDEF', `-DNEWDB -DNIS -DMAP_REGEX') define(`confENVDEF', `-DDARWIN=80000 -DBIND_8_COMPAT -DNETINET6') define(`confLDOPTS', `${Extra_LD_Flags}') +define(`confMTLDOPTS', `-lpthread') define(`confMILTER_STATIC', `') define(`confDEPEND_TYPE', `CC-M') define(`confOPTIMIZE', `-O3') @@ -20,3 +21,5 @@ define(`confUBINOWN', `root') define(`confUBINGRP', `wheel') define(`confSBINOWN', `root') define(`confSBINGRP', `wheel') +define(`confLDOPTS_SO', `-dynamiclib -flat_namespace -undefined suppress -single_module') +define(`confSHAREDLIB_EXT', `.dylib') diff --git a/contrib/sendmail-8.14/devtools/OS/Linux b/contrib/sendmail-8.14/devtools/OS/Linux index 52418c8473..119b6f9f83 100644 --- a/contrib/sendmail-8.14/devtools/OS/Linux +++ b/contrib/sendmail-8.14/devtools/OS/Linux @@ -1,9 +1,10 @@ -# $Id: Linux,v 8.30 2002/03/21 23:59:25 gshapiro Exp $ +# $Id: Linux,v 8.31 2009/01/22 02:15:42 guenther Exp $ dnl DO NOT EDIT THIS FILE. dnl Place personal settings in devtools/Site/site.config.m4 define(`confDEPEND_TYPE', `CC-M') +define(`confCCOPTS_SO', `-fPIC') define(`confSM_OS_HEADER', `sm_os_linux') define(`confMANROOT', `/usr/man/man') define(`confLIBS', `-ldl') diff --git a/contrib/sendmail-8.14/devtools/OS/OpenBSD b/contrib/sendmail-8.14/devtools/OS/OpenBSD index 07bec0fd2f..5b28c017c9 100644 --- a/contrib/sendmail-8.14/devtools/OS/OpenBSD +++ b/contrib/sendmail-8.14/devtools/OS/OpenBSD @@ -1,4 +1,4 @@ -# $Id: OpenBSD,v 8.20 2002/03/21 23:59:25 gshapiro Exp $ +# $Id: OpenBSD,v 8.21 2008/08/06 23:41:44 guenther Exp $ dnl DO NOT EDIT THIS FILE. dnl Place personal settings in devtools/Site/site.config.m4 @@ -8,7 +8,32 @@ define(`confLDOPTS_SO', `-shared') define(`confCCOPTS_SO', `-fPIC') define(`confMAPDEF', `-DNEWDB -DNIS -DMAP_REGEX') -define(`confENVDEF', ` -DNETISO -DFAST_PID_RECYCLE') +define(`confENVDEF', ` -DFAST_PID_RECYCLE') define(`confSM_OS_HEADER', `sm_os_openbsd') define(`confMTCCOPTS', `-pthread') define(`confMTLDOPTS', `-pthread') + +ifelse(confBLDVARIANT, `DEBUG', +dnl Debug build +` + define(`confOPTIMIZE',`-g') +', +dnl Optimized build +confBLDVARIANT, `OPTIMIZED', +` + define(`confOPTIMIZE',`-O') +', +dnl Purify build +confBLDVARIANT, `PURIFY', +` + define(`confOPTIMIZE',`-g') +', +dnl default +` + define(`confOPTIMIZE',`-O') +') +define(`USE_ICONV',` + APPENDDEF(`confLIBS',`-liconv ')dnl + APPENDDEF(`confLIBDIRS',`-L/usr/local/lib ')dnl + APPENDDEF(`confINCDIRS',`-I/usr/local/include ')dnl +')dnl diff --git a/contrib/sendmail-8.14/devtools/OS/QNX.6.x b/contrib/sendmail-8.14/devtools/OS/QNX.6.x index d6683732f7..022175fef6 100644 --- a/contrib/sendmail-8.14/devtools/OS/QNX.6.x +++ b/contrib/sendmail-8.14/devtools/OS/QNX.6.x @@ -1,10 +1,10 @@ -# $Id: QNX.6.x,v 1.1 2007/03/21 23:56:18 ca Exp $ +# $Id: QNX.6.x,v 1.2 2008/02/11 23:04:50 ca Exp $ dnl DO NOT EDIT THIS FILE. dnl Place personal settings in devtools/Site/site.config.m4 define(`confMAPDEF', `-DMAP_REGEX') -define(`confLIBS', `-lsocket') +define(`confLIBSEARCH', `db socket') define(`confSM_OS_HEADER', `sm_os_qnx') define(`confDEPEND_TYPE', `QNX6') define(`confSBINGRP', `root') @@ -18,3 +18,22 @@ define(`confMAN3EXT', `0') define(`confMAN4EXT', `0') define(`confMAN5EXT', `0') define(`confMAN8EXT', `0') +ifelse(confBLDVARIANT, `DEBUG', +dnl Debug build +` + define(`confOPTIMIZE',`-g -O0') +', +dnl Optimized build +confBLDVARIANT, `OPTIMIZED', +` + define(`confOPTIMIZE',`-O2') +', +dnl Purify build +confBLDVARIANT, `PURIFY', +` + define(`confOPTIMIZE',`-g') +', +dnl default +` + define(`confOPTIMIZE',`-O2') +') diff --git a/contrib/sendmail-8.14/devtools/OS/SunOS.5.11 b/contrib/sendmail-8.14/devtools/OS/SunOS.5.11 index 0001caab17..d383aeaa19 100644 --- a/contrib/sendmail-8.14/devtools/OS/SunOS.5.11 +++ b/contrib/sendmail-8.14/devtools/OS/SunOS.5.11 @@ -1,4 +1,4 @@ -# $Id: SunOS.5.11,v 1.1 2005/06/20 23:52:31 ca Exp $ +# $Id: SunOS.5.11,v 1.2 2009/10/13 21:46:01 ca Exp $ dnl DO NOT EDIT THIS FILE. dnl Place personal settings in devtools/Site/site.config.m4 @@ -6,7 +6,7 @@ dnl Place personal settings in devtools/Site/site.config.m4 define(`confCC', `gcc') define(`confLDOPTS_SO', `-G') define(`confBEFORE', `sysexits.h') -define(`confMAPDEF', `-DNDBM -DNIS -DNISPLUS -DMAP_REGEX') +define(`confMAPDEF', `-DNDBM -DNIS -DMAP_REGEX') define(`confENVDEF', `-DSOLARIS=21100 -DNETINET6') define(`confSM_OS_HEADER', `sm_os_sunos') define(`confLIBS', `-lsocket -lnsl') diff --git a/contrib/sendmail-8.14/devtools/README b/contrib/sendmail-8.14/devtools/README index 414d153241..b7a0a83a17 100644 --- a/contrib/sendmail-8.14/devtools/README +++ b/contrib/sendmail-8.14/devtools/README @@ -4,7 +4,7 @@ anything in this directory. The Build script allows you to specify a base location for the object files by using the -O flag: - Build -O /tmp + ./Build -O /tmp will put the object files in /tmp/obj.*/. Also, if the SENDMAIL_SUFFIX environment variable is set, its value will be used in the obj.* directory @@ -13,7 +13,7 @@ name. The Build script allows you to specify a site configuration file by using the -f flag: - Build -f siteconfig.m4 + ./Build -f siteconfig.m4 You can put such site configuration files in the Site sub-directory; see Site/README for details. @@ -22,7 +22,7 @@ If you need to support multiple build configurations from the same tree, you can use prefixes to differentiate your configurations. Use the -Q flag to Build: - Build -Q prefix + ./Build -Q prefix Build will select a prefix.*.m4 file instead of the site.*.m4 file according to the conventions in Site/README, and use it to modify the build @@ -86,7 +86,7 @@ confBUILDBIN ../../devtools/bin The location of the build support directory. confCC cc The C compiler to use. confCCOPTS [empty] Additional options to pass to confCC. -*confCCOPTS_SO -fPIC Additional options for compiling +*confCCOPTS_SO [empty] Additional options for compiling shared object libraries. confCCLINK confCC Linker to use (for executables). confCOPY cp A program that copies files. @@ -129,7 +129,7 @@ confINSTALL install The BSD-compatible install program. confINSTALL_RAWMAN [undefined] Install the unformatted manual pages. *confLD confCC Linker to use (for libraries). confLDOPTS [empty] Linker options. -*confLDOPTS_SO -shared -Wl Additional linker options for +*confLDOPTS_SO [empty] Additional linker options for linking shared object libraries. confLIBDIR /usr/lib Where to install library files. confLIBDIRS [empty] -L flags passed to ld. @@ -215,8 +215,12 @@ confSETUSERID_INSTALL [undefined] Needs to be defined to enable the sendmail. See sendmail/SECURITY. confSHAREDLIB_EXT .so Shared library file extenion name. confSHAREDLIB_SUFFIX [empty] Shared object version suffix. -confSHAREDLIBDIR /usr/lib Directory for installing shared - library. +confSHAREDLIBDIR /usr/lib/ Directory for installing shared + library. Note: if the value is + not empty, it must end with a + slash ('/') otherwise it will not + be taken as a directory (but as + the beginning of a path). confSHELL /bin/sh The shell to use inside make. confSM_OS_HEADER [varies] The name of the platform specific include file. Undefine this if @@ -391,4 +395,4 @@ files that make up the library. bldINSTALLABLE - This should be set if the library should be installed in confLIBDIR. -$Revision: 8.98 $, Last updated $Date: 2007/05/18 16:26:09 $ +$Revision: 8.103 $, Last updated $Date: 2009/01/22 02:15:07 $ diff --git a/contrib/sendmail-8.14/devtools/bin/Build b/contrib/sendmail-8.14/devtools/bin/Build index a973aba3db..8d77581cd5 100755 --- a/contrib/sendmail-8.14/devtools/bin/Build +++ b/contrib/sendmail-8.14/devtools/bin/Build @@ -1,6 +1,6 @@ #!/bin/sh -# Copyright (c) 1998-2002 Sendmail, Inc. and its suppliers. +# Copyright (c) 1998-2002, 2008 Sendmail, Inc. and its suppliers. # All rights reserved. # Copyright (c) 1993, 1996-1997 Eric P. Allman. All rights reserved. # Copyright (c) 1993 @@ -11,7 +11,7 @@ # the sendmail distribution. # # -# $Id: Build,v 8.186 2006/03/15 19:46:04 eric Exp $ +# $Id: Build,v 8.187 2008/01/11 18:40:17 ca Exp $ # # @@ -407,7 +407,13 @@ in arch=PPC ;; BSD-386) os=BSD-OS;; - SCO_SV) os=SCO; rel=`uname -X | sed -n 's/Release = 3.2v//p'`;; + SCO_SV) rel=`uname -X | sed -n 's/Release = //p'` + if [ "$rel" = "5v6.0.0" ] + then + os=OSR; rel=`uname -X | sed -n 's/Release = //p'` + else + os=SCO; rel=`uname -X | sed -n 's/Release = 3.2v//p'` + fi;; UNIX_System_V) if [ "$arch" = "ds90" ] then os="UXPDS" diff --git a/contrib/sendmail-8.14/doc/op/op.me b/contrib/sendmail-8.14/doc/op/op.me index 74c2d6679a..be07810243 100644 --- a/contrib/sendmail-8.14/doc/op/op.me +++ b/contrib/sendmail-8.14/doc/op/op.me @@ -9,7 +9,7 @@ .\" the sendmail distribution. .\" .\" -.\" $Id: op.me,v 8.741 2007/06/22 23:08:59 ca Exp $ +.\" $Id: op.me,v 8.745 2009/12/13 04:12:46 ca Exp $ .\" .\" eqn op.me | pic | troff -me .\" @@ -90,13 +90,14 @@ Sendmail, Inc. .de Ve Version \\$2 .. -.Ve $Revision: 8.741 $ +.Ve $Revision: 8.745 $ .rm Ve .sp For Sendmail Version 8.14 .)l .(f Sendmail is a trademark of Sendmail, Inc. +US Patent Numbers 6865671, 6986037. .)f .sp 2 .pp @@ -4952,9 +4953,21 @@ as "(may be forged)". .ip ${cn_issuer} The CN (common name) of the CA that signed the presented certificate (STARTTLS only). +Note: if the CN cannot be extracted properly it will be replaced by +one of these strings based on the encountered error: +.(b +.ta 25n +BadCertificateContainsNUL CN contains a NUL character +BadCertificateTooLong CN is too long +BadCertificateUnknown CN could not be extracted +.)b +In the last case, some other (unspecific) error occurred. .ip ${cn_subject} The CN (common name) of the presented certificate (STARTTLS only). +See +.b ${cn_issuer} +for possible replacements. .ip ${currHeader} Header value as quoted string (possibly truncated to @@ -5130,7 +5143,7 @@ The total number of incoming connections over the time interval specified by ConnectionRateWindowSize. .ip ${verify} The result of the verification of the presented cert; -only defined after STARTTLS has been used. +only defined after STARTTLS has been used (or attempted). Possible values are: .(b .ta 13n @@ -6710,10 +6723,25 @@ CRL checking requires at least OpenSSL version 0.9.7. Note: if a CRLFile is specified but the file is unusable, STARTTLS is disabled. .ip DHParameters -File with DH parameters for STARTTLS. +Possible values are: +.(b +.ta 1i +5 use 512 bit prime +1 use 1024 bit prime +none do not use Diffie-Hellman +NAME load prime from file +.)b This is only required if a ciphersuite containing DSA/DH is used. -This is only for people with a good knowledge of TLS, all others -can ignore this option. +If ``5'' is selected, then precomputed, fixed primes are used. +This is the default for the client side. +If ``1'' is selected, then prime values are computed during startup. +This is the default for the server side. +Note: this operation can take a significant amount of time on a +slow machine (several seconds), but it is only done once at startup. +If ``none'' is selected, then TLS ciphersuites containing DSA/DH +cannot be used. +If a file name is specified (which must be an absolute path), +then the primes are read from it. .ip DaemonPortOptions=\fIoptions\fP [O] Set server SMTP options. @@ -11435,7 +11463,7 @@ replace it with a blank sheet for double-sided output. .\".sz 10 .\"Eric Allman .\".sp -.\"Version $Revision: 8.741 $ +.\"Version $Revision: 8.745 $ .\".ce 0 .bp 3 .ce diff --git a/contrib/sendmail-8.14/doc/op/op.ps b/contrib/sendmail-8.14/doc/op/op.ps index f1ed022df6..0962b2628b 100644 --- a/contrib/sendmail-8.14/doc/op/op.ps +++ b/contrib/sendmail-8.14/doc/op/op.ps @@ -1,12 +1,12 @@ %!PS-Adobe-3.0 -%%Creator: groff version 1.19.2 -%%CreationDate: Wed Oct 31 09:24:22 2007 +%%Creator: groff version 1.19 +%%CreationDate: Tue Dec 22 20:48:52 2009 %%DocumentNeededResources: font Times-Bold %%+ font Times-Roman %%+ font Times-Italic %%+ font Symbol -%%DocumentSuppliedResources: procset grops 1.19 2 -%%Pages: 108 +%%DocumentSuppliedResources: procset grops 1.19 0 +%%Pages: 110 %%PageOrder: Ascend %%DocumentMedia: Default 612 792 0 () () %%Orientation: Portrait @@ -15,7 +15,7 @@ %%PageMedia: Default %%EndDefaults %%BeginProlog -%%BeginResource: procset grops 1.19 2 +%%BeginResource: procset grops 1.19 0 /setpacking where{ pop currentpacking @@ -83,7 +83,7 @@ LS{ /EP{ level0 restore showpage -}def +}bind def /DA{ newpath arcn stroke }bind def @@ -177,6 +177,7 @@ userdict begin /setpagedevice{}def }bind def /PEND{ +clear countdictstack CNT sub{end}repeat level1 restore }bind def @@ -233,7 +234,7 @@ BP (TION AND OPERA)-1.14 E(TION GUIDE)-1.14 E/F3 10/Times-Roman@0 SF (Eric Allman)263.42 196.2 Q(Claus Assmann)256.75 208.2 Q(Gre)244.75 220.2 Q(gory Neil Shapiro)-.15 E(Sendmail, Inc.)258.975 232.2 Q -1.11 -(Ve)260.225 256.2 S(rsion 8.741)1.11 E -.15(Fo)234.465 280.2 S 2.5(rS) +(Ve)260.225 256.2 S(rsion 8.745)1.11 E -.15(Fo)234.465 280.2 S 2.5(rS) .15 G(endmail V)-2.5 E(ersion 8.14)-1.11 E/F4 10/Times-Italic@0 SF (Sendmail)97 324.6 Q/F5 8/Times-Roman@0 SF(TM)-5 I F3 .1 (implements a general purpose internetw)2.6 5 N .1(ork mail routing f) @@ -311,7 +312,8 @@ DL 128 675 124 675 DL 132 675 128 675 DL 136 675 132 675 DL 140 675 136 DL 204 675 200 675 DL 208 675 204 675 DL 212 675 208 675 DL 216 675 212 675 DL/F6 8/Times-Bold@0 SF(DISCLAIMER:)93.6 687 Q F5 (This documentation is under modi\214cation.)2 E -(Sendmail is a trademark of Sendmail, Inc.)93.6 699 Q F1 +(Sendmail is a trademark of Sendmail, Inc.)93.6 699 Q(US P)4 E +(atent Numbers 6865671, 6986037.)-.12 E F1 (Sendmail Installation and Operation Guide)72 756 Q(SMM:08-1)200.86 E 0 Cg EP %%Page: 2 2 @@ -3517,38 +3519,36 @@ DL 79 451.4 74 451.4 DL 84 451.4 79 451.4 DL 89 451.4 84 451.4 DL 94 451.4 DL 459 451.4 454 451.4 DL 464 451.4 459 451.4 DL 469 451.4 464 451.4 DL 474 451.4 469 451.4 DL 479 451.4 474 451.4 DL 484 451.4 479 451.4 DL 489 451.4 484 451.4 DL 494 451.4 489 451.4 DL 499 451.4 494 -451.4 DL 504 451.4 499 451.4 DL(addr)91.915 546 Q 133.2 543.8 MT -7.2 -1.8 RL 0 -3.6 RL CL 0 Fg 133.2 543.8 MT -7.2 1.8 RL 0 -3.6 RL CL .1 LW 0 -Cg ST .4 LW 126 543.8 111.6 543.8 DL 154.8 554.6 MT 0 -21.6 RL -21.6 0 -RL 0 21.6 RL CL ST(3)141.5 546 Q 176.4 543.8 MT -7.2 1.8 RL 0 -3.6 RL CL -0 Fg 176.4 543.8 MT -7.2 1.8 RL 0 -3.6 RL CL .1 LW 0 Cg ST .4 LW 169.2 -543.8 154.8 543.8 DL 198 554.6 MT 0 -21.6 RL -21.6 0 RL 0 21.6 RL CL ST -(D)183.59 546 Q 219.6 543.8 198 543.8 DL 277.2 525.8 MT -7.2 1.8 RL 0 --3.6 RL CL 0 Fg 277.2 525.8 MT -7.2 1.8 RL 0 -3.6 RL CL .1 LW 0 Cg ST .4 -LW 270 525.8 255.6 525.8 DL 298.8 536.6 MT 0 -21.6 RL -21.6 0 RL 0 21.6 -RL CL ST(1)285.5 528 Q 320.4 525.8 MT -7.2 1.8 RL 0 -3.6 RL CL 0 Fg -320.4 525.8 MT -7.2 1.8 RL 0 -3.6 RL CL .1 LW 0 Cg ST .4 LW 313.2 525.8 -298.8 525.8 DL 342 536.6 MT 0 -21.6 RL -21.6 0 RL 0 21.6 RL CL ST(S) -328.42 528 Q 363.6 525.8 342 525.8 DL 277.2 561.8 MT -7.2 1.8 RL 0 -3.6 -RL CL 0 Fg 277.2 561.8 MT -7.2 1.8 RL 0 -3.6 RL CL .1 LW 0 Cg ST .4 LW -270 561.8 255.6 561.8 DL 298.8 572.6 MT 0 -21.6 RL -21.6 0 RL 0 21.6 RL -CL ST(2)285.5 564 Q 320.4 561.8 MT -7.2 1.8 RL 0 -3.6 RL CL 0 Fg 320.4 -561.8 MT -7.2 1.8 RL 0 -3.6 RL CL .1 LW 0 Cg ST .4 LW 313.2 561.8 298.8 -561.8 DL 342 572.6 MT 0 -21.6 RL -21.6 0 RL 0 21.6 RL CL ST(R)327.865 -564 Q 363.6 561.8 342 561.8 DL 421.2 543.8 MT -7.2 1.8 RL 0 -3.6 RL CL 0 -Fg 421.2 543.8 MT -7.2 1.8 RL 0 -3.6 RL CL .1 LW 0 Cg ST .4 LW 414 543.8 -399.6 543.8 DL 442.8 554.6 MT 0 -21.6 RL -21.6 0 RL 0 21.6 RL CL ST(4) -429.5 546 Q 464.4 543.8 MT -7.2 1.8 RL 0 -3.6 RL CL 0 Fg 464.4 543.8 MT --7.2 1.8 RL 0 -3.6 RL CL .1 LW 0 Cg ST .4 LW 457.2 543.8 442.8 543.8 DL -(msg)466.865 546 Q 255.6 525.8 219.6 543.8 DL 255.6 561.8 219.6 543.8 DL -399.6 543.8 363.6 525.8 DL 399.6 543.8 363.6 561.8 DL 208.8 489.8 MT --7.2 1.8 RL 0 -3.6 RL CL 0 Fg 208.8 489.8 MT -7.2 1.8 RL 0 -3.6 RL CL .1 -LW 0 Cg ST .4 LW 201.6 489.8 187.2 489.8 DL 230.4 500.6 MT 0 -21.6 RL --21.6 0 RL 0 21.6 RL CL ST(0)217.1 492 Q 252 489.8 MT -7.2 1.8 RL 0 -3.6 -RL CL 0 Fg 252 489.8 MT -7.2 1.8 RL 0 -3.6 RL CL .1 LW 0 Cg ST .4 LW -244.8 489.8 230.4 489.8 DL(resolv)265.69 492 Q(ed address)-.15 E 187.2 -489.8 162 543.8 DL(Figure 1 \212 Re)216.045 591.8 Q -(writing set semantics)-.25 E 2.5(D\212s)209.35 603.8 S +451.4 DL 504 451.4 499 451.4 DL(addr)91.915 546 Q 133.2 543.8 111.6 +543.8 DL 133.2 543.8 MT -7.2 1.8 RL 0 -3.6 RL CL 0 Fg 133.2 543.8 MT +-7.2 1.8 RL 0 -3.6 RL CL 0 Cg ST 154.8 554.6 MT 0 -21.6 RL -21.6 0 RL 0 +21.6 RL CL ST(3)141.5 546 Q 176.4 543.8 154.8 543.8 DL 176.4 543.8 MT +-7.2 1.8 RL 0 -3.6 RL CL 0 Fg 176.4 543.8 MT -7.2 1.8 RL 0 -3.6 RL CL 0 +Cg ST 198 554.6 MT 0 -21.6 RL -21.6 0 RL 0 21.6 RL CL ST(D)183.59 546 Q +219.6 543.8 198 543.8 DL 277.2 525.8 255.6 525.8 DL 277.2 525.8 MT -7.2 +1.8 RL 0 -3.6 RL CL 0 Fg 277.2 525.8 MT -7.2 1.8 RL 0 -3.6 RL CL 0 Cg ST +298.8 536.6 MT 0 -21.6 RL -21.6 0 RL 0 21.6 RL CL ST(1)285.5 528 Q 320.4 +525.8 298.8 525.8 DL 320.4 525.8 MT -7.2 1.8 RL 0 -3.6 RL CL 0 Fg 320.4 +525.8 MT -7.2 1.8 RL 0 -3.6 RL CL 0 Cg ST 342 536.6 MT 0 -21.6 RL -21.6 +0 RL 0 21.6 RL CL ST(S)328.42 528 Q 363.6 525.8 342 525.8 DL 277.2 561.8 +255.6 561.8 DL 277.2 561.8 MT -7.2 1.8 RL 0 -3.6 RL CL 0 Fg 277.2 561.8 +MT -7.2 1.8 RL 0 -3.6 RL CL 0 Cg ST 298.8 572.6 MT 0 -21.6 RL -21.6 0 RL +0 21.6 RL CL ST(2)285.5 564 Q 320.4 561.8 298.8 561.8 DL 320.4 561.8 MT +-7.2 1.8 RL 0 -3.6 RL CL 0 Fg 320.4 561.8 MT -7.2 1.8 RL 0 -3.6 RL CL 0 +Cg ST 342 572.6 MT 0 -21.6 RL -21.6 0 RL 0 21.6 RL CL ST(R)327.865 564 Q +363.6 561.8 342 561.8 DL 421.2 543.8 399.6 543.8 DL 421.2 543.8 MT -7.2 +1.8 RL 0 -3.6 RL CL 0 Fg 421.2 543.8 MT -7.2 1.8 RL 0 -3.6 RL CL 0 Cg ST +442.8 554.6 MT 0 -21.6 RL -21.6 0 RL 0 21.6 RL CL ST(4)429.5 546 Q 464.4 +543.8 442.8 543.8 DL 464.4 543.8 MT -7.2 1.8 RL 0 -3.6 RL CL 0 Fg 464.4 +543.8 MT -7.2 1.8 RL 0 -3.6 RL CL 0 Cg ST(msg)466.865 546 Q 255.6 525.8 +219.6 543.8 DL 255.6 561.8 219.6 543.8 DL 399.6 543.8 363.6 525.8 DL +399.6 543.8 363.6 561.8 DL 208.8 489.8 187.2 489.8 DL 208.8 489.8 MT +-7.2 1.8 RL 0 -3.6 RL CL 0 Fg 208.8 489.8 MT -7.2 1.8 RL 0 -3.6 RL CL 0 +Cg ST 230.4 500.6 MT 0 -21.6 RL -21.6 0 RL 0 21.6 RL CL ST(0)217.1 492 Q +252 489.8 230.4 489.8 DL 252 489.8 MT -7.2 1.8 RL 0 -3.6 RL CL 0 Fg 252 +489.8 MT -7.2 1.8 RL 0 -3.6 RL CL 0 Cg ST(resolv)265.69 492 Q +(ed address)-.15 E 187.2 489.8 162 543.8 DL(Figure 1 \212 Re)216.045 +591.8 Q(writing set semantics)-.25 E 2.5(D\212s)209.35 603.8 S (ender domain addition)-2.5 E 2.5(S\212m)209.35 615.8 S(ailer)-2.5 E (-speci\214c sender re)-.2 E(writing)-.25 E 2.5(R\212m)209.35 627.8 S (ailer)-2.5 E(-speci\214c recipient re)-.2 E(writing)-.25 E 77 639.8 72 @@ -4294,310 +4294,290 @@ F0(${client_name})2.5 E F1 5(.P)C(ossible v)-5 E(alues are:)-.25 E 33.06 127 240.6 R 3.282(ged. This)-.18 F .782(is re\215ected as)3.282 F(the v) 127 252.6 Q(alue FORGED for)-.25 E F0(${client_r)2.5 E(esolv)-.18 E(e}) -.1 E F1(and it also sho)2.5 E(ws up in)-.25 E F0($_)2.5 E F1 -(as "\(may be for)2.5 E(ged\)".)-.18 E(${cn_issuer})102 268.8 Q(The CN \ -\(common name\) of the CA that signed the presented certi\214cate \(ST) -127 280.8 Q(AR)-.93 E(TTLS only\).)-.6 E(${cn_subject})102 297 Q -(The CN \(common name\) of the presented certi\214cate \(ST)127 309 Q -(AR)-.93 E(TTLS only\).)-.6 E(${currHeader})102 325.2 Q .164(Header v) -127 337.2 R .164(alue as quoted string \(possibly truncated to)-.25 F F0 -(MAXN)2.664 E(AME)-.2 E F1 2.664(\). This)B .163(macro is only a)2.664 F --.25(va)-.2 G(il-).25 E(able in header check rulesets.)127 349.2 Q -(${daemon_addr})102 365.4 Q -(The IP address the daemon is listening on for connections.)127 377.4 Q -(${daemon_f)102 393.6 Q(amily})-.1 E .355(The netw)127 405.6 R .355 -(ork f)-.1 F .356(amily if the daemon is accepting netw)-.1 F .356 -(ork connections.)-.1 F .356(Possible v)5.356 F .356(alues include)-.25 +(as "\(may be for)2.5 E(ged\)".)-.18 E(${cn_issuer})102 268.8 Q .874(Th\ +e CN \(common name\) of the CA that signed the presented certi\214cate \ +\(ST)127 280.8 R(AR)-.93 E .873(TTLS only\).)-.6 F .376 +(Note: if the CN cannot be e)127 292.8 R .376 +(xtracted properly it will be replaced by one of these strings based) +-.15 F(on the encountered error:)127 304.8 Q 8.62 +(BadCerti\214cateContainsNUL CN)167 321 R(contains a NUL character)2.5 E +(BadCerti\214cateT)167 333 Q 28.31(ooLong CN)-.8 F(is too long)2.5 E +(BadCerti\214cateUnkno)167 345 Q 25.54(wn CN)-.25 F(could not be e)2.5 E +(xtracted)-.15 E +(In the last case, some other \(unspeci\214c\) error occurred.)127 361.2 +Q(${cn_subject})102 377.4 Q 1.251 +(The CN \(common name\) of the presented certi\214cate \(ST)127 389.4 R +(AR)-.93 E 1.251(TTLS only\).)-.6 F(See)6.251 E F0(${cn_issuer})3.75 E +F1(for possible replacements.)127 401.4 Q(${currHeader})102 417.6 Q .163 +(Header v)127 429.6 R .164 +(alue as quoted string \(possibly truncated to)-.25 F F0(MAXN)2.664 E +(AME)-.2 E F1 2.664(\). This)B .164(macro is only a)2.664 F -.25(va)-.2 +G(il-).25 E(able in header check rulesets.)127 441.6 Q(${daemon_addr}) +102 457.8 Q(The IP address the daemon is listening on for connections.) +127 469.8 Q(${daemon_f)102 486 Q(amily})-.1 E .356(The netw)127 498 R +.356(ork f)-.1 F .356(amily if the daemon is accepting netw)-.1 F .356 +(ork connections.)-.1 F .355(Possible v)5.356 F .355(alues include)-.25 F(\231inet\232, \231inet6\232, \231iso\232, \231ns\232, \231x.25\232)127 -417.6 Q(${daemon_\215ags})102 433.8 Q .103 +510 Q(${daemon_\215ags})102 526.2 Q .103 (The \215ags for the daemon as speci\214ed by the Modi\214er= part of) -127 445.8 R F0(DaemonP)2.603 E(ortOptions)-.2 E F1(whereby)2.603 E .548 +127 538.2 R F0(DaemonP)2.603 E(ortOptions)-.2 E F1(whereby)2.604 E .548 (the \215ags are separated from each other by spaces, and upper case \ -\215ags are doubled.)127 457.8 R .549(That is,)5.549 F .37 -(Modi\214er=Ea will be represented as "EE a" in)127 469.8 R F0 +\215ags are doubled.)127 550.2 R .548(That is,)5.548 F .37 +(Modi\214er=Ea will be represented as "EE a" in)127 562.2 R F0 (${daemon_\215ags})2.87 E F1 2.87(,w)C .37(hich is required for testing) --2.87 F(the \215ags in rulesets.)127 481.8 Q(${daemon_info})102 498 Q -4.763(Some information about a daemon as a te)127 510 R 4.764 -(xt string.)-.15 F -.15(Fo)9.764 G 7.264(re).15 G 4.764 -(xample, \231SMTP+queue-)-7.414 F(ing@00:30:00\232.)127 522 Q -(${daemon_name})102 538.2 Q .734(The name of the daemon from)127 550.2 R +-2.87 F(the \215ags in rulesets.)127 574.2 Q(${daemon_info})102 590.4 Q +4.764(Some information about a daemon as a te)127 602.4 R 4.763 +(xt string.)-.15 F -.15(Fo)9.763 G 7.263(re).15 G 4.763 +(xample, \231SMTP+queue-)-7.413 F(ing@00:30:00\232.)127 614.4 Q +(${daemon_name})102 630.6 Q .734(The name of the daemon from)127 642.6 R F0(DaemonP)3.234 E(ortOptions)-.2 E F1 .734(Name= suboption.)3.234 F -.734(If this suboption is)5.734 F -(not set, "Daemon#", where # is the daemon number)127 562.2 Q 2.5(,i)-.4 -G 2.5(su)-2.5 G(sed.)-2.5 E(${daemon_port})102 578.4 Q 1.459 -(The port the daemon is accepting connection on.)127 590.4 R(Unless) -6.459 E F0(DaemonP)3.959 E(ortOptions)-.2 E F1 1.46(is set, this)3.959 F -(will most lik)127 602.4 Q(ely be \23125\232.)-.1 E(${deli)102 618.6 Q --.15(ve)-.25 G(ryMode}).15 E .806(The current deli)127 630.6 R -.15(ve) --.25 G .806(ry mode sendmail is using.).15 F .806 -(It is initially set to the v)5.806 F .805(alue of the)-.25 F F0(Deli) -3.305 E -.1(ve)-.1 G(ry-).1 E(Mode)127 642.6 Q F1(option.)2.5 E(${en)102 -658.8 Q(vid})-.4 E(The en)127 670.8 Q -.15(ve)-.4 G -(lope id parameter \(ENVID=\) passed to sendmail as part of the en).15 E --.15(ve)-.4 G(lope.).15 E(${hdrlen})102 687 Q .339 -(The length of the header v)127 699 R .339 -(alue which is stored in ${currHeader} \(before possible truncation\).) --.25 F(If this v)127 711 Q(alue is greater than or equal to)-.25 E F0 -(MAXN)2.5 E(AME)-.2 E F1(the header has been truncated.)2.5 E 0 Cg EP +.735(If this suboption is)5.734 F +(not set, "Daemon#", where # is the daemon number)127 654.6 Q 2.5(,i)-.4 +G 2.5(su)-2.5 G(sed.)-2.5 E(${daemon_port})102 670.8 Q 1.459 +(The port the daemon is accepting connection on.)127 682.8 R(Unless) +6.459 E F0(DaemonP)3.959 E(ortOptions)-.2 E F1 1.459(is set, this)3.959 +F(will most lik)127 694.8 Q(ely be \23125\232.)-.1 E(${deli)102 711 Q +-.15(ve)-.25 G(ryMode}).15 E 3.641(The current deli)127 723 R -.15(ve) +-.25 G 3.641(ry mode sendmail is using.).15 F 3.641 +(It is initially set to the v)8.641 F 3.642(alue of the)-.25 F 0 Cg EP %%Page: 50 46 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-50 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -(${hdr_name})102 96 Q .167(The name of the header \214eld for which the\ - current header check ruleset has been called.)127 108 R(This)5.166 E -.831(is useful for a def)127 120 R .832(ault header check ruleset to ge\ -t the name of the header; the macro is only)-.1 F -.2(av)127 132 S -(ailable in header check rulesets.)-.05 E(${if_addr})102 148.2 Q 1.194 -(The IP address of the interf)127 160.2 R 1.194 +(Installation and Operation Guide)2.5 E(Deli)127 96 Q -.1(ve)-.1 G +(ryMode).1 E/F1 10/Times-Roman@0 SF(option.)2.5 E(${en)102 112.2 Q(vid}) +-.4 E(The en)127 124.2 Q -.15(ve)-.4 G +(lope id parameter \(ENVID=\) passed to sendmail as part of the en).15 E +-.15(ve)-.4 G(lope.).15 E(${hdrlen})102 140.4 Q .34 +(The length of the header v)127 152.4 R .339 +(alue which is stored in ${currHeader} \(before possible truncation\).) +-.25 F(If this v)127 164.4 Q(alue is greater than or equal to)-.25 E F0 +(MAXN)2.5 E(AME)-.2 E F1(the header has been truncated.)2.5 E +(${hdr_name})102 180.6 Q .167(The name of the header \214eld for which \ +the current header check ruleset has been called.)127 192.6 R(This)5.167 +E .832(is useful for a def)127 204.6 R .832(ault header check ruleset t\ +o get the name of the header; the macro is only)-.1 F -.2(av)127 216.6 S +(ailable in header check rulesets.)-.05 E(${if_addr})102 232.8 Q 1.193 +(The IP address of the interf)127 244.8 R 1.194 (ace of an incoming connection unless it is in the loopback net.)-.1 F -(IPv6 addresses are tagged with "IPv6:" before the address.)127 172.2 Q -(${if_addr_out})102 188.4 Q 1.332(The IP address of the interf)127 200.4 -R 1.333(ace of an outgoing connection unless it is in the loopback net.) --.1 F(IPv6 addresses are tagged with "IPv6:" before the address.)127 -212.4 Q(${if_f)102 228.6 Q(amily})-.1 E(The IP f)127 240.6 Q +(IPv6 addresses are tagged with "IPv6:" before the address.)127 256.8 Q +(${if_addr_out})102 273 Q 1.333(The IP address of the interf)127 285 R +1.332(ace of an outgoing connection unless it is in the loopback net.) +-.1 F(IPv6 addresses are tagged with "IPv6:" before the address.)127 297 +Q(${if_f)102 313.2 Q(amily})-.1 E(The IP f)127 325.2 Q (amily of the interf)-.1 E (ace of an incoming connection unless it is in the loopback net.)-.1 E -(${if_f)102 256.8 Q(amily_out})-.1 E(The IP f)127 268.8 Q +(${if_f)102 341.4 Q(amily_out})-.1 E(The IP f)127 353.4 Q (amily of the interf)-.1 E (ace of an outgoing connection unless it is in the loopback net.)-.1 E -(${if_name})102 285 Q 1.086(The hostname associated with the interf)127 -297 R 1.086(ace of an incoming connection.)-.1 F 1.086 +(${if_name})102 369.6 Q 1.086(The hostname associated with the interf) +127 381.6 R 1.086(ace of an incoming connection.)-.1 F 1.087 (This macro can be)6.086 F(used for SmtpGreetingMessage and HRecei)127 -309 Q -.15(ve)-.25 G 2.5(df).15 G(or virtual hosting.)-2.5 E -.15(Fo)5 G -2.5(re).15 G(xample:)-2.65 E 2.5(OS)167 325.2 S +393.6 Q -.15(ve)-.25 G 2.5(df).15 G(or virtual hosting.)-2.5 E -.15(Fo)5 +G 2.5(re).15 G(xample:)-2.65 E 2.5(OS)167 409.8 S (mtpGreetingMessage=$?{if_name}${if_name}$|$j$. MT)-2.5 E(A)-.93 E -(${if_name_out})102 345.6 Q(The name of the interf)127 357.6 Q -(ace of an outgoing connection.)-.1 E(${load_a)102 373.8 Q(vg})-.2 E -(The current load a)127 385.8 Q -.15(ve)-.2 G(rage.).15 E(${mail_addr}) -102 402 Q 1.239(The address part of the resolv)127 414 R 1.239 +(${if_name_out})102 430.2 Q(The name of the interf)127 442.2 Q +(ace of an outgoing connection.)-.1 E(${load_a)102 458.4 Q(vg})-.2 E +(The current load a)127 470.4 Q -.15(ve)-.2 G(rage.).15 E(${mail_addr}) +102 486.6 Q 1.239(The address part of the resolv)127 498.6 R 1.239 (ed triple of the address gi)-.15 F -.15(ve)-.25 G 3.739(nf).15 G 1.239 -(or the)-3.739 F/F2 9/Times-Roman@0 SF 1.24(SMTP MAIL)3.739 F F1 -(command.)3.74 E(De\214ned in the SMTP serv)127 426 Q(er only)-.15 E(.) --.65 E(${mail_host})102 442.2 Q .146(The host from the resolv)127 454.2 -R .146(ed triple of the address gi)-.15 F -.15(ve)-.25 G 2.646(nf).15 G -.146(or the)-2.646 F F2 .145(SMTP MAIL)2.646 F F1 2.645 -(command. De\214ned)2.645 F(in the SMTP serv)127 466.2 Q(er only)-.15 E -(.)-.65 E(${mail_mailer})102 482.4 Q 2.14(The mailer from the resolv)127 -494.4 R 2.14(ed triple of the address gi)-.15 F -.15(ve)-.25 G 4.641(nf) -.15 G 2.141(or the)-4.641 F F2 2.141(SMTP MAIL)4.641 F F1(command.)4.641 -E(De\214ned in the SMTP serv)127 506.4 Q(er only)-.15 E(.)-.65 E -(${msg_id})102 522.6 Q(The v)127 534.6 Q(alue of the Message-Id: header) --.25 E(.)-.55 E(${msg_size})102 550.8 Q 1.033(The v)127 562.8 R 1.033 -(alue of the SIZE= parameter)-.25 F 3.533(,i)-.4 G 1.032 -(.e., usually the size of the message \(in an ESMTP dia-)-3.533 F 1.252 +(or the)-3.739 F/F2 9/Times-Roman@0 SF 1.239(SMTP MAIL)3.739 F F1 +(command.)3.739 E(De\214ned in the SMTP serv)127 510.6 Q(er only)-.15 E +(.)-.65 E(${mail_host})102 526.8 Q .145(The host from the resolv)127 +538.8 R .146(ed triple of the address gi)-.15 F -.15(ve)-.25 G 2.646(nf) +.15 G .146(or the)-2.646 F F2 .146(SMTP MAIL)2.646 F F1 2.646 +(command. De\214ned)2.646 F(in the SMTP serv)127 550.8 Q(er only)-.15 E +(.)-.65 E(${mail_mailer})102 567 Q 2.141(The mailer from the resolv)127 +579 R 2.141(ed triple of the address gi)-.15 F -.15(ve)-.25 G 4.64(nf) +.15 G 2.14(or the)-4.64 F F2 2.14(SMTP MAIL)4.64 F F1(command.)4.64 E +(De\214ned in the SMTP serv)127 591 Q(er only)-.15 E(.)-.65 E(${msg_id}) +102 607.2 Q(The v)127 619.2 Q(alue of the Message-Id: header)-.25 E(.) +-.55 E(${msg_size})102 635.4 Q 1.032(The v)127 647.4 R 1.032 +(alue of the SIZE= parameter)-.25 F 3.532(,i)-.4 G 1.033 +(.e., usually the size of the message \(in an ESMTP dia-)-3.532 F 1.252 (logue\), before the message has been collected, thereafter the message\ - size as computed by)127 574.8 R/F3 10/Times-Italic@0 SF(sendmail)127 -586.8 Q F1(\(and can be used in check_compat\).)2.5 E(${nbadrcpts})102 -603 Q(The number of bad recipients for a single message.)127 615 Q -(${nrcpts})102 631.2 Q .049(The number of v)127 643.2 R .049 -(alidated recipients for a single message.)-.25 F .048 -(Note: since recipient v)5.048 F .048(alidation hap-)-.25 F .472 -(pens after)127 655.2 R F3 -.15(ch)2.973 G(ec).15 E(k_r)-.2 E(cpt)-.37 E -F1 .473(has been called, the v)2.973 F .473 -(alue in this ruleset is one less than what might be)-.25 F -.15(ex)127 -667.2 S(pected.).15 E(${ntries})102 683.4 Q(The number of deli)127 695.4 -Q -.15(ve)-.25 G(ry attempts.).15 E(${opMode})102 711.6 Q -(The current operation mode \(from the)127 723.6 Q F02.5 E F1 -(\215ag\).)2.5 E 0 Cg EP + size as computed by)127 659.4 R/F3 10/Times-Italic@0 SF(sendmail)127 +671.4 Q F1(\(and can be used in check_compat\).)2.5 E(${nbadrcpts})102 +687.6 Q(The number of bad recipients for a single message.)127 699.6 Q 0 +Cg EP %%Page: 51 47 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-51)195.86 E/F1 10/Times-Roman@0 SF(${quarantine})102 96 Q -(The quarantine reason for the en)127 108 Q -.15(ve)-.4 G -(lope, if it is quarantined.).15 E(${queue_interv)102 124.2 Q(al})-.25 E -.362(The queue run interv)127 136.2 R .362(al gi)-.25 F -.15(ve)-.25 G -2.862(nb).15 G 2.862(yt)-2.862 G(he)-2.862 E F02.861 E F1 2.861 -(\215ag. F)2.861 F .361(or e)-.15 F(xample,)-.15 E F0(\255q30m)2.861 E -F1 -.1(wo)2.861 G .361(uld set).1 F F0(${queue_inter)2.861 E(-)-.37 E --.1(va)127 148.2 S(l}).1 E F1(to \23100:30:00\232.)2.5 E(${rcpt_addr}) -102 164.4 Q 1.271(The address part of the resolv)127 176.4 R 1.272 -(ed triple of the address gi)-.15 F -.15(ve)-.25 G 3.772(nf).15 G 1.272 -(or the)-3.772 F/F2 9/Times-Roman@0 SF 1.272(SMTP RCPT)3.772 F F1 -(command.)3.772 E(De\214ned in the SMTP serv)127 188.4 Q -(er only after a RCPT command.)-.15 E(${rcpt_host})102 204.6 Q .179 -(The host from the resolv)127 216.6 R .178(ed triple of the address gi) --.15 F -.15(ve)-.25 G 2.678(nf).15 G .178(or the)-2.678 F F2 .178 -(SMTP RCPT)2.678 F F1 2.678(command. De\214ned)2.678 F(in the SMTP serv) -127 228.6 Q(er only after a RCPT command.)-.15 E(${rcpt_mailer})102 -244.8 Q 2.175(The mailer from the resolv)127 256.8 R 2.175 +(SMM:08-51)195.86 E/F1 10/Times-Roman@0 SF(${nrcpts})102 96 Q .048 +(The number of v)127 108 R .048 +(alidated recipients for a single message.)-.25 F .049 +(Note: since recipient v)5.049 F .049(alidation hap-)-.25 F .473 +(pens after)127 120 R/F2 10/Times-Italic@0 SF -.15(ch)2.973 G(ec).15 E +(k_r)-.2 E(cpt)-.37 E F1 .473(has been called, the v)2.973 F .473 +(alue in this ruleset is one less than what might be)-.25 F -.15(ex)127 +132 S(pected.).15 E(${ntries})102 148.2 Q(The number of deli)127 160.2 Q +-.15(ve)-.25 G(ry attempts.).15 E(${opMode})102 176.4 Q +(The current operation mode \(from the)127 188.4 Q F02.5 E F1 +(\215ag\).)2.5 E(${quarantine})102 204.6 Q +(The quarantine reason for the en)127 216.6 Q -.15(ve)-.4 G +(lope, if it is quarantined.).15 E(${queue_interv)102 232.8 Q(al})-.25 E +.361(The queue run interv)127 244.8 R .361(al gi)-.25 F -.15(ve)-.25 G +2.861(nb).15 G 2.861(yt)-2.861 G(he)-2.861 E F02.861 E F1 2.862 +(\215ag. F)2.861 F .362(or e)-.15 F(xample,)-.15 E F0(\255q30m)2.862 E +F1 -.1(wo)2.862 G .362(uld set).1 F F0(${queue_inter)2.862 E(-)-.37 E +-.1(va)127 256.8 S(l}).1 E F1(to \23100:30:00\232.)2.5 E(${rcpt_addr}) +102 273 Q 1.272(The address part of the resolv)127 285 R 1.272 +(ed triple of the address gi)-.15 F -.15(ve)-.25 G 3.771(nf).15 G 1.271 +(or the)-3.771 F/F3 9/Times-Roman@0 SF 1.271(SMTP RCPT)3.771 F F1 +(command.)3.771 E(De\214ned in the SMTP serv)127 297 Q +(er only after a RCPT command.)-.15 E(${rcpt_host})102 313.2 Q .178 +(The host from the resolv)127 325.2 R .178(ed triple of the address gi) +-.15 F -.15(ve)-.25 G 2.678(nf).15 G .178(or the)-2.678 F F3 .179 +(SMTP RCPT)2.678 F F1 2.679(command. De\214ned)2.679 F(in the SMTP serv) +127 337.2 Q(er only after a RCPT command.)-.15 E(${rcpt_mailer})102 +353.4 Q 2.176(The mailer from the resolv)127 365.4 R 2.175 (ed triple of the address gi)-.15 F -.15(ve)-.25 G 4.675(nf).15 G 2.175 -(or the)-4.675 F F2 2.176(SMTP RCPT)4.676 F F1(command.)4.676 E -(De\214ned in the SMTP serv)127 268.8 Q(er only after a RCPT command.) --.15 E(${serv)102 285 Q(er_addr})-.15 E .515(The address of the serv)127 -297 R .514(er of the current outgoing SMTP connection.)-.15 F -.15(Fo) -5.514 G 3.014(rL).15 G .514(MTP deli)-3.014 F -.15(ve)-.25 G .514 -(ry the).15 F(macro is set to the name of the mailer)127 309 Q(.)-.55 E -(${serv)102 325.2 Q(er_name})-.15 E(The name of the serv)127 337.2 Q +(or the)-4.675 F F3 2.175(SMTP RCPT)4.675 F F1(command.)4.675 E +(De\214ned in the SMTP serv)127 377.4 Q(er only after a RCPT command.) +-.15 E(${serv)102 393.6 Q(er_addr})-.15 E .514(The address of the serv) +127 405.6 R .514(er of the current outgoing SMTP connection.)-.15 F -.15 +(Fo)5.515 G 3.015(rL).15 G .515(MTP deli)-3.015 F -.15(ve)-.25 G .515 +(ry the).15 F(macro is set to the name of the mailer)127 417.6 Q(.)-.55 +E(${serv)102 433.8 Q(er_name})-.15 E(The name of the serv)127 445.8 Q (er of the current outgoing SMTP or LMTP connection.)-.15 E(${time})102 -353.4 Q .006(The output of the)127 365.4 R/F3 10/Times-Italic@0 SF(time) -2.506 E F1 .007(\(3\) function, i.e., the number of seconds since 0 hou\ -rs, 0 minutes, 0 sec-)B(onds, January 1, 1970, Coordinated Uni)127 377.4 -Q -.15(ve)-.25 G(rsal T).15 E(ime \(UTC\).)-.35 E(${tls_v)102 393.6 Q -(ersion})-.15 E 1.755(The TLS/SSL v)127 405.6 R 1.755(ersion used for t\ -he connection, e.g., TLSv1, SSLv3, SSLv2; de\214ned after)-.15 F(ST)127 -417.6 Q(AR)-.93 E(TTLS has been used.)-.6 E(${total_rate})102 433.8 Q -1.373(The total number of incoming connections o)127 445.8 R -.15(ve) --.15 G 3.873(rt).15 G 1.373(he time interv)-3.873 F 1.374 -(al speci\214ed by Connection-)-.25 F(RateW)127 457.8 Q(indo)-.4 E -(wSize.)-.25 E(${v)102 474 Q(erify})-.15 E 1.141(The result of the v)127 -486 R 1.141 +462 Q .007(The output of the)127 474 R F2(time)2.507 E F1 .006(\(3\) fu\ +nction, i.e., the number of seconds since 0 hours, 0 minutes, 0 sec-)B +(onds, January 1, 1970, Coordinated Uni)127 486 Q -.15(ve)-.25 G(rsal T) +.15 E(ime \(UTC\).)-.35 E(${tls_v)102 502.2 Q(ersion})-.15 E 1.755 +(The TLS/SSL v)127 514.2 R 1.755(ersion used for the connection, e.g., \ +TLSv1, SSLv3, SSLv2; de\214ned after)-.15 F(ST)127 526.2 Q(AR)-.93 E +(TTLS has been used.)-.6 E(${total_rate})102 542.4 Q 1.374 +(The total number of incoming connections o)127 554.4 R -.15(ve)-.15 G +3.873(rt).15 G 1.373(he time interv)-3.873 F 1.373 +(al speci\214ed by Connection-)-.25 F(RateW)127 566.4 Q(indo)-.4 E +(wSize.)-.25 E(${v)102 582.6 Q(erify})-.15 E 1.14(The result of the v) +127 594.6 R 1.141 (eri\214cation of the presented cert; only de\214ned after ST)-.15 F(AR) --.93 E 1.14(TTLS has been)-.6 F 2.5(used. Possible)127 498 R -.25(va)2.5 -G(lues are:).25 E 48.06(OK v)167 514.2 R(eri\214cation succeeded.)-.15 E -48.06(NO no)167 526.2 R(cert presented.)2.5 E(NO)167 538.2 Q 44.85(Tn) --.4 G 2.5(oc)-44.85 G(ert requested.)-2.5 E -.74(FA)167 550.2 S 41.02 -(IL cert).74 F(presented b)2.5 E(ut could not be v)-.2 E(eri\214ed,)-.15 -E(e.g., the signing CA is missing.)232 562.2 Q 34.73(NONE ST)167 574.2 R -(AR)-.93 E(TTLS has not been performed.)-.6 E 35.83(TEMP temporary)167 -586.2 R(error occurred.)2.5 E(PR)167 598.2 Q -1.88 -.4(OT O)-.4 H 10.7 -(COL some).4 F(protocol error occurred.)2.5 E(SOFTW)167 610.2 Q 9.81 -(ARE ST)-1.2 F(AR)-.93 E(TTLS handshak)-.6 E 2.5(ef)-.1 G(ailed,)-2.6 E -(which is a f)232 622.2 Q(atal error for this session,)-.1 E -(the e-mail will be queued.)232 634.2 Q .749 -(There are three types of dates that can be used.)127 654.6 R(The)5.749 -E F0($a)3.249 E F1(and)3.249 E F0($b)3.249 E F1 .749 -(macros are in RFC 822 for)3.249 F(-)-.2 E(mat;)102 666.6 Q F0($a)3.214 -E F1 .714(is the time as e)3.214 F .713 -(xtracted from the \231Date:\232 line of the message \(if there w)-.15 F -.713(as one\), and)-.1 F F0($b)3.213 E F1(is)3.213 E .056 -(the current date and time \(used for postmarks\).)102 678.6 R .057 -(If no \231Date:\232 line is found in the incoming message,)5.056 F F0 -($a)102 690.6 Q F1 .305(is set to the current time also.)2.805 F(The) -5.305 E F0($d)2.805 E F1 .304(macro is equi)2.805 F -.25(va)-.25 G .304 -(lent to the).25 F F0($b)2.804 E F1 .304(macro in UNIX \(ctime\) for) -2.804 F(-)-.2 E(mat.)102 702.6 Q 0 Cg EP +-.93 E 1.141(TTLS has been)-.6 F(used \(or attempted\).)127 606.6 Q +(Possible v)5 E(alues are:)-.25 E 0 Cg EP %%Page: 52 48 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF 193.36(SMM:08-52 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .238 -(The macros)127 96 R F0($w)2.738 E F1(,)A F0($j)2.738 E F1 2.738(,a)C -(nd)-2.738 E F0($m)2.738 E F1 .238 -(are set to the identity of this host.)2.738 F/F2 10/Times-Italic@0 SF -(Sendmail)5.239 E F1 .239(tries to \214nd the fully)2.739 F .335(quali\ +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 48.06 +(OK v)167 96 R(eri\214cation succeeded.)-.15 E 48.06(NO no)167 108 R +(cert presented.)2.5 E(NO)167 120 Q 44.85(Tn)-.4 G 2.5(oc)-44.85 G +(ert requested.)-2.5 E -.74(FA)167 132 S 41.02(IL cert).74 F +(presented b)2.5 E(ut could not be v)-.2 E(eri\214ed,)-.15 E +(e.g., the signing CA is missing.)232 144 Q 34.73(NONE ST)167 156 R(AR) +-.93 E(TTLS has not been performed.)-.6 E 35.83(TEMP temporary)167 168 R +(error occurred.)2.5 E(PR)167 180 Q -1.88 -.4(OT O)-.4 H 10.7(COL some) +.4 F(protocol error occurred.)2.5 E(SOFTW)167 192 Q 9.81(ARE ST)-1.2 F +(AR)-.93 E(TTLS handshak)-.6 E 2.5(ef)-.1 G(ailed,)-2.6 E(which is a f) +232 204 Q(atal error for this session,)-.1 E(the e-mail will be queued.) +232 216 Q .749(There are three types of dates that can be used.)127 +236.4 R(The)5.749 E F0($a)3.249 E F1(and)3.249 E F0($b)3.249 E F1 .749 +(macros are in RFC 822 for)3.249 F(-)-.2 E(mat;)102 248.4 Q F0($a)3.213 +E F1 .713(is the time as e)3.213 F .714 +(xtracted from the \231Date:\232 line of the message \(if there w)-.15 F +.714(as one\), and)-.1 F F0($b)3.214 E F1(is)3.214 E .057 +(the current date and time \(used for postmarks\).)102 260.4 R .056 +(If no \231Date:\232 line is found in the incoming message,)5.057 F F0 +($a)102 272.4 Q F1 .304(is set to the current time also.)2.804 F(The) +5.304 E F0($d)2.804 E F1 .305(macro is equi)2.804 F -.25(va)-.25 G .305 +(lent to the).25 F F0($b)2.805 E F1 .305(macro in UNIX \(ctime\) for) +2.805 F(-)-.2 E(mat.)102 284.4 Q .239(The macros)127 300.6 R F0($w)2.739 +E F1(,)A F0($j)2.739 E F1 2.739(,a)C(nd)-2.739 E F0($m)2.739 E F1 .238 +(are set to the identity of this host.)2.739 F/F2 10/Times-Italic@0 SF +(Sendmail)5.238 E F1 .238(tries to \214nd the fully)2.738 F .334(quali\ \214ed name of the host if at all possible; it does this by calling)102 -108 R F2 -.1(ge)2.834 G(thostname).1 E F1 .334(\(2\) to get the current) -B .457(hostname and then passing that to)102 120 R F2 -.1(ge)2.957 G -(thostbyname).1 E F1 .457 +312.6 R F2 -.1(ge)2.835 G(thostname).1 E F1 .335 +(\(2\) to get the current)B .457(hostname and then passing that to)102 +324.6 R F2 -.1(ge)2.957 G(thostbyname).1 E F1 .457 (\(3\) which is supposed to return the canonical v)B(er)-.15 E(-)-.2 E -.279(sion of that host name.)102 134 R/F3 7/Times-Roman@0 SF(17)-4 I F1 -.279(Assuming this is successful,)2.779 4 N F0($j)2.778 E F1 .278 -(is set to the fully quali\214ed name and)2.778 F F0($m)2.778 E F1(is) -2.778 E .706(set to the domain part of the name \(e)102 146 R -.15(ve) +.278(sion of that host name.)102 338.6 R/F3 7/Times-Roman@0 SF(17)-4 I +F1 .278(Assuming this is successful,)2.778 4 N F0($j)2.778 E F1 .279 +(is set to the fully quali\214ed name and)2.778 F F0($m)2.779 E F1(is) +2.779 E .706(set to the domain part of the name \(e)102 350.6 R -.15(ve) -.25 G .706(rything after the \214rst dot\).).15 F(The)5.706 E F0($w) -3.206 E F1 .706(macro is set to the \214rst)3.206 F -.1(wo)102 158 S -.359(rd \(e).1 F -.15(ve)-.25 G .358 +3.206 E F1 .706(macro is set to the \214rst)3.206 F -.1(wo)102 362.6 S +.358(rd \(e).1 F -.15(ve)-.25 G .358 (rything before the \214rst dot\) if you ha).15 F .658 -.15(ve a l)-.2 H --2.15 -.25(ev e).15 H 2.858(l5o).25 G 2.858(rh)-2.858 G .358 -(igher con\214guration \214le; otherwise, it)-2.858 F .404 -(is set to the same v)102 170 R .405(alue as)-.25 F F0($j)2.905 E F1 +-2.15 -.25(ev e).15 H 2.858(l5o).25 G 2.858(rh)-2.858 G .359 +(igher con\214guration \214le; otherwise, it)-2.858 F .405 +(is set to the same v)102 374.6 R .405(alue as)-.25 F F0($j)2.905 E F1 5.405(.I)C 2.905(ft)-5.405 G .405 -(he canoni\214cation is not successful, it is imperati)-2.905 F .705 --.15(ve t)-.25 H .405(hat the con\214g).15 F(\214le set)102 184 Q F0($j) -2.5 E F1(to the fully quali\214ed domain name)2.5 E F3(18)-4 I F1(.)4 I -(The)127 200.2 Q F0($f)2.833 E F1 .333(macro is the id of the sender as\ - originally determined; when mailing to a speci\214c host)2.833 F(the) -102 212.2 Q F0($g)3.224 E F1 .724 -(macro is set to the address of the sender)3.224 F F2 -.37(re)3.225 G -.725(lative to the r).37 F(ecipient.)-.37 E F1 -.15(Fo)5.725 G 3.225(re) -.15 G .725(xample, if I send to)-3.375 F(\231bollard@matisse.CS.Berk)102 -224.2 Q(ele)-.1 E -.65(y.)-.15 G .425(EDU\232 from the machine \231v).65 +(he canoni\214cation is not successful, it is imperati)-2.905 F .704 +-.15(ve t)-.25 H .404(hat the con\214g).15 F(\214le set)102 388.6 Q F0 +($j)2.5 E F1(to the fully quali\214ed domain name)2.5 E F3(18)-4 I F1(.) +4 I(The)127 404.8 Q F0($f)2.832 E F1 .333(macro is the id of the sender\ + as originally determined; when mailing to a speci\214c host)2.833 F +(the)102 416.8 Q F0($g)3.225 E F1 .725 +(macro is set to the address of the sender)3.225 F F2 -.37(re)3.224 G +.724(lative to the r).37 F(ecipient.)-.37 E F1 -.15(Fo)5.724 G 3.224(re) +.15 G .724(xample, if I send to)-3.374 F(\231bollard@matisse.CS.Berk)102 +428.8 Q(ele)-.1 E -.65(y.)-.15 G .424(EDU\232 from the machine \231v).65 F(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G .424(EDU\232 the).65 F -F0($f)2.924 E F1(macro)2.924 E(will be \231eric\232 and the)102 236.2 Q +F0($f)2.925 E F1(macro)2.925 E(will be \231eric\232 and the)102 440.8 Q F0($g)2.5 E F1(macro will be \231eric@v)2.5 E(angogh.CS.Berk)-.25 E(ele) --.1 E -.65(y.)-.15 G(EDU.).65 E<9a>-.7 E(The)127 252.4 Q F0($x)2.562 E -F1 .062(macro is set to the full name of the sender)2.562 F 5.062(.T) --.55 G .062(his can be determined in se)-5.062 F -.15(ve)-.25 G .063 -(ral w).15 F 2.563(ays. It)-.1 F .63(can be passed as \215ag to)102 -264.4 R F2(sendmail)3.13 E F1 5.629(.I)C 3.129(tc)-5.629 G .629 -(an be de\214ned in the)-3.129 F/F4 9/Times-Roman@0 SF -.315(NA)3.129 G -(ME).315 E F1(en)3.129 E .629(vironment v)-.4 F 3.129(ariable. The)-.25 -F(third)3.129 E .948(choice is the v)102 276.4 R .948 -(alue of the \231Full-Name:\232 line in the header if it e)-.25 F .949 +-.1 E -.65(y.)-.15 G(EDU.).65 E<9a>-.7 E(The)127 457 Q F0($x)2.563 E F1 +.062(macro is set to the full name of the sender)2.563 F 5.062(.T)-.55 G +.062(his can be determined in se)-5.062 F -.15(ve)-.25 G .062(ral w).15 +F 2.562(ays. It)-.1 F .629(can be passed as \215ag to)102 469 R F2 +(sendmail)3.129 E F1 5.629(.I)C 3.129(tc)-5.629 G .629 +(an be de\214ned in the)-3.129 F/F4 9/Times-Roman@0 SF -.315(NA)3.13 G +(ME).315 E F1(en)3.13 E .63(vironment v)-.4 F 3.13(ariable. The)-.25 F +(third)3.13 E .949(choice is the v)102 481 R .949 +(alue of the \231Full-Name:\232 line in the header if it e)-.25 F .948 (xists, and the fourth choice is the)-.15 F .526 -(comment \214eld of a \231From:\232 line.)102 288.4 R .526 +(comment \214eld of a \231From:\232 line.)102 493 R .526 (If all of these f)5.526 F .526 (ail, and if the message is being originated locally)-.1 F(,)-.65 E -(the full name is look)102 300.4 Q(ed up in the)-.1 E F2(/etc/passwd)2.5 -E F1(\214le.)2.5 E 1.32(When sending, the)127 316.6 R F0($h)3.82 E F1(,) -A F0($u)3.82 E F1 3.82(,a)C(nd)-3.82 E F0($z)3.82 E F1 1.321 -(macros get set to the host, user)3.82 F 3.821(,a)-.4 G 1.321 -(nd home directory \(if)-3.821 F .517(local\) of the recipient.)102 -328.6 R .517(The \214rst tw)5.517 F 3.016(oa)-.1 G .516(re set from the) --3.016 F F0($@)3.016 E F1(and)3.016 E F0($:)3.016 E F1 .516 -(part of the re)3.016 F .516(writing rules, respec-)-.25 F(ti)102 340.6 -Q -.15(ve)-.25 G(ly).15 E(.)-.65 E(The)127 356.8 Q F0($p)3.806 E F1(and) -3.806 E F0($t)3.806 E F1 1.306(macros are used to create unique strings\ - \(e.g., for the \231Message-Id:\232 \214eld\).)3.806 F(The)102 368.8 Q -F0($i)3.252 E F1 .751(macro is set to the queue id on this host; if put\ - into the timestamp line it can be e)3.252 F(xtremely)-.15 E .164 -(useful for tracking messages.)102 380.8 R(The)5.164 E F0($v)2.664 E F1 -.164(macro is set to be the v)2.664 F .165(ersion number of)-.15 F F2 -(sendmail)2.665 E F1 2.665(;t)C .165(his is nor)-2.665 F(-)-.2 E -(mally put in timestamps and has been pro)102 392.8 Q -.15(ve)-.15 G 2.5 -(ne).15 G(xtremely useful for deb)-2.65 E(ugging.)-.2 E(The)127 409 Q F0 -($c)3.548 E F1 1.048(\214eld is set to the \231hop count,)3.548 F 3.548 -<9a69>-.7 G 1.048(.e., the number of times this message has been pro-) --3.548 F 2.856(cessed. This)102 421 R .356(can be determined by the) -2.856 F F02.856 E F1 .357 -(\215ag on the command line or by counting the timestamps)2.856 F -(in the message.)102 433 Q(The)127 449.2 Q F0($r)2.833 E F1(and)2.833 E -F0($s)2.833 E F1 .333 +(the full name is look)102 505 Q(ed up in the)-.1 E F2(/etc/passwd)2.5 E +F1(\214le.)2.5 E 1.321(When sending, the)127 521.2 R F0($h)3.821 E F1(,) +A F0($u)3.821 E F1 3.821(,a)C(nd)-3.821 E F0($z)3.821 E F1 1.321 +(macros get set to the host, user)3.821 F 3.82(,a)-.4 G 1.32 +(nd home directory \(if)-3.82 F .516(local\) of the recipient.)102 533.2 +R .516(The \214rst tw)5.516 F 3.016(oa)-.1 G .516(re set from the)-3.016 +F F0($@)3.016 E F1(and)3.016 E F0($:)3.016 E F1 .517(part of the re) +3.017 F .517(writing rules, respec-)-.25 F(ti)102 545.2 Q -.15(ve)-.25 G +(ly).15 E(.)-.65 E(The)127 561.4 Q F0($p)3.806 E F1(and)3.806 E F0($t) +3.806 E F1 1.306(macros are used to create unique strings \(e.g., for t\ +he \231Message-Id:\232 \214eld\).)3.806 F(The)102 573.4 Q F0($i)3.251 E +F1 .751(macro is set to the queue id on this host; if put into the time\ +stamp line it can be e)3.251 F(xtremely)-.15 E .165 +(useful for tracking messages.)102 585.4 R(The)5.165 E F0($v)2.665 E F1 +.164(macro is set to be the v)2.665 F .164(ersion number of)-.15 F F2 +(sendmail)2.664 E F1 2.664(;t)C .164(his is nor)-2.664 F(-)-.2 E +(mally put in timestamps and has been pro)102 597.4 Q -.15(ve)-.15 G 2.5 +(ne).15 G(xtremely useful for deb)-2.65 E(ugging.)-.2 E(The)127 613.6 Q +F0($c)3.547 E F1 1.048(\214eld is set to the \231hop count,)3.547 F +3.548<9a69>-.7 G 1.048 +(.e., the number of times this message has been pro-)-3.548 F 2.857 +(cessed. This)102 625.6 R .357(can be determined by the)2.857 F F0 +2.857 E F1 .356 +(\215ag on the command line or by counting the timestamps)2.857 F +(in the message.)102 637.6 Q(The)127 653.8 Q F0($r)2.832 E F1(and)2.833 +E F0($s)2.833 E F1 .333 (\214elds are set to the protocol used to communicate with)2.833 F F2 -(sendmail)2.833 E F1 .333(and the send-)2.833 F .194(ing hostname.)102 -461.2 R(The)5.194 E 2.694(yc)-.15 G .194(an be set together using the) +(sendmail)2.833 E F1 .333(and the send-)2.833 F .195(ing hostname.)102 +665.8 R(The)5.195 E 2.694(yc)-.15 G .194(an be set together using the) -2.694 F F02.694 E F1 .194 -(command line \215ag or separately using the)2.694 F F02.695 E F1 -(or)102 473.2 Q F0(\255oM)2.5 E F1(\215ags.)2.5 E(The)127 489.4 Q F0($_) -2.967 E F1 .467(is set to a v)2.967 F .467(alidated sender host name.) --.25 F .466(If the sender is running an RFC 1413 compli-)5.467 F .384 -(ant IDENT serv)102 501.4 R .384(er and the recei)-.15 F -.15(ve)-.25 G -2.884(rh).15 G .384 -(as the IDENT protocol turned on, it will include the user name)-2.884 F -(on that host.)102 513.4 Q(The)127 529.6 Q F0(${client_name})5.98 E F1 -(,)A F0(${client_addr})5.98 E F1 5.98(,a)C(nd)-5.98 E F0(${client_port}) -5.98 E F1 3.48(macros are set to the name,)5.98 F .786 -(address, and port number of the SMTP client who is in)102 541.6 R -.2 -(vo)-.4 G(king).2 E F2(sendmail)3.286 E F1 .786(as a serv)3.286 F(er) --.15 E 5.786(.T)-.55 G .786(hese can be)-5.786 F(used in the)102 553.6 Q -F2 -.15(ch)2.5 G(ec).15 E(k_*)-.2 E F1(rulesets \(using the)2.5 E F0($&) -2.5 E F1(deferred e)2.5 E -.25(va)-.25 G(luation form, of course!\).).25 -E F0 2.5(5.3. C)87 577.6 R(and F \212 De\214ne Classes)2.5 E F1 .66(Cla\ -sses of phrases may be de\214ned to match on the left hand side of re) -127 593.8 R .659(writing rules, where a)-.25 F .464(\231phrase\232 is a\ - sequence of characters that does not contain space characters.)102 -605.8 R -.15(Fo)5.465 G 2.965(re).15 G .465(xample a class of)-3.115 F -.654(all local names for this site might be created so that attempts to\ - send to oneself can be eliminated.)102 617.8 R .041(These can either b\ -e de\214ned directly in the con\214guration \214le or read in from anot\ -her \214le.)102 629.8 R .041(Classes are)5.041 F .649 -(named as a single letter or a w)102 641.8 R .649(ord in {braces}.)-.1 F -.649(Class names be)5.649 F .649(ginning with lo)-.15 F .648 -(wer case letters and)-.25 F .638(special characters are reserv)102 -653.8 R .638(ed for system use.)-.15 F .639 -(Classes de\214ned in con\214g \214les may be gi)5.639 F -.15(ve)-.25 G -3.139(nn).15 G(ames)-3.139 E 1.05 -(from the set of upper case letters for short names or be)102 665.8 R -1.05(ginning with an upper case letter for long)-.15 F .32 LW 76 675.4 -72 675.4 DL 80 675.4 76 675.4 DL 84 675.4 80 675.4 DL 88 675.4 84 675.4 -DL 92 675.4 88 675.4 DL 96 675.4 92 675.4 DL 100 675.4 96 675.4 DL 104 -675.4 100 675.4 DL 108 675.4 104 675.4 DL 112 675.4 108 675.4 DL 116 -675.4 112 675.4 DL 120 675.4 116 675.4 DL 124 675.4 120 675.4 DL 128 -675.4 124 675.4 DL 132 675.4 128 675.4 DL 136 675.4 132 675.4 DL 140 -675.4 136 675.4 DL 144 675.4 140 675.4 DL 148 675.4 144 675.4 DL 152 -675.4 148 675.4 DL 156 675.4 152 675.4 DL 160 675.4 156 675.4 DL 164 -675.4 160 675.4 DL 168 675.4 164 675.4 DL 172 675.4 168 675.4 DL 176 -675.4 172 675.4 DL 180 675.4 176 675.4 DL 184 675.4 180 675.4 DL 188 -675.4 184 675.4 DL 192 675.4 188 675.4 DL 196 675.4 192 675.4 DL 200 -675.4 196 675.4 DL 204 675.4 200 675.4 DL 208 675.4 204 675.4 DL 212 -675.4 208 675.4 DL 216 675.4 212 675.4 DL/F5 5/Times-Roman@0 SF(17)93.6 -685.8 Q/F6 8/Times-Roman@0 SF -.12(Fo)3.2 K 2(re).12 G -(xample, on some systems)-2.12 E/F7 8/Times-Italic@0 SF -.08(ge)2 G -(thostname).08 E F6(might return \231foo\232 which w)2 E +(command line \215ag or separately using the)2.694 F F02.694 E .32 +LW 76 675.4 72 675.4 DL 80 675.4 76 675.4 DL 84 675.4 80 675.4 DL 88 +675.4 84 675.4 DL 92 675.4 88 675.4 DL 96 675.4 92 675.4 DL 100 675.4 96 +675.4 DL 104 675.4 100 675.4 DL 108 675.4 104 675.4 DL 112 675.4 108 +675.4 DL 116 675.4 112 675.4 DL 120 675.4 116 675.4 DL 124 675.4 120 +675.4 DL 128 675.4 124 675.4 DL 132 675.4 128 675.4 DL 136 675.4 132 +675.4 DL 140 675.4 136 675.4 DL 144 675.4 140 675.4 DL 148 675.4 144 +675.4 DL 152 675.4 148 675.4 DL 156 675.4 152 675.4 DL 160 675.4 156 +675.4 DL 164 675.4 160 675.4 DL 168 675.4 164 675.4 DL 172 675.4 168 +675.4 DL 176 675.4 172 675.4 DL 180 675.4 176 675.4 DL 184 675.4 180 +675.4 DL 188 675.4 184 675.4 DL 192 675.4 188 675.4 DL 196 675.4 192 +675.4 DL 200 675.4 196 675.4 DL 204 675.4 200 675.4 DL 208 675.4 204 +675.4 DL 212 675.4 208 675.4 DL 216 675.4 212 675.4 DL/F5 5 +/Times-Roman@0 SF(17)93.6 685.8 Q/F6 8/Times-Roman@0 SF -.12(Fo)3.2 K 2 +(re).12 G(xample, on some systems)-2.12 E/F7 8/Times-Italic@0 SF -.08 +(ge)2 G(thostname).08 E F6(might return \231foo\232 which w)2 E (ould be mapped to \231foo.bar)-.08 E(.com\232 by)-.44 E F7 -.08(ge)2 G (thostbyname).08 E F6(.)A F5(18)93.6 699.4 Q F6(Older v)3.2 I (ersions of sendmail didn')-.12 E 2(tp)-.144 G(re-de\214ne)-2 E/F8 8 @@ -4608,4454 +4588,4502 @@ F7(always)2 E F6(had to de\214ne)2 E F8($j)2 E F6(.)A 0 Cg EP BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-53)195.86 E/F1 10/Times-Roman@0 SF(names.)102 96 Q -(The syntax is:)127 112.2 Q F0(C)142 128.4 Q/F2 10/Times-Italic@0 SF -1.666(cp)C(hr)-1.666 E(ase1 phr)-.15 E(ase2...)-.15 E F0(F)142 140.4 Q -F2 1.666<638c>C(le)-1.666 E F0(F)142 152.4 Q F2 1.666(c|)C(pr)-1.666 E --.1(og)-.45 G -.15(ra).1 G(m).15 E F0(F)142 164.4 Q F2 1.666(c[)C(mapk) --1.666 E -.3(ey)-.1 G(]@mapclass:mapspec).3 E F1 .035 -(The \214rst form de\214nes the class)102 180.6 R F2(c)2.535 E F1 .035 -(to match an)2.535 F 2.535(yo)-.15 G 2.535(ft)-2.535 G .035(he named w) --2.535 F 2.535(ords. If)-.1 F F2(phr)2.536 E(ase1)-.15 E F1(or)2.536 E -F2(phr)2.536 E(ase2)-.15 E F1 .036(is another)2.536 F .747(class, e.g.,) -102 192.6 R F2($=S)3.247 E F1 3.247(,t)C .747(he contents of class) --3.247 F F2(S)3.246 E F1 .746(are added to class)3.246 F F2(c)3.246 E F1 -5.746(.I)C 3.246(ti)-5.746 G 3.246(sp)-3.246 G .746 -(ermissible to split them among)-3.246 F(multiple lines; for e)102 204.6 -Q(xample, the tw)-.15 E 2.5(of)-.1 G(orms:)-2.5 E(CHmonet ucbmonet)142 -220.8 Q(and)102 237 Q(CHmonet)142 253.2 Q(CHucbmonet)142 265.2 Q 1.015 -(are equi)102 281.4 R -.25(va)-.25 G 3.515(lent. The).25 F -.74(``)3.516 -G(F').74 E 3.516('f)-.74 G 1.016(orms read the elements of the class) --3.516 F F2(c)3.516 E F1 1.016(from the named)3.516 F F2(\214le)3.516 E -F1(,)A F2(pr)3.516 E -.1(og)-.45 G -.15(ra).1 G(m).15 E F1 3.516(,o)C(r) --3.516 E F2 .162(map speci\214cation)102 293.4 R F1 5.162(.E)C .161 -(ach element should be listed on a separate line.)-5.162 F 1.761 -.8 -(To s)5.161 H .161(pecify an optional \214le, use).8 F -.74(``)102 305.4 -S(\255o').74 E 2.5('b)-.74 G +(SMM:08-53)195.86 E/F1 10/Times-Roman@0 SF(or)102 96 Q F0(\255oM)2.5 E +F1(\215ags.)2.5 E(The)127 112.2 Q F0($_)2.966 E F1 .466(is set to a v) +2.966 F .467(alidated sender host name.)-.25 F .467 +(If the sender is running an RFC 1413 compli-)5.467 F .385 +(ant IDENT serv)102 124.2 R .384(er and the recei)-.15 F -.15(ve)-.25 G +2.884(rh).15 G .384 +(as the IDENT protocol turned on, it will include the user name)-2.884 F +(on that host.)102 136.2 Q(The)127 152.4 Q F0(${client_name})5.98 E F1 +(,)A F0(${client_addr})5.98 E F1 5.98(,a)C(nd)-5.98 E F0(${client_port}) +5.98 E F1 3.48(macros are set to the name,)5.98 F .786 +(address, and port number of the SMTP client who is in)102 164.4 R -.2 +(vo)-.4 G(king).2 E/F2 10/Times-Italic@0 SF(sendmail)3.286 E F1 .786 +(as a serv)3.286 F(er)-.15 E 5.786(.T)-.55 G .785(hese can be)-5.786 F +(used in the)102 176.4 Q F2 -.15(ch)2.5 G(ec).15 E(k_*)-.2 E F1 +(rulesets \(using the)2.5 E F0($&)2.5 E F1(deferred e)2.5 E -.25(va)-.25 +G(luation form, of course!\).).25 E F0 2.5(5.3. C)87 200.4 R +(and F \212 De\214ne Classes)2.5 E F1 .659(Classes of phrases may be de\ +\214ned to match on the left hand side of re)127 216.6 R .66 +(writing rules, where a)-.25 F .465(\231phrase\232 is a sequence of cha\ +racters that does not contain space characters.)102 228.6 R -.15(Fo) +5.464 G 2.964(re).15 G .464(xample a class of)-3.114 F .654(all local n\ +ames for this site might be created so that attempts to send to oneself\ + can be eliminated.)102 240.6 R .041(These can either be de\214ned dire\ +ctly in the con\214guration \214le or read in from another \214le.)102 +252.6 R .04(Classes are)5.04 F .649(named as a single letter or a w)102 +264.6 R .649(ord in {braces}.)-.1 F .649(Class names be)5.649 F .649 +(ginning with lo)-.15 F .649(wer case letters and)-.25 F .639 +(special characters are reserv)102 276.6 R .639(ed for system use.)-.15 +F .638(Classes de\214ned in con\214g \214les may be gi)5.639 F -.15(ve) +-.25 G 3.138(nn).15 G(ames)-3.138 E 1.05 +(from the set of upper case letters for short names or be)102 288.6 R +1.05(ginning with an upper case letter for long)-.15 F(names.)102 300.6 +Q(The syntax is:)127 316.8 Q F0(C)142 333 Q F2 1.666(cp)C(hr)-1.666 E +(ase1 phr)-.15 E(ase2...)-.15 E F0(F)142 345 Q F2 1.666<638c>C(le)-1.666 +E F0(F)142 357 Q F2 1.666(c|)C(pr)-1.666 E -.1(og)-.45 G -.15(ra).1 G(m) +.15 E F0(F)142 369 Q F2 1.666(c[)C(mapk)-1.666 E -.3(ey)-.1 G +(]@mapclass:mapspec).3 E F1 .036(The \214rst form de\214nes the class) +102 385.2 R F2(c)2.535 E F1 .035(to match an)2.535 F 2.535(yo)-.15 G +2.535(ft)-2.535 G .035(he named w)-2.535 F 2.535(ords. If)-.1 F F2(phr) +2.535 E(ase1)-.15 E F1(or)2.535 E F2(phr)2.535 E(ase2)-.15 E F1 .035 +(is another)2.535 F .746(class, e.g.,)102 397.2 R F2($=S)3.246 E F1 +3.246(,t)C .746(he contents of class)-3.246 F F2(S)3.246 E F1 .746 +(are added to class)3.246 F F2(c)3.246 E F1 5.746(.I)C 3.247(ti)-5.746 G +3.247(sp)-3.247 G .747(ermissible to split them among)-3.247 F +(multiple lines; for e)102 409.2 Q(xample, the tw)-.15 E 2.5(of)-.1 G +(orms:)-2.5 E(CHmonet ucbmonet)142 425.4 Q(and)102 441.6 Q(CHmonet)142 +457.8 Q(CHucbmonet)142 469.8 Q 1.016(are equi)102 486 R -.25(va)-.25 G +3.516(lent. The).25 F -.74(``)3.516 G(F').74 E 3.516('f)-.74 G 1.016 +(orms read the elements of the class)-3.516 F F2(c)3.516 E F1 1.016 +(from the named)3.516 F F2(\214le)3.516 E F1(,)A F2(pr)3.515 E -.1(og) +-.45 G -.15(ra).1 G(m).15 E F1 3.515(,o)C(r)-3.515 E F2 .161 +(map speci\214cation)102 498 R F1 5.161(.E)C .161 +(ach element should be listed on a separate line.)-5.161 F 1.761 -.8 +(To s)5.161 H .162(pecify an optional \214le, use).8 F -.74(``)102 510 S +(\255o').74 E 2.5('b)-.74 G (etween the class name and the \214le name, e.g.,)-2.5 E -(Fc \255o /path/to/\214le)142 321.6 Q .396(If the \214le can')102 337.8 +(Fc \255o /path/to/\214le)142 526.2 Q .397(If the \214le can')102 542.4 R 2.896(tb)-.18 G 2.896(eu)-2.896 G(sed,)-2.896 E F2(sendmail)2.896 E F1 .396(will not complain b)2.896 F .396(ut silently ignore it.)-.2 F .396 -(The map form should be)5.396 F .364(an optional map k)102 349.8 R -.15 -(ey)-.1 G 2.864(,a)-.5 G 2.864(na)-2.864 G 2.864(ts)-2.864 G .363 -(ign, and a map class follo)-2.864 F .363 -(wed by the speci\214cation for that map.)-.25 F(Exam-)5.363 E -(ples include:)102 361.8 Q(F{V)142 378 Q(irtHosts}@ldap:\255k \(&\(obje\ -ctClass=virtHosts\)\(host=*\)\) \255v host)-.6 E -(F{MyClass}foo@hash:/etc/mail/classes)142 390 Q .95 -(will \214ll the class)102 406.2 R F0($={V)3.45 E(irtHosts})-.37 E F1 -.951(from an LD)3.45 F .951(AP map lookup and)-.4 F F0($={MyClass})3.451 -E F1 .951(from a hash data-)3.451 F .017(base map lookup of the)102 -418.2 R F0 -.25(fo)2.517 G(o).25 E F1 5.017(.T)C .017(here is also a b) --5.017 F .016(uilt-in schema that can be accessed by only specifying:) --.2 F(F{)142 434.4 Q F2(ClassName)A F1(}@LD)A(AP)-.4 E -(This will tell sendmail to use the def)102 450.6 Q(ault schema:)-.1 E -(\255k \(&\(objectClass=sendmailMT)142 466.8 Q -.4(AC)-.93 G(lass\)).4 E -(\(sendmailMT)154.5 478.8 Q -.4(AC)-.93 G(lassName=).4 E F2(ClassName)A -F1(\))A(\(|\(sendmailMT)154.5 490.8 Q -.4(AC)-.93 G(luster=${sendmailMT) -.4 E -.4(AC)-.93 G(luster}\)).4 E(\(sendmailMT)159.5 502.8 Q -(AHost=$j\)\)\))-.93 E(\255v sendmailMT)142 514.8 Q -.4(AC)-.93 G(lassV) -.4 E(alue)-1.11 E +(The map form should be)5.396 F .363(an optional map k)102 554.4 R -.15 +(ey)-.1 G 2.863(,a)-.5 G 2.863(na)-2.863 G 2.863(ts)-2.863 G .363 +(ign, and a map class follo)-2.863 F .364 +(wed by the speci\214cation for that map.)-.25 F(Exam-)5.364 E +(ples include:)102 566.4 Q(F{V)142 582.6 Q(irtHosts}@ldap:\255k \(&\(ob\ +jectClass=virtHosts\)\(host=*\)\) \255v host)-.6 E +(F{MyClass}foo@hash:/etc/mail/classes)142 594.6 Q .951 +(will \214ll the class)102 610.8 R F0($={V)3.451 E(irtHosts})-.37 E F1 +.951(from an LD)3.451 F .951(AP map lookup and)-.4 F F0($={MyClass})3.45 +E F1 .95(from a hash data-)3.45 F .016(base map lookup of the)102 622.8 +R F0 -.25(fo)2.516 G(o).25 E F1 5.016(.T)C .017(here is also a b)-5.016 +F .017(uilt-in schema that can be accessed by only specifying:)-.2 F(F{) +142 639 Q F2(ClassName)A F1(}@LD)A(AP)-.4 E +(This will tell sendmail to use the def)102 655.2 Q(ault schema:)-.1 E 0 +Cg EP +%%Page: 54 50 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-54 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF +(\255k \(&\(objectClass=sendmailMT)142 96 Q -.4(AC)-.93 G(lass\)).4 E +(\(sendmailMT)154.5 108 Q -.4(AC)-.93 G(lassName=).4 E/F2 10 +/Times-Italic@0 SF(ClassName)A F1(\))A(\(|\(sendmailMT)154.5 120 Q -.4 +(AC)-.93 G(luster=${sendmailMT).4 E -.4(AC)-.93 G(luster}\)).4 E +(\(sendmailMT)159.5 132 Q(AHost=$j\)\)\))-.93 E(\255v sendmailMT)142 144 +Q -.4(AC)-.93 G(lassV).4 E(alue)-1.11 E (Note that the lookup is only done when sendmail is initially started.) -102 531 Q 1.339(Elements of classes can be accessed in rules using)127 -547.2 R F0($=)3.839 E F1(or)3.839 E F0($~)3.839 E F1 6.339(.T)C(he) --6.339 E F0($~)3.839 E F1 1.339(\(match entries not in)3.839 F -(class\) only matches a single w)102 559.2 Q(ord; multi-w)-.1 E +102 160.2 Q 1.339(Elements of classes can be accessed in rules using)127 +176.4 R F0($=)3.839 E F1(or)3.839 E F0($~)3.839 E F1 6.339(.T)C(he) +-6.339 E F0($~)3.839 E F1 1.338(\(match entries not in)3.839 F +(class\) only matches a single w)102 188.4 Q(ord; multi-w)-.1 E (ord entries in the class are ignored in this conte)-.1 E(xt.)-.15 E -(Some classes ha)127 575.4 Q .3 -.15(ve i)-.2 H(nternal meaning to).15 E -F2(sendmail)2.5 E F1(:)A 18.42($=e contains)102 591.6 R .562 -(the Content-T)3.062 F(ransfer)-.35 E .562(-Encodings that can be 8)-.2 -F/F3 10/Symbol SFA F1 3.062(7b)C .562(it encoded.)-3.062 F .561 -(It is prede\214ned to)5.561 F -(contain \2317bit\232, \2318bit\232, and \231binary\232.)138 603.6 Q -17.86($=k set)102 619.8 R(to be the same as)2.5 E F0($k)2.5 E F1 2.5(,t) -C(hat is, the UUCP node name.)-2.5 E 15.08($=m set)102 636 R +(Some classes ha)127 204.6 Q .3 -.15(ve i)-.2 H(nternal meaning to).15 E +F2(sendmail)2.5 E F1(:)A 18.42($=e contains)102 220.8 R .561 +(the Content-T)3.061 F(ransfer)-.35 E .561(-Encodings that can be 8)-.2 +F/F3 10/Symbol SFA F1 3.062(7b)C .562(it encoded.)-3.062 F .562 +(It is prede\214ned to)5.562 F +(contain \2317bit\232, \2318bit\232, and \231binary\232.)138 232.8 Q +17.86($=k set)102 249 R(to be the same as)2.5 E F0($k)2.5 E F1 2.5(,t)C +(hat is, the UUCP node name.)-2.5 E 15.08($=m set)102 265.2 R (to the set of domains by which this host is kno)2.5 E -(wn, initially just)-.25 E F0($m)2.5 E F1(.)A 17.86($=n can)102 652.2 R -.58(be set to the set of MIME body types that can ne)3.08 F -.15(ve)-.25 -G 3.081(rb).15 G 3.081(ee)-3.081 G .581(ight to se)-3.081 F -.15(ve)-.25 -G 3.081(nb).15 G .581(it encoded.)-3.081 F(It)5.581 E(def)138 664.2 Q -1.81(aults to \231multipart/signed\232.)-.1 F 1.81 +(wn, initially just)-.25 E F0($m)2.5 E F1(.)A 17.86($=n can)102 281.4 R +.581(be set to the set of MIME body types that can ne)3.081 F -.15(ve) +-.25 G 3.08(rb).15 G 3.08(ee)-3.08 G .58(ight to se)-3.08 F -.15(ve)-.25 +G 3.08(nb).15 G .58(it encoded.)-3.08 F(It)5.58 E(def)138 293.4 Q 1.81 +(aults to \231multipart/signed\232.)-.1 F 1.81 (Message types \231message/*\232 and \231multipart/*\232 are ne)6.81 F --.15(ve)-.25 G(r).15 E 1.853(encoded directly)138 676.2 R 6.853(.M)-.65 +-.15(ve)-.25 G(r).15 E 1.853(encoded directly)138 305.4 R 6.853(.M)-.65 G 1.853(ultipart messages are al)-6.853 F -.1(wa)-.1 G 1.853 (ys handled recursi).1 F -.15(ve)-.25 G(ly).15 E 6.853(.T)-.65 G 1.853 (he handling of)-6.853 F(message/* messages are controlled by class)138 -688.2 Q F0($=s)2.5 E F1(.)A 17.86($=q A)102 704.4 R .712 -(set of Content-T)3.212 F .712(ypes that will ne)-.8 F -.15(ve)-.25 G +317.4 Q F0($=s)2.5 E F1(.)A 17.86($=q A)102 333.6 R .711 +(set of Content-T)3.211 F .712(ypes that will ne)-.8 F -.15(ve)-.25 G 3.212(rb).15 G 3.212(ee)-3.212 G .712(ncoded as base64 \(if the)-3.212 F -3.212(yh)-.15 G -2.25 -.2(av e)-3.212 H .711(to be encoded,)3.412 F(the) -138 716.4 Q 3.357(yw)-.15 G .858(ill be encoded as quoted-printable\).) --3.357 F .858(It can ha)5.858 F 1.158 -.15(ve p)-.2 H .858 -(rimary types \(e.g., \231te).15 F .858(xt\232\) or full)-.15 F 0 Cg EP -%%Page: 54 50 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-54 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -(types \(such as \231te)138 96 Q 2.5(xt/plain\232\). The)-.15 F +3.212(yh)-.15 G -2.25 -.2(av e)-3.212 H .712(to be encoded,)3.412 F(the) +138 345.6 Q 3.358(yw)-.15 G .858(ill be encoded as quoted-printable\).) +-3.358 F .858(It can ha)5.858 F 1.158 -.15(ve p)-.2 H .858 +(rimary types \(e.g., \231te).15 F .857(xt\232\) or full)-.15 F +(types \(such as \231te)138 357.6 Q 2.5(xt/plain\232\). The)-.15 F (class is initialized to ha)2.5 E .3 -.15(ve \231)-.2 H(te).15 E -(xt/plain\232 only)-.15 E(.)-.65 E 18.97($=s contains)102 112.2 R .648 +(xt/plain\232 only)-.15 E(.)-.65 E 18.97($=s contains)102 373.8 R .648 (the set of subtypes of message that can be treated recursi)3.148 F -.15 (ve)-.25 G(ly).15 E 5.648(.B)-.65 G 3.148(yd)-5.648 G(ef)-3.148 E .648 -(ault it con-)-.1 F .969(tains only \231rfc822\232.)138 124.2 R .969 -(Other \231message/*\232 types cannot be 8)5.969 F/F2 10/Symbol SFA -F1 3.469(7b)C .969(it encoded.)-3.469 F .97(If a message)5.97 F 1.045 -(containing eight bit data is sent to a se)138 136.2 R -.15(ve)-.25 G +(ault it con-)-.1 F .97(tains only \231rfc822\232.)138 385.8 R .969 +(Other \231message/*\232 types cannot be 8)5.97 F F3A F1 3.469(7b)C +.969(it encoded.)-3.469 F .969(If a message)5.969 F 1.045 +(containing eight bit data is sent to a se)138 397.8 R -.15(ve)-.25 G 3.545(nb).15 G 1.045(it host, and that message cannot be encoded)-3.545 -F(into se)138 148.2 Q -.15(ve)-.25 G 2.5(nb).15 G -(its, it will be stripped to 7 bits.)-2.5 E 20.08($=t set)102 164.4 R -.372(to the set of trusted users by the)2.872 F F0(T)2.872 E F1 .372 -(con\214guration line.)2.872 F .372(If you w)5.372 F .373 -(ant to read trusted users)-.1 F(from a \214le, use)138 176.4 Q F0(Ft) -2.5 E/F3 10/Times-Italic@0 SF(/\214le/name)A F1(.)A 15.64($=w set)102 -192.6 R .513(to be the set of all names this host is kno)3.013 F .513 -(wn by)-.25 F 5.513(.T)-.65 G .513(his can be used to match local host-) --5.513 F(names.)138 204.6 Q($={persistentMacros})102 220.8 Q 1.712 -(set to the macros that should be sa)138 232.8 R -.15(ve)-.2 G 4.212(da) +F(into se)138 409.8 Q -.15(ve)-.25 G 2.5(nb).15 G +(its, it will be stripped to 7 bits.)-2.5 E 20.08($=t set)102 426 R .372 +(to the set of trusted users by the)2.873 F F0(T)2.872 E F1 .372 +(con\214guration line.)2.872 F .372(If you w)5.372 F .372 +(ant to read trusted users)-.1 F(from a \214le, use)138 438 Q F0(Ft)2.5 +E F2(/\214le/name)A F1(.)A 15.64($=w set)102 454.2 R .513 +(to be the set of all names this host is kno)3.013 F .513(wn by)-.25 F +5.513(.T)-.65 G .513(his can be used to match local host-)-5.513 F +(names.)138 466.2 Q($={persistentMacros})102 482.4 Q 1.712 +(set to the macros that should be sa)138 494.4 R -.15(ve)-.2 G 4.212(da) .15 G 1.712(cross queue runs.)-4.212 F 1.712(Care should be tak)6.712 F -1.712(en when)-.1 F(adding macro names to this class.)138 244.8 Q F3 -(Sendmail)127 261 Q F1 .183(can be compiled to allo)2.683 F 2.683(wa) --.25 G F3(scanf)-.001 E F1 .182(\(3\) string on the)B F0(F)2.682 E F1 -2.682(line. This)2.682 F .182(lets you do simplistic)2.682 F .554 -(parsing of te)102 273 R .554(xt \214les.)-.15 F -.15(Fo)5.554 G 3.054 -(re).15 G .554(xample, to read all the user names in your system)-3.204 -F F3(/etc/passwd)3.055 E F1 .555(\214le into a)3.055 F(class, use)102 -285 Q(FL/etc/passwd %[^:])142 301.2 Q(which reads e)102 317.4 Q -.15(ve) --.25 G(ry line up to the \214rst colon.).15 E F0 2.5(5.4. M)87 341.4 R -2.5<8a44>2.5 G(e\214ne Mailer)-2.5 E F1(Programs and interf)127 357.6 Q +1.712(en when)-.1 F(adding macro names to this class.)138 506.4 Q F2 +(Sendmail)127 522.6 Q F1 .182(can be compiled to allo)2.682 F 2.682(wa) +-.25 G F2(scanf)A F1 .182(\(3\) string on the)B F0(F)2.682 E F1 2.683 +(line. This)2.683 F .183(lets you do simplistic)2.683 F .555 +(parsing of te)102 534.6 R .555(xt \214les.)-.15 F -.15(Fo)5.555 G 3.055 +(re).15 G .554(xample, to read all the user names in your system)-3.205 +F F2(/etc/passwd)3.054 E F1 .554(\214le into a)3.054 F(class, use)102 +546.6 Q(FL/etc/passwd %[^:])142 562.8 Q(which reads e)102 579 Q -.15(ve) +-.25 G(ry line up to the \214rst colon.).15 E F0 2.5(5.4. M)87 603 R 2.5 +<8a44>2.5 G(e\214ne Mailer)-2.5 E F1(Programs and interf)127 619.2 Q (aces to mailers are de\214ned in this line.)-.1 E(The format is:)5 E F0 -(M)142 373.8 Q F3(name)A F1 2.5(,{)C F3(\214eld)-2.5 E F1(=)A F3(value)A -F1(}*)1.666 E(where)102 390 Q F3(name)4.244 E F1 1.744(is the name of t\ -he mailer \(used internally only\) and the \231\214eld=name\232 pairs d\ -e\214ne)4.244 F(attrib)102 402 Q(utes of the mailer)-.2 E 5(.F)-.55 G -(ields are:)-5 E -.15(Pa)142 418.2 S 51.87(th The).15 F -(pathname of the mailer)2.5 E 47.83(Flags Special)142 430.2 R -(\215ags for this mailer)2.5 E 41.73(Sender Re)142 442.2 R -(writing set\(s\) for sender addresses)-.25 E 31.17(Recipient Re)142 -454.2 R(writing set\(s\) for recipient addresses)-.25 E 30.62 -(recipients Maximum)142 466.2 R(number of recipients per connection)2.5 -E(Ar)142 478.2 Q 49.13(gv An)-.18 F(ar)2.5 E(gument v)-.18 E -(ector to pass to this mailer)-.15 E 55.61(Eol The)142 490.2 R -(end-of-line string for this mailer)2.5 E 35.62(Maxsize The)142 502.2 R +(M)142 635.4 Q F2(name)A F1 2.5(,{)C F2(\214eld)-2.5 E F1(=)A F2(value)A +F1(}*)1.666 E(where)102 651.6 Q F2(name)4.244 E F1 1.744(is the name of\ + the mailer \(used internally only\) and the \231\214eld=name\232 pairs\ + de\214ne)4.244 F(attrib)102 663.6 Q(utes of the mailer)-.2 E 5(.F)-.55 +G(ields are:)-5 E 0 Cg EP +%%Page: 55 51 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-55)195.86 E/F1 10/Times-Roman@0 SF -.15(Pa)142 96 S 51.87 +(th The).15 F(pathname of the mailer)2.5 E 47.83(Flags Special)142 108 R +(\215ags for this mailer)2.5 E 41.73(Sender Re)142 120 R +(writing set\(s\) for sender addresses)-.25 E 31.17(Recipient Re)142 132 +R(writing set\(s\) for recipient addresses)-.25 E 30.62 +(recipients Maximum)142 144 R(number of recipients per connection)2.5 E +(Ar)142 156 Q 49.13(gv An)-.18 F(ar)2.5 E(gument v)-.18 E +(ector to pass to this mailer)-.15 E 55.61(Eol The)142 168 R +(end-of-line string for this mailer)2.5 E 35.62(Maxsize The)142 180 R (maximum message length to this mailer)2.5 E 14.51(maxmessages The)142 -514.2 R(maximum message deli)2.5 E -.15(ve)-.25 G(ries per connection) -.15 E 32.27(Linelimit The)142 526.2 R -(maximum line length in the message body)2.5 E 31.18(Directory The)142 -538.2 R -.1(wo)2.5 G(rking directory for the mailer).1 E 42.84 -(Userid The)142 550.2 R(def)2.5 E(ault user and group id to run as)-.1 E -50.62(Nice The)142 562.2 R(nice\(2\) increment for the mailer)2.5 E -38.95(Charset The)142 574.2 R(def)2.5 E -(ault character set for 8-bit characters)-.1 E -.8(Ty)142 586.2 S 49.75 -(pe T).8 F(ype information for DSN diagnostics)-.8 E -.8(Wa)142 598.2 S -50.86(it The).8 F(maximum time to w)2.5 E(ait for the mailer)-.1 E -(Queue)142 610.2 Q 20.22(group The)-.15 F(def)2.5 E -(ault queue group for the mailer)-.1 E 69.22(/T)142 622.2 S +192 R(maximum message deli)2.5 E -.15(ve)-.25 G(ries per connection).15 +E 32.27(Linelimit The)142 204 R(maximum line length in the message body) +2.5 E 31.18(Directory The)142 216 R -.1(wo)2.5 G +(rking directory for the mailer).1 E 42.84(Userid The)142 228 R(def)2.5 +E(ault user and group id to run as)-.1 E 50.62(Nice The)142 240 R +(nice\(2\) increment for the mailer)2.5 E 38.95(Charset The)142 252 R +(def)2.5 E(ault character set for 8-bit characters)-.1 E -.8(Ty)142 264 +S 49.75(pe T).8 F(ype information for DSN diagnostics)-.8 E -.8(Wa)142 +276 S 50.86(it The).8 F(maximum time to w)2.5 E(ait for the mailer)-.1 E +(Queue)142 288 Q 20.22(group The)-.15 F(def)2.5 E +(ault queue group for the mailer)-.1 E 69.22(/T)142 300 S (he root directory for the mailer)-69.22 E -(Only the \214rst character of the \214eld name is check)102 638.4 Q +(Only the \214rst character of the \214eld name is check)102 316.2 Q (ed \(it')-.1 E 2.5(sc)-.55 G(ase-sensiti)-2.5 E -.15(ve)-.25 G(\).).15 -E .396(The follo)127 654.6 R .396 +E .397(The follo)127 332.4 R .396 (wing \215ags may be set in the mailer description.)-.25 F(An)5.396 E -2.896(yo)-.15 G .397(ther \215ags may be used freely)-2.896 F .075(to c\ +2.896(yo)-.15 G .396(ther \215ags may be used freely)-2.896 F .075(to c\ onditionally assign headers to messages destined for particular mailers\ -.)102 666.6 R .075(Flags mark)5.075 F .075(ed with \207 are)-.1 F 1.192 -(not interpreted by the)102 678.6 R F3(sendmail)3.692 E F1 1.193 -(binary; these are the con)3.692 F -.15(ve)-.4 G 1.193 -(ntionally used to correlate to the \215ags).15 F .738(portion of the) -102 690.6 R F0(H)3.238 E F1 3.237(line. Flags)3.238 F(mark)3.237 E .737 +.)102 344.4 R .075(Flags mark)5.075 F .075(ed with \207 are)-.1 F 1.193 +(not interpreted by the)102 356.4 R/F2 10/Times-Italic@0 SF(sendmail) +3.693 E F1 1.193(binary; these are the con)3.693 F -.15(ve)-.4 G 1.192 +(ntionally used to correlate to the \215ags).15 F .737(portion of the) +102 368.4 R F0(H)3.237 E F1 3.237(line. Flags)3.237 F(mark)3.237 E .737 (ed with \210 apply to the mailers for the sender address rather than) --.1 F(the usual recipient mailers.)102 702.6 Q 0 Cg EP -%%Page: 55 51 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-55)195.86 E/F1 10/Times-Roman@0 SF 15.56(aR)102 96 S .987(un Ex\ -tended SMTP \(ESMTP\) protocol \(de\214ned in RFCs 1869, 1652, and 1870\ -\).)-15.56 F .987(This \215ag)5.987 F(def)122 108 Q +-.1 F(the usual recipient mailers.)102 380.4 Q 15.56(aR)102 396.6 S .987 +(un Extended SMTP \(ESMTP\) protocol \(de\214ned in RFCs 1869, 1652, an\ +d 1870\).)-15.56 F .986(This \215ag)5.987 F(def)122 408.6 Q (aults on if the SMTP greeting message includes the w)-.1 E -(ord \231ESMTP\232.)-.1 E 12.78(AL)102 124.2 S .852 +(ord \231ESMTP\232.)-.1 E 12.78(AL)102 424.8 S .852 (ook up the user \(address\) part of the resolv)-12.78 F .852 (ed mailer triple, in the alias database.)-.15 F(Normally)5.852 E -(this is only set for local mailers.)122 136.2 Q 15(bF)102 152.4 S .456 +(this is only set for local mailers.)122 436.8 Q 15(bF)102 453 S .456 (orce a blank line on the end of a message.)-15.15 F .456 (This is intended to w)5.456 F .456(ork around some stupid v)-.1 F(er) --.15 E(-)-.2 E .362(sions of /bin/mail that require a blank line, b)122 -164.4 R .362(ut do not pro)-.2 F .362(vide it themselv)-.15 F 2.861 -(es. It)-.15 F -.1(wo)2.861 G .361(uld not nor).1 F(-)-.2 E -(mally be used on netw)122 176.4 Q(ork mail.)-.1 E 13.33(BS)102 192.6 S -.142(trip leading backslashes \(\\\) of)-13.33 F 2.643(fo)-.25 G 2.643 +-.15 E(-)-.2 E .361(sions of /bin/mail that require a blank line, b)122 +465 R .362(ut do not pro)-.2 F .362(vide it themselv)-.15 F 2.862 +(es. It)-.15 F -.1(wo)2.862 G .362(uld not nor).1 F(-)-.2 E +(mally be used on netw)122 477 Q(ork mail.)-.1 E 13.33(BS)102 493.2 S +.143(trip leading backslashes \(\\\) of)-13.33 F 2.643(fo)-.25 G 2.643 (ft)-2.643 G .143 (he address; this is a subset of the functionality of the)-2.643 F F0(s) -2.643 E F1(\215ag.)2.643 E 15.56(cD)102 208.8 S 2.663(on)-15.56 G .163 -(ot include comments in addresses.)-2.663 F .163 +2.642 E F1(\215ag.)2.642 E 15.56(cD)102 509.4 S 2.662(on)-15.56 G .163 +(ot include comments in addresses.)-2.662 F .163 (This should only be used if you ha)5.163 F .463 -.15(ve t)-.2 H 2.663 (ow).15 G .163(ork around a)-2.763 F 1.846 -(remote mailer that gets confused by comments.)122 220.8 R 1.846 +(remote mailer that gets confused by comments.)122 521.4 R 1.846 (This strips addresses of the form \231Phrase)6.846 F -(
\232 or \231address \(Comment\)\232 do)122 232.8 Q -(wn to just \231address\232.)-.25 E 5.83(C\210 If)102 249 R .214 -(mail is)2.714 F/F2 10/Times-Italic@0 SF -.37(re)2.714 G(ceived).37 E F1 -.213(from a mailer with this \215ag set, an)2.713 F 2.713(ya)-.15 G .213 +(
\232 or \231address \(Comment\)\232 do)122 533.4 Q +(wn to just \231address\232.)-.25 E 5.83(C\210 If)102 549.6 R .213 +(mail is)2.713 F F2 -.37(re)2.713 G(ceived).37 E F1 .213 +(from a mailer with this \215ag set, an)2.713 F 2.713(ya)-.15 G .213 (ddresses in the header that do not ha)-2.713 F -.15(ve)-.2 G .97 -(an at sign \(\231@\232\) after being re)122 261 R .97 +(an at sign \(\231@\232\) after being re)122 561.6 R .97 (written by ruleset three will ha)-.25 F 1.27 -.15(ve t)-.2 H .97 -(he \231@domain\232 clause from).15 F(the sender en)122 273 Q -.15(ve) +(he \231@domain\232 clause from).15 F(the sender en)122 573.6 Q -.15(ve) -.4 G(lope address tack).15 E(ed on.)-.1 E(This allo)5 E -(ws mail with headers of the form:)-.25 E(From: usera@hosta)162 289.2 Q --.8(To)162 301.2 S 2.5(:u).8 G(serb@hostb, userc)-2.5 E(to be re)122 -317.4 Q(written as:)-.25 E(From: usera@hosta)162 333.6 Q -.8(To)162 -345.6 S 2.5(:u).8 G(serb@hostb, userc@hosta)-2.5 E(automatically)122 -361.8 Q 5(.H)-.65 G -.25(ow)-5 G -2.15 -.25(ev e).25 H .8 -.4(r, i).25 H -2.5(td).4 G(oesn')-2.5 E 2.5(tr)-.18 G(eally w)-2.5 E(ork reliably)-.1 E -(.)-.65 E 15(dD)102 378 S 2.56(on)-15 G .06(ot include angle brack)-2.56 -F .06(ets around route-address syntax addresses.)-.1 F .06 -(This is useful on mailers)5.06 F .187(that are going to pass addresses\ - to a shell that might interpret angle brack)122 390 R .188 -(ets as I/O redirection.)-.1 F(Ho)122 402 Q(we)-.25 E -.15(ve)-.25 G -1.621 -.4(r, i).15 H 3.321(td).4 G .821(oes not protect ag)-3.321 F .821 +(ws mail with headers of the form:)-.25 E(From: usera@hosta)162 589.8 Q +-.8(To)162 601.8 S 2.5(:u).8 G(serb@hostb, userc)-2.5 E(to be re)122 618 +Q(written as:)-.25 E(From: usera@hosta)162 634.2 Q -.8(To)162 646.2 S +2.5(:u).8 G(serb@hostb, userc@hosta)-2.5 E(automatically)122 662.4 Q 5 +(.H)-.65 G -.25(ow)-5 G -2.15 -.25(ev e).25 H .8 -.4(r, i).25 H 2.5(td) +.4 G(oesn')-2.5 E 2.5(tr)-.18 G(eally w)-2.5 E(ork reliably)-.1 E(.)-.65 +E 15(dD)102 678.6 S 2.56(on)-15 G .06(ot include angle brack)-2.56 F .06 +(ets around route-address syntax addresses.)-.1 F .06 +(This is useful on mailers)5.06 F .188(that are going to pass addresses\ + to a shell that might interpret angle brack)122 690.6 R .187 +(ets as I/O redirection.)-.1 F(Ho)122 702.6 Q(we)-.25 E -.15(ve)-.25 G +1.62 -.4(r, i).15 H 3.321(td).4 G .821(oes not protect ag)-3.321 F .821 (ainst other shell metacharacters.)-.05 F .821 (Therefore, passing addresses)5.821 F -(to a shell should not be considered secure.)122 414 Q 5.28(D\207 This) -102 430.2 R(mailer w)2.5 E(ants a \231Date:\232 header line.)-.1 E 15.56 -(eT)102 446.4 S .173(his mailer is e)-15.56 F(xpensi)-.15 E .473 -.15 -(ve t)-.25 H 2.673(oc).15 G .173(onnect to, so try to a)-2.673 F -.2(vo) --.2 G .174(id connecting normally; an).2 F 2.674(yn)-.15 G .174 -(ecessary con-)-2.674 F(nection will occur during a queue run.)122 458.4 +(to a shell should not be considered secure.)122 714.6 Q 0 Cg EP +%%Page: 56 52 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-56 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 5.28 +(D\207 This)102 96 R(mailer w)2.5 E(ants a \231Date:\232 header line.) +-.1 E 15.56(eT)102 112.2 S .174(his mailer is e)-15.56 F(xpensi)-.15 E +.474 -.15(ve t)-.25 H 2.674(oc).15 G .173(onnect to, so try to a)-2.674 +F -.2(vo)-.2 G .173(id connecting normally; an).2 F 2.673(yn)-.15 G .173 +(ecessary con-)-2.673 F(nection will occur during a queue run.)122 124.2 Q(See also option)5 E F0(HoldExpensi)2.5 E -.1(ve)-.1 G F1(.).1 E 13.89 -(EE)102 474.6 S(scape lines be)-13.89 E(ginning with \231From)-.15 E 2.5 +(EE)102 140.4 S(scape lines be)-13.89 E(ginning with \231From)-.15 E 2.5 <9a69>5 G 2.5(nt)-2.5 G(he message with a `>' sign.)-2.5 E 16.67(fT)102 -490.8 S .19(he mailer w)-16.67 F .19(ants a)-.1 F F02.69 E F2(fr) -2.69 E(om)-.45 E F1 .19(\215ag, b)2.69 F .19(ut only if this is a netw) --.2 F .19(ork forw)-.1 F .19(ard operation \(i.e., the mailer)-.1 F -(will gi)122 502.8 Q .3 -.15(ve a)-.25 H 2.5(ne).15 G(rror if the e)-2.5 -E -.15(xe)-.15 G(cuting user does not ha).15 E .3 -.15(ve s)-.2 H -(pecial permissions\).).15 E 6.94(F\207 This)102 519 R(mailer w)2.5 E -(ants a \231From:\232 header line.)-.1 E 15(gN)102 535.2 S(ormally)-15 E -(,)-.65 E F2(sendmail)4.892 E F1 2.393(sends internally generated email\ - \(e.g., error messages\) using the null)4.892 F 1.327 -(return address as required by RFC 1123.)122 547.2 R(Ho)6.327 E(we)-.25 -E -.15(ve)-.25 G 2.127 -.4(r, s).15 H 1.327(ome mailers don').4 F 3.827 -(ta)-.18 G 1.327(ccept a null return)-3.827 F 3.31(address. If)122 559.2 -R(necessary)3.31 E 3.31(,y)-.65 G .81(ou can set the)-3.31 F F0(g)3.311 -E F1 .811(\215ag to pre)3.311 F -.15(ve)-.25 G(nt).15 E F2(sendmail) -3.311 E F1 .811(from obe)3.311 F .811(ying the standards;)-.15 F 1.57 -(error messages will be sent as from the MAILER-D)122 571.2 R 1.57 +156.6 S .19(he mailer w)-16.67 F .19(ants a)-.1 F F02.69 E/F2 10 +/Times-Italic@0 SF(fr)2.69 E(om)-.45 E F1 .19(\215ag, b)2.69 F .19 +(ut only if this is a netw)-.2 F .19(ork forw)-.1 F .19 +(ard operation \(i.e., the mailer)-.1 F(will gi)122 168.6 Q .3 -.15 +(ve a)-.25 H 2.5(ne).15 G(rror if the e)-2.5 E -.15(xe)-.15 G +(cuting user does not ha).15 E .3 -.15(ve s)-.2 H(pecial permissions\).) +.15 E 6.94(F\207 This)102 184.8 R(mailer w)2.5 E +(ants a \231From:\232 header line.)-.1 E 15(gN)102 201 S(ormally)-15 E +(,)-.65 E F2(sendmail)4.893 E F1 2.393(sends internally generated email\ + \(e.g., error messages\) using the null)4.893 F 1.327 +(return address as required by RFC 1123.)122 213 R(Ho)6.327 E(we)-.25 E +-.15(ve)-.25 G 2.127 -.4(r, s).15 H 1.327(ome mailers don').4 F 3.827 +(ta)-.18 G 1.328(ccept a null return)-3.827 F 3.311(address. If)122 225 +R(necessary)3.311 E 3.311(,y)-.65 G .811(ou can set the)-3.311 F F0(g) +3.311 E F1 .811(\215ag to pre)3.311 F -.15(ve)-.25 G(nt).15 E F2 +(sendmail)3.31 E F1 .81(from obe)3.31 F .81(ying the standards;)-.15 F +1.57(error messages will be sent as from the MAILER-D)122 237 R 1.57 (AEMON \(actually)-.4 F 4.07(,t)-.65 G 1.57(he v)-4.07 F 1.57 -(alue of the)-.25 F F0($n)4.07 E F1(macro\).)122 583.2 Q 15(hU)102 599.4 -S 1.006(pper case should be preserv)-15 F 1.007 +(alue of the)-.25 F F0($n)4.07 E F1(macro\).)122 249 Q 15(hU)102 265.2 S +1.007(pper case should be preserv)-15 F 1.007 (ed in host names \(the $@ portion of the mailer triplet resolv)-.15 F -(ed)-.15 E(from ruleset 0\) for this mailer)122 611.4 Q(.)-.55 E 17.22 -(iD)102 627.6 S 2.5(oU)-17.22 G(ser Database re)-2.5 E(writing on en) --.25 E -.15(ve)-.4 G(lope sender address.).15 E 16.67(IT)102 643.8 S -.475(his mailer will be speaking SMTP to another)-16.67 F F2(sendmail) -2.974 E F1 2.974<8a61>2.974 G 2.974(ss)-2.974 G .474 -(uch it can use special protocol)-2.974 F 2.642(features. This)122 655.8 +(ed)-.15 E(from ruleset 0\) for this mailer)122 277.2 Q(.)-.55 E 17.22 +(iD)102 293.4 S 2.5(oU)-17.22 G(ser Database re)-2.5 E(writing on en) +-.25 E -.15(ve)-.4 G(lope sender address.).15 E 16.67(IT)102 309.6 S +.474(his mailer will be speaking SMTP to another)-16.67 F F2(sendmail) +2.974 E F1 2.974<8a61>2.974 G 2.975(ss)-2.974 G .475 +(uch it can use special protocol)-2.975 F 2.642(features. This)122 321.6 R .142(\215ag should not be used e)2.642 F .142(xcept for deb)-.15 F .142(ugging purposes because it uses)-.2 F F0(VERB)2.642 E F1(as)2.642 E -(SMTP command.)122 667.8 Q 17.22(jD)102 684 S 2.5(oU)-17.22 G +(SMTP command.)122 333.6 Q 17.22(jD)102 349.8 S 2.5(oU)-17.22 G (ser Database re)-2.5 E(writing on recipients as well as senders.)-.25 E -15(kN)102 700.2 S 1.03(ormally when)-15 F F2(sendmail)3.53 E F1 1.03 -(connects to a host via SMTP)3.53 F 3.529(,i)-1.11 G 3.529(tc)-3.529 G -1.029(hecks to mak)-3.529 F 3.529(es)-.1 G 1.029(ure that this isn') --3.529 F(t)-.18 E .562(accidently the same host name as might happen if) -122 712.2 R F2(sendmail)3.062 E F1 .562 -(is miscon\214gured or if a long-haul)3.062 F(netw)122 724.2 Q 1.074 -(ork interf)-.1 F 1.074(ace is set in loopback mode.)-.1 F 1.073 -(This \215ag disables the loopback check.)6.074 F 1.073(It should)6.073 -F 0 Cg EP -%%Page: 56 52 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-56 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -(only be used under v)122 96 Q(ery unusual circumstances.)-.15 E 12.78 -(KC)102 112.2 S(urrently unimplemented.)-12.78 E(Reserv)5 E -(ed for chunking.)-.15 E 17.22(lT)102 128.4 S +15(kN)102 366 S 1.029(ormally when)-15 F F2(sendmail)3.529 E F1 1.029 +(connects to a host via SMTP)3.529 F 3.529(,i)-1.11 G 3.529(tc)-3.529 G +1.03(hecks to mak)-3.529 F 3.53(es)-.1 G 1.03(ure that this isn')-3.53 F +(t)-.18 E .562(accidently the same host name as might happen if)122 378 +R F2(sendmail)3.062 E F1 .562(is miscon\214gured or if a long-haul)3.062 +F(netw)122 390 Q 1.073(ork interf)-.1 F 1.073 +(ace is set in loopback mode.)-.1 F 1.074 +(This \215ag disables the loopback check.)6.074 F 1.074(It should)6.074 +F(only be used under v)122 402 Q(ery unusual circumstances.)-.15 E 12.78 +(KC)102 418.2 S(urrently unimplemented.)-12.78 E(Reserv)5 E +(ed for chunking.)-.15 E 17.22(lT)102 434.4 S (his mailer is local \(i.e., \214nal deli)-17.22 E -.15(ve)-.25 G -(ry will be performed\).).15 E 13.89(LL)102 144.6 S .598 +(ry will be performed\).).15 E 13.89(LL)102 450.6 S .598 (imit the line lengths as speci\214ed in RFC 821.)-13.89 F .598 -(This deprecated option should be replaced by)5.598 F(the)122 156.6 Q F0 +(This deprecated option should be replaced by)5.598 F(the)122 462.6 Q F0 (L=)2.5 E F1(mail declaration.)2.5 E -.15(Fo)5 G 2.5(rh).15 G (istoric reasons, the)-2.5 E F0(L)2.5 E F1(\215ag also sets the)2.5 E F0 -(7)2.5 E F1(\215ag.)2.5 E 12.22(mT)102 172.8 S .464(his mailer can send\ - to multiple users on the same host in one transaction.)-12.22 F .463 -(When a)5.463 F F0($u)2.963 E F1(macro)2.963 E .731(occurs in the)122 -184.8 R/F2 10/Times-Italic@0 SF(ar)3.231 E(gv)-.37 E F1 .732(part of th\ -e mailer de\214nition, that \214eld will be repeated as necessary for a\ -ll)3.231 F .674(qualifying users.)122 196.8 R(Remo)5.674 E .674(ving th\ -is \215ag can defeat duplicate supression on a remote site as each)-.15 -F(recipient is sent in a separate transaction.)122 208.8 Q 3.61 -(M\207 This)102 225 R(mailer w)2.5 E -(ants a \231Message-Id:\232 header line.)-.1 E 15(nD)102 241.2 S 2.5(on) +(7)2.5 E F1(\215ag.)2.5 E 12.22(mT)102 478.8 S .463(his mailer can send\ + to multiple users on the same host in one transaction.)-12.22 F .464 +(When a)5.464 F F0($u)2.964 E F1(macro)2.964 E .732(occurs in the)122 +490.8 R F2(ar)3.232 E(gv)-.37 E F1 .732(part of the mailer de\214nition\ +, that \214eld will be repeated as necessary for all)3.232 F .673 +(qualifying users.)122 502.8 R(Remo)5.673 E .674(ving this \215ag can d\ +efeat duplicate supression on a remote site as each)-.15 F +(recipient is sent in a separate transaction.)122 514.8 Q 3.61 +(M\207 This)102 531 R(mailer w)2.5 E +(ants a \231Message-Id:\232 header line.)-.1 E 15(nD)102 547.2 S 2.5(on) -15 G (ot insert a UNIX-style \231From\232 line on the front of the message.) --2.5 E 15(oA)102 257.4 S -.1(lwa)-15 G .816(ys run as the o).1 F .816 +-2.5 E 15(oA)102 563.4 S -.1(lwa)-15 G .816(ys run as the o).1 F .816 (wner of the recipient mailbox.)-.25 F(Normally)5.816 E F2(sendmail) 3.316 E F1 .816(runs as the sender for)3.316 F .198 -(locally generated mail or as \231daemon\232 \(actually)122 269.4 R +(locally generated mail or as \231daemon\232 \(actually)122 575.4 R 2.698(,t)-.65 G .198(he user speci\214ed in the)-2.698 F F0(u)2.698 E F1 -.198(option\) when deli)2.698 F(v-)-.25 E 1.337(ering netw)122 281.4 R -1.337(ork mail.)-.1 F 1.338(The normal beha)6.338 F 1.338 +.198(option\) when deli)2.698 F(v-)-.25 E 1.338(ering netw)122 587.4 R +1.338(ork mail.)-.1 F 1.338(The normal beha)6.338 F 1.338 (vior is required by most local mailers, which will not)-.2 F(allo)122 -293.4 Q 2.521(wt)-.25 G .021(he en)-2.521 F -.15(ve)-.4 G .021 +599.4 Q 2.52(wt)-.25 G .02(he en)-2.52 F -.15(ve)-.4 G .021 (lope sender address to be set unless the mailer is running as daemon.) -.15 F .02(This \215ag is)5.02 F(ignored if the)122 305.4 Q F0(S)2.5 E F1 -(\215ag is set.)2.5 E 15(pU)102 321.6 S .497(se the route-addr style re) --15 F -.15(ve)-.25 G .498(rse-path in the SMTP \231MAIL FR).15 F .498 +.15 F .021(This \215ag is)5.021 F(ignored if the)122 611.4 Q F0(S)2.5 E +F1(\215ag is set.)2.5 E 15(pU)102 627.6 S .498 +(se the route-addr style re)-15 F -.15(ve)-.25 G .498 +(rse-path in the SMTP \231MAIL FR).15 F .497 (OM:\232 command rather than just)-.4 F .205(the return address; althou\ -gh this is required in RFC 821 section 3.1, man)122 333.6 R 2.705(yh) --.15 G .205(osts do not process)-2.705 F(re)122 345.6 Q -.15(ve)-.25 G +gh this is required in RFC 821 section 3.1, man)122 639.6 R 2.705(yh) +-.15 G .205(osts do not process)-2.705 F(re)122 651.6 Q -.15(ve)-.25 G (rse-paths properly).15 E 5(.R)-.65 G -2.15 -.25(ev e)-5 H (rse-paths are of).25 E(\214cially discouraged by RFC 1123.)-.25 E 6.94 -(P\207 This)102 361.8 R(mailer w)2.5 E(ants a \231Return-P)-.1 E -(ath:\232 line.)-.15 E 15(qW)102 378 S .068(hen an address that resolv) --15 F .069(es to this mailer is v)-.15 F .069 +(P\207 This)102 667.8 R(mailer w)2.5 E(ants a \231Return-P)-.1 E +(ath:\232 line.)-.15 E 15(qW)102 684 S .069(hen an address that resolv) +-15 F .069(es to this mailer is v)-.15 F .068 (eri\214ed \(SMTP VRFY command\), generate 250)-.15 F -(responses instead of 252 responses.)122 390 Q -(This will imply that the address is local.)5 E 16.67(rS)102 406.2 S +(responses instead of 252 responses.)122 696 Q +(This will imply that the address is local.)5 E 16.67(rS)102 712.2 S (ame as)-16.67 E F0(f)2.5 E F1 2.5(,b)C(ut sends a)-2.7 E F02.5 E -F1(\215ag.)2.5 E 13.33(RO)102 422.4 S .67 +F1(\215ag.)2.5 E 0 Cg EP +%%Page: 57 53 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-57)195.86 E/F1 10/Times-Roman@0 SF 13.33(RO)102 96 S .669 (pen SMTP connections from a \231secure\232 port.)-13.33 F .669 -(Secure ports aren')5.669 F 3.169(t\()-.18 G .669(secure, that is\) e) --3.169 F .669(xcept on)-.15 F .639 -(UNIX machines, so it is unclear that this adds an)122 434.4 R(ything.) --.15 E F2(sendmail)5.639 E F1 .64(must be running as root to)3.14 F -(be able to use this \215ag.)122 446.4 Q 16.11(sS)102 462.6 S -(trip quote characters \(" and \\\) of)-16.11 E 2.5(fo)-.25 G 2.5(ft) --2.5 G(he address before calling the mailer)-2.5 E(.)-.55 E 14.44(SD)102 -478.8 S(on')-14.44 E 3.332(tr)-.18 G .832 -(eset the userid before calling the mailer)-3.332 F 5.831(.T)-.55 G .831 -(his w)-5.831 F .831(ould be used in a secure en)-.1 F(vironment)-.4 E -(where)122 490.8 Q F2(sendmail)3.317 E F1 .817(ran as root.)3.317 F .817 +(Secure ports aren')5.669 F 3.169(t\()-.18 G .67(secure, that is\) e) +-3.169 F .67(xcept on)-.15 F .64 +(UNIX machines, so it is unclear that this adds an)122 108 R(ything.) +-.15 E/F2 10/Times-Italic@0 SF(sendmail)5.639 E F1 .639 +(must be running as root to)3.139 F(be able to use this \215ag.)122 120 +Q 16.11(sS)102 136.2 S(trip quote characters \(" and \\\) of)-16.11 E +2.5(fo)-.25 G 2.5(ft)-2.5 G(he address before calling the mailer)-2.5 E +(.)-.55 E 14.44(SD)102 152.4 S(on')-14.44 E 3.331(tr)-.18 G .831 +(eset the userid before calling the mailer)-3.331 F 5.831(.T)-.55 G .831 +(his w)-5.831 F .832(ould be used in a secure en)-.1 F(vironment)-.4 E +(where)122 164.4 Q F2(sendmail)3.318 E F1 .817(ran as root.)3.317 F .817 (This could be used to a)5.817 F -.2(vo)-.2 G .817(id for).2 F .817 -(ged addresses.)-.18 F .817(If the)5.817 F F0(U=)3.317 E F1 .818 +(ged addresses.)-.18 F .817(If the)5.817 F F0(U=)3.317 E F1 .817 (\214eld is)3.317 F(also speci\214ed, this \215ag causes the ef)122 -502.8 Q(fecti)-.25 E .3 -.15(ve u)-.25 H(ser id to be set to that user) -.15 E(.)-.55 E 15(uU)102 519 S .726(pper case should be preserv)-15 F -.725(ed in user names for this mailer)-.15 F 5.725(.S)-.55 G .725 -(tandards require preserv)-5.725 F(ation)-.25 E .748 -(of case in the local part of addresses, e)122 531 R .748 +176.4 Q(fecti)-.25 E .3 -.15(ve u)-.25 H(ser id to be set to that user) +.15 E(.)-.55 E 15(uU)102 192.6 S .725(pper case should be preserv)-15 F +.725(ed in user names for this mailer)-.15 F 5.726(.S)-.55 G .726 +(tandards require preserv)-5.726 F(ation)-.25 E .748 +(of case in the local part of addresses, e)122 204.6 R .748 (xcept for those address for which your system accepts)-.15 F -(responsibility)122 543 Q 5.151(.R)-.65 G .151(FC 2142 pro)-5.151 F .151 +(responsibility)122 216.6 Q 5.15(.R)-.65 G .15(FC 2142 pro)-5.15 F .151 (vides a long list of addresses which should be case insensiti)-.15 F --.15(ve)-.25 G 5.15(.I).15 G(f)-5.15 E .359 -(you use this \215ag, you may be violating RFC 2142.)122 555 R .36 -(Note that postmaster is al)5.359 F -.1(wa)-.1 G .36(ys treated as a).1 -F(case insensiti)122 567 Q .3 -.15(ve a)-.25 H(ddress re).15 E -.05(ga) --.15 G(rdless of this \215ag.).05 E 12.78(UT)102 583.2 S(his mailer w) --12.78 E(ants UUCP-style \231From\232 lines with the ugly \231remote fr\ -om \232 on the end.)-.1 E 12.78(wT)102 599.4 S .607 -(he user must ha)-12.78 F .907 -.15(ve a v)-.2 H .606 +-.15(ve)-.25 G 5.151(.I).15 G(f)-5.151 E .36 +(you use this \215ag, you may be violating RFC 2142.)122 228.6 R .359 +(Note that postmaster is al)5.359 F -.1(wa)-.1 G .359(ys treated as a).1 +F(case insensiti)122 240.6 Q .3 -.15(ve a)-.25 H(ddress re).15 E -.05 +(ga)-.15 G(rdless of this \215ag.).05 E 12.78(UT)102 256.8 S +(his mailer w)-12.78 E(ants UUCP-style \231From\232 lines with the ugly\ + \231remote from \232 on the end.)-.1 E 12.78(wT)102 273 S .606 +(he user must ha)-12.78 F .906 -.15(ve a v)-.2 H .606 (alid account on this machine, i.e.,)-.1 F F2 -.1(ge)3.106 G(tpwnam).1 E -F1 .606(must succeed.)3.106 F .606(If not, the)5.606 F 1.233 -(mail is bounced.)122 611.4 R 1.233(See also the)6.233 F F0 +F1 .607(must succeed.)3.106 F .607(If not, the)5.607 F 1.234 +(mail is bounced.)122 285 R 1.233(See also the)6.233 F F0 (MailBoxDatabase)3.733 E F1 3.733(option. This)3.733 F 1.233 -(is required to get \231.forw)3.733 F(ard\232)-.1 E(capability)122 623.4 -Q(.)-.65 E 10.56(WI)102 639.6 S(gnore long term host status information\ - \(see Section "Persistent Host Status Information"\).)-10.56 E 7.5 -(x\207 This)102 655.8 R(mailer w)2.5 E -(ants a \231Full-Name:\232 header line.)-.1 E 12.78(XT)102 672 S .512 +(is required to get \231.forw)3.733 F(ard\232)-.1 E(capability)122 297 Q +(.)-.65 E 10.56(WI)102 313.2 S(gnore long term host status information \ +\(see Section "Persistent Host Status Information"\).)-10.56 E 7.5 +(x\207 This)102 329.4 R(mailer w)2.5 E +(ants a \231Full-Name:\232 header line.)-.1 E 12.78(XT)102 345.6 S .511 (his mailer w)-12.78 F .512(ants to use the hidden dot algorithm as spe\ -ci\214ed in RFC 821; basically)-.1 F 3.011(,a)-.65 G .811 -.15(ny l) --3.011 H(ine).15 E(be)122 684 Q .796(ginning with a dot will ha)-.15 F -1.096 -.15(ve a)-.2 H 3.296(ne).15 G .797 -(xtra dot prepended \(to be stripped at the other end\).)-3.446 F(This) -5.797 E(insures that lines in the message containing a dot will not ter\ -minate the message prematurely)122 696 Q(.)-.65 E 15.56(zR)102 712.2 S +ci\214ed in RFC 821; basically)-.1 F 3.012(,a)-.65 G .812 -.15(ny l) +-3.012 H(ine).15 E(be)122 357.6 Q .797(ginning with a dot will ha)-.15 F +1.097 -.15(ve a)-.2 H 3.297(ne).15 G .796 +(xtra dot prepended \(to be stripped at the other end\).)-3.447 F(This) +5.796 E(insures that lines in the message containing a dot will not ter\ +minate the message prematurely)122 369.6 Q(.)-.65 E 15.56(zR)102 385.8 S .965(un Local Mail T)-15.56 F .965(ransfer Protocol \(LMTP\) between) -.35 F F2(sendmail)3.465 E F1 .965(and the local mailer)3.465 F 5.965 -(.T)-.55 G .965(his is a)-5.965 F -.25(va)122 724.2 S 1.752(riant on SM\ -TP de\214ned in RFC 2033 that is speci\214cally designed for deli).25 F --.15(ve)-.25 G 1.752(ry to a local).15 F 0 Cg EP -%%Page: 57 53 +(.T)-.55 G .965(his is a)-5.965 F -.25(va)122 397.8 S .167(riant on SMT\ +P de\214ned in RFC 2033 that is speci\214cally designed for deli).25 F +-.15(ve)-.25 G .167(ry to a local mail-).15 F(box.)122 409.8 Q 13.89(ZA) +102 426 S(pply DialDelay \(if set\) to this mailer)-13.89 E(.)-.55 E 15 +(0D)102 442.2 S(on')-15 E 3.606(tl)-.18 G 1.106 +(ook up MX records for hosts sent via SMTP/LMTP)-3.606 F 6.106(.D)-1.11 +G 3.606(on)-6.106 G 1.107(ot apply)-3.606 F F0 -.25(Fa)3.607 G +(llbackMXhost).25 E F1(either)122 454.2 Q(.)-.55 E 15(1D)102 470.4 S +(on')-15 E 2.5(ts)-.18 G(end null characters \('\\0'\) to this mailer) +-2.5 E(.)-.55 E 15(2D)102 486.6 S(on')-15 E 3.033(tu)-.18 G .533 +(se ESMTP e)-3.033 F -.15(ve)-.25 G 3.033(ni).15 G 3.033(fo)-3.033 G +-.25(ff)-3.033 G .533(ered; this is useful for brok).25 F .532 +(en systems that of)-.1 F .532(fer ESMTP b)-.25 F .532(ut f)-.2 F(ail) +-.1 E(on EHLO \(without reco)122 498.6 Q -.15(ve)-.15 G +(ring when HELO is tried ne).15 E(xt\).)-.15 E 15(3E)102 514.8 S .001 +(xtend the list of characters con)-15 F -.15(ve)-.4 G .002 +(rted to =XX notation when con).15 F -.15(ve)-.4 G .002 +(rting to Quoted-Printable to).15 F .978(include those that don')122 +526.8 R 3.478(tm)-.18 G .978(ap cleanly between ASCII and EBCDIC.)-3.478 +F .978(Useful if you ha)5.978 F 1.277 -.15(ve I)-.2 H(BM).15 E +(mainframes on site.)122 538.8 Q 15(5I)102 555 S 2.716(fn)-15 G 2.716 +(oa)-2.716 G .217(liases are found for this address, pass the address t\ +hrough ruleset 5 for possible alternate)-2.716 F 2.5(resolution. This) +122 567 R(is intended to forw)2.5 E(ard the mail to an alternate deli) +-.1 E -.15(ve)-.25 G(ry spot.).15 E 15(6S)102 583.2 S +(trip headers to se)-15 E -.15(ve)-.25 G 2.5(nb).15 G(its.)-2.5 E 15(7S) +102 599.4 S 1.141(trip all output to se)-15 F -.15(ve)-.25 G 3.641(nb) +.15 G 3.641(its. This)-3.641 F 1.141(is the def)3.641 F 1.141 +(ault if the)-.1 F F0(L)3.64 E F1 1.14(\215ag is set.)3.64 F 1.14 +(Note that clearing this)6.14 F .295(option is not suf)122 611.4 R .295 +(\214cient to get full eight bit data passed through)-.25 F F2(sendmail) +2.795 E F1 5.295(.I)C 2.795(ft)-5.295 G(he)-2.795 E F0(7)2.795 E F1 .295 +(option is set,)2.795 F .717(this is essentially al)122 623.4 R -.1(wa) +-.1 G .717(ys set, since the eighth bit w).1 F .717 +(as stripped on input.)-.1 F .716(Note that this option)5.717 F +(will only impact messages that didn')122 635.4 Q 2.5(th)-.18 G -2.25 +-.2(av e)-2.5 H(8)2.7 E/F3 10/Symbol SFA F1 2.5(7b)C(it MIME con) +-2.5 E -.15(ve)-.4 G(rsions performed.).15 E 15(8I)102 651.6 S 3.782(fs) +-15 G 1.283(et, it is acceptable to send eight bit data to this mailer;\ + the usual attempt to do 8)-3.782 F F3A F1 3.783(7b)C(it)-3.783 E +(MIME con)122 663.6 Q -.15(ve)-.4 G(rsions will be bypassed.).15 E 15 +(9I)102 679.8 S 2.705(fs)-15 G .205(et, do)-2.705 F F2(limited)2.705 E +F1(7)2.705 E F3A F1 2.704(8b)C .204(it MIME con)-2.704 F -.15(ve)-.4 +G 2.704(rsions. These).15 F(con)2.704 E -.15(ve)-.4 G .204 +(rsions are limited to te).15 F .204(xt/plain data.)-.15 F 17.22(:C)102 +696 S .982(heck addresses to see if the)-17.22 F 3.482(yb)-.15 G -.15 +(eg)-3.482 G .982(in \231:include:\232; if the).15 F 3.482(yd)-.15 G +.982(o, con)-3.482 F -.15(ve)-.4 G .982 +(rt them to the \231*include*\232).15 F(mailer)122 708 Q(.)-.55 E 0 Cg +EP +%%Page: 58 54 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-57)195.86 E/F1 10/Times-Roman@0 SF(mailbox.)122 96 Q 13.89(ZA) -102 112.2 S(pply DialDelay \(if set\) to this mailer)-13.89 E(.)-.55 E -15(0D)102 128.4 S(on')-15 E 3.607(tl)-.18 G 1.106 -(ook up MX records for hosts sent via SMTP/LMTP)-3.607 F 6.106(.D)-1.11 -G 3.606(on)-6.106 G 1.106(ot apply)-3.606 F F0 -.25(Fa)3.606 G -(llbackMXhost).25 E F1(either)122 140.4 Q(.)-.55 E 15(1D)102 156.6 S -(on')-15 E 2.5(ts)-.18 G(end null characters \('\\0'\) to this mailer) --2.5 E(.)-.55 E 15(2D)102 172.8 S(on')-15 E 3.032(tu)-.18 G .532 -(se ESMTP e)-3.032 F -.15(ve)-.25 G 3.032(ni).15 G 3.032(fo)-3.032 G --.25(ff)-3.032 G .532(ered; this is useful for brok).25 F .533 -(en systems that of)-.1 F .533(fer ESMTP b)-.25 F .533(ut f)-.2 F(ail) --.1 E(on EHLO \(without reco)122 184.8 Q -.15(ve)-.15 G -(ring when HELO is tried ne).15 E(xt\).)-.15 E 15(3E)102 201 S .002 -(xtend the list of characters con)-15 F -.15(ve)-.4 G .001 -(rted to =XX notation when con).15 F -.15(ve)-.4 G .001 -(rting to Quoted-Printable to).15 F .977(include those that don')122 213 -R 3.478(tm)-.18 G .978(ap cleanly between ASCII and EBCDIC.)-3.478 F -.978(Useful if you ha)5.978 F 1.278 -.15(ve I)-.2 H(BM).15 E -(mainframes on site.)122 225 Q 15(5I)102 241.2 S 2.717(fn)-15 G 2.717 -(oa)-2.717 G .217(liases are found for this address, pass the address t\ -hrough ruleset 5 for possible alternate)-2.717 F 2.5(resolution. This) -122 253.2 R(is intended to forw)2.5 E(ard the mail to an alternate deli) --.1 E -.15(ve)-.25 G(ry spot.).15 E 15(6S)102 269.4 S -(trip headers to se)-15 E -.15(ve)-.25 G 2.5(nb).15 G(its.)-2.5 E 15(7S) -102 285.6 S 1.14(trip all output to se)-15 F -.15(ve)-.25 G 3.64(nb).15 -G 3.64(its. This)-3.64 F 1.14(is the def)3.64 F 1.141(ault if the)-.1 F -F0(L)3.641 E F1 1.141(\215ag is set.)3.641 F 1.141 -(Note that clearing this)6.141 F .295(option is not suf)122 297.6 R .295 -(\214cient to get full eight bit data passed through)-.25 F/F2 10 -/Times-Italic@0 SF(sendmail)2.795 E F1 5.295(.I)C 2.795(ft)-5.295 G(he) --2.795 E F0(7)2.795 E F1 .295(option is set,)2.795 F .716 -(this is essentially al)122 309.6 R -.1(wa)-.1 G .717 -(ys set, since the eighth bit w).1 F .717(as stripped on input.)-.1 F -.717(Note that this option)5.717 F(will only impact messages that didn') -122 321.6 Q 2.5(th)-.18 G -2.25 -.2(av e)-2.5 H(8)2.7 E/F3 10/Symbol SF -A F1 2.5(7b)C(it MIME con)-2.5 E -.15(ve)-.4 G(rsions performed.).15 -E 15(8I)102 337.8 S 3.783(fs)-15 G 1.283(et, it is acceptable to send e\ -ight bit data to this mailer; the usual attempt to do 8)-3.783 F F3A -F1 3.782(7b)C(it)-3.782 E(MIME con)122 349.8 Q -.15(ve)-.4 G -(rsions will be bypassed.).15 E 15(9I)102 366 S 2.704(fs)-15 G .204 -(et, do)-2.704 F F2(limited)2.704 E F1(7)2.704 E F3A F1 2.704(8b)C -.204(it MIME con)-2.704 F -.15(ve)-.4 G 2.704(rsions. These).15 F(con) -2.704 E -.15(ve)-.4 G .205(rsions are limited to te).15 F .205 -(xt/plain data.)-.15 F 17.22(:C)102 382.2 S .982 -(heck addresses to see if the)-17.22 F 3.482(yb)-.15 G -.15(eg)-3.482 G -.982(in \231:include:\232; if the).15 F 3.482(yd)-.15 G .982(o, con) --3.482 F -.15(ve)-.4 G .982(rt them to the \231*include*\232).15 F -(mailer)122 394.2 Q(.)-.55 E 18(|C)102 410.4 S -(heck addresses to see if the)-18 E 2.5(yb)-.15 G -.15(eg)-2.5 G +/F0 10/Times-Bold@0 SF 193.36(SMM:08-58 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 18(|C)102 +96 S(heck addresses to see if the)-18 E 2.5(yb)-.15 G -.15(eg)-2.5 G (in with a `|'; if the).15 E 2.5(yd)-.15 G(o, con)-2.5 E -.15(ve)-.4 G -(rt them to the \231prog\232 mailer).15 E(.)-.55 E 17.22(/C)102 426.6 S +(rt them to the \231prog\232 mailer).15 E(.)-.55 E 17.22(/C)102 112.2 S (heck addresses to see if the)-17.22 E 2.5(yb)-.15 G -.15(eg)-2.5 G (in with a `/'; if the).15 E 2.5(yd)-.15 G(o, con)-2.5 E -.15(ve)-.4 G (rt them to the \231*\214le*\232 mailer).15 E(.)-.55 E 10.79(@L)102 -442.8 S(ook up addresses in the user database.)-10.79 E 11.67(%D)102 459 -S 3.382(on)-11.67 G .882(ot attempt deli)-3.382 F -.15(ve)-.25 G .883(r\ -y on initial recipient of a message or on queue runs unless the queued) -.15 F(message is selected using one of the -qI/-qR/-qS queue run modi\ -\214ers or an ETRN request.)122 471 Q .268 -(Con\214guration \214les prior to le)127 487.2 R -.15(ve)-.25 G 2.768 +128.4 S(ook up addresses in the user database.)-10.79 E 11.67(%D)102 +144.6 S 3.383(on)-11.67 G .883(ot attempt deli)-3.383 F -.15(ve)-.25 G +.882(ry on initial recipient of a message or on queue runs unless the q\ +ueued).15 F(message is selected using one of the -qI/-qR/-qS queue run \ +modi\214ers or an ETRN request.)122 156.6 Q .267 +(Con\214guration \214les prior to le)127 172.8 R -.15(ve)-.25 G 2.768 (l6a).15 G .268(ssume the `)-2.768 F -1.11(A')-.8 G 2.768(,`)1.11 G .268 (w', `5', `:', `|', `/', and `@' options on the)-2.768 F -(mailer named \231local\232.)102 499.2 Q .306(The mailer with the speci\ -al name \231error\232 can be used to generate a user error)127 515.4 R -5.306(.T)-.55 G .306(he \(optional\))-5.306 F .324(host \214eld is an e) -102 527.4 R .323(xit status to be returned, and the user \214eld is a m\ -essage to be printed.)-.15 F .323(The e)5.323 F .323(xit sta-)-.15 F -.891(tus may be numeric or one of the v)102 539.4 R .891(alues USA)-.25 -F .891(GE, NOUSER, NOHOST)-.4 F 3.391(,U)-.74 G -.35(NA)-3.391 G -1.35 -(VA)-1 G .891(ILABLE, SOFT)1.35 F(-)-.92 E -1.2(WA)102 551.4 S 1.142 -(RE, TEMPF)1.2 F 1.142(AIL, PR)-.74 F -1.88 -.4(OT O)-.4 H 1.142 -(COL, or CONFIG to return the corresponding EX_ e).4 F 1.141 +(mailer named \231local\232.)102 184.8 Q .306(The mailer with the speci\ +al name \231error\232 can be used to generate a user error)127 201 R +5.305(.T)-.55 G .305(he \(optional\))-5.305 F .323(host \214eld is an e) +102 213 R .323(xit status to be returned, and the user \214eld is a mes\ +sage to be printed.)-.15 F .324(The e)5.324 F .324(xit sta-)-.15 F .891 +(tus may be numeric or one of the v)102 225 R .891(alues USA)-.25 F .891 +(GE, NOUSER, NOHOST)-.4 F 3.39(,U)-.74 G -.35(NA)-3.39 G -1.35(VA)-1 G +.89(ILABLE, SOFT)1.35 F(-)-.92 E -1.2(WA)102 237 S 1.141(RE, TEMPF)1.2 F +1.141(AIL, PR)-.74 F -1.88 -.4(OT O)-.4 H 1.141 +(COL, or CONFIG to return the corresponding EX_ e).4 F 1.142 (xit code, or an)-.15 F .288 -(enhanced error code as described in RFC 1893,)102 563.4 R F2 .288 -(Enhanced Mail System Status Codes.)2.788 F F1 -.15(Fo)5.288 G 2.788(re) -.15 G(xample,)-2.938 E(the entry:)102 575.4 Q -($#error $@ NOHOST $: Host unkno)142 591.6 Q(wn in this domain)-.25 E +(enhanced error code as described in RFC 1893,)102 249 R/F2 10 +/Times-Italic@0 SF .288(Enhanced Mail System Status Codes.)2.788 F F1 +-.15(Fo)5.287 G 2.787(re).15 G(xample,)-2.937 E(the entry:)102 261 Q +($#error $@ NOHOST $: Host unkno)142 277.2 Q(wn in this domain)-.25 E .145(on the RHS of a rule will cause the speci\214ed error to be genera\ -ted and the \231Host unkno)102 607.8 R .145(wn\232 e)-.25 F .145 -(xit sta-)-.15 F .491(tus to be returned if the LHS matches.)102 619.8 R +ted and the \231Host unkno)102 293.4 R .146(wn\232 e)-.25 F .146 +(xit sta-)-.15 F .491(tus to be returned if the LHS matches.)102 305.4 R .491(This mailer is only functional in rulesets 0, 5, or one of the) -5.491 F 1.81(check_* rulesets.)102 631.8 R 1.81 +5.491 F 1.81(check_* rulesets.)102 317.4 R 1.81 (The host \214eld can also contain the special tok)6.81 F(en)-.1 E F0 (quarantine)4.31 E F1 1.81(which instructs)4.31 F -(sendmail to quarantine the current message.)102 643.8 Q .256 -(The mailer with the special name \231discard\232 causes an)127 660 R -2.756(ym)-.15 G .257(ail sent to it to be discarded b)-2.756 F .257 -(ut oth-)-.2 F 1.314(erwise treated as though it were successfully deli) -102 672 R -.15(ve)-.25 G 3.813(red. This).15 F 1.313 -(mailer cannot be used in ruleset 0,)3.813 F(only in the v)102 684 Q +(sendmail to quarantine the current message.)102 329.4 Q .257 +(The mailer with the special name \231discard\232 causes an)127 345.6 R +2.756(ym)-.15 G .256(ail sent to it to be discarded b)-2.756 F .256 +(ut oth-)-.2 F 1.313(erwise treated as though it were successfully deli) +102 357.6 R -.15(ve)-.25 G 3.813(red. This).15 F 1.314 +(mailer cannot be used in ruleset 0,)3.813 F(only in the v)102 369.6 Q (arious address checking rulesets.)-.25 E .468 -(The mailer named \231local\232)127 700.2 R F2(must)2.968 E F1 .468 +(The mailer named \231local\232)127 385.8 R F2(must)2.968 E F1 .468 (be de\214ned in e)2.968 F -.15(ve)-.25 G .468 (ry con\214guration \214le.).15 F .468(This is used to deli)5.468 F -.15 (ve)-.25 G(r).15 E .25(local mail, and is treated specially in se)102 -712.2 R -.15(ve)-.25 G .25(ral w).15 F 2.75(ays. Additionally)-.1 F 2.75 +397.8 R -.15(ve)-.25 G .25(ral w).15 F 2.75(ays. Additionally)-.1 F 2.75 (,t)-.65 G .25(hree other mailers named \231prog\232,)-2.75 F .942(\231\ *\214le*\232, and \231*include*\232 may be de\214ned to tune the deli) -102 724.2 R -.15(ve)-.25 G .942 -(ry of messages to programs, \214les, and).15 F 0 Cg EP -%%Page: 58 54 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-58 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -(:include: lists respecti)102 96 Q -.15(ve)-.25 G(ly).15 E 5(.T)-.65 G -(he)-5 E 2.5(yd)-.15 G(ef)-2.5 E(ault to:)-.1 E -(Mprog, P=/bin/sh, F=lsoDq9, T=DNS/RFC822/X-Unix, A=sh \255c $u)142 -112.2 Q -(M*\214le*, P=[FILE], F=lsDFMPEouq9, T=DNS/RFC822/X-Unix, A=FILE $u)142 -124.2 Q(M*include*, P=/de)142 136.2 Q(v/null, F=su, A=INCLUDE $u)-.25 E -.466 +102 409.8 R -.15(ve)-.25 G .942 +(ry of messages to programs, \214les, and).15 F +(:include: lists respecti)102 421.8 Q -.15(ve)-.25 G(ly).15 E 5(.T)-.65 +G(he)-5 E 2.5(yd)-.15 G(ef)-2.5 E(ault to:)-.1 E +(Mprog, P=/bin/sh, F=lsoDq9, T=DNS/RFC822/X-Unix, A=sh \255c $u)142 438 +Q(M*\214le*, P=[FILE], F=lsDFMPEouq9, T=DNS/RFC822/X-Unix, A=FILE $u)142 +450 Q(M*include*, P=/de)142 462 Q(v/null, F=su, A=INCLUDE $u)-.25 E .466 (Builtin pathnames are [FILE] and [IPC], the former is used for deli)127 -156.6 R -.15(ve)-.25 G .466(ry to \214les, the latter for).15 F(deli)102 -168.6 Q -.15(ve)-.25 G .12(ry via interprocess communication.).15 F -.15 +482.4 R -.15(ve)-.25 G .467(ry to \214les, the latter for).15 F(deli)102 +494.4 Q -.15(ve)-.25 G .12(ry via interprocess communication.).15 F -.15 (Fo)5.12 G 2.62(rm).15 G .12(ailers that use [IPC] as pathname the ar) -2.62 F .12(gument v)-.18 F(ec-)-.15 E .761 -(tor \(A=\) must start with TCP or FILE for deli)102 180.6 R -.15(ve) +(tor \(A=\) must start with TCP or FILE for deli)102 506.4 R -.15(ve) -.25 G .761(ry via a TCP or a Unix domain sock).15 F 3.261(et. If)-.1 F -.761(TCP is)3.261 F .109(used, the second ar)102 192.6 R .109 -(gument must be the name of the host to contact.)-.18 F .11 -(Optionally a third ar)5.11 F .11(gument can)-.18 F .576 -(be used to specify a port, the def)102 204.6 R .576 +.761(TCP is)3.261 F .11(used, the second ar)102 518.4 R .109 +(gument must be the name of the host to contact.)-.18 F .109 +(Optionally a third ar)5.109 F .109(gument can)-.18 F .575 +(be used to specify a port, the def)102 530.4 R .576 (ault is smtp \(port 25\).)-.1 F .576(If FILE is used, the second ar) -5.576 F .575(gument must)-.18 F(be the name of the Unix domain sock)102 -216.6 Q(et.)-.1 E .668(If the ar)127 232.8 R .668(gument v)-.18 F .669 -(ector does not contain $u then)-.15 F/F2 10/Times-Italic@0 SF(sendmail) -3.169 E F1 .669(will speak SMTP \(or LMTP if the)3.169 F -(mailer \215ag z is speci\214ed\) to the mailer)102 244.8 Q(.)-.55 E -(If no Eol \214eld is de\214ned, then the def)127 261 Q -(ault is "\\r\\n" for SMTP mailers and "\\n" of others.)-.1 E .616 -(The Sender and Recipient re)127 277.2 R .615 +5.576 F .576(gument must)-.18 F(be the name of the Unix domain sock)102 +542.4 Q(et.)-.1 E .669(If the ar)127 558.6 R .669(gument v)-.18 F .669 +(ector does not contain $u then)-.15 F F2(sendmail)3.169 E F1 .668 +(will speak SMTP \(or LMTP if the)3.169 F +(mailer \215ag z is speci\214ed\) to the mailer)102 570.6 Q(.)-.55 E +(If no Eol \214eld is de\214ned, then the def)127 586.8 Q +(ault is "\\r\\n" for SMTP mailers and "\\n" of others.)-.1 E .615 +(The Sender and Recipient re)127 603 R .615 (writing sets may either be a simple ruleset id or may be tw)-.25 F -3.115(oi)-.1 G(ds)-3.115 E .575 -(separated by a slash; if so, the \214rst re)102 289.2 R .576 -(writing set is applied to en)-.25 F -.15(ve)-.4 G .576 -(lope addresses and the second is).15 F(applied to headers.)102 301.2 Q +3.116(oi)-.1 G(ds)-3.116 E .576 +(separated by a slash; if so, the \214rst re)102 615 R .575 +(writing set is applied to en)-.25 F -.15(ve)-.4 G .575 +(lope addresses and the second is).15 F(applied to headers.)102 627 Q (Setting an)5 E 2.5(yv)-.15 G (alue to zero disables corresponding mailer)-2.75 E(-speci\214c re)-.2 E -(writing.)-.25 E .197 +(writing.)-.25 E .196 (The Directory is actually a colon-separated path of directories to try) -127 317.4 R 5.196(.F)-.65 G .196(or e)-5.346 F .196 +127 643.2 R 5.197(.F)-.65 G .197(or e)-5.347 F .197 (xample, the de\214ni-)-.15 F .104 -(tion \231D=$z:/\232 \214rst tries to e)102 329.4 R -.15(xe)-.15 G .104 +(tion \231D=$z:/\232 \214rst tries to e)102 655.2 R -.15(xe)-.15 G .104 (cute in the recipient').15 F 2.604(sh)-.55 G .104 -(ome directory; if that is not a)-2.604 F -.25(va)-.2 G .104 -(ilable, it tries to).25 F -.15(exe)102 341.4 S .816 +(ome directory; if that is not a)-2.604 F -.25(va)-.2 G .103 +(ilable, it tries to).25 F -.15(exe)102 667.2 S .816 (cute in the root of the \214lesystem.).15 F .816 (This is intended to be used only on the \231prog\232 mailer)5.816 F -3.316(,s)-.4 G(ince)-3.316 E .008(some shells \(such as)102 353.4 R F2 +3.317(,s)-.4 G(ince)-3.317 E .009(some shells \(such as)102 679.2 R F2 (csh)2.509 E F1 2.509(\)r)C .009(efuse to e)-2.509 F -.15(xe)-.15 G .009 (cute if the).15 F 2.509(yc)-.15 G .009 -(annot read the current directory)-2.509 F 5.009(.S)-.65 G .009 -(ince the queue)-5.009 F(directory is not normally readable by unpri)102 -365.4 Q(vile)-.25 E(ged users)-.15 E F2(csh)2.5 E F1 -(scripts as recipients can f)2.5 E(ail.)-.1 E 1.863 -(The Userid speci\214es the def)127 381.6 R 1.863 -(ault user and group id to run as, o)-.1 F -.15(ve)-.15 G 1.862 -(rriding the).15 F F0(DefaultUser)4.362 E F1 .098(option \(q.v)102 393.6 +(annot read the current directory)-2.509 F 5.008(.S)-.65 G .008 +(ince the queue)-5.008 F(directory is not normally readable by unpri)102 +691.2 Q(vile)-.25 E(ged users)-.15 E F2(csh)2.5 E F1 +(scripts as recipients can f)2.5 E(ail.)-.1 E 1.862 +(The Userid speci\214es the def)127 707.4 R 1.863 +(ault user and group id to run as, o)-.1 F -.15(ve)-.15 G 1.863 +(rriding the).15 F F0(DefaultUser)4.363 E F1 .098(option \(q.v)102 719.4 R 2.598(.\). If)-.65 F(the)2.598 E F0(S)2.598 E F1 .098(mailer \215ag i\ s also speci\214ed, this user and group will be set as the ef)2.598 F -(fecti)-.25 E .398 -.15(ve u)-.25 H(id).15 E .694 -(and gid for the process.)102 405.6 R .694(This may be gi)5.694 F -.15 -(ve)-.25 G 3.194(na).15 G(s)-3.194 E F2(user:gr)3.194 E(oup)-.45 E F1 -.693(to set both the user and group id; either)3.194 F .126 -(may be an inte)102 417.6 R .127(ger or a symbolic name to be look)-.15 -F .127(ed up in the)-.1 F F2(passwd)2.627 E F1(and)2.627 E F2(gr)2.627 E -(oup)-.45 E F1 .127(\214les respecti)2.627 F -.15(ve)-.25 G(ly).15 E -5.127(.I)-.65 G(f)-5.127 E .782 -(only a symbolic user name is speci\214ed, the group id in the)102 429.6 -R F2(passwd)3.282 E F1 .782(\214le for that user is used as the)3.282 F -(group id.)102 441.6 Q .545(The Charset \214eld is used when con)127 -457.8 R -.15(ve)-.4 G .545 -(rting a message to MIME; this is the character set used).15 F .466 -(in the Content-T)102 469.8 R .466(ype: header)-.8 F 5.466(.I)-.55 G -2.966(ft)-5.466 G .466(his is not set, the)-2.966 F F0(DefaultCharset) -2.966 E F1 .465(option is used, and if that is not)2.965 F .257 -(set, the v)102 481.8 R .257(alue \231unkno)-.25 F .257 +(fecti)-.25 E .398 -.15(ve u)-.25 H(id).15 E 0 Cg EP +%%Page: 59 55 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-59)195.86 E/F1 10/Times-Roman@0 SF .693 +(and gid for the process.)102 96 R .694(This may be gi)5.693 F -.15(ve) +-.25 G 3.194(na).15 G(s)-3.194 E/F2 10/Times-Italic@0 SF(user:gr)3.194 E +(oup)-.45 E F1 .694(to set both the user and group id; either)3.194 F +.127(may be an inte)102 108 R .127(ger or a symbolic name to be look) +-.15 F .127(ed up in the)-.1 F F2(passwd)2.627 E F1(and)2.627 E F2(gr) +2.627 E(oup)-.45 E F1 .126(\214les respecti)2.626 F -.15(ve)-.25 G(ly) +.15 E 5.126(.I)-.65 G(f)-5.126 E .782 +(only a symbolic user name is speci\214ed, the group id in the)102 120 R +F2(passwd)3.282 E F1 .782(\214le for that user is used as the)3.282 F +(group id.)102 132 Q .545(The Charset \214eld is used when con)127 148.2 +R -.15(ve)-.4 G .545 +(rting a message to MIME; this is the character set used).15 F .465 +(in the Content-T)102 160.2 R .465(ype: header)-.8 F 5.465(.I)-.55 G +2.965(ft)-5.465 G .465(his is not set, the)-2.965 F F0(DefaultCharset) +2.966 E F1 .466(option is used, and if that is not)2.966 F .258 +(set, the v)102 172.2 R .258(alue \231unkno)-.25 F .258 (wn-8bit\232 is used.)-.25 F F0 -1.2(WA)5.257 G(RNING:)1.2 E F1 .257 -(this \214eld applies to the sender')2.757 F 2.758(sm)-.55 G(ailer) --2.758 E 2.758(,n)-.4 G .258(ot the)-2.758 F(recipient')102 493.8 Q -2.702(sm)-.55 G(ailer)-2.702 E 5.202(.F)-.55 G .202(or e)-5.352 F .202 -(xample, if the en)-.15 F -.15(ve)-.4 G .201 +(this \214eld applies to the sender')2.757 F 2.757(sm)-.55 G(ailer) +-2.757 E 2.757(,n)-.4 G .257(ot the)-2.757 F(recipient')102 184.2 Q +2.701(sm)-.55 G(ailer)-2.701 E 5.201(.F)-.55 G .201(or e)-5.351 F .201 +(xample, if the en)-.15 F -.15(ve)-.4 G .202 (lope sender address lists an address on the local netw).15 F(ork)-.1 E -.48(and the recipient is on an e)102 505.8 R .48(xternal netw)-.15 F .48 +.48(and the recipient is on an e)102 196.2 R .48(xternal netw)-.15 F .48 (ork, the character set will be set from the Charset= \214eld for)-.1 F -(the local netw)102 517.8 Q(ork mailer)-.1 E 2.5(,n)-.4 G +(the local netw)102 208.2 Q(ork mailer)-.1 E 2.5(,n)-.4 G (ot that of the e)-2.5 E(xternal netw)-.15 E(ork mailer)-.1 E(.)-.55 E -.795(The T)127 534 R .795(ype= \214eld sets the type information used i\ -n MIME error messages as de\214ned by RFC)-.8 F 2.805(1894. It)102 546 R -.305(is actually three v)2.805 F .305 +.794(The T)127 224.4 R .795(ype= \214eld sets the type information used\ + in MIME error messages as de\214ned by RFC)-.8 F 2.805(1894. It)102 +236.4 R .305(is actually three v)2.805 F .305 (alues separated by slashes: the MT)-.25 F .305 (A-type \(that is, the description of ho)-.93 F(w)-.25 E .083(hosts are\ named\), the address type \(the description of e-mail addresses\), and\ - the diagnostic type \(the)102 558 R .142 -(description of error diagnostic codes\).)102 570 R .142 -(Each of these must be a re)5.142 F .143(gistered v)-.15 F .143 -(alue or be)-.25 F .143(gin with \231X\255\232.)-.15 F(The def)102 582 Q -(ault is \231dns/rfc822/smtp\232.)-.1 E 1.175(The m= \214eld speci\214e\ -s the maximum number of messages to attempt to deli)127 598.2 R -.15(ve) --.25 G 3.674(ro).15 G 3.674(nas)-3.674 G(ingle)-3.674 E -(SMTP or LMTP connection.)102 610.2 Q(The def)5 E(ault is in\214nite.) + the diagnostic type \(the)102 248.4 R .143 +(description of error diagnostic codes\).)102 260.4 R .143 +(Each of these must be a re)5.143 F .142(gistered v)-.15 F .142 +(alue or be)-.25 F .142(gin with \231X\255\232.)-.15 F(The def)102 272.4 +Q(ault is \231dns/rfc822/smtp\232.)-.1 E 1.175(The m= \214eld speci\214\ +es the maximum number of messages to attempt to deli)127 288.6 R -.15 +(ve)-.25 G 3.675(ro).15 G 3.675(nas)-3.675 G(ingle)-3.675 E +(SMTP or LMTP connection.)102 300.6 Q(The def)5 E(ault is in\214nite.) -.1 E 1.545(The r= \214eld speci\214es the maximum number of recipients\ - to attempt to deli)127 626.4 R -.15(ve)-.25 G 4.046(ri).15 G 4.046(nas) --4.046 G(ingle)-4.046 E(en)102 638.4 Q -.15(ve)-.4 G 2.5(lope. It).15 F + to attempt to deli)127 316.8 R -.15(ve)-.25 G 4.045(ri).15 G 4.045(nas) +-4.045 G(ingle)-4.045 E(en)102 328.8 Q -.15(ve)-.4 G 2.5(lope. It).15 F (def)2.5 E(aults to 100.)-.1 E 1.052(The /= \214eld speci\214es a ne)127 -654.6 R 3.552(wr)-.25 G 1.052(oot directory for the mailer)-3.552 F -6.052(.T)-.55 G 1.052(he path is macro e)-6.052 F 1.051(xpanded and)-.15 -F .512(then passed to the \231chroot\232 system call.)102 666.6 R .512 +345 R 3.552(wr)-.25 G 1.052(oot directory for the mailer)-3.552 F 6.052 +(.T)-.55 G 1.052(he path is macro e)-6.052 F 1.052(xpanded and)-.15 F +.512(then passed to the \231chroot\232 system call.)102 357 R .512 (The root directory is changed before the Directory \214eld is)5.512 F -(consulted or the uid is changed.)102 678.6 Q .561(The W)127 694.8 R -.561(ait= \214eld speci\214es the maximum time to w)-.8 F .56 +(consulted or the uid is changed.)102 369 Q .56(The W)127 385.2 R .56 +(ait= \214eld speci\214es the maximum time to w)-.8 F .561 (ait for the mailer to return after sending all)-.1 F(data to it.)102 -706.8 Q(This applies to mailers that ha)5 E .3 -.15(ve b)-.2 H(een fork) -.15 E(ed by)-.1 E F2(sendmail)2.5 E F1(.)A 0 Cg EP -%%Page: 59 55 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-59)195.86 E/F1 10/Times-Roman@0 SF 1.163(The Queue)127 96 R +397.2 Q(This applies to mailers that ha)5 E .3 -.15(ve b)-.2 H(een fork) +.15 E(ed by)-.1 E F2(sendmail)2.5 E F1(.)A 1.164(The Queue)127 413.4 R 1.164(group= \214eld speci\214es the def)-.15 F 1.164 (ault queue group in which recei)-.1 F -.15(ve)-.25 G 3.664(dm).15 G -1.164(ail should be)-3.664 F 2.849(queued. This)102 108 R .349(can be o) -2.849 F -.15(ve)-.15 G .349(rridden by other means as e).15 F .348 -(xplained in section `)-.15 F .348(`Queue Groups and Queue)-.74 F -(Directories')102 120 Q('.)-.74 E F0 2.5(5.5. H)87 144 R 2.5<8a44>2.5 G -(e\214ne Header)-2.5 E F1 1.135(The format of the header lines that)127 -160.2 R/F2 10/Times-Italic@0 SF(sendmail)3.636 E F1 1.136 -(inserts into the message are de\214ned by the)3.636 F F0(H)3.636 E F1 -2.5(line. The)102 172.2 R(syntax of this line is one of the follo)2.5 E -(wing:)-.25 E F0(H)142 188.4 Q F2(hname)A F0(:)A F2(htemplate)2.5 E F0 -(H)142 208.8 Q F1([)A F0(?)A F2(m\215a)A(gs)-.1 E F0(?])A F2(hname)A F0 -(:)A F2(htemplate)2.5 E F0(H)142 229.2 Q F1([)A F0(?$)A F2({macr)A(o}) +1.163(ail should be)-3.664 F 2.848(queued. This)102 425.4 R .348 +(can be o)2.848 F -.15(ve)-.15 G .349(rridden by other means as e).15 F +.349(xplained in section `)-.15 F .349(`Queue Groups and Queue)-.74 F +(Directories')102 437.4 Q('.)-.74 E F0 2.5(5.5. H)87 461.4 R 2.5<8a44> +2.5 G(e\214ne Header)-2.5 E F1 1.136 +(The format of the header lines that)127 477.6 R F2(sendmail)3.636 E F1 +1.135(inserts into the message are de\214ned by the)3.636 F F0(H)3.635 E +F1 2.5(line. The)102 489.6 R(syntax of this line is one of the follo)2.5 +E(wing:)-.25 E F0(H)142 505.8 Q F2(hname)A F0(:)A F2(htemplate)2.5 E F0 +(H)142 526.2 Q F1([)A F0(?)A F2(m\215a)A(gs)-.1 E F0(?])A F2(hname)A F0 +(:)A F2(htemplate)2.5 E F0(H)142 546.6 Q F1([)A F0(?$)A F2({macr)A(o}) -.45 E F0(?])A F2(hname)A F0(:)A F2(htemplate)2.5 E F1 1.058(Continuati\ on lines in this spec are re\215ected directly into the outgoing messag\ -e.)102 245.4 R(The)6.058 E F2(htemplate)3.557 E F1(is)3.557 E(macro-e) -102 257.4 Q 1.12(xpanded before insertion into the message.)-.15 F 1.12 +e.)102 562.8 R(The)6.058 E F2(htemplate)3.558 E F1(is)3.558 E(macro-e) +102 574.8 Q 1.12(xpanded before insertion into the message.)-.15 F 1.12 (If the)6.12 F F2(m\215a)3.62 E(gs)-.1 E F1 1.12 (\(surrounded by question marks\))3.62 F .161(are speci\214ed, at least\ one of the speci\214ed \215ags must be stated in the mailer de\214niti\ -on for this header)102 269.4 R .857(to be automatically output.)102 -281.4 R .858(If a)5.858 F F2(${macr)3.358 E(o})-.45 E F1 .858 +on for this header)102 586.8 R .858(to be automatically output.)102 +598.8 R .858(If a)5.858 F F2(${macr)3.358 E(o})-.45 E F1 .858 (\(surrounded by question marks\) is speci\214ed, the header)3.358 F -1.264(will be automatically output if the macro is set.)102 293.4 R -1.264(The macro may be set using an)6.264 F 3.764(yo)-.15 G 3.763(ft) --3.764 G 1.263(he normal)-3.763 F .232(methods, including using the)102 -305.4 R F0(macr)2.732 E(o)-.18 E F1 .232(storage map in a ruleset.)2.732 -F .232(If one of these headers is in the input)5.232 F .125 -(it is re\215ected to the output re)102 317.4 R -.05(ga)-.15 G .125 -(rdless of these \215ags or macros.).05 F .124(Notice: If a)5.124 F F2 -(${macr)2.624 E(o})-.45 E F1 .124(is used to set a)2.624 F(header)102 -329.4 Q 4.308(,t)-.4 G 1.809 -(hen it is useful to add that macro to class)-4.308 F F2($={per)4.309 E -(sistentMacr)-.1 E(os})-.45 E F1 1.809(which consists of the)4.309 F -(macros that should be sa)102 341.4 Q -.15(ve)-.2 G 2.5(da).15 G -(cross queue runs.)-2.5 E(Some headers ha)127 357.6 Q .3 -.15(ve s)-.2 H -(pecial semantics that will be described later).15 E(.)-.55 E 2.711(As) -127 373.8 S .211(econdary syntax allo)-2.711 F .211(ws v)-.25 F .211 +1.264(will be automatically output if the macro is set.)102 610.8 R +1.264(The macro may be set using an)6.264 F 3.764(yo)-.15 G 3.764(ft) +-3.764 G 1.264(he normal)-3.764 F .233(methods, including using the)102 +622.8 R F0(macr)2.733 E(o)-.18 E F1 .232(storage map in a ruleset.)2.732 +F .232(If one of these headers is in the input)5.232 F .124 +(it is re\215ected to the output re)102 634.8 R -.05(ga)-.15 G .124 +(rdless of these \215ags or macros.).05 F .125(Notice: If a)5.125 F F2 +(${macr)2.625 E(o})-.45 E F1 .125(is used to set a)2.625 F(header)102 +646.8 Q 4.309(,t)-.4 G 1.809 +(hen it is useful to add that macro to class)-4.309 F F2($={per)4.308 E +(sistentMacr)-.1 E(os})-.45 E F1 1.808(which consists of the)4.308 F +(macros that should be sa)102 658.8 Q -.15(ve)-.2 G 2.5(da).15 G +(cross queue runs.)-2.5 E(Some headers ha)127 675 Q .3 -.15(ve s)-.2 H +(pecial semantics that will be described later).15 E(.)-.55 E 2.71(As) +127 691.2 S .21(econdary syntax allo)-2.71 F .21(ws v)-.25 F .211 (alidation of headers as the)-.25 F 2.711(ya)-.15 G .211(re being read.) --2.711 F 1.81 -.8(To e)5.21 H .21(nable v).8 F(alidation,)-.25 E(use:) -102 385.8 Q F0(H)142 402 Q F2(Header)A F0 2.5(:$)C(>)-2.5 E F2(Ruleset)A -F0(H)142 414 Q F2(Header)A F0 2.5(:$)C(>+)-2.5 E F2(Ruleset)A F1 .265 -(The indicated)102 430.2 R F2(Ruleset)2.765 E F1 .265 -(is called for the speci\214ed)2.765 F F2(Header)2.765 E F1 2.765(,a)C -.265(nd can return)-2.765 F F0($#err)2.765 E(or)-.18 E F1 .265 -(to reject or quaran-)2.765 F 1.304(tine the message or)102 442.2 R F0 -($#discard)3.804 E F1 1.304(to discard the message \(as with the other) -3.804 F F0(check_)3.804 E F1 3.804(*r)C 3.804(ulesets\). The)-3.804 F -3.175(ruleset recei)102 454.2 R -.15(ve)-.25 G 5.675(st).15 G 3.175 -(he header \214eld-body as ar)-5.675 F 3.176 -(gument, i.e., not the header \214eld-name; see also)-.18 F .63 -(${hdr_name} and ${currHeader}.)102 466.2 R .629 -(The header is treated as a structured \214eld, that is, te)5.63 F .629 +-2.711 F 1.811 -.8(To e)5.211 H .211(nable v).8 F(alidation,)-.25 E +(use:)102 703.2 Q 0 Cg EP +%%Page: 60 56 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-60 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E(H)142 96 Q/F1 10/Times-Italic@0 +SF(Header)A F0 2.5(:$)C(>)-2.5 E F1(Ruleset)A F0(H)142 108 Q F1(Header)A +F0 2.5(:$)C(>+)-2.5 E F1(Ruleset)A/F2 10/Times-Roman@0 SF .265 +(The indicated)102 124.2 R F1(Ruleset)2.765 E F2 .265 +(is called for the speci\214ed)2.765 F F1(Header)2.765 E F2 2.765(,a)C +.265(nd can return)-2.765 F F0($#err)2.765 E(or)-.18 E F2 .265 +(to reject or quaran-)2.765 F 1.304(tine the message or)102 136.2 R F0 +($#discard)3.804 E F2 1.304(to discard the message \(as with the other) +3.804 F F0(check_)3.804 E F2 3.804(*r)C 3.804(ulesets\). The)-3.804 F +3.176(ruleset recei)102 148.2 R -.15(ve)-.25 G 5.676(st).15 G 3.176 +(he header \214eld-body as ar)-5.676 F 3.175 +(gument, i.e., not the header \214eld-name; see also)-.18 F .629 +(${hdr_name} and ${currHeader}.)102 160.2 R .629 +(The header is treated as a structured \214eld, that is, te)5.629 F .63 (xt in paren-)-.15 F .337 -(theses is deleted before processing, unless the second form)102 478.2 R -F0($>+)2.837 E F1 .337(is used.)2.837 F .337(Note: only one ruleset can) -5.337 F(be associated with a header;)102 490.2 Q F2(sendmail)2.5 E F1 -(will silently ignore multiple entries.)2.5 E -.15(Fo)127 506.4 S 2.5 +(theses is deleted before processing, unless the second form)102 172.2 R +F0($>+)2.837 E F2 .337(is used.)2.837 F .337(Note: only one ruleset can) +5.337 F(be associated with a header;)102 184.2 Q F1(sendmail)2.5 E F2 +(will silently ignore multiple entries.)2.5 E -.15(Fo)127 200.4 S 2.5 (re).15 G(xample, the con\214guration lines:)-2.65 E -(HMessage-Id: $>CheckMessageId)142 522.6 Q(SCheckMessageId)142 546.6 Q -(R< $+ @ $+)142 558.6 Q 11.06(>$)5 G 2.5(@O)-11.06 G(K)-2.5 E 52.83 -(R$* $#error)142 570.6 R($: Ille)2.5 E -.05(ga)-.15 G 2.5(lM).05 G -(essage-Id header)-2.5 E -.1(wo)102 586.8 S(uld refuse an).1 E 2.5(ym) +(HMessage-Id: $>CheckMessageId)142 216.6 Q(SCheckMessageId)142 240.6 Q +(R< $+ @ $+)142 252.6 Q 11.06(>$)5 G 2.5(@O)-11.06 G(K)-2.5 E 52.83 +(R$* $#error)142 264.6 R($: Ille)2.5 E -.05(ga)-.15 G 2.5(lM).05 G +(essage-Id header)-2.5 E -.1(wo)102 280.8 S(uld refuse an).1 E 2.5(ym) -.15 G(essage that had a Message-Id: header of an)-2.5 E 2.5(yo)-.15 G -2.5(ft)-2.5 G(he follo)-2.5 E(wing forms:)-.25 E(Message-Id: <>)142 603 -Q(Message-Id: some te)142 615 Q(xt)-.15 E(Message-Id: )142 297 +Q(Message-Id: some te)142 309 Q(xt)-.15 E(Message-Id: e).15 E(xtra crud)-.15 -E 3.069(Ad)102 643.2 S(ef)-3.069 E .569 +E 3.068(Ad)102 337.2 S(ef)-3.068 E .569 (ault ruleset that is called for headers which don')-.1 F 3.069(th)-.18 -G -2.25 -.2(av e)-3.069 H 3.069(as)3.269 G .568 +G -2.25 -.2(av e)-3.069 H 3.069(as)3.269 G .569 (peci\214c ruleset de\214ned for them can)-3.069 F(be speci\214ed by:) -102 655.2 Q F0(H)142 671.4 Q F2(*)A F0 2.5(:$)C(>)-2.5 E F2(Ruleset)A F1 -(or)102 687.6 Q F0(H)142 703.8 Q F2(*)A F0 2.5(:$)C(>+)-2.5 E F2 -(Ruleset)A 0 Cg EP -%%Page: 60 56 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-60 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E 2.5(5.6. O)87 96 R 2.5<8a53>2.5 -G(et Option)-2.5 E/F1 10/Times-Roman@0 SF .962(There are a number of gl\ -obal options that can be set from a con\214guration \214le.)127 112.2 R -.963(Options are)5.963 F .86(represented by full w)102 124.2 R .86(ords\ -; some are also representable as single characters for back compatibili\ -ty)-.1 F(.)-.65 E(The syntax of this line is:)102 136.2 Q F0(O)142 152.4 -Q/F2 10/Times-Italic@0 SF(option)7.5 E F0(=)A F2(value)A F1 .562 -(This sets option)102 168.6 R F2(option)3.062 E F1 .562(to be)3.062 F F2 -(value)3.062 E F1 5.562(.N)C .562(ote that there)-5.562 F F2(must)3.062 -E F1 .562(be a space between the letter `O' and the)3.062 F -(name of the option.)102 180.6 Q(An older v)5 E(ersion is:)-.15 E F0(O) -142 196.8 Q F2 1.666(ov)C(alue)-1.666 E F1 .13(where the option)102 213 -R F2(o)2.63 E F1 .13(is a single character)2.63 F 5.13(.D)-.55 G .13 -(epending on the option,)-5.13 F F2(value)2.63 E F1 .13 -(may be a string, an inte)2.63 F(ger)-.15 E(,)-.4 E 2.5(ab)102 225 S +102 349.2 Q F0(H)142 365.4 Q F1(*)A F0 2.5(:$)C(>)-2.5 E F1(Ruleset)A F2 +(or)102 381.6 Q F0(H)142 397.8 Q F1(*)A F0 2.5(:$)C(>+)-2.5 E F1 +(Ruleset)A F0 2.5(5.6. O)87 426 R 2.5<8a53>2.5 G(et Option)-2.5 E F2 +.963(There are a number of global options that can be set from a con\ +\214guration \214le.)127 442.2 R .962(Options are)5.962 F .86 +(represented by full w)102 454.2 R .86(ords; some are also representabl\ +e as single characters for back compatibility)-.1 F(.)-.65 E +(The syntax of this line is:)102 466.2 Q F0(O)142 482.4 Q F1(option)7.5 +E F0(=)A F1(value)A F2 .563(This sets option)102 498.6 R F1(option)3.062 +E F2 .562(to be)3.062 F F1(value)3.062 E F2 5.562(.N)C .562 +(ote that there)-5.562 F F1(must)3.062 E F2 .562 +(be a space between the letter `O' and the)3.062 F(name of the option.) +102 510.6 Q(An older v)5 E(ersion is:)-.15 E F0(O)142 526.8 Q F1 1.666 +(ov)C(alue)-1.666 E F2 .13(where the option)102 543 R F1(o)2.63 E F2 .13 +(is a single character)2.63 F 5.13(.D)-.55 G .13 +(epending on the option,)-5.13 F F1(value)2.63 E F2 .13 +(may be a string, an inte)2.63 F(ger)-.15 E(,)-.4 E 2.5(ab)102 555 S (oolean \(with le)-2.5 E -.05(ga)-.15 G 2.5(lv).05 G (alues \231t\232, \231T\232, \231f\232, or \231F\232; the def)-2.75 E (ault is TR)-.1 E(UE\), or a time interv)-.4 E(al.)-.25 E 1.164(All \ \214lenames used in options should be absolute paths, i.e., starting wi\ -th '/'.)127 241.2 R(Relati)6.165 E 1.465 -.15(ve \214)-.25 H(le-).15 E -(names most lik)102 253.2 Q +th '/'.)127 571.2 R(Relati)6.164 E 1.464 -.15(ve \214)-.25 H(le-).15 E +(names most lik)102 583.2 Q (ely cause surprises during operation \(unless otherwise noted\).)-.1 E (The options supported \(with the old, one character names in brack)127 -269.4 Q(ets\) are:)-.1 E(AliasFile=)102 285.6 Q F2(spec, spec, ...)A F1 -.183([A] Specify possible alias \214le\(s\).)174 297.6 R(Each)5.182 E F2 -(spec)2.682 E F1 .182(should be in the format `)2.682 F(`)-.74 E F2 -(class)A F0(:)A F2(info)2.682 E F1 -.74('')C(where)174 309.6 Q F2(class) -3.03 E F0(:)A F1 .531(is optional and def)3.03 F .531(aults to `)-.1 F -(`implicit')-.74 E 3.031('. Note)-.74 F(that)3.031 E F2(info)3.031 E F1 -.531(is required for)3.031 F(all)174 321.6 Q F2(class)3.525 E F1 1.025 -(es e)B 1.025(xcept \231ldap\232.)-.15 F -.15(Fo)6.025 G 3.524(rt).15 G -1.024(he \231ldap\232 class, if)-3.524 F F2(info)3.524 E F1 1.024 -(is not speci\214ed, a def)3.524 F(ault)-.1 E F2(info)174 333.6 Q F1 --.25(va)2.5 G(lue is used as follo).25 E(ws:)-.25 E -(\255k \(&\(objectClass=sendmailMT)214 349.8 Q(AAliasObject\))-.93 E -(\(sendmailMT)226.5 361.8 Q(AAliasName=aliases\))-.93 E(\(|\(sendmailMT) -226.5 373.8 Q -.4(AC)-.93 G(luster=${sendmailMT).4 E -.4(AC)-.93 G -(luster}\)).4 E(\(sendmailMT)231.5 385.8 Q(AHost=$j\)\))-.93 E -(\(sendmailMT)226.5 397.8 Q(AK)-.93 E -.15(ey)-.25 G(=%0\)\)).15 E -(\255v sendmailMT)214 409.8 Q(AAliasV)-.93 E(alue)-1.11 E 2.305 -(Depending on ho)174 426 R(w)-.25 E F2(sendmail)4.805 E F1 2.305 -(is compiled, v)4.805 F 2.305 +599.4 Q(ets\) are:)-.1 E(AliasFile=)102 615.6 Q F1(spec, spec, ...)A F2 +.182([A] Specify possible alias \214le\(s\).)174 627.6 R(Each)5.182 E F1 +(spec)2.682 E F2 .183(should be in the format `)2.682 F(`)-.74 E F1 +(class)A F0(:)A F1(info)2.683 E F2 -.74('')C(where)174 639.6 Q F1(class) +3.031 E F0(:)A F2 .531(is optional and def)3.031 F .531(aults to `)-.1 F +(`implicit')-.74 E 3.031('. Note)-.74 F(that)3.031 E F1(info)3.031 E F2 +.53(is required for)3.03 F(all)174 651.6 Q F1(class)3.524 E F2 1.024 +(es e)B 1.024(xcept \231ldap\232.)-.15 F -.15(Fo)6.024 G 3.524(rt).15 G +1.024(he \231ldap\232 class, if)-3.524 F F1(info)3.524 E F2 1.025 +(is not speci\214ed, a def)3.524 F(ault)-.1 E F1(info)174 663.6 Q F2 +-.25(va)2.5 G(lue is used as follo).25 E(ws:)-.25 E 0 Cg EP +%%Page: 61 57 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-61)195.86 E/F1 10/Times-Roman@0 SF +(\255k \(&\(objectClass=sendmailMT)214 96 Q(AAliasObject\))-.93 E +(\(sendmailMT)226.5 108 Q(AAliasName=aliases\))-.93 E(\(|\(sendmailMT) +226.5 120 Q -.4(AC)-.93 G(luster=${sendmailMT).4 E -.4(AC)-.93 G +(luster}\)).4 E(\(sendmailMT)231.5 132 Q(AHost=$j\)\))-.93 E +(\(sendmailMT)226.5 144 Q(AK)-.93 E -.15(ey)-.25 G(=%0\)\)).15 E +(\255v sendmailMT)214 156 Q(AAliasV)-.93 E(alue)-1.11 E 2.305 +(Depending on ho)174 172.2 R(w)-.25 E/F2 10/Times-Italic@0 SF(sendmail) +4.805 E F1 2.305(is compiled, v)4.805 F 2.305 (alid classes are \231implicit\232 \(search)-.25 F 1.207(through a comp\ iled-in list of alias \214le types, for back compatibility\), \231hash\ -\232 \(if)174 438 R/F3 9/Times-Roman@0 SF(NEWDB)174 450 Q F1 .496 +\232 \(if)174 184.2 R/F3 9/Times-Roman@0 SF(NEWDB)174 196.2 Q F1 .496 (is speci\214ed\), \231btree\232 \(if)2.996 F F3(NEWDB)2.996 E F1 .496 (is speci\214ed\), \231dbm\232 \(if)2.996 F F3(NDBM)2.996 E F1 .496 (is speci-)2.996 F .201(\214ed\), \231stab\232 \(internal symbol table \ -\212 not normally used unless you ha)174 462 R .5 -.15(ve n)-.2 H 2.7 -(oo).15 G(ther)-2.7 E 2.785 +\212 not normally used unless you ha)174 208.2 R .501 -.15(ve n)-.2 H +2.701(oo).15 G(ther)-2.701 E 2.786 (database lookup\), \231sequence\232 \(use a sequence of maps pre)174 -474 R 2.786(viously declared\),)-.25 F .639(\231ldap\232 \(if)174 486 R -F3(LD)3.139 E(APMAP)-.36 E F1 .639 -(is speci\214ed\), or \231nis\232 \(if)3.139 F F3(NIS)3.139 E F1 .638 -(is speci\214ed\).)3.139 F .638(If a list of)5.638 F F2(spec)3.138 E F1 -(s)A(are pro)174 498 Q(vided,)-.15 E F2(sendmail)2.5 E F1 -(searches them in order)2.5 E(.)-.55 E(AliasW)102 514.2 Q(ait=)-.8 E F2 -(timeout)A F1 .14([a] If set, w)174 526.2 R .14(ait up to)-.1 F F2 -(timeout)2.64 E F1 .141(\(units def)2.641 F .141 -(ault to minutes\) for an \231@:@\232 entry to e)-.1 F(xist)-.15 E .518 -(in the alias database before starting up.)174 538.2 R .517 -(If it does not appear in the)5.517 F F2(timeout)3.017 E F1(inter)3.017 -E(-)-.2 E -.25(va)174 550.2 S 2.5(li).25 G(ssue a w)-2.5 E(arning.)-.1 E -(Allo)102 566.4 Q(wBogusHELO)-.25 E 1.104([no short name] If set, allo) -174 578.4 R 3.604(wH)-.25 G 1.104(ELO SMTP commands that don')-3.604 F -3.604(ti)-.18 G 1.104(nclude a host)-3.604 F 2.882(name. Setting)174 -590.4 R .382(this violates RFC 1123 section 5.2.5, b)2.882 F .381 -(ut is necessary to interoper)-.2 F(-)-.2 E .06(ate with se)174 602.4 R --.15(ve)-.25 G .06(ral SMTP clients.).15 F .061(If there is a v)5.06 F -.061(alue, it is still check)-.25 F .061(ed for le)-.1 F(gitimac)-.15 E --.65(y.)-.15 G(AuthMaxBits=)102 618.6 Q F2(N)A F1 .698([no short name] \ +220.2 R 2.785(viously declared\),)-.25 F .638(\231ldap\232 \(if)174 +232.2 R F3(LD)3.138 E(APMAP)-.36 E F1 .638 +(is speci\214ed\), or \231nis\232 \(if)3.138 F F3(NIS)3.139 E F1 .639 +(is speci\214ed\).)3.139 F .639(If a list of)5.639 F F2(spec)3.139 E F1 +(s)A(are pro)174 244.2 Q(vided,)-.15 E F2(sendmail)2.5 E F1 +(searches them in order)2.5 E(.)-.55 E(AliasW)102 260.4 Q(ait=)-.8 E F2 +(timeout)A F1 .141([a] If set, w)174 272.4 R .141(ait up to)-.1 F F2 +(timeout)2.641 E F1 .141(\(units def)2.641 F .14 +(ault to minutes\) for an \231@:@\232 entry to e)-.1 F(xist)-.15 E .517 +(in the alias database before starting up.)174 284.4 R .517 +(If it does not appear in the)5.517 F F2(timeout)3.018 E F1(inter)3.018 +E(-)-.2 E -.25(va)174 296.4 S 2.5(li).25 G(ssue a w)-2.5 E(arning.)-.1 E +(Allo)102 312.6 Q(wBogusHELO)-.25 E 1.104([no short name] If set, allo) +174 324.6 R 3.604(wH)-.25 G 1.104(ELO SMTP commands that don')-3.604 F +3.604(ti)-.18 G 1.103(nclude a host)-3.604 F 2.881(name. Setting)174 +336.6 R .382(this violates RFC 1123 section 5.2.5, b)2.881 F .382 +(ut is necessary to interoper)-.2 F(-)-.2 E .061(ate with se)174 348.6 R +-.15(ve)-.25 G .061(ral SMTP clients.).15 F .061(If there is a v)5.061 F +.06(alue, it is still check)-.25 F .06(ed for le)-.1 F(gitimac)-.15 E +-.65(y.)-.15 G(AuthMaxBits=)102 364.8 Q F2(N)A F1 .697([no short name] \ Limit the maximum encryption strength for the security layer in)5.24 F -1.317(SMTP A)174 630.6 R 1.317(UTH \(SASL\). Def)-.55 F 1.317 -(ault is essentially unlimited.)-.1 F 1.317(This allo)6.317 F 1.318 +1.318(SMTP A)174 376.8 R 1.318(UTH \(SASL\). Def)-.55 F 1.317 +(ault is essentially unlimited.)-.1 F 1.317(This allo)6.317 F 1.317 (ws to turn of)-.25 F(f)-.25 E .377(additional encryption in SASL if ST) -174 642.6 R(AR)-.93 E .377(TTLS is already encrypting the communi-)-.6 F -.179(cation, because the e)174 654.6 R .179 +174 388.8 R(AR)-.93 E .377(TTLS is already encrypting the communi-)-.6 F +.179(cation, because the e)174 400.8 R .179 (xisting encryption strength is tak)-.15 F .179 -(en into account when choos-)-.1 F .998 -(ing an algorithm for the security layer)174 666.6 R 5.998(.F)-.55 G -.998(or e)-6.148 F .998(xample, if ST)-.15 F(AR)-.93 E .997 +(en into account when choos-)-.1 F .997 +(ing an algorithm for the security layer)174 412.8 R 5.998(.F)-.55 G +.998(or e)-6.148 F .998(xample, if ST)-.15 F(AR)-.93 E .998 (TTLS is used and)-.6 F .437 -(the symmetric cipher is 3DES, then the the k)174 678.6 R -.15(ey)-.1 G -.437(length \(in bits\) is 168.).15 F .438(Hence set-)5.438 F(ting)174 -690.6 Q F0 -.5(Au)2.5 G(thMaxBits).5 E F1(to 168 will disable an)2.5 E -2.5(ye)-.15 G(ncryption in SASL.)-2.5 E -1.05(AuthMechanisms [no)102 -706.8 R .687(short name] List of authentication mechanisms for A)3.188 F -.687(UTH \(separated by spa-)-.55 F 3.048(ces\). The)174 718.8 R(adv) -3.048 E .548 +(the symmetric cipher is 3DES, then the the k)174 424.8 R -.15(ey)-.1 G +.437(length \(in bits\) is 168.).15 F .437(Hence set-)5.437 F(ting)174 +436.8 Q F0 -.5(Au)2.5 G(thMaxBits).5 E F1(to 168 will disable an)2.5 E +2.5(ye)-.15 G(ncryption in SASL.)-2.5 E -1.05(AuthMechanisms [no)102 453 +R .687(short name] List of authentication mechanisms for A)3.187 F .688 +(UTH \(separated by spa-)-.55 F 3.049(ces\). The)174 465 R(adv)3.049 E +.548 (ertised list of authentication mechanisms will be the intersection of) --.15 F 0 Cg EP -%%Page: 61 57 +-.15 F 1.125(this list and the list of a)174 477 R -.25(va)-.2 G 1.126 +(ilable mechanisms as determined by the Cyrus SASL).25 F(library)174 489 +Q 6.167(.I)-.65 G 3.667(fS)-6.167 G -.93(TA)-3.667 G -.6(RT).93 G 1.167 +(TLS is acti).6 F -.15(ve)-.25 G 3.667(,E).15 G(XTERN)-3.667 E 1.167 +(AL will be added to this list.)-.35 F 1.166(In that)6.167 F +(case, the v)174 501 Q +(alue of {cert_subject} is used as authentication id.)-.25 E 17.83 +(AuthOptions [no)102 517.2 R .836 +(short name] List of options for SMTP A)3.335 F .836 +(UTH consisting of single characters)-.55 F(with interv)174 529.2 Q +(ening white space or commas.)-.15 E 0 Cg EP +%%Page: 62 58 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-61)195.86 E/F1 10/Times-Roman@0 SF 1.126 -(this list and the list of a)174 96 R -.25(va)-.2 G 1.125 -(ilable mechanisms as determined by the Cyrus SASL).25 F(library)174 108 -Q 6.166(.I)-.65 G 3.667(fS)-6.166 G -.93(TA)-3.667 G -.6(RT).93 G 1.167 -(TLS is acti).6 F -.15(ve)-.25 G 3.667(,E).15 G(XTERN)-3.667 E 1.167 -(AL will be added to this list.)-.35 F 1.167(In that)6.167 F -(case, the v)174 120 Q -(alue of {cert_subject} is used as authentication id.)-.25 E 17.83 -(AuthOptions [no)102 136.2 R .836 -(short name] List of options for SMTP A)3.336 F .836 -(UTH consisting of single characters)-.55 F(with interv)174 148.2 Q -(ening white space or commas.)-.15 E 12.78(AU)214 164.4 S(se the A) --12.78 E(UTH= parameter for the MAIL FR)-.55 E(OM)-.4 E -(command only when authentication succeeded.)234 176.4 Q -(This can be used as a w)234 188.4 Q(orkaround for brok)-.1 E(en)-.1 E -(MT)234 200.4 Q(As that do not implement RFC 2554 correctly)-.93 E(.) --.65 E 15.56(ap)214 212.4 S(rotection from acti)-15.56 E .3 -.15(ve \() --.25 H(non-dictionary\) attacks).15 E(during authentication e)234 224.4 -Q(xchange.)-.15 E 15.56(cr)214 236.4 S +/F0 10/Times-Bold@0 SF 193.36(SMM:08-62 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 12.78(AU) +214 96 S(se the A)-12.78 E(UTH= parameter for the MAIL FR)-.55 E(OM)-.4 +E(command only when authentication succeeded.)234 108 Q +(This can be used as a w)234 120 Q(orkaround for brok)-.1 E(en)-.1 E(MT) +234 132 Q(As that do not implement RFC 2554 correctly)-.93 E(.)-.65 E +15.56(ap)214 144 S(rotection from acti)-15.56 E .3 -.15(ve \()-.25 H +(non-dictionary\) attacks).15 E(during authentication e)234 156 Q +(xchange.)-.15 E 15.56(cr)214 168 S (equire mechanisms which pass client credentials,)-15.56 E(and allo)234 -248.4 Q 2.5(wm)-.25 G(echanisms which can pass credentials)-2.5 E -(to do so.)234 260.4 Q 15(dd)214 272.4 S(on')-15 E 2.5(tp)-.18 G +180 Q 2.5(wm)-.25 G(echanisms which can pass credentials)-2.5 E +(to do so.)234 192 Q 15(dd)214 204 S(on')-15 E 2.5(tp)-.18 G (ermit mechanisms susceptible to passi)-2.5 E -.15(ve)-.25 G -(dictionary attack.)234 284.4 Q 16.67(fr)214 296.4 S(equire forw)-16.67 -E(ard secrec)-.1 E 2.5(yb)-.15 G(etween sessions)-2.5 E -(\(breaking one w)234 308.4 Q(on')-.1 E 2.5(th)-.18 G(elp break ne)-2.5 -E(xt\).)-.15 E 12.22(mr)214 320.4 S(equire mechanisms which pro)-12.22 E -(vide mutual authentication)-.15 E(\(only a)234 332.4 Q -.25(va)-.2 G -(ilable if using Cyrus SASL v2 or later\).).25 E 15(pd)214 344.4 S(on') --15 E 2.5(tp)-.18 G(ermit mechanisms susceptible to simple)-2.5 E(passi) -234 356.4 Q .3 -.15(ve a)-.25 H(ttack \(e.g., PLAIN, LOGIN\), unless a) -.15 E(security layer is acti)234 368.4 Q -.15(ve)-.25 G(.).15 E 15(yd) -214 380.4 S(on')-15 E 2.5(tp)-.18 G(ermit mechanisms that allo)-2.5 E -2.5(wa)-.25 G(non)-2.5 E(ymous login.)-.15 E(The \214rst option applies\ - to sendmail as a client, the others to a serv)174 396.6 Q(er)-.15 E 5 -(.E)-.55 G(xample:)-5 E 2.5(OA)214 412.8 S(uthOptions=p,y)-2.5 E -.1(wo) -174 429 S 1.346(uld disallo).1 F 3.846(wA)-.25 G 1.346(NONYMOUS as A) --3.846 F 1.347(UTH mechanism and w)-.55 F 1.347(ould allo)-.1 F 3.847 -(wP)-.25 G(LAIN)-3.847 E 1.789 -(and LOGIN only if a security layer \(e.g., pro)174 441 R 1.788 -(vided by ST)-.15 F(AR)-.93 E 1.788(TTLS\) is already)-.6 F(acti)174 453 -Q -.15(ve)-.25 G 5.364(.T).15 G .364(he options 'a', 'c', ')-5.364 F -.364(d', 'f)-.5 F .364 -(', 'p', and 'y' refer to properties of the selected).55 F 1.09 -(SASL mechanisms.)174 465 R 1.089 +(dictionary attack.)234 216 Q 16.67(fr)214 228 S(equire forw)-16.67 E +(ard secrec)-.1 E 2.5(yb)-.15 G(etween sessions)-2.5 E(\(breaking one w) +234 240 Q(on')-.1 E 2.5(th)-.18 G(elp break ne)-2.5 E(xt\).)-.15 E 12.22 +(mr)214 252 S(equire mechanisms which pro)-12.22 E +(vide mutual authentication)-.15 E(\(only a)234 264 Q -.25(va)-.2 G +(ilable if using Cyrus SASL v2 or later\).).25 E 15(pd)214 276 S(on')-15 +E 2.5(tp)-.18 G(ermit mechanisms susceptible to simple)-2.5 E(passi)234 +288 Q .3 -.15(ve a)-.25 H(ttack \(e.g., PLAIN, LOGIN\), unless a).15 E +(security layer is acti)234 300 Q -.15(ve)-.25 G(.).15 E 15(yd)214 312 S +(on')-15 E 2.5(tp)-.18 G(ermit mechanisms that allo)-2.5 E 2.5(wa)-.25 G +(non)-2.5 E(ymous login.)-.15 E(The \214rst option applies to sendmail \ +as a client, the others to a serv)174 328.2 Q(er)-.15 E 5(.E)-.55 G +(xample:)-5 E 2.5(OA)214 344.4 S(uthOptions=p,y)-2.5 E -.1(wo)174 360.6 +S 1.347(uld disallo).1 F 3.847(wA)-.25 G 1.347(NONYMOUS as A)-3.847 F +1.347(UTH mechanism and w)-.55 F 1.346(ould allo)-.1 F 3.846(wP)-.25 G +(LAIN)-3.846 E 1.788(and LOGIN only if a security layer \(e.g., pro)174 +372.6 R 1.789(vided by ST)-.15 F(AR)-.93 E 1.789(TTLS\) is already)-.6 F +(acti)174 384.6 Q -.15(ve)-.25 G 5.364(.T).15 G .364 +(he options 'a', 'c', ')-5.364 F .364(d', 'f)-.5 F .364 +(', 'p', and 'y' refer to properties of the selected).55 F 1.089 +(SASL mechanisms.)174 396.6 R 1.089 (Explanations of these properties can be found in the Cyrus)6.089 F -(SASL documentation.)174 477 Q 23.39(AuthRealm [no)102 493.2 R 2.503 +(SASL documentation.)174 408.6 Q 23.39(AuthRealm [no)102 424.8 R 2.502 (short name] The authentication realm that is passed to the Cyrus SASL) -5.002 F(library)174 505.2 Q 5(.I)-.65 G 2.5(fn)-5 G 2.5(or)-2.5 G +5.003 F(library)174 436.8 Q 5(.I)-.65 G 2.5(fn)-5 G 2.5(or)-2.5 G (ealm is speci\214ed,)-2.5 E F0($j)2.5 E F1(is used.)2.5 E -(BadRcptThrottle=)102 521.4 Q/F2 10/Times-Italic@0 SF(N)A F1 1.194([no \ -short name] If set and the speci\214ed number of recipients in a single\ - SMTP)174 533.4 R .595(transaction ha)174 545.4 R .895 -.15(ve b)-.2 H -.596(een rejected, sleep for one second after each subsequent RCPT).15 F -(command in that transaction.)174 557.4 Q(BlankSub=)102 573.6 Q F2(c)A -F1 1.255([B] Set the blank substitution character to)22.47 F F2(c)3.755 -E F1 6.255(.U)C 1.255(nquoted spaces in addresses are)-6.255 F -(replaced by this character)174 585.6 Q 5(.D)-.55 G(ef)-5 E -(aults to space \(i.e., no change is made\).)-.1 E(CA)102 601.8 Q(CertP) --.4 E 21.16(ath [no)-.15 F .896(short name] P)3.396 F .897 -(ath to directory with certi\214cates of CAs.)-.15 F .897 -(This directory direc-)5.897 F 1.234(tory must contain the hashes of ea\ -ch CA certi\214cate as \214lenames \(or as links to)174 613.8 R(them\).) -174 625.8 Q(CA)102 642 Q 23.23(CertFile [no)-.4 F 1.439(short name] Fil\ -e containing one or more CA certi\214cates; see section about)3.939 F -(ST)174 654 Q(AR)-.93 E(TTLS for more information.)-.6 E 14.51 -(CheckAliases [n])102 670.2 R -1.11(Va)2.5 G +(BadRcptThrottle=)102 453 Q/F2 10/Times-Italic@0 SF(N)A F1 1.194([no sh\ +ort name] If set and the speci\214ed number of recipients in a single S\ +MTP)174 465 R .596(transaction ha)174 477 R .896 -.15(ve b)-.2 H .595 +(een rejected, sleep for one second after each subsequent RCPT).15 F +(command in that transaction.)174 489 Q(BlankSub=)102 505.2 Q F2(c)A F1 +1.255([B] Set the blank substitution character to)22.47 F F2(c)3.755 E +F1 6.255(.U)C 1.255(nquoted spaces in addresses are)-6.255 F +(replaced by this character)174 517.2 Q 5(.D)-.55 G(ef)-5 E +(aults to space \(i.e., no change is made\).)-.1 E(CA)102 533.4 Q(CertP) +-.4 E 21.16(ath [no)-.15 F .897(short name] P)3.397 F .897 +(ath to directory with certi\214cates of CAs.)-.15 F .896 +(This directory direc-)5.896 F 1.234(tory must contain the hashes of ea\ +ch CA certi\214cate as \214lenames \(or as links to)174 545.4 R(them\).) +174 557.4 Q(CA)102 573.6 Q 23.23(CertFile [no)-.4 F 1.439(short name] F\ +ile containing one or more CA certi\214cates; see section about)3.94 F +(ST)174 585.6 Q(AR)-.93 E(TTLS for more information.)-.6 E 14.51 +(CheckAliases [n])102 601.8 R -1.11(Va)2.5 G (lidate the RHS of aliases when reb)1.11 E(uilding the alias database.) --.2 E(CheckpointInterv)102 686.4 Q(al=)-.25 E F2(N)A F1 1.297 -([C] Checkpoints the queue e)174 698.4 R -.15(ve)-.25 G(ry).15 E F2(N) -3.797 E F1(\(def)3.797 E 1.297(ault 10\) addresses sent.)-.1 F 1.296 -(If your system)6.296 F .746(crashes during deli)174 710.4 R -.15(ve) --.25 G .746(ry to a lar).15 F .746(ge list, this pre)-.18 F -.15(ve)-.25 -G .746(nts retransmission to an).15 F 3.247(yb)-.15 G .747(ut the)-3.447 -F(last)174 722.4 Q F2(N)2.5 E F1(recipients.)2.5 E 0 Cg EP -%%Page: 62 58 +-.2 E(CheckpointInterv)102 618 Q(al=)-.25 E F2(N)A F1 1.296 +([C] Checkpoints the queue e)174 630 R -.15(ve)-.25 G(ry).15 E F2(N) +3.797 E F1(\(def)3.797 E 1.297(ault 10\) addresses sent.)-.1 F 1.297 +(If your system)6.297 F .747(crashes during deli)174 642 R -.15(ve)-.25 +G .746(ry to a lar).15 F .746(ge list, this pre)-.18 F -.15(ve)-.25 G +.746(nts retransmission to an).15 F 3.246(yb)-.15 G .746(ut the)-3.446 F +(last)174 654 Q F2(N)2.5 E F1(recipients.)2.5 E(ClassF)102 670.2 Q +(actor=)-.15 E F2(fact)A F1 1.624([z] The indicated)4.29 F F2(fact)4.124 +E F1 1.624(or is multiplied by the message class \(determined by the)B +.719(Precedence: \214eld in the user header and the)174 682.2 R F0(P) +3.219 E F1 .718(lines in the con\214guration \214le\) and)3.218 F 2.637 +(subtracted from the priority)174 694.2 R 7.637(.T)-.65 G 2.637 +(hus, messages with a higher Priority: will be)-7.637 F -.1(fa)174 706.2 +S -.2(vo)-.1 G 2.5(red. Def).2 F(aults to 1800.)-.1 E 0 Cg EP +%%Page: 63 59 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-62 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(ClassF) -102 96 Q(actor=)-.15 E/F2 10/Times-Italic@0 SF(fact)A F1 1.625 -([z] The indicated)4.29 F F2(fact)4.124 E F1 1.624 -(or is multiplied by the message class \(determined by the)B .718 -(Precedence: \214eld in the user header and the)174 108 R F0(P)3.219 E -F1 .719(lines in the con\214guration \214le\) and)3.219 F 2.638 -(subtracted from the priority)174 120 R 7.637(.T)-.65 G 2.637 -(hus, messages with a higher Priority: will be)-7.637 F -.1(fa)174 132 S --.2(vo)-.1 G 2.5(red. Def).2 F(aults to 1800.)-.1 E 12.27 -(ClientCertFile [no)102 148.2 R .708(short name] File containing the ce\ -rti\214cate of the client, i.e., this certi\214cate is)3.208 F -(used when)174 160.2 Q F2(sendmail)2.5 E F1(acts as client \(for ST)2.5 -E(AR)-.93 E(TTLS\).)-.6 E(ClientK)102 176.4 Q -.15(ey)-.25 G 13.23 -(File [no).15 F .714(short name] File containing the pri)3.215 F -.25 -(va)-.25 G .714(te k).25 F 1.014 -.15(ey b)-.1 H .714 -(elonging to the client certi\214cate).15 F(\(for ST)174 188.4 Q(AR)-.93 +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-63)195.86 E/F1 10/Times-Roman@0 SF 12.27(ClientCertFile [no)102 +96 R .708(short name] File containing the certi\214cate of the client, \ +i.e., this certi\214cate is)3.209 F(used when)174 108 Q/F2 10 +/Times-Italic@0 SF(sendmail)2.5 E F1(acts as client \(for ST)2.5 E(AR) +-.93 E(TTLS\).)-.6 E(ClientK)102 124.2 Q -.15(ey)-.25 G 13.23(File [no) +.15 F .714(short name] File containing the pri)3.214 F -.25(va)-.25 G +.714(te k).25 F 1.014 -.15(ey b)-.1 H .714 +(elonging to the client certi\214cate).15 F(\(for ST)174 136.2 Q(AR)-.93 E(TTLS if)-.6 E F2(sendmail)2.5 E F1(runs as client\).)2.5 E -(ClientPortOptions=)102 204.6 Q F2(options)A F1 .355 -([O] Set client SMTP options.)174 216.6 R .355(The options are)5.355 F +(ClientPortOptions=)102 152.4 Q F2(options)A F1 .355 +([O] Set client SMTP options.)174 164.4 R .355(The options are)5.355 F F2 -.1(ke)2.855 G(y=value)-.2 E F1 .355(pairs separated by com-)2.855 F -2.5(mas. Kno)174 228.6 R(wn k)-.25 E -.15(ey)-.1 G 2.5(sa).15 G(re:)-2.5 -E 52.83(Port Name/number)214 244.8 R +2.5(mas. Kno)174 176.4 R(wn k)-.25 E -.15(ey)-.1 G 2.5(sa).15 G(re:)-2.5 +E 52.83(Port Name/number)214 192.6 R (of source port for connection \(def)2.5 E(aults to an)-.1 E 2.5(yf)-.15 -G(ree port\))-2.5 E 48.95(Addr Address)214 256.8 R(mask \(def)2.5 E -(aults IN)-.1 E(ADDR_ANY\))-.35 E -.15(Fa)214 268.8 S 41.31 +G(ree port\))-2.5 E 48.95(Addr Address)214 204.6 R(mask \(def)2.5 E +(aults IN)-.1 E(ADDR_ANY\))-.35 E -.15(Fa)214 216.6 S 41.31 (mily Address).15 F -.1(fa)2.5 G(mily \(def).1 E(aults to INET\))-.1 E -21.72(SndBufSize Size)214 280.8 R(of TCP send b)2.5 E(uf)-.2 E(fer)-.25 -E 21.17(RcvBufSize Size)214 292.8 R(of TCP recei)2.5 E .3 -.15(ve b)-.25 -H(uf)-.05 E(fer)-.25 E 34.5(Modi\214er Options)214 304.8 R -(\(\215ags\) for the client)2.5 E(The)174 321 Q F2(Addr)3.166 E F1 .666 -(ess mask may be a numeric address in dot notation or a netw)B .665 -(ork name.)-.1 F F2(Modi\214er)174 333 Q F1(can be the follo)2.5 E -(wing character:)-.25 E 67(hu)214 349.2 S(se name of interf)-67 E -(ace for HELO command)-.1 E 64.78(Ad)214 361.2 S(on')-64.78 E 2.5(tu) --.18 G(se A)-2.5 E(UTH when sending e-mail)-.55 E 66.44(Sd)214 373.2 S -(on')-66.44 E 2.5(tu)-.18 G(se ST)-2.5 E(AR)-.93 E -(TTLS when sending e-mail)-.6 E .763(If `)174 389.4 R(`h')-.74 E 3.263 -('i)-.74 G 3.263(ss)-3.263 G .763 -(et, the name corresponding to the outgoing interf)-3.263 F .764 +21.72(SndBufSize Size)214 228.6 R(of TCP send b)2.5 E(uf)-.2 E(fer)-.25 +E 21.17(RcvBufSize Size)214 240.6 R(of TCP recei)2.5 E .3 -.15(ve b)-.25 +H(uf)-.05 E(fer)-.25 E 34.5(Modi\214er Options)214 252.6 R +(\(\215ags\) for the client)2.5 E(The)174 268.8 Q F2(Addr)3.165 E F1 +.666(ess mask may be a numeric address in dot notation or a netw)B .666 +(ork name.)-.1 F F2(Modi\214er)174 280.8 Q F1(can be the follo)2.5 E +(wing character:)-.25 E 67(hu)214 297 S(se name of interf)-67 E +(ace for HELO command)-.1 E 64.78(Ad)214 309 S(on')-64.78 E 2.5(tu)-.18 +G(se A)-2.5 E(UTH when sending e-mail)-.55 E 66.44(Sd)214 321 S(on') +-66.44 E 2.5(tu)-.18 G(se ST)-2.5 E(AR)-.93 E(TTLS when sending e-mail) +-.6 E .764(If `)174 337.2 R(`h')-.74 E 3.264('i)-.74 G 3.264(ss)-3.264 G +.763(et, the name corresponding to the outgoing interf)-3.264 F .763 (ace address \(whether)-.1 F .431 -(chosen via the Connection parameter or the def)174 401.4 R .431 -(ault\) is used for the HELO/EHLO)-.1 F 3.617(command. Ho)174 413.4 R -(we)-.25 E -.15(ve)-.25 G 1.917 -.4(r, t).15 H 1.118 -(he name must not start with a square brack).4 F 1.118(et and it must) --.1 F 1.842(contain at least one dot.)174 425.4 R 1.842 -(This is a simple test whether the name is not an IP)6.842 F .712 -(address \(in square brack)174 437.4 R .713(ets\) b)-.1 F .713 -(ut a quali\214ed hostname.)-.2 F .713(Note that multiple Client-)5.713 -F .344(PortOptions settings are allo)174 449.4 R .343 -(wed in order to gi)-.25 F .643 -.15(ve s)-.25 H .343 -(ettings for each protocol f).15 F(amily)-.1 E .315(\(e.g., one for F) -174 461.4 R .316(amily=inet and one for F)-.15 F 2.816(amily=inet6\). A) --.15 F .316(restriction placed on one)2.816 F -.1(fa)174 473.4 S +(chosen via the Connection parameter or the def)174 349.2 R .431 +(ault\) is used for the HELO/EHLO)-.1 F 3.618(command. Ho)174 361.2 R +(we)-.25 E -.15(ve)-.25 G 1.918 -.4(r, t).15 H 1.118 +(he name must not start with a square brack).4 F 1.117(et and it must) +-.1 F 1.841(contain at least one dot.)174 373.2 R 1.842 +(This is a simple test whether the name is not an IP)6.842 F .713 +(address \(in square brack)174 385.2 R .713(ets\) b)-.1 F .713 +(ut a quali\214ed hostname.)-.2 F .712(Note that multiple Client-)5.713 +F .343(PortOptions settings are allo)174 397.2 R .343 +(wed in order to gi)-.25 F .643 -.15(ve s)-.25 H .344 +(ettings for each protocol f).15 F(amily)-.1 E .316(\(e.g., one for F) +174 409.2 R .316(amily=inet and one for F)-.15 F 2.816(amily=inet6\). A) +-.15 F .315(restriction placed on one)2.816 F -.1(fa)174 421.2 S (mily only af).1 E(fects outgoing connections on that particular f)-.25 -E(amily)-.1 E(.)-.65 E 3.95(ColonOkInAddr [no)102 489.6 R 4.679 +E(amily)-.1 E(.)-.65 E 3.95(ColonOkInAddr [no)102 437.4 R 4.679 (short name] If set, colons are acceptable in e-mail addresses \(e.g.,) -7.18 F 3.54(\231host:user\232\). If)174 501.6 R 1.04 +7.179 F 3.54(\231host:user\232\). If)174 449.4 R 1.04 (not set, colons indicate the be)3.54 F 1.04 -(ginning of a RFC 822 group con-)-.15 F 1.988 -(struct \(\231groupname: member1, member2, ... memberN;\232\).)174 513.6 -R 1.987(Doubled colons are)6.987 F(al)174 525.6 Q -.1(wa)-.1 G 2.215(ys\ +(ginning of a RFC 822 group con-)-.15 F 1.987 +(struct \(\231groupname: member1, member2, ... memberN;\232\).)174 461.4 +R 1.988(Doubled colons are)6.988 F(al)174 473.4 Q -.1(wa)-.1 G 2.215(ys\ acceptable \(\231nodename::user\232\) and proper route-addr nesting is\ - under).1 F(-)-.2 E 1.037(stood \(\231<@relay:user@host>\232\).)174 -537.6 R 1.037(Furthermore, this option def)6.037 F 1.036 -(aults on if the con-)-.1 F .853(\214guration v)174 549.6 R .853 -(ersion le)-.15 F -.15(ve)-.25 G 3.353(li).15 G 3.353(sl)-3.353 G .853 -(ess than 6 \(for back compatibility\).)-3.353 F(Ho)5.854 E(we)-.25 E --.15(ve)-.25 G 1.654 -.4(r, i).15 H 3.354(tm).4 G(ust)-3.354 E(be of)174 -561.6 Q 2.5(ff)-.25 G(or full compatibility with RFC 822.)-2.5 E -(ConnectionCacheSize=)102 577.8 Q F2(N)A F1 .242([k] The maximum number\ - of open connections that will be cached at a time.)174 589.8 R(The) -5.242 E(def)174 601.8 Q .385(ault is one.)-.1 F .386 + under).1 F(-)-.2 E 1.036(stood \(\231<@relay:user@host>\232\).)174 +485.4 R 1.037(Furthermore, this option def)6.036 F 1.037 +(aults on if the con-)-.1 F .854(\214guration v)174 497.4 R .854 +(ersion le)-.15 F -.15(ve)-.25 G 3.354(li).15 G 3.354(sl)-3.354 G .853 +(ess than 6 \(for back compatibility\).)-3.354 F(Ho)5.853 E(we)-.25 E +-.15(ve)-.25 G 1.653 -.4(r, i).15 H 3.353(tm).4 G(ust)-3.353 E(be of)174 +509.4 Q 2.5(ff)-.25 G(or full compatibility with RFC 822.)-2.5 E +(ConnectionCacheSize=)102 525.6 Q F2(N)A F1 .242([k] The maximum number\ + of open connections that will be cached at a time.)174 537.6 R(The) +5.243 E(def)174 549.6 Q .386(ault is one.)-.1 F .386 (This delays closing the current connection until either this in)5.386 F --.2(vo)-.4 G(ca-).2 E 1.192(tion of)174 613.8 R F2(sendmail)3.692 E F1 -1.191(needs to connect to another host or it terminates.)3.692 F 1.191 -(Setting it to)6.191 F 2.046(zero def)174 625.8 R 2.046 -(aults to the old beha)-.1 F(vior)-.2 E 4.546(,t)-.4 G 2.047 +-.2(vo)-.4 G(ca-).2 E 1.191(tion of)174 561.6 R F2(sendmail)3.691 E F1 +1.191(needs to connect to another host or it terminates.)3.691 F 1.192 +(Setting it to)6.192 F 2.047(zero def)174 573.6 R 2.047 +(aults to the old beha)-.1 F(vior)-.2 E 4.546(,t)-.4 G 2.046 (hat is, connections are closed immediately)-4.546 F(.)-.65 E .266(Sinc\ e this consumes \214le descriptors, the connection cache should be k)174 -637.8 R .265(ept small: 4)-.1 F(is probably a practical maximum.)174 -649.8 Q(ConnectionCacheT)102 666 Q(imeout=)-.35 E F2(timeout)A F1 .708(\ -[K] The maximum amount of time a cached connection will be permitted to\ - idle)174 678 R 1.083(without acti)174 690 R(vity)-.25 E 6.083(.I)-.65 G -3.583(ft)-6.083 G 1.083(his time is e)-3.583 F 1.082 -(xceeded, the connection is immediately closed.)-.15 F .417(This v)174 -702 R .418(alue should be small \(on the order of ten minutes\).)-.25 F -(Before)5.418 E F2(sendmail)2.918 E F1 .418(uses a)2.918 F .508 -(cached connection, it al)174 714 R -.1(wa)-.1 G .507 -(ys sends a RSET command to check the connection; if).1 F 0 Cg EP -%%Page: 63 59 +585.6 R .266(ept small: 4)-.1 F(is probably a practical maximum.)174 +597.6 Q(ConnectionCacheT)102 613.8 Q(imeout=)-.35 E F2(timeout)A F1 .708 +([K] The maximum amount of time a cached connection will be permitted t\ +o idle)174 625.8 R 1.082(without acti)174 637.8 R(vity)-.25 E 6.082(.I) +-.65 G 3.582(ft)-6.082 G 1.083(his time is e)-3.582 F 1.083 +(xceeded, the connection is immediately closed.)-.15 F .418(This v)174 +649.8 R .418(alue should be small \(on the order of ten minutes\).)-.25 +F(Before)5.418 E F2(sendmail)2.918 E F1 .417(uses a)2.917 F .507 +(cached connection, it al)174 661.8 R -.1(wa)-.1 G .508 +(ys sends a RSET command to check the connection; if).1 F .402(this f) +174 673.8 R .402(ails, it reopens the connection.)-.1 F .401(This k) +5.402 F .401(eeps your end from f)-.1 F .401(ailing if the other)-.1 F +1.544(end times out.)174 685.8 R 1.545 +(The point of this option is to be a good netw)6.544 F 1.545 +(ork neighbor and)-.1 F -.2(avo)174 697.8 S(id using up e).2 E(xcessi) +-.15 E .3 -.15(ve r)-.25 H(esources on the other end.).15 E(The def)5 E +(ault is \214v)-.1 E 2.5(em)-.15 G(inutes.)-2.5 E 0 Cg EP +%%Page: 64 60 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-63)195.86 E/F1 10/Times-Roman@0 SF .401(this f)174 96 R .401 -(ails, it reopens the connection.)-.1 F .401(This k)5.401 F .402 -(eeps your end from f)-.1 F .402(ailing if the other)-.1 F 1.545 -(end times out.)174 108 R 1.545 -(The point of this option is to be a good netw)6.545 F 1.544 -(ork neighbor and)-.1 F -.2(avo)174 120 S(id using up e).2 E(xcessi)-.15 -E .3 -.15(ve r)-.25 H(esources on the other end.).15 E(The def)5 E -(ault is \214v)-.1 E 2.5(em)-.15 G(inutes.)-2.5 E(ConnectOnlyT)102 136.2 -Q(o=)-.8 E/F2 10/Times-Italic@0 SF(addr)A(ess)-.37 E F1 .861 -([no short name] This can be used to o)174 148.2 R -.15(ve)-.15 G .862 -(rride the connection address \(for testing).15 F(purposes\).)174 160.2 -Q(ConnectionRateThrottle=)102 176.4 Q F2(N)A F1 .212 -([no short name] If set to a positi)174 188.4 R .511 -.15(ve v)-.25 H -.211(alue, allo)-.1 F 2.711(wn)-.25 G 2.711(om)-2.711 G .211(ore than) --2.711 F F2(N)2.711 E F1 .211(incoming connec-)2.711 F .132 -(tions in a one second period per daemon.)174 200.4 R .132 -(This is intended to \215atten out peaks and)5.132 F(allo)174 212.4 Q +/F0 10/Times-Bold@0 SF 193.36(SMM:08-64 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF +(ConnectOnlyT)102 96 Q(o=)-.8 E/F2 10/Times-Italic@0 SF(addr)A(ess)-.37 +E F1 .862([no short name] This can be used to o)174 108 R -.15(ve)-.15 G +.861(rride the connection address \(for testing).15 F(purposes\).)174 +120 Q(ConnectionRateThrottle=)102 136.2 Q F2(N)A F1 .211 +([no short name] If set to a positi)174 148.2 R .511 -.15(ve v)-.25 H +.211(alue, allo)-.1 F 2.711(wn)-.25 G 2.712(om)-2.711 G .212(ore than) +-2.712 F F2(N)2.712 E F1 .212(incoming connec-)2.712 F .132 +(tions in a one second period per daemon.)174 160.2 R .132 +(This is intended to \215atten out peaks and)5.132 F(allo)174 172.2 Q 2.5(wt)-.25 G(he load a)-2.5 E -.15(ve)-.2 G(rage checking to cut in.) .15 E(Def)5 E(aults to zero \(no limits\).)-.1 E(ConnectionRateW)102 -228.6 Q(indo)-.4 E(wSize=)-.25 E F2(N)A F1 .459 -([no short name] De\214ne the length of the interv)174 240.6 R .458 +188.4 Q(indo)-.4 E(wSize=)-.25 E F2(N)A F1 .458 +([no short name] De\214ne the length of the interv)174 200.4 R .459 (al for which the number of incom-)-.25 F -(ing connections is maintained.)174 252.6 Q(The def)5 E -(ault is 60 seconds.)-.1 E(ControlSock)102 268.8 Q(etName=)-.1 E F2 -(name)A F1 .476([no short name] Name of the control sock)174 280.8 R -.477(et for daemon management.)-.1 F 2.977(Ar)5.477 G(unning)-2.977 E F2 -(sendmail)174 292.8 Q F1 1.225 +(ing connections is maintained.)174 212.4 Q(The def)5 E +(ault is 60 seconds.)-.1 E(ControlSock)102 228.6 Q(etName=)-.1 E F2 +(name)A F1 .477([no short name] Name of the control sock)174 240.6 R +.476(et for daemon management.)-.1 F 2.976(Ar)5.476 G(unning)-2.976 E F2 +(sendmail)174 252.6 Q F1 1.225 (daemon can be controlled through this named sock)3.725 F 3.725(et. A) --.1 F -.25(va)-.74 G 1.225(ilable com-).25 F 2.926(mands are:)174 304.8 +-.1 F -.25(va)-.74 G 1.225(ilable com-).25 F 2.926(mands are:)174 264.6 R F2 2.926(help, mstat, r)5.426 F 2.926(estart, shutdown,)-.37 F F1(and) 5.426 E F2(status.)5.426 E F1(The)7.926 E F2(status)5.426 E F1(command) 5.426 E .46(returns the current number of daemon children, the maximum \ -number of daemon)174 316.8 R .449 +number of daemon)174 276.6 R .449 (children, the free disk space \(in blocks\) of the queue directory)174 -328.8 R 2.95(,a)-.65 G .45(nd the load a)-2.95 F -.15(ve)-.2 G -.2(r-) -.15 G .883(age of the machine e)174 340.8 R .883(xpressed as an inte) --.15 F(ger)-.15 E 5.883(.I)-.55 G 3.383(fn)-5.883 G .882 -(ot set, no control sock)-3.383 F .882(et will be)-.1 F -.2(av)174 352.8 -S 5.029(ailable. Solaris)-.05 F 2.529(and pre-4.4BSD k)5.029 F 2.529 -(ernel users should see the note in send-)-.1 F(mail/README .)174 364.8 -Q(CRLFile=)102 381 Q F2(name)A F1 .483 +288.6 R 2.949(,a)-.65 G .449(nd the load a)-2.949 F -.15(ve)-.2 G -.2 +(r-).15 G .882(age of the machine e)174 300.6 R .883 +(xpressed as an inte)-.15 F(ger)-.15 E 5.883(.I)-.55 G 3.383(fn)-5.883 G +.883(ot set, no control sock)-3.383 F .883(et will be)-.1 F -.2(av)174 +312.6 S 5.03(ailable. Solaris)-.05 F 2.529(and pre-4.4BSD k)5.029 F +2.529(ernel users should see the note in send-)-.1 F(mail/README .)174 +324.6 Q(CRLFile=)102 340.8 Q F2(name)A F1 .482 ([no short name] Name of \214le that contains certi\214cate re)9.69 F --.2(vo)-.25 G .482(cation status, useful for).2 F .792 -(X.509v3 authentication.)174 393 R .792 -(CRL checking requires at least OpenSSL v)5.792 F .793(ersion 0.9.7.) --.15 F(Note: if a CRLFile is speci\214ed b)174 405 Q +-.2(vo)-.25 G .483(cation status, useful for).2 F .793 +(X.509v3 authentication.)174 352.8 R .792 +(CRL checking requires at least OpenSSL v)5.793 F .792(ersion 0.9.7.) +-.15 F(Note: if a CRLFile is speci\214ed b)174 364.8 Q (ut the \214le is unusable, ST)-.2 E(AR)-.93 E(TTLS is disabled.)-.6 E -(DHP)102 421.2 Q 10.78(arameters File)-.15 F 1.149 -(with DH parameters for ST)3.65 F(AR)-.93 E 3.649(TTLS. This)-.6 F 1.149 -(is only required if a ciphersuite)3.649 F 1.025 -(containing DSA/DH is used.)174 433.2 R 1.025 -(This is only for people with a good kno)6.025 F 1.026(wledge of)-.25 F -(TLS, all others can ignore this option.)174 445.2 Q(DaemonPortOptions=) -102 461.4 Q F2(options)A F1 .364([O] Set serv)174 473.4 R .364 -(er SMTP options.)-.15 F .364(Each instance of)5.364 F F0(DaemonP)2.863 -E(ortOptions)-.2 E F1 .363(leads to an)2.863 F(additional incoming sock) -174 485.4 Q 2.5(et. The)-.1 F(options are)2.5 E F2 -.1(ke)2.5 G(y=value) --.2 E F1 2.5(pairs. Kno)2.5 F(wn k)-.25 E -.15(ey)-.1 G 2.5(sa).15 G -(re:)-2.5 E 45.62(Name User)214 501.6 R +(DHP)102 381 Q 10.78(arameters Possible)-.15 F -.25(va)2.5 G(lues are:) +.25 E 67(5u)214 397.2 S(se 512 bit prime)-67 E 67(1u)214 409.2 S +(se 1024 bit prime)-67 E 50.06(none do)214 421.2 R(not use Dif)2.5 E +(\214e-Hellman)-.25 E -.35(NA)214 433.2 S 40.41(ME load).35 F +(prime from \214le)2.5 E 2.147 +(This is only required if a ciphersuite containing DSA/DH is used.)174 +449.4 R 2.147(If `)7.147 F(`5')-.74 E 4.647('i)-.74 G(s)-4.647 E 1.878 +(selected, then precomputed, \214x)174 461.4 R 1.878 +(ed primes are used.)-.15 F 1.877(This is the def)6.877 F 1.877 +(ault for the)-.1 F 1.538(client side.)174 473.4 R 1.538(If `)6.538 F +(`1')-.74 E 4.038('i)-.74 G 4.038(ss)-4.038 G 1.538 +(elected, then prime v)-4.038 F 1.539 +(alues are computed during startup.)-.25 F .743(This is the def)174 +485.4 R .743(ault for the serv)-.1 F .743(er side.)-.15 F .743 +(Note: this operation can tak)5.743 F 3.242(eas)-.1 G(igni\214cant) +-3.242 E .837(amount of time on a slo)174 497.4 R 3.337(wm)-.25 G .837 +(achine \(se)-3.337 F -.15(ve)-.25 G .837(ral seconds\), b).15 F .838 +(ut it is only done once at)-.2 F 2.959(startup. If)174 509.4 R -.74(``) +2.959 G(none').74 E 2.959('i)-.74 G 2.959(ss)-2.959 G .459 +(elected, then TLS ciphersuites containing DSA/DH cannot)-2.959 F 1.336 +(be used.)174 521.4 R 1.337(If a \214le name is speci\214ed \(which mus\ +t be an absolute path\), then the)6.336 F(primes are read from it.)174 +533.4 Q(DaemonPortOptions=)102 549.6 Q F2(options)A F1 .364 +([O] Set serv)174 561.6 R .364(er SMTP options.)-.15 F .364 +(Each instance of)5.364 F F0(DaemonP)2.863 E(ortOptions)-.2 E F1 .363 +(leads to an)2.863 F(additional incoming sock)174 573.6 Q 2.5(et. The) +-.1 F(options are)2.5 E F2 -.1(ke)2.5 G(y=value)-.2 E F1 2.5(pairs. Kno) +2.5 F(wn k)-.25 E -.15(ey)-.1 G 2.5(sa).15 G(re:)-2.5 E 0 Cg EP +%%Page: 65 61 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-65)195.86 E/F1 10/Times-Roman@0 SF 45.62(Name User)214 96 R (-de\214nable name for the daemon \(def)-.2 E(aults to "Daemon#"\))-.1 E -52.83(Port Name/number)214 513.6 R(of listening port \(def)2.5 E -(aults to "smtp"\))-.1 E 48.95(Addr Address)214 525.6 R(mask \(def)2.5 E -(aults IN)-.1 E(ADDR_ANY\))-.35 E -.15(Fa)214 537.6 S 41.31 -(mily Address).15 F -.1(fa)2.5 G(mily \(def).1 E(aults to INET\))-.1 E -3.94(InputMailFilters List)214 549.6 R -(of input mail \214lters for the daemon)2.5 E 44.5(Listen Size)214 561.6 -R(of listen queue \(def)2.5 E(aults to 10\))-.1 E 34.5 -(Modi\214er Options)214 573.6 R(\(\215ags\) for the daemon)2.5 E 21.72 -(SndBufSize Size)214 585.6 R(of TCP send b)2.5 E(uf)-.2 E(fer)-.25 E -21.17(RcvBufSize Size)214 597.6 R(of TCP recei)2.5 E .3 -.15(ve b)-.25 H -(uf)-.05 E(fer)-.25 E 36.73(children maximum)214 609.6 R -(number of children per daemon, see)2.5 E F0(MaxDaemonChildr)2.5 E(en) --.18 E F1(.)A(Deli)214 621.6 Q -.15(ve)-.25 G 11.58(ryMode Deli).15 F --.15(ve)-.25 G(ry mode per daemon, see).15 E F0(Deli)2.5 E -.1(ve)-.1 G -(ryMode).1 E F1(.)A 31.74(refuseLA RefuseLA)214 633.6 R(per daemon)2.5 E -34.51(delayLA DelayLA)214 645.6 R(per daemon)2.5 E 32.29 -(queueLA QueueLA)214 657.6 R(per daemon)2.5 E(The)174 673.8 Q F2(Name) -2.68 E F1 -.1(ke)2.68 G 2.68(yi)-.05 G 2.68(su)-2.68 G .181 -(sed for error messages and logging.)-2.68 F(The)5.181 E F2(Addr)2.681 E -F1 .181(ess mask may be)B 2.908(an)174 685.8 S .407 +52.83(Port Name/number)214 108 R(of listening port \(def)2.5 E +(aults to "smtp"\))-.1 E 48.95(Addr Address)214 120 R(mask \(def)2.5 E +(aults IN)-.1 E(ADDR_ANY\))-.35 E -.15(Fa)214 132 S 41.31(mily Address) +.15 F -.1(fa)2.5 G(mily \(def).1 E(aults to INET\))-.1 E 3.94 +(InputMailFilters List)214 144 R(of input mail \214lters for the daemon) +2.5 E 44.5(Listen Size)214 156 R(of listen queue \(def)2.5 E +(aults to 10\))-.1 E 34.5(Modi\214er Options)214 168 R +(\(\215ags\) for the daemon)2.5 E 21.72(SndBufSize Size)214 180 R +(of TCP send b)2.5 E(uf)-.2 E(fer)-.25 E 21.17(RcvBufSize Size)214 192 R +(of TCP recei)2.5 E .3 -.15(ve b)-.25 H(uf)-.05 E(fer)-.25 E 36.73 +(children maximum)214 204 R(number of children per daemon, see)2.5 E F0 +(MaxDaemonChildr)2.5 E(en)-.18 E F1(.)A(Deli)214 216 Q -.15(ve)-.25 G +11.58(ryMode Deli).15 F -.15(ve)-.25 G(ry mode per daemon, see).15 E F0 +(Deli)2.5 E -.1(ve)-.1 G(ryMode).1 E F1(.)A 31.74(refuseLA RefuseLA)214 +228 R(per daemon)2.5 E 34.51(delayLA DelayLA)214 240 R(per daemon)2.5 E +32.29(queueLA QueueLA)214 252 R(per daemon)2.5 E(The)174 268.2 Q/F2 10 +/Times-Italic@0 SF(Name)2.68 E F1 -.1(ke)2.68 G 2.68(yi)-.05 G 2.68(su) +-2.68 G .181(sed for error messages and logging.)-2.68 F(The)5.181 E F2 +(Addr)2.681 E F1 .181(ess mask may be)B 2.908(an)174 280.2 S .407 (umeric address in dot notation or a netw)-2.908 F .407(ork name.)-.1 F (The)5.407 E F2 -.75(Fa)2.907 G(mily).75 E F1 -.1(ke)2.907 G 2.907(yd) --.05 G(ef)-2.907 E .407(aults to)-.1 F 1.16(INET \(IPv4\).)174 697.8 R +-.05 G(ef)-2.907 E .407(aults to)-.1 F 1.16(INET \(IPv4\).)174 292.2 R 1.161(IPv6 users who wish to also accept IPv6 connections should add) -6.16 F 2.215(additional F)174 709.8 R(amily=inet6)-.15 E F0(DaemonP) +6.16 F 2.215(additional F)174 304.2 R(amily=inet6)-.15 E F0(DaemonP) 4.715 E(ortOptions)-.2 E F1 4.715(lines. The)4.715 F F2(InputMailF)4.715 -E(ilter)-.45 E(s)-.1 E F1 -.1(ke)4.715 G(y)-.05 E -.15(ove)174 721.8 S +E(ilter)-.45 E(s)-.1 E F1 -.1(ke)4.715 G(y)-.05 E -.15(ove)174 316.2 S .01(rrides the def).15 F .01 (ault list of input mail \214lters listed in the)-.1 F F0 -(InputMailFilters)2.51 E F1(option.)2.51 E 0 Cg EP -%%Page: 64 60 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-64 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 1.011 -(If multiple input mail \214lters are required, the)174 96 R 3.511(ym) --.15 G 1.011(ust be separated by semicolons)-3.511 F .177 -(\(not commas\).)174 108 R/F2 10/Times-Italic@0 SF(Modi\214er)5.177 E F1 -.177(can be a sequence \(without an)2.677 F 2.678(yd)-.15 G .178 -(elimiters\) of the follo)-2.678 F(w-)-.25 E(ing characters:)174 120 Q -67.56(aa)214 136.2 S -.1(lwa)-67.56 G(ys require authentication).1 E 67 -(bb)214 148.2 S(ind to interf)-67 E +(InputMailFilters)2.51 E F1(option.)2.51 E 1.011 +(If multiple input mail \214lters are required, the)174 328.2 R 3.511 +(ym)-.15 G 1.011(ust be separated by semicolons)-3.511 F .177 +(\(not commas\).)174 340.2 R F2(Modi\214er)5.177 E F1 .177 +(can be a sequence \(without an)2.677 F 2.678(yd)-.15 G .178 +(elimiters\) of the follo)-2.678 F(w-)-.25 E(ing characters:)174 352.2 Q +67.56(aa)214 368.4 S -.1(lwa)-67.56 G(ys require authentication).1 E 67 +(bb)214 380.4 S(ind to interf)-67 E (ace through which mail has been recei)-.1 E -.15(ve)-.25 G(d).15 E -67.56(cp)214 160.2 S(erform hostname canoni\214cation \(.cf\))-67.56 E -68.67(fr)214 172.2 S(equire fully quali\214ed hostname \(.cf\))-68.67 E -68.11(sR)214 184.2 S(un smtps \(SMTP o)-68.11 E -.15(ve)-.15 G 2.5(rS) -.15 G(SL\) instead of smtp)-2.5 E 67(ua)214 196.2 S(llo)-67 E 2.5(wu) --.25 G(nquali\214ed addresses \(.cf\))-2.5 E 64.78(Ad)214 208.2 S +67.56(cp)214 392.4 S(erform hostname canoni\214cation \(.cf\))-67.56 E +68.67(fr)214 404.4 S(equire fully quali\214ed hostname \(.cf\))-68.67 E +68.11(sR)214 416.4 S(un smtps \(SMTP o)-68.11 E -.15(ve)-.15 G 2.5(rS) +.15 G(SL\) instead of smtp)-2.5 E 67(ua)214 428.4 S(llo)-67 E 2.5(wu) +-.25 G(nquali\214ed addresses \(.cf\))-2.5 E 64.78(Ad)214 440.4 S (isable A)-64.78 E(UTH \(o)-.55 E -.15(ve)-.15 G -(rrides 'a' modi\214er\)).15 E 65.33(Cd)214 220.2 S(on')-65.33 E 2.5(tp) --.18 G(erform hostname canoni\214cation)-2.5 E 65.89(Ed)214 232.2 S +(rrides 'a' modi\214er\)).15 E 65.33(Cd)214 452.4 S(on')-65.33 E 2.5(tp) +-.18 G(erform hostname canoni\214cation)-2.5 E 65.89(Ed)214 464.4 S (isallo)-65.89 E 2.5(wE)-.25 G(TRN \(see RFC 2476\))-2.5 E 64.78(Oo)214 -244.2 S(ptional; if opening the sock)-64.78 E(et f)-.1 E(ails ignore it) --.1 E 66.44(Sd)214 256.2 S(on')-66.44 E 2.5(to)-.18 G -.25(ff)-2.5 G -(er ST).25 E(AR)-.93 E(TTLS)-.6 E 2.413(That is, one w)174 272.4 R 2.412 +476.4 S(ptional; if opening the sock)-64.78 E(et f)-.1 E(ails ignore it) +-.1 E 66.44(Sd)214 488.4 S(on')-66.44 E 2.5(to)-.18 G -.25(ff)-2.5 G +(er ST).25 E(AR)-.93 E(TTLS)-.6 E 2.413(That is, one w)174 504.6 R 2.412 (ay to specify a message submission agent \(MSA\) that al)-.1 F -.1(wa) --.1 G(ys).1 E(requires authentication is:)174 284.4 Q 2.5(OD)214 300.6 S +-.1 G(ys).1 E(requires authentication is:)174 516.6 Q 2.5(OD)214 532.8 S (aemonPortOptions=Name=MSA, Port=587, M=Ea)-2.5 E .243 -(The modi\214ers that are mark)174 316.8 R .244(ed with "\(.cf\)" ha)-.1 -F .544 -.15(ve o)-.2 H .244(nly ef).15 F .244 +(The modi\214ers that are mark)174 549 R .244(ed with "\(.cf\)" ha)-.1 F +.544 -.15(ve o)-.2 H .244(nly ef).15 F .244 (fect in the standard con\214g-)-.25 F .16(uration \214le, in which the) -174 328.8 R 2.66(ya)-.15 G .16(re a)-2.66 F -.25(va)-.2 G .16 -(ilable via).25 F F0(${daemon_\215ags})2.66 E F1 5.16(.N)C .16 -(otice: Do)-5.16 F F0(not)2.66 E F1(use)2.66 E .46(the `)174 340.8 R -(`a')-.74 E 2.96('m)-.74 G .46(odi\214er on a public accessible MT)-2.96 -F 2.961(A! It)-.93 F .461(should only be used for a MSA)2.961 F 2.553 +174 561 R 2.66(ya)-.15 G .16(re a)-2.66 F -.25(va)-.2 G .16(ilable via) +.25 F F0(${daemon_\215ags})2.66 E F1 5.16(.N)C .16(otice: Do)-5.16 F F0 +(not)2.66 E F1(use)2.66 E .46(the `)174 573 R(`a')-.74 E 2.96('m)-.74 G +.46(odi\214er on a public accessible MT)-2.96 F 2.961(A! It)-.93 F .461 +(should only be used for a MSA)2.961 F 2.553 (that is accessed by authorized users for initial mail submission.)174 -352.8 R 2.552(Users must)7.552 F 1.141 -(authenticate to use a MSA which has this option turned on.)174 364.8 R +585 R 2.552(Users must)7.552 F 1.141 +(authenticate to use a MSA which has this option turned on.)174 597 R 1.141(The \215ags `)6.141 F(`c')-.74 E 3.641('a)-.74 G(nd)-3.641 E -.74 -(``)174 376.8 S(C').74 E 3.786('c)-.74 G 1.286(an change the def)-3.786 -F 1.285(ault for hostname canoni\214cation in the)-.1 F F2(sendmail.cf) -3.785 E F1(\214le.)3.785 E .764(See the rele)174 388.8 R -.25(va)-.25 G +(``)174 609 S(C').74 E 3.786('c)-.74 G 1.286(an change the def)-3.786 F +1.285(ault for hostname canoni\214cation in the)-.1 F F2(sendmail.cf) +3.785 E F1(\214le.)3.785 E .764(See the rele)174 621 R -.25(va)-.25 G .765(nt documentation for).25 F/F3 9/Times-Roman@0 SF(FEA)3.265 E (TURE\(nocanonify\))-.999 E F1 5.765(.T)C .765(he modi\214er `)-5.765 F --1.95(`f ')-.74 F 3.265('d)-.74 G(is-)-3.265 E(allo)174 400.8 Q .795 +-1.95(`f ')-.74 F 3.265('d)-.74 G(is-)-3.265 E(allo)174 633 Q .795 (ws addresses of the form)-.25 F F0(user@host)3.295 E F1 .794 (unless the)3.295 F 3.294(ya)-.15 G .794(re submitted directly)-3.294 F -5.794(.T)-.65 G(he)-5.794 E 2.127(\215ag `)174 412.8 R(`u')-.74 E 4.627 +5.794(.T)-.65 G(he)-5.794 E 2.127(\215ag `)174 645 R(`u')-.74 E 4.627 ('a)-.74 G(llo)-4.627 E 2.127 (ws unquali\214ed sender addresses, i.e., those without @host.)-.25 F -.74(``)7.127 G(b').74 E(')-.74 E 2.791 -(forces sendmail to bind to the interf)174 424.8 R 2.791 -(ace through which the e-mail has been)-.1 F(recei)174 436.8 Q -.15(ve) +(forces sendmail to bind to the interf)174 657 R 2.791 +(ace through which the e-mail has been)-.1 F(recei)174 669 Q -.15(ve) -.25 G 4.369(df).15 G 1.869(or the outgoing connection.)-4.369 F F0 -1.2 (WA)6.869 G(RNING:)1.2 E F1 1.869(Use `)4.369 F(`b')-.74 E 4.369('o)-.74 G 1.869(nly if outgoing)-4.369 F .517 -(mail can be routed through the incoming connection')174 448.8 R 3.017 -(si)-.55 G(nterf)-3.017 E .517(ace to its destination.)-.1 F .119(No at\ -tempt is made to catch problems due to a miscon\214guration of this par\ -ameter)174 460.8 R(,)-.4 E 1.177 -(use it only for virtual hosting where each virtual interf)174 472.8 R -1.177(ace can connect to e)-.1 F -.15(ve)-.25 G(ry).15 E 2.001 -(possible location.)174 484.8 R 2.001(This will also o)7.001 F -.15(ve) --.15 G 2.001(rride possible settings via).15 F F0(ClientP)4.502 E -(ortOp-)-.2 E(tions.)174 496.8 Q F1(Note,)5.487 E F2(sendmail)2.987 E F1 -.487(will listen on a ne)2.987 F 2.986(ws)-.25 G(ock)-2.986 E .486 -(et for each occurence of the)-.1 F F0(Dae-)2.986 E(monP)174 508.8 Q -(ortOptions)-.2 E F1 .838(option in a con\214guration \214le.)3.338 F -.838(The modi\214er `)5.838 F(`O')-.74 E 3.338('c)-.74 G .838 -(auses send-)-3.338 F 1.418(mail to ignore a sock)174 520.8 R 1.417 -(et if it can')-.1 F 3.917(tb)-.18 G 3.917(eo)-3.917 G 3.917 -(pened. This)-3.917 F 1.417(applies to f)3.917 F 1.417(ailures from the) --.1 F(sock)174 532.8 Q(et\(2\) and bind\(2\) calls.)-.1 E(Def)102 549 Q -2.95(aultAuthInfo [no)-.1 F .181(short name] Filename that contains def) +(mail can be routed through the incoming connection')174 681 R 3.017(si) +-.55 G(nterf)-3.017 E .517(ace to its destination.)-.1 F .119(No attemp\ +t is made to catch problems due to a miscon\214guration of this paramet\ +er)174 693 R(,)-.4 E 1.177 +(use it only for virtual hosting where each virtual interf)174 705 R +1.177(ace can connect to e)-.1 F -.15(ve)-.25 G(ry).15 E 10.246 +(possible location.)174 717 R 10.246(This will also o)15.246 F -.15(ve) +-.15 G 10.247(rride possible settings via).15 F 0 Cg EP +%%Page: 66 62 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-66 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E(ClientP)174 96 Q(ortOptions.)-.2 +E/F1 10/Times-Roman@0 SF(Note,)8.975 E/F2 10/Times-Italic@0 SF(sendmail) +6.475 E F1 3.975(will listen on a ne)6.475 F 6.475(ws)-.25 G(ock)-6.475 +E 3.975(et for each)-.1 F .746(occurence of the)174 108 R F0(DaemonP) +3.246 E(ortOptions)-.2 E F1 .746(option in a con\214guration \214le.) +3.246 F .746(The modi-)5.746 F .4(\214er `)174 120 R(`O')-.74 E 2.9('c) +-.74 G .4(auses sendmail to ignore a sock)-2.9 F .399(et if it can')-.1 +F 2.899(tb)-.18 G 2.899(eo)-2.899 G 2.899(pened. This)-2.899 F .399 +(applies to)2.899 F -.1(fa)174 132 S(ilures from the sock).1 E +(et\(2\) and bind\(2\) calls.)-.1 E(Def)102 148.2 Q 2.95 +(aultAuthInfo [no)-.1 F .181(short name] Filename that contains def) 2.681 F .181(ault authentication information for out-)-.1 F 1.738(going\ connections. This \214le must contain the user id, the authorization i\ -d, the)174 561 R(passw)174 573 Q 1.561(ord \(plain te)-.1 F 1.562 +d, the)174 160.2 R(passw)174 172.2 Q 1.561(ord \(plain te)-.1 F 1.562 (xt\), the realm and the list of mechanisms to use on separate)-.15 F .288(lines and must be readable by root \(or the trusted user\) only)174 -585 R 5.287(.I)-.65 G 2.787(fn)-5.287 G 2.787(or)-2.787 G .287 -(ealm is speci-)-2.787 F(\214ed,)174 597 Q F0($j)3.704 E F1 1.204 +184.2 R 5.287(.I)-.65 G 2.787(fn)-5.287 G 2.787(or)-2.787 G .287 +(ealm is speci-)-2.787 F(\214ed,)174 196.2 Q F0($j)3.704 E F1 1.204 (is used.)3.704 F 1.205(If no mechanisms are speci\214ed, the list gi) 6.204 F -.15(ve)-.25 G 3.705(nb).15 G(y)-3.705 E F0 -.5(Au)3.705 G -(thMecha-).5 E(nisms)174 609 Q F1 1.372(is used.)3.872 F 1.372 +(thMecha-).5 E(nisms)174 208.2 Q F1 1.372(is used.)3.872 F 1.372 (Notice: this option is deprecated and will be remo)6.372 F -.15(ve)-.15 -G 3.871(di).15 G 3.871(nf)-3.871 G(uture)-3.871 E -.15(ve)174 621 S 3.41 -(rsions. Moreo).15 F -.15(ve)-.15 G 1.71 -.4(r, i).15 H 3.41(td).4 G +G 3.871(di).15 G 3.871(nf)-3.871 G(uture)-3.871 E -.15(ve)174 220.2 S +3.41(rsions. Moreo).15 F -.15(ve)-.15 G 1.71 -.4(r, i).15 H 3.41(td).4 G (oesn')-3.41 E 3.41(tw)-.18 G .911(ork for the MSP since it can')-3.51 F 3.411(tr)-.18 G .911(ead the \214le \(the)-3.411 F .014 -(\214le must not be group/w)174 633 R .014(orld-readable otherwise)-.1 F -F2(sendmail)2.514 E F1 .014(will complain\).)2.514 F .014(Use the)5.014 -F 1.2(authinfo ruleset instead which pro)174 645 R 1.2 +(\214le must not be group/w)174 232.2 R .014(orld-readable otherwise)-.1 +F F2(sendmail)2.514 E F1 .014(will complain\).)2.514 F .014(Use the) +5.014 F 1.2(authinfo ruleset instead which pro)174 244.2 R 1.2 (vides more control o)-.15 F -.15(ve)-.15 G 3.7(rt).15 G 1.2 -(he usage of the data)-3.7 F(an)174 657 Q(yw)-.15 E(ay)-.1 E(.)-.65 E -(Def)102 673.2 Q(aultCharSet=)-.1 E F2 -.15(ch)C(ar).15 E(set)-.1 E F1 +(he usage of the data)-3.7 F(an)174 256.2 Q(yw)-.15 E(ay)-.1 E(.)-.65 E +(Def)102 272.4 Q(aultCharSet=)-.1 E F2 -.15(ch)C(ar).15 E(set)-.1 E F1 .161([no short name] When a message that has 8-bit characters b)174 -685.2 R .16(ut is not in MIME for)-.2 F(-)-.2 E .494(mat is con)174 -697.2 R -.15(ve)-.4 G .495 +284.4 R .16(ut is not in MIME for)-.2 F(-)-.2 E .494(mat is con)174 +296.4 R -.15(ve)-.4 G .495 (rted to MIME \(see the EightBitMode option\) a character set must be) -.15 F .488(included in the Content-T)174 709.2 R .488(ype: header)-.8 F +.15 F .488(included in the Content-T)174 308.4 R .488(ype: header)-.8 F 5.488(.T)-.55 G .487(his character set is normally set from the)-5.488 F -.133(Charset= \214eld of the mailer descriptor)174 721.2 R 5.133(.I)-.55 +.133(Charset= \214eld of the mailer descriptor)174 320.4 R 5.133(.I)-.55 G 2.633(ft)-5.133 G .133(hat is not set, the v)-2.633 F .133 -(alue of this option is)-.25 F 0 Cg EP -%%Page: 65 61 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-65)195.86 E/F1 10/Times-Roman@0 SF 2.5(used. If)174 96 R +(alue of this option is)-.25 F 2.5(used. If)174 332.4 R (this option is not set, the v)2.5 E(alue \231unkno)-.25 E -(wn-8bit\232 is used.)-.25 E(DataFileBuf)102 112.2 Q(ferSize=)-.25 E/F2 -10/Times-Italic@0 SF(thr)A(eshold)-.37 E F1 .012 -([no short name] Set the)174 124.2 R F2(thr)2.512 E(eshold)-.37 E F1 -2.512(,i)C 2.512(nb)-2.512 G .011 +(wn-8bit\232 is used.)-.25 E(DataFileBuf)102 348.6 Q(ferSize=)-.25 E F2 +(thr)A(eshold)-.37 E F1 .012([no short name] Set the)174 360.6 R F2(thr) +2.512 E(eshold)-.37 E F1 2.512(,i)C 2.512(nb)-2.512 G .011 (ytes, before a memory-based queue data \214le)-2.512 F -(becomes disk-based.)174 136.2 Q(The def)5 E(ault is 4096 bytes.)-.1 E -(DeadLetterDrop=)102 152.4 Q F2(\214le)A F1 .535([no short name] De\214\ +(becomes disk-based.)174 372.6 Q(The def)5 E(ault is 4096 bytes.)-.1 E +(DeadLetterDrop=)102 388.8 Q F2(\214le)A F1 .535([no short name] De\214\ nes the location of the system-wide dead.letter \214le, formerly)174 -164.4 R .744(hardcoded to /usr/tmp/dead.letter)174 176.4 R 5.744(.I)-.55 +400.8 R .744(hardcoded to /usr/tmp/dead.letter)174 412.8 R 5.744(.I)-.55 G 3.244(ft)-5.744 G .744(his option is not set \(the def)-3.244 F .743 -(ault\), sendmail)-.1 F 1.464(will not attempt to sa)174 188.4 R 1.764 +(ault\), sendmail)-.1 F 1.464(will not attempt to sa)174 424.8 R 1.764 -.15(ve t)-.2 H 3.964(oas).15 G 1.464 (ystem-wide dead.letter \214le in the e)-3.964 F -.15(ve)-.25 G 1.465 (nt it cannot).15 F .575(bounce the mail to the user or postmaster)174 -200.4 R 5.575(.I)-.55 G .575(nstead, it will rename the qf \214le as it) +436.8 R 5.575(.I)-.55 G .575(nstead, it will rename the qf \214le as it) -5.575 F (has in the past when the dead.letter \214le could not be opened.)174 -212.4 Q(Def)102 228.6 Q(aultUser=)-.1 E F2(user:gr)A(oup)-.45 E F1 .013 -([u] Set the def)174 240.6 R .013(ault userid for mailers to)-.1 F F2 +448.8 Q(Def)102 465 Q(aultUser=)-.1 E F2(user:gr)A(oup)-.45 E F1 .013 +([u] Set the def)174 477 R .013(ault userid for mailers to)-.1 F F2 (user:gr)2.513 E(oup)-.45 E F1 5.013(.I)C(f)-5.013 E F2(gr)2.513 E(oup) -.45 E F1 .014(is omitted and)2.514 F F2(user)2.514 E F1(is)2.514 E -4.307(au)174 252.6 S 1.807 +4.307(au)174 489 S 1.807 (ser name \(as opposed to a numeric user id\) the def)-4.307 F 1.806 (ault group listed in the)-.1 F 1.153 -(/etc/passwd \214le for that user is used as the def)174 264.6 R 1.153 +(/etc/passwd \214le for that user is used as the def)174 501 R 1.153 (ault group.)-.1 F(Both)6.153 E F2(user)3.653 E F1(and)3.653 E F2(gr) -3.653 E(oup)-.45 E F1 1.153(may be numeric.)174 276.6 R 1.152 +3.653 E(oup)-.45 E F1 1.153(may be numeric.)174 513 R 1.152 (Mailers without the)6.152 F F2(S)3.652 E F1 1.152 (\215ag in the mailer de\214nition will run as)3.652 F .142(this user) -174 290.6 R 5.142(.D)-.55 G(ef)-5.142 E .142(aults to 1:1.)-.1 F .142 +174 527 R 5.142(.D)-.55 G(ef)-5.142 E .142(aults to 1:1.)-.1 F .142 (The v)5.142 F .142(alue can also be gi)-.25 F -.15(ve)-.25 G 2.642(na) .15 G 2.642(sas)-2.642 G .142(ymbolic user name.)-2.642 F/F3 7 -/Times-Roman@0 SF(19)-4 I F1(DelayLA=)102 306.8 Q F2(LA)A F1 .996 +/Times-Roman@0 SF(19)-4 I F1(DelayLA=)102 543.2 Q F2(LA)A F1 .996 ([no short name] When the system load a)17.48 F -.15(ve)-.2 G .996 (rage e).15 F(xceeds)-.15 E F2(LA)3.496 E F1(,)A F2(sendmail)3.496 E F1 .995(will sleep)3.495 F (for one second on most SMTP commands and before accepting connections.) -174 318.8 Q(Deli)102 335 Q -.15(ve)-.25 G(rByMin=).15 E F2(time)A F1 -.202([0] Set minimum time for Deli)174 347 R -.15(ve)-.25 G 2.702(rB).15 -G 2.702(yS)-2.702 G .202(MTP Service Extension \(RFC 2852\).)-2.702 F -.203(If 0,)5.203 F .487(no time is listed, if less than 0, the e)174 359 -R .487(xtension is not of)-.15 F .486(fered, if greater than 0, it is) --.25 F(listed as minimum time for the EHLO k)174 371 Q -.15(ey)-.1 G -.1 -(wo).15 G(rd DELIVERBY).1 E(.)-1.29 E(Deli)102 387.2 Q -.15(ve)-.25 G +174 555.2 Q(Deli)102 571.4 Q -.15(ve)-.25 G(rByMin=).15 E F2(time)A F1 +.202([0] Set minimum time for Deli)174 583.4 R -.15(ve)-.25 G 2.702(rB) +.15 G 2.702(yS)-2.702 G .202(MTP Service Extension \(RFC 2852\).)-2.702 +F .203(If 0,)5.203 F .487(no time is listed, if less than 0, the e)174 +595.4 R .487(xtension is not of)-.15 F .486 +(fered, if greater than 0, it is)-.25 F +(listed as minimum time for the EHLO k)174 607.4 Q -.15(ey)-.1 G -.1(wo) +.15 G(rd DELIVERBY).1 E(.)-1.29 E(Deli)102 623.6 Q -.15(ve)-.25 G (ryMode=).15 E F2(x)A F1([d] Deli)4 E -.15(ve)-.25 G 2.5(ri).15 G 2.5 (nm)-2.5 G(ode)-2.5 E F2(x)2.5 E F1 5(.L)C -2.25 -.15(eg a)-5 H 2.5(lm) -.15 G(odes are:)-2.5 E 17.22(iD)214 403.4 S(eli)-17.22 E -.15(ve)-.25 G -2.5(ri).15 G(nteracti)-2.5 E -.15(ve)-.25 G(ly \(synchronously\)).15 E -15(bD)214 415.4 S(eli)-15 E -.15(ve)-.25 G 2.5(ri).15 G 2.5(nb)-2.5 G -(ackground \(asynchronously\))-2.5 E 15(qJ)214 427.4 S -(ust queue the message \(deli)-15 E -.15(ve)-.25 G 2.5(rd).15 G -(uring queue run\))-2.5 E 15(dD)214 439.4 S(efer deli)-15 E -.15(ve)-.25 -G(ry and all map lookups \(deli).15 E -.15(ve)-.25 G 2.5(rd).15 G -(uring queue run\))-2.5 E(Def)174 455.6 Q .711(aults to `)-.1 F(`b')-.74 +.15 G(odes are:)-2.5 E .32 LW 76 678.8 72 678.8 DL 80 678.8 76 678.8 DL +84 678.8 80 678.8 DL 88 678.8 84 678.8 DL 92 678.8 88 678.8 DL 96 678.8 +92 678.8 DL 100 678.8 96 678.8 DL 104 678.8 100 678.8 DL 108 678.8 104 +678.8 DL 112 678.8 108 678.8 DL 116 678.8 112 678.8 DL 120 678.8 116 +678.8 DL 124 678.8 120 678.8 DL 128 678.8 124 678.8 DL 132 678.8 128 +678.8 DL 136 678.8 132 678.8 DL 140 678.8 136 678.8 DL 144 678.8 140 +678.8 DL 148 678.8 144 678.8 DL 152 678.8 148 678.8 DL 156 678.8 152 +678.8 DL 160 678.8 156 678.8 DL 164 678.8 160 678.8 DL 168 678.8 164 +678.8 DL 172 678.8 168 678.8 DL 176 678.8 172 678.8 DL 180 678.8 176 +678.8 DL 184 678.8 180 678.8 DL 188 678.8 184 678.8 DL 192 678.8 188 +678.8 DL 196 678.8 192 678.8 DL 200 678.8 196 678.8 DL 204 678.8 200 +678.8 DL 208 678.8 204 678.8 DL 212 678.8 208 678.8 DL 216 678.8 212 +678.8 DL/F4 5/Times-Roman@0 SF(19)93.6 689.2 Q/F5 8/Times-Roman@0 SF +(The old)3.2 I/F6 8/Times-Bold@0 SF(g)2 E F5 +(option has been combined into the)2 E F6(DefaultUser)2 E F5(option.)2 E +0 Cg EP +%%Page: 67 63 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-67)195.86 E/F1 10/Times-Roman@0 SF 17.22(iD)214 96 S(eli)-17.22 +E -.15(ve)-.25 G 2.5(ri).15 G(nteracti)-2.5 E -.15(ve)-.25 G +(ly \(synchronously\)).15 E 15(bD)214 108 S(eli)-15 E -.15(ve)-.25 G 2.5 +(ri).15 G 2.5(nb)-2.5 G(ackground \(asynchronously\))-2.5 E 15(qJ)214 +120 S(ust queue the message \(deli)-15 E -.15(ve)-.25 G 2.5(rd).15 G +(uring queue run\))-2.5 E 15(dD)214 132 S(efer deli)-15 E -.15(ve)-.25 G +(ry and all map lookups \(deli).15 E -.15(ve)-.25 G 2.5(rd).15 G +(uring queue run\))-2.5 E(Def)174 148.2 Q .711(aults to `)-.1 F(`b')-.74 E 3.211('i)-.74 G 3.211(fn)-3.211 G 3.211(oo)-3.211 G .711 (ption is speci\214ed, `)-3.211 F(`i')-.74 E 3.211('i)-.74 G 3.211(fi) -3.211 G 3.211(ti)-3.211 G 3.211(ss)-3.211 G .712(peci\214ed b)-3.211 F .712(ut gi)-.2 F -.15(ve)-.25 G 3.212(nn).15 G 3.212(oa)-3.212 G -.18 -(rg)-3.212 G(u-).18 E .094(ment \(i.e., `)174 467.6 R(`Od')-.74 E 2.594 +(rg)-3.212 G(u-).18 E .094(ment \(i.e., `)174 160.2 R(`Od')-.74 E 2.594 ('i)-.74 G 2.594(se)-2.594 G(qui)-2.594 E -.25(va)-.25 G .094(lent to `) .25 F(`Odi')-.74 E 2.594('\). The)-.74 F F02.594 E F1 .094 (command line \215ag sets this to)2.594 F F0(i)2.594 E F1(.)A 1.526 -(Note: for internal reasons, `)174 479.6 R(`i')-.74 E 4.026('d)-.74 G +(Note: for internal reasons, `)174 172.2 R(`i')-.74 E 4.026('d)-.74 G 1.526(oes not w)-4.026 F 1.527(ork if a milter is enabled which can)-.1 -F(reject or delete recipients.)174 491.6 Q +F(reject or delete recipients.)174 184.2 Q (In that case the mode will be changed to `)5 E(`b')-.74 E('.)-.74 E -(DialDelay=)102 507.8 Q F2(sleeptime)A F1 .799 -([no short name] Dial-on-demand netw)174 519.8 R .798 +(DialDelay=)102 200.4 Q/F2 10/Times-Italic@0 SF(sleeptime)A F1 .799 +([no short name] Dial-on-demand netw)174 212.4 R .798 (ork connections can see timeouts if a con-)-.1 F .665 -(nection is opened before the call is set up.)174 531.8 R .665 +(nection is opened before the call is set up.)174 224.4 R .665 (If this is set to an interv)5.665 F .665(al and a con-)-.25 F .743 -(nection times out on the \214rst connection being attempted)174 543.8 R +(nection times out on the \214rst connection being attempted)174 236.4 R F2(sendmail)3.242 E F1 .742(will sleep for)3.242 F .31 -(this amount of time and try ag)174 555.8 R 2.81(ain. This)-.05 F .31 +(this amount of time and try ag)174 248.4 R 2.81(ain. This)-.05 F .31 (should gi)2.81 F .61 -.15(ve y)-.25 H .31(our system time to establish) -.15 F 1.543(the connection to your service pro)174 567.8 R(vider)-.15 E +.15 F 1.543(the connection to your service pro)174 260.4 R(vider)-.15 E 6.543(.U)-.55 G 1.543(nits def)-6.543 F 1.542 (ault to seconds, so \231DialDe-)-.1 F 1.798(lay=5\232 uses a \214v)174 -579.8 R 4.298(es)-.15 G 1.798(econd delay)-4.298 F 6.798(.D)-.65 G(ef) +272.4 R 4.298(es)-.15 G 1.798(econd delay)-4.298 F 6.798(.D)-.65 G(ef) -6.798 E 1.799(aults to zero \(no retry\).)-.1 F 1.799(This delay only) -6.799 F(applies to mailers which ha)174 591.8 Q .3 -.15(ve t)-.2 H -(he Z \215ag set.).15 E(DirectSubmissionModi\214ers=)102 608 Q F2 -(modi\214er)A(s)-.1 E F1(De\214nes)174 620 Q F0(${daemon_\215ags})5.084 -E F1 2.583(for direct \(command line\) submissions.)5.084 F 2.583 -(If not set,)7.583 F F0(${daemon_\215ags})174 632 Q F1 1.416 +6.799 F(applies to mailers which ha)174 284.4 Q .3 -.15(ve t)-.2 H +(he Z \215ag set.).15 E(DirectSubmissionModi\214ers=)102 300.6 Q F2 +(modi\214er)A(s)-.1 E F1(De\214nes)174 312.6 Q F0(${daemon_\215ags}) +5.084 E F1 2.583(for direct \(command line\) submissions.)5.084 F 2.583 +(If not set,)7.583 F F0(${daemon_\215ags})174 324.6 Q F1 1.416 (is either "CC f" if the option)3.916 F F03.916 E F1 1.417 (is used or "c u" otherwise.)3.917 F (Note that only the the "CC", "c", "f", and "u" \215ags are check)174 -644 Q(ed.)-.1 E(DontBlameSendmail=)102 660.2 Q F2(option,option,...)A F1 -.065([no short name] In order to a)174 672.2 R -.2(vo)-.2 G .064 -(id possible cracking attempts caused by w).2 F .064(orld- and)-.1 F .32 -LW 76 681.8 72 681.8 DL 80 681.8 76 681.8 DL 84 681.8 80 681.8 DL 88 -681.8 84 681.8 DL 92 681.8 88 681.8 DL 96 681.8 92 681.8 DL 100 681.8 96 -681.8 DL 104 681.8 100 681.8 DL 108 681.8 104 681.8 DL 112 681.8 108 -681.8 DL 116 681.8 112 681.8 DL 120 681.8 116 681.8 DL 124 681.8 120 -681.8 DL 128 681.8 124 681.8 DL 132 681.8 128 681.8 DL 136 681.8 132 -681.8 DL 140 681.8 136 681.8 DL 144 681.8 140 681.8 DL 148 681.8 144 -681.8 DL 152 681.8 148 681.8 DL 156 681.8 152 681.8 DL 160 681.8 156 -681.8 DL 164 681.8 160 681.8 DL 168 681.8 164 681.8 DL 172 681.8 168 -681.8 DL 176 681.8 172 681.8 DL 180 681.8 176 681.8 DL 184 681.8 180 -681.8 DL 188 681.8 184 681.8 DL 192 681.8 188 681.8 DL 196 681.8 192 -681.8 DL 200 681.8 196 681.8 DL 204 681.8 200 681.8 DL 208 681.8 204 -681.8 DL 212 681.8 208 681.8 DL 216 681.8 212 681.8 DL/F4 5 -/Times-Roman@0 SF(19)93.6 692.2 Q/F5 8/Times-Roman@0 SF(The old)3.2 I/F6 -8/Times-Bold@0 SF(g)2 E F5(option has been combined into the)2 E F6 -(DefaultUser)2 E F5(option.)2 E 0 Cg EP -%%Page: 66 62 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-66 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .254 -(group-writable \214les and directories,)174 96 R/F2 10/Times-Italic@0 -SF(sendmail)2.754 E F1 .255(does paranoid checking when open-)2.754 F -.298(ing most of its support \214les.)174 108 R .297 +336.6 Q(ed.)-.1 E(DontBlameSendmail=)102 352.8 Q F2(option,option,...)A +F1 .065([no short name] In order to a)174 364.8 R -.2(vo)-.2 G .064 +(id possible cracking attempts caused by w).2 F .064(orld- and)-.1 F +.254(group-writable \214les and directories,)174 376.8 R F2(sendmail) +2.754 E F1 .255(does paranoid checking when open-)2.754 F .298 +(ing most of its support \214les.)174 388.8 R .297 (If for some reason you absolutely must run with, for)5.297 F -.15(ex) -174 120 S .176(ample, a group-writable).15 F F2(/etc)2.677 E F1 +174 400.8 S .176(ample, a group-writable).15 F F2(/etc)2.677 E F1 (directory)2.677 E 2.677(,t)-.65 G .177(hen you will ha)-2.677 F .477 -.15(ve t)-.2 H 2.677(ot).15 G .177(urn of)-2.677 F 2.677(ft)-.25 G .177 (his check-)-2.677 F .794 (ing \(at the cost of making your system more vulnerable to attack\).) -174 132 R .793(The possible)5.793 F(ar)174 144 Q 1.394(guments ha)-.18 F -1.694 -.15(ve b)-.2 H 1.394(een described earlier).15 F 6.394(.T)-.55 G -1.395(he details of these \215ags are described)-6.394 F(abo)174 156 Q --.15(ve)-.15 G(.).15 E F0(Use of this option is not r)5 E(ecommended.) --.18 E F1(DontExpandCnames)102 172.2 Q .559([no short name] The standar\ -ds say that all host addresses used in a mail message)174 184.2 R 1.407 -(must be fully canonical.)174 196.2 R -.15(Fo)6.407 G 3.907(re).15 G -1.407(xample, if your host is named \231Cruft.F)-4.057 F(oo.ORG\232)-.15 -E 1.462(and also has an alias of \231FTP)174 208.2 R(.F)-1.11 E 1.462 +174 412.8 R .793(The possible)5.793 F(ar)174 424.8 Q 1.394(guments ha) +-.18 F 1.694 -.15(ve b)-.2 H 1.394(een described earlier).15 F 6.394(.T) +-.55 G 1.395(he details of these \215ags are described)-6.394 F(abo)174 +436.8 Q -.15(ve)-.15 G(.).15 E F0(Use of this option is not r)5 E +(ecommended.)-.18 E F1(DontExpandCnames)102 453 Q .559([no short name] \ +The standards say that all host addresses used in a mail message)174 465 +R 1.407(must be fully canonical.)174 477 R -.15(Fo)6.407 G 3.907(re).15 +G 1.407(xample, if your host is named \231Cruft.F)-4.057 F(oo.ORG\232) +-.15 E 1.462(and also has an alias of \231FTP)174 489 R(.F)-1.11 E 1.462 (oo.ORG\232, the former name must be used at all)-.15 F 2.63 -(times. This)174 220.2 R .131 +(times. This)174 501 R .131 (is enforced during host name canoni\214cation \($[ ... $] lookups\).) 2.63 F .131(If this)5.131 F .662(option is set, the protocols are ignor\ -ed and the \231wrong\232 thing is done.)174 232.2 R(Ho)5.661 E(we)-.25 E --.15(ve)-.25 G -.4(r,).15 G .871(the IETF is mo)174 244.2 R .871 -(ving to)-.15 F -.1(wa)-.25 G .872 -(rd changing this standard, so the beha).1 F .872(vior may become)-.2 F -3.01(acceptable. Please)174 256.2 R .509(note that hosts do)3.01 F .509 -(wnstream may still re)-.25 F .509(write the address to be)-.25 F -(the true canonical name ho)174 268.2 Q(we)-.25 E -.15(ve)-.25 G -.55 -(r.).15 G 6.17(DontInitGroups [no)102 284.4 R .25(short name] If set,) -2.75 F F2(sendmail)2.75 E F1 .25(will a)2.75 F -.2(vo)-.2 G .25 -(id using the initgroups\(3\) call.).2 F .25(If you are)5.25 F .583(run\ -ning NIS, this causes a sequential scan of the groups.byname map, which\ - can)174 296.4 R .435(cause your NIS serv)174 308.4 R .435 -(er to be badly o)-.15 F -.15(ve)-.15 G .435(rloaded in a lar).15 F .436 -(ge domain.)-.18 F .436(The cost of this)5.436 F .697(is that the only \ -group found for users will be their primary group \(the one in the)174 -320.4 R(passw)174 332.4 Q 1.189(ord \214le\), which will mak)-.1 F 3.689 -<658c>-.1 G 1.189(le access permissions some)-3.689 F 1.189 -(what more restric-)-.25 F(ti)174 344.4 Q -.15(ve)-.25 G 5(.H).15 G +ed and the \231wrong\232 thing is done.)174 513 R(Ho)5.661 E(we)-.25 E +-.15(ve)-.25 G -.4(r,).15 G .871(the IETF is mo)174 525 R .871(ving to) +-.15 F -.1(wa)-.25 G .872(rd changing this standard, so the beha).1 F +.872(vior may become)-.2 F 3.01(acceptable. Please)174 537 R .509 +(note that hosts do)3.01 F .509(wnstream may still re)-.25 F .509 +(write the address to be)-.25 F(the true canonical name ho)174 549 Q(we) +-.25 E -.15(ve)-.25 G -.55(r.).15 G 6.17(DontInitGroups [no)102 565.2 R +.25(short name] If set,)2.75 F F2(sendmail)2.75 E F1 .25(will a)2.75 F +-.2(vo)-.2 G .25(id using the initgroups\(3\) call.).2 F .25(If you are) +5.25 F .583(running NIS, this causes a sequential scan of the groups.by\ +name map, which can)174 577.2 R .435(cause your NIS serv)174 589.2 R +.435(er to be badly o)-.15 F -.15(ve)-.15 G .435(rloaded in a lar).15 F +.436(ge domain.)-.18 F .436(The cost of this)5.436 F .697(is that the o\ +nly group found for users will be their primary group \(the one in the) +174 601.2 R(passw)174 613.2 Q 1.189(ord \214le\), which will mak)-.1 F +3.689<658c>-.1 G 1.189(le access permissions some)-3.689 F 1.189 +(what more restric-)-.25 F(ti)174 625.2 Q -.15(ve)-.25 G 5(.H).15 G (as no ef)-5 E(fect on systems that don')-.25 E 2.5(th)-.18 G -2.25 -.2 -(av e)-2.5 H(group lists.)2.7 E(DontProbeInterf)102 360.6 Q(aces)-.1 E -1.713([no short name])174 372.6 R F2(Sendmail)4.213 E F1 1.712 +(av e)-2.5 H(group lists.)2.7 E(DontProbeInterf)102 641.4 Q(aces)-.1 E +1.713([no short name])174 653.4 R F2(Sendmail)4.213 E F1 1.712 (normally \214nds the names of all interf)4.213 F 1.712(aces acti)-.1 F 2.012 -.15(ve o)-.25 H(n).15 E 1.103 -(your machine when it starts up and adds their name to the)174 384.6 R +(your machine when it starts up and adds their name to the)174 665.4 R F0($=w)3.603 E F1 1.103(class of kno)3.603 F(wn)-.25 E 1.836 -(host aliases.)174 396.6 R 1.836(If you ha)6.836 F 2.136 -.15(ve a l)-.2 +(host aliases.)174 677.4 R 1.836(If you ha)6.836 F 2.136 -.15(ve a l)-.2 H(ar).15 E 1.836(ge number of virtual interf)-.18 F 1.835 -(aces or if your DNS)-.1 F(in)174 408.6 Q -.15(ve)-.4 G .958 +(aces or if your DNS)-.1 F(in)174 689.4 Q -.15(ve)-.4 G .958 (rse lookups are slo).15 F 3.458(wt)-.25 G .958 (his can be time consuming.)-3.458 F .959(This option turns of)5.959 F -3.459(ft)-.25 G(hat)-3.459 E 2.974(probing. Ho)174 420.6 R(we)-.25 E +3.459(ft)-.25 G(hat)-3.459 E 2.974(probing. Ho)174 701.4 R(we)-.25 E -.15(ve)-.25 G 1.274 -.4(r, y).15 H .474 (ou will need to be certain to include all v).4 F .473 -(ariant names in the)-.25 F F0($=w)174 432.6 Q F1 1.868 +(ariant names in the)-.25 F F0($=w)174 713.4 Q F1 1.868 (class by some other mechanism.)4.368 F 1.868(If set to)6.868 F F0 (loopback)4.368 E F1 4.369(,l)C 1.869(oopback interf)-4.369 F(aces)-.1 E -(\(e.g., lo0\) will not be probed.)174 444.6 Q -1.61 -(DontPruneRoutes [R])102 460.8 R(Normally)3.905 E(,)-.65 E F2(sendmail) -3.905 E F1 1.405(tries to eliminate an)3.905 F 3.905(yu)-.15 G 1.405 -(nnecessary e)-3.905 F 1.405(xplicit routes when)-.15 F .154 +(\(e.g., lo0\) will not be probed.)174 725.4 Q 0 Cg EP +%%Page: 68 64 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-68 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -1.61 +(DontPruneRoutes [R])102 96 R(Normally)3.905 E(,)-.65 E/F2 10 +/Times-Italic@0 SF(sendmail)3.905 E F1 1.405(tries to eliminate an)3.905 +F 3.905(yu)-.15 G 1.405(nnecessary e)-3.905 F 1.405(xplicit routes when) +-.15 F .154 (sending an error message \(as discussed in RFC 1123 \247 5.2.6\).)174 -472.8 R -.15(Fo)5.155 G 2.655(re).15 G .155(xample, when)-2.805 F -(sending an error message to)174 484.8 Q(<@kno)214 501 Q(wn1,@kno)-.25 E -(wn2,@kno)-.25 E(wn3:user@unkno)-.25 E(wn>)-.25 E F2(sendmail)174 517.2 +108 R -.15(Fo)5.155 G 2.655(re).15 G .155(xample, when)-2.805 F +(sending an error message to)174 120 Q(<@kno)214 136.2 Q(wn1,@kno)-.25 E +(wn2,@kno)-.25 E(wn3:user@unkno)-.25 E(wn>)-.25 E F2(sendmail)174 152.4 Q F1 1.155(will strip of)3.655 F 3.655(ft)-.25 G 1.155(he \231@kno) -3.655 F(wn1,@kno)-.25 E 1.155(wn2\232 in order to mak)-.25 F 3.655(et) --.1 G 1.155(he route as)-3.655 F .812(direct as possible.)174 529.2 R +-.1 G 1.155(he route as)-3.655 F .812(direct as possible.)174 164.4 R (Ho)5.812 E(we)-.25 E -.15(ve)-.25 G 1.612 -.4(r, i).15 H 3.312(ft).4 G (he)-3.312 E F0(R)3.313 E F1 .813 (option is set, this will be disabled, and the)3.313 F .01 -(mail will be sent to the \214rst address in the route, e)174 541.2 R +(mail will be sent to the \214rst address in the route, e)174 176.4 R -.15(ve)-.25 G 2.509(ni).15 G 2.509(fl)-2.509 G .009 (ater addresses are kno)-2.509 F(wn.)-.25 E -(This may be useful if you are caught behind a \214re)174 553.2 Q -.1 -(wa)-.25 G(ll.).1 E(DoubleBounceAddress=)102 569.4 Q F2(err)A(or)-.45 E +(This may be useful if you are caught behind a \214re)174 188.4 Q -.1 +(wa)-.25 G(ll.).1 E(DoubleBounceAddress=)102 204.6 Q F2(err)A(or)-.45 E (-addr)-.2 E(ess)-.37 E F1 .504([no short name] If an error occurs when\ - sending an error message, send the error)174 581.4 R 1.999(report \(te\ + sending an error message, send the error)174 216.6 R 1.999(report \(te\ rmed a \231double bounce\232 because it is an error \231bounce\232 that\ - occurs)174 593.4 R .053(when trying to send another error \231bounce\ -\232\) to the indicated address.)174 605.4 R .054(The address)5.054 F -.475(is macro e)174 617.4 R .474(xpanded at the time of deli)-.15 F -.15 + occurs)174 228.6 R .053(when trying to send another error \231bounce\ +\232\) to the indicated address.)174 240.6 R .054(The address)5.054 F +.475(is macro e)174 252.6 R .474(xpanded at the time of deli)-.15 F -.15 (ve)-.25 G(ry).15 E 5.474(.I)-.65 G 2.974(fn)-5.474 G .474(ot set, def) -2.974 F .474(aults to \231postmaster\232.)-.1 F(If)5.474 E -(set to an empty string, double bounces are dropped.)174 629.4 Q -(EightBitMode=)102 645.6 Q F2(action)A F1 1.955 -([8] Set handling of eight-bit data.)174 657.6 R 1.955(There are tw) +(set to an empty string, double bounces are dropped.)174 264.6 Q +(EightBitMode=)102 280.8 Q F2(action)A F1 1.955 +([8] Set handling of eight-bit data.)174 292.8 R 1.955(There are tw) 6.955 F 4.456(ok)-.1 G 1.956(inds of eight-bit data: that)-4.456 F 3.335 -(declared as such using the)174 669.6 R F0(BOD)5.834 E(Y=8BITMIME)-.4 E -F1 3.334(ESMTP declaration or the)5.834 F F0(\255B8BITMIME)174 681.6 Q +(declared as such using the)174 304.8 R F0(BOD)5.834 E(Y=8BITMIME)-.4 E +F1 3.334(ESMTP declaration or the)5.834 F F0(\255B8BITMIME)174 316.8 Q F1 .948 (command line \215ag, and undeclared 8-bit data, that is, input that) -3.448 F 1.18(just happens to be eight bits.)174 693.6 R 1.18 +3.448 F 1.18(just happens to be eight bits.)174 328.8 R 1.18 (There are three basic operations that can happen:)6.18 F .995 -(undeclared 8-bit data can be automatically con)174 705.6 R -.15(ve)-.4 +(undeclared 8-bit data can be automatically con)174 340.8 R -.15(ve)-.4 G .996(rted to 8BITMIME, undeclared).15 F .887 -(8-bit data can be passed as-is without con)174 717.6 R -.15(ve)-.4 G +(8-bit data can be passed as-is without con)174 352.8 R -.15(ve)-.4 G .887(rsion to MIME \(`).15 F .887(`just send 8')-.74 F .886('\), and) --.74 F 0 Cg EP -%%Page: 67 63 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-67)195.86 E/F1 10/Times-Roman@0 SF 1.794 -(declared 8-bit data can be con)174 96 R -.15(ve)-.4 G 1.794 -(rted to 7-bits for transmission to a non-8BIT).15 F(-)-.92 E -(MIME mailer)174 108 Q 5(.T)-.55 G(he possible)-5 E/F2 10/Times-Italic@0 -SF(action)2.5 E F1 2.5(sa)C(re:)-2.5 E 11.11(sR)219 124.2 S -(eject undeclared 8-bit data \(`)-11.11 E(`strict')-.74 E('\))-.74 E -7.22(mC)219 136.2 S(on)-7.22 E -.15(ve)-.4 G -(rt undeclared 8-bit data to MIME \(`).15 E(`mime')-.74 E('\))-.74 E 10 -(pP)219 148.2 S(ass undeclared 8-bit data \(`)-10.15 E(`pass')-.74 E -('\))-.74 E 2.228 -(In all cases properly declared 8BITMIME data will be con)174 164.4 R --.15(ve)-.4 G 2.227(rted to 7BIT as).15 F(needed.)174 176.4 Q -(ErrorHeader=)102 192.6 Q F2(\214le-or)A(-messa)-.2 E -.1(ge)-.1 G F1 -.486([E] Prepend error messages with the indicated message.)174 204.6 R +-.74 F 1.794(declared 8-bit data can be con)174 364.8 R -.15(ve)-.4 G +1.794(rted to 7-bits for transmission to a non-8BIT).15 F(-)-.92 E +(MIME mailer)174 376.8 Q 5(.T)-.55 G(he possible)-5 E F2(action)2.5 E F1 +2.5(sa)C(re:)-2.5 E 11.11(sR)219 393 S(eject undeclared 8-bit data \(`) +-11.11 E(`strict')-.74 E('\))-.74 E 7.22(mC)219 405 S(on)-7.22 E -.15 +(ve)-.4 G(rt undeclared 8-bit data to MIME \(`).15 E(`mime')-.74 E('\)) +-.74 E 10(pP)219 417 S(ass undeclared 8-bit data \(`)-10.15 E(`pass') +-.74 E('\))-.74 E 2.228 +(In all cases properly declared 8BITMIME data will be con)174 433.2 R +-.15(ve)-.4 G 2.227(rted to 7BIT as).15 F(needed.)174 445.2 Q +(ErrorHeader=)102 461.4 Q F2(\214le-or)A(-messa)-.2 E -.1(ge)-.1 G F1 +.486([E] Prepend error messages with the indicated message.)174 473.4 R .486(If it be)5.486 F .487(gins with a slash,)-.15 F .246(it is assumed\ to be the pathname of a \214le containing a message \(this is the reco\ -m-)174 216.6 R .86(mended setting\).)174 228.6 R .86 +m-)174 485.4 R .86(mended setting\).)174 497.4 R .86 (Otherwise, it is a literal message.)5.86 F .86 (The error \214le might contain)5.86 F 1.116(the name, email address, a\ -nd/or phone number of a local postmaster who could)174 240.6 R(pro)174 -252.6 Q .826(vide assistance to end users.)-.15 F .827 +nd/or phone number of a local postmaster who could)174 509.4 R(pro)174 +521.4 Q .826(vide assistance to end users.)-.15 F .827 (If the option is missing or null, or if it names a)5.827 F -(\214le which does not e)174 264.6 Q +(\214le which does not e)174 533.4 Q (xist or which is not readable, no message is printed.)-.15 E -(ErrorMode=)102 280.8 Q F2(x)A F1([e] Dispose of errors using mode)17.49 +(ErrorMode=)102 549.6 Q F2(x)A F1([e] Dispose of errors using mode)17.49 E F2(x)2.5 E F1 5(.T)C(he v)-5 E(alues for)-.25 E F2(x)2.5 E F1(are:)2.5 -E 15(pP)214 297 S(rint error messages \(def)-15 E(ault\))-.1 E 15(qN)214 -309 S 2.5(om)-15 G(essages, just gi)-2.5 E .3 -.15(ve ex)-.25 H -(it status).15 E 12.22(mM)214 321 S(ail back errors)-12.22 E 12.78(wW) -214 333 S(rite back errors \(mail if user not logged in\))-12.78 E 15.56 -(eM)214 345 S(ail back errors \(when applicable\) and gi)-15.56 E .3 --.15(ve z)-.25 H(ero e).15 E(xit stat al)-.15 E -.1(wa)-.1 G(ys).1 E +E 15(pP)214 565.8 S(rint error messages \(def)-15 E(ault\))-.1 E 15(qN) +214 577.8 S 2.5(om)-15 G(essages, just gi)-2.5 E .3 -.15(ve ex)-.25 H +(it status).15 E 12.22(mM)214 589.8 S(ail back errors)-12.22 E 12.78(wW) +214 601.8 S(rite back errors \(mail if user not logged in\))-12.78 E +15.56(eM)214 613.8 S(ail back errors \(when applicable\) and gi)-15.56 E +.3 -.15(ve z)-.25 H(ero e).15 E(xit stat al)-.15 E -.1(wa)-.1 G(ys).1 E 1.314(Note that the last mode, \231e\232, is for Berknet error processi\ -ng and should not be)174 361.2 R 1.323(used in normal circumstances.)174 -373.2 R 1.323(Note, too, that mode \231q\232, only applies to errors) -6.323 F(recognized before sendmail forks for background deli)174 385.2 Q --.15(ve)-.25 G(ry).15 E(.)-.65 E -.15(Fa)102 401.4 S(llbackMXhost=).15 E -F2(fallbac)A(khost)-.2 E F1 .797([V] If speci\214ed, the)174 413.4 R F2 +ng and should not be)174 630 R 1.323(used in normal circumstances.)174 +642 R 1.323(Note, too, that mode \231q\232, only applies to errors)6.323 +F(recognized before sendmail forks for background deli)174 654 Q -.15 +(ve)-.25 G(ry).15 E(.)-.65 E -.15(Fa)102 670.2 S(llbackMXhost=).15 E F2 +(fallbac)A(khost)-.2 E F1 .797([V] If speci\214ed, the)174 682.2 R F2 (fallbac)3.297 E(khost)-.2 E F1 .797(acts lik)3.297 F 3.296(eav)-.1 G .796(ery lo)-3.446 F 3.296(wp)-.25 G .796(riority MX on e)-3.296 F -.15 -(ve)-.25 G .796(ry host.).15 F 1.537(MX records will be look)174 425.4 R +(ve)-.25 G .796(ry host.).15 F 1.537(MX records will be look)174 694.2 R 1.537(ed up for this host, unless the name is surrounded by)-.1 F .017 -(square brack)174 437.4 R 2.517(ets. This)-.1 F .017 +(square brack)174 706.2 R 2.517(ets. This)-.1 F .017 (is intended to be used by sites with poor netw)2.517 F .016 -(ork connecti)-.1 F(v-)-.25 E(ity)174 449.4 Q 6.706(.M)-.65 G 1.706 +(ork connecti)-.1 F(v-)-.25 E(ity)174 718.2 Q 6.706(.M)-.65 G 1.706 (essages which are undeli)-6.706 F -.15(ve)-.25 G 1.706 -(rable due to temporary address f).15 F 1.706(ailures \(e.g.,)-.1 F -(DNS f)174 461.4 Q(ailure\) also go to the F)-.1 E(allbackMXhost.)-.15 E --.15(Fa)102 477.6 S(llBackSmartHost=).15 E F2(hostname)A F1 1.656 -(If speci\214ed, the)174 489.6 R F2 -.75(Fa)4.156 G(llBac).75 E +(rable due to temporary address f).15 F 1.706(ailures \(e.g.,)-.1 F 0 Cg +EP +%%Page: 69 65 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-69)195.86 E/F1 10/Times-Roman@0 SF(DNS f)174 96 Q +(ailure\) also go to the F)-.1 E(allbackMXhost.)-.15 E -.15(Fa)102 112.2 +S(llBackSmartHost=).15 E/F2 10/Times-Italic@0 SF(hostname)A F1 1.656 +(If speci\214ed, the)174 124.2 R F2 -.75(Fa)4.156 G(llBac).75 E (kSmartHost)-.2 E F1 1.656(will be used in a last-ditch ef)4.156 F 1.655 -(fort for each)-.25 F 3.212(host. This)174 501.6 R .712 +(fort for each)-.25 F 3.212(host. This)174 136.2 R .712 (is intended to be used by sites with "f)3.212 F(ak)-.1 E 3.212(ei)-.1 G -.712(nternal DNS", e.g., a com-)-3.212 F(pan)174 513.6 Q 3.19(yw)-.15 G +.712(nternal DNS", e.g., a com-)-3.212 F(pan)174 148.2 Q 3.19(yw)-.15 G .69(hose DNS accurately re\215ects the w)-3.19 F .69 (orld inside that compan)-.1 F(y')-.15 E 3.19(sd)-.55 G .69(omain b) --3.19 F(ut)-.2 E(not outside.)174 525.6 Q -.15(Fa)102 541.8 S 34.08 +-3.19 F(ut)-.2 E(not outside.)174 160.2 Q -.15(Fa)102 176.4 S 34.08 (stSplit [no).15 F 1.572(short name] If set to a v)4.071 F 1.572 (alue greater than zero \(the def)-.25 F 1.572(ault is one\), it sup-) --.1 F .977(presses the MX lookups on addresses when the)174 553.8 R +-.1 F .977(presses the MX lookups on addresses when the)174 188.4 R 3.477(ya)-.15 G .977(re initially sorted, i.e., for the)-3.477 F 1.03 -(\214rst deli)174 565.8 R -.15(ve)-.25 G 1.031(ry attempt.).15 F 1.031 +(\214rst deli)174 200.4 R -.15(ve)-.25 G 1.031(ry attempt.).15 F 1.031 (This usually results in f)6.031 F 1.031(aster en)-.1 F -.15(ve)-.4 G 1.031(lope splitting unless the).15 F .423(MX records are readily a)174 -577.8 R -.25(va)-.2 G .423(ilable in a local DNS cache.).25 F 2.023 -.8 +212.4 R -.25(va)-.2 G .423(ilable in a local DNS cache.).25 F 2.023 -.8 (To e)5.423 H .423(nforce initial sorting).8 F .337 -(based on MX records set)174 589.8 R F0 -.25(Fa)2.838 G(stSplit).25 E F1 +(based on MX records set)174 224.4 R F0 -.25(Fa)2.838 G(stSplit).25 E F1 .338(to zero.)2.838 F .338(If the mail is submitted directly from)5.338 -F 1.079(the command line, then the v)174 601.8 R 1.078 +F 1.079(the command line, then the v)174 236.4 R 1.078 (alue also limits the number of processes to deli)-.25 F -.15(ve)-.25 G -(r).15 E .293(the en)174 613.8 R -.15(ve)-.4 G .293(lopes; if more en) +(r).15 E .293(the en)174 248.4 R -.15(ve)-.4 G .293(lopes; if more en) .15 F -.15(ve)-.4 G .293(lopes are created the).15 F 2.794(ya)-.15 G -.294(re only queued up and must be)-2.794 F(tak)174 625.8 Q .692 +.294(re only queued up and must be)-2.794 F(tak)174 260.4 Q .692 (en care of by a queue run.)-.1 F .691(Since the def)5.691 F .691 (ault submission method is via SMTP)-.1 F 1.284(\(either from a MU)174 -637.8 R 3.784(Ao)-.4 G 3.784(rv)-3.784 G 1.284(ia the MSP\), the v) +272.4 R 3.784(Ao)-.4 G 3.784(rv)-3.784 G 1.284(ia the MSP\), the v) -3.784 F 1.284(alue of)-.25 F F0 -.25(Fa)3.784 G(stSplit).25 E F1 1.284 (is seldom used to)3.784 F(limit the number of processes to deli)174 -649.8 Q -.15(ve)-.25 G 2.5(rt).15 G(he en)-2.5 E -.15(ve)-.4 G(lopes.) -.15 E -.15(Fo)102 666 S 16.88(rkEachJob [Y]).15 F(If set, deli)2.5 E +284.4 Q -.15(ve)-.25 G 2.5(rt).15 G(he en)-2.5 E -.15(ve)-.4 G(lopes.) +.15 E -.15(Fo)102 300.6 S 16.88(rkEachJob [Y]).15 F(If set, deli)2.5 E -.15(ve)-.25 G 2.5(re).15 G (ach job that is run from the queue in a separate process.)-2.5 E -.15 -(Fo)102 682.2 S(rw).15 E(ardP)-.1 E(ath=)-.15 E F2(path)A F1 1.512 -([J] Set the path for searching for users' .forw)174 694.2 R 1.511 +(Fo)102 316.8 S(rw).15 E(ardP)-.1 E(ath=)-.15 E F2(path)A F1 1.512 +([J] Set the path for searching for users' .forw)174 328.8 R 1.511 (ard \214les.)-.1 F 1.511(The def)6.511 F 1.511(ault is \231$z/.for)-.1 -F(-)-.2 E -.1(wa)174 706.2 S 5.799(rd\232. Some).1 F 3.299 +F(-)-.2 E -.1(wa)174 340.8 S 5.799(rd\232. Some).1 F 3.299 (sites that use the automounter may prefer to change this to)5.799 F -(\231/v)174 718.2 Q(ar/forw)-.25 E 1.696(ard/$u\232 to search a \214le \ -with the same name as the user in a system)-.1 F 0 Cg EP -%%Page: 68 64 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-68 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -(directory)174 96 Q 5.487(.I)-.65 G 2.987(tc)-5.487 G .488 -(an also be set to a sequence of paths separated by colons;)-2.987 F/F2 -10/Times-Italic@0 SF(sendmail)2.988 E F1 .831 +(\231/v)174 352.8 Q(ar/forw)-.25 E 1.696(ard/$u\232 to search a \214le \ +with the same name as the user in a system)-.1 F(directory)174 364.8 Q +5.487(.I)-.65 G 2.987(tc)-5.487 G .488 +(an also be set to a sequence of paths separated by colons;)-2.987 F F2 +(sendmail)2.988 E F1 .831 (stops at the \214rst \214le it can successfully and safely open.)174 -108 R -.15(Fo)5.83 G 3.33(re).15 G .83(xample, \231/v)-3.48 F(ar/for) --.25 E(-)-.2 E -.1(wa)174 120 S(rd/$u:$z/.forw).1 E .276 +376.8 R -.15(Fo)5.83 G 3.33(re).15 G .83(xample, \231/v)-3.48 F(ar/for) +-.25 E(-)-.2 E -.1(wa)174 388.8 S(rd/$u:$z/.forw).1 E .276 (ard\232 will search \214rst in /v)-.1 F(ar/forw)-.25 E(ard/)-.1 E F2 (username)A F1 .277(and then in)2.777 F F2(~user)2.777 E(-)-.2 E(name) -174 132 Q F1(/.forw)A(ard \(b)-.1 E +174 400.8 Q F1(/.forw)A(ard \(b)-.1 E (ut only if the \214rst \214le does not e)-.2 E(xist\).)-.15 E -(HeloName=)102 148.2 Q F2(name)A F1([no short name] Set the name to be \ -used for HELO/EHLO \(instead of $j\).)1.38 E(HoldExpensi)102 164.4 Q -8.54 -.15(ve [)-.25 H 1.394(c] If an outgoing mailer is mark).15 F 1.393 +(HeloName=)102 417 Q F2(name)A F1([no short name] Set the name to be us\ +ed for HELO/EHLO \(instead of $j\).)1.38 E(HoldExpensi)102 433.2 Q 8.54 +-.15(ve [)-.25 H 1.394(c] If an outgoing mailer is mark).15 F 1.393 (ed as being e)-.1 F(xpensi)-.15 E -.15(ve)-.25 G 3.893(,d).15 G(on') --3.893 E 3.893(tc)-.18 G 1.393(onnect immedi-)-3.893 F(ately)174 176.4 Q -(.)-.65 E(HostsFile=)102 192.6 Q F2(path)A F1 .026([no short name] The \ +-3.893 E 3.893(tc)-.18 G 1.393(onnect immedi-)-3.893 F(ately)174 445.2 Q +(.)-.65 E(HostsFile=)102 461.4 Q F2(path)A F1 .026([no short name] The \ path to the hosts database, normally \231/etc/hosts\232.)10.24 F .026 (This option)5.026 F 1.417(is only consulted when sendmail is canonifyi\ -ng addresses, and then only when)174 204.6 R .783 -(\231\214les\232 is in the \231hosts\232 service switch entry)174 216.6 +ng addresses, and then only when)174 473.4 R .783 +(\231\214les\232 is in the \231hosts\232 service switch entry)174 485.4 R 5.784(.I)-.65 G 3.284(np)-5.784 G(articular)-3.284 E 3.284(,t)-.4 G .784(his \214le is)-3.284 F F2(ne)3.284 E(ver)-.15 E F1(used)3.284 E .202(when looking up host addresses; that is under the control of the s\ -ystem)174 228.6 R F2 -.1(ge)2.702 G(thostby-).1 E(name)174 240.6 Q F1 -(\(3\) routine.)A(HostStatusDirectory=)102 256.8 Q F2(path)A F1 .43 +ystem)174 497.4 R F2 -.1(ge)2.702 G(thostby-).1 E(name)174 509.4 Q F1 +(\(3\) routine.)A(HostStatusDirectory=)102 525.6 Q F2(path)A F1 .43 ([no short name] The location of the long term host status information.) -174 268.8 R .43(When set,)5.43 F 1.39 -(information about the status of hosts \(e.g., host do)174 280.8 R 1.39 +174 537.6 R .43(When set,)5.43 F 1.39 +(information about the status of hosts \(e.g., host do)174 549.6 R 1.39 (wn or not accepting connec-)-.25 F .162 -(tions\) will be shared between all)174 292.8 R F2(sendmail)2.663 E F1 +(tions\) will be shared between all)174 561.6 R F2(sendmail)2.663 E F1 .163(processes; normally)2.663 F 2.663(,t)-.65 G .163 (his information is)-2.663 F .123(only held within a single queue run.) -174 304.8 R .123(This option requires a connection cache of at)5.123 F -.688(least 1 to function.)174 316.8 R .688(If the option be)5.688 F .688 +174 573.6 R .123(This option requires a connection cache of at)5.123 F +.688(least 1 to function.)174 585.6 R .688(If the option be)5.688 F .688 (gins with a leading `/', it is an absolute path-)-.15 F .617 -(name; otherwise, it is relati)174 328.8 R .917 -.15(ve t)-.25 H 3.117 +(name; otherwise, it is relati)174 597.6 R .917 -.15(ve t)-.25 H 3.117 (ot).15 G .617(he mail queue directory)-3.117 F 5.617(.A)-.65 G .617 (suggested v)-2.5 F .616(alue for)-.25 F .558(sites desiring persistent\ host status is \231.hoststat\232 \(i.e., a subdirectory of the queue) -174 340.8 R(directory\).)174 352.8 Q 24.51(IgnoreDots [i])102 369 R +174 609.6 R(directory\).)174 621.6 Q 24.51(IgnoreDots [i])102 637.8 R 1.172(Ignore dots in incoming messages.)3.672 F 1.172(This is al)6.172 F --.1(wa)-.1 G 1.171(ys disabled \(that is, dots are).1 F(al)174 381 Q -.1 -(wa)-.1 G(ys accepted\) when reading SMTP mail.).1 E(InputMailFilters=) -102 397.2 Q F2(name)A(,name)-.1 E(,...)-.1 E F1 3.621(Ac)174 409.2 S -1.122(omma separated list of \214lters which determines which \214lters\ - \(see the "X \212)-3.621 F 1.768 -(Mail Filter \(Milter\) De\214nitions" section\) and the in)174 421.2 R +-.1(wa)-.1 G 1.171(ys disabled \(that is, dots are).1 F(al)174 649.8 Q +-.1(wa)-.1 G(ys accepted\) when reading SMTP mail.).1 E +(InputMailFilters=)102 666 Q F2(name)A(,name)-.1 E(,...)-.1 E F1 3.621 +(Ac)174 678 S 1.122(omma separated list of \214lters which determines w\ +hich \214lters \(see the "X \212)-3.621 F 1.768 +(Mail Filter \(Milter\) De\214nitions" section\) and the in)174 690 R -.2(vo)-.4 G 1.768(cation sequence are con-).2 F .367 -(tacted for incoming SMTP messages.)174 433.2 R .367 -(If none are set, no \214lters will be contacted.)5.367 F(LD)102 449.4 Q -(APDef)-.4 E(aultSpec=)-.1 E F2(spec)A F1 2.058 -([no short name] Sets a def)174 461.4 R 2.057 +(tacted for incoming SMTP messages.)174 702 R .367 +(If none are set, no \214lters will be contacted.)5.367 F 0 Cg EP +%%Page: 70 66 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-70 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(LD)102 96 +Q(APDef)-.4 E(aultSpec=)-.1 E/F2 10/Times-Italic@0 SF(spec)A F1 2.058 +([no short name] Sets a def)174 108 R 2.057 (ault map speci\214cation for LD)-.1 F 2.057(AP maps.)-.4 F 2.057(The v) -7.057 F(alue)-.25 E .673(should only contain LD)174 473.4 R .674 +7.057 F(alue)-.25 E .673(should only contain LD)174 120 R .674 (AP speci\214c settings such as \231-h host -p port -d bindDN\232.)-.4 F -.501(The settings will be used for all LD)174 485.4 R .501 +.501(The settings will be used for all LD)174 132 R .501 (AP maps unless the indi)-.4 F .5(vidual map speci\214ca-)-.25 F 1.5 -(tion o)174 497.4 R -.15(ve)-.15 G 1.5(rrides a setting.).15 F 1.5 +(tion o)174 144 R -.15(ve)-.15 G 1.5(rrides a setting.).15 F 1.5 (This option should be set before an)6.5 F 4(yL)-.15 G -.4(DA)-4 G 4(Pm) -.4 G 1.5(aps are)-4 F(de\214ned.)174 509.4 Q(LogLe)102 525.6 Q -.15(ve) +.4 G 1.5(aps are)-4 F(de\214ned.)174 156 Q(LogLe)102 172.2 Q -.15(ve) -.25 G(l=).15 E F2(n)A F1([L] Set the log le)22.88 E -.15(ve)-.25 G 2.5 (lt).15 G(o)-2.5 E F2(n)2.5 E F1 5(.D)C(ef)-5 E(aults to 9.)-.1 E(M)102 -541.8 Q F2 1.666(xv)C(alue)-1.666 E F1 .255([no long v)35.344 F .255 +188.4 Q F2 1.666(xv)C(alue)-1.666 E F1 .255([no long v)35.344 F .255 (ersion] Set the macro)-.15 F F2(x)2.755 E F1(to)2.755 E F2(value)2.755 E F1 5.255(.T)C .255(his is intended only for use from the)-5.255 F -(command line.)174 553.8 Q(The)5 E F02.5 E F1 -(\215ag is preferred.)2.5 E -1.04(MailboxDatabase [no)102 570 R 2.967 +(command line.)174 200.4 Q(The)5 E F02.5 E F1 +(\215ag is preferred.)2.5 E -1.04(MailboxDatabase [no)102 216.6 R 2.967 (short name] T)5.467 F 2.967 (ype of lookup to \214nd information about local mailbox)-.8 F(es,)-.15 -E(def)174 582 Q .145(aults to `)-.1 F(`pw')-.74 E 2.645('w)-.74 G .145 +E(def)174 228.6 Q .145(aults to `)-.1 F(`pw')-.74 E 2.645('w)-.74 G .145 (hich uses)-2.645 F F2 -.1(ge)2.645 G(tpwnam).1 E F1 5.145(.O)C .145 (ther types can be introduced by adding)-5.145 F -(them to the source code, see libsm/mbdb)174 594 Q(.c for details.)-.4 E -33.94(UseMSP [no)102 610.2 R .163 +(them to the source code, see libsm/mbdb)174 240.6 Q(.c for details.)-.4 +E 33.94(UseMSP [no)102 256.8 R .163 (short name] Use as mail submission program, i.e., allo)2.663 F 2.664 (wg)-.25 G .164(roup writable queue)-2.664 F .954(\214les if the group \ -is the same as that of a set-group-ID sendmail binary)174 622.2 R 5.954 -(.S)-.65 G .954(ee the)-5.954 F(\214le)174 634.2 Q F0(sendmail/SECURITY) +is the same as that of a set-group-ID sendmail binary)174 268.8 R 5.954 +(.S)-.65 G .954(ee the)-5.954 F(\214le)174 280.8 Q F0(sendmail/SECURITY) 2.5 E F1(in the distrib)2.5 E(ution tarball.)-.2 E 11.17(MatchGECOS [G]) -102 650.4 R(Allo)3.333 E 3.333(wf)-.25 G .833 +102 297 R(Allo)3.333 E 3.333(wf)-.25 G .833 (uzzy matching on the GECOS \214eld.)-3.333 F .834 (If this \215ag is set, and the usual)5.833 F .868(user name lookups f) -174 662.4 R .867(ail \(that is, there is no alias with this name and a) --.1 F F2 -.1(ge)3.367 G(tpwnam).1 E F1 -.1(fa)174 674.4 S 1.155 +174 309 R .867(ail \(that is, there is no alias with this name and a)-.1 +F F2 -.1(ge)3.367 G(tpwnam).1 E F1 -.1(fa)174 321 S 1.155 (ils\), sequentially search the passw).1 F 1.155 (ord \214le for a matching entry in the GECOS)-.1 F 3.696(\214eld. This) -174 686.4 R 1.196(also requires that MA)3.696 F 1.196 +174 333 R 1.196(also requires that MA)3.696 F 1.196 (TCHGECOS be turned on during compilation.)-1.11 F -(This option is not recommended.)174 698.4 Q 0 Cg EP -%%Page: 69 65 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-69)195.86 E/F1 10/Times-Roman@0 SF(MaxAliasRecursion=)102 96 Q -/F2 10/Times-Italic@0 SF(N)A F1 -([no short name] The maximum depth of alias recursion \(def)174 108 Q -(ault: 10\).)-.1 E(MaxDaemonChildren=)102 124.2 Q F2(N)A F1 .539 -([no short name] If set,)174 136.2 R F2(sendmail)3.039 E F1 .539 +(This option is not recommended.)174 345 Q(MaxAliasRecursion=)102 361.2 +Q F2(N)A F1([no short name] The maximum depth of alias recursion \(def) +174 373.2 Q(ault: 10\).)-.1 E(MaxDaemonChildren=)102 389.4 Q F2(N)A F1 +.539([no short name] If set,)174 401.4 R F2(sendmail)3.039 E F1 .539 (will refuse connections when it has more than)3.039 F F2(N)3.04 E F1 .886(children processing incoming mail or automatic queue runs.)174 -148.2 R .885(This does not limit)5.885 F .812 -(the number of outgoing connections.)174 160.2 R .812(If the def)5.812 F +413.4 R .885(This does not limit)5.885 F .812 +(the number of outgoing connections.)174 425.4 R .812(If the def)5.812 F (ault)-.1 E F0(Deli)3.313 E -.1(ve)-.1 G(ryMode).1 E F1(\(background\)) -3.313 E 3.135(is used, then)174 172.2 R F2(sendmail)5.635 E F1 3.134 +3.313 E 3.135(is used, then)174 437.4 R F2(sendmail)5.635 E F1 3.134 (may create an almost unlimited number of children)5.635 F .294 -(\(depending on the number of transactions and the relati)174 184.2 R +(\(depending on the number of transactions and the relati)174 449.4 R .594 -.15(ve exe)-.25 H .295(cution times of mail).15 F 1.236 -(receiption and mail deli)174 196.2 R -.15(ve)-.25 G 3.736(ry\). If).15 +(receiption and mail deli)174 461.4 R -.15(ve)-.25 G 3.736(ry\). If).15 F 1.236(the limit should be enforced, then a)3.736 F F0(Deli)3.735 E -.1 -(ve)-.1 G(ry-).1 E(Mode)174 208.2 Q F1 1.483 +(ve)-.1 G(ry-).1 E(Mode)174 473.4 Q F1 1.483 (other than background must be used.)3.983 F 1.484 (If not set, there is no limit to the)6.483 F -(number of children -- that is, the system load a)174 220.2 Q -.15(ve) --.2 G(rage controls this.).15 E(MaxHeadersLength=)102 236.4 Q F2(N)A F1 +(number of children -- that is, the system load a)174 485.4 Q -.15(ve) +-.2 G(rage controls this.).15 E(MaxHeadersLength=)102 501.6 Q F2(N)A F1 .17([no short name] The maximum length of the sum of all headers.)174 -248.4 R .17(This can be used)5.17 F(to pre)174 260.4 Q -.15(ve)-.25 G +513.6 R .17(This can be used)5.17 F(to pre)174 525.6 Q -.15(ve)-.25 G (nt a denial of service attack.).15 E(The def)5 E(ault is no limit.)-.1 -E(MaxHopCount=)102 276.6 Q F2(N)A F1 1.237([h] The maximum hop count.) -174 288.6 R 1.237(Messages that ha)6.237 F 1.538 -.15(ve b)-.2 H 1.238 +E(MaxHopCount=)102 541.8 Q F2(N)A F1 1.237([h] The maximum hop count.) +174 553.8 R 1.237(Messages that ha)6.237 F 1.538 -.15(ve b)-.2 H 1.238 (een processed more than).15 F F2(N)3.738 E F1 -(times are assumed to be in a loop and are rejected.)174 300.6 Q(Def)5 E -(aults to 25.)-.1 E(MaxMessageSize=)102 316.8 Q F2(N)A F1 2.563 -([no short name] Specify the maximum message size to be adv)174 328.8 R -2.562(ertised in the)-.15 F 1.022(ESMTP EHLO response.)174 340.8 R 1.022 +(times are assumed to be in a loop and are rejected.)174 565.8 Q(Def)5 E +(aults to 25.)-.1 E(MaxMessageSize=)102 582 Q F2(N)A F1 2.563 +([no short name] Specify the maximum message size to be adv)174 594 R +2.562(ertised in the)-.15 F 1.022(ESMTP EHLO response.)174 606 R 1.022 (Messages lar)6.022 F 1.022(ger than this will be rejected.)-.18 F 1.023 -(If set to a)6.023 F -.25(va)174 352.8 S .834 +(If set to a)6.023 F -.25(va)174 618 S .834 (lue greater than zero, that v).25 F .834 (alue will be listed in the SIZE response, otherwise)-.25 F(SIZE is adv) -174 364.8 Q(ertised in the ESMTP EHLO response without a parameter)-.15 -E(.)-.55 E(MaxMimeHeaderLength=)102 381 Q F2(N[/M])A F1 .343([no short \ -name] Sets the maximum length of certain MIME header \214eld v)174 393 R -.344(alues to)-.25 F F2(N)174 405 Q F1 3.619(characters. These)3.619 F -1.118(MIME header \214elds are determined by being a member of)3.619 F -.895(class {checkMIMET)174 417 R -.15(ex)-.7 G .895 +174 630 Q(ertised in the ESMTP EHLO response without a parameter)-.15 E +(.)-.55 E(MaxMimeHeaderLength=)102 646.2 Q F2(N[/M])A F1 .343([no short\ + name] Sets the maximum length of certain MIME header \214eld v)174 +658.2 R .344(alues to)-.25 F F2(N)174 670.2 Q F1 3.619 +(characters. These)3.619 F 1.118 +(MIME header \214elds are determined by being a member of)3.619 F .895 +(class {checkMIMET)174 682.2 R -.15(ex)-.7 G .895 (tHeaders}, which currently contains only the header Con-).15 F 2.559 -(tent-Description. F)174 429 R .059(or some of these headers which tak) --.15 F 2.559(ep)-.1 G .059(arameters, the maximum)-2.559 F .101 -(length of each parameter is set to)174 441 R F2(M)2.602 E F1 .102 +(tent-Description. F)174 694.2 R .059 +(or some of these headers which tak)-.15 F 2.559(ep)-.1 G .059 +(arameters, the maximum)-2.559 F .101 +(length of each parameter is set to)174 706.2 R F2(M)2.602 E F1 .102 (if speci\214ed.)2.602 F(If)5.102 E F2(/M)2.602 E F1 .102 -(is not speci\214ed, one half of)2.602 F F2(N)174 453 Q F1 1.776 +(is not speci\214ed, one half of)2.602 F F2(N)174 718.2 Q F1 1.776 (will be used.)4.276 F 1.776(By def)6.776 F 1.775(ault, these v)-.1 F 1.775(alues are 2048 and 1024, respecti)-.25 F -.15(ve)-.25 G(ly).15 E -6.775(.T)-.65 G(o)-7.575 E(allo)174 465 Q 2.5(wa)-.25 G .3 -.15(ny l) --2.5 H(ength, a v).15 E(alue of 0 can be speci\214ed.)-.25 E -(MaxNOOPCommands=)102 481.2 Q F2(N)A F1(Ov)174 493.2 Q 2.103 -(erride the def)-.15 F 2.103(ault of)-.1 F F0(MAXNOOPCOMMANDS)4.603 E F1 -2.104(for the number of)4.603 F F2(useless)4.604 E F1 -(commands, see Section "Measures ag)174 505.2 Q -(ainst Denial of Service Attacks".)-.05 E(MaxQueueChildren=)102 521.4 Q +6.775(.T)-.65 G(o)-7.575 E 0 Cg EP +%%Page: 71 67 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-71)195.86 E/F1 10/Times-Roman@0 SF(allo)174 96 Q 2.5(wa)-.25 G +.3 -.15(ny l)-2.5 H(ength, a v).15 E(alue of 0 can be speci\214ed.)-.25 +E(MaxNOOPCommands=)102 112.2 Q/F2 10/Times-Italic@0 SF(N)A F1(Ov)174 +124.2 Q 2.103(erride the def)-.15 F 2.103(ault of)-.1 F F0 +(MAXNOOPCOMMANDS)4.603 E F1 2.104(for the number of)4.603 F F2(useless) +4.604 E F1(commands, see Section "Measures ag)174 136.2 Q +(ainst Denial of Service Attacks".)-.05 E(MaxQueueChildren=)102 152.4 Q F2(N)A F1 .304([no short name] When set, this limits the number of conc\ -urrent queue runner pro-)174 533.4 R .201(cesses to)174 545.4 R F2(N.) +urrent queue runner pro-)174 164.4 R .201(cesses to)174 176.4 R F2(N.) 2.701 E F1 .202 (This helps to control the amount of system resources used when pro-) -5.201 F 1.255(cessing the queue.)174 557.4 R 1.255 +5.201 F 1.255(cessing the queue.)174 188.4 R 1.255 (When there are multiple queue groups de\214ned and the total)6.255 F -1.2(number of queue runners for these queue groups w)174 569.4 R 1.2 -(ould e)-.1 F(xceed)-.15 E F2(MaxQueueChil-)3.7 E(dr)174 581.4 Q(en)-.37 +1.2(number of queue runners for these queue groups w)174 200.4 R 1.2 +(ould e)-.1 F(xceed)-.15 E F2(MaxQueueChil-)3.7 E(dr)174 212.4 Q(en)-.37 E F1 .472(then the queue groups will not all run concurrently)2.973 F 2.972(.T)-.65 G .472(hat is, some portion of)-2.972 F .871 -(the queue groups will run concurrently such that)174 593.4 R F2 +(the queue groups will run concurrently such that)174 224.4 R F2 (MaxQueueChildr)3.371 E(en)-.37 E F1 .871(will not be)3.371 F -.15(ex) -174 605.4 S 1.893(ceeded, while the remaining queue groups will be run \ -later \(in round robin).15 F 1.3(order\). See also)174 617.4 R F2 +174 236.4 S 1.893(ceeded, while the remaining queue groups will be run \ +later \(in round robin).15 F 1.3(order\). See also)174 248.4 R F2 (MaxRunner)3.8 E(sP)-.1 E(erQueue)-.8 E F1 1.3(and the section)3.8 F F0 -1.3(Queue Gr)3.8 F 1.3(oup Declara-)-.18 F(tion)174 629.4 Q F1 5.757(.N) +1.3(Queue Gr)3.8 F 1.3(oup Declara-)-.18 F(tion)174 260.4 Q F1 5.757(.N) C(otice:)-5.757 E F2(sendmail)3.257 E F1 .757(does not count indi)3.257 F .757(vidual queue runners, b)-.25 F .756(ut only sets of)-.2 F 1.451 -(processes that act on a w)174 641.4 R 3.951(orkgroup. Hence)-.1 F 1.451 -(the actual number of queue runners)3.951 F 1.414(may be lo)174 653.4 R +(processes that act on a w)174 272.4 R 3.951(orkgroup. Hence)-.1 F 1.451 +(the actual number of queue runners)3.951 F 1.414(may be lo)174 284.4 R 1.414(wer than the limit imposed by)-.25 F F2(MaxQueueChildr)3.914 E(en) -.37 E F1 6.414(.T)C 1.414(his discrepanc)-6.414 F(y)-.15 E 1.423 -(can be lar)174 665.4 R 1.424(ge if some queue runners ha)-.18 F 1.724 +(can be lar)174 296.4 R 1.424(ge if some queue runners ha)-.18 F 1.724 -.15(ve t)-.2 H 3.924(ow).15 G 1.424(ait for a slo)-4.024 F 3.924(ws) --.25 G(erv)-3.924 E 1.424(er and if short)-.15 F(interv)174 677.4 Q -(als are used.)-.25 E(MaxQueueRunSize=)102 693.6 Q F2(N)A F1 .677([no s\ +-.25 G(erv)-3.924 E 1.424(er and if short)-.15 F(interv)174 308.4 Q +(als are used.)-.25 E(MaxQueueRunSize=)102 324.6 Q F2(N)A F1 .677([no s\ hort name] The maximum number of jobs that will be processed in a singl\ -e)174 705.6 R .501(queue run.)174 717.6 R .501 +e)174 336.6 R .501(queue run.)174 348.6 R .501 (If not set, there is no limit on the size.)5.501 F .501(If you ha)5.501 -F .802 -.15(ve ve)-.2 H .502(ry lar).15 F .502(ge queues)-.18 F 0 Cg EP -%%Page: 70 66 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-70 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .445 -(or a v)174 96 R .445(ery short queue run interv)-.15 F .445 +F .802 -.15(ve ve)-.2 H .502(ry lar).15 F .502(ge queues)-.18 F .445 +(or a v)174 360.6 R .445(ery short queue run interv)-.15 F .445 (al this could be unstable.)-.25 F(Ho)5.445 E(we)-.25 E -.15(ve)-.25 G -1.245 -.4(r, s).15 H .445(ince the \214rst).4 F/F2 10/Times-Italic@0 SF -(N)174 108 Q F1 1.115 -(jobs in queue directory order are run \(rather than the)3.615 F F2(N) -3.615 E F1 1.115(highest priority jobs\))3.615 F .136 -(this should be set as high as possible to a)174 120 R -.2(vo)-.2 G .136 -(id \231losing\232 jobs that happen to f).2 F .136(all late)-.1 F 2.325 -(in the queue directory)174 132 R 7.326(.N)-.65 G 2.326 +1.245 -.4(r, s).15 H .445(ince the \214rst).4 F F2(N)174 372.6 Q F1 +1.115(jobs in queue directory order are run \(rather than the)3.615 F F2 +(N)3.615 E F1 1.115(highest priority jobs\))3.615 F .136 +(this should be set as high as possible to a)174 384.6 R -.2(vo)-.2 G +.136(id \231losing\232 jobs that happen to f).2 F .136(all late)-.1 F +2.325(in the queue directory)174 396.6 R 7.326(.N)-.65 G 2.326 (ote: this option also restricts the number of entries)-7.326 F 1.443 -(printed by)174 144 R F2(mailq)3.943 E F1 6.443(.T)C 1.443(hat is, if) +(printed by)174 408.6 R F2(mailq)3.943 E F1 6.443(.T)C 1.443(hat is, if) -6.443 F F2(MaxQueueRunSize)3.943 E F1 1.443(is set to a v)3.943 F(alue) -.25 E F0(N)3.943 E F1(lar)3.942 E 1.442(ger than)-.18 F -(zero, then only)174 156 Q F0(N)2.5 E F1 +(zero, then only)174 420.6 Q F0(N)2.5 E F1 (entries are printed per queue group.)2.5 E(MaxRecipientsPerMessage=)102 -172.2 Q F2(N)A F1 1.672([no short name] The maximum number of recipient\ -s that will be accepted per)174 184.2 R 1.459 -(message in an SMTP transaction.)174 196.2 R 1.458 +436.8 Q F2(N)A F1 1.672([no short name] The maximum number of recipient\ +s that will be accepted per)174 448.8 R 1.459 +(message in an SMTP transaction.)174 460.8 R 1.458 (Note: setting this too lo)6.458 F 3.958(wc)-.25 G 1.458 -(an interfere with)-3.958 F .048(sending mail from MU)174 208.2 R .048 +(an interfere with)-3.958 F .048(sending mail from MU)174 472.8 R .048 (As that use SMTP for initial submission.)-.4 F .049 (If not set, there is)5.049 F -(no limit on the number of recipients per en)174 220.2 Q -.15(ve)-.4 G -(lope.).15 E(MaxRunnersPerQueue=)102 236.4 Q F2(N)A F1 2.004 -([no short name] This sets the def)174 248.4 R 2.003 +(no limit on the number of recipients per en)174 484.8 Q -.15(ve)-.4 G +(lope.).15 E(MaxRunnersPerQueue=)102 501 Q F2(N)A F1 2.004 +([no short name] This sets the def)174 513 R 2.003 (ault maximum number of queue runners for)-.1 F 1.161(queue groups.)174 -260.4 R 1.161(Up to)6.161 F F2(N)3.661 E F1 1.161(queue runners will w) +525 R 1.161(Up to)6.161 F F2(N)3.661 E F1 1.161(queue runners will w) 3.661 F 1.162(ork in parallel on a queue group')-.1 F(s)-.55 E 3.466 -(messages. This)174 272.4 R .965 +(messages. This)174 537 R .965 (is useful where the processing of a message in the queue might)3.466 F .945(delay the processing of subsequent messages. Such a delay may be t\ -he result of)174 284.4 R .116(non-erroneous situations such as a lo)174 -296.4 R 2.616(wb)-.25 G .116(andwidth connection.)-2.616 F .116 -(May be o)5.116 F -.15(ve)-.15 G(rridden).15 E .644 -(on a per queue group basis by setting the)174 308.4 R F2(Runner)3.144 E +he result of)174 549 R .116(non-erroneous situations such as a lo)174 +561 R 2.616(wb)-.25 G .116(andwidth connection.)-2.616 F .116(May be o) +5.116 F -.15(ve)-.15 G(rridden).15 E .644 +(on a per queue group basis by setting the)174 573 R F2(Runner)3.144 E (s)-.1 E F1 .645(option; see the section)3.144 F F0(Queue)3.145 E(Gr)174 -320.4 Q(oup Declaration)-.18 E F1 5(.T)C(he def)-5 E -(ault is 1 when not set.)-.1 E(MeT)102 336.6 Q 40.86(oo [m])-.8 F .367 +585 Q(oup Declaration)-.18 E F1 5(.T)C(he def)-5 E +(ault is 1 when not set.)-.1 E(MeT)102 601.2 Q 40.86(oo [m])-.8 F .367 (Send to me too, e)2.867 F -.15(ve)-.25 G 2.867(ni).15 G 2.867(fIa) -2.867 G 2.867(mi)-2.867 G 2.867(na)-2.867 G 2.867(na)-2.867 G .367 (lias e)-2.867 F 2.867(xpansion. This)-.15 F .366(option is deprecated) -2.867 F(and will be remo)174 348.6 Q -.15(ve)-.15 G 2.5(df).15 G -(rom a future v)-2.5 E(ersion.)-.15 E 44.5(Milter [no)102 364.8 R .777 +2.867 F(and will be remo)174 613.2 Q -.15(ve)-.15 G 2.5(df).15 G +(rom a future v)-2.5 E(ersion.)-.15 E 44.5(Milter [no)102 629.4 R .777 (short name] This option has se)3.277 F -.15(ve)-.25 G .778 (ral sub\(sub\)options.).15 F .778(The names of the sub-)5.778 F 1.135 -(options are separated by dots.)174 376.8 R 1.135(At the \214rst le) +(options are separated by dots.)174 641.4 R 1.135(At the \214rst le) 6.135 F -.15(ve)-.25 G 3.634(lt).15 G 1.134(he follo)-3.634 F 1.134 -(wing options are a)-.25 F -.25(va)-.2 G(il-).25 E(able:)174 388.8 Q -(LogLe)214 405 Q -.15(ve)-.25 G 15(lL).15 G(og le)-15 E -.15(ve)-.25 G +(wing options are a)-.25 F -.25(va)-.2 G(il-).25 E(able:)174 653.4 Q +(LogLe)214 669.6 Q -.15(ve)-.25 G 15(lL).15 G(og le)-15 E -.15(ve)-.25 G 2.5(lf).15 G(or input mail \214lter actions, def)-2.5 E(aults to LogLe) --.1 E -.15(ve)-.25 G(l.).15 E 22.1(macros Speci\214es)214 417 R -(list of macro to transmit to \214lters.)2.5 E(See list belo)267.48 429 -Q -.65(w.)-.25 G 2.458(The `)174 445.2 R(`macros')-.74 E 4.958('o)-.74 G -2.458(ption has the follo)-4.958 F 2.458 +-.1 E -.15(ve)-.25 G(l.).15 E 22.1(macros Speci\214es)214 681.6 R +(list of macro to transmit to \214lters.)2.5 E(See list belo)267.48 +693.6 Q -.65(w.)-.25 G 2.458(The `)174 709.8 R(`macros')-.74 E 4.958('o) +-.74 G 2.458(ption has the follo)-4.958 F 2.458 (wing suboptions which specify the list of)-.25 F -(macro to transmit to milters after a certain e)174 457.2 Q -.15(ve)-.25 -G(nt occurred.).15 E 14.88(connect After)214 473.4 R -(session connection start)2.5 E 28.76(helo After)214 485.4 R -(EHLO/HELO command)2.5 E(en)214 497.4 Q 12.5(vfrom After)-.4 F -(MAIL From command)2.5 E(en)214 509.4 Q 16.39(vrcpt After)-.4 F(RCPT T) -2.5 E 2.5(oc)-.8 G(ommand)-2.5 E 29.32(data After)214 521.4 R -.4(DA)2.5 -G 1.86 -.93(TA c)-.71 H(ommand.).93 E 31.54(eoh After)214 533.4 R -.4 -(DA)2.5 G 1.86 -.93(TA c)-.71 H(ommand and header).93 E 28.76(eom After) -214 545.4 R -.4(DA)2.5 G 1.86 -.93(TA c)-.71 H(ommand and terminating `) -.93 E(`.)-.74 E -.74('')-.7 G(By def)174 561.6 Q +(macro to transmit to milters after a certain e)174 721.8 Q -.15(ve)-.25 +G(nt occurred.).15 E 0 Cg EP +%%Page: 72 68 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-72 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 14.88 +(connect After)214 96 R(session connection start)2.5 E 28.76(helo After) +214 108 R(EHLO/HELO command)2.5 E(en)214 120 Q 12.5(vfrom After)-.4 F +(MAIL From command)2.5 E(en)214 132 Q 16.39(vrcpt After)-.4 F(RCPT T)2.5 +E 2.5(oc)-.8 G(ommand)-2.5 E 29.32(data After)214 144 R -.4(DA)2.5 G +1.86 -.93(TA c)-.71 H(ommand.).93 E 31.54(eoh After)214 156 R -.4(DA)2.5 +G 1.86 -.93(TA c)-.71 H(ommand and header).93 E 28.76(eom After)214 168 +R -.4(DA)2.5 G 1.86 -.93(TA c)-.71 H(ommand and terminating `).93 E(`.) +-.74 E -.74('')-.7 G(By def)174 184.2 Q (ault the lists of macros are empty)-.1 E 5(.E)-.65 G(xample:)-5 E 2.5 -(OM)214 577.8 S(ilter)-2.5 E(.LogLe)-.55 E -.15(ve)-.25 G(l=12).15 E 2.5 -(OM)214 589.8 S(ilter)-2.5 E(.macros.connect=j, _, {daemon_name})-.55 E -(MinFreeBlocks=)102 610.2 Q F2(N)A F1 1.539([b] Insist on at least)174 -622.2 R F2(N)4.039 E F1 1.538 +(OM)214 200.4 S(ilter)-2.5 E(.LogLe)-.55 E -.15(ve)-.25 G(l=12).15 E 2.5 +(OM)214 212.4 S(ilter)-2.5 E(.macros.connect=j, _, {daemon_name})-.55 E +(MinFreeBlocks=)102 232.8 Q/F2 10/Times-Italic@0 SF(N)A F1 1.539 +([b] Insist on at least)174 244.8 R F2(N)4.039 E F1 1.538 (blocks free on the \214lesystem that holds the queue \214les)4.039 F -.845(before accepting email via SMTP)174 634.2 R 5.846(.I)-1.11 G 3.346 +.845(before accepting email via SMTP)174 256.8 R 5.846(.I)-1.11 G 3.346 (ft)-5.846 G .846(here is insuf)-3.346 F .846(\214cient space)-.25 F F2 (sendmail)3.346 E F1(gi)3.346 E -.15(ve)-.25 G 3.346(sa).15 G -(452 response to the MAIL command.)174 646.2 Q(This in)5 E +(452 response to the MAIL command.)174 268.8 Q(This in)5 E (vites the sender to try ag)-.4 E(ain later)-.05 E(.)-.55 E -(MinQueueAge=)102 662.4 Q F2 -.1(age)C F1 .887([no short name] Don')174 -674.4 R 3.387(tp)-.18 G .887(rocess an)-3.387 F 3.387(yq)-.15 G .886 +(MinQueueAge=)102 285 Q F2 -.1(age)C F1 .887([no short name] Don')174 +297 R 3.387(tp)-.18 G .887(rocess an)-3.387 F 3.387(yq)-.15 G .886 (ueued jobs that ha)-3.387 F 1.186 -.15(ve b)-.2 H .886 (een in the queue less).15 F 1.899(than the indicated time interv)174 -686.4 R 4.399(al. This)-.25 F 1.899(is intended to allo)4.399 F 4.399 -(wy)-.25 G 1.9(ou to get respon-)-4.399 F(si)174 698.4 Q -.15(ve)-.25 G -.665(ness by processing the queue f).15 F .665 +309 R 4.399(al. This)-.25 F 1.899(is intended to allo)4.399 F 4.399(wy) +-.25 G 1.9(ou to get respon-)-4.399 F(si)174 321 Q -.15(ve)-.25 G .665 +(ness by processing the queue f).15 F .665 (airly frequently without thrashing your system)-.1 F -(by trying jobs too often.)174 710.4 Q(The def)5 E -(ault units are minutes.)-.1 E 0 Cg EP -%%Page: 71 67 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-71)195.86 E/F1 10/Times-Roman@0 SF(MustQuoteChars=)102 96 Q/F2 -10/Times-Italic@0 SF(s)A F1 1.252([no short name] Sets the list of char\ -acters that must be quoted if used in a full)174 108 R 1.217 -(name that is in the phrase part of a `)174 120 R 1.217 +(by trying jobs too often.)174 333 Q(The def)5 E +(ault units are minutes.)-.1 E(MustQuoteChars=)102 349.2 Q F2(s)A F1 +1.252([no short name] Sets the list of characters that must be quoted i\ +f used in a full)174 361.2 R 1.217 +(name that is in the phrase part of a `)174 373.2 R 1.217 (`phrase
')-.74 F 3.717('s)-.74 G 3.717(yntax. The)-3.717 F -(def)3.717 E 1.217(ault is)-.1 F -.74(``)174 132 S.74 E -.74('') +(def)3.717 E 1.217(ault is)-.1 F -.74(``)174 385.2 S.74 E -.74('') -.7 G 5(.T).74 G(he characters `)-5 E(`@,;:\\\(\)[]')-.74 E 2.5('a)-.74 G(re al)-2.5 E -.1(wa)-.1 G(ys added to this list.).1 E 7.85 -(NiceQueueRun [no)102 148.2 R 2.156 +(NiceQueueRun [no)102 401.4 R 2.156 (short name] The priority of queue runners \(nice\(3\)\).)4.655 F 2.156 (This v)7.156 F 2.156(alue must be)-.25 F(greater or equal zero.)174 -160.2 Q(NoRecipientAction)102 176.4 Q .555 -([no short name] The action to tak)174 188.4 R 3.055(ew)-.1 G .555 +413.4 Q(NoRecipientAction)102 429.6 Q .555 +([no short name] The action to tak)174 441.6 R 3.055(ew)-.1 G .555 (hen you recei)-3.055 F .855 -.15(ve a m)-.25 H .554 (essage that has no v).15 F(alid)-.25 E .625(recipient headers \(T)174 -200.4 R .625(o:, Cc:, Bcc:, or Apparently-T)-.8 F .625 +453.6 R .625(o:, Cc:, Bcc:, or Apparently-T)-.8 F .625 (o: \212 the last included for back)-.8 F .109(compatibility with old) -174 212.4 R F2(sendmail)2.609 E F1 2.609(s\). It)B .109(can be)2.609 F +174 465.6 R F2(sendmail)2.609 E F1 2.609(s\). It)B .109(can be)2.609 F F0(None)2.608 E F1 .108(to pass the message on unmod-)2.608 F .296 -(i\214ed, which violates the protocol,)174 224.4 R F0(Add-T)2.796 E(o) +(i\214ed, which violates the protocol,)174 477.6 R F0(Add-T)2.796 E(o) -.92 E F1 .296(to add a T)2.796 F .296(o: header with an)-.8 F 2.797(yr) --.15 G(ecipients)-2.797 E 1.638(it can \214nd in the en)174 236.4 R -.15 +-.15 G(ecipients)-2.797 E 1.638(it can \214nd in the en)174 489.6 R -.15 (ve)-.4 G 1.638(lope \(which might e).15 F 1.638 (xpose Bcc: recipients\),)-.15 F F0(Add-A)4.138 E(ppar)-.25 E(-)-.37 E -(ently-T)174 248.4 Q(o)-.92 E F1 .337(to add an Apparently-T)2.837 F +(ently-T)174 501.6 Q(o)-.92 E F1 .337(to add an Apparently-T)2.837 F .337(o: header \(this is only for back-compatibility and)-.8 F .842 -(is of)174 260.4 R .841(\214cially deprecated\),)-.25 F F0(Add-T)3.341 E +(is of)174 513.6 R .841(\214cially deprecated\),)-.25 F F0(Add-T)3.341 E (o-Undisclosed)-.92 E F1 .841(to add a header \231T)3.341 F .841 -(o: undisclosed-)-.8 F .397(recipients:;\232 to mak)174 272.4 R 2.897 +(o: undisclosed-)-.8 F .397(recipients:;\232 to mak)174 525.6 R 2.897 (et)-.1 G .397(he header le)-2.897 F -.05(ga)-.15 G 2.897(lw).05 G .397 (ithout disclosing an)-2.897 F .398(ything, or)-.15 F F0(Add-Bcc)2.898 E -F1(to)2.898 E(add an empty Bcc: header)174 284.4 Q(.)-.55 E 1.18 -(OldStyleHeaders [o])102 300.6 R 1.713(Assume that the headers may be i\ +F1(to)2.898 E(add an empty Bcc: header)174 537.6 Q(.)-.55 E 1.18 +(OldStyleHeaders [o])102 553.8 R 1.713(Assume that the headers may be i\ n old format, i.e., spaces delimit names.)4.214 F 1.068 -(This actually turns on an adapti)174 312.6 R 1.368 -.15(ve a)-.25 H +(This actually turns on an adapti)174 565.8 R 1.368 -.15(ve a)-.25 H 1.068(lgorithm: if an).15 F 3.569(yr)-.15 G 1.069 (ecipient address contains a)-3.569 F 1.681 -(comma, parenthesis, or angle brack)174 324.6 R 1.681 -(et, it will be assumed that commas already)-.1 F -.15(ex)174 336.6 S +(comma, parenthesis, or angle brack)174 577.8 R 1.681 +(et, it will be assumed that commas already)-.1 F -.15(ex)174 589.8 S 2.825(ist. If).15 F .325 (this \215ag is not on, only commas delimit names.)2.825 F .325 (Headers are al)5.325 F -.1(wa)-.1 G .325(ys out-).1 F -(put with commas between the names.)174 348.6 Q(Def)5 E(aults to of)-.1 -E(f.)-.25 E(OperatorChars=)102 364.8 Q F2 -.15(ch)C(arlist).15 E F1 -1.438([$o macro] The list of characters that are considered to be \231o\ -perators\232, that is,)174 376.8 R .82(characters that delimit tok)174 -388.8 R 3.32(ens. All)-.1 F .82(operator characters are tok)3.32 F .82 +(put with commas between the names.)174 601.8 Q(Def)5 E(aults to of)-.1 +E(f.)-.25 E(OperatorChars=)102 618 Q F2 -.15(ch)C(arlist).15 E F1 1.438 +([$o macro] The list of characters that are considered to be \231operat\ +ors\232, that is,)174 630 R .82(characters that delimit tok)174 642 R +3.32(ens. All)-.1 F .82(operator characters are tok)3.32 F .82 (ens by themselv)-.1 F(es;)-.15 E .078 -(sequences of non-operator characters are also tok)174 400.8 R 2.578 +(sequences of non-operator characters are also tok)174 654 R 2.578 (ens. White)-.1 F .078(space characters sep-)2.578 F .269(arate tok)174 -412.8 R .269(ens b)-.1 F .269(ut are not tok)-.2 F .269(ens themselv)-.1 -F .269(es \212 for e)-.15 F .269(xample, \231)-.15 F .27 -(AAA.BBB\232 has three)-.8 F(tok)174 424.8 Q .433(ens, b)-.1 F .433 +666 R .269(ens b)-.1 F .269(ut are not tok)-.2 F .269(ens themselv)-.1 F +.269(es \212 for e)-.15 F .269(xample, \231)-.15 F .27 +(AAA.BBB\232 has three)-.8 F(tok)174 678 Q .433(ens, b)-.1 F .433 (ut \231)-.2 F .433(AAA BBB\232 has tw)-.8 F 2.933(o. If)-.1 F .433 (not set, OperatorChars def)2.933 F .433(aults to \231.)-.1 F 1.666 -(:@[])1.666 G<9a3b>-1.666 E(additionally)174 436.8 Q 3.565(,t)-.65 G -1.065(he characters \231\()-3.565 F 1.666(\)<>,;)1.666 G 3.565<9a61> --1.666 G 1.066(re al)-3.565 F -.1(wa)-.1 G 1.066(ys operators.).1 F -1.066(Note that Operator)6.066 F(-)-.2 E -(Chars must be set in the con\214guration \214le before an)174 448.8 Q -2.5(yr)-.15 G(ulesets.)-2.5 E(PidFile=)102 465 Q F2(\214lename)A F1 1.3 +(:@[])1.666 G<9a3b>-1.666 E(additionally)174 690 Q 3.565(,t)-.65 G 1.065 +(he characters \231\()-3.565 F 1.666(\)<>,;)1.666 G 3.565<9a61>-1.666 G +1.066(re al)-3.565 F -.1(wa)-.1 G 1.066(ys operators.).1 F 1.066 +(Note that Operator)6.066 F(-)-.2 E +(Chars must be set in the con\214guration \214le before an)174 702 Q 2.5 +(yr)-.15 G(ulesets.)-2.5 E 0 Cg EP +%%Page: 73 69 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-73)195.86 E/F1 10/Times-Roman@0 SF(PidFile=)102 96 Q/F2 10 +/Times-Italic@0 SF(\214lename)A F1 1.3 ([no short name] Filename of the pid \214le.)3.58 F(\(def)6.3 E 1.3 -(ault is _P)-.1 F -1.11(AT)-.92 G(H_SENDMAILPID\).)1.11 E(The)174 477 Q +(ault is _P)-.1 F -1.11(AT)-.92 G(H_SENDMAILPID\).)1.11 E(The)174 108 Q F2(\214lename)2.831 E F1 .332(is macro-e)2.831 F .332 (xpanded before it is opened, and unlink)-.15 F .332(ed when)-.1 F F2 -(sendmail)2.832 E F1 -.15(ex)174 489 S(its.).15 E(PostmasterCop)102 -505.2 Q(y=)-.1 E F2(postmaster)A F1 .003 +(sendmail)2.832 E F1 -.15(ex)174 120 S(its.).15 E(PostmasterCop)102 +136.2 Q(y=)-.1 E F2(postmaster)A F1 .003 ([P] If set, copies of error messages will be sent to the named)174 -517.2 R F2(postmaster)2.503 E F1 5.003(.O)C .003(nly the)-5.003 F .687 -(header of the f)174 529.2 R .687(ailed message is sent.)-.1 F .687 +148.2 R F2(postmaster)2.503 E F1 5.003(.O)C .003(nly the)-5.003 F .687 +(header of the f)174 160.2 R .687(ailed message is sent.)-.1 F .687 (Errors resulting from messages with a ne)5.687 F(g-)-.15 E(ati)174 -541.2 Q 1.831 -.15(ve p)-.25 H 1.531(recedence will not be sent.).15 F +172.2 Q 1.831 -.15(ve p)-.25 H 1.531(recedence will not be sent.).15 F 1.531(Since most errors are user problems, this is)6.531 F .453 -(probably not a good idea on lar)174 553.2 R .453(ge sites, and ar)-.18 +(probably not a good idea on lar)174 184.2 R .453(ge sites, and ar)-.18 F .453(guably contains all sorts of pri)-.18 F -.25(va)-.25 G -.15(cy) -.25 G .101(violations, b)174 565.2 R .101 +.25 G .101(violations, b)174 196.2 R .101 (ut it seems to be popular with certain operating systems v)-.2 F 2.6 -(endors. The)-.15 F 1.918(address is macro e)174 577.2 R 1.918 +(endors. The)-.15 F 1.918(address is macro e)174 208.2 R 1.918 (xpanded at the time of deli)-.15 F -.15(ve)-.25 G(ry).15 E 6.919(.D) --.65 G(ef)-6.919 E 1.919(aults to no postmaster)-.1 F(copies.)174 589.2 -Q(Pri)102 605.4 Q -.25(va)-.25 G -.15(cy).25 G(Options=).15 E F2 -(opt,opt,...)1.666 E F1 1.192([p] Set the pri)174 617.4 R -.25(va)-.25 G +-.65 G(ef)-6.919 E 1.919(aults to no postmaster)-.1 F(copies.)174 220.2 +Q(Pri)102 236.4 Q -.25(va)-.25 G -.15(cy).25 G(Options=).15 E F2 +(opt,opt,...)1.666 E F1 1.192([p] Set the pri)174 248.4 R -.25(va)-.25 G -.15(cy).25 G F2(opt)3.842 E F1 3.692(ions. `)B(`Pri)-.74 E -.25(va)-.25 G -.15(cy).25 G 2.672 -.74('' i).15 H 3.692(sr).74 G 1.191 (eally a misnomer; man)-3.692 F 3.691(yo)-.15 G 3.691(ft)-3.691 G 1.191 -(hese are)-3.691 F .928(just a w)174 629.4 R .928 +(hese are)-3.691 F .928(just a w)174 260.4 R .928 (ay of insisting on stricter adherence to the SMTP protocol.)-.1 F(The) -5.929 E F2(opt)3.429 E F1(ions)A(can be selected from:)174 641.4 Q 0 Cg -EP -%%Page: 72 68 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-72 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 56.37 -(public Allo)214 96 R 2.5(wo)-.25 G(pen access)-2.5 E 27.49 -(needmailhelo Insist)214 108 R(on HELO or EHLO command before MAIL)2.5 E -(neede)214 120 Q 25.98(xpnhelo Insist)-.15 F -(on HELO or EHLO command before EXPN)2.5 E(noe)214 132 Q 52.08 +5.929 E F2(opt)3.429 E F1(ions)A(can be selected from:)174 272.4 Q 56.37 +(public Allo)214 288.6 R 2.5(wo)-.25 G(pen access)-2.5 E 27.49 +(needmailhelo Insist)214 300.6 R(on HELO or EHLO command before MAIL)2.5 +E(neede)214 312.6 Q 25.98(xpnhelo Insist)-.15 F +(on HELO or EHLO command before EXPN)2.5 E(noe)214 324.6 Q 52.08 (xpn Disallo)-.15 F 2.5(wE)-.25 G(XPN entirely)-2.5 E 2.5(,i)-.65 G (mplies no)-2.5 E -.15(ve)-.15 G(rb).15 E(.)-.4 E 28.61 -(needvrfyhelo Insist)214 144 R(on HELO or EHLO command before VRFY)2.5 E -(no)214 156 Q 54.86(vrfy Disallo)-.15 F 2.5(wV)-.25 G(RFY entirely)-2.5 -E 55.82(noetrn Disallo)214 168 R 2.5(wE)-.25 G(TRN entirely)-2.5 E(no) -214 180 Q -.15(ve)-.15 G 53.9(rb Disallo).15 F 2.5(wV)-.25 G -(ERB entirely)-2.5 E 30.82(restrictmailq Restrict)214 192 R -(mailq command)2.5 E 35.27(restrictqrun Restrict)214 204 R -(\255q command line \215ag)2.5 E(restricte)214 216 Q 24.87 +(needvrfyhelo Insist)214 336.6 R(on HELO or EHLO command before VRFY)2.5 +E(no)214 348.6 Q 54.86(vrfy Disallo)-.15 F 2.5(wV)-.25 G(RFY entirely) +-2.5 E 55.82(noetrn Disallo)214 360.6 R 2.5(wE)-.25 G(TRN entirely)-2.5 +E(no)214 372.6 Q -.15(ve)-.15 G 53.9(rb Disallo).15 F 2.5(wV)-.25 G +(ERB entirely)-2.5 E 30.82(restrictmailq Restrict)214 384.6 R +(mailq command)2.5 E 35.27(restrictqrun Restrict)214 396.6 R +(\255q command line \215ag)2.5 E(restricte)214 408.6 Q 24.87 (xpand Restrict)-.15 F2.5 E 2.5(va)-.15 G -(nd \255v command line \215ags)-2.5 E 40.27(noreceipts Don')214 230 R -2.5(tr)-.18 G(eturn success DSNs)-2.5 E/F2 7/Times-Roman@0 SF(20)-4 I F1 -27.49(nobodyreturn Don')214 242 R 2.5(tr)-.18 G -(eturn the body of a message with DSNs)-2.5 E(goa)214 254 Q -.1(wa)-.15 -G 53.02(yD).1 G(isallo)-53.02 E 2.5(we)-.25 G -(ssentially all SMTP status queries)-2.5 E(authw)214 266 Q 27.59 +(nd \255v command line \215ags)-2.5 E 40.27(noreceipts Don')214 422.6 R +2.5(tr)-.18 G(eturn success DSNs)-2.5 E/F3 7/Times-Roman@0 SF(20)-4 I F1 +27.49(nobodyreturn Don')214 434.6 R 2.5(tr)-.18 G +(eturn the body of a message with DSNs)-2.5 E(goa)214 446.6 Q -.1(wa) +-.15 G 53.02(yD).1 G(isallo)-53.02 E 2.5(we)-.25 G +(ssentially all SMTP status queries)-2.5 E(authw)214 458.6 Q 27.59 (arnings Put)-.1 F(X-Authentication-W)2.5 E(arning: headers in messages) --.8 E(and log w)297.87 278 Q(arnings)-.1 E 12.5(noactualrecipient Don') -214 290 R 2.5(tp)-.18 G(ut X-Actual-Recipient lines in DSNs)-2.5 E -(which re)297.87 302 Q -.15(ve)-.25 G -(al the actual account that addresses map to.).15 E 2.977(The \231goa) -174 318.2 R -.1(wa)-.15 G 2.976(y\232 pseudo-\215ag sets all \215ags e) -.1 F 2.976(xcept \231noreceipts\232, \231restrictmailq\232,)-.15 F 4.557 -(\231restrictqrun\232, \231restricte)174 330.2 R 4.557 +-.8 E(and log w)297.87 470.6 Q(arnings)-.1 E 12.5 +(noactualrecipient Don')214 482.6 R 2.5(tp)-.18 G +(ut X-Actual-Recipient lines in DSNs)-2.5 E(which re)297.87 494.6 Q -.15 +(ve)-.25 G(al the actual account that addresses map to.).15 E 2.977 +(The \231goa)174 510.8 R -.1(wa)-.15 G 2.976 +(y\232 pseudo-\215ag sets all \215ags e).1 F 2.976 +(xcept \231noreceipts\232, \231restrictmailq\232,)-.15 F 4.557 +(\231restrictqrun\232, \231restricte)174 522.8 R 4.557 (xpand\232, \231noetrn\232, and \231nobodyreturn\232.)-.15 F 4.557 (If mailq is)9.557 F 1.842(restricted, only people in the same group as\ - the queue directory can print the)174 342.2 R 2.544(queue. If)174 354.2 + the queue directory can print the)174 534.8 R 2.544(queue. If)174 546.8 R .044(queue runs are restricted, only root and the o)2.544 F .045 -(wner of the queue directory)-.25 F 1.299(can run the queue.)174 366.2 R +(wner of the queue directory)-.25 F 1.299(can run the queue.)174 558.8 R 1.299(The \231restricte)6.299 F 1.299(xpand\232 pseudo-\215ag instructs) --.15 F/F3 10/Times-Italic@0 SF(sendmail)3.799 E F1 1.299(to drop)3.799 F -(pri)174 378.2 Q(vile)-.25 E 1.607(ges when the)-.15 F F04.108 E -(v)-.15 E F1 1.608(option is gi)4.108 F -.15(ve)-.25 G 4.108(nb).15 G -4.108(yu)-4.108 G 1.608(sers who are neither root nor the)-4.108 F -.35 -(Tr)174 390.2 S 1.33(ustedUser so users cannot read pri).35 F -.25(va) --.25 G 1.33(te aliases, forw).25 F 1.33(ards, or :include: \214les.)-.1 -F(It)6.33 E .634(will add the \231NonRootSafeAddr\232 to the \231DontBl\ -ameSendmail\232 option to pre)174 402.2 R -.15(ve)-.25 G(nt).15 E .436 -(misleading unsafe address w)174 414.2 R 2.936(arnings. It)-.1 F .436 +-.15 F F2(sendmail)3.799 E F1 1.299(to drop)3.799 F(pri)174 570.8 Q +(vile)-.25 E 1.607(ges when the)-.15 F F04.108 E(v)-.15 E F1 1.608 +(option is gi)4.108 F -.15(ve)-.25 G 4.108(nb).15 G 4.108(yu)-4.108 G +1.608(sers who are neither root nor the)-4.108 F -.35(Tr)174 582.8 S +1.33(ustedUser so users cannot read pri).35 F -.25(va)-.25 G 1.33 +(te aliases, forw).25 F 1.33(ards, or :include: \214les.)-.1 F(It)6.33 E +.634(will add the \231NonRootSafeAddr\232 to the \231DontBlameSendmail\ +\232 option to pre)174 594.8 R -.15(ve)-.25 G(nt).15 E .436 +(misleading unsafe address w)174 606.8 R 2.936(arnings. It)-.1 F .436 (also o)2.936 F -.15(ve)-.15 G .436(rrides the).15 F F02.936 E F1 (\(v)2.936 E .436(erbose\) command)-.15 F 1.292(line option to pre)174 -426.2 R -.15(ve)-.25 G 1.292(nt information leakage.).15 F 1.292 +618.8 R -.15(ve)-.25 G 1.292(nt information leakage.).15 F 1.292 (Authentication W)6.292 F 1.293(arnings add w)-.8 F(arn-)-.1 E .184 -(ings about v)174 438.2 R .183 +(ings about v)174 630.8 R .183 (arious conditions that may indicate attempts to spoof the mail system,) --.25 F(such as using a non-standard queue directory)174 450.2 Q(.)-.65 E -(ProcessT)102 466.4 Q(itlePre\214x=)-.35 E F3(string)A F1 1.195 -([no short name] Pre\214x the process title sho)174 478.4 R 1.196 -(wn on 'ps' listings with)-.25 F F3(string)3.696 E F1 6.196(.T)C(he) --6.196 E F3(string)174 490.4 Q F1(will be macro processed.)2.5 E -(QueueDirectory=)102 506.6 Q F3(dir)A F1 .584 -([Q] The QueueDirectory option serv)174 518.6 R .584(es tw)-.15 F 3.084 +-.25 F(such as using a non-standard queue directory)174 642.8 Q(.)-.65 E +(ProcessT)102 659 Q(itlePre\214x=)-.35 E F2(string)A F1 1.195 +([no short name] Pre\214x the process title sho)174 671 R 1.196 +(wn on 'ps' listings with)-.25 F F2(string)3.696 E F1 6.196(.T)C(he) +-6.196 E .32 LW 76 680.6 72 680.6 DL 80 680.6 76 680.6 DL 84 680.6 80 +680.6 DL 88 680.6 84 680.6 DL 92 680.6 88 680.6 DL 96 680.6 92 680.6 DL +100 680.6 96 680.6 DL 104 680.6 100 680.6 DL 108 680.6 104 680.6 DL 112 +680.6 108 680.6 DL 116 680.6 112 680.6 DL 120 680.6 116 680.6 DL 124 +680.6 120 680.6 DL 128 680.6 124 680.6 DL 132 680.6 128 680.6 DL 136 +680.6 132 680.6 DL 140 680.6 136 680.6 DL 144 680.6 140 680.6 DL 148 +680.6 144 680.6 DL 152 680.6 148 680.6 DL 156 680.6 152 680.6 DL 160 +680.6 156 680.6 DL 164 680.6 160 680.6 DL 168 680.6 164 680.6 DL 172 +680.6 168 680.6 DL 176 680.6 172 680.6 DL 180 680.6 176 680.6 DL 184 +680.6 180 680.6 DL 188 680.6 184 680.6 DL 192 680.6 188 680.6 DL 196 +680.6 192 680.6 DL 200 680.6 196 680.6 DL 204 680.6 200 680.6 DL 208 +680.6 204 680.6 DL 212 680.6 208 680.6 DL 216 680.6 212 680.6 DL/F4 5 +/Times-Roman@0 SF(20)93.6 691 Q/F5 8/Times-Roman@0 SF(N.B.: the)3.2 I/F6 +8/Times-Bold@0 SF(nor)2 E(eceipts)-.144 E F5(\215ag turns of)2 E 2(fs) +-.2 G(upport for RFC 1891 \(Deli)-2 E -.12(ve)-.2 G +(ry Status Noti\214cation\).).12 E 0 Cg EP +%%Page: 74 70 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-74 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Italic@0 SF(string) +174 96 Q/F2 10/Times-Roman@0 SF(will be macro processed.)2.5 E +(QueueDirectory=)102 112.2 Q F1(dir)A F2 .584 +([Q] The QueueDirectory option serv)174 124.2 R .584(es tw)-.15 F 3.084 (op)-.1 G 3.084(urposes. First,)-3.084 F .583(it speci\214es the direc-) -3.083 F .482(tory or set of directories that comprise the def)174 530.6 +3.083 F .482(tory or set of directories that comprise the def)174 136.2 R .482(ault queue group.)-.1 F .483(Second, it speci-)5.483 F .104(\214\ es the directory D which is the ancestor of all queue directories, and \ -which send-)174 542.6 R .721(mail uses as its current w)174 554.6 R .721 +which send-)174 148.2 R .721(mail uses as its current w)174 160.2 R .721 (orking directory)-.1 F 5.721(.W)-.65 G .721 (hen sendmail dumps core, it lea)-5.721 F -.15(ve)-.2 G(s).15 E 2.873 -(its core \214les in D.)174 566.6 R 2.873(There are tw)7.873 F 5.373(oc) --.1 G 5.373(ases. If)-5.373 F F3(dir)5.373 E F1 2.872 -(ends with an asterisk \(e)5.372 F(g,)-.15 E F3(/var/spool/mqueue/qd*) -174 578.6 Q F1 .253 +(its core \214les in D.)174 172.2 R 2.873(There are tw)7.873 F 5.373(oc) +-.1 G 5.373(ases. If)-5.373 F F1(dir)5.373 E F2 2.872 +(ends with an asterisk \(e)5.372 F(g,)-.15 E F1(/var/spool/mqueue/qd*) +174 184.2 Q F2 .253 (\), then all of the directories or symbolic links to directories)B(be) -174 590.6 Q .433(ginning with `qd' in)-.15 F F3(/var/spool/mqueue)2.933 -E F1 .432(will be used as queue directories of the)2.933 F(def)174 602.6 -Q .275(ault queue group, and)-.1 F F3(/var/spool/mqueue)2.775 E F1 .276 +174 196.2 Q .433(ginning with `qd' in)-.15 F F1(/var/spool/mqueue)2.933 +E F2 .432(will be used as queue directories of the)2.933 F(def)174 208.2 +Q .275(ault queue group, and)-.1 F F1(/var/spool/mqueue)2.775 E F2 .276 (will be used as the w)2.775 F .276(orking directory)-.1 F 2.82 -(D. Otherwise,)174 614.6 R F3(dir)2.82 E F1 .32 -(must name a directory \(usually)2.82 F F3(/var/spool/mqueue)2.82 E F1 +(D. Otherwise,)174 220.2 R F1(dir)2.82 E F2 .32 +(must name a directory \(usually)2.82 F F1(/var/spool/mqueue)2.82 E F2 .32(\): the def)B(ault)-.1 E .545 -(queue group consists of the single queue directory)174 626.6 R F3(dir) -3.045 E F1 3.045(,a)C .545(nd the w)-3.045 F .545(orking directory)-.1 F -2.501(Di)174 638.6 S 2.501(ss)-2.501 G .001(et to)-2.501 F F3(dir)2.501 -E F1 5.001(.T)C 2.501(od)-5.801 G .001 +(queue group consists of the single queue directory)174 232.2 R F1(dir) +3.045 E F2 3.045(,a)C .545(nd the w)-3.045 F .545(orking directory)-.1 F +2.501(Di)174 244.2 S 2.501(ss)-2.501 G .001(et to)-2.501 F F1(dir)2.501 +E F2 5.001(.T)C 2.501(od)-5.801 G .001 (e\214ne additional groups of queue directories, use the con\214gura-) --2.501 F .745(tion \214le `Q' command.)174 650.6 R .746 +-2.501 F .745(tion \214le `Q' command.)174 256.2 R .746 (Do not change the queue directory structure while send-)5.746 F -(mail is running.)174 662.6 Q .32 LW 76 678.8 72 678.8 DL 80 678.8 76 -678.8 DL 84 678.8 80 678.8 DL 88 678.8 84 678.8 DL 92 678.8 88 678.8 DL -96 678.8 92 678.8 DL 100 678.8 96 678.8 DL 104 678.8 100 678.8 DL 108 -678.8 104 678.8 DL 112 678.8 108 678.8 DL 116 678.8 112 678.8 DL 120 -678.8 116 678.8 DL 124 678.8 120 678.8 DL 128 678.8 124 678.8 DL 132 -678.8 128 678.8 DL 136 678.8 132 678.8 DL 140 678.8 136 678.8 DL 144 -678.8 140 678.8 DL 148 678.8 144 678.8 DL 152 678.8 148 678.8 DL 156 -678.8 152 678.8 DL 160 678.8 156 678.8 DL 164 678.8 160 678.8 DL 168 -678.8 164 678.8 DL 172 678.8 168 678.8 DL 176 678.8 172 678.8 DL 180 -678.8 176 678.8 DL 184 678.8 180 678.8 DL 188 678.8 184 678.8 DL 192 -678.8 188 678.8 DL 196 678.8 192 678.8 DL 200 678.8 196 678.8 DL 204 -678.8 200 678.8 DL 208 678.8 204 678.8 DL 212 678.8 208 678.8 DL 216 -678.8 212 678.8 DL/F4 5/Times-Roman@0 SF(20)93.6 689.2 Q/F5 8 -/Times-Roman@0 SF(N.B.: the)3.2 I/F6 8/Times-Bold@0 SF(nor)2 E(eceipts) --.144 E F5(\215ag turns of)2 E 2(fs)-.2 G(upport for RFC 1891 \(Deli)-2 -E -.12(ve)-.2 G(ry Status Noti\214cation\).).12 E 0 Cg EP -%%Page: 73 69 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-73)195.86 E/F1 10/Times-Roman@0 SF(QueueF)102 96 Q(actor=)-.15 E -/F2 10/Times-Italic@0 SF(factor)A F1 .614([q] Use)174 108 R F2(factor) -3.114 E F1 .613 +(mail is running.)174 268.2 Q(QueueF)102 284.4 Q(actor=)-.15 E F1 +(factor)A F2 .614([q] Use)174 296.4 R F1(factor)3.114 E F2 .613 (as the multiplier in the map function to decide when to just queue) -3.114 F .415(up jobs rather than run them.)174 120 R .415(This v)5.415 F -.415(alue is di)-.25 F .415(vided by the dif)-.25 F .415 -(ference between the)-.25 F 1.004(current load a)174 132 R -.15(ve)-.2 G -1.004(rage and the load a).15 F -.15(ve)-.2 G 1.004(rage limit \().15 F -F0(QueueLA)A F1 1.003(option\) to determine)3.503 F -(the maximum message priority that will be sent.)174 144 Q(Def)5 E -(aults to 600000.)-.1 E(QueueLA=)102 160.2 Q F2(LA)A F1 1.086 +3.114 F .415(up jobs rather than run them.)174 308.4 R .415(This v)5.415 +F .415(alue is di)-.25 F .415(vided by the dif)-.25 F .415 +(ference between the)-.25 F 1.004(current load a)174 320.4 R -.15(ve)-.2 +G 1.004(rage and the load a).15 F -.15(ve)-.2 G 1.004(rage limit \().15 +F F0(QueueLA)A F2 1.003(option\) to determine)3.503 F +(the maximum message priority that will be sent.)174 332.4 Q(Def)5 E +(aults to 600000.)-.1 E(QueueLA=)102 348.6 Q F1(LA)A F2 1.086 ([x] When the system load a)15.26 F -.15(ve)-.2 G 1.087(rage e).15 F -(xceeds)-.15 E F2(LA)3.587 E F1 1.087(and the)3.587 F F0(QueueF)3.587 E -(actor)-.25 E F1(\()3.587 E F0(q)A F1 3.587(\)o)C(ption)-3.587 E(di)174 -172.2 Q 1.465(vided by the dif)-.25 F 1.465 +(xceeds)-.15 E F1(LA)3.587 E F2 1.087(and the)3.587 F F0(QueueF)3.587 E +(actor)-.25 E F2(\()3.587 E F0(q)A F2 3.587(\)o)C(ption)-3.587 E(di)174 +360.6 Q 1.465(vided by the dif)-.25 F 1.465 (ference in the current load a)-.25 F -.15(ve)-.2 G 1.465(rage and the) -.15 F F0(QueueLA)3.965 E F1(option)3.965 E .769(plus one is less than t\ -he priority of the message, just queue messages \(i.e., don')174 184.2 R -(t)-.18 E .248(try to send them\).)174 196.2 R(Def)5.247 E .247 +.15 F F0(QueueLA)3.965 E F2(option)3.965 E .769(plus one is less than t\ +he priority of the message, just queue messages \(i.e., don')174 372.6 R +(t)-.18 E .248(try to send them\).)174 384.6 R(Def)5.247 E .247 (aults to 8 multiplied by the number of processors online on)-.1 F -(the system \(if that can be determined\).)174 208.2 Q(QueueFileMode=) -102 224.4 Q F2(mode)A F1 .961([no short name] Def)174 236.4 R .962 +(the system \(if that can be determined\).)174 396.6 Q(QueueFileMode=) +102 412.8 Q F1(mode)A F2 .961([no short name] Def)174 424.8 R .962 (ault permissions for queue \214les \(octal\).)-.1 F .962 (If not set, sendmail)5.962 F .213(uses 0600 unless its real and ef)174 -248.4 R(fecti)-.25 E .513 -.15(ve u)-.25 H .213(id are dif).15 F .212 -(ferent in which case it uses 0644.)-.25 F(QueueSortOrder=)102 264.6 Q -F2(algorithm)A F1 .096([no short name] Sets the)174 276.6 R F2 -(algorithm)2.596 E F1 .096(used for sorting the queue.)2.596 F .097 -(Only the \214rst char)5.097 F(-)-.2 E 1.022(acter of the v)174 288.6 R +436.8 R(fecti)-.25 E .513 -.15(ve u)-.25 H .213(id are dif).15 F .212 +(ferent in which case it uses 0644.)-.25 F(QueueSortOrder=)102 453 Q F1 +(algorithm)A F2 .096([no short name] Sets the)174 465 R F1(algorithm) +2.596 E F2 .096(used for sorting the queue.)2.596 F .097 +(Only the \214rst char)5.097 F(-)-.2 E 1.022(acter of the v)174 477 R 1.022(alue is used.)-.25 F(Le)6.021 E -.05(ga)-.15 G 3.521(lv).05 G 1.021(alues are \231host\232 \(to order by the name of the)-3.771 F 1.73 (\214rst host name of the \214rst recipient\), \231\214lename\232 \(to \ -order by the name of the)174 300.6 R .283(queue \214le name\), \231time\ +order by the name of the)174 489 R .283(queue \214le name\), \231time\ \232 \(to order by the submission/creation time\), \231random\232 \(to) -174 312.6 R .906(order randomly\), \231modi\214cation\232 \(to order by\ - the modi\214cation time of the qf \214le)174 324.6 R 1.349(\(older ent\ -ries \214rst\)\), \231none\232 \(to not order\), and \231priority\232 \ -\(to order by message)174 336.6 R 2.527(priority\). Host)174 348.6 R -.027(ordering mak)2.527 F .028(es better use of the connection cache, b) --.1 F .028(ut may tend to)-.2 F .323(process lo)174 360.6 R 2.823(wp) --.25 G .322(riority messages that go to a single host o)-2.823 F -.15 -(ve)-.15 G 2.822(rh).15 G .322(igh priority messages)-2.822 F 1.824 -(that go to se)174 372.6 R -.15(ve)-.25 G 1.824 -(ral hosts; it probably shouldn').15 F 4.325(tb)-.18 G 4.325(eu)-4.325 G -1.825(sed on slo)-4.325 F 4.325(wn)-.25 G(etw)-4.325 E 1.825(ork links.) --.1 F .614(Filename and modi\214cation time ordering sa)174 384.6 R -.15 -(ve)-.2 G 3.114(st).15 G .614(he o)-3.114 F -.15(ve)-.15 G .614 +174 501 R .906(order randomly\), \231modi\214cation\232 \(to order by t\ +he modi\214cation time of the qf \214le)174 513 R 1.349(\(older entries\ + \214rst\)\), \231none\232 \(to not order\), and \231priority\232 \(to \ +order by message)174 525 R 2.527(priority\). Host)174 537 R .027 +(ordering mak)2.527 F .028(es better use of the connection cache, b)-.1 +F .028(ut may tend to)-.2 F .323(process lo)174 549 R 2.823(wp)-.25 G +.322(riority messages that go to a single host o)-2.823 F -.15(ve)-.15 G +2.822(rh).15 G .322(igh priority messages)-2.822 F 1.824(that go to se) +174 561 R -.15(ve)-.25 G 1.824(ral hosts; it probably shouldn').15 F +4.325(tb)-.18 G 4.325(eu)-4.325 G 1.825(sed on slo)-4.325 F 4.325(wn) +-.25 G(etw)-4.325 E 1.825(ork links.)-.1 F .614 +(Filename and modi\214cation time ordering sa)174 573 R -.15(ve)-.2 G +3.114(st).15 G .614(he o)-3.114 F -.15(ve)-.15 G .614 (rhead of reading all of the).15 F .671 -(queued items before starting the queue run.)174 396.6 R .671 +(queued items before starting the queue run.)174 585 R .671 (Creation \(submission\) time ordering)5.671 F 1.854(is almost al)174 -408.6 R -.1(wa)-.1 G 1.854(ys a bad idea, since it allo).1 F 1.854 -(ws lar)-.25 F 1.854(ge, b)-.18 F 1.854(ulk mail to go out before)-.2 F -(smaller)174 420.6 Q 3.713(,p)-.4 G 1.213(ersonal mail, b)-3.713 F 1.213 -(ut may ha)-.2 F 1.513 -.15(ve a)-.2 H 1.214 -(pplicability on some hosts with v).15 F 1.214(ery f)-.15 F(ast)-.1 E -2.632(connections. Random)174 432.6 R .132(is useful if se)2.632 F -.15 -(ve)-.25 G .131(ral queue runners are started by hand which).15 F .389 -(try to drain the same queue since odds are the)174 444.6 R 2.889(yw) --.15 G .39(ill be w)-2.889 F .39(orking on dif)-.1 F .39(ferent parts) --.25 F(of the queue at the same time.)174 456.6 Q -(Priority ordering is the def)5 E(ault.)-.1 E(QueueT)102 472.8 Q -(imeout=)-.35 E F2(timeout)A F1 .356([T] A synon)174 484.8 R .356 -(ym for \231T)-.15 F 2.856(imeout.queuereturn\232. Use)-.35 F .355 -(that form instead of the \231Queue-)2.855 F -.35(Ti)174 496.8 S -(meout\232 form.).35 E 32.83(RandFile [no)102 513 R 1.036(short name] N\ -ame of \214le containing random data or the name of the UNIX)3.536 F -(sock)174 525 Q 1.631(et if EGD is used.)-.1 F 4.131(A\()6.631 G 1.631 +597 R -.1(wa)-.1 G 1.854(ys a bad idea, since it allo).1 F 1.854(ws lar) +-.25 F 1.854(ge, b)-.18 F 1.854(ulk mail to go out before)-.2 F(smaller) +174 609 Q 3.713(,p)-.4 G 1.213(ersonal mail, b)-3.713 F 1.213(ut may ha) +-.2 F 1.513 -.15(ve a)-.2 H 1.214(pplicability on some hosts with v).15 +F 1.214(ery f)-.15 F(ast)-.1 E 2.632(connections. Random)174 621 R .132 +(is useful if se)2.632 F -.15(ve)-.25 G .131 +(ral queue runners are started by hand which).15 F .389 +(try to drain the same queue since odds are the)174 633 R 2.889(yw)-.15 +G .39(ill be w)-2.889 F .39(orking on dif)-.1 F .39(ferent parts)-.25 F +(of the queue at the same time.)174 645 Q(Priority ordering is the def)5 +E(ault.)-.1 E(QueueT)102 661.2 Q(imeout=)-.35 E F1(timeout)A F2 .356 +([T] A synon)174 673.2 R .356(ym for \231T)-.15 F 2.856 +(imeout.queuereturn\232. Use)-.35 F .355 +(that form instead of the \231Queue-)2.855 F -.35(Ti)174 685.2 S +(meout\232 form.).35 E 32.83(RandFile [no)102 701.4 R 1.036(short name]\ + Name of \214le containing random data or the name of the UNIX)3.536 F +(sock)174 713.4 Q 1.631(et if EGD is used.)-.1 F 4.131(A\()6.631 G 1.631 (required\) pre\214x "e)-4.131 F 1.63 -(gd:" or "\214le:" speci\214es the type.)-.15 F(ST)174 537 Q(AR)-.93 E +(gd:" or "\214le:" speci\214es the type.)-.15 F(ST)174 725.4 Q(AR)-.93 E 1.561 (TTLS requires this \214lename if the compile \215ag HASURANDOMDEV is) --.6 F(not set \(see sendmail/README\).)174 549 Q(Resolv)102 565.2 Q -(erOptions=)-.15 E F2(options)A F1 .128([I] Set resolv)174 577.2 R .127 -(er options.)-.15 F -1.11(Va)5.127 G .127(lues can be set using)1.11 F -F0(+)2.627 E F2<8d61>A(g)-.1 E F1 .127(and cleared using)2.627 F F0 -2.627 E F2<8d61>A(g)-.1 E F1 2.627(;t)C(he)-2.627 E F2<8d61>174 589.2 Q -(g)-.1 E F1 5.013(sc)C 2.513(an be \231deb)-5.013 F 2.513 -(ug\232, \231aaonly\232, \231use)-.2 F 2.514 -(vc\232, \231primary\232, \231igntc\232, \231recurse\232, \231def-)-.25 -F 2.689 +-.6 F 0 Cg EP +%%Page: 75 71 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-75)195.86 E/F1 10/Times-Roman@0 SF +(not set \(see sendmail/README\).)174 96 Q(Resolv)102 112.2 Q +(erOptions=)-.15 E/F2 10/Times-Italic@0 SF(options)A F1 .128 +([I] Set resolv)174 124.2 R .127(er options.)-.15 F -1.11(Va)5.127 G +.127(lues can be set using)1.11 F F0(+)2.627 E F2<8d61>A(g)-.1 E F1 .127 +(and cleared using)2.627 F F02.627 E F2<8d61>A(g)-.1 E F1 2.627(;t)C +(he)-2.627 E F2<8d61>174 136.2 Q(g)-.1 E F1 5.013(sc)C 2.513 +(an be \231deb)-5.013 F 2.513(ug\232, \231aaonly\232, \231use)-.2 F +2.514(vc\232, \231primary\232, \231igntc\232, \231recurse\232, \231def-) +-.25 F 2.689 (names\232, \231stayopen\232, \231use_inet6\232, or \231dnsrch\232.)174 -601.2 R 2.688(The string \231HasW)7.688 F(ildcardMX\232)-.4 E .282 -(\(without a)174 613.2 R F0(+)2.782 E F1(or)2.782 E F02.782 E F1 +148.2 R 2.688(The string \231HasW)7.688 F(ildcardMX\232)-.4 E .282 +(\(without a)174 160.2 R F0(+)2.782 E F1(or)2.782 E F02.782 E F1 2.782(\)c)C .283(an be speci\214ed to turn of)-2.782 F 2.783(fm)-.25 G .283(atching ag)-2.783 F .283(ainst MX records when)-.05 F .89 -(doing name canoni\214cations.)174 625.2 R .89(The string \231W)5.89 F -(orkAroundBrok)-.8 E .89(enAAAA\232 \(without a)-.1 F F0(+)174 637.2 Q +(doing name canoni\214cations.)174 172.2 R .89(The string \231W)5.89 F +(orkAroundBrok)-.8 E .89(enAAAA\232 \(without a)-.1 F F0(+)174 184.2 Q F1(or)3.472 E F03.472 E F1 3.472(\)c)C .972(an be speci\214ed to w) -3.472 F .972(ork around some brok)-.1 F .973(en nameserv)-.1 F .973 -(ers which return)-.15 F(SER)174 649.2 Q(VF)-.8 E 1.001 +(ers which return)-.15 F(SER)174 196.2 Q(VF)-.8 E 1.001 (AIL \(a temporary f)-.74 F 1.001(ailure\) on T_AAAA \(IPv6\) lookups.) -.1 F 1.001(Notice: it might)6.001 F -(be necessary to apply the same \(or similar\) options to)174 661.2 Q F2 -(submit.cf)2.5 E F1(too.)2.5 E -1.04(RequiresDirfsync [no)102 677.4 R +(be necessary to apply the same \(or similar\) options to)174 208.2 Q F2 +(submit.cf)2.5 E F1(too.)2.5 E -1.04(RequiresDirfsync [no)102 224.4 R 2.782(short name] This option can be used to o)5.282 F -.15(ve)-.15 G -2.783(rride the compile time \215ag).15 F F0(REQ)174 689.4 Q +2.783(rride the compile time \215ag).15 F F0(REQ)174 236.4 Q (UIRES_DIR_FSYNC)-.1 E F1 .872(at runtime by setting it to)3.372 F/F3 9 /Times-Roman@0 SF -.09(fa)3.372 G(lse).09 E F1 5.871(.I)C 3.371(ft) -5.871 G .871(he compile time)-3.371 F .017 -(\215ag is not set, the option is ignored.)174 701.4 R .018 +(\215ag is not set, the option is ignored.)174 248.4 R .018 (The \215ag turns on support for \214le systems that)5.017 F .21 -(require to call)174 713.4 R F2(fsync\(\))2.71 E F1 .209 +(require to call)174 260.4 R F2(fsync\(\))2.71 E F1 .209 (for a directory if the meta-data in it has been changed.)2.71 F(This) -5.209 E .074(should be turned on at least for older v)174 725.4 R .075 -(ersions of ReiserFS; it is enabled by def)-.15 F(ault)-.1 E 0 Cg EP -%%Page: 74 70 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-74 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 1.451 -(for Linux.)174 96 R 1.451 +5.209 E .074(should be turned on at least for older v)174 272.4 R .075 +(ersions of ReiserFS; it is enabled by def)-.15 F(ault)-.1 E 1.451 +(for Linux.)174 284.4 R 1.451 (According to some information this \215ag is not needed an)6.451 F 1.45 -(ymore for)-.15 F -.1(ke)174 108 S(rnel 2.4.16 and ne).1 E(wer)-.25 E(.) --.55 E 10.61(RrtImpliesDsn [R])102 124.2 R 1.52 +(ymore for)-.15 F -.1(ke)174 296.4 S(rnel 2.4.16 and ne).1 E(wer)-.25 E +(.)-.55 E 10.61(RrtImpliesDsn [R])102 312.6 R 1.52 (If this option is set, a \231Return-Receipt-T)4.02 F 1.52 (o:\232 header causes the request of a)-.8 F 1.02 -(DSN, which is sent to the en)174 136.2 R -.15(ve)-.4 G 1.02 +(DSN, which is sent to the en)174 324.6 R -.15(ve)-.4 G 1.02 (lope sender as required by RFC 1891, not to the).15 F(address gi)174 -148.2 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(nt)-2.5 G(he header)-2.5 E(.) --.55 E(RunAsUser=)102 164.4 Q/F2 10/Times-Italic@0 SF(user)A F1 3.752 -([no short name] The)2.48 F F2(user)6.252 E F1 3.752 -(parameter may be a user name \(look)6.252 F 3.753(ed up in)-.1 F F2 -(/etc/passwd)174 176.4 Q F1 3.046(\)o)C 3.046(ran)-3.046 G .546 -(umeric user id; either form can ha)-3.046 F .846 -.15(ve \231)-.2 H -.545(:group\232 attached \(where).15 F .965 -(group can be numeric or symbolic\).)174 188.4 R .966 +336.6 Q -.15(ve)-.25 G 2.5(ni).15 G 2.5(nt)-2.5 G(he header)-2.5 E(.) +-.55 E(RunAsUser=)102 352.8 Q F2(user)A F1 3.752([no short name] The) +2.48 F F2(user)6.252 E F1 3.752(parameter may be a user name \(look) +6.252 F 3.753(ed up in)-.1 F F2(/etc/passwd)174 364.8 Q F1 3.046(\)o)C +3.046(ran)-3.046 G .546(umeric user id; either form can ha)-3.046 F .846 +-.15(ve \231)-.2 H .545(:group\232 attached \(where).15 F .965 +(group can be numeric or symbolic\).)174 376.8 R .966 (If set to a non-zero \(non-root\) v)5.965 F(alue,)-.25 E F2(send-)3.466 -E(mail)174 202.4 Q F1 .484 -(will change to this user id shortly after startup)2.984 F/F3 7 +E(mail)174 390.8 Q F1 .484 +(will change to this user id shortly after startup)2.984 F/F4 7 /Times-Roman@0 SF(21)-4 I F1 5.483(.T)4 K .483(his a)-5.483 F -.2(vo)-.2 -G .483(ids a certain class).2 F 1.844(of security problems.)174 214.4 R +G .483(ids a certain class).2 F 1.844(of security problems.)174 402.8 R (Ho)6.844 E(we)-.25 E -.15(ve)-.25 G 2.644 -.4(r, t).15 H 1.844 (his means that all \231.forw).4 F 1.844(ard\232 and \231:include:\232) --.1 F 1.428(\214les must be readable by the indicated)174 226.4 R F2 +-.1 F 1.428(\214les must be readable by the indicated)174 414.8 R F2 (user)3.928 E F1 1.428(and all \214les to be written must be)3.928 F -.042(writable by)174 238.4 R F2(user)2.542 E F1 .042 +.042(writable by)174 426.8 R F2(user)2.542 E F1 .042 (Also, all \214le and program deli)2.542 F -.15(ve)-.25 G .043 (ries will be mark).15 F .043(ed unsafe unless)-.1 F 2.102(the option) -174 250.4 R F0(DontBlameSendmail=NonRootSafeAddr)4.602 E F1 2.101 -(is set, in which case the)4.601 F(deli)174 262.4 Q -.15(ve)-.25 G .777 +174 438.8 R F0(DontBlameSendmail=NonRootSafeAddr)4.602 E F1 2.101 +(is set, in which case the)4.601 F(deli)174 450.8 Q -.15(ve)-.25 G .777 (ry will be done as).15 F F2(user)3.277 E F1 5.777(.I)C 3.278(ti)-5.777 G 3.278(sa)-3.278 G .778(lso incompatible with the)-3.278 F F0 -(SafeFileEn)3.278 E(vir)-.4 E(on-)-.18 E(ment)174 274.4 Q F1 2.621 +(SafeFileEn)3.278 E(vir)-.4 E(on-)-.18 E(ment)174 462.8 Q F1 2.621 (option. In)2.621 F .121(other w)2.621 F .121 (ords, it may not actually add much to security on an a)-.1 F -.15(ve) --.2 G -.2(r-).15 G .592(age system, and may in f)174 286.4 R .593 +-.2 G -.2(r-).15 G .592(age system, and may in f)174 474.8 R .593 (act detract from security \(because other \214le permissions)-.1 F 1.58 -(must be loosened\).)174 298.4 R(Ho)6.579 E(we)-.25 E -.15(ve)-.25 G +(must be loosened\).)174 486.8 R(Ho)6.579 E(we)-.25 E -.15(ve)-.25 G 2.379 -.4(r, i).15 H 4.079(ts).4 G 1.579(hould be useful on \214re) -4.079 F -.1(wa)-.25 G 1.579(lls and other places).1 F(where users don') -174 310.4 Q 2.5(th)-.18 G -2.25 -.2(av e)-2.5 H +174 498.8 Q 2.5(th)-.18 G -2.25 -.2(av e)-2.5 H (accounts and the aliases \214le is well constrained.)2.7 E(RecipientF) -102 326.6 Q(actor=)-.15 E F2(fact)A F1 .637([y] The indicated)174 338.6 -R F2(fact)3.137 E F1 .637(or is added to the priority \(thus)B F2 -(lowering)3.137 E F1 .638(the priority of the)3.137 F .231 -(job\) for each recipient, i.e., this v)174 350.6 R .231 +102 515 Q(actor=)-.15 E F2(fact)A F1 .637([y] The indicated)174 527 R F2 +(fact)3.137 E F1 .637(or is added to the priority \(thus)B F2(lowering) +3.137 E F1 .638(the priority of the)3.137 F .231 +(job\) for each recipient, i.e., this v)174 539 R .231 (alue penalizes jobs with lar)-.25 F .23(ge numbers of recipi-)-.18 F -2.5(ents. Def)174 362.6 R(aults to 30000.)-.1 E(RefuseLA=)102 378.8 Q F2 +2.5(ents. Def)174 551 R(aults to 30000.)-.1 E(RefuseLA=)102 567.2 Q F2 (LA)A F1 1.012([X] When the system load a)13.59 F -.15(ve)-.2 G 1.012 (rage e).15 F(xceeds)-.15 E F2(LA)3.512 E F1 3.512(,r)C 1.012 -(efuse incoming SMTP connec-)-3.512 F 2.659(tions. Def)174 390.8 R .158 +(efuse incoming SMTP connec-)-3.512 F 2.659(tions. Def)174 579.2 R .158 (aults to 12 multiplied by the number of processors online on the syste\ -m)-.1 F(\(if that can be determined\).)174 402.8 Q(RejectLogInterv)102 -419 Q(al=)-.25 E F2(timeout)A F1 1.627([no short name] Log interv)174 -431 R 1.627(al when refusing connections for this long \(def)-.25 F -(ault:)-.1 E(3h\).)174 443 Q(RetryF)102 459.2 Q(actor=)-.15 E F2(fact)A -F1 .772([Z] The)3.74 F F2(fact)3.272 E F1 .772 +m)-.1 F(\(if that can be determined\).)174 591.2 Q(RejectLogInterv)102 +607.4 Q(al=)-.25 E F2(timeout)A F1 1.627([no short name] Log interv)174 +619.4 R 1.627(al when refusing connections for this long \(def)-.25 F +(ault:)-.1 E(3h\).)174 631.4 Q(RetryF)102 647.6 Q(actor=)-.15 E F2(fact) +A F1 .772([Z] The)3.74 F F2(fact)3.272 E F1 .772 (or is added to the priority e)B -.15(ve)-.25 G .771 (ry time a job is processed.).15 F .771(Thus, each)5.771 F .994(time a \ job is processed, its priority will be decreased by the indicated v)174 -471.2 R 3.494(alue. In)-.25 F 1.108(most en)174 483.2 R 1.108 +659.6 R 3.494(alue. In)-.25 F 1.108(most en)174 671.6 R 1.108 (vironments this should be positi)-.4 F -.15(ve)-.25 G 3.608(,s).15 G -1.108(ince hosts that are do)-3.608 F 1.107(wn are all too)-.25 F -(often do)174 495.2 Q(wn for a long time.)-.25 E(Def)5 E -(aults to 90000.)-.1 E(SafeFileEn)102 511.4 Q(vironment=)-.4 E F2(dir)A -F1 .021([no short name] If this option is set,)174 523.4 R F2(sendmail) +1.108(ince hosts that are do)-3.608 F 1.107(wn are all too)-.25 F .32 LW +76 681.2 72 681.2 DL 80 681.2 76 681.2 DL 84 681.2 80 681.2 DL 88 681.2 +84 681.2 DL 92 681.2 88 681.2 DL 96 681.2 92 681.2 DL 100 681.2 96 681.2 +DL 104 681.2 100 681.2 DL 108 681.2 104 681.2 DL 112 681.2 108 681.2 DL +116 681.2 112 681.2 DL 120 681.2 116 681.2 DL 124 681.2 120 681.2 DL 128 +681.2 124 681.2 DL 132 681.2 128 681.2 DL 136 681.2 132 681.2 DL 140 +681.2 136 681.2 DL 144 681.2 140 681.2 DL 148 681.2 144 681.2 DL 152 +681.2 148 681.2 DL 156 681.2 152 681.2 DL 160 681.2 156 681.2 DL 164 +681.2 160 681.2 DL 168 681.2 164 681.2 DL 172 681.2 168 681.2 DL 176 +681.2 172 681.2 DL 180 681.2 176 681.2 DL 184 681.2 180 681.2 DL 188 +681.2 184 681.2 DL 192 681.2 188 681.2 DL 196 681.2 192 681.2 DL 200 +681.2 196 681.2 DL 204 681.2 200 681.2 DL 208 681.2 204 681.2 DL 212 +681.2 208 681.2 DL 216 681.2 212 681.2 DL/F5 5/Times-Roman@0 SF(21)93.6 +691.6 Q/F6 8/Times-Roman@0 SF(When running as a daemon, it changes to t\ +his user after accepting a connection b)3.2 I(ut before reading an)-.16 +E(y)-.12 E F4(SMTP)2 E F6(commands.)2 E 0 Cg EP +%%Page: 76 72 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-76 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(often do) +174 96 Q(wn for a long time.)-.25 E(Def)5 E(aults to 90000.)-.1 E +(SafeFileEn)102 112.2 Q(vironment=)-.4 E/F2 10/Times-Italic@0 SF(dir)A +F1 .021([no short name] If this option is set,)174 124.2 R F2(sendmail) 2.521 E F1 .021(will do a)2.521 F F2 -.15(ch)2.521 G -.45(ro).15 G(ot) -.45 E F1 .022(\(2\) call into the indi-)B(cated)174 535.4 Q F2(dir)2.833 +.45 E F1 .022(\(2\) call into the indi-)B(cated)174 136.2 Q F2(dir)2.833 E F1 .333(ectory before doing an)B 2.833<798c>-.15 G .333(le writes.) -2.833 F .333(If the \214le name speci\214ed by the user)5.333 F(be)174 -547.4 Q .587(gins with)-.15 F F2(dir)3.087 E F1 3.087(,t)C .587 +148.2 Q .587(gins with)-.15 F F2(dir)3.087 E F1 3.087(,t)C .587 (hat partial path name will be stripped of)-3.087 F 3.087(fb)-.25 G .588 -(efore writing, so \(for)-3.087 F -.15(ex)174 559.4 S 2.225 +(efore writing, so \(for)-3.087 F -.15(ex)174 160.2 S 2.225 (ample\) if the SafeFileEn).15 F 2.225(vironment v)-.4 F 2.224 (ariable is set to \231/safe\232 then aliases of)-.25 F 1.557(\231/safe\ /logs/\214le\232 and \231/logs/\214le\232 actually indicate the same \ -\214le.)174 571.4 R(Additionally)6.557 E 4.057(,i)-.65 G(f)-4.057 E -(this option is set,)174 583.4 Q F2(sendmail)2.5 E F1(refuses to deli) +\214le.)174 172.2 R(Additionally)6.557 E 4.057(,i)-.65 G(f)-4.057 E +(this option is set,)174 184.2 Q F2(sendmail)2.5 E F1(refuses to deli) 2.5 E -.15(ve)-.25 G 2.5(rt).15 G 2.5(os)-2.5 G(ymbolic links.)-2.5 E -(Sa)102 599.6 Q -.15(ve)-.2 G 10.41(FromLine [f]).15 F(Sa)4.493 E 2.293 +(Sa)102 200.4 Q -.15(ve)-.2 G 10.41(FromLine [f]).15 F(Sa)4.493 E 2.293 -.15(ve U)-.2 H 1.993 (NIX-style \231From\232 lines at the front of headers.).15 F 1.992 (Normally the)6.992 F 4.492(ya)-.15 G(re)-4.492 E -(assumed redundant and discarded.)174 611.6 Q .62(SendMimeErrors [j])102 -627.8 R .373(If set, send error messages in MIME format \(see RFC 2045 \ -and RFC 1344 for)2.873 F 2.915(details\). If)174 639.8 R(disabled,)2.915 +(assumed redundant and discarded.)174 212.4 Q .62(SendMimeErrors [j])102 +228.6 R .373(If set, send error messages in MIME format \(see RFC 2045 \ +and RFC 1344 for)2.873 F 2.915(details\). If)174 240.6 R(disabled,)2.915 E F2(sendmail)2.915 E F1 .415(will not return the DSN k)2.915 F -.15(ey) -.1 G -.1(wo).15 G .414(rd in response to an).1 F 1.731 -(EHLO and will not do Deli)174 651.8 R -.15(ve)-.25 G 1.731 +(EHLO and will not do Deli)174 252.6 R -.15(ve)-.25 G 1.731 (ry Status Noti\214cation processing as described in).15 F(RFC 1891.)174 -663.8 Q .32 LW 76 678.8 72 678.8 DL 80 678.8 76 678.8 DL 84 678.8 80 -678.8 DL 88 678.8 84 678.8 DL 92 678.8 88 678.8 DL 96 678.8 92 678.8 DL -100 678.8 96 678.8 DL 104 678.8 100 678.8 DL 108 678.8 104 678.8 DL 112 -678.8 108 678.8 DL 116 678.8 112 678.8 DL 120 678.8 116 678.8 DL 124 -678.8 120 678.8 DL 128 678.8 124 678.8 DL 132 678.8 128 678.8 DL 136 -678.8 132 678.8 DL 140 678.8 136 678.8 DL 144 678.8 140 678.8 DL 148 -678.8 144 678.8 DL 152 678.8 148 678.8 DL 156 678.8 152 678.8 DL 160 -678.8 156 678.8 DL 164 678.8 160 678.8 DL 168 678.8 164 678.8 DL 172 -678.8 168 678.8 DL 176 678.8 172 678.8 DL 180 678.8 176 678.8 DL 184 -678.8 180 678.8 DL 188 678.8 184 678.8 DL 192 678.8 188 678.8 DL 196 -678.8 192 678.8 DL 200 678.8 196 678.8 DL 204 678.8 200 678.8 DL 208 -678.8 204 678.8 DL 212 678.8 208 678.8 DL 216 678.8 212 678.8 DL/F4 5 -/Times-Roman@0 SF(21)93.6 689.2 Q/F5 8/Times-Roman@0 SF(When running as\ - a daemon, it changes to this user after accepting a connection b)3.2 I -(ut before reading an)-.16 E(y)-.12 E F3(SMTP)2 E F5(commands.)2 E 0 Cg -EP -%%Page: 75 71 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-75)195.86 E/F1 10/Times-Roman@0 SF(Serv)102 96 Q 10.77 -(erCertFile [no)-.15 F .581 +264.6 Q(Serv)102 280.8 Q 10.77(erCertFile [no)-.15 F .581 (short name] File containing the certi\214cate of the serv)3.081 F(er) -.15 E 3.081(,i)-.4 G .58(.e., this certi\214cate is)-3.081 F -(used when sendmail acts as serv)174 108 Q(er \(used for ST)-.15 E(AR) --.93 E(TTLS\).)-.6 E(Serv)102 124.2 Q(erK)-.15 E -.15(ey)-.25 G 11.73 +(used when sendmail acts as serv)174 292.8 Q(er \(used for ST)-.15 E(AR) +-.93 E(TTLS\).)-.6 E(Serv)102 309 Q(erK)-.15 E -.15(ey)-.25 G 11.73 (File [no).15 F .542(short name] File containing the pri)3.042 F -.25 (va)-.25 G .543(te k).25 F .843 -.15(ey b)-.1 H .543 (elonging to the serv).15 F .543(er certi\214cate)-.15 F(\(used for ST) -174 136.2 Q(AR)-.93 E(TTLS\).)-.6 E(ServiceSwitchFile=)102 152.4 Q/F2 10 -/Times-Italic@0 SF(\214lename)A F1 1.533([no short name] If your host o\ -perating system has a service switch abstraction)174 164.4 R .003(\(e.g\ -., /etc/nsswitch.conf on Solaris or /etc/svc.conf on Ultrix and DEC OSF\ -/1\) that)174 176.4 R .814 -(service will be consulted and this option is ignored.)174 188.4 R .814 -(Otherwise, this is the name)5.814 F 1.082(of a \214le that pro)174 -200.4 R 1.082 +174 321 Q(AR)-.93 E(TTLS\).)-.6 E(ServiceSwitchFile=)102 337.2 Q F2 +(\214lename)A F1 1.533([no short name] If your host operating system ha\ +s a service switch abstraction)174 349.2 R .003(\(e.g., /etc/nsswitch.c\ +onf on Solaris or /etc/svc.conf on Ultrix and DEC OSF/1\) that)174 361.2 +R .814(service will be consulted and this option is ignored.)174 373.2 R +.814(Otherwise, this is the name)5.814 F 1.082(of a \214le that pro)174 +385.2 R 1.082 (vides the list of methods used to implement particular services.)-.15 F 1.069(The syntax is a series of lines, each of which is a sequence of w) -174 212.4 R 3.569(ords. The)-.1 F(\214rst)3.569 E -.1(wo)174 224.4 S +174 397.2 R 3.569(ords. The)-.1 F(\214rst)3.569 E -.1(wo)174 409.2 S 1.363(rd is the service name, and follo).1 F 1.363(wing w)-.25 F 1.364 -(ords are service types.)-.1 F 1.364(The services)6.364 F(that)174 236.4 +(ords are service types.)-.1 F 1.364(The services)6.364 F(that)174 421.2 Q F2(sendmail)4.11 E F1 1.61 (consults directly are \231aliases\232 and \231hosts.)4.11 F 6.61<9a53> -.7 G 1.61(ervice types can be)-6.61 F 1.754(\231dns\232, \231nis\232, \ -\231nisplus\232, or \231\214les\232 \(with the ca)174 248.4 R -.15(ve) +\231nisplus\232, or \231\214les\232 \(with the ca)174 433.2 R -.15(ve) -.2 G 1.755(at that the appropriate support).15 F .791 -(must be compiled in before the service can be referenced\).)174 260.4 R +(must be compiled in before the service can be referenced\).)174 445.2 R .79(If ServiceSwitchFile)5.791 F .925(is not speci\214ed, it def)174 -272.4 R .925(aults to /etc/mail/service.switch.)-.1 F .925 -(If that \214le does not e)5.925 F(xist,)-.15 E(the def)174 284.4 Q -(ault switch is:)-.1 E 54.71(aliases \214les)214 300.6 R 60.81 -(hosts dns)214 312.6 R(nis \214les)2.5 E(The def)174 328.8 Q -(ault \214le is \231/etc/mail/service.switch\232.)-.1 E(Se)102 345 Q +457.2 R .925(aults to /etc/mail/service.switch.)-.1 F .925 +(If that \214le does not e)5.925 F(xist,)-.15 E(the def)174 469.2 Q +(ault switch is:)-.1 E 54.71(aliases \214les)214 485.4 R 60.81 +(hosts dns)214 497.4 R(nis \214les)2.5 E(The def)174 513.6 Q +(ault \214le is \231/etc/mail/service.switch\232.)-.1 E(Se)102 529.8 Q -.15(ve)-.25 G 12.12(nBitInput [7]).15 F .322(Strip input to se)2.822 F -.15(ve)-.25 G 2.822(nb).15 G .321 (its for compatibility with old systems.)-2.822 F .321(This shouldn') -5.321 F 2.821(tb)-.18 G(e)-2.821 E(necessary)174 357 Q(.)-.65 E -(SharedMemoryK)102 373.2 Q -.15(ey)-.25 G .744([no short name] K)174 -385.2 R 1.044 -.15(ey t)-.25 H 3.244(ou).15 G .745 -(se for shared memory se)-3.244 F .745 -(gment; if not set \(or 0\), shared)-.15 F 1.16 -(memory will not be used.)174 397.2 R 1.159(If set to -1)6.16 F F2 +5.321 F 2.821(tb)-.18 G(e)-2.821 E(necessary)174 541.8 Q(.)-.65 E +(SharedMemoryK)102 558 Q -.15(ey)-.25 G .744([no short name] K)174 570 R +1.044 -.15(ey t)-.25 H 3.244(ou).15 G .745(se for shared memory se) +-3.244 F .745(gment; if not set \(or 0\), shared)-.15 F 1.16 +(memory will not be used.)174 582 R 1.159(If set to -1)6.16 F F2 (sendmail)3.659 E F1 1.159(can select a k)3.659 F 1.459 -.15(ey i)-.1 H -1.159(tself pro).15 F(vided)-.15 E .658(that also)174 409.2 R F0(Shar) +1.159(tself pro).15 F(vided)-.15 E .658(that also)174 594 R F0(Shar) 3.158 E(edMemoryK)-.18 E(eyFile)-.25 E F1 .658(is set.)3.158 F .658 (Requires support for shared memory to)5.658 F 1.413(be compiled into) -174 421.2 R F2(sendmail)3.913 E F1 6.413(.I)C 3.912(ft)-6.413 G 1.412 +174 606 R F2(sendmail)3.913 E F1 6.413(.I)C 3.912(ft)-6.413 G 1.412 (his option is set,)-3.912 F F2(sendmail)3.912 E F1 1.412 -(can share some data)3.912 F .307(between dif)174 433.2 R .307 +(can share some data)3.912 F .307(between dif)174 618 R .307 (ferent instances.)-.25 F -.15(Fo)5.307 G 2.807(re).15 G .308 (xample, the number of entries in a queue direc-)-2.957 F .033 -(tory or the a)174 445.2 R -.25(va)-.2 G .032 +(tory or the a)174 630 R -.25(va)-.2 G .032 (ilable space in a \214le system.).25 F .032(This allo)5.032 F .032 -(ws for more ef)-.25 F .032(\214cient program)-.25 F -.15(exe)174 457.2 -S .09(cution, since only one process needs to update the data instead o\ -f each indi).15 F(vid-)-.25 E(ual process g)174 469.2 Q +(ws for more ef)-.25 F .032(\214cient program)-.25 F -.15(exe)174 642 S +.09(cution, since only one process needs to update the data instead of \ +each indi).15 F(vid-)-.25 E(ual process g)174 654 Q (athering the data each time it is required.)-.05 E(SharedMemoryK)102 -485.4 Q -.15(ey)-.25 G(File).15 E .087([no short name] If)174 497.4 R F0 +670.2 Q -.15(ey)-.25 G(File).15 E .087([no short name] If)174 682.2 R F0 (Shar)2.587 E(edMemoryK)-.18 E(ey)-.25 E F1 .086 (is set to -1 then the automatically selected)2.587 F(shared memory k) -174 509.4 Q .3 -.15(ey w)-.1 H(ill be stored in the speci\214ed \214le.) -.15 E(SingleLineFromHeader)102 525.6 Q .958 -([no short name] If set, From: lines that ha)174 537.6 R 1.259 -.15 -(ve e)-.2 H .959(mbedded ne).15 F .959(wlines are unwrapped)-.25 F .243 -(onto one line.)174 549.6 R .243 -(This is to get around a botch in Lotus Notes that apparently cannot) -5.243 F(understand le)174 561.6 Q -.05(ga)-.15 G -(lly wrapped RFC 822 headers.).05 E(SingleThreadDeli)102 577.8 Q -.15 -(ve)-.25 G(ry).15 E .333 -([no short name] If set, a client machine will ne)174 589.8 R -.15(ve) +174 694.2 Q .3 -.15(ey w)-.1 H(ill be stored in the speci\214ed \214le.) +.15 E(SingleLineFromHeader)102 710.4 Q .958 +([no short name] If set, From: lines that ha)174 722.4 R 1.259 -.15 +(ve e)-.2 H .959(mbedded ne).15 F .959(wlines are unwrapped)-.25 F 0 Cg +EP +%%Page: 77 73 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-77)195.86 E/F1 10/Times-Roman@0 SF .243(onto one line.)174 96 R +.243 +(This is to get around a botch in Lotus Notes that apparently cannot) +5.243 F(understand le)174 108 Q -.05(ga)-.15 G +(lly wrapped RFC 822 headers.).05 E(SingleThreadDeli)102 124.2 Q -.15 +(ve)-.25 G(ry).15 E .333 +([no short name] If set, a client machine will ne)174 136.2 R -.15(ve) -.25 G 2.833(rt).15 G .334(ry to open tw)-2.833 F 2.834(oS)-.1 G .334 -(MTP connec-)-2.834 F 1.712(tions to a single serv)174 601.8 R 1.712 +(MTP connec-)-2.834 F 1.712(tions to a single serv)174 148.2 R 1.712 (er machine at the same time, e)-.15 F -.15(ve)-.25 G 4.211(ni).15 G 4.211(nd)-4.211 G(if)-4.211 E 1.711(ferent processes.)-.25 F .952 -(That is, if another)174 613.8 R F2(sendmail)3.452 E F1 .952 -(is already talking to some host a ne)3.452 F(w)-.25 E F2(sendmail)3.453 -E F1(will)3.453 E 2.388(not open another connection.)174 625.8 R 2.387 -(This property is of mix)7.387 F 2.387(ed v)-.15 F 2.387 +(That is, if another)174 160.2 R/F2 10/Times-Italic@0 SF(sendmail)3.452 +E F1 .952(is already talking to some host a ne)3.452 F(w)-.25 E F2 +(sendmail)3.453 E F1(will)3.453 E 2.388(not open another connection.)174 +172.2 R 2.387(This property is of mix)7.387 F 2.387(ed v)-.15 F 2.387 (alue; although this)-.25 F .386(reduces the load on the other machine,\ - it can cause mail to be delayed \(for e)174 637.8 R(xam-)-.15 E .719 -(ple, if one)174 649.8 R F2(sendmail)3.219 E F1 .719(is deli)3.219 F + it can cause mail to be delayed \(for e)174 184.2 R(xam-)-.15 E .719 +(ple, if one)174 196.2 R F2(sendmail)3.219 E F1 .719(is deli)3.219 F -.15(ve)-.25 G .718(ring a huge message, other).15 F F2(sendmail)3.218 E F1 3.218(sw)C(on')-3.318 E 3.218(tb)-.18 G 3.218(ea)-3.218 G(ble)-3.218 -E 1.542(to send e)174 661.8 R -.15(ve)-.25 G 4.042(ns).15 G 1.542 +E 1.542(to send e)174 208.2 R -.15(ve)-.25 G 4.042(ns).15 G 1.542 (mall messages\).)-4.042 F 1.543 (Also, it requires another \214le descriptor \(for the)6.542 F .997 -(lock \214le\) per connection, so you may ha)174 673.8 R 1.296 -.15 +(lock \214le\) per connection, so you may ha)174 220.2 R 1.296 -.15 (ve t)-.2 H 3.496(or).15 G .996(educe the)-3.496 F F0 -(ConnectionCacheSize)3.496 E F1 .234(option to a)174 685.8 R -.2(vo)-.2 +(ConnectionCacheSize)3.496 E F1 .234(option to a)174 232.2 R -.2(vo)-.2 G .234(id running out of per).2 F .235(-process \214le descriptors.)-.2 -F .235(Requires the)5.235 F F0(HostSta-)2.735 E(tusDir)174 697.8 Q -(ectory)-.18 E F1(option.)2.5 E 0 Cg EP -%%Page: 76 72 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-76 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -(SmtpGreetingMessage=)102 96 Q/F2 10/Times-Italic@0 SF(messa)A -.1(ge) --.1 G F1 .345([$e macro] The message printed when the SMTP serv)174 108 -R .344(er starts up.)-.15 F(Def)5.344 E .344(aults to \231$j)-.1 F -(Sendmail $v ready at $b\232.)174 120 Q 22.28(SoftBounce If)102 136.2 R -.092(set, issue temporary errors \(4xy\) instead of permanent errors \(\ -5xy\).)2.592 F .093(This can be)5.093 F .127 -(useful during testing of a ne)174 148.2 R 2.627(wc)-.25 G .127 +F .235(Requires the)5.235 F F0(HostSta-)2.735 E(tusDir)174 244.2 Q +(ectory)-.18 E F1(option.)2.5 E(SmtpGreetingMessage=)102 260.4 Q F2 +(messa)A -.1(ge)-.1 G F1 .345 +([$e macro] The message printed when the SMTP serv)174 272.4 R .344 +(er starts up.)-.15 F(Def)5.344 E .344(aults to \231$j)-.1 F +(Sendmail $v ready at $b\232.)174 284.4 Q 22.28(SoftBounce If)102 300.6 +R .092(set, issue temporary errors \(4xy\) instead of permanent errors \ +\(5xy\).)2.592 F .093(This can be)5.093 F .127 +(useful during testing of a ne)174 312.6 R 2.627(wc)-.25 G .127 (on\214guration to a)-2.627 F -.2(vo)-.2 G .126 -(id erroneous bouncing of mails.).2 F(StatusFile=)102 164.4 Q F2(\214le) +(id erroneous bouncing of mails.).2 F(StatusFile=)102 328.8 Q F2(\214le) A F1 .523([S] Log summary statistics in the named)14.13 F F2(\214le) 3.024 E F1 5.524(.I)C 3.024(fn)-5.524 G 3.024<6f8c>-3.024 G .524 -(le name is speci\214ed, "statis-)-3.024 F .548(tics" is used.)174 176.4 +(le name is speci\214ed, "statis-)-3.024 F .548(tics" is used.)174 340.8 R .547(If not set, no summary statistics are sa)5.548 F -.15(ve)-.2 G 3.047(d. This).15 F .547(\214le does not gro)3.047 F(w)-.25 E(in size.) -174 188.4 Q(It can be printed using the)5 E F2(mailstats)2.5 E F1 -(\(8\) program.)A 28.4(SuperSafe [s])102 204.6 R .364 +174 352.8 Q(It can be printed using the)5 E F2(mailstats)2.5 E F1 +(\(8\) program.)A 28.4(SuperSafe [s])102 369 R .364 (This option can be set to T)2.864 F .364(rue, F)-.35 F .364 (alse, Interacti)-.15 F -.15(ve)-.25 G 2.864(,o).15 G 2.864(rP)-2.864 G (ostMilter)-2.864 E 5.364(.I)-.55 G 2.864(fs)-5.364 G .364(et to T) --2.864 F(rue,)-.35 E F2(sendmail)174 216.6 Q F1 .117(will be super)2.617 -F .116(-safe when running things, i.e., al)-.2 F -.1(wa)-.1 G .116 -(ys instantiate the queue).1 F .117(\214le, e)174 228.6 R -.15(ve)-.25 G +-2.864 F(rue,)-.35 E F2(sendmail)174 381 Q F1 .117(will be super)2.617 F +.116(-safe when running things, i.e., al)-.2 F -.1(wa)-.1 G .116 +(ys instantiate the queue).1 F .117(\214le, e)174 393 R -.15(ve)-.25 G 2.617(ni).15 G 2.617(fy)-2.617 G .117 (ou are going to attempt immediate deli)-2.617 F -.15(ve)-.25 G(ry).15 E (.)-.65 E F2(Sendmail)5.118 E F1(al)2.618 E -.1(wa)-.1 G .118 (ys instan-).1 F .088(tiates the queue \214le before returning control \ -to the client under an)174 240.6 R 2.587(yc)-.15 G(ircumstances.)-2.587 -E 1.299(This should really)174 252.6 R F2(always)3.799 E F1 1.299 +to the client under an)174 405 R 2.587(yc)-.15 G(ircumstances.)-2.587 E +1.299(This should really)174 417 R F2(always)3.799 E F1 1.299 (be set to T)3.799 F 3.799(rue. The)-.35 F(Interacti)3.799 E 1.599 -.15 (ve v)-.25 H 1.3(alue has been intro-)-.1 F .222 -(duced in 8.12 and can be used together with)174 264.6 R F0(Deli)2.721 E +(duced in 8.12 and can be used together with)174 429 R F0(Deli)2.721 E -.1(ve)-.1 G(ryMode=i).1 E F1 5.221(.I)C 2.721(ts)-5.221 G .221 -(kips some syn-)-2.721 F 1.532(chronization calls which are ef)174 276.6 -R(fecti)-.25 E -.15(ve)-.25 G 1.533(ly doubled in the code e).15 F -.15 -(xe)-.15 G 1.533(cution path for).15 F .336(this mode.)174 288.6 R .336 +(kips some syn-)-2.721 F 1.532(chronization calls which are ef)174 441 R +(fecti)-.25 E -.15(ve)-.25 G 1.533(ly doubled in the code e).15 F -.15 +(xe)-.15 G 1.533(cution path for).15 F .336(this mode.)174 453 R .336 (If set to PostMilter)5.336 F(,)-.4 E F2(sendmail)2.836 E F1 .336 -(defers synchronizing the queue \214le until)2.836 F(an)174 300.6 Q -3.787(ym)-.15 G 1.287(ilters ha)-3.787 F 1.587 -.15(ve s)-.2 H 1.287 +(defers synchronizing the queue \214le until)2.836 F(an)174 465 Q 3.787 +(ym)-.15 G 1.287(ilters ha)-3.787 F 1.587 -.15(ve s)-.2 H 1.287 (ignaled acceptance of the message.).15 F 1.288 -(PostMilter is useful only)6.287 F(when)174 312.6 Q F2(sendmail)3.822 E -F1 1.322(is running as an SMTP serv)3.822 F 1.321 -(er; in all other situations it acts the)-.15 F(same as T)174 324.6 Q -(rue.)-.35 E 6.16(TLSSrvOptions [no)102 340.8 R .238 +(PostMilter is useful only)6.287 F(when)174 477 Q F2(sendmail)3.822 E F1 +1.322(is running as an SMTP serv)3.822 F 1.321 +(er; in all other situations it acts the)-.15 F(same as T)174 489 Q +(rue.)-.35 E 6.16(TLSSrvOptions [no)102 505.2 R .238 (short name] List of options for SMTP ST)2.737 F(AR)-.93 E .238 (TTLS for the serv)-.6 F .238(er consisting of)-.15 F .18 -(single characters with interv)174 352.8 R .18 +(single characters with interv)174 517.2 R .18 (ening white space or commas.)-.15 F .18(The \215ag `)5.18 F(`V')-.74 E -2.68('d)-.74 G(isables)-2.68 E .51(client v)174 364.8 R .511(eri\214cat\ +2.68('d)-.74 G(isables)-2.68 E .51(client v)174 529.2 R .511(eri\214cat\ ion, and hence it is not possible to use a client certi\214cate for rel\ -ay-)-.15 F 2.5(ing. Currently)174 376.8 R(there are no other \215ags a) -2.5 E -.25(va)-.2 G(ilable.).25 E -.7(Te)102 393 S(mpFileMode=).7 E F2 +ay-)-.15 F 2.5(ing. Currently)174 541.2 R(there are no other \215ags a) +2.5 E -.25(va)-.2 G(ilable.).25 E -.7(Te)102 557.4 S(mpFileMode=).7 E F2 (mode)A F1 .062 -([F] The \214le mode for transcript \214les, \214les to which)174 405 R -F2(sendmail)2.561 E F1(deli)2.561 E -.15(ve)-.25 G .061(rs directly).15 -F 2.561<2c8c>-.65 G(les)-2.561 E .61(in the)174 417 R F0(HostStatusDir) -3.11 E(ectory)-.18 E F1 3.11(,a)C(nd)-3.11 E F0(StatusFile)3.11 E F1 -5.61(.I)C 3.11(ti)-5.61 G 3.11(si)-3.11 G .61 -(nterpreted in octal by def)-3.11 F(ault.)-.1 E(Def)174 429 Q -(aults to 0600.)-.1 E -.35(Ti)102 445.2 S(meout.).35 E F2(type)A F1(=)A +([F] The \214le mode for transcript \214les, \214les to which)174 569.4 +R F2(sendmail)2.561 E F1(deli)2.561 E -.15(ve)-.25 G .061(rs directly) +.15 F 2.561<2c8c>-.65 G(les)-2.561 E .61(in the)174 581.4 R F0 +(HostStatusDir)3.11 E(ectory)-.18 E F1 3.11(,a)C(nd)-3.11 E F0 +(StatusFile)3.11 E F1 5.61(.I)C 3.11(ti)-5.61 G 3.11(si)-3.11 G .61 +(nterpreted in octal by def)-3.11 F(ault.)-.1 E(Def)174 593.4 Q +(aults to 0600.)-.1 E -.35(Ti)102 609.6 S(meout.).35 E F2(type)A F1(=)A F2(timeout)1.666 E F1 .417 -([r; subsumes old T option as well] Set timeout v)174 457.2 R 2.917 +([r; subsumes old T option as well] Set timeout v)174 621.6 R 2.917 (alues. F)-.25 F .417(or more information, see)-.15 F(section 4.1.)174 -469.2 Q -.35(Ti)102 485.4 S(meZoneSpec=).35 E F2(tzinfo)A F1 .218 -([t] Set the local time zone info to)174 497.4 R F2(tzinfo)2.718 E F1 +633.6 Q -.35(Ti)102 649.8 S(meZoneSpec=).35 E F2(tzinfo)A F1 .218 +([t] Set the local time zone info to)174 661.8 R F2(tzinfo)2.718 E F1 2.718<8a66>2.718 G .218(or e)-2.718 F .218(xample, \231PST8PDT\232.)-.15 F(Actually)5.218 E 2.718(,i)-.65 G(f)-2.718 E 1.346 -(this is not set, the TZ en)174 509.4 R 1.346(vironment v)-.4 F 1.346 +(this is not set, the TZ en)174 673.8 R 1.346(vironment v)-.4 F 1.346 (ariable is cleared \(so the system def)-.25 F 1.345(ault is)-.1 F .208 -(used\); if set b)174 521.4 R .208(ut null, the user')-.2 F 2.708(sT) +(used\); if set b)174 685.8 R .208(ut null, the user')-.2 F 2.708(sT) -.55 G 2.708(Zv)-2.708 G .208 (ariable is used, and if set and non-null the TZ)-2.958 F -.25(va)174 -533.4 S(riable is set to this v).25 E(alue.)-.25 E -.35(Tr)102 549.6 S -(ustedUser=).35 E F2(user)A F1 3.753([no short name] The).06 F F2(user) -6.253 E F1 3.752(parameter may be a user name \(look)6.252 F 3.752 -(ed up in)-.1 F F2(/etc/passwd)174 561.6 Q F1 2.742(\)o)C 2.742(ran) --2.742 G .242(umeric user id.)-2.742 F -.35(Tr)5.242 G .242 -(usted user for \214le o).35 F .243(wnership and starting the)-.25 F -3.78(daemon. If)174 573.6 R 1.279 -(set, generated alias databases and the control sock)3.779 F 1.279 -(et \(if con\214gured\))-.1 F(will automatically be o)174 585.6 Q -(wned by this user)-.25 E(.)-.55 E -.35(Tr)102 601.8 S 5.96 +697.8 S(riable is set to this v).25 E(alue.)-.25 E 0 Cg EP +%%Page: 78 74 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-78 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -.35(Tr) +102 96 S(ustedUser=).35 E/F2 10/Times-Italic@0 SF(user)A F1 3.753 +([no short name] The).06 F F2(user)6.253 E F1 3.752 +(parameter may be a user name \(look)6.252 F 3.752(ed up in)-.1 F F2 +(/etc/passwd)174 108 Q F1 2.742(\)o)C 2.742(ran)-2.742 G .242 +(umeric user id.)-2.742 F -.35(Tr)5.242 G .242(usted user for \214le o) +.35 F .243(wnership and starting the)-.25 F 3.78(daemon. If)174 120 R +1.279(set, generated alias databases and the control sock)3.779 F 1.279 +(et \(if con\214gured\))-.1 F(will automatically be o)174 132 Q +(wned by this user)-.25 E(.)-.55 E -.35(Tr)102 148.2 S 5.96 (yNullMXList [w]).35 F .114 (If this system is the \231best\232 \(that is, lo)2.613 F .114 (west preference\) MX for a gi)-.25 F -.15(ve)-.25 G 2.614(nh).15 G .114 (ost, its)-2.614 F 1.168(con\214guration rules should normally detect t\ -his situation and treat that condition)174 613.8 R .257 -(specially by forw)174 625.8 R .258 +his situation and treat that condition)174 160.2 R .257 +(specially by forw)174 172.2 R .258 (arding the mail to a UUCP feed, treating it as local, or whate)-.1 F --.15(ve)-.25 G -.55(r.).15 G(Ho)174 637.8 Q(we)-.25 E -.15(ve)-.25 G +-.15(ve)-.25 G -.55(r.).15 G(Ho)174 184.2 Q(we)-.25 E -.15(ve)-.25 G 1.686 -.4(r, i).15 H 3.386(ns).4 G .886 (ome cases \(such as Internet \214re)-3.386 F -.1(wa)-.25 G .886 (lls\) you may w).1 F .885(ant to try to con-)-.1 F .07 (nect directly to that host as though it had no MX records at all.)174 -649.8 R .07(Setting this option)5.07 F(causes)174 661.8 Q F2(sendmail) +196.2 R .07(Setting this option)5.07 F(causes)174 208.2 Q F2(sendmail) 3.014 E F1 .514(to try this.)3.014 F .514(The do)5.514 F .514 -(wnside is that errors in your con\214guration are)-.25 F(lik)174 673.8 +(wnside is that errors in your con\214guration are)-.25 F(lik)174 220.2 Q 2.116(ely to be diagnosed as \231host unkno)-.1 F 2.116 (wn\232 or \231message timed out\232 instead of)-.25 F -(something more meaningful.)174 685.8 Q(This option is disrecommended.)5 -E(UnixFromLine=)102 702 Q F2(fr)A(omline)-.45 E F1 .236 -([$l macro] De\214nes the format used when)174 714 R F2(sendmail)2.736 E -F1 .236(must add a UNIX-style From_)2.736 F 0 Cg EP -%%Page: 77 73 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-77)195.86 E/F1 10/Times-Roman@0 SF 1.324 -(line \(that is, a line be)174 96 R 1.325 +(something more meaningful.)174 232.2 Q(This option is disrecommended.)5 +E(UnixFromLine=)102 248.4 Q F2(fr)A(omline)-.45 E F1 .236 +([$l macro] De\214nes the format used when)174 260.4 R F2(sendmail)2.736 +E F1 .236(must add a UNIX-style From_)2.736 F 1.324 +(line \(that is, a line be)174 272.4 R 1.325 (ginning \231Fromuser\232\).)-.15 F(Def)6.325 E 1.325 -(aults to \231From $g)-.1 F($d\232.)6.325 E(Don')174 108 Q 2.646(tc)-.18 -G .146(hange this unless your system uses a dif)-2.646 F .146 -(ferent UNIX mailbox format \(v)-.25 F(ery)-.15 E(unlik)174 120 Q -(ely\).)-.1 E(UnsafeGroupWrites)102 136.2 Q .085 -([no short name] If set \(def)174 148.2 R .085 +(aults to \231From $g)-.1 F($d\232.)6.325 E(Don')174 284.4 Q 2.646(tc) +-.18 G .146(hange this unless your system uses a dif)-2.646 F .146 +(ferent UNIX mailbox format \(v)-.25 F(ery)-.15 E(unlik)174 296.4 Q +(ely\).)-.1 E(UnsafeGroupWrites)102 312.6 Q .085 +([no short name] If set \(def)174 324.6 R .085 (ault\), :include: and .forw)-.1 F .086 (ard \214les that are group writable)-.1 F .655 -(are considered \231unsafe\232, that is, the)174 160.2 R 3.155(yc)-.15 G +(are considered \231unsafe\232, that is, the)174 336.6 R 3.155(yc)-.15 G .654(annot reference programs or write directly)-3.155 F .536 -(to \214les.)174 172.2 R -.8(Wo)5.536 G .536 +(to \214les.)174 348.6 R -.8(Wo)5.536 G .536 (rld writable :include: and .forw).8 F .537(ard \214les are al)-.1 F -.1 (wa)-.1 G .537(ys unsafe.).1 F .537(Note: use)5.537 F F0 -(DontBlameSendmail)174 184.2 Q F1(instead; this option is deprecated.) -2.5 E(UseErrorsT)102 200.4 Q 21.15(o[)-.8 G .826 +(DontBlameSendmail)174 360.6 Q F1(instead; this option is deprecated.) +2.5 E(UseErrorsT)102 376.8 Q 21.15(o[)-.8 G .826 (l] If there is an \231Errors-T)-21.15 F .826(o:\232 header)-.8 F 3.326 (,s)-.4 G .826(end error messages to the addresses listed)-3.326 F 3.134 -(there. The)174 212.4 R 3.134(yn)-.15 G .634(ormally go to the en)-3.134 +(there. The)174 388.8 R 3.134(yn)-.15 G .634(ormally go to the en)-3.134 F -.15(ve)-.4 G .635(lope sender).15 F 5.635(.U)-.55 G .635 -(se of this option causes)-5.635 F/F2 10/Times-Italic@0 SF(send-)3.135 E -(mail)174 224.4 Q F1(to violate RFC 1123.)2.5 E +(se of this option causes)-5.635 F F2(send-)3.135 E(mail)174 400.8 Q F1 +(to violate RFC 1123.)2.5 E (This option is disrecommended and deprecated.)5 E(UserDatabaseSpec=)102 -240.6 Q F2(udbspec)A F1([U] The user database speci\214cation.)174 252.6 -Q -1.11(Ve)102 268.8 S 37.29(rbose [v])1.11 F .561(Run in v)3.061 F .561 +417 Q F2(udbspec)A F1([U] The user database speci\214cation.)174 429 Q +-1.11(Ve)102 445.2 S 37.29(rbose [v])1.11 F .561(Run in v)3.061 F .561 (erbose mode.)-.15 F .561(If this is set,)5.561 F F2(sendmail)3.061 E F1 .56(adjusts options)3.061 F F0(HoldExpensi)3.06 E -.1(ve)-.1 G F1(\(old) -174 280.8 Q F0(c)2.635 E F1 2.635(\)a)C(nd)-2.635 E F0(Deli)2.635 E -.1 +174 457.2 Q F0(c)2.635 E F1 2.635(\)a)C(nd)-2.635 E F0(Deli)2.635 E -.1 (ve)-.1 G(ryMode).1 E F1(\(old)2.635 E F0(d)2.635 E F1 2.635(\)s)C 2.635 (ot)-2.635 G .135(hat all mail is deli)-2.635 F -.15(ve)-.25 G .136 (red completely in a sin-).15 F 1.244 -(gle job so that you can see the entire deli)174 292.8 R -.15(ve)-.25 G +(gle job so that you can see the entire deli)174 469.2 R -.15(ve)-.25 G 1.244(ry process.).15 F(Option)6.244 E F0 -1(Ve)3.743 G(rbose)1 E F1 -(should)3.743 E F2(ne)174 304.8 Q(ver)-.15 E F1 1.269(be set in the con\ +(should)3.743 E F2(ne)174 481.2 Q(ver)-.15 E F1 1.269(be set in the con\ \214guration \214le; it is intended for command line use only)3.769 F(.) --.65 E .435(Note that the use of option)174 316.8 R F0 -1(Ve)2.935 G +-.65 E .435(Note that the use of option)174 493.2 R F0 -1(Ve)2.935 G (rbose)1 E F1 .435(can cause authentication information to leak,)2.935 F -.015(if you use a sendmail client to authenticate to a serv)174 328.8 R +.015(if you use a sendmail client to authenticate to a serv)174 505.2 R (er)-.15 E 5.015(.I)-.55 G 2.515(ft)-5.015 G .015 -(he authentication mech-)-2.515 F .936(anism uses plain te)174 340.8 R +(he authentication mech-)-2.515 F .936(anism uses plain te)174 517.2 R .936(xt passw)-.15 F .936 (ords \(as with LOGIN or PLAIN\), then the passw)-.1 F(ord)-.1 E 1.417 -(could be compromised.)174 352.8 R 3.017 -.8(To a)6.417 H -.2(vo).6 G +(could be compromised.)174 529.2 R 3.017 -.8(To a)6.417 H -.2(vo).6 G 1.417(id this, do not install sendmail set-user).2 F 1.418(-ID root,)-.2 -F(and disable the)174 364.8 Q F0(VERB)2.5 E F1 +F(and disable the)174 541.2 Q F0(VERB)2.5 E F1 (SMTP command with a suitable)2.5 E F0(Pri)2.5 E -.1(va)-.1 G(cyOptions) -.1 E F1(setting.)2.5 E(XscriptFileBuf)102 381 Q(ferSize=)-.25 E F2(thr)A -(eshold)-.37 E F1 1.101([no short name] Set the)174 393 R F2(thr)3.601 E -(eshold)-.37 E F1 3.601(,i)C 3.601(nb)-3.601 G 1.101 +.1 E F1(setting.)2.5 E(XscriptFileBuf)102 557.4 Q(ferSize=)-.25 E F2 +(thr)A(eshold)-.37 E F1 1.101([no short name] Set the)174 569.4 R F2 +(thr)3.601 E(eshold)-.37 E F1 3.601(,i)C 3.601(nb)-3.601 G 1.101 (ytes, before a memory-based queue tran-)-3.601 F -(script \214le becomes disk-based.)174 405 Q(The def)5 E +(script \214le becomes disk-based.)174 581.4 Q(The def)5 E (ault is 4096 bytes.)-.1 E .108(All options can be speci\214ed on the c\ -ommand line using the \255O or \255o \215ag, b)102 421.2 R .109 -(ut most will cause)-.2 F F2(send-)2.609 E(mail)102 433.2 Q F1 .664 +ommand line using the \255O or \255o \215ag, b)102 597.6 R .109 +(ut most will cause)-.2 F F2(send-)2.609 E(mail)102 609.6 Q F1 .664 (to relinquish its set-user)3.164 F .664(-ID permissions.)-.2 F .663 (The options that will not cause this are Se)5.664 F -.15(ve)-.25 G (nBitIn-).15 E 1.319 (put [7], EightBitMode [8], MinFreeBlocks [b], CheckpointInterv)102 -445.2 R 1.319(al [C], Deli)-.25 F -.15(ve)-.25 G 1.319 +621.6 R 1.319(al [C], Deli)-.25 F -.15(ve)-.25 G 1.319 (ryMode [d], Error).15 F(-)-.2 E .043 -(Mode [e], IgnoreDots [i], SendMimeErrors [j], LogLe)102 457.2 R -.15 +(Mode [e], IgnoreDots [i], SendMimeErrors [j], LogLe)102 633.6 R -.15 (ve)-.25 G 2.542(l[).15 G .042(L], MeT)-2.542 F .042 -(oo [m], OldStyleHeaders [o], Pri-)-.8 F -.25(va)102 469.2 S -.15(cy).25 +(oo [m], OldStyleHeaders [o], Pri-)-.8 F -.25(va)102 645.6 S -.15(cy).25 G .302(Options [p], SuperSafe [s], V).15 F .302 (erbose [v], QueueSortOrder)-1.11 F 2.802(,M)-.4 G .303(inQueueAge, Def) --2.802 F .303(aultCharSet, Dial)-.1 F(Delay)102 481.2 Q 7.312(,N)-.65 G +-2.802 F .303(aultCharSet, Dial)-.1 F(Delay)102 657.6 Q 7.312(,N)-.65 G 4.812(oRecipientAction, ColonOkInAddr)-7.312 F 7.312(,M)-.4 G 4.812 (axQueueRunSize, SingleLineFromHeader)-7.312 F 7.312(,a)-.4 G(nd)-7.312 -E(Allo)102 493.2 Q 3.92(wBogusHELO. Actually)-.25 F 3.92(,P)-.65 G(ri) +E(Allo)102 669.6 Q 3.92(wBogusHELO. Actually)-.25 F 3.92(,P)-.65 G(ri) -3.92 E -.25(va)-.25 G -.15(cy).25 G 1.421(Options [p] gi).15 F -.15(ve) -.25 G 3.921(no).15 G 3.921(nt)-3.921 G 1.421 (he command line are added to those)-3.921 F 1.698 -(already speci\214ed in the)102 505.2 R F2(sendmail.cf)4.198 E F1 1.697 +(already speci\214ed in the)102 681.6 R F2(sendmail.cf)4.198 E F1 1.697 (\214le, i.e., the)4.198 F 4.197(yc)-.15 G(an')-4.197 E 4.197(tb)-.18 G 4.197(er)-4.197 G 4.197(eset. Also,)-4.197 F 4.197(M\()4.197 G 1.697 (de\214ne macro\) when)-4.197 F -(de\214ning the r or s macros is also considered \231safe\232.)102 517.2 -Q F0 2.5(5.7. P)87 541.2 R 2.5<8a50>2.5 G -.18(re)-2.5 G -(cedence De\214nitions).18 E F1 -1.11(Va)127 557.4 S .164 +(de\214ning the r or s macros is also considered \231safe\232.)102 693.6 +Q 0 Cg EP +%%Page: 79 75 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-79)195.86 E 2.5(5.7. P)87 96 R 2.5<8a50>2.5 G -.18(re)-2.5 G +(cedence De\214nitions).18 E/F1 10/Times-Roman@0 SF -1.11(Va)127 112.2 S +.164 (lues for the \231Precedence:\232 \214eld may be de\214ned using the) 1.11 F F0(P)2.664 E F1 .164(control line.)2.664 F .164 -(The syntax of this)5.164 F(\214eld is:)102 569.4 Q F0(P)142 585.6 Q F2 -(name)A F0(=)A F2(num)A F1 .384(When the)102 601.8 R F2(name)2.884 E F1 -.384 +(The syntax of this)5.164 F(\214eld is:)102 124.2 Q F0(P)142 140.4 Q/F2 +10/Times-Italic@0 SF(name)A F0(=)A F2(num)A F1 .384(When the)102 156.6 R +F2(name)2.884 E F1 .384 (is found in a \231Precedence:\232 \214eld, the message class is set to) 2.884 F F2(num)2.883 E F1 5.383(.H)C .383(igher numbers)-5.383 F .85 -(mean higher precedence.)102 613.8 R .85(Numbers less than zero ha)5.85 +(mean higher precedence.)102 168.6 R .85(Numbers less than zero ha)5.85 F 1.15 -.15(ve t)-.2 H .85(he special property that if an error occurs) .15 F 1.551(during processing the body of the message will not be retur\ -ned; this is e)102 625.8 R 1.551(xpected to be used for)-.15 F<9962>102 -637.8 Q .461(ulk\232 mail such as through mailing lists.)-.2 F .461 +ned; this is e)102 180.6 R 1.551(xpected to be used for)-.15 F<9962>102 +192.6 Q .461(ulk\232 mail such as through mailing lists.)-.2 F .461 (The def)5.461 F .461(ault precedence is zero.)-.1 F -.15(Fo)5.461 G 2.962(re).15 G .462(xample, our list of)-3.112 F(precedences is:)102 -649.8 Q(P\214rst-class=0)142 666 Q(Pspecial-deli)142 678 Q -.15(ve)-.25 -G(ry=100).15 E(Plist=\25530)142 690 Q(Pb)142 702 Q(ulk=\25560)-.2 E -(Pjunk=\255100)142 714 Q 0 Cg EP -%%Page: 78 74 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-78 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 1.059 -(People writing mailing list e)102 96 R 1.058 -(xploders are encouraged to use \231Precedence: list\232.)-.15 F 1.058 -(Older v)6.058 F 1.058(ersions of)-.15 F/F2 10/Times-Italic@0 SF -(sendmail)102 108 Q F1 1.19(\(which discarded all error returns for ne) -3.69 F -.05(ga)-.15 G(ti).05 E 1.49 -.15(ve p)-.25 H 1.19 -(recedences\) didn').15 F 3.69(tr)-.18 G 1.19(ecognize this name,)-3.69 -F(gi)102 120 Q .599(ving it a def)-.25 F .598(ault precedence of zero.) --.1 F .598(This allo)5.598 F .598 +204.6 Q(P\214rst-class=0)142 220.8 Q(Pspecial-deli)142 232.8 Q -.15(ve) +-.25 G(ry=100).15 E(Plist=\25530)142 244.8 Q(Pb)142 256.8 Q(ulk=\25560) +-.2 E(Pjunk=\255100)142 268.8 Q 1.059(People writing mailing list e)102 +285 R 1.058(xploders are encouraged to use \231Precedence: list\232.) +-.15 F 1.058(Older v)6.058 F 1.058(ersions of)-.15 F F2(sendmail)102 297 +Q F1 1.19(\(which discarded all error returns for ne)3.69 F -.05(ga)-.15 +G(ti).05 E 1.49 -.15(ve p)-.25 H 1.19(recedences\) didn').15 F 3.69(tr) +-.18 G 1.19(ecognize this name,)-3.69 F(gi)102 309 Q .599(ving it a def) +-.25 F .598(ault precedence of zero.)-.1 F .598(This allo)5.598 F .598 (ws list maintainers to see error returns on both old)-.25 F(and ne)102 -132 Q 2.5(wv)-.25 G(ersions of)-2.65 E F2(sendmail)2.5 E F1(.)A F0 2.5 -(5.8. V)87 156 R 2.5<8a43>2.5 G(on\214guration V)-2.5 E(ersion Le)-1 E --.1(ve)-.15 G(l).1 E F1 3.181 -.8(To p)127 172.2 T(ro).8 E 1.581 +321 Q 2.5(wv)-.25 G(ersions of)-2.65 E F2(sendmail)2.5 E F1(.)A F0 2.5 +(5.8. V)87 345 R 2.5<8a43>2.5 G(on\214guration V)-2.5 E(ersion Le)-1 E +-.1(ve)-.15 G(l).1 E F1 3.181 -.8(To p)127 361.2 T(ro).8 E 1.581 (vide compatibility with old con\214guration \214les, the)-.15 F F0(V) 4.081 E F1 1.582(line has been added to de\214ne)4.082 F 1.11(some v)102 -184.2 R 1.11(ery basic semantics of the con\214guration \214le.)-.15 F +373.2 R 1.11(ery basic semantics of the con\214guration \214le.)-.15 F 1.11(These are not intended to be long term sup-)6.11 F .033 -(ports; rather)102 196.2 R 2.533(,t)-.4 G(he)-2.533 E 2.533(yd)-.15 G +(ports; rather)102 385.2 R 2.533(,t)-.4 G(he)-2.533 E 2.533(yd)-.15 G .033(escribe compatibility features which will probably be remo)-2.533 F -.15(ve)-.15 G 2.533(di).15 G 2.533(nf)-2.533 G .034(uture releases.) --2.533 F F0(N.B.:)127 212.4 Q F1 .197(these v)2.697 F(ersion)-.15 E F2 +-2.533 F F0(N.B.:)127 401.4 Q F1 .197(these v)2.697 F(ersion)-.15 E F2 (le)2.697 E(vels)-.15 E F1(ha)2.697 E .496 -.15(ve n)-.2 H .196 (othing to do with the v).15 F(ersion)-.15 E F2(number)2.696 E F1 .196 (on the \214les.)2.696 F -.15(Fo)5.196 G 2.696(re).15 G(xam-)-2.846 E -(ple, as of this writing v)102 224.4 Q +(ple, as of this writing v)102 413.4 Q (ersion 10 con\214g \214les \(speci\214cally)-.15 E 2.5(,8)-.65 G (.10\) used v)-2.5 E(ersion le)-.15 E -.15(ve)-.25 G 2.5(l9c).15 G (on\214gurations.)-2.5 E 1.102 -(\231Old\232 con\214guration \214les are de\214ned as v)127 240.6 R +(\231Old\232 con\214guration \214les are de\214ned as v)127 429.6 R 1.102(ersion le)-.15 F -.15(ve)-.25 G 3.602(lo).15 G 3.602(ne. V)-3.602 F 1.102(ersion le)-1.11 F -.15(ve)-.25 G 3.602(lt).15 G 1.302 -.1 (wo \214)-3.602 H 1.103(les mak).1 F 3.603(et)-.1 G(he)-3.603 E(follo) -102 252.6 Q(wing changes:)-.25 E 12.5(\(1\) Host)107 268.8 R .727(name \ +102 441.6 Q(wing changes:)-.25 E 12.5(\(1\) Host)107 457.8 R .727(name \ canoni\214cation \($[ ... $]\) appends a dot if the name is recognized;\ this gi)3.227 F -.15(ve)-.25 G 3.226(st).15 G(he)-3.226 E 1.974 -(con\214g \214le a w)133.66 280.8 R 1.974(ay of \214nding out if an)-.1 +(con\214g \214le a w)133.66 469.8 R 1.974(ay of \214nding out if an)-.1 F 1.974(ything matched.)-.15 F(\(Actually)6.974 E 4.475(,t)-.65 G 1.975 (his just initializes the)-4.475 F .739 -(\231host\232 map with the \231\255a.)133.66 292.8 R 5.739<9a8d>-.7 G +(\231host\232 map with the \231\255a.)133.66 481.8 R 5.739<9a8d>-.7 G .739(ag \212 you can reset it to an)-5.739 F .738 -(ything you prefer by declaring the)-.15 F(map e)133.66 304.8 Q -(xplicitly)-.15 E(.\))-.65 E 12.5(\(2\) Def)107 321 R .384 +(ything you prefer by declaring the)-.15 F(map e)133.66 493.8 Q +(xplicitly)-.15 E(.\))-.65 E 12.5(\(2\) Def)107 510 R .384 (ault host name e)-.1 F .385 (xtension is consistent throughout processing; v)-.15 F .385(ersion le) -.15 F -.15(ve)-.25 G 2.885(lo).15 G .385(ne con\214gu-)-2.885 F .83 -(rations turned of)133.66 333 R 3.33(fd)-.25 G .83(omain e)-3.33 F .83 +(rations turned of)133.66 522 R 3.33(fd)-.25 G .83(omain e)-3.33 F .83 (xtension \(that is, adding the local domain name\) during certain)-.15 -F .4(points in processing.)133.66 345 R -1.11(Ve)5.4 G .4(rsion le)1.11 +F .4(points in processing.)133.66 534 R -1.11(Ve)5.4 G .4(rsion le)1.11 F -.15(ve)-.25 G 2.9(lt).15 G .6 -.1(wo c)-2.9 H .4 (on\214gurations are e).1 F .4(xpected to include a trailing dot)-.15 F -(to indicate that the name is already canonical.)133.66 357 Q 12.5 -(\(3\) Local)107 373.2 R .072 +(to indicate that the name is already canonical.)133.66 546 Q 12.5 +(\(3\) Local)107 562.2 R .072 (names that are not aliases are passed through a ne)2.572 F 2.572(wd) -.25 G .072(istinguished ruleset \214v)-2.572 F .072(e; this can)-.15 F -.139(be used to append a local relay)133.66 385.2 R 5.139(.T)-.65 G .139 +.139(be used to append a local relay)133.66 574.2 R 5.139(.T)-.65 G .139 (his beha)-5.139 F .139(vior can be pre)-.2 F -.15(ve)-.25 G .14 (nted by resolving the local name).15 F .993(with an initial `@'.)133.66 -397.2 R .993(That is, something that resolv)5.993 F .993 +586.2 R .993(That is, something that resolv)5.993 F .993 (es to a local mailer and a user name of)-.15 F .601 -(\231vikki\232 will be passed through ruleset \214v)133.66 409.2 R .601 +(\231vikki\232 will be passed through ruleset \214v)133.66 598.2 R .601 (e, b)-.15 F .601(ut a user name of \231@vikki\232 will ha)-.2 F .902 -.15(ve t)-.2 H .602(he `@').15 F .92 -(stripped, will not be passed through ruleset \214v)133.66 421.2 R .919 +(stripped, will not be passed through ruleset \214v)133.66 610.2 R .919 (e, b)-.15 F .919(ut will otherwise be treated the same as)-.2 F .629 -(the prior e)133.66 433.2 R 3.129(xample. The)-.15 F -.15(ex)3.129 G +(the prior e)133.66 622.2 R 3.129(xample. The)-.15 F -.15(ex)3.129 G .629(pectation is that this might be used to implement a polic).15 F 3.13(yw)-.15 G(here)-3.13 E .734(mail sent to \231vikki\232 w)133.66 -445.2 R .734(as handled by a central hub, b)-.1 F .734 +634.2 R .734(as handled by a central hub, b)-.1 F .734 (ut mail sent to \231vikki@localhost\232 w)-.2 F(as)-.1 E(deli)133.66 -457.2 Q -.15(ve)-.25 G(red directly).15 E(.)-.65 E -1.11(Ve)127 473.4 S +646.2 Q -.15(ve)-.25 G(red directly).15 E(.)-.65 E -1.11(Ve)127 662.4 S 1.382(rsion le)1.11 F -.15(ve)-.25 G 3.882(lt).15 G 1.382 (hree \214les allo)-3.882 F 3.882(w#i)-.25 G 1.382 (nitiated comments on all lines.)-3.882 F 1.383 (Exceptions are backslash)6.383 F(escaped # marks and the $# syntax.)102 -485.4 Q -1.11(Ve)127 501.6 S 1.208(rsion le)1.11 F -.15(ve)-.25 G 3.708 +674.4 Q -1.11(Ve)127 690.6 S 1.208(rsion le)1.11 F -.15(ve)-.25 G 3.708 (lf).15 G 1.208(our con\214gurations are completely equi)-3.708 F -.25 (va)-.25 G 1.207(lent to le).25 F -.15(ve)-.25 G 3.707(lt).15 G 1.207 -(hree for historical rea-)-3.707 F(sons.)102 513.6 Q -1.11(Ve)127 529.8 -S 1.234(rsion le)1.11 F -.15(ve)-.25 G 3.734<6c8c>.15 G 1.534 -.15(ve c) --3.734 H 1.234(on\214guration \214les change the def).15 F 1.234 -(ault de\214nition of)-.1 F F0($w)3.734 E F1 1.234 -(to be just the \214rst)3.734 F(component of the hostname.)102 541.8 Q --1.11(Ve)127 558 S 1.589(rsion le)1.11 F -.15(ve)-.25 G 4.089(ls).15 G +(hree for historical rea-)-3.707 F(sons.)102 702.6 Q 0 Cg EP +%%Page: 80 76 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-80 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -1.11(Ve) +127 96 S 1.234(rsion le)1.11 F -.15(ve)-.25 G 3.734<6c8c>.15 G 1.534 +-.15(ve c)-3.734 H 1.234(on\214guration \214les change the def).15 F +1.234(ault de\214nition of)-.1 F F0($w)3.734 E F1 1.234 +(to be just the \214rst)3.734 F(component of the hostname.)102 108 Q +-1.11(Ve)127 124.2 S 1.589(rsion le)1.11 F -.15(ve)-.25 G 4.089(ls).15 G 1.589(ix con\214guration \214les change man)-4.089 F 4.088(yo)-.15 G 4.088(ft)-4.088 G 1.588(he local processing options \(such as)-4.088 F -.48(aliasing and matching the be)102 570 R .481(ginning of the address \ -for `|' characters\) to be mailer \215ags; this allo)-.15 F(ws)-.25 E -1.345(\214ne-grained control o)102 582 R -.15(ve)-.15 G 3.845(rt).15 G +.48(aliasing and matching the be)102 136.2 R .481(ginning of the addres\ +s for `|' characters\) to be mailer \215ags; this allo)-.15 F(ws)-.25 E +1.345(\214ne-grained control o)102 148.2 R -.15(ve)-.15 G 3.845(rt).15 G 1.345(he special local processing.)-3.845 F(Le)6.345 E -.15(ve)-.25 G 3.845(ls).15 G 1.344(ix con\214guration \214les may also use)-3.845 F -1.221(long option names.)102 594 R(The)6.221 E F0(ColonOkInAddr)3.721 E -F1 1.221(option \(to allo)3.721 F 3.722(wc)-.25 G 1.222 -(olons in the local-part of addresses\))-3.722 F(def)102 606 Q(aults)-.1 -E F0(on)3.44 E F1 .94(for lo)3.44 F .94(wer numbered con\214guration \ -\214les; the con\214guration \214le requires some additional)-.25 F -(intelligence to properly handle the RFC 822 group construct.)102 618 Q --1.11(Ve)127 634.2 S 1.97(rsion le)1.11 F -.15(ve)-.25 G 4.47(ls).15 G +1.221(long option names.)102 160.2 R(The)6.221 E F0(ColonOkInAddr)3.721 +E F1 1.221(option \(to allo)3.721 F 3.722(wc)-.25 G 1.222 +(olons in the local-part of addresses\))-3.722 F(def)102 172.2 Q(aults) +-.1 E F0(on)3.44 E F1 .94(for lo)3.44 F .94(wer numbered con\214guratio\ +n \214les; the con\214guration \214le requires some additional)-.25 F +(intelligence to properly handle the RFC 822 group construct.)102 184.2 +Q -1.11(Ve)127 200.4 S 1.97(rsion le)1.11 F -.15(ve)-.25 G 4.47(ls).15 G -2.15 -.25(ev e)-4.47 H 4.47(nc).25 G 1.97 (on\214guration \214les used ne)-4.47 F 4.47(wo)-.25 G 1.97 (ption names to replace old macros \()-4.47 F F0($e)A F1(became)102 -646.2 Q F0(SmtpGr)5.548 E(eetingMessage)-.18 E F1(,)A F0($l)5.548 E F1 +212.4 Q F0(SmtpGr)5.548 E(eetingMessage)-.18 E F1(,)A F0($l)5.548 E F1 (became)5.548 E F0(UnixFr)5.548 E(omLine)-.18 E F1 5.547(,a)C(nd)-5.547 E F0($o)5.547 E F1(became)5.547 E F0(OperatorChars)5.547 E F1(.)A .086 -(Also, prior to v)102 658.2 R .086(ersion se)-.15 F -.15(ve)-.25 G .086 +(Also, prior to v)102 224.4 R .086(ersion se)-.15 F -.15(ve)-.25 G .086 (n, the).15 F F0(F=q)2.586 E F1 .087 (\215ag \(use 250 instead of 252 return v)2.586 F .087(alue for)-.25 F -/F3 9/Times-Roman@0 SF .087(SMTP VRFY)2.587 F F1(com-)2.587 E(mands\) w) -102 670.2 Q(as assumed.)-.1 E -1.11(Ve)127 686.4 S(rsion le)1.11 E -.15 +/F2 9/Times-Roman@0 SF .087(SMTP VRFY)2.587 F F1(com-)2.587 E(mands\) w) +102 236.4 Q(as assumed.)-.1 E -1.11(Ve)127 252.6 S(rsion le)1.11 E -.15 (ve)-.25 G 2.5(le).15 G(ight con\214guration \214les allo)-2.5 E(w)-.25 E F0($#)2.5 E F1(on the left hand side of ruleset lines.)2.5 E -1.11(Ve) -127 702.6 S .423(rsion le)1.11 F -.15(ve)-.25 G 2.923(ln).15 G .423 +127 268.8 S .423(rsion le)1.11 F -.15(ve)-.25 G 2.923(ln).15 G .423 (ine con\214guration \214les allo)-2.923 F 2.923(wp)-.25 G .423 (arentheses in rulesets, i.e. the)-2.923 F 2.923(ya)-.15 G .422 -(re not treated as)-2.923 F(comments and hence remo)102 714.6 Q -.15(ve) --.15 G(d.).15 E 0 Cg EP -%%Page: 79 75 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-79)195.86 E/F1 10/Times-Roman@0 SF -1.11(Ve)127 96 S(rsion le) -1.11 E -.15(ve)-.25 G 2.5(lt).15 G(en con\214guration \214les allo)-2.5 -E 2.5(wq)-.25 G(ueue group de\214nitions.)-2.5 E(The)127 112.2 Q F0(V) -2.677 E F1 .177(line may ha)2.677 F .477 -.15(ve a)-.2 H 2.677(no).15 G -(ptional)-2.677 E F0(/)2.677 E/F2 10/Times-Italic@0 SF(vendor)A F1 .178 +(re not treated as)-2.923 F(comments and hence remo)102 280.8 Q -.15(ve) +-.15 G(d.).15 E -1.11(Ve)127 297 S(rsion le)1.11 E -.15(ve)-.25 G 2.5 +(lt).15 G(en con\214guration \214les allo)-2.5 E 2.5(wq)-.25 G +(ueue group de\214nitions.)-2.5 E(The)127 313.2 Q F0(V)2.677 E F1 .177 +(line may ha)2.677 F .477 -.15(ve a)-.2 H 2.677(no).15 G(ptional)-2.677 +E F0(/)2.677 E/F3 10/Times-Italic@0 SF(vendor)A F1 .178 (to indicate that this con\214guration \214le uses modi\214ca-)2.677 F -.865(tions speci\214c to a particular v)102 126.2 R(endor)-.15 E/F3 7 +.865(tions speci\214c to a particular v)102 327.2 R(endor)-.15 E/F4 7 /Times-Roman@0 SF(22)-4 I F1 5.866(.Y)4 K .866(ou may use \231/Berk) -6.966 F(ele)-.1 E .866(y\232 to emphasize that this con\214gura-)-.15 F -(tion \214le uses the Berk)102 138.2 Q(ele)-.1 E 2.5(yd)-.15 G -(ialect of)-2.5 E F2(sendmail)2.5 E F1(.)A F0 2.5(5.9. K)87 162.2 R 2.5 +(tion \214le uses the Berk)102 339.2 Q(ele)-.1 E 2.5(yd)-.15 G +(ialect of)-2.5 E F3(sendmail)2.5 E F1(.)A F0 2.5(5.9. K)87 363.2 R 2.5 <8a4b>2.5 G(ey File Declaration)-2.75 E F1 -(Special maps can be de\214ned using the line:)127 178.4 Q -(Kmapname mapclass ar)142 194.6 Q(guments)-.18 E(The)102 210.8 Q F2 +(Special maps can be de\214ned using the line:)127 379.4 Q +(Kmapname mapclass ar)142 395.6 Q(guments)-.18 E(The)102 411.8 Q F3 (mapname)2.751 E F1 .251 (is the handle by which this map is referenced in the re)2.751 F .25 -(writing rules.)-.25 F(The)5.25 E F2(mapclass)2.75 E F1(is)2.75 E 1.889 -(the name of a type of map; these are compiled in to)102 222.8 R F2 -(sendmail)4.389 E F1 6.889(.T)C(he)-6.889 E F2(ar)4.389 E(guments)-.37 E +(writing rules.)-.25 F(The)5.25 E F3(mapclass)2.75 E F1(is)2.75 E 1.889 +(the name of a type of map; these are compiled in to)102 423.8 R F3 +(sendmail)4.389 E F1 6.889(.T)C(he)-6.889 E F3(ar)4.389 E(guments)-.37 E F1 1.889(are interpreted)4.389 F .791(depending on the class; typically) -102 234.8 R 3.291(,t)-.65 G .791(here w)-3.291 F .791 +102 435.8 R 3.291(,t)-.65 G .791(here w)-3.291 F .791 (ould be a single ar)-.1 F .79(gument naming the \214le containing the) --.18 F(map.)102 246.8 Q(Maps are referenced using the syntax:)127 263 Q -($\()142 279.2 Q F2(map k)2.5 E -.3(ey)-.1 G F1($@)2.8 E F2(ar)2.5 E -(guments)-.37 E F1($:)2.5 E F2(default)2.5 E F1($\))2.5 E .64 -(where either or both of the)102 295.4 R F2(ar)3.14 E(guments)-.37 E F1 -(or)3.141 E F2(default)3.141 E F1 .641(portion may be omitted.)3.141 F -(The)5.641 E F2 .641($@ ar)3.141 F(guments)-.37 E F1(may)3.141 E 1.277 -(appear more than once.)102 307.4 R 1.277(The indicated)6.277 F F2 -.1 -(ke)3.777 G(y)-.2 E F1(and)3.776 E F2(ar)3.776 E(guments)-.37 E F1 1.276 +-.18 F(map.)102 447.8 Q(Maps are referenced using the syntax:)127 464 Q +($\()142 480.2 Q F3(map k)2.5 E -.3(ey)-.1 G F1($@)2.8 E F3(ar)2.5 E +(guments)-.37 E F1($:)2.5 E F3(default)2.5 E F1($\))2.5 E .64 +(where either or both of the)102 496.4 R F3(ar)3.14 E(guments)-.37 E F1 +(or)3.141 E F3(default)3.141 E F1 .641(portion may be omitted.)3.141 F +(The)5.641 E F3 .641($@ ar)3.141 F(guments)-.37 E F1(may)3.141 E 1.277 +(appear more than once.)102 508.4 R 1.277(The indicated)6.277 F F3 -.1 +(ke)3.777 G(y)-.2 E F1(and)3.776 E F3(ar)3.776 E(guments)-.37 E F1 1.276 (are passed to the appropriate mapping)3.776 F 3.253(function. If)102 -319.4 R .753(it returns a v)3.253 F .753(alue, it replaces the input.) +520.4 R .753(it returns a v)3.253 F .753(alue, it replaces the input.) -.25 F .753(If it does not return a v)5.753 F .753(alue and the)-.25 F -F2(default)3.253 E F1(is)3.253 E(speci\214ed, the)102 331.4 Q F2 +F3(default)3.253 E F1(is)3.253 E(speci\214ed, the)102 532.4 Q F3 (default)2.5 E F1(replaces the input.)2.5 E -(Otherwise, the input is unchanged.)5 E(The)127 347.6 Q F2(ar)4.064 E +(Otherwise, the input is unchanged.)5 E(The)127 548.6 Q F3(ar)4.064 E (guments)-.37 E F1 1.564(are passed to the map for arbitrary use.)4.064 -F 1.563(Most map classes can interpolate)6.563 F .882(these ar)102 359.6 +F 1.563(Most map classes can interpolate)6.563 F .882(these ar)102 560.6 R .882(guments into their v)-.18 F .882(alues using the syntax \231%) --.25 F F2(n)A F1 3.382<9a28>C(where)-3.382 E F2(n)3.382 E F1 .883 -(is a digit\) to indicate the corre-)3.382 F(sponding)102 371.6 Q F2(ar) +-.25 F F3(n)A F1 3.382<9a28>C(where)-3.382 E F3(n)3.382 E F1 .883 +(is a digit\) to indicate the corre-)3.382 F(sponding)102 572.6 Q F3(ar) 2.5 E(gument)-.37 E F1 5(.A)C -.18(rg)-5 G (ument \231%0\232 indicates the database k).18 E -.15(ey)-.1 G 5(.F)-.5 -G(or e)-5.15 E(xample, the rule)-.15 E(R$\255 ! $+)142 387.8 Q +G(or e)-5.15 E(xample, the rule)-.15 E(R$\255 ! $+)142 588.8 Q ($: $\(uucp $1 $@ $2 $: $2 @ $1 . UUCP $\))71.72 E 1.269(Looks up the U\ UCP name in a \(user de\214ned\) UUCP map; if not found it turns it int\ -o \231.UUCP\232)102 404 R 2.5(form. The)102 416 R -(database might contain records lik)2.5 E(e:)-.1 E(decv)142 432.2 Q -77.43(ax %1@%0.DEC.COM)-.25 F 72.19(research %1@%0.A)142 444.2 R(TT) --1.11 E(.COM)-.74 E(Note that)102 460.4 Q F2(default)2.5 E F1 +o \231.UUCP\232)102 605 R 2.5(form. The)102 617 R +(database might contain records lik)2.5 E(e:)-.1 E(decv)142 633.2 Q +77.43(ax %1@%0.DEC.COM)-.25 F 72.19(research %1@%0.A)142 645.2 R(TT) +-1.11 E(.COM)-.74 E(Note that)102 661.4 Q F3(default)2.5 E F1 (clauses ne)2.5 E -.15(ve)-.25 G 2.5(rd).15 G 2.5(ot)-2.5 G -(his mapping.)-2.5 E .735(The b)127 476.6 R .735(uilt-in map with both \ -name and class \231host\232 is the host name canonicalization lookup.) --.2 F(Thus, the syntax:)102 488.6 Q($\(host)142 504.8 Q F2(hostname)2.5 -E F1($\))A(is equi)102 521 Q -.25(va)-.25 G(lent to:).25 E($[)142 537.2 -Q F2(hostname)A F1($])A(There are man)127 557.6 Q 2.5(yd)-.15 G -(e\214ned classes.)-2.5 E 51.72(dbm Database)102 573.8 R 1.623 -(lookups using the ndbm\(3\) library)4.123 F(.)-.65 E F2(Sendmail)6.623 -E F1 1.623(must be compiled with)4.123 F F0(NDBM)174 585.8 Q F1 -(de\214ned.)2.5 E 49.51(btree Database)102 602 R .677 -(lookups using the btree interf)3.177 F .677(ace to the Berk)-.1 F(ele) --.1 E 3.178(yD)-.15 G 3.178(Bl)-3.178 G(ibrary)-3.178 E(.)-.65 E F2 -(Sendmail)5.678 E F1(must be compiled with)174 614 Q F0(NEWDB)2.5 E F1 -(de\214ned.)2.5 E 51.17(hash Database)102 630.2 R .828 -(lookups using the hash interf)3.329 F .828(ace to the Berk)-.1 F(ele) --.1 E 3.328(yD)-.15 G 3.328(Bl)-3.328 G(ibrary)-3.328 E(.)-.65 E F2 -(Sendmail)5.828 E F1(must be compiled with)174 642.2 Q F0(NEWDB)2.5 E F1 -(de\214ned.)2.5 E 57.83(nis NIS)102 658.4 R(lookups.)2.5 E F2(Sendmail)5 -E F1(must be compiled with)2.5 E F0(NIS)2.5 E F1(de\214ned.)2.5 E .32 LW -76 669.2 72 669.2 DL 80 669.2 76 669.2 DL 84 669.2 80 669.2 DL 88 669.2 -84 669.2 DL 92 669.2 88 669.2 DL 96 669.2 92 669.2 DL 100 669.2 96 669.2 -DL 104 669.2 100 669.2 DL 108 669.2 104 669.2 DL 112 669.2 108 669.2 DL -116 669.2 112 669.2 DL 120 669.2 116 669.2 DL 124 669.2 120 669.2 DL 128 -669.2 124 669.2 DL 132 669.2 128 669.2 DL 136 669.2 132 669.2 DL 140 -669.2 136 669.2 DL 144 669.2 140 669.2 DL 148 669.2 144 669.2 DL 152 -669.2 148 669.2 DL 156 669.2 152 669.2 DL 160 669.2 156 669.2 DL 164 -669.2 160 669.2 DL 168 669.2 164 669.2 DL 172 669.2 168 669.2 DL 176 -669.2 172 669.2 DL 180 669.2 176 669.2 DL 184 669.2 180 669.2 DL 188 -669.2 184 669.2 DL 192 669.2 188 669.2 DL 196 669.2 192 669.2 DL 200 -669.2 196 669.2 DL 204 669.2 200 669.2 DL 208 669.2 204 669.2 DL 212 -669.2 208 669.2 DL 216 669.2 212 669.2 DL/F4 5/Times-Roman@0 SF(22)93.6 -679.6 Q/F5 8/Times-Roman@0 SF .214(And of course, v)3.2 J .214 +(his mapping.)-2.5 E .32 LW 76 671 72 671 DL 80 671 76 671 DL 84 671 80 +671 DL 88 671 84 671 DL 92 671 88 671 DL 96 671 92 671 DL 100 671 96 671 +DL 104 671 100 671 DL 108 671 104 671 DL 112 671 108 671 DL 116 671 112 +671 DL 120 671 116 671 DL 124 671 120 671 DL 128 671 124 671 DL 132 671 +128 671 DL 136 671 132 671 DL 140 671 136 671 DL 144 671 140 671 DL 148 +671 144 671 DL 152 671 148 671 DL 156 671 152 671 DL 160 671 156 671 DL +164 671 160 671 DL 168 671 164 671 DL 172 671 168 671 DL 176 671 172 671 +DL 180 671 176 671 DL 184 671 180 671 DL 188 671 184 671 DL 192 671 188 +671 DL 196 671 192 671 DL 200 671 196 671 DL 204 671 200 671 DL 208 671 +204 671 DL 212 671 208 671 DL 216 671 212 671 DL/F5 5/Times-Roman@0 SF +(22)93.6 681.4 Q/F6 8/Times-Roman@0 SF .214(And of course, v)3.2 J .214 (endors are encouraged to add themselv)-.12 F .214 (es to the list of recognized v)-.12 F .214 -(endors by editing the routine)-.12 F/F6 8/Times-Italic@0 SF(setvendor) -2.214 E F5(in)2.214 E F6(conf)72 692.4 Q(.c)-.12 E F5 4(.P)C +(endors by editing the routine)-.12 F/F7 8/Times-Italic@0 SF(setvendor) +2.214 E F6(in)2.214 E F7(conf)72 694.2 Q(.c)-.12 E F6 4(.P)C (lease send e-mail to sendmail@Sendmail.ORG to re)-4 E(gister your v) -.12 E(endor dialect.)-.12 E 0 Cg EP -%%Page: 80 76 +%%Page: 81 77 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-80 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 41.16 -(nisplus NIS+)102 96 R(lookups.)3.733 E/F2 10/Times-Italic@0 SF -(Sendmail)6.233 E F1 1.233(must be compiled with)3.733 F F0(NISPLUS) -3.733 E F1 3.733(de\214ned. The)3.733 F(ar)3.733 E(gu-)-.18 E .495 -(ment is the name of the table to use for lookups, and the)174 108 R F0 +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-81)195.86 E/F1 10/Times-Roman@0 SF .735(The b)127 96 R .735(uil\ +t-in map with both name and class \231host\232 is the host name canonic\ +alization lookup.)-.2 F(Thus, the syntax:)102 108 Q($\(host)142 124.2 Q +/F2 10/Times-Italic@0 SF(hostname)2.5 E F1($\))A(is equi)102 140.4 Q +-.25(va)-.25 G(lent to:).25 E($[)142 156.6 Q F2(hostname)A F1($])A +(There are man)127 177 Q 2.5(yd)-.15 G(e\214ned classes.)-2.5 E 51.72 +(dbm Database)102 193.2 R 1.623(lookups using the ndbm\(3\) library) +4.123 F(.)-.65 E F2(Sendmail)6.623 E F1 1.623(must be compiled with) +4.123 F F0(NDBM)174 205.2 Q F1(de\214ned.)2.5 E 49.51(btree Database)102 +221.4 R .677(lookups using the btree interf)3.177 F .677 +(ace to the Berk)-.1 F(ele)-.1 E 3.178(yD)-.15 G 3.178(Bl)-3.178 G +(ibrary)-3.178 E(.)-.65 E F2(Sendmail)5.678 E F1(must be compiled with) +174 233.4 Q F0(NEWDB)2.5 E F1(de\214ned.)2.5 E 51.17(hash Database)102 +249.6 R .828(lookups using the hash interf)3.329 F .828(ace to the Berk) +-.1 F(ele)-.1 E 3.328(yD)-.15 G 3.328(Bl)-3.328 G(ibrary)-3.328 E(.)-.65 +E F2(Sendmail)5.828 E F1(must be compiled with)174 261.6 Q F0(NEWDB)2.5 +E F1(de\214ned.)2.5 E 57.83(nis NIS)102 277.8 R(lookups.)2.5 E F2 +(Sendmail)5 E F1(must be compiled with)2.5 E F0(NIS)2.5 E F1(de\214ned.) +2.5 E 41.16(nisplus NIS+)102 294 R(lookups.)3.733 E F2(Sendmail)6.233 E +F1 1.233(must be compiled with)3.733 F F0(NISPLUS)3.733 E F1 3.733 +(de\214ned. The)3.733 F(ar)3.733 E(gu-)-.18 E .495 +(ment is the name of the table to use for lookups, and the)174 306 R F0 2.995 E F1(and)2.995 E F02.995 E F1 .495(\215ags may be) -2.995 F(used to set the k)174 120 Q .3 -.15(ey a)-.1 H(nd v).15 E +2.995 F(used to set the k)174 318 Q .3 -.15(ey a)-.1 H(nd v).15 E (alue columns respecti)-.25 E -.15(ve)-.25 G(ly).15 E(.)-.65 E 43.39 -(hesiod Hesiod)102 136.2 R(lookups.)2.5 E F2(Sendmail)5 E F1 +(hesiod Hesiod)102 334.2 R(lookups.)2.5 E F2(Sendmail)5 E F1 (must be compiled with)2.5 E F0(HESIOD)2.5 E F1(de\214ned.)2.5 E 52.28 -(ldap LD)102 152.4 R 1.783(AP X500 directory lookups.)-.4 F F2(Sendmail) +(ldap LD)102 350.4 R 1.783(AP X500 directory lookups.)-.4 F F2(Sendmail) 6.783 E F1 1.784(must be compiled with)4.283 F F0(LD)4.284 E(APMAP)-.35 -E F1 2.966(de\214ned. The)174 164.4 R .466 +E F1 2.966(de\214ned. The)174 362.4 R .466 (map supports most of the standard ar)2.966 F .465 -(guments and most of the com-)-.18 F .3(mand line ar)174 176.4 R .3 +(guments and most of the com-)-.18 F .3(mand line ar)174 374.4 R .3 (guments of the)-.18 F F2(ldapsear)2.8 E -.15(ch)-.37 G F1 2.8 (program. Note)2.95 F .3(that, by def)2.8 F .3(ault, if a single)-.1 F -.629(query matches multiple v)174 188.4 R .629 +.629(query matches multiple v)174 386.4 R .629 (alues, only the \214rst v)-.25 F .628(alue will be returned unless the) --.25 F F03.128 E F1(\(v)174 200.4 Q .248 +-.25 F F03.128 E F1(\(v)174 398.4 Q .248 (alue separator\) map \215ag is set.)-.25 F .249(Also, the)5.249 F F0 2.749 E F1 .249(map \215ag will treat a multiple v)2.749 F(alue) --.25 E(return as if there were no matches.)174 212.4 Q 41.17 -(netinfo NeXT)102 228.6 R(NetInfo lookups.)2.5 E F2(Sendmail)5 E F1 +-.25 E(return as if there were no matches.)174 410.4 Q 41.17 +(netinfo NeXT)102 426.6 R(NetInfo lookups.)2.5 E F2(Sendmail)5 E F1 (must be compiled with)2.5 E F0(NETINFO)2.5 E F1(de\214ned.)2.5 E(te)102 -244.8 Q 54.65(xt T)-.15 F -.15(ex)-.7 G 2.918<748c>.15 G .418 +442.8 Q 54.65(xt T)-.15 F -.15(ex)-.7 G 2.918<748c>.15 G .418 (le lookups.)-2.918 F .418(The format of the te)5.418 F .417 (xt \214le is de\214ned by the)-.15 F F02.917 E F1(\(k)2.917 E -.717 -.15(ey \214)-.1 H .417(eld num-).15 F(ber\),)174 256.8 Q F0 +.717 -.15(ey \214)-.1 H .417(eld num-).15 F(ber\),)174 454.8 Q F0 2.5 E F1(\(v)2.5 E(alue \214eld number\), and)-.25 E F02.5 E F1 -(\(\214eld delimiter\) \215ags.)2.5 E 59.5(ph PH)102 273 R 1.394 +(\(\214eld delimiter\) \215ags.)2.5 E 59.5(ph PH)102 471 R 1.394 (query map.)3.894 F(Contrib)6.394 E 1.394 (uted and supported by Mark Roth, roth@uiuc.edu.)-.2 F -.15(Fo)6.394 G (r).15 E .017(more information, consult the web site \231http://www-de) -174 285 R -.65(v.)-.25 G(cites.uiuc.edu/sendmail/\232.).65 E 55.61 -(nsd nsd)102 301.2 R 1.599(map for IRIX 6.5 and later)4.099 F 6.599(.C) +174 483 R -.65(v.)-.25 G(cites.uiuc.edu/sendmail/\232.).65 E 55.61 +(nsd nsd)102 499.2 R 1.599(map for IRIX 6.5 and later)4.099 F 6.599(.C) -.55 G(ontrib)-6.599 E 1.599(uted and supported by Bob Mende of)-.2 F -(SGI, mende@sgi.com.)174 313.2 Q 53.39(stab Internal)102 329.4 R +(SGI, mende@sgi.com.)174 511.2 Q 53.39(stab Internal)102 527.4 R (symbol table lookups.)2.5 E(Used internally for aliasing.)5 E 38.38 -(implicit Really)102 345.6 R .546 +(implicit Really)102 543.6 R .546 (should be called \231alias\232 \212 this is used to get the def)3.046 F -.546(ault lookups for alias)-.1 F(\214les, and is the def)174 357.6 Q +.546(ault lookups for alias)-.1 F(\214les, and is the def)174 555.6 Q (ault if no class is speci\214ed for alias \214les.)-.1 E 52.84 -(user Looks)102 373.8 R .476(up users using)2.976 F F2 -.1(ge)2.976 G +(user Looks)102 571.8 R .476(up users using)2.976 F F2 -.1(ge)2.976 G (tpwnam).1 E F1 2.976(\(3\). The)B F02.976 E F1 .477 (\215ag can be used to specify the name)2.976 F .142(of the \214eld to \ -return \(although this is normally used only to check the e)174 385.8 R -.142(xistence of)-.15 F 2.5(au)174 397.8 S(ser\).)-2.5 E 52.83 -(host Canoni\214es)102 414 R .2(host domain names.)2.7 F(Gi)5.2 E -.15 +return \(although this is normally used only to check the e)174 583.8 R +.142(xistence of)-.15 F 2.5(au)174 595.8 S(ser\).)-2.5 E 52.83 +(host Canoni\214es)102 612 R .2(host domain names.)2.7 F(Gi)5.2 E -.15 (ve)-.25 G 2.7(nah).15 G .2(ost name it calls the name serv)-2.7 F .2 -(er to \214nd)-.15 F(the canonical name for that host.)174 426 Q 40.61 -(bestmx Returns)102 442.2 R 2.479(the best MX record for a host name gi) +(er to \214nd)-.15 F(the canonical name for that host.)174 624 Q 40.61 +(bestmx Returns)102 640.2 R 2.479(the best MX record for a host name gi) 4.979 F -.15(ve)-.25 G 4.978(na).15 G 4.978(st)-4.978 G 2.478(he k) -4.978 F -.15(ey)-.1 G 7.478(.T)-.5 G 2.478(he current)-7.478 F .721 -(machine is al)174 454.2 R -.1(wa)-.1 G .721 +(machine is al)174 652.2 R -.1(wa)-.1 G .721 (ys preferred \212 that is, if the current machine is one of the hosts) -.1 F .219(listed as a lo)174 466.2 R .218 +.1 F .219(listed as a lo)174 664.2 R .218 (west-preference MX record, then it will be guaranteed to be returned.) -.25 F .961(This can be used to \214nd out if this machine is the tar) -174 478.2 R .962(get for an MX record, and)-.18 F .313 -(mail can be accepted on that basis.)174 490.2 R .313(If the)5.313 F F0 +174 676.2 R .962(get for an MX record, and)-.18 F .313 +(mail can be accepted on that basis.)174 688.2 R .313(If the)5.313 F F0 2.813 E F1 .313(\215ag is gi)2.813 F -.15(ve)-.25 G .313 -(n, then all MX names are).15 F(returned, separated by the gi)174 502.2 -Q -.15(ve)-.25 G 2.5(nd).15 G(elimiter)-2.5 E(.)-.55 E 55.61(dns This) -102 518.4 R 2.248 +(n, then all MX names are).15 F(returned, separated by the gi)174 700.2 +Q -.15(ve)-.25 G 2.5(nd).15 G(elimiter)-2.5 E(.)-.55 E 0 Cg EP +%%Page: 82 78 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-82 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 55.61 +(dns This)102 96 R 2.248 (map requires the option -R to specify the DNS resource record type to) -4.747 F 1.229(lookup. The follo)174 530.4 R 1.229 +4.747 F 1.229(lookup. The follo)174 108 R 1.229 (wing types are supported: A, AAAA, AFSDB, CN)-.25 F 1.229(AME, MX,)-.35 -F .661(NS, PTR, SR)174 542.4 R 3.241 -1.29(V, a)-.8 H .661(nd TXT)1.29 F +F .661(NS, PTR, SR)174 120 R 3.241 -1.29(V, a)-.8 H .661(nd TXT)1.29 F 5.661(.A)-.74 G .662(map lookup will return only one record.)-2.5 F .662 (Hence for)5.662 F .558(some types, e.g., MX records, the return v)174 -554.4 R .558(alue might be a random element of the)-.25 F -(list due to randomizing in the DNS resolv)174 566.4 Q(er)-.15 E(.)-.55 -E 32.85(sequence The)102 582.6 R(ar)3.349 E .849(guments on the `K' lin\ -e are a list of maps; the resulting map searches the)-.18 F(ar)174 594.6 -Q .439 -(gument maps in order until it \214nds a match for the indicated k)-.18 -F -.15(ey)-.1 G 5.438(.F)-.5 G .438(or e)-5.588 F(xample,)-.15 E -(if the k)174 606.6 Q .3 -.15(ey d)-.1 H(e\214nition is:).15 E -(Kmap1 ...)214 622.8 Q(Kmap2 ...)214 634.8 Q(Kseqmap sequence map1 map2) -214 646.8 Q .968(then a lookup ag)174 663 R .968 +132 R .558(alue might be a random element of the)-.25 F +(list due to randomizing in the DNS resolv)174 144 Q(er)-.15 E(.)-.55 E +32.85(sequence The)102 160.2 R(ar)3.349 E .849(guments on the `K' line \ +are a list of maps; the resulting map searches the)-.18 F(ar)174 172.2 Q +.439(gument maps in order until it \214nds a match for the indicated k) +-.18 F -.15(ey)-.1 G 5.438(.F)-.5 G .438(or e)-5.588 F(xample,)-.15 E +(if the k)174 184.2 Q .3 -.15(ey d)-.1 H(e\214nition is:).15 E +(Kmap1 ...)214 200.4 Q(Kmap2 ...)214 212.4 Q(Kseqmap sequence map1 map2) +214 224.4 Q .968(then a lookup ag)174 240.6 R .968 (ainst \231seqmap\232 \214rst does a lookup in map1.)-.05 F .968 -(If that is found, it)5.968 F(returns immediately)174 675 Q 5(.O)-.65 G -(therwise, the same k)-5 E .3 -.15(ey i)-.1 H 2.5(su).15 G -(sed for map2.)-2.5 E 43.94(syslog the)102 691.2 R -.1(ke)2.5 G 2.5(yi) --.05 G 2.5(sl)-2.5 G(ogged via)-2.5 E F2(syslo)2.5 E(gd)-.1 E F1 2.5 -(\(8\). The)1.666 F(lookup returns the empty string.)2.5 E 43.39 -(switch Much)102 707.4 R(lik)2.801 E 2.801(et)-.1 G .301 +(If that is found, it)5.968 F(returns immediately)174 252.6 Q 5(.O)-.65 +G(therwise, the same k)-5 E .3 -.15(ey i)-.1 H 2.5(su).15 G +(sed for map2.)-2.5 E 43.94(syslog the)102 268.8 R -.1(ke)2.5 G 2.5(yi) +-.05 G 2.5(sl)-2.5 G(ogged via)-2.5 E/F2 10/Times-Italic@0 SF(syslo)2.5 +E(gd)-.1 E F1 2.5(\(8\). The)1.666 F(lookup returns the empty string.) +2.5 E 43.39(switch Much)102 285 R(lik)2.801 E 2.801(et)-.1 G .301 (he \231sequence\232 map e)-2.801 F .301 -(xcept that the order of maps is determined by the)-.15 F 1.69 -(service switch.)174 719.4 R 1.69(The ar)6.69 F 1.691 -(gument is the name of the service to be look)-.18 F 1.691(ed up; the) --.1 F 0 Cg EP -%%Page: 81 77 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-81)195.86 E/F1 10/Times-Roman@0 SF -.25(va)174 96 S .637 -(lues from the service switch are appended to the map name to create ne) -.25 F 3.137(wm)-.25 G(ap)-3.137 E 2.5(names. F)174 108 R(or e)-.15 E +(xcept that the order of maps is determined by the)-.15 F .391 +(service switch.)174 297 R .391(The ar)5.391 F .391 +(gument is the name of the service to be look)-.18 F .392(ed up; the v) +-.1 F(al-)-.25 E 1.492 +(ues from the service switch are appended to the map name to create ne) +174 309 R 3.992(wm)-.25 G(ap)-3.992 E 2.5(names. F)174 321 R(or e)-.15 E (xample, consider the k)-.15 E .3 -.15(ey d)-.1 H(e\214nition:).15 E -(Kali switch aliases)214 124.2 Q -(together with the service switch entry:)174 140.4 Q 78.84(aliases nis) -214 156.6 R(\214les)2.5 E 1.633(This causes a query ag)174 172.8 R 1.633 +(Kali switch aliases)214 337.2 Q +(together with the service switch entry:)174 353.4 Q 78.84(aliases nis) +214 369.6 R(\214les)2.5 E 1.633(This causes a query ag)174 385.8 R 1.633 (ainst the map \231ali\232 to search maps named \231ali.nis\232 and)-.05 -F(\231ali.\214les\232 in that order)174 184.8 Q(.)-.55 E 37.84 -(dequote Strip)102 201 R .961(double quotes \("\) from a name.)3.461 F +F(\231ali.\214les\232 in that order)174 397.8 Q(.)-.55 E 37.84 +(dequote Strip)102 414 R .961(double quotes \("\) from a name.)3.461 F .96(It does not strip backslashes, and will not)5.961 F .172 -(strip quotes if the resulting string w)174 213 R .173 +(strip quotes if the resulting string w)174 426 R .173 (ould contain unscannable syntax \(that is, basic)-.1 F .386(errors lik) -174 225 R 2.886(eu)-.1 G .386(nbalanced angle brack)-2.886 F .386 +174 438 R 2.886(eu)-.1 G .386(nbalanced angle brack)-2.886 F .386 (ets; more sophisticated errors such as unkno)-.1 F(wn)-.25 E .251 -(hosts are not check)174 237 R 2.751(ed\). The)-.1 F .251 +(hosts are not check)174 450 R 2.751(ed\). The)-.1 F .251 (intent is for use when trying to accept mail from sys-)2.751 F -(tems such as DECnet that routinely quote odd syntax such as)174 249 Q -("49ers::ubell")214 265.2 Q 2.5(At)174 281.4 S +(tems such as DECnet that routinely quote odd syntax such as)174 462 Q +("49ers::ubell")214 478.2 Q 2.5(At)174 494.4 S (ypical usage is probably something lik)-2.5 E(e:)-.1 E -(Kdequote dequote)214 297.6 Q(...)214 321.6 Q 88.19(R$\255 $:)214 345.6 -R($\(dequote $1 $\))2.5 E(R$\255 $+)214 357.6 Q($: $>3 $1 $2)77.55 E -(Care must be tak)174 373.8 Q(en to pre)-.1 E -.15(ve)-.25 G(nt une).15 +(Kdequote dequote)214 510.6 Q(...)214 534.6 Q 88.19(R$\255 $:)214 558.6 +R($\(dequote $1 $\))2.5 E(R$\255 $+)214 570.6 Q($: $>3 $1 $2)77.55 E +(Care must be tak)174 586.8 Q(en to pre)-.1 E -.15(ve)-.25 G(nt une).15 E(xpected results; for e)-.15 E(xample,)-.15 E -("|someprogram < input > output")214 390 Q 1.31(will ha)174 406.2 R 1.61 +("|someprogram < input > output")214 603 Q 1.31(will ha)174 619.2 R 1.61 -.15(ve q)-.2 H 1.31(uotes stripped, b).15 F 1.31 (ut the result is probably not what you had in mind.)-.2 F -.15(Fo)174 -418.2 S(rtunately these cases are rare.).15 E(re)102 434.4 Q(ge)-.15 E +631.2 S(rtunately these cases are rare.).15 E(re)102 647.4 Q(ge)-.15 E 50.09(xT)-.15 G .488(he map de\214nition on the)-50.09 F F0(K)2.988 E F1 .489(line contains a re)2.988 F .489(gular e)-.15 F 2.989(xpression. An) -.15 F 2.989(yk)-.15 G .789 -.15(ey i)-3.089 H .489(nput is).15 F 1.454 -(compared to that e)174 446.4 R 1.454(xpression using the POSIX re)-.15 +(compared to that e)174 659.4 R 1.454(xpression using the POSIX re)-.15 F 1.454(gular e)-.15 F 1.454(xpressions routines re)-.15 F(g-)-.15 E .29 -(comp\(\), re)174 458.4 R .291(gerr\(\), and re)-.15 F(ge)-.15 E -.15 +(comp\(\), re)174 671.4 R .291(gerr\(\), and re)-.15 F(ge)-.15 E -.15 (xe)-.15 G 2.791(c\(\). Refer).15 F .291 (to the documentation for those routines for)2.791 F .356 -(more information about the re)174 470.4 R .356(gular e)-.15 F .355 +(more information about the re)174 683.4 R .356(gular e)-.15 F .355 (xpression matching.)-.15 F .355(No re)5.355 F .355(writing of the k) --.25 F -.15(ey)-.1 G .074(is done if the)174 482.4 R F02.574 E F1 +-.25 F -.15(ey)-.1 G .074(is done if the)174 695.4 R F02.574 E F1 .074(\215ag is used.)2.574 F -.4(Wi)5.074 G .074(thout it, the k).4 F .375 -.15(ey i)-.1 H 2.575(sd).15 G .075(iscarded or if)-2.575 F F0 2.575 E F1 .075(if used, it is)2.575 F .905 -(substituted by the substring matches, delimited by)174 494.4 R F0($|) -3.405 E F1 .905(or the string speci\214ed with)3.405 F(the the)174 506.4 +(substituted by the substring matches, delimited by)174 707.4 R F0($|) +3.405 E F1 .905(or the string speci\214ed with)3.405 F(the the)174 719.4 Q F02.5 E F1 2.5(\215ag. The)2.5 F(\215ags a)2.5 E -.25(va)-.2 G -(ilable for the map are).25 E 9.17(-n not)214 522.6 R 10.84(-f case)214 -534.6 R(sensiti)2.5 E -.15(ve)-.25 G 9.17(-b basic)214 546.6 R(re)2.5 E -(gular e)-.15 E(xpressions \(def)-.15 E(ault is e)-.1 E(xtended\))-.15 E -10.28(-s substring)214 558.6 R(match)2.5 E 9.17(-d set)214 570.6 R -(the delimiter used for -s)2.5 E 9.73(-a append)214 582.6 R(string to k) -2.5 E -.15(ey)-.1 G 6.39(-m match)214 594.6 R(only)2.5 E 2.5(,d)-.65 G -2.5(on)-2.5 G(ot replace/discard v)-2.5 E(alue)-.25 E 6.95(-D perform) -214 606.6 R(no lookup in deferred deli)2.5 E -.15(ve)-.25 G(ry mode.).15 -E(The)174 622.8 Q F02.55 E F1 .051(\215ag can include an optional\ - parameter which can be used to select the sub-)2.55 F -(strings in the result of the lookup.)174 634.8 Q -.15(Fo)5 G 2.5(re).15 -G(xample,)-2.65 E(-s1,3,4)214 651 Q .697(Notes: to match a)174 667.2 R -F0($)3.197 E F1 .697(in a string, \\$$ must be used.)3.197 F .697 -(If the pattern contains spaces,)5.697 F(the)174 679.2 Q 4.424(ym)-.15 G -1.924(ust be replaced with the blank substitution character)-4.424 F -4.424(,u)-.4 G 1.925(nless it is space)-4.424 F(itself.)174 691.2 Q -35.62(program The)102 707.4 R(ar)2.545 E .045(guments on the)-.18 F F0 -(K)2.545 E F1 .045(line are the pathname to a program and an)2.545 F -2.544(yi)-.15 G .044(nitial param-)-2.544 F 2.538(eters to be passed.) -174 719.4 R 2.538(When the map is called, the k)7.538 F 2.838 -.15(ey i) --.1 H 5.038(sa).15 G 2.538(dded to the initial)-5.038 F 0 Cg EP -%%Page: 82 78 +(ilable for the map are).25 E 0 Cg EP +%%Page: 83 79 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-82 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF .386 -(parameters and the program is in)174 96 R -.2(vo)-.4 G -.1(ke).2 G -2.886(da).1 G 2.886(st)-2.886 G .386(he def)-2.886 F .386 -(ault user/group id.)-.1 F .386(The \214rst line)5.386 F .269 -(of standard output is returned as the v)174 108 R .269 -(alue of the lookup.)-.25 F .27(This has man)5.27 F 2.77(yp)-.15 G -(otential)-2.77 E 1.975(security problems, and has terrible performance\ -; it should be used only when)174 120 R(absolutely necessary)174 132 Q -(.)-.65 E 44.51(macro Set)102 148.2 R .32(or clear a macro v)2.82 F 2.82 -(alue. T)-.25 F 2.82(os)-.8 G .32(et a macro, pass the v)-2.82 F .32 +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-83)195.86 E/F1 10/Times-Roman@0 SF 9.17(-n not)214 96 R 10.84 +(-f case)214 108 R(sensiti)2.5 E -.15(ve)-.25 G 9.17(-b basic)214 120 R +(re)2.5 E(gular e)-.15 E(xpressions \(def)-.15 E(ault is e)-.1 E +(xtended\))-.15 E 10.28(-s substring)214 132 R(match)2.5 E 9.17(-d set) +214 144 R(the delimiter used for -s)2.5 E 9.73(-a append)214 156 R +(string to k)2.5 E -.15(ey)-.1 G 6.39(-m match)214 168 R(only)2.5 E 2.5 +(,d)-.65 G 2.5(on)-2.5 G(ot replace/discard v)-2.5 E(alue)-.25 E 6.95 +(-D perform)214 180 R(no lookup in deferred deli)2.5 E -.15(ve)-.25 G +(ry mode.).15 E(The)174 196.2 Q F02.55 E F1 .051(\215ag can inclu\ +de an optional parameter which can be used to select the sub-)2.55 F +(strings in the result of the lookup.)174 208.2 Q -.15(Fo)5 G 2.5(re).15 +G(xample,)-2.65 E(-s1,3,4)214 224.4 Q .697(Notes: to match a)174 240.6 R +F0($)3.197 E F1 .697(in a string, \\$$ must be used.)3.197 F .697 +(If the pattern contains spaces,)5.697 F(the)174 252.6 Q 4.424(ym)-.15 G +1.924(ust be replaced with the blank substitution character)-4.424 F +4.424(,u)-.4 G 1.925(nless it is space)-4.424 F(itself.)174 264.6 Q +35.62(program The)102 280.8 R(ar)2.545 E .045(guments on the)-.18 F F0 +(K)2.545 E F1 .045(line are the pathname to a program and an)2.545 F +2.544(yi)-.15 G .044(nitial param-)-2.544 F .175(eters to be passed.)174 +292.8 R .176(When the map is called, the k)5.175 F .476 -.15(ey i)-.1 H +2.676(sa).15 G .176(dded to the initial parame-)-2.676 F .112 +(ters and the program is in)174 304.8 R -.2(vo)-.4 G -.1(ke).2 G 2.612 +(da).1 G 2.612(st)-2.612 G .112(he def)-2.612 F .112 +(ault user/group id.)-.1 F .112(The \214rst line of stan-)5.112 F .508 +(dard output is returned as the v)174 316.8 R .508(alue of the lookup.) +-.25 F .508(This has man)5.508 F 3.008(yp)-.15 G .508(otential secu-) +-3.008 F 1.278(rity problems, and has terrible performance; it should b\ +e used only when abso-)174 328.8 R(lutely necessary)174 340.8 Q(.)-.65 E +44.51(macro Set)102 357 R .32(or clear a macro v)2.82 F 2.82(alue. T) +-.25 F 2.82(os)-.8 G .32(et a macro, pass the v)-2.82 F .32 (alue as the \214rst ar)-.25 F .32(gument in)-.18 F .939 -(the map lookup.)174 160.2 R 2.539 -.8(To c)5.939 H .939 +(the map lookup.)174 369 R 2.539 -.8(To c)5.939 H .939 (lear a macro, do not pass an ar).8 F .938(gument in the map lookup.) --.18 F(The map al)174 172.2 Q -.1(wa)-.1 G(ys returns the empty string.) -.1 E(Example of typical usage include:)5 E(Kstorage macro)214 188.4 Q -(...)214 212.4 Q 2.5(#s)214 236.4 S -(et macro ${MyMacro} to the ruleset match)-2.5 E .19(R$+ $:)214 248.4 R -($\(storage {MyMacro} $@ $1 $\) $1)2.5 E 2.5(#s)214 260.4 S -(et macro ${MyMacro} to an empty string)-2.5 E .83(R$* $:)214 272.4 R -($\(storage {MyMacro} $@ $\) $1)2.5 E 2.5(#c)214 284.4 S -(lear macro ${MyMacro})-2.5 E .19(R$\255 $:)214 296.4 R -($\(storage {MyMacro} $\) $1)2.5 E 51.17(arith Perform)102 316.8 R .493 +-.18 F(The map al)174 381 Q -.1(wa)-.1 G(ys returns the empty string.).1 +E(Example of typical usage include:)5 E(Kstorage macro)214 397.2 Q(...) +214 421.2 Q 2.5(#s)214 445.2 S(et macro ${MyMacro} to the ruleset match) +-2.5 E .19(R$+ $:)214 457.2 R($\(storage {MyMacro} $@ $1 $\) $1)2.5 E +2.5(#s)214 469.2 S(et macro ${MyMacro} to an empty string)-2.5 E .83 +(R$* $:)214 481.2 R($\(storage {MyMacro} $@ $\) $1)2.5 E 2.5(#c)214 +493.2 S(lear macro ${MyMacro})-2.5 E .19(R$\255 $:)214 505.2 R +($\(storage {MyMacro} $\) $1)2.5 E 51.17(arith Perform)102 525.6 R .493 (simple arithmetic operations.)2.993 F .494(The operation is gi)5.493 F -.15(ve)-.25 G 2.994(na).15 G 2.994(sk)-2.994 G -.15(ey)-3.094 G 2.994 (,c)-.5 G .494(urrently +,)-2.994 F .245(-, *, /, %, |, & \(bitwise OR,\ - AND\), l \(for less than\), =, and r \(for random\) are sup-)174 328.8 -R 3.21(ported. The)174 340.8 R(tw)3.21 E 3.21(oo)-.1 G .71 + AND\), l \(for less than\), =, and r \(for random\) are sup-)174 537.6 +R 3.21(ported. The)174 549.6 R(tw)3.21 E 3.21(oo)-.1 G .71 (perands are gi)-3.21 F -.15(ve)-.25 G 3.21(na).15 G 3.21(sa)-3.21 G -.18(rg)-3.21 G 3.21(uments. The).18 F .71(lookup returns the result) -3.21 F 1.374(of the computation, i.e.,)174 352.8 R/F2 9/Times-Roman@0 SF +3.21 F 1.374(of the computation, i.e.,)174 561.6 R/F2 9/Times-Roman@0 SF (TR)3.874 E(UE)-.36 E F1(or)3.874 E F2 -.666(FA)3.874 G(LSE).666 E F1 1.374(for comparisons, inte)3.874 F 1.374(ger v)-.15 F 1.373 -(alues other)-.25 F(-)-.2 E 3.211(wise. The)174 364.8 R 3.212(ro)3.211 G +(alues other)-.25 F(-)-.2 E 3.211(wise. The)174 573.6 R 3.212(ro)3.211 G .712(perator returns a pseudo-random number whose v)-3.212 F .712 (alue lies between)-.25 F .538(the \214rst and second operand \(which r\ -equires that the \214rst operand is smaller than)174 376.8 R 2.133 -(the second\).)174 388.8 R 2.133 +equires that the \214rst operand is smaller than)174 585.6 R 2.133 +(the second\).)174 597.6 R 2.133 (All options which are possible for maps are ignored.)7.133 F 4.634(As) -7.134 G(imple)-4.634 E -.15(ex)174 400.8 S(ample is:).15 E(Kcomp arith) -214 417 Q(...)214 441 Q(Scheck_etrn)214 465 Q .83(R$* $:)214 477 R -($\(comp l $@ $&{load_a)2.5 E(vg} $@ 7 $\) $1)-.2 E(RF)214 489 Q -(ALSE$# error ...)-.74 E(sock)102 509.4 Q 44.05(et The)-.1 F(sock)3.232 -E .732(et map uses a simple request/reply protocol o)-.1 F -.15(ve)-.15 -G 3.231(rT).15 G .731(CP or UNIX domain)-3.231 F(sock)174 521.4 Q .753 +7.134 G(imple)-4.634 E -.15(ex)174 609.6 S(ample is:).15 E(Kcomp arith) +214 625.8 Q(...)214 649.8 Q(Scheck_etrn)214 673.8 Q .83(R$* $:)214 685.8 +R($\(comp l $@ $&{load_a)2.5 E(vg} $@ 7 $\) $1)-.2 E(RF)214 697.8 Q +(ALSE$# error ...)-.74 E 0 Cg EP +%%Page: 84 80 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-84 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(sock)102 +96 Q 44.05(et The)-.1 F(sock)3.232 E .732 +(et map uses a simple request/reply protocol o)-.1 F -.15(ve)-.15 G +3.231(rT).15 G .731(CP or UNIX domain)-3.231 F(sock)174 108 Q .753 (ets to query an e)-.1 F .753(xternal serv)-.15 F(er)-.15 E 5.753(.B) -.55 G .753(oth requests and replies are te)-5.753 F .753(xt based and) -.15 F(encoded as netstrings, i.e., a string "hello there" becomes:)174 -533.4 Q(11:hello there,)214 549.6 Q -(Note: neither requests nor replies end with CRLF)174 565.8 Q(.)-.8 E +120 Q(11:hello there,)214 136.2 Q +(Note: neither requests nor replies end with CRLF)174 152.4 Q(.)-.8 E .301(The request consists of the database map name and the lookup k)174 -589.8 R .6 -.15(ey s)-.1 H .3(eparated by a).15 F(space character:)174 -601.8 Q( ' ' ).15 E(The serv)174 -658.2 Q(er responds with a status indicator and the result \(if an)-.15 -E(y\):)-.15 E( ' ' )214 686.4 Q .161(The status indicat\ -or speci\214es the result of the lookup operation itself and is one of) -174 714.6 R 0 Cg EP -%%Page: 83 79 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-83)195.86 E/F1 10/Times-Roman@0 SF(the follo)174 96 Q -(wing upper case w)-.25 E(ords:)-.1 E 28.06(OK the)214 112.2 R -.1(ke) -2.5 G 2.5(yw)-.05 G(as found, result contains the look)-2.6 E(ed up v) --.1 E(alue)-.25 E(NO)214 124.2 Q(TFOUNDthe k)-.4 E .3 -.15(ey w)-.1 H -(as not found, the result is empty).05 E 15.83(TEMP a)214 136.2 R -(temporary f)2.5 E(ailure occured)-.1 E -2.49(TIMEOUT a)214 148.2 R -(timeout occured on the serv)2.5 E(er side)-.15 E 15.27(PERM a)214 160.2 +176.4 R .6 -.15(ey s)-.1 H .3(eparated by a).15 F(space character:)174 +188.4 Q( ' ' ).15 E(The serv)174 +244.8 Q(er responds with a status indicator and the result \(if an)-.15 +E(y\):)-.15 E( ' ' )214 273 Q .161(The status indicator\ + speci\214es the result of the lookup operation itself and is one of)174 +301.2 R(the follo)174 313.2 Q(wing upper case w)-.25 E(ords:)-.1 E 28.06 +(OK the)214 329.4 R -.1(ke)2.5 G 2.5(yw)-.05 G +(as found, result contains the look)-2.6 E(ed up v)-.1 E(alue)-.25 E(NO) +214 341.4 Q(TFOUNDthe k)-.4 E .3 -.15(ey w)-.1 H +(as not found, the result is empty).05 E 15.83(TEMP a)214 353.4 R +(temporary f)2.5 E(ailure occured)-.1 E -2.49(TIMEOUT a)214 365.4 R +(timeout occured on the serv)2.5 E(er side)-.15 E 15.27(PERM a)214 377.4 R(permanent f)2.5 E(ailure occured)-.1 E .26 -(In case of errors \(status TEMP)174 188.4 R 2.76(,T)-1.11 G .26 +(In case of errors \(status TEMP)174 405.6 R 2.76(,T)-1.11 G .26 (IMEOUT or PERM\) the result \214eld may contain)-2.76 F .818(an e)174 -200.4 R .818(xplanatory message.)-.15 F(Ho)5.818 E(we)-.25 E -.15(ve) +417.6 R .818(xplanatory message.)-.15 F(Ho)5.818 E(we)-.25 E -.15(ve) -.25 G 1.618 -.4(r, t).15 H .818(he e).4 F .818 (xplanatory message is not used an)-.15 F 3.319(yf)-.15 G(ur)-3.319 E(-) --.2 E(ther by)174 212.4 Q/F2 10/Times-Italic@0 SF(sendmail)2.5 E F1(.)A -(Example replies:)174 236.4 Q(31:OK resolv)214 252.6 Q(ed.address@e)-.15 +-.2 E(ther by)174 429.6 Q/F2 10/Times-Italic@0 SF(sendmail)2.5 E F1(.)A +(Example replies:)174 453.6 Q(31:OK resolv)214 469.8 Q(ed.address@e)-.15 E(xample.com,)-.15 E -(56:OK error:550 5.7.1 User does not accept mail from sender)214 285 Q -(,)-.4 E(in case of successful lookups, or:)174 313.2 Q(8:NO)214 329.4 Q -(TFOUND,)-.4 E(in case the k)174 357.6 Q .3 -.15(ey w)-.1 H -(as not found, or:).05 E(55:TEMP this te)214 373.8 Q(xt e)-.15 E +(56:OK error:550 5.7.1 User does not accept mail from sender)214 502.2 Q +(,)-.4 E(in case of successful lookups, or:)174 530.4 Q(8:NO)214 546.6 Q +(TFOUND,)-.4 E(in case the k)174 574.8 Q .3 -.15(ey w)-.1 H +(as not found, or:).05 E(55:TEMP this te)214 591 Q(xt e)-.15 E (xplains that we had a temporary f)-.15 E(ailure,)-.1 E -(in case of a temporary map lookup f)174 402 Q(ailure.)-.1 E 1.187 -(The sock)174 426 R 1.186(et map uses the same syntax as milters \(see \ -Section "X \212 Mail Filter)-.1 F +(in case of a temporary map lookup f)174 619.2 Q(ailure.)-.1 E 1.187 +(The sock)174 643.2 R 1.186(et map uses the same syntax as milters \(se\ +e Section "X \212 Mail Filter)-.1 F (\(Milter\) De\214nitions"\) to specify the remote endpoint, e.g.,)174 -438 Q(Ksock)214 454.2 Q(et mySock)-.1 E(etMap inet:12345@127.0.0.1)-.1 E -.492(If multiple sock)174 482.4 R .492 +655.2 Q(Ksock)214 671.4 Q(et mySock)-.1 E(etMap inet:12345@127.0.0.1)-.1 +E .492(If multiple sock)174 699.6 R .492 (et maps de\214ne the same remote endpoint, the)-.1 F 2.993(yw)-.15 G -.493(ill share a single)-2.993 F(connection to this endpoint.)174 494.4 -Q .488(Most of these accept as ar)127 510.6 R .488 +.493(ill share a single)-2.993 F(connection to this endpoint.)174 711.6 +Q 0 Cg EP +%%Page: 85 81 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-85)195.86 E/F1 10/Times-Roman@0 SF .488 +(Most of these accept as ar)127 96 R .488 (guments the same optional \215ags and a \214lename \(or a mapname for) -.18 F .31(NIS; the \214lename is the root of the database path, so tha\ -t \231.db\232 or some other e)102 522.6 R .31(xtension appropriate)-.15 -F +t \231.db\232 or some other e)102 108 R .31(xtension appropriate)-.15 F (for the database type will be added to get the actual database name\).) -102 534.6 Q(Kno)5 E(wn \215ags are:)-.25 E 58.86(\255o Indicates)102 -550.8 R 1.147(that this map is optional \212 that is, if it cannot be o\ -pened, no error is)3.648 F(produced, and)174 562.8 Q F2(sendmail)2.5 E -F1(will beha)2.5 E .3 -.15(ve a)-.2 H 2.5(si).15 G 2.5(ft)-2.5 G -(he map e)-2.5 E(xisted b)-.15 E(ut w)-.2 E(as empty)-.1 E(.)-.65 E -(\255N, \255O)102 579 Q .696(If neither)41.28 F F03.197 E F1(or) -3.197 E F03.197 E F1 .697(are speci\214ed,)3.197 F F2(sendmail) -3.197 E F1 .697(uses an adapti)3.197 F .997 -.15(ve a)-.25 H .697 -(lgorithm to decide).15 F .108 -(whether or not to look for null bytes on the end of k)174 591 R -.15 +102 120 Q(Kno)5 E(wn \215ags are:)-.25 E 58.86(\255o Indicates)102 136.2 +R 1.147(that this map is optional \212 that is, if it cannot be opened,\ + no error is)3.648 F(produced, and)174 148.2 Q/F2 10/Times-Italic@0 SF +(sendmail)2.5 E F1(will beha)2.5 E .3 -.15(ve a)-.2 H 2.5(si).15 G 2.5 +(ft)-2.5 G(he map e)-2.5 E(xisted b)-.15 E(ut w)-.2 E(as empty)-.1 E(.) +-.65 E(\255N, \255O)102 164.4 Q .696(If neither)41.28 F F03.197 E +F1(or)3.197 E F03.197 E F1 .697(are speci\214ed,)3.197 F F2 +(sendmail)3.197 E F1 .697(uses an adapti)3.197 F .997 -.15(ve a)-.25 H +.697(lgorithm to decide).15 F .108 +(whether or not to look for null bytes on the end of k)174 176.4 R -.15 (ey)-.1 G 2.608(s. It).15 F .107(starts by trying both; if)2.608 F .819 -(it \214nds an)174 603 R 3.319(yk)-.15 G 1.119 -.15(ey w)-3.419 H .819 +(it \214nds an)174 188.4 R 3.319(yk)-.15 G 1.119 -.15(ey w)-3.419 H .819 (ith a null byte it ne).15 F -.15(ve)-.25 G 3.319(rt).15 G .82(ries ag) --3.319 F .82(ain without a null byte and vice)-.05 F -.15(ve)174 615 S +-3.319 F .82(ain without a null byte and vice)-.05 F -.15(ve)174 200.4 S 2.828(rsa. If).15 F F02.828 E F1 .328(is speci\214ed it ne)2.828 F -.15(ve)-.25 G 2.828(rt).15 G .328(ries without a null byte and if) --2.828 F F02.827 E F1 .327(is speci\214ed it)2.827 F(ne)174 627 Q --.15(ve)-.25 G 2.886(rt).15 G .386(ries with a null byte.)-2.886 F .386 -(Setting one of these can speed matches b)5.386 F .386(ut are ne)-.2 F --.15(ve)-.25 G(r).15 E(necessary)174 639 Q 5.546(.I)-.65 G 3.046(fb) +-2.828 F F02.827 E F1 .327(is speci\214ed it)2.827 F(ne)174 212.4 +Q -.15(ve)-.25 G 2.886(rt).15 G .386(ries with a null byte.)-2.886 F +.386(Setting one of these can speed matches b)5.386 F .386(ut are ne)-.2 +F -.15(ve)-.25 G(r).15 E(necessary)174 224.4 Q 5.546(.I)-.65 G 3.046(fb) -5.546 G(oth)-3.046 E F03.046 E F1(and)3.046 E F03.046 E F1 .545(are speci\214ed,)3.045 F F2(sendmail)3.045 E F1 .545(will ne)3.045 F -.15(ve)-.25 G 3.045(rt).15 G .545(ry an)-3.045 F 3.045(ym)-.15 G -(atches)-3.045 E(at all \212 that is, e)174 651 Q -.15(ve)-.25 G -(rything will appear to f).15 E(ail.)-.1 E102 667.2 Q F2(x)A F1 +(atches)-3.045 E(at all \212 that is, e)174 236.4 Q -.15(ve)-.25 G +(rything will appear to f).15 E(ail.)-.1 E102 252.6 Q F2(x)A F1 1.356(Append the string)57.48 F F2(x)3.856 E F1 1.357 (on successful matches.)3.856 F -.15(Fo)6.357 G 3.857(re).15 G 1.357 (xample, the def)-4.007 F(ault)-.1 E F2(host)3.857 E F1(map)3.857 E -(appends a dot on successful matches.)174 679.2 Q102 695.4 Q F2(x) +(appends a dot on successful matches.)174 264.6 Q102 280.8 Q F2(x) A F1 .021(Append the string)55.81 F F2(x)2.521 E F1 .021(on temporary f) 2.521 F 2.521(ailures. F)-.1 F .021(or e)-.15 F(xample,)-.15 E F2(x) 2.521 E F1 -.1(wo)2.521 G .02(uld be appended if a).1 F .72 -(DNS lookup returned \231serv)174 707.4 R .72(er f)-.15 F .72 +(DNS lookup returned \231serv)174 292.8 R .72(er f)-.15 F .72 (ailed\232 or an NIS lookup could not locate a serv)-.1 F(er)-.15 E(.) --.55 E(See also the)174 719.4 Q F02.5 E F1(\215ag.)2.5 E 0 Cg EP -%%Page: 84 80 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-84 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 60.53 -(\255f Do)102 96 R(not fold upper to lo)2.5 E +-.55 E(See also the)174 304.8 Q F02.5 E F1(\215ag.)2.5 E 60.53 +(\255f Do)102 321 R(not fold upper to lo)2.5 E (wer case before looking up the k)-.25 E -.15(ey)-.1 G(.)-.5 E 56.08 -(\255m Match)102 112.2 R .4(only \(without replacing the v)2.9 F 2.899 +(\255m Match)102 337.2 R .4(only \(without replacing the v)2.9 F 2.899 (alue\). If)-.25 F .399(you only care about the e)2.899 F .399 -(xistence of)-.15 F 7.306(ak)174 124.2 S 5.107 -.15(ey a)-7.406 H 4.807 +(xistence of)-.15 F 7.306(ak)174 349.2 S 5.107 -.15(ey a)-7.406 H 4.807 (nd not the v).15 F 4.807 (alue \(as you might when searching the NIS map)-.25 F 1.947 -(\231hosts.byname\232 for e)174 136.2 R 1.947(xample\), this \215ag pre) +(\231hosts.byname\232 for e)174 361.2 R 1.947(xample\), this \215ag pre) -.15 F -.15(ve)-.25 G 1.947(nts the map from substituting the).15 F -.25 -(va)174 148.2 S 2.849(lue. Ho).25 F(we)-.25 E -.15(ve)-.25 G 1.149 -.4 +(va)174 373.2 S 2.849(lue. Ho).25 F(we)-.25 E -.15(ve)-.25 G 1.149 -.4 (r, T).15 H .349(he \255a ar).4 F .349 (gument is still appended on a match, and the def)-.18 F .35(ault is)-.1 -F(still tak)174 160.2 Q(en if the match f)-.1 E(ails.)-.1 E102 -176.4 Q/F2 10/Times-Italic@0 SF -.1(ke)C(ycol)-.2 E F1 .52(The k)36.22 F -.82 -.15(ey c)-.1 H .519(olumn name \(for NIS+\) or number \(for te).15 -F .519(xt lookups\).)-.15 F -.15(Fo)5.519 G 3.019(rL).15 G -.4(DA)-3.019 -G 3.019(Pm).4 G(aps)-3.019 E .972(this is an LD)174 188.4 R .973(AP \ -\214lter string in which %s is replaced with the literal contents of)-.4 -F .249(the lookup k)174 200.4 R .549 -.15(ey a)-.1 H .249 +F(still tak)174 385.2 Q(en if the match f)-.1 E(ails.)-.1 E102 +401.4 Q F2 -.1(ke)C(ycol)-.2 E F1 .52(The k)36.22 F .82 -.15(ey c)-.1 H +.519(olumn name \(for NIS+\) or number \(for te).15 F .519 +(xt lookups\).)-.15 F -.15(Fo)5.519 G 3.019(rL).15 G -.4(DA)-3.019 G +3.019(Pm).4 G(aps)-3.019 E .972(this is an LD)174 413.4 R .973(AP \214l\ +ter string in which %s is replaced with the literal contents of)-.4 F +.249(the lookup k)174 425.4 R .549 -.15(ey a)-.1 H .249 (nd %0 is replaced with the LD).15 F .248 -(AP escaped contents of the lookup)-.4 F -.1(ke)174 212.4 S 4.176(ya) +(AP escaped contents of the lookup)-.4 F -.1(ke)174 437.4 S 4.176(ya) -.05 G 1.676(ccording to RFC 2254.)-4.176 F 1.676(If the \215ag)6.676 F F04.176 E F1 1.676(is used, then %1 through %9 are)4.176 F .887 -(replaced with the LD)174 224.4 R .887(AP escaped contents of the ar)-.4 -F .886(guments speci\214ed in the map)-.18 F(lookup.)174 236.4 Q -102 252.6 Q F2(valcol)A F1 1.928(The v)36.92 F 1.928 +(replaced with the LD)174 449.4 R .887(AP escaped contents of the ar)-.4 +F .886(guments speci\214ed in the map)-.18 F(lookup.)174 461.4 Q +102 477.6 Q F2(valcol)A F1 1.928(The v)36.92 F 1.928 (alue column name \(for NIS+\) or number \(for te)-.25 F 1.929 (xt lookups\).)-.15 F -.15(Fo)6.929 G 4.429(rL).15 G -.4(DA)-4.429 G(P) -.4 E .467(maps this is the name of one or more attrib)174 264.6 R .467 +.4 E .467(maps this is the name of one or more attrib)174 489.6 R .467 (utes to be returned; multiple attrib)-.2 F(utes)-.2 E 1.216 -(can be separated by commas.)174 276.6 R 1.216 +(can be separated by commas.)174 501.6 R 1.216 (If not speci\214ed, all attrib)6.216 F 1.216(utes found in the match) --.2 F 1.328(will be returned.)174 288.6 R 1.328(The attrib)6.328 F 1.328 +-.2 F 1.328(will be returned.)174 513.6 R 1.328(The attrib)6.328 F 1.328 (utes listed can also include a type and one or more)-.2 F -(objectClass v)174 300.6 Q(alues for matching as described in the LD) --.25 E(AP section.)-.4 E102 316.8 Q F2(delim)A F1 .218 +(objectClass v)174 525.6 Q(alues for matching as described in the LD) +-.25 E(AP section.)-.4 E102 541.8 Q F2(delim)A F1 .218 (The column delimiter \(for te)39.7 F .218(xt lookups\).)-.15 F .219 (It can be a single character or one of the)5.219 F 1.826 -(special strings \231)174 328.8 R 1.826(\\n\232 or \231)1.666 F 1.826 +(special strings \231)174 553.8 R 1.826(\\n\232 or \231)1.666 F 1.826 (\\t\232 to indicate ne)1.666 F 1.825(wline or tab respecti)-.25 F -.15 (ve)-.25 G(ly).15 E 6.825(.I)-.65 G 4.325(fo)-6.825 G(mitted)-4.325 E -(entirely)174 340.8 Q 3.566(,t)-.65 G 1.066(he column separator is an) +(entirely)174 565.8 Q 3.566(,t)-.65 G 1.066(he column separator is an) -3.566 F 3.567(ys)-.15 G 1.067(equence of white space.)-3.567 F -.15(Fo) 6.067 G 3.567(rL).15 G -.4(DA)-3.567 G 3.567(Pm).4 G(aps)-3.567 E 2.062 -(this is the separator character to combine multiple v)174 352.8 R 2.061 -(alues into a single return)-.25 F 3.71(string. If)174 364.8 R 1.21 +(this is the separator character to combine multiple v)174 577.8 R 2.061 +(alues into a single return)-.25 F 3.71(string. If)174 589.8 R 1.21 (not set, the LD)3.71 F 1.211 (AP lookup will only return the \214rst match found.)-.4 F -.15(Fo)6.211 G(r).15 E .101(DNS maps this is the separator character at which the re\ -sult of a query is cut of)174 376.8 R 2.6(fi)-.25 G(f)-2.6 E -(is too long.)174 388.8 Q 61.08(\255t Normally)102 405 R 2.726(,w)-.65 G +sult of a query is cut of)174 601.8 R 2.6(fi)-.25 G(f)-2.6 E +(is too long.)174 613.8 Q 61.08(\255t Normally)102 630 R 2.726(,w)-.65 G .226(hen a map attempts to do a lookup and the serv)-2.726 F .227(er f) --.15 F .227(ails \(e.g.,)-.1 F F2(sendmail)2.727 E F1(couldn')174 417 Q +-.15 F .227(ails \(e.g.,)-.1 F F2(sendmail)2.727 E F1(couldn')174 642 Q 2.776(tc)-.18 G .276(ontact an)-2.776 F 2.776(yn)-.15 G .276(ame serv) -2.776 F .276(er; this is)-.15 F F2(not)2.776 E F1 .276 (the same as an entry not being found)2.776 F .251(in the map\), the me\ -ssage being processed is queued for future processing.)174 429 R(The) -5.251 E F02.751 E F1 2.04(\215ag turns of)174 441 R 4.539(ft)-.25 +ssage being processed is queued for future processing.)174 654 R(The) +5.251 E F02.751 E F1 2.04(\215ag turns of)174 666 R 4.539(ft)-.25 G 2.039(his beha)-4.539 F(vior)-.2 E 4.539(,l)-.4 G 2.039 (etting the temporary f)-4.539 F 2.039(ailure \(serv)-.1 F 2.039(er do) -.15 F 2.039(wn\) act as)-.25 F .675(though it were a permanent f)174 -453 R .675(ailure \(entry not found\).)-.1 F .676 +678 R .675(ailure \(entry not found\).)-.1 F .676 (It is particularly useful for)5.676 F .772 -(DNS lookups, where someone else')174 465 R 3.272(sm)-.55 G .772 +(DNS lookups, where someone else')174 690 R 3.272(sm)-.55 G .772 (iscon\214gured name serv)-3.272 F .772(er can cause prob-)-.15 F 1.645 -(lems on your machine.)174 477 R(Ho)6.645 E(we)-.25 E -.15(ve)-.25 G +(lems on your machine.)174 702 R(Ho)6.645 E(we)-.25 E -.15(ve)-.25 G 2.445 -.4(r, c).15 H 1.645(are must be tak).4 F 1.646 -(en to ensure that you don')-.1 F(t)-.18 E .263(bounce mail that w)174 -489 R .263(ould be resolv)-.1 F .262(ed correctly if you tried ag)-.15 F -2.762(ain. A)-.05 F .262(common strat-)2.762 F -.15(eg)174 501 S 2.5(yi) -.15 G 2.5(st)-2.5 G 2.5(of)-2.5 G(orw)-2.5 E(ard such mail to another) --.1 E 2.5(,p)-.4 G(ossibly better connected, mail serv)-2.5 E(er)-.15 E -(.)-.55 E 56.64(\255D Perform)102 517.2 R .833 -(no lookup in deferred deli)3.332 F -.15(ve)-.25 G .833(ry mode.).15 F -.833(This \215ag is set by def)5.833 F .833(ault for the)-.1 F F2(host) -174 529.2 Q F1(map.)2.5 E102 545.4 Q F2(spacesub)A F1 1.538(The c\ -haracter to use to replace space characters after a successful map look\ -up)24.14 F(\(esp. useful for re)174 557.4 Q(ge)-.15 E 2.5(xa)-.15 G -(nd syslog maps\).)-2.5 E102 573.6 Q F2(spacesub)A F1 -.15(Fo) -25.81 G 3.1(rt).15 G .6(he dequote map only)-3.1 F 3.101(,t)-.65 G .601 +(en to ensure that you don')-.1 F(t)-.18 E 2.205(bounce mail that w)174 +714 R 2.205(ould be resolv)-.1 F 2.205(ed correctly if you tried ag)-.15 +F 4.705(ain. A)-.05 F(common)4.705 E 0 Cg EP +%%Page: 86 82 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-86 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(strate) +174 96 Q .279(gy is to forw)-.15 F .279(ard such mail to another)-.1 F +2.779(,p)-.4 G .279(ossibly better connected, mail serv)-2.779 F(er)-.15 +E(.)-.55 E 56.64(\255D Perform)102 112.2 R .833 +(no lookup in deferred deli)3.333 F -.15(ve)-.25 G .833(ry mode.).15 F +.833(This \215ag is set by def)5.833 F .832(ault for the)-.1 F/F2 10 +/Times-Italic@0 SF(host)174 124.2 Q F1(map.)2.5 E102 140.4 Q F2 +(spacesub)A F1 1.537(The character to use to replace space characters a\ +fter a successful map lookup)24.14 F(\(esp. useful for re)174 152.4 Q +(ge)-.15 E 2.5(xa)-.15 G(nd syslog maps\).)-2.5 E102 168.6 Q F2 +(spacesub)A F1 -.15(Fo)25.81 G 3.101(rt).15 G .601(he dequote map only) +-3.101 F 3.101(,t)-.65 G .601 (he character to use to replace space characters after a)-3.101 F -(successful dequote.)174 585.6 Q 58.86(\255q Don')102 601.8 R 2.5(td) +(successful dequote.)174 180.6 Q 58.86(\255q Don')102 196.8 R 2.5(td) -.18 G(equote the k)-2.5 E .3 -.15(ey b)-.1 H(efore lookup.).15 E -102 618 Q F2(le)A(vel)-.15 E F1 -.15(Fo)41.52 G 2.5(rt).15 G +102 213 Q F2(le)A(vel)-.15 E F1 -.15(Fo)41.52 G 2.5(rt).15 G (he syslog map only)-2.5 E 2.5(,i)-.65 G 2.5(ts)-2.5 G (peci\214es the le)-2.5 E -.15(ve)-.25 G 2.5(lt).15 G 2.5(ou)-2.5 G -(se for the syslog call.)-2.5 E 56.64(\255A When)102 634.2 R(reb)3 E .5 +(se for the syslog call.)-2.5 E 56.64(\255A When)102 229.2 R(reb)3 E .5 (uilding an alias \214le, the)-.2 F F03 E F1 .5 (\215ag causes duplicate entries in the te)3 F .5(xt v)-.15 F(er)-.15 E -(-)-.2 E(sion to be mer)174 646.2 Q 2.5(ged. F)-.18 F(or e)-.15 E +(-)-.2 E(sion to be mer)174 241.2 Q 2.5(ged. F)-.18 F(or e)-.15 E (xample, tw)-.15 E 2.5(oe)-.1 G(ntries:)-2.5 E 27.49(list: user1,)214 -662.4 R(user2)2.5 E 27.49(list: user3)214 674.4 R -.1(wo)174 690.6 S +257.4 R(user2)2.5 E 27.49(list: user3)214 269.4 R -.1(wo)174 285.6 S (uld be treated as though it were the single entry).1 E 27.49 -(list: user1,)214 706.8 R(user2, user3)2.5 E(in the presence of the)174 -723 Q F02.5 E F1(\215ag.)2.5 E 0 Cg EP -%%Page: 85 81 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-85)195.86 E/F1 10/Times-Roman@0 SF -(Some additional \215ags are a)127 96 Q -.25(va)-.2 G -(ilable for the host and dns maps:).25 E 58.86(\255d delay:)102 112.2 R -(specify the resolv)2.5 E(er')-.15 E 2.5(sr)-.55 G -(etransmission time interv)-2.5 E(al \(in seconds\).)-.25 E 60.53 -(\255r retry:)102 128.4 R +(list: user1,)214 301.8 R(user2, user3)2.5 E(in the presence of the)174 +318 Q F02.5 E F1(\215ag.)2.5 E(Some additional \215ags are a)127 +334.2 Q -.25(va)-.2 G(ilable for the host and dns maps:).25 E 58.86 +(\255d delay:)102 350.4 R(specify the resolv)2.5 E(er')-.15 E 2.5(sr) +-.55 G(etransmission time interv)-2.5 E(al \(in seconds\).)-.25 E 60.53 +(\255r retry:)102 366.6 R (specify the number of times to retransmit a resolv)2.5 E(er query)-.15 -E(.)-.65 E(The dns map has another \215ag:)127 144.6 Q 57.19 -(\255B basedomain:)102 160.8 R(specify a domain that is al)2.5 E -.1(wa) --.1 G(ys appended to queries.).1 E(The follo)127 177 Q +E(.)-.65 E(The dns map has another \215ag:)127 382.8 Q 57.19 +(\255B basedomain:)102 399 R(specify a domain that is al)2.5 E -.1(wa) +-.1 G(ys appended to queries.).1 E(The follo)127 415.2 Q (wing additional \215ags are present in the ldap map only:)-.25 E 57.19 -(\255R Do)102 193.2 R .025(not auto chase referrals.)2.525 F .025 +(\255R Do)102 431.4 R .025(not auto chase referrals.)2.525 F .025 (sendmail must be compiled with)5.025 F F0(\255DLD)2.525 E(AP_REFER-) --.35 E(RALS)174 205.2 Q F1(to use this \215ag.)2.5 E 58.86(\255n Retrie) -102 221.4 R .3 -.15(ve a)-.25 H(ttrib).15 E(ute names only)-.2 E(.)-.65 -E102 237.6 Q/F2 10/Times-Italic@0 SF(sep)A F1(Retrie)45.81 E .3 --.15(ve b)-.25 H(oth attrib).15 E(utes name and v)-.2 E -(alue\(s\), separated by)-.25 E F2(sep)2.5 E F1(.)A102 253.8 Q F2 -(der)A(ef)-.37 E F1(Set the alias dereference option to one of ne)42.85 -E -.15(ve)-.25 G .8 -.4(r, a).15 H -.1(lwa).4 G(ys, search, or \214nd.) -.1 E102 270 Q F2(scope)A F1 -(Set search scope to one of base, one \(one le)39.7 E -.15(ve)-.25 G -(l\), or sub \(subtree\).).15 E102 286.2 Q F2(host)A F1(LD)44.69 E -2.095(AP serv)-.4 F 2.095(er hostname.)-.15 F 2.095(Some LD)7.095 F -2.095(AP libraries allo)-.4 F 4.595(wy)-.25 G 2.095 -(ou to specify multiple,)-4.595 F .466 -(space-separated hosts for redundanc)174 298.2 R 4.266 -.65(y. I)-.15 H -2.967(na).65 G .467(ddition, each of the hosts listed can be)-2.967 F -(follo)174 310.2 Q(wed by a colon and a port number to o)-.25 E -.15(ve) --.15 G(rride the def).15 E(ault LD)-.1 E(AP port.)-.4 E102 326.4 Q -F2(port)A F1(LD)44.69 E(AP service port.)-.4 E102 342.6 Q F2(LD) -2.5 E(APURI)-.35 E F1 1.103(Use the speci\214ed LD)15.33 F 1.102 +-.35 E(RALS)174 443.4 Q F1(to use this \215ag.)2.5 E 58.86(\255n Retrie) +102 459.6 R .3 -.15(ve a)-.25 H(ttrib).15 E(ute names only)-.2 E(.)-.65 +E102 475.8 Q F2(sep)A F1(Retrie)45.81 E .3 -.15(ve b)-.25 H +(oth attrib).15 E(utes name and v)-.2 E(alue\(s\), separated by)-.25 E +F2(sep)2.5 E F1(.)A102 492 Q F2(der)A(ef)-.37 E F1 +(Set the alias dereference option to one of ne)42.85 E -.15(ve)-.25 G .8 +-.4(r, a).15 H -.1(lwa).4 G(ys, search, or \214nd.).1 E102 508.2 Q +F2(scope)A F1(Set search scope to one of base, one \(one le)39.7 E -.15 +(ve)-.25 G(l\), or sub \(subtree\).).15 E102 524.4 Q F2(host)A F1 +(LD)44.69 E 2.095(AP serv)-.4 F 2.095(er hostname.)-.15 F 2.095(Some LD) +7.095 F 2.095(AP libraries allo)-.4 F 4.595(wy)-.25 G 2.095 +(ou to specify multiple,)-4.595 F .467 +(space-separated hosts for redundanc)174 536.4 R 4.267 -.65(y. I)-.15 H +2.967(na).65 G .466(ddition, each of the hosts listed can be)-2.967 F +(follo)174 548.4 Q(wed by a colon and a port number to o)-.25 E -.15(ve) +-.15 G(rride the def).15 E(ault LD)-.1 E(AP port.)-.4 E102 564.6 Q +F2(port)A F1(LD)44.69 E(AP service port.)-.4 E102 580.8 Q F2(LD) +2.5 E(APURI)-.35 E F1 1.102(Use the speci\214ed LD)15.33 F 1.103 (AP URI instead of specifying the hostname and port sepa-)-.4 F -(rately with the the)174 354.6 Q F02.5 E F1(and)2.5 E F02.5 +(rately with the the)174 592.8 Q F02.5 E F1(and)2.5 E F02.5 E F1(options sho)2.5 E(wn abo)-.25 E -.15(ve)-.15 G 5(.F).15 G(or e) --5.15 E(xample,)-.15 E(-h serv)214 370.8 Q(er)-.15 E(.e)-.55 E -(xample.com -p 389 -b dc=e)-.15 E(xample,dc=com)-.15 E(is equi)174 387 Q --.25(va)-.25 G(lent to).25 E(-H ldap://serv)214 403.2 Q(er)-.15 E(.e) --.55 E(xample.com:389 -b dc=e)-.15 E(xample,dc=com)-.15 E .756 -(If the LD)174 419.4 R .757(AP library supports it, the LD)-.4 F .757 +-5.15 E(xample,)-.15 E(-h serv)214 609 Q(er)-.15 E(.e)-.55 E +(xample.com -p 389 -b dc=e)-.15 E(xample,dc=com)-.15 E(is equi)174 625.2 +Q -.25(va)-.25 G(lent to).25 E(-H ldap://serv)214 641.4 Q(er)-.15 E(.e) +-.55 E(xample.com:389 -b dc=e)-.15 E(xample,dc=com)-.15 E .757 +(If the LD)174 657.6 R .757(AP library supports it, the LD)-.4 F .757 (AP URI format ho)-.4 F(we)-.25 E -.15(ve)-.25 G 3.257(rc).15 G .757 -(an also request)-3.257 F(LD)174 431.4 Q(AP o)-.4 E -.15(ve)-.15 G 2.5 +(an also request)-3.257 F(LD)174 669.6 Q(AP o)-.4 E -.15(ve)-.15 G 2.5 (rS).15 G(SL by using)-2.5 E F0(ldaps://)2.5 E F1(instead of)2.5 E F0 -(ldap://)2.5 E F1 5(.F)C(or e)-5.15 E(xample:)-.15 E 2.5(OL)214 447.6 S +(ldap://)2.5 E F1 5(.F)C(or e)-5.15 E(xample:)-.15 E 2.5(OL)214 685.8 S -.4(DA)-2.5 G(PDef).4 E(aultSpec=-H ldaps://ldap.e)-.1 E -(xample.com -b dc=e)-.15 E(xample,dc=com)-.15 E(Similarly)174 463.8 Q -3.221(,i)-.65 G 3.221(ft)-3.221 G .721(he LD)-3.221 F .721 +(xample.com -b dc=e)-.15 E(xample,dc=com)-.15 E(Similarly)174 702 Q 3.22 +(,i)-.65 G 3.22(ft)-3.22 G .72(he LD)-3.22 F .721 (AP library supports it, It can also be used to specify a UNIX)-.4 F -(domain sock)174 475.8 Q(et using)-.1 E F0(ldapi://)2.5 E F1(:)A 2.5(OL) -214 492 S -.4(DA)-2.5 G(PDef).4 E(aultSpec=-H ldapi://sock)-.1 E -(et\214le -b dc=e)-.1 E(xample,dc=com)-.15 E102 512.4 Q F2(base)A -F1(LD)43.03 E(AP search base.)-.4 E102 528.6 Q F2(timelimit)A F1 --.35(Ti)28.02 G(me limit for LD).35 E(AP queries.)-.4 E102 544.8 Q +(domain sock)174 714 Q(et using)-.1 E F0(ldapi://)2.5 E F1(:)A 0 Cg EP +%%Page: 87 83 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-87)195.86 E/F1 10/Times-Roman@0 SF 2.5(OL)214 96 S -.4(DA)-2.5 G +(PDef).4 E(aultSpec=-H ldapi://sock)-.1 E(et\214le -b dc=e)-.1 E +(xample,dc=com)-.15 E102 116.4 Q/F2 10/Times-Italic@0 SF(base)A F1 +(LD)43.03 E(AP search base.)-.4 E102 132.6 Q F2(timelimit)A F1 +-.35(Ti)28.02 G(me limit for LD).35 E(AP queries.)-.4 E102 148.8 Q F2(sizelimit)A F1(Size \(number of matches\) limit for LD)26.91 E -(AP or DNS queries.)-.4 E102 561 Q F2(distinguished_name)A F1 -(The distinguished name to use to login to the LD)174 573 Q(AP serv)-.4 -E(er)-.15 E(.)-.55 E102 589.2 Q F2(method)A F1 5.987 +(AP or DNS queries.)-.4 E102 165 Q F2(distinguished_name)A F1 +(The distinguished name to use to login to the LD)174 177 Q(AP serv)-.4 +E(er)-.15 E(.)-.55 E102 193.2 Q F2(method)A F1 5.988 (The method to authenticate to the LD)28.03 F 5.987(AP serv)-.4 F(er) --.15 E 10.987(.S)-.55 G 5.988(hould be one of)-10.987 F F0(LD)174 601.2 +-.15 E 10.987(.S)-.55 G 5.987(hould be one of)-10.987 F F0(LD)174 205.2 Q(AP_A)-.35 E(UTH_NONE)-.5 E F1(,)A F0(LD)2.5 E(AP_A)-.35 E(UTH_SIMPLE) -.5 E F1 2.5(,o)C(r)-2.5 E F0(LD)2.5 E(AP_A)-.35 E(UTH_KRBV4)-.5 E F1(.) -A102 617.4 Q F2(passwor)A(d\214le)-.37 E F1 .342 +A102 221.4 Q F2(passwor)A(d\214le)-.37 E F1 .342 (The \214le containing the secret k)10.61 F .642 -.15(ey f)-.1 H .342 -(or the).15 F F0(LD)2.842 E(AP_A)-.35 E(UTH_SIMPLE)-.5 E F1 -(authentication)2.842 E(method or the name of the K)174 629.4 Q +(or the).15 F F0(LD)2.843 E(AP_A)-.35 E(UTH_SIMPLE)-.5 E F1 +(authentication)2.843 E(method or the name of the K)174 233.4 Q (erberos tick)-.25 E(et \214le for)-.1 E F0(LD)2.5 E(AP_A)-.35 E -(UTH_KRBV4)-.5 E F1(.)A 58.86(\2551 F)102 645.6 R .457(orce LD)-.15 F -.458(AP searches to only succeed if a single match is found.)-.4 F .458 +(UTH_KRBV4)-.5 E F1(.)A 58.86(\2551 F)102 249.6 R .458(orce LD)-.15 F +.458(AP searches to only succeed if a single match is found.)-.4 F .457 (If multiple v)5.458 F(al-)-.25 E -(ues are found, the search is treated as if no match w)174 657.6 Q -(as found.)-.1 E102 673.8 Q F2(ver)A(sion)-.1 E F1 1.48 +(ues are found, the search is treated as if no match w)174 261.6 Q +(as found.)-.1 E102 277.8 Q F2(ver)A(sion)-.1 E F1 1.479 (Set the LD)29.8 F 1.479(AP API/protocol v)-.4 F 1.479(ersion to use.) -.15 F 1.479(The def)6.479 F 1.479(ault depends on the LD)-.1 F(AP)-.4 E -1.37(client libraries in use.)174 685.8 R -.15(Fo)6.37 G 3.87(re).15 G +1.37(client libraries in use.)174 289.8 R -.15(Fo)6.37 G 3.87(re).15 G (xample,)-4.02 E F0 1.37(\255w 3)3.87 F F1 1.37(will cause)3.87 F F2 (sendmail)3.87 E F1 1.37(to use LD)3.87 F(APv3)-.4 E -(when communicating with the LD)174 697.8 Q(AP serv)-.4 E(er)-.15 E(.) --.55 E 0 Cg EP -%%Page: 86 82 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-86 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 56.64 -(\255K T)102 96 R .588(reat the LD)-.35 F .588(AP search k)-.4 F .888 --.15(ey a)-.1 H 3.088(sm).15 G(ulti-ar)-3.088 E .587 -(gument and replace %1 through %9 in the)-.18 F -.1(ke)174 108 S 2.503 -(yw)-.05 G .003(ith the LD)-2.503 F .003 +(when communicating with the LD)174 301.8 Q(AP serv)-.4 E(er)-.15 E(.) +-.55 E 56.64(\255K T)102 318 R .587(reat the LD)-.35 F .587(AP search k) +-.4 F .888 -.15(ey a)-.1 H 3.088(sm).15 G(ulti-ar)-3.088 E .588 +(gument and replace %1 through %9 in the)-.18 F -.1(ke)174 330 S 2.504 +(yw)-.05 G .003(ith the LD)-2.504 F .003 (AP escaped contents of the lookup ar)-.4 F .003 -(guments speci\214ed in the map)-.18 F(lookup.)174 120 Q(The)127 136.2 Q -/F2 10/Times-Italic@0 SF(dbm)2.99 E F1 .489 -(map appends the strings \231.pag\232 and \231.dir\232 to the gi)2.99 F --.15(ve)-.25 G 2.989<6e8c>.15 G .489(lename; the)-2.989 F F2(hash)2.989 -E F1(and)2.989 E F2(btr)2.989 E(ee)-.37 E F1(maps append \231.db\232.) -102 148.2 Q -.15(Fo)5 G 2.5(re).15 G(xample, the map speci\214cation) --2.65 E -.15(Ku)142 164.4 S(ucp dbm \255o \255N /etc/mail/uucpmap).15 E -.21(speci\214es an optional map named \231uucp\232 of class \231dbm\232\ -; it al)102 180.6 R -.1(wa)-.1 G .21(ys has null bytes at the end of e) -.1 F -.15(ve)-.25 G(ry).15 E -(string, and the data is located in /etc/mail/uucpmap.{dir)102 192.6 Q -(,pag}.)-.4 E 1.095(The program)127 208.8 R F2(mak)3.595 E(emap)-.1 E F1 +(guments speci\214ed in the map)-.18 F(lookup.)174 342 Q(The)127 358.2 Q +F2(dbm)2.989 E F1 .489 +(map appends the strings \231.pag\232 and \231.dir\232 to the gi)2.989 F +-.15(ve)-.25 G 2.99<6e8c>.15 G .49(lename; the)-2.99 F F2(hash)2.99 E F1 +(and)2.99 E F2(btr)2.99 E(ee)-.37 E F1(maps append \231.db\232.)102 +370.2 Q -.15(Fo)5 G 2.5(re).15 G(xample, the map speci\214cation)-2.65 E +-.15(Ku)142 386.4 S(ucp dbm \255o \255N /etc/mail/uucpmap).15 E .21(spe\ +ci\214es an optional map named \231uucp\232 of class \231dbm\232; it al) +102 402.6 R -.1(wa)-.1 G .21(ys has null bytes at the end of e).1 F -.15 +(ve)-.25 G(ry).15 E +(string, and the data is located in /etc/mail/uucpmap.{dir)102 414.6 Q +(,pag}.)-.4 E 1.094(The program)127 430.8 R F2(mak)3.594 E(emap)-.1 E F1 1.094(\(8\) can be used to b)B 1.094(uild an)-.2 F 3.594(yo)-.15 G 3.594 -(ft)-3.594 G 1.094(he three database-oriented maps.)-3.594 F(It)6.094 E -(tak)102 220.8 Q(es the follo)-.1 E(wing \215ags:)-.25 E 60.53(\255f Do) -102 237 R(not fold upper to lo)2.5 E(wer case in the map.)-.25 E 56.64 -(\255N Include)102 253.2 R(null bytes in k)2.5 E -.15(ey)-.1 G(s.).15 E -58.86(\255o Append)102 269.4 R(to an e)2.5 E(xisting \(old\) \214le.) --.15 E 60.53(\255r Allo)102 285.6 R 3.668(wr)-.25 G 1.168 -(eplacement of e)-3.668 F 1.168(xisting k)-.15 F -.15(ey)-.1 G 1.168 +(ft)-3.594 G 1.095(he three database-oriented maps.)-3.594 F(It)6.095 E +(tak)102 442.8 Q(es the follo)-.1 E(wing \215ags:)-.25 E 60.53(\255f Do) +102 459 R(not fold upper to lo)2.5 E(wer case in the map.)-.25 E 56.64 +(\255N Include)102 475.2 R(null bytes in k)2.5 E -.15(ey)-.1 G(s.).15 E +58.86(\255o Append)102 491.4 R(to an e)2.5 E(xisting \(old\) \214le.) +-.15 E 60.53(\255r Allo)102 507.6 R 3.669(wr)-.25 G 1.169 +(eplacement of e)-3.669 F 1.168(xisting k)-.15 F -.15(ey)-.1 G 1.168 (s; normally).15 F 3.668(,r)-.65 G 1.168(e-inserting an e)-3.668 F 1.168 -(xisting k)-.15 F 1.469 -.15(ey i)-.1 H 3.669(sa).15 G(n)-3.669 E(error) -174 297.6 Q(.)-.55 E 58.86(\255v Print)102 313.8 R(what is happening.) -2.5 E(The)102 330 Q F2(sendmail)3.606 E F1 1.106(daemon does not ha) -3.606 F 1.406 -.15(ve t)-.2 H 3.606(ob).15 G 3.606(er)-3.606 G 1.106 -(estarted to read the ne)-3.606 F 3.605(wm)-.25 G 1.105 -(aps as long as you change)-3.605 F -(them in place; \214le locking is used so that the maps w)102 342 Q(on') +(xisting k)-.15 F 1.468 -.15(ey i)-.1 H 3.668(sa).15 G(n)-3.668 E(error) +174 519.6 Q(.)-.55 E 58.86(\255v Print)102 535.8 R(what is happening.) +2.5 E(The)102 552 Q F2(sendmail)3.605 E F1 1.105(daemon does not ha) +3.605 F 1.405 -.15(ve t)-.2 H 3.605(ob).15 G 3.605(er)-3.605 G 1.106 +(estarted to read the ne)-3.605 F 3.606(wm)-.25 G 1.106 +(aps as long as you change)-3.606 F +(them in place; \214le locking is used so that the maps w)102 564 Q(on') -.1 E 2.5(tb)-.18 G 2.5(er)-2.5 G(ead while the)-2.5 E 2.5(ya)-.15 G -(re being updated.)-2.5 E(Ne)127 358.2 Q 2.5(wc)-.25 G +(re being updated.)-2.5 E(Ne)127 580.2 Q 2.5(wc)-.25 G (lasses can be added in the routine)-2.5 E F0(setupmaps)2.5 E F1 -(in \214le)2.5 E F0(conf)2.5 E(.c)-.15 E F1(.)A F0 2.5(5.10. Q)87 382.2 +(in \214le)2.5 E F0(conf)2.5 E(.c)-.15 E F1(.)A F0 2.5(5.10. Q)87 604.2 R 2.5<8a51>2.5 G(ueue Gr)-2.5 E(oup Declaration)-.18 E F1 .71 -(In addition to the option)127 398.4 R F2(QueueDir)3.21 E(ectory)-.37 E +(In addition to the option)127 620.4 R F2(QueueDir)3.21 E(ectory)-.37 E (,)-.55 E F1 .71(queue groups can be declared that de\214ne a \(group) -3.21 F(of\) queue directories under a common name.)102 410.4 Q -(The syntax is as follo)5 E(ws:)-.25 E F0(Q)142 426.6 Q F2(name)A F1({,) -2.5 E F2(\214eld)2.5 E F1(=)A F2(value)A F1(}+)1.666 E(where)102 442.8 Q -F2(name)3.276 E F1 .775(is the symbolic name of the queue group under w\ -hich it can be referenced in v)3.276 F(arious)-.25 E .217 -(places and the \231\214eld=v)102 454.8 R .217 +3.21 F(of\) queue directories under a common name.)102 632.4 Q +(The syntax is as follo)5 E(ws:)-.25 E F0(Q)142 648.6 Q F2(name)A F1({,) +2.5 E F2(\214eld)2.5 E F1(=)A F2(value)A F1(}+)1.666 E(where)102 664.8 Q +F2(name)3.275 E F1 .775(is the symbolic name of the queue group under w\ +hich it can be referenced in v)3.275 F(arious)-.25 E .218 +(places and the \231\214eld=v)102 676.8 R .218 (alue\232 pairs de\214ne attrib)-.25 F .217(utes of the queue group.)-.2 -F .218(The name must only consist)5.218 F(of alphanumeric characters.) -102 466.8 Q(Fields are:)5 E 47.83(Flags Flags)102 483 R -(for this queue group.)2.5 E 50.62(Nice The)102 499.2 R .902 -(nice\(2\) increment for the queue group.)3.402 F .901(This v)5.902 F -.901(alue must be greater or equal)-.25 F(zero.)174 511.2 Q(Interv)102 -527.4 Q 38.65(al The)-.25 F(time between tw)2.5 E 2.5(oq)-.1 G -(ueue runs.)-2.5 E -.15(Pa)102 543.6 S 51.87(th The).15 F -(queue directory of the group \(required\).)2.5 E 36.17(Runners The)102 -559.8 R .073(number of parallel runners processing the queue.)2.573 F -.074(Note that)5.074 F F0(F=f)2.574 E F1 .074(must be set if)2.574 F -(this v)174 571.8 Q(alue is greater than one.)-.25 E 51.72(Jobs The)102 -588 R(maximum number of jobs \(messages deli)2.5 E -.15(ve)-.25 G -(red\) per queue run.).15 E 30.62(recipients The)102 604.2 R .382 -(maximum number of recipients per en)2.882 F -.15(ve)-.4 G 2.882 -(lope. En).15 F -.15(ve)-.4 G .382(lopes with more than this).15 F .109 -(number of recipients will be split into multiple en)174 616.2 R -.15 -(ve)-.4 G .11(lopes in the same queue direc-).15 F(tory)174 628.2 Q 5 -(.T)-.65 G(he def)-5 E(ault v)-.1 E(alue 0 means no limit.)-.25 E -(Only the \214rst character of the \214eld name is check)102 644.4 Q -(ed.)-.1 E .076(By def)127 660.6 R .076(ault, a queue group named)-.1 F -F2(mqueue)2.575 E F1 .075(is de\214ned that uses the v)2.575 F .075 -(alue of the)-.25 F F2(QueueDir)2.575 E(ectory)-.37 E F1 .268 -(option as path.)102 672.6 R .268(Notice: all paths that are used for q\ -ueue groups must be subdirectories of)5.268 F F2(QueueDi-)2.769 E -.37 -(re)102 684.6 S(ctory).37 E F1 6.487(.S)C 1.487(ince the)-6.487 F 3.987 -(yc)-.15 G 1.487(an be symbolic links, this isn')-3.987 F 3.987(tar)-.18 -G 1.486(eal restriction, If)-3.987 F F2(QueueDir)3.986 E(ectory)-.37 E -F1 1.486(uses a)3.986 F .746(wildcard, then the directory one le)102 -696.6 R -.15(ve)-.25 G 3.247(lu).15 G 3.247(pi)-3.247 G 3.247(sc)-3.247 -G .747(onsidered the `)-3.247 F(`base')-.74 E 3.247('d)-.74 G .747 -(irectory which all other queue)-3.247 F .086(directories must share.) -102 708.6 R .086(Please mak)5.086 F 2.586(es)-.1 G .086 -(ure that the queue directories do not o)-2.586 F -.15(ve)-.15 G .085 -(rlap, e.g., do not spec-).15 F(ify)102 720.6 Q 0 Cg EP -%%Page: 87 83 +F .217(The name must only consist)5.217 F(of alphanumeric characters.) +102 688.8 Q(Fields are:)5 E 47.83(Flags Flags)102 705 R +(for this queue group.)2.5 E 0 Cg EP +%%Page: 88 84 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-87)195.86 E/F1 10/Times-Roman@0 SF 2.5(OQ)142 96 S -(ueueDirectory=/v)-2.5 E(ar/spool/mqueue/*)-.25 E(Qone, P=/v)142 108 Q -(ar/spool/mqueue/dir1)-.25 E(Qtw)142 120 Q(o, P=/v)-.1 E +/F0 10/Times-Bold@0 SF 193.36(SMM:08-88 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 50.62 +(Nice The)102 96 R .901(nice\(2\) increment for the queue group.)3.401 F +.902(This v)5.902 F .902(alue must be greater or equal)-.25 F(zero.)174 +108 Q(Interv)102 124.2 Q 38.65(al The)-.25 F(time between tw)2.5 E 2.5 +(oq)-.1 G(ueue runs.)-2.5 E -.15(Pa)102 140.4 S 51.87(th The).15 F +(queue directory of the group \(required\).)2.5 E 36.17(Runners The)102 +156.6 R .074(number of parallel runners processing the queue.)2.574 F +.073(Note that)5.074 F F0(F=f)2.573 E F1 .073(must be set if)2.573 F +(this v)174 168.6 Q(alue is greater than one.)-.25 E 51.72(Jobs The)102 +184.8 R(maximum number of jobs \(messages deli)2.5 E -.15(ve)-.25 G +(red\) per queue run.).15 E 30.62(recipients The)102 201 R .382 +(maximum number of recipients per en)2.881 F -.15(ve)-.4 G 2.882 +(lope. En).15 F -.15(ve)-.4 G .382(lopes with more than this).15 F .109 +(number of recipients will be split into multiple en)174 213 R -.15(ve) +-.4 G .109(lopes in the same queue direc-).15 F(tory)174 225 Q 5(.T)-.65 +G(he def)-5 E(ault v)-.1 E(alue 0 means no limit.)-.25 E +(Only the \214rst character of the \214eld name is check)102 241.2 Q +(ed.)-.1 E .075(By def)127 257.4 R .075(ault, a queue group named)-.1 F +/F2 10/Times-Italic@0 SF(mqueue)2.575 E F1 .075 +(is de\214ned that uses the v)2.575 F .076(alue of the)-.25 F F2 +(QueueDir)2.576 E(ectory)-.37 E F1 .269(option as path.)102 269.4 R .268 +(Notice: all paths that are used for queue groups must be subdirectorie\ +s of)5.268 F F2(QueueDi-)2.768 E -.37(re)102 281.4 S(ctory).37 E F1 +6.486(.S)C 1.486(ince the)-6.486 F 3.986(yc)-.15 G 1.487 +(an be symbolic links, this isn')-3.986 F 3.987(tar)-.18 G 1.487 +(eal restriction, If)-3.987 F F2(QueueDir)3.987 E(ectory)-.37 E F1 1.487 +(uses a)3.987 F .747(wildcard, then the directory one le)102 293.4 R +-.15(ve)-.25 G 3.247(lu).15 G 3.247(pi)-3.247 G 3.247(sc)-3.247 G .747 +(onsidered the `)-3.247 F(`base')-.74 E 3.246('d)-.74 G .746 +(irectory which all other queue)-3.246 F .085(directories must share.) +102 305.4 R .085(Please mak)5.085 F 2.585(es)-.1 G .086 +(ure that the queue directories do not o)-2.585 F -.15(ve)-.15 G .086 +(rlap, e.g., do not spec-).15 F(ify)102 317.4 Q 2.5(OQ)142 333.6 S +(ueueDirectory=/v)-2.5 E(ar/spool/mqueue/*)-.25 E(Qone, P=/v)142 345.6 Q +(ar/spool/mqueue/dir1)-.25 E(Qtw)142 357.6 Q(o, P=/v)-.1 E (ar/spool/mqueue/dir2)-.25 E (because this also includes \231dir1\232 and \231dir2\232 in the def)102 -136.2 Q(ault queue group.)-.1 E(Ho)5 E(we)-.25 E -.15(ve)-.25 G -.4(r,) -.15 G 2.5(OQ)142 152.4 S(ueueDirectory=/v)-2.5 E(ar/spool/mqueue/main*) --.25 E(Qone, P=/v)142 164.4 Q(ar/spool/mqueue/dir)-.25 E(Qtw)142 176.4 Q -(o, P=/v)-.1 E(ar/spool/mqueue/other*)-.25 E(is a v)102 192.6 Q -(alid queue group speci\214cation.)-.25 E .235(Options listed in the `) -127 208.8 R(`Flags')-.74 E 2.736<278c>-.74 G .236 +373.8 Q(ault queue group.)-.1 E(Ho)5 E(we)-.25 E -.15(ve)-.25 G -.4(r,) +.15 G 2.5(OQ)142 390 S(ueueDirectory=/v)-2.5 E(ar/spool/mqueue/main*) +-.25 E(Qone, P=/v)142 402 Q(ar/spool/mqueue/dir)-.25 E(Qtw)142 414 Q +(o, P=/v)-.1 E(ar/spool/mqueue/other*)-.25 E(is a v)102 430.2 Q +(alid queue group speci\214cation.)-.25 E .236(Options listed in the `) +127 446.4 R(`Flags')-.74 E 2.736<278c>-.74 G .236 (eld can be used to modify the beha)-2.736 F .236 -(vior of a queue group.)-.2 F(The)5.236 E -.74(``)102 220.8 S .55(f').74 -G 2.605<278d>-1.29 G .105 -(ag must be set if multiple queue runners are supposed to w)-2.605 F -.104(ork on the entries in a queue group.)-.1 F(Otherwise)102 232.8 Q/F2 -10/Times-Italic@0 SF(sendmail)2.5 E F1(will w)2.5 E -(ork on the entries strictly sequentially)-.1 E(.)-.65 E .511(The `)127 -249 R(`Interv)-.74 E(al')-.25 E 3.011<278c>-.74 G .511 -(eld sets the time between queue runs.)-3.011 F .512 -(If no queue group speci\214c interv)5.511 F .512(al is)-.25 F -(set, then the parameter of the)102 261 Q F0(-q)2.5 E F1 -(option from the command line is used.)2.5 E 7.657 -.8(To c)127 277.2 T -6.057(ontrol the o).8 F -.15(ve)-.15 G 6.056 -(rall number of concurrently acti).15 F 6.356 -.15(ve q)-.25 H 6.056 -(ueue runners the option).15 F F0(MaxQueueChildr)102 289.2 Q(en)-.18 E -F1 .055(can be set.)2.555 F .055 +(vior of a queue group.)-.2 F(The)5.235 E -.74(``)102 458.4 S .55(f').74 +G 2.604<278d>-1.29 G .105 +(ag must be set if multiple queue runners are supposed to w)-2.604 F +.105(ork on the entries in a queue group.)-.1 F(Otherwise)102 470.4 Q F2 +(sendmail)2.5 E F1(will w)2.5 E +(ork on the entries strictly sequentially)-.1 E(.)-.65 E .512(The `)127 +486.6 R(`Interv)-.74 E(al')-.25 E 3.012<278c>-.74 G .512 +(eld sets the time between queue runs.)-3.012 F .511 +(If no queue group speci\214c interv)5.511 F .511(al is)-.25 F +(set, then the parameter of the)102 498.6 Q F0(-q)2.5 E F1 +(option from the command line is used.)2.5 E 7.656 -.8(To c)127 514.8 T +6.056(ontrol the o).8 F -.15(ve)-.15 G 6.056 +(rall number of concurrently acti).15 F 6.357 -.15(ve q)-.25 H 6.057 +(ueue runners the option).15 F F0(MaxQueueChildr)102 526.8 Q(en)-.18 E +F1 .056(can be set.)2.556 F .055 (This limits the number of processes used for running the queues to) -5.055 F F0(MaxQueueChildr)102 301.2 Q(en)-.18 E F1 3.63(,t)C 1.13 -(hough at an)-3.63 F 3.63(yo)-.15 G 1.13(ne time fe)-3.63 F 1.129 -(wer processes may be acti)-.25 F 1.429 -.15(ve a)-.25 H 3.629(sar).15 G -1.129(esult of queue)-3.629 F -(options, completed queue runs, system load, etc.)102 313.2 Q .602 -(The maximum number of queue runners for an indi)127 329.4 R .602 -(vidual queue group can be controlled via)-.25 F(the)102 341.4 Q F0 -(Runners)2.585 E F1 2.585(option. If)2.585 F .084(set to 0, entries in \ -the queue will not be processed, which is useful to `)2.585 F(`quar)-.74 -E(-)-.2 E(antine')102 353.4 Q 4.515('q)-.74 G 2.015(ueue \214les.)-4.515 -F 2.016 +5.056 F F0(MaxQueueChildr)102 538.8 Q(en)-.18 E F1 3.629(,t)C 1.129 +(hough at an)-3.629 F 3.629(yo)-.15 G 1.129(ne time fe)-3.629 F 1.129 +(wer processes may be acti)-.25 F 1.43 -.15(ve a)-.25 H 3.63(sar).15 G +1.13(esult of queue)-3.63 F +(options, completed queue runs, system load, etc.)102 550.8 Q .602 +(The maximum number of queue runners for an indi)127 567 R .602 +(vidual queue group can be controlled via)-.25 F(the)102 579 Q F0 +(Runners)2.584 E F1 2.584(option. If)2.584 F .084(set to 0, entries in \ +the queue will not be processed, which is useful to `)2.584 F(`quar)-.74 +E(-)-.2 E(antine')102 591 Q 4.516('q)-.74 G 2.016(ueue \214les.)-4.516 F +2.016 (The number of runners per queue group may also be set with the option) -7.015 F F0(MaxRunnersP)102 365.4 Q(erQueue)-.2 E F1 3.209(,w)C .709 -(hich applies to queue groups that ha)-3.209 F 1.008 -.15(ve n)-.2 H -3.208(oi).15 G(ndi)-3.208 E .708(vidual limit.)-.25 F .708(That is, the) -5.708 F(def)102 377.4 Q(ault v)-.1 E(alue for)-.25 E F0(Runners)2.5 E F1 +7.016 F F0(MaxRunnersP)102 603 Q(erQueue)-.2 E F1 3.208(,w)C .708 +(hich applies to queue groups that ha)-3.208 F 1.009 -.15(ve n)-.2 H +3.209(oi).15 G(ndi)-3.209 E .709(vidual limit.)-.25 F .709(That is, the) +5.709 F(def)102 615 Q(ault v)-.1 E(alue for)-.25 E F0(Runners)2.5 E F1 (is)2.5 E F0(MaxRunnersP)2.5 E(erQueue)-.2 E F1(if set, otherwise 1.)2.5 E 1.087 (The \214eld Jobs describes the maximum number of jobs \(messages deli) -127 393.6 R -.15(ve)-.25 G 1.087(red\) per queue run,).15 F -(which is the queue group speci\214c v)102 405.6 Q(alue of)-.25 E F0 +127 631.2 R -.15(ve)-.25 G 1.087(red\) per queue run,).15 F +(which is the queue group speci\214c v)102 643.2 Q(alue of)-.25 E F0 (MaxQueueRunSize)2.5 E F1(.)A .175(Notice: queue groups should be decla\ -red after all queue related options ha)127 421.8 R .475 -.15(ve b)-.2 H -.175(een set because).15 F .314(queue groups tak)102 433.8 R 2.814(et) +red after all queue related options ha)127 659.4 R .475 -.15(ve b)-.2 H +.175(een set because).15 F .315(queue groups tak)102 671.4 R 2.814(et) -.1 G .314(heir def)-2.814 F .314(aults from those options.)-.1 F .314 -(If an option is set after a queue group declara-)5.314 F .188 -(tion, the v)102 445.8 R .187 +(If an option is set after a queue group declara-)5.314 F .187 +(tion, the v)102 683.4 R .187 (alues of options in the queue group are set to the def)-.25 F .187 -(aults of)-.1 F F2(sendmail)2.687 E F1 .187(unless e)2.687 F .187 -(xplicitly set)-.15 F(in the declaration.)102 457.8 Q 1.972(Each en)127 -474 R -.15(ve)-.4 G 1.972(lope is assigned to a queue group based on th\ -e algorithm described in section).15 F -.74(``)102 486 S -(Queue Groups and Queue Directories').74 E('.)-.74 E F0 2.5(5.11. X)87 -510 R 2.5<8a4d>2.5 G(ail Filter \(Milter\) De\214nitions)-2.5 E F1(The) -127 526.2 Q F2(sendmail)3.937 E F1 1.437 +(aults of)-.1 F F2(sendmail)2.688 E F1 .188(unless e)2.688 F .188 +(xplicitly set)-.15 F(in the declaration.)102 695.4 Q 1.973(Each en)127 +711.6 R -.15(ve)-.4 G 1.972(lope is assigned to a queue group based on \ +the algorithm described in section).15 F -.74(``)102 723.6 S +(Queue Groups and Queue Directories').74 E('.)-.74 E 0 Cg EP +%%Page: 89 85 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-89)195.86 E 2.5(5.11. X)87 96 R 2.5<8a4d>2.5 G +(ail Filter \(Milter\) De\214nitions)-2.5 E/F1 10/Times-Roman@0 SF(The) +127 112.2 Q/F2 10/Times-Italic@0 SF(sendmail)3.936 E F1 1.437 (Mail Filter API \(Milter\) is designed to allo)3.937 F 3.937(wt)-.25 G -1.437(hird-party programs access to)-3.937 F .177(mail messages as the) -102 538.2 R 2.677(ya)-.15 G .177 +1.437(hird-party programs access to)-3.937 F .178(mail messages as the) +102 124.2 R 2.678(ya)-.15 G .177 (re being processed in order to \214lter meta-information and content.) --2.677 F(The)5.178 E 2.678(ya)-.15 G(re)-2.678 E -(declared in the con\214guration \214le as:)102 550.2 Q F0(X)142 566.4 Q +-2.678 F(The)5.177 E 2.677(ya)-.15 G(re)-2.677 E +(declared in the con\214guration \214le as:)102 136.2 Q F0(X)142 152.4 Q F2(name)A F1({,)2.5 E F2(\214eld)2.5 E F1(=)A F2(value)A F1(}*)1.666 E -(where)102 582.6 Q F2(name)4.688 E F1 2.188(is the name of the \214lter\ +(where)102 168.6 Q F2(name)4.688 E F1 2.188(is the name of the \214lter\ \(used internally only\) and the \231\214eld=name\232 pairs de\214ne) -4.688 F(attrib)102 594.6 Q .491(utes of the \214lter)-.2 F 5.491(.A)-.55 -G .491(lso see the documentation for the)-5.491 F F0(InputMailFilters) -2.992 E F1 .492(option for more infor)2.992 F(-)-.2 E(mation.)102 606.6 -Q(Fields are:)127 622.8 Q(Sock)142 639 Q 42.38(et The)-.1 F(sock)2.5 E -(et speci\214cation)-.1 E 47.83(Flags Special)142 651 R -(\215ags for this \214lter)2.5 E -.35(Ti)142 663 S 32.07(meouts T).35 F +4.688 F(attrib)102 180.6 Q .492(utes of the \214lter)-.2 F 5.492(.A)-.55 +G .491(lso see the documentation for the)-5.492 F F0(InputMailFilters) +2.991 E F1 .491(option for more infor)2.991 F(-)-.2 E(mation.)102 192.6 +Q(Fields are:)127 208.8 Q(Sock)142 225 Q 42.38(et The)-.1 F(sock)2.5 E +(et speci\214cation)-.1 E 47.83(Flags Special)142 237 R +(\215ags for this \214lter)2.5 E -.35(Ti)142 249 S 32.07(meouts T).35 F (imeouts for this \214lter)-.35 E -(Only the \214rst character of the \214eld name is check)102 679.2 Q +(Only the \214rst character of the \214eld name is check)102 265.2 Q (ed \(it')-.1 E 2.5(sc)-.55 G(ase-sensiti)-2.5 E -.15(ve)-.25 G(\).).15 -E(The sock)127 695.4 Q(et speci\214cation is one of the follo)-.1 E -(wing forms:)-.25 E F0(S=inet:)142 711.6 Q F2(port)2.5 E F0(@)2.5 E F2 -(host)2.5 E 0 Cg EP -%%Page: 88 84 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-88 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E(S=inet6:)142 96 Q/F1 10 -/Times-Italic@0 SF(port)2.5 E F0(@)2.5 E F1(host)2.5 E F0(S=local:)142 -116.4 Q F1(path)2.5 E/F2 10/Times-Roman@0 SF 1.792(The \214rst tw)102 -132.6 R 4.291(od)-.1 G 1.791(escribe an IPv4 or IPv6 sock)-4.291 F 1.791 -(et listening on a certain)-.1 F F1(port)4.291 E F2 1.791(at a gi)4.291 -F -.15(ve)-.25 G(n).15 E F1(host)4.291 E F2 1.791(or IP)4.291 F 2.5 -(address. The)102 144.6 R(\214nal form describes a named sock)2.5 E -(et on the \214lesystem at the gi)-.1 E -.15(ve)-.25 G(n).15 E F1(path) -2.5 E F2(.)A(The follo)127 160.8 Q +E(The sock)127 281.4 Q(et speci\214cation is one of the follo)-.1 E +(wing forms:)-.25 E F0(S=inet:)142 297.6 Q F2(port)2.5 E F0(@)2.5 E F2 +(host)2.5 E F0(S=inet6:)142 318 Q F2(port)2.5 E F0(@)2.5 E F2(host)2.5 E +F0(S=local:)142 338.4 Q F2(path)2.5 E F1 1.791(The \214rst tw)102 354.6 +R 4.291(od)-.1 G 1.791(escribe an IPv4 or IPv6 sock)-4.291 F 1.791 +(et listening on a certain)-.1 F F2(port)4.291 E F1 1.791(at a gi)4.291 +F -.15(ve)-.25 G(n).15 E F2(host)4.291 E F1 1.792(or IP)4.291 F 2.5 +(address. The)102 366.6 R(\214nal form describes a named sock)2.5 E +(et on the \214lesystem at the gi)-.1 E -.15(ve)-.25 G(n).15 E F2(path) +2.5 E F1(.)A(The follo)127 382.8 Q (wing \215ags may be set in the \214lter description.)-.25 E 13.33(RR) -102 177 S(eject connection if \214lter una)-13.33 E -.25(va)-.2 G -(ilable.).25 E 13.89(TT)102 193.2 S(emporary f)-14.59 E +102 399 S(eject connection if \214lter una)-13.33 E -.25(va)-.2 G +(ilable.).25 E 13.89(TT)102 415.2 S(emporary f)-14.59 E (ail connection if \214lter una)-.1 E -.25(va)-.2 G(ilable.).25 E .655 (If neither F=R nor F=T is speci\214ed, the message is passed through) -127 209.4 R F1(sendmail)3.155 E F2 .655(in case of \214lter)3.155 F -(errors as if the f)102 221.4 Q(ailing \214lters were not present.)-.1 E -(The timeouts can be set using the four \214elds inside of the)127 237.6 -Q F0(T=)2.5 E F2(equate:)2.5 E 13.33(CT)102 253.8 S +127 431.4 R F2(sendmail)3.155 E F1 .655(in case of \214lter)3.155 F +(errors as if the f)102 443.4 Q(ailing \214lters were not present.)-.1 E +(The timeouts can be set using the four \214elds inside of the)127 459.6 +Q F0(T=)2.5 E F1(equate:)2.5 E 13.33(CT)102 475.8 S (imeout for connecting to a \214lter)-13.68 E 5(.I)-.55 G 2.5(fs)-5 G -(et to 0, the system')-2.5 E(s)-.55 E F1(connect\(\))2.5 E F2 -(timeout will be used.)2.5 E 14.44(ST)102 270 S +(et to 0, the system')-2.5 E(s)-.55 E F2(connect\(\))2.5 E F1 +(timeout will be used.)2.5 E 14.44(ST)102 492 S (imeout for sending information from the MT)-14.79 E 2.5(At)-.93 G 2.5 -(oa\214)-2.5 G(lter)-2.5 E(.)-.55 E 13.33(RT)102 286.2 S +(oa\214)-2.5 G(lter)-2.5 E(.)-.55 E 13.33(RT)102 508.2 S (imeout for reading reply from the \214lter)-13.68 E(.)-.55 E 13.89(EO) -102 302.4 S -.15(ve)-13.89 G 1.186 +102 524.4 S -.15(ve)-13.89 G 1.186 (rall timeout between sending end-of-message to \214lter and w).15 F -1.186(aiting for the \214nal ackno)-.1 F(wl-)-.25 E(edgment.)122 314.4 Q -1.402(Note the separator between each timeout \214eld is a)127 330.6 R -F0(';')3.903 E F2 6.403(.T)C 1.403(he def)-6.403 F 1.403(ault v)-.1 F -1.403(alues \(if not set\) are:)-.25 F F0(T=C:5m;S:10s;R:10s;E:5m)102 -342.6 Q F2(where)2.5 E F0(s)2.5 E F2(is seconds and)2.5 E F0(m)2.5 E F2 -(is minutes.)2.5 E(Examples:)127 358.8 Q(X\214lter1, S=local:/v)142 375 +1.186(aiting for the \214nal ackno)-.1 F(wl-)-.25 E(edgment.)122 536.4 Q +1.403(Note the separator between each timeout \214eld is a)127 552.6 R +F0(';')3.902 E F1 6.402(.T)C 1.402(he def)-6.402 F 1.402(ault v)-.1 F +1.402(alues \(if not set\) are:)-.25 F F0(T=C:5m;S:10s;R:10s;E:5m)102 +564.6 Q F1(where)2.5 E F0(s)2.5 E F1(is seconds and)2.5 E F0(m)2.5 E F1 +(is minutes.)2.5 E(Examples:)127 580.8 Q(X\214lter1, S=local:/v)142 597 Q(ar/run/f1.sock, F=R)-.25 E(X\214lter2, S=inet6:999@localhost, F=T)142 -387 Q 2.5(,T)-.74 G(=S:1s;R:1s;E:5m)-2.5 E -(X\214lter3, S=inet:3333@localhost, T=C:2m)142 399 Q F0 2.5(5.12. The)87 -427.2 R(User Database)2.5 E F2 .479 -(The user database is deprecated in f)127 443.4 R -.2(avo)-.1 G 2.978 -(ro).2 G 2.978(f`)-2.978 G(`virtusertable')-3.718 E 2.978('a)-.74 G .478 -(nd `)-2.978 F(`genericstable')-.74 E 2.978('a)-.74 G 2.978(se)-2.978 G -(xplained)-3.128 E 1.029(in the \214le)102 455.4 R F0(cf/README)3.529 E -F2 6.029(.I)C 3.529(fy)-6.029 G 1.029(ou ha)-3.529 F 1.329 -.15(ve a ve) --.2 H 1.029(rsion of).15 F F1(sendmail)3.529 E F2 1.03 -(with the user database package com-)3.53 F(piled in, the handling of s\ -ender and recipient addresses is modi\214ed.)102 467.4 Q -(The location of this database is controlled with the)127 483.6 Q F0 -(UserDatabaseSpec)2.5 E F2(option.)2.5 E F0 2.5(5.12.1. Structur)102 -507.6 R 2.5(eo)-.18 G 2.5(ft)-2.5 G(he user database)-2.5 E F2 -(The database is a sorted \(BT)142 523.8 Q(ree-based\) structure.)-.35 E -(User records are stored with the k)5 E -.15(ey)-.1 G(:).15 E F1(user) -157 540 Q(-name)-.2 E F0(:)A F1(\214eld-name)A F2 .128(The sorted datab\ -ase format ensures that user records are clustered together)117 556.2 R -5.128(.M)-.55 G .128(eta-information is)-5.128 F(al)117 568.2 Q -.1(wa) --.1 G(ys stored with a leading colon.).1 E -(Field names de\214ne both the syntax and semantics of the v)142 584.4 Q +609 Q 2.5(,T)-.74 G(=S:1s;R:1s;E:5m)-2.5 E +(X\214lter3, S=inet:3333@localhost, T=C:2m)142 621 Q F0 2.5(5.12. The)87 +649.2 R(User Database)2.5 E F1 .478 +(The user database is deprecated in f)127 665.4 R -.2(avo)-.1 G 2.978 +(ro).2 G 2.978(f`)-2.978 G(`virtusertable')-3.718 E 2.979('a)-.74 G .479 +(nd `)-2.979 F(`genericstable')-.74 E 2.979('a)-.74 G 2.979(se)-2.979 G +(xplained)-3.129 E 1.03(in the \214le)102 677.4 R F0(cf/README)3.53 E F1 +6.03(.I)C 3.53(fy)-6.03 G 1.03(ou ha)-3.53 F 1.329 -.15(ve a ve)-.2 H +1.029(rsion of).15 F F2(sendmail)3.529 E F1 1.029 +(with the user database package com-)3.529 F(piled in, the handling of \ +sender and recipient addresses is modi\214ed.)102 689.4 Q +(The location of this database is controlled with the)127 705.6 Q F0 +(UserDatabaseSpec)2.5 E F1(option.)2.5 E 0 Cg EP +%%Page: 90 86 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-90 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E 2.5(5.12.1. Structur)102 96 R +2.5(eo)-.18 G 2.5(ft)-2.5 G(he user database)-2.5 E/F1 10/Times-Roman@0 +SF(The database is a sorted \(BT)142 112.2 Q(ree-based\) structure.)-.35 +E(User records are stored with the k)5 E -.15(ey)-.1 G(:).15 E/F2 10 +/Times-Italic@0 SF(user)157 128.4 Q(-name)-.2 E F0(:)A F2(\214eld-name)A +F1 .128(The sorted database format ensures that user records are cluste\ +red together)117 144.6 R 5.129(.M)-.55 G .129(eta-information is)-5.129 +F(al)117 156.6 Q -.1(wa)-.1 G(ys stored with a leading colon.).1 E +(Field names de\214ne both the syntax and semantics of the v)142 172.8 Q 2.5(alue. De\214ned)-.25 F(\214elds include:)2.5 E 33.39(maildrop The) -117 600.6 R(deli)4.872 E -.15(ve)-.25 G 2.372(ry address for this user) -.15 F 7.372(.T)-.55 G 2.373(here may be multiple v)-7.372 F 2.373 -(alues of this)-.25 F 2.675(record. In)189 612.6 R(particular)2.675 E +117 189 R(deli)4.873 E -.15(ve)-.25 G 2.373(ry address for this user).15 +F 7.373(.T)-.55 G 2.372(here may be multiple v)-7.373 F 2.372 +(alues of this)-.25 F 2.675(record. In)189 201 R(particular)2.675 E 2.675(,m)-.4 G .175(ailing lists will ha)-2.675 F .475 -.15(ve o)-.2 H -(ne).15 E F1(maildr)2.675 E(op)-.45 E F2 .175(record for each user)2.675 -F(on the list.)189 624.6 Q 30.06(mailname The)117 640.8 R 1.026 -(outgoing mailname for this user)3.526 F 6.026(.F)-.55 G 1.027 +(ne).15 E F2(maildr)2.675 E(op)-.45 E F1 .175(record for each user)2.675 +F(on the list.)189 213 Q 30.06(mailname The)117 229.2 R 1.027 +(outgoing mailname for this user)3.527 F 6.026(.F)-.55 G 1.026 (or each outgoing name, there should)-6.176 F .08(be an appropriate)189 -652.8 R F1(maildr)2.58 E(op)-.45 E F2 .08(record for that name to allo) -2.58 F 2.58(wr)-.25 G .08(eturn mail.)-2.58 F .08(See also)5.08 F F1 -(:default:mailname)189 664.8 Q F2(.)A 25.62(mailsender Changes)117 681 R -(an)3.447 E 3.447(ym)-.15 G .947(ail sent to this address to ha)-3.447 F -1.248 -.15(ve t)-.2 H .948(he indicated en).15 F -.15(ve)-.4 G .948 +241.2 R F2(maildr)2.58 E(op)-.45 E F1 .08(record for that name to allo) +2.58 F 2.58(wr)-.25 G .08(eturn mail.)-2.58 F .08(See also)5.08 F F2 +(:default:mailname)189 253.2 Q F1(.)A 25.62(mailsender Changes)117 269.4 +R(an)3.448 E 3.448(ym)-.15 G .948(ail sent to this address to ha)-3.448 +F 1.247 -.15(ve t)-.2 H .947(he indicated en).15 F -.15(ve)-.4 G .947 (lope sender).15 F(.)-.55 E .498(This is intended for mailing lists, an\ -d will normally be the name of an appro-)189 693 R .754 -(priate -request address.)189 705 R .754(It is v)5.754 F .755 -(ery similar to the o)-.15 F(wner)-.25 E(-)-.2 E F1(list)A F2 .755 -(syntax in the alias)3.255 F(\214le.)189 717 Q 0 Cg EP -%%Page: 89 85 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-89)195.86 E/F1 10/Times-Roman@0 SF 33.95(fullname The)117 96 R -(full name of the user)2.5 E(.)-.55 E(of)117 112.2 Q 13.66 +d will normally be the name of an appro-)189 281.4 R .755 +(priate -request address.)189 293.4 R .755(It is v)5.755 F .755 +(ery similar to the o)-.15 F(wner)-.25 E(-)-.2 E F2(list)A F1 .754 +(syntax in the alias)3.254 F(\214le.)189 305.4 Q 33.95(fullname The)117 +321.6 R(full name of the user)2.5 E(.)-.55 E(of)117 337.8 Q 13.66 (\214ce-address The)-.25 F(of)2.5 E(\214ce address for this user)-.25 E -(.)-.55 E(of)117 128.4 Q 19.21(\214ce-phone The)-.25 F(of)2.5 E -(\214ce phone number for this user)-.25 E(.)-.55 E(of)117 144.6 Q +(.)-.55 E(of)117 354 Q 19.21(\214ce-phone The)-.25 F(of)2.5 E +(\214ce phone number for this user)-.25 E(.)-.55 E(of)117 370.2 Q (\214ce-f)-.25 E 30.98(ax The)-.1 F(of)2.5 E(\214ce F)-.25 E (AX number for this user)-.74 E(.)-.55 E 13.96(home-address The)117 -160.8 R(home address for this user)2.5 E(.)-.55 E 19.51(home-phone The) -117 177 R(home phone number for this user)2.5 E(.)-.55 E(home-f)117 -193.2 Q 31.28(ax The)-.1 F(home F)2.5 E(AX number for this user)-.74 E -(.)-.55 E 41.73(project A)117 209.4 R .856 -(\(short\) description of the project this person is af)3.356 F .855 -(\214liated with.)-.25 F .855(In the Uni-)5.855 F -.15(ve)189 221.4 S +386.4 R(home address for this user)2.5 E(.)-.55 E 19.51(home-phone The) +117 402.6 R(home phone number for this user)2.5 E(.)-.55 E(home-f)117 +418.8 Q 31.28(ax The)-.1 F(home F)2.5 E(AX number for this user)-.74 E +(.)-.55 E 41.73(project A)117 435 R .855 +(\(short\) description of the project this person is af)3.355 F .856 +(\214liated with.)-.25 F .856(In the Uni-)5.856 F -.15(ve)189 447 S (rsity this is often just the name of their graduate advisor).15 E(.) --.55 E 52.28(plan A)117 237.6 R +-.55 E 52.28(plan A)117 463.2 R (pointer to a \214le from which plan information can be g)2.5 E -(athered.)-.05 E .924(As of this writing, only a fe)142 253.8 R 3.424 -(wo)-.25 G 3.424(ft)-3.424 G .925 -(hese \214elds are actually being used by)-3.424 F/F2 10/Times-Italic@0 -SF(sendmail)3.425 E F1(:)A F2(mail-)3.425 E(dr)117 265.8 Q(op)-.45 E F1 -(and)2.5 E F2(mailname)2.5 E F1 5(.A)C F2(\214ng)-2.5 E(er)-.1 E F1 +(athered.)-.05 E .925(As of this writing, only a fe)142 479.4 R 3.424 +(wo)-.25 G 3.424(ft)-3.424 G .924 +(hese \214elds are actually being used by)-3.424 F F2(sendmail)3.424 E +F1(:)A F2(mail-)3.424 E(dr)117 491.4 Q(op)-.45 E F1(and)2.5 E F2 +(mailname)2.5 E F1 5(.A)C F2(\214ng)-2.5 E(er)-.1 E F1 (program that uses the other \214elds is planned.)2.5 E F0 2.5 -(5.12.2. User)102 289.8 R(database semantics)2.5 E F1 .996(When the re) -142 306 R .995(writing rules submit an address to the local mailer)-.25 -F 3.495(,t)-.4 G .995(he user name is passed)-3.495 F .78 -(through the alias \214le.)117 318 R .781(If no alias is found \(or if \ -the alias points back to the same address\), the)5.78 F 1.778 -(name \(with \231:maildrop\232 appended\) is then used as a k)117 330 R -2.077 -.15(ey i)-.1 H 4.277(nt).15 G 1.777(he user database.)-4.277 F -1.777(If no match)6.777 F -(occurs \(or if the maildrop points at the same address\), forw)117 342 -Q(arding is tried.)-.1 E .55(If the \214rst tok)142 358.2 R .551(en of \ -the user name returned by ruleset 0 is an \231@\232 sign, the user data\ -base)-.1 F .626(lookup is skipped.)117 370.2 R .625 -(The intent is that the user database will act as a set of def)5.626 F -.625(aults for a cluster)-.1 F 1.533 -(\(in our case, the Computer Science Di)117 382.2 R 1.533 +(5.12.2. User)102 515.4 R(database semantics)2.5 E F1 .995(When the re) +142 531.6 R .995(writing rules submit an address to the local mailer) +-.25 F 3.496(,t)-.4 G .996(he user name is passed)-3.496 F .781 +(through the alias \214le.)117 543.6 R .78(If no alias is found \(or if\ + the alias points back to the same address\), the)5.781 F 1.777 +(name \(with \231:maildrop\232 appended\) is then used as a k)117 555.6 +R 2.078 -.15(ey i)-.1 H 4.278(nt).15 G 1.778(he user database.)-4.278 F +1.778(If no match)6.778 F +(occurs \(or if the maildrop points at the same address\), forw)117 +567.6 Q(arding is tried.)-.1 E .551(If the \214rst tok)142 583.8 R .55(\ +en of the user name returned by ruleset 0 is an \231@\232 sign, the use\ +r database)-.1 F .625(lookup is skipped.)117 595.8 R .625 +(The intent is that the user database will act as a set of def)5.625 F +.626(aults for a cluster)-.1 F 1.533 +(\(in our case, the Computer Science Di)117 607.8 R 1.533 (vision\); mail sent to a speci\214c machine should ignore)-.25 F -(these def)117 394.2 Q(aults.)-.1 E .351 -(When mail is sent, the name of the sending user is look)142 410.4 R -.351(ed up in the database.)-.1 F .351(If that user)5.351 F .04 -(has a \231mailname\232 record, the v)117 422.4 R .041 -(alue of that record is used as their outgoing name.)-.25 F -.15(Fo) -5.041 G 2.541(re).15 G .041(xample, I)-2.691 F(might ha)117 434.4 Q .3 --.15(ve a r)-.2 H(ecord:).15 E 12.29(eric:mailname Eric.Allman@CS.Berk) -157 450.6 R(ele)-.1 E -.65(y.)-.15 G(EDU).65 E(This w)117 466.8 Q -(ould cause my outgoing mail to be sent as Eric.Allman.)-.1 E .52 -(If a \231maildrop\232 is found for the user)142 483 R 3.019(,b)-.4 G -.519(ut no corresponding \231mailname\232 record e)-3.219 F .519 -(xists, the)-.15 F 1.127(record \231:def)117 495 R 1.127 +(these def)117 619.8 Q(aults.)-.1 E .351 +(When mail is sent, the name of the sending user is look)142 636 R .351 +(ed up in the database.)-.1 F .352(If that user)5.351 F .041 +(has a \231mailname\232 record, the v)117 648 R .041 +(alue of that record is used as their outgoing name.)-.25 F -.15(Fo)5.04 +G 2.54(re).15 G .04(xample, I)-2.69 F(might ha)117 660 Q .3 -.15(ve a r) +-.2 H(ecord:).15 E 12.29(eric:mailname Eric.Allman@CS.Berk)157 676.2 R +(ele)-.1 E -.65(y.)-.15 G(EDU).65 E(This w)117 692.4 Q +(ould cause my outgoing mail to be sent as Eric.Allman.)-.1 E .519 +(If a \231maildrop\232 is found for the user)142 708.6 R 3.019(,b)-.4 G +.52(ut no corresponding \231mailname\232 record e)-3.219 F .52 +(xists, the)-.15 F 1.128(record \231:def)117 720.6 R 1.128 (ault:mailname\232 is consulted.)-.1 F 1.127 -(If present, this is the name of a host to o)6.127 F -.15(ve)-.15 G -1.128(rride the).15 F .625(local host.)117 507 R -.15(Fo)5.625 G 3.125 -(re).15 G .625(xample, in our case we w)-3.275 F .625 -(ould set it to \231CS.Berk)-.1 F(ele)-.1 E -.65(y.)-.15 G 3.125 -(EDU\232. The).65 F(ef)3.125 E .625(fect is that)-.25 F(an)117 519 Q -.881(yone kno)-.15 F .882(wn in the database gets their outgoing mail s\ +(If present, this is the name of a host to o)6.128 F -.15(ve)-.15 G +1.127(rride the).15 F 0 Cg EP +%%Page: 91 87 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-91)195.86 E/F1 10/Times-Roman@0 SF .625(local host.)117 96 R +-.15(Fo)5.625 G 3.125(re).15 G .625(xample, in our case we w)-3.275 F +.625(ould set it to \231CS.Berk)-.1 F(ele)-.1 E -.65(y.)-.15 G 3.125 +(EDU\232. The).65 F(ef)3.125 E .625(fect is that)-.25 F(an)117 108 Q +.882(yone kno)-.15 F .882(wn in the database gets their outgoing mail s\ tamped as \231user@CS.Berk)-.25 F(ele)-.1 E -.65(y.)-.15 G(EDU\232,).65 -E -.2(bu)117 531 S 2.5(tp).2 G +E -.2(bu)117 120 S 2.5(tp).2 G (eople not listed in the database use the local hostname.)-2.5 E F0 2.5 -(5.12.3. Cr)102 557 R(eating the database)-.18 E/F3 7/Times-Bold@0 SF -(23)-4 I F1 .375(The user database is b)142 573.2 R .375(uilt from a te) --.2 F .375(xt \214le using the)-.15 F F2(mak)2.875 E(emap)-.1 E F1 .375 -(utility \(in the distrib)2.875 F .375(ution in)-.2 F 1.039(the mak)117 -585.2 R 1.039(emap subdirectory\).)-.1 F 1.039(The te)6.039 F 1.038 +(5.12.3. Cr)102 146 R(eating the database)-.18 E/F2 7/Times-Bold@0 SF +(23)-4 I F1 .375(The user database is b)142 162.2 R .375(uilt from a te) +-.2 F .375(xt \214le using the)-.15 F/F3 10/Times-Italic@0 SF(mak)2.875 +E(emap)-.1 E F1 .375(utility \(in the distrib)2.875 F .375(ution in)-.2 +F 1.038(the mak)117 174.2 R 1.038(emap subdirectory\).)-.1 F 1.038 +(The te)6.038 F 1.039 (xt \214le is a series of lines corresponding to userdb records;)-.15 F -1.588(each line has a k)117 597.2 R 1.889 -.15(ey a)-.1 H 1.589(nd a v) +1.589(each line has a k)117 186.2 R 1.889 -.15(ey a)-.1 H 1.589(nd a v) .15 F 1.589(alue separated by white space.)-.25 F 1.589(The k)6.589 F -1.889 -.15(ey i)-.1 H 4.089(sa).15 G -.1(lwa)-4.089 G 1.589 -(ys in the format).1 F(described abo)117 609.2 Q .3 -.15(ve \212 f)-.15 -H(or e).15 E(xample:)-.15 E(eric:maildrop)157 625.4 Q 3.984 +1.889 -.15(ey i)-.1 H 4.089(sa).15 G -.1(lwa)-4.089 G 1.588 +(ys in the format).1 F(described abo)117 198.2 Q .3 -.15(ve \212 f)-.15 +H(or e).15 E(xample:)-.15 E(eric:maildrop)157 214.4 Q 3.984 (This \214le is normally installed in a system directory; for e)117 -641.6 R 3.984(xample, it might be called)-.15 F F2(/etc/mail/user)117 -653.6 Q(db)-.37 E F1 5(.T)C 2.5(om)-5.8 G(ak)-2.5 E 2.5(et)-.1 G -(he database v)-2.5 E(ersion of the map, run the program:)-.15 E .32 LW -76 669.2 72 669.2 DL 80 669.2 76 669.2 DL 84 669.2 80 669.2 DL 88 669.2 -84 669.2 DL 92 669.2 88 669.2 DL 96 669.2 92 669.2 DL 100 669.2 96 669.2 -DL 104 669.2 100 669.2 DL 108 669.2 104 669.2 DL 112 669.2 108 669.2 DL -116 669.2 112 669.2 DL 120 669.2 116 669.2 DL 124 669.2 120 669.2 DL 128 -669.2 124 669.2 DL 132 669.2 128 669.2 DL 136 669.2 132 669.2 DL 140 -669.2 136 669.2 DL 144 669.2 140 669.2 DL 148 669.2 144 669.2 DL 152 -669.2 148 669.2 DL 156 669.2 152 669.2 DL 160 669.2 156 669.2 DL 164 -669.2 160 669.2 DL 168 669.2 164 669.2 DL 172 669.2 168 669.2 DL 176 -669.2 172 669.2 DL 180 669.2 176 669.2 DL 184 669.2 180 669.2 DL 188 -669.2 184 669.2 DL 192 669.2 188 669.2 DL 196 669.2 192 669.2 DL 200 -669.2 196 669.2 DL 204 669.2 200 669.2 DL 208 669.2 204 669.2 DL 212 -669.2 208 669.2 DL 216 669.2 212 669.2 DL/F4 5/Times-Roman@0 SF(23)93.6 -679.6 Q/F5 8/Times-Roman@0 SF .473(These instructions are kno)3.2 J .473 -(wn to be incomplete.)-.2 F .472(Other features are a)4.473 F -.2(va) --.16 G .472(ilable which pro).2 F .472(vide similar functionality)-.12 F -2.472(,e)-.52 G .472(.g., virtual)-2.472 F -(hosting and mapping local addresses into a generic form as e)72 692.4 Q -(xplained in cf/README.)-.12 E 0 Cg EP -%%Page: 90 86 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-90 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(mak)157 -96 Q(emap btree /etc/mail/userdb < /etc/mail/userdb)-.1 E .077 -(Then create a con\214g \214le that uses this.)117 112.2 R -.15(Fo)5.077 -G 2.577(re).15 G .077 +230.6 R 3.985(xample, it might be called)-.15 F F3(/etc/mail/user)117 +242.6 Q(db)-.37 E F1 5(.T)C 2.5(om)-5.8 G(ak)-2.5 E 2.5(et)-.1 G +(he database v)-2.5 E(ersion of the map, run the program:)-.15 E(mak)157 +258.8 Q(emap btree /etc/mail/userdb < /etc/mail/userdb)-.1 E .077 +(Then create a con\214g \214le that uses this.)117 275 R -.15(Fo)5.077 G +2.577(re).15 G .077 (xample, using the V8 M4 con\214guration, include the)-2.727 F(follo)117 -124.2 Q(wing line in your .mc \214le:)-.25 E -(de\214ne\(\222confUSERDB_SPEC\264, /etc/mail/userdb\))157 140.4 Q F0 -2.5(6. O)72 168.6 R(THER CONFIGURA)-.4 E(TION)-.95 E F1 .907 +287 Q(wing line in your .mc \214le:)-.25 E +(de\214ne\(\222confUSERDB_SPEC\264, /etc/mail/userdb\))157 303.2 Q F0 +2.5(6. O)72 331.4 R(THER CONFIGURA)-.4 E(TION)-.95 E F1 .907 (There are some con\214guration changes that can be made by recompiling) -112 184.8 R/F2 10/Times-Italic@0 SF(sendmail)3.407 E F1 5.907(.T)C .906 -(his section)-5.907 F 1.139(describes what changes can be made and what\ - has to be modi\214ed to mak)87 196.8 R 3.639(et)-.1 G 3.639(hem. In) --3.639 F 1.139(most cases this)3.639 F -(should be unnecessary unless you are porting)87 208.8 Q F2(sendmail)2.5 -E F1(to a ne)2.5 E 2.5(we)-.25 G -.4(nv)-2.5 G(ironment.).4 E F0 2.5 -(6.1. P)87 232.8 R(arameters in de)-.1 E(vtools/OS/$oscf)-.15 E F1 .92 -(These parameters are intended to describe the compilation en)127 249 R -.92(vironment, not site polic)-.4 F 2.22 -.65(y, a)-.15 H(nd).65 E .739 -(should normally be de\214ned in the operating system con\214guration \ -\214le.)102 261 R F0 .74(This section needs a com-)5.739 F(plete r)102 -273 Q(ewrite.)-.18 E F1 39.5(NDBM If)102 289.2 R .665(set, the ne)3.165 -F 3.165(wv)-.25 G .664(ersion of the DBM library that allo)-3.315 F .664 -(ws multiple databases will be)-.25 F 2.542(used. If)174 301.2 R .042 -(neither NDBM nor NEWDB are set, a much less ef)2.542 F .043 -(\214cient method of alias)-.25 F(lookup is used.)174 313.2 Q 32.84 -(NEWDB If)102 329.4 R .142(set, use the ne)2.642 F 2.642(wd)-.25 G .142 -(atabase package from Berk)-2.642 F(ele)-.1 E 2.641(y\()-.15 G .141 -(from 4.4BSD\).)-2.641 F .141(This package)5.141 F .266 -(is substantially f)174 341.4 R .267(aster than DBM or NDBM.)-.1 F .267 -(If NEWDB and NDBM are both set,)5.267 F F2(sendmail)174 353.4 Q F1 +112 347.6 R F3(sendmail)3.407 E F1 5.907(.T)C .907(his section)-5.907 F +1.139(describes what changes can be made and what has to be modi\214ed \ +to mak)87 359.6 R 3.639(et)-.1 G 3.639(hem. In)-3.639 F 1.138 +(most cases this)3.639 F(should be unnecessary unless you are porting)87 +371.6 Q F3(sendmail)2.5 E F1(to a ne)2.5 E 2.5(we)-.25 G -.4(nv)-2.5 G +(ironment.).4 E F0 2.5(6.1. P)87 395.6 R(arameters in de)-.1 E +(vtools/OS/$oscf)-.15 E F1 .92 +(These parameters are intended to describe the compilation en)127 411.8 +R .92(vironment, not site polic)-.4 F 2.22 -.65(y, a)-.15 H(nd).65 E +.739(should normally be de\214ned in the operating system con\214gurati\ +on \214le.)102 423.8 R F0 .739(This section needs a com-)5.739 F +(plete r)102 435.8 Q(ewrite.)-.18 E F1 39.5(NDBM If)102 452 R .664 +(set, the ne)3.164 F 3.164(wv)-.25 G .664 +(ersion of the DBM library that allo)-3.314 F .665 +(ws multiple databases will be)-.25 F 2.543(used. If)174 464 R .042 +(neither NDBM nor NEWDB are set, a much less ef)2.543 F .042 +(\214cient method of alias)-.25 F(lookup is used.)174 476 Q 32.84 +(NEWDB If)102 492.2 R .141(set, use the ne)2.641 F 2.642(wd)-.25 G .142 +(atabase package from Berk)-2.642 F(ele)-.1 E 2.642(y\()-.15 G .142 +(from 4.4BSD\).)-2.642 F .142(This package)5.142 F .267 +(is substantially f)174 504.2 R .267(aster than DBM or NDBM.)-.1 F .267 +(If NEWDB and NDBM are both set,)5.267 F F3(sendmail)174 516.2 Q F1 (will read DBM \214les, b)2.5 E(ut will create and use NEWDB \214les.) --.2 E 53.39(NIS Include)102 369.6 R .12(support for NIS.)2.62 F .119 -(If set together with)5.119 F F2(both)2.619 E F1 .119(NEWDB and NDBM,) -2.619 F F2(sendmail)2.619 E F1 .947(will create both DBM and NEWDB \214\ -les if and only if an alias \214le includes the)174 381.6 R 3.409 -(substring \231/yp/\232 in the name.)174 393.6 R 3.409 +-.2 E 53.39(NIS Include)102 532.4 R .119(support for NIS.)2.619 F .119 +(If set together with)5.119 F F3(both)2.619 E F1 .119(NEWDB and NDBM,) +2.619 F F3(sendmail)2.62 E F1 .947(will create both DBM and NEWDB \214l\ +es if and only if an alias \214le includes the)174 544.4 R 3.409 +(substring \231/yp/\232 in the name.)174 556.4 R 3.409 (This is intended for compatibility with Sun)8.409 F(Microsystems')174 -405.6 Q F2(mkalias)2.5 E F1(program used on YP masters.)2.5 E 28.94 -(NISPLUS Compile)102 421.8 R(in support for NIS+.)2.5 E 26.73 -(NETINFO Compile)102 438 R(in support for NetInfo \(NeXT stations\).)2.5 -E(LD)102 454.2 Q 22.12(APMAP Compile)-.4 F 1.225(in support for LD)3.725 -F 1.225(AP X500 queries.)-.4 F 1.226(Requires libldap and liblber from) -6.226 F 2.799(the Umich LD)174 466.2 R 2.798 -(AP 3.2 or 3.3 release or equi)-.4 F -.25(va)-.25 G 2.798 +568.4 Q F3(mkalias)2.5 E F1(program used on YP masters.)2.5 E 28.94 +(NISPLUS Compile)102 584.6 R(in support for NIS+.)2.5 E 26.73 +(NETINFO Compile)102 600.8 R(in support for NetInfo \(NeXT stations\).) +2.5 E(LD)102 617 Q 22.12(APMAP Compile)-.4 F 1.226(in support for LD) +3.726 F 1.226(AP X500 queries.)-.4 F 1.225 +(Requires libldap and liblber from)6.225 F 2.798(the Umich LD)174 629 R +2.798(AP 3.2 or 3.3 release or equi)-.4 F -.25(va)-.25 G 2.799 (lent libraries for other LD).25 F(AP)-.4 E(libraries such as OpenLD)174 -478.2 Q(AP)-.4 E(.)-1.11 E 32.84(HESIOD Compile)102 494.4 R -(in support for Hesiod.)2.5 E 22.83(MAP_NSD Compile)102 510.6 R -(in support for IRIX NSD lookups.)2.5 E 9.5(MAP_REGEX Compile)102 526.8 -R(in support for re)2.5 E(gular e)-.15 E(xpression matching.)-.15 E -27.83(DNSMAP Compile)102 543 R(in support for DNS map lookups in the)2.5 -E F2(sendmail.cf)2.5 E F1(\214le.)2.5 E 30.05(PH_MAP Compile)102 559.2 R -(in support for ph lookups.)2.5 E 45.05(SASL Compile)102 575.4 R 1.474 -(in support for SASL, a required component for SMTP Authentication)3.974 -F(support.)174 587.4 Q(ST)102 603.6 Q(AR)-.93 E 21.58(TTLS Compile)-.6 F -(in support for ST)2.5 E(AR)-.93 E(TTLS.)-.6 E 48.95(EGD Compile)102 -619.8 R .068(in support for the "Entrop)2.568 F 2.567(yG)-.1 G .067 -(athering Daemon" to pro)-2.567 F .067(vide better random)-.15 F -(data for TLS.)174 631.8 Q -1.63(TCPWRAPPERS Compile)102 648 R -(in support for TCP Wrappers.)2.5 E(_P)102 664.2 Q -1.11(AT)-.92 G -(H_SENDMAILCF)1.11 E(The pathname of the sendmail.cf \214le.)174 676.2 Q -(_P)102 692.4 Q -1.11(AT)-.92 G(H_SENDMAILPID)1.11 E -(The pathname of the sendmail.pid \214le.)174 704.4 Q 0 Cg EP -%%Page: 91 87 +641 Q(AP)-.4 E(.)-1.11 E 32.84(HESIOD Compile)102 657.2 R +(in support for Hesiod.)2.5 E .32 LW 76 669.2 72 669.2 DL 80 669.2 76 +669.2 DL 84 669.2 80 669.2 DL 88 669.2 84 669.2 DL 92 669.2 88 669.2 DL +96 669.2 92 669.2 DL 100 669.2 96 669.2 DL 104 669.2 100 669.2 DL 108 +669.2 104 669.2 DL 112 669.2 108 669.2 DL 116 669.2 112 669.2 DL 120 +669.2 116 669.2 DL 124 669.2 120 669.2 DL 128 669.2 124 669.2 DL 132 +669.2 128 669.2 DL 136 669.2 132 669.2 DL 140 669.2 136 669.2 DL 144 +669.2 140 669.2 DL 148 669.2 144 669.2 DL 152 669.2 148 669.2 DL 156 +669.2 152 669.2 DL 160 669.2 156 669.2 DL 164 669.2 160 669.2 DL 168 +669.2 164 669.2 DL 172 669.2 168 669.2 DL 176 669.2 172 669.2 DL 180 +669.2 176 669.2 DL 184 669.2 180 669.2 DL 188 669.2 184 669.2 DL 192 +669.2 188 669.2 DL 196 669.2 192 669.2 DL 200 669.2 196 669.2 DL 204 +669.2 200 669.2 DL 208 669.2 204 669.2 DL 212 669.2 208 669.2 DL 216 +669.2 212 669.2 DL/F4 5/Times-Roman@0 SF(23)93.6 679.6 Q/F5 8 +/Times-Roman@0 SF .472(These instructions are kno)3.2 J .472 +(wn to be incomplete.)-.2 F .473(Other features are a)4.472 F -.2(va) +-.16 G .473(ilable which pro).2 F .473(vide similar functionality)-.12 F +2.473(,e)-.52 G .473(.g., virtual)-2.473 F +(hosting and mapping local addresses into a generic form as e)72 692.4 Q +(xplained in cf/README.)-.12 E 0 Cg EP +%%Page: 92 88 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-91)195.86 E/F1 10/Times-Roman@0 SF(SM_CONF_SHM)102 96 Q -(Compile in support for shared memory)174 108 Q 2.5(,s)-.65 G -(ee section about "/v)-2.5 E(ar/spool/mqueue".)-.25 E(MIL)102 124.2 Q +/F0 10/Times-Bold@0 SF 193.36(SMM:08-92 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 22.83 +(MAP_NSD Compile)102 96 R(in support for IRIX NSD lookups.)2.5 E 9.5 +(MAP_REGEX Compile)102 112.2 R(in support for re)2.5 E(gular e)-.15 E +(xpression matching.)-.15 E 27.83(DNSMAP Compile)102 128.4 R +(in support for DNS map lookups in the)2.5 E/F2 10/Times-Italic@0 SF +(sendmail.cf)2.5 E F1(\214le.)2.5 E 30.05(PH_MAP Compile)102 144.6 R +(in support for ph lookups.)2.5 E 45.05(SASL Compile)102 160.8 R 1.474 +(in support for SASL, a required component for SMTP Authentication)3.974 +F(support.)174 172.8 Q(ST)102 189 Q(AR)-.93 E 21.58(TTLS Compile)-.6 F +(in support for ST)2.5 E(AR)-.93 E(TTLS.)-.6 E 48.95(EGD Compile)102 +205.2 R .067(in support for the "Entrop)2.567 F 2.567(yG)-.1 G .067 +(athering Daemon" to pro)-2.567 F .068(vide better random)-.15 F +(data for TLS.)174 217.2 Q -1.63(TCPWRAPPERS Compile)102 233.4 R +(in support for TCP Wrappers.)2.5 E(_P)102 249.6 Q -1.11(AT)-.92 G +(H_SENDMAILCF)1.11 E(The pathname of the sendmail.cf \214le.)174 261.6 Q +(_P)102 277.8 Q -1.11(AT)-.92 G(H_SENDMAILPID)1.11 E +(The pathname of the sendmail.pid \214le.)174 289.8 Q(SM_CONF_SHM)102 +306 Q(Compile in support for shared memory)174 318 Q 2.5(,s)-.65 G +(ee section about "/v)-2.5 E(ar/spool/mqueue".)-.25 E(MIL)102 334.2 Q 33.2(TER Compile)-.92 F(in support for contacting e)2.5 E -(xternal mail \214lters b)-.15 E(uilt with the Milter API.)-.2 E 1.439 -(There are also se)127 140.4 R -.15(ve)-.25 G 1.439 -(ral compilation \215ags to indicate the en).15 F 1.44 +(xternal mail \214lters b)-.15 E(uilt with the Milter API.)-.2 E 1.44 +(There are also se)127 350.4 R -.15(ve)-.25 G 1.439 +(ral compilation \215ags to indicate the en).15 F 1.439 (vironment such as \231_AIX3\232 and)-.4 F 2.5(\231_SCO_unix_\232. See) -102 152.4 R +102 362.4 R (the sendmail/README \214le for the latest scoop on these \215ags.)2.5 E -F0 2.5(6.2. P)87 176.4 R(arameters in sendmail/conf)-.1 E(.h)-.15 E F1 --.15(Pa)127 192.6 S .896 -(rameters and compilation options are de\214ned in conf.h.).15 F .895 -(Most of these need not normally)5.895 F .192(be tweak)102 204.6 R .192 +F0 2.5(6.2. P)87 386.4 R(arameters in sendmail/conf)-.1 E(.h)-.15 E F1 +-.15(Pa)127 402.6 S .895 +(rameters and compilation options are de\214ned in conf.h.).15 F .896 +(Most of these need not normally)5.895 F .193(be tweak)102 414.6 R .192 (ed; common parameters are all in sendmail.cf.)-.1 F(Ho)5.192 E(we)-.25 E -.15(ve)-.25 G .992 -.4(r, t).15 H .192(he sizes of certain primiti).4 -F .493 -.15(ve ve)-.25 H(c-).15 E -(tors, etc., are included in this \214le.)102 216.6 Q(The numbers follo) +F .492 -.15(ve ve)-.25 H(c-).15 E +(tors, etc., are included in this \214le.)102 426.6 Q(The numbers follo) 5 E(wing the parameters are their def)-.25 E(ault v)-.1 E(alue.)-.25 E 1.247(This document is not the best source of information for compilati\ -on \215ags in conf.h \212 see)127 232.8 R -(sendmail/README or sendmail/conf.h itself.)102 244.8 Q(MAXLINE [2048]) -102 261 Q 2.068(The maximum line length of an)11.14 F 4.568(yi)-.15 G -2.068(nput line.)-4.568 F 2.069(If message lines e)7.068 F 2.069 -(xceed this)-.15 F .575(length the)188.4 273 R 3.075(yw)-.15 G .575 +on \215ags in conf.h \212 see)127 442.8 R +(sendmail/README or sendmail/conf.h itself.)102 454.8 Q(MAXLINE [2048]) +102 471 Q 2.069(The maximum line length of an)11.14 F 4.568(yi)-.15 G +2.068(nput line.)-4.568 F 2.068(If message lines e)7.068 F 2.068 +(xceed this)-.15 F .575(length the)188.4 483 R 3.075(yw)-.15 G .575 (ill still be processed correctly; ho)-3.075 F(we)-.25 E -.15(ve)-.25 G 1.375 -.4(r, h).15 H .575(eader lines, con\214gura-).4 F (tion \214le lines, alias lines, etc., must \214t within this limit.) -188.4 285 Q(MAXN)102 301.2 Q(AME [256])-.35 E(The maximum length of an) +188.4 495 Q(MAXN)102 511.2 Q(AME [256])-.35 E(The maximum length of an) 9.82 E 2.5(yn)-.15 G(ame, such as a host or a user name.)-2.5 E -(MAXPV [256])102 317.4 Q .25(The maximum number of parameters to an) +(MAXPV [256])102 527.4 Q .25(The maximum number of parameters to an) 26.13 F 2.75(ym)-.15 G(ailer)-2.75 E 5.25(.T)-.55 G .25 -(his limits the number of)-5.25 F .376 -(recipients that may be passed in one transaction.)188.4 329.4 R .375 -(It can be set to an)5.376 F 2.875(ya)-.15 G(rbitrary)-2.875 E .875 -(number abo)188.4 341.4 R 1.175 -.15(ve a)-.15 H .876(bout 10, since).15 -F/F2 10/Times-Italic@0 SF(sendmail)3.376 E F1 .876(will break up a deli) -3.376 F -.15(ve)-.25 G .876(ry into smaller).15 F .887 -(batches as needed.)188.4 353.4 R 3.387(Ah)5.887 G .887 -(igher number may reduce load on your system, ho)-3.387 F(w-)-.25 E --2.15 -.25(ev e)188.4 365.4 T -.55(r.).25 G(MAXQ)102 381.6 Q(UEUEGR)-.1 -E(OUPS [50])-.4 E(The maximum number of queue groups.)188.4 393.6 Q -(MAXA)102 409.8 Q -.18(TO)-1.11 G 2.5(M[).18 G 3.26(1000] The)-2.5 F -.063(maximum number of atoms \(tok)2.563 F .063 -(ens\) in a single address.)-.1 F -.15(Fo)5.064 G 2.564(re).15 G .064 -(xample, the)-2.714 F(address \231eric@CS.Berk)188.4 421.8 Q(ele)-.1 E +(his limits the number of)-5.25 F .375 +(recipients that may be passed in one transaction.)188.4 539.4 R .376 +(It can be set to an)5.376 F 2.876(ya)-.15 G(rbitrary)-2.876 E .876 +(number abo)188.4 551.4 R 1.176 -.15(ve a)-.15 H .876(bout 10, since).15 +F F2(sendmail)3.376 E F1 .876(will break up a deli)3.376 F -.15(ve)-.25 +G .875(ry into smaller).15 F .886(batches as needed.)188.4 563.4 R 3.386 +(Ah)5.886 G .887(igher number may reduce load on your system, ho)-3.386 +F(w-)-.25 E -2.15 -.25(ev e)188.4 575.4 T -.55(r.).25 G(MAXQ)102 591.6 Q +(UEUEGR)-.1 E(OUPS [50])-.4 E(The maximum number of queue groups.)188.4 +603.6 Q(MAXA)102 619.8 Q -.18(TO)-1.11 G 2.5(M[).18 G 3.26(1000] The) +-2.5 F .064(maximum number of atoms \(tok)2.564 F .063 +(ens\) in a single address.)-.1 F -.15(Fo)5.063 G 2.563(re).15 G .063 +(xample, the)-2.713 F(address \231eric@CS.Berk)188.4 631.8 Q(ele)-.1 E -.65(y.)-.15 G(EDU\232 is se).65 E -.15(ve)-.25 G 2.5(na).15 G(toms.) --2.5 E(MAXMAILERS [25])102 438 Q .122(The maximum number of mailers tha\ -t may be de\214ned in the con\214guration \214le.).02 F(This v)188.4 450 +-2.5 E(MAXMAILERS [25])102 648 Q .122(The maximum number of mailers tha\ +t may be de\214ned in the con\214guration \214le.).02 F(This v)188.4 660 Q(alue is de\214ned in include/sendmail/sendmail.h.)-.25 E(MAXR)102 -466.2 Q(WSETS [200])-.55 E .431(The maximum number of re).01 F .432 -(writing sets that may be de\214ned.)-.25 F .432(The \214rst half of) -5.432 F .035(these are reserv)188.4 478.2 R .035 -(ed for numeric speci\214cation \(e.g., `)-.15 F(`S92')-.74 E .034 -('\), while the upper half)-.74 F .491(are reserv)188.4 490.2 R .491 +676.2 Q(WSETS [200])-.55 E .432(The maximum number of re).01 F .432 +(writing sets that may be de\214ned.)-.25 F .431(The \214rst half of) +5.431 F .034(these are reserv)188.4 688.2 R .034 +(ed for numeric speci\214cation \(e.g., `)-.15 F(`S92')-.74 E .035 +('\), while the upper half)-.74 F .492(are reserv)188.4 700.2 R .492 (ed for auto-numbering \(e.g., `)-.15 F(`Sfoo')-.74 E 2.992('\). Thus,) --.74 F .492(with a v)2.992 F .492(alue of 200 an)-.25 F -(attempt to use `)188.4 502.2 Q(`S99')-.74 E 2.5('w)-.74 G +-.74 F .492(with a v)2.992 F .491(alue of 200 an)-.25 F +(attempt to use `)188.4 712.2 Q(`S99')-.74 E 2.5('w)-.74 G (ill succeed, b)-2.5 E(ut `)-.2 E(`S100')-.74 E 2.5('w)-.74 G(ill f)-2.5 -E(ail.)-.1 E(MAXPRIORITIES [25])102 518.4 Q 2.482 -(The maximum number of v)188.4 530.4 R 2.482 -(alues for the \231Precedence:\232 \214eld that may be)-.25 F -(de\214ned \(using the)188.4 542.4 Q F0(P)2.5 E F1 -(line in sendmail.cf\).)2.5 E(MAXUSERENVIR)102 558.6 Q(ON [100])-.4 E -.399(The maximum number of items in the user en)188.4 570.6 R .4 -(vironment that will be passed to)-.4 F(subordinate mailers.)188.4 582.6 -Q(MAXMXHOSTS [100])102 598.8 Q -(The maximum number of MX records we will accept for an)188.4 610.8 Q -2.5(ys)-.15 G(ingle host.)-2.5 E(MAXMAPST)102 627 Q -.4(AC)-.93 G 2.5 -(K[).4 G(12])-2.5 E 1.65(The maximum number of maps that may be "stack) -188.4 639 R 1.65(ed" in a)-.1 F F0(sequence)4.15 E F1(class)4.15 E(map.) -188.4 651 Q(MAXMIMEARGS [20])102 667.2 Q .718(The maximum number of ar) -188.4 679.2 R .718(guments in a MIME Content-T)-.18 F .718 -(ype: header; addi-)-.8 F(tional ar)188.4 691.2 Q -(guments will be ignored.)-.18 E(MAXMIMENESTING [20])102 707.4 Q .4(The\ - maximum depth to which MIME messages may be nested \(that is, nested) -188.4 719.4 R 0 Cg EP -%%Page: 92 88 +E(ail.)-.1 E 0 Cg EP +%%Page: 93 89 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-92 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 1.344(Me\ -ssage or Multipart documents; this does not limit the number of compo-) -188.4 96 R(nents in a single Multipart document\).)188.4 108 Q(MAXD)102 -124.2 Q(AEMONS [10])-.4 E 1.353(The maximum number of sock)188.4 136.2 R -1.353(ets sendmail will open for accepting connec-)-.1 F(tions on dif) -188.4 148.2 Q(ferent ports.)-.25 E(MAXMA)102 164.4 Q(CN)-.4 E -(AMELEN [25])-.35 E(The maximum length of a macro name.)188.4 176.4 Q -2.85(An)102 192.6 S .35(umber of other compilation options e)-2.85 F -2.851(xist. These)-.15 F .351 -(specify whether or not speci\214c code should be)2.851 F(compiled in.) -102 204.6 Q(Ones mark)5 E(ed with \207 are 0/1 v)-.1 E(alued.)-.25 E -36.69(NETINET\207 If)102 220.8 R .829 -(set, support for Internet protocol netw)3.33 F .829 -(orking is compiled in.)-.1 F(Pre)5.829 E .829(vious v)-.25 F(er)-.15 E -(-)-.2 E .177(sions of)188.4 232.8 R/F2 10/Times-Italic@0 SF(sendmail) -2.677 E F1 .177(referred to this as)2.677 F/F3 9/Times-Roman@0 SF -.36 -(DA)2.678 G(EMON).36 E F1 2.678(;t)C .178(his old usage is no)-2.678 F -2.678(wi)-.25 G(ncorrect.)-2.678 E(Def)188.4 244.8 Q 1.87 +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-93)195.86 E/F1 10/Times-Roman@0 SF(MAXPRIORITIES [25])102 96 Q +2.481(The maximum number of v)188.4 108 R 2.482 +(alues for the \231Precedence:\232 \214eld that may be)-.25 F +(de\214ned \(using the)188.4 120 Q F0(P)2.5 E F1(line in sendmail.cf\).) +2.5 E(MAXUSERENVIR)102 136.2 Q(ON [100])-.4 E .399 +(The maximum number of items in the user en)188.4 148.2 R .399 +(vironment that will be passed to)-.4 F(subordinate mailers.)188.4 160.2 +Q(MAXMXHOSTS [100])102 176.4 Q +(The maximum number of MX records we will accept for an)188.4 188.4 Q +2.5(ys)-.15 G(ingle host.)-2.5 E(MAXMAPST)102 204.6 Q -.4(AC)-.93 G 2.5 +(K[).4 G(12])-2.5 E 1.65(The maximum number of maps that may be "stack) +188.4 216.6 R 1.65(ed" in a)-.1 F F0(sequence)4.15 E F1(class)4.15 E +(map.)188.4 228.6 Q(MAXMIMEARGS [20])102 244.8 Q .718 +(The maximum number of ar)188.4 256.8 R .718 +(guments in a MIME Content-T)-.18 F .718(ype: header; addi-)-.8 F +(tional ar)188.4 268.8 Q(guments will be ignored.)-.18 E +(MAXMIMENESTING [20])102 285 Q .4(The maximum depth to which MIME messa\ +ges may be nested \(that is, nested)188.4 297 R 1.344(Message or Multip\ +art documents; this does not limit the number of compo-)188.4 309 R +(nents in a single Multipart document\).)188.4 321 Q(MAXD)102 337.2 Q +(AEMONS [10])-.4 E 1.353(The maximum number of sock)188.4 349.2 R 1.353 +(ets sendmail will open for accepting connec-)-.1 F(tions on dif)188.4 +361.2 Q(ferent ports.)-.25 E(MAXMA)102 377.4 Q(CN)-.4 E(AMELEN [25])-.35 +E(The maximum length of a macro name.)188.4 389.4 Q 2.851(An)102 405.6 S +.351(umber of other compilation options e)-2.851 F 2.851(xist. These) +-.15 F .35(specify whether or not speci\214c code should be)2.851 F +(compiled in.)102 417.6 Q(Ones mark)5 E(ed with \207 are 0/1 v)-.1 E +(alued.)-.25 E 36.69(NETINET\207 If)102 433.8 R .829 +(set, support for Internet protocol netw)3.329 F .829 +(orking is compiled in.)-.1 F(Pre)5.829 E .83(vious v)-.25 F(er)-.15 E +(-)-.2 E .178(sions of)188.4 445.8 R/F2 10/Times-Italic@0 SF(sendmail) +2.678 E F1 .178(referred to this as)2.678 F/F3 9/Times-Roman@0 SF -.36 +(DA)2.678 G(EMON).36 E F1 2.677(;t)C .177(his old usage is no)-2.677 F +2.677(wi)-.25 G(ncorrect.)-2.677 E(Def)188.4 457.8 Q 1.87 (aults on; turn it of)-.1 F 4.37(fi)-.25 G 4.37(nt)-4.37 G 1.87(he Mak) -4.37 F 1.87(e\214le if your system doesn')-.1 F 4.37(ts)-.18 G 1.87 -(upport the)-4.37 F(Internet protocols.)188.4 256.8 Q 31.69 -(NETINET6\207 If)102 273 R 2.26(set, support for IPv6 netw)4.76 F 2.26 +(upport the)-4.37 F(Internet protocols.)188.4 469.8 Q 31.69 +(NETINET6\207 If)102 486 R 2.26(set, support for IPv6 netw)4.76 F 2.26 (orking is compiled in.)-.1 F 2.26(It must be separately)7.26 F -(enabled by adding)188.4 285 Q F0(DaemonP)2.5 E(ortOptions)-.2 E F1 -(settings.)2.5 E 43.35(NETISO\207 If)102 301.2 R .143 -(set, support for ISO protocol netw)2.643 F .142 +(enabled by adding)188.4 498 Q F0(DaemonP)2.5 E(ortOptions)-.2 E F1 +(settings.)2.5 E 43.35(NETISO\207 If)102 514.2 R .142 +(set, support for ISO protocol netw)2.642 F .143 (orking is compiled in \(it may be appropri-)-.1 F -(ate to #de\214ne this in the Mak)188.4 313.2 Q -(e\214le instead of conf.h\).)-.1 E 34.47(NETUNIX\207 If)102 329.4 R .39 +(ate to #de\214ne this in the Mak)188.4 526.2 Q +(e\214le instead of conf.h\).)-.1 E 34.47(NETUNIX\207 If)102 542.4 R .39 (set, support for UNIX domain sock)2.89 F .39(ets is compiled in.)-.1 F -.39(This is used for con-)5.39 F(trol sock)188.4 341.4 Q(et support.)-.1 -E 63.35(LOG If)102 357.6 R .5(set, the)3 F F2(syslo)3 E(g)-.1 E F1 .5 +.39(This is used for con-)5.39 F(trol sock)188.4 554.4 Q(et support.)-.1 +E 63.35(LOG If)102 570.6 R .5(set, the)3 F F2(syslo)3 E(g)-.1 E F1 .5 (routine in use at some sites is used.)3 F .5(This mak)5.5 F .5 (es an informa-)-.1 F .504 -(tional log record for each message processed, and mak)188.4 369.6 R -.504(es a higher priority log)-.1 F .053 -(record for internal system errors.)188.4 381.6 R F0(STR)5.052 E(ONGL) --.3 E 2.552(YR)-.92 G(ECOMMENDED)-2.552 E F1 2.552<8a69>2.552 G 2.552 -(fy)-2.552 G(ou)-2.552 E -.1(wa)188.4 393.6 S(nt no logging, turn it of) +(tional log record for each message processed, and mak)188.4 582.6 R +.504(es a higher priority log)-.1 F .052 +(record for internal system errors.)188.4 594.6 R F0(STR)5.052 E(ONGL) +-.3 E 2.552(YR)-.92 G(ECOMMENDED)-2.552 E F1 2.553<8a69>2.552 G 2.553 +(fy)-2.553 G(ou)-2.553 E -.1(wa)188.4 606.6 S(nt no logging, turn it of) .1 E 2.5(fi)-.25 G 2.5(nt)-2.5 G(he con\214guration \214le.)-2.5 E(MA) -102 409.8 Q 11.12(TCHGECOS\207 Compile)-1.11 F 3.555 +102 622.8 Q 11.12(TCHGECOS\207 Compile)-1.11 F 3.555 (in the code to do `)6.055 F 3.555(`fuzzy matching')-.74 F 6.055('o)-.74 G 6.055(nt)-6.055 G 3.555(he GECOS \214eld in)-6.055 F 2.5 -(/etc/passwd. This)188.4 421.8 R(also requires that the)2.5 E F0 -(MatchGECOS)2.5 E F1(option be turned on.)2.5 E -.35(NA)102 438 S 13.15 -(MED_BIND\207 Compile).35 F .413(in code to use the Berk)2.913 F(ele)-.1 -E 2.912(yI)-.15 G .412(nternet Name Domain \(BIND\) serv)-2.912 F .412 -(er to)-.15 F(resolv)188.4 450 Q 2.5(eT)-.15 G(CP/IP host names.)-2.5 E -(NO)102 466.2 Q 38.76(TUNIX If)-.4 F .247(you are using a non-UNIX mail\ - format, you can set this \215ag to turn of)2.747 F 2.748(fs)-.25 G(pe-) --2.748 E(cial processing of UNIX-style \231From \232 lines.)188.4 478.2 -Q 39.45(USERDB\207 Include)102 494.4 R(the)3.449 E F0(experimental)3.449 +(/etc/passwd. This)188.4 634.8 R(also requires that the)2.5 E F0 +(MatchGECOS)2.5 E F1(option be turned on.)2.5 E -.35(NA)102 651 S 13.15 +(MED_BIND\207 Compile).35 F .412(in code to use the Berk)2.912 F(ele)-.1 +E 2.913(yI)-.15 G .413(nternet Name Domain \(BIND\) serv)-2.913 F .413 +(er to)-.15 F(resolv)188.4 663 Q 2.5(eT)-.15 G(CP/IP host names.)-2.5 E +(NO)102 679.2 Q 38.76(TUNIX If)-.4 F .248(you are using a non-UNIX mail\ + format, you can set this \215ag to turn of)2.748 F 2.747(fs)-.25 G(pe-) +-2.747 E(cial processing of UNIX-style \231From \232 lines.)188.4 691.2 +Q 39.45(USERDB\207 Include)102 707.4 R(the)3.448 E F0(experimental)3.448 E F1(Berk)3.449 E(ele)-.1 E 3.449(yu)-.15 G .949 -(ser information database package.)-3.449 F(This)5.948 E .27(adds a ne) -188.4 506.4 R 2.77(wl)-.25 G -2.15 -.25(ev e)-2.77 H 2.77(lo).25 G 2.77 +(ser information database package.)-3.449 F(This)5.949 E .27(adds a ne) +188.4 719.4 R 2.77(wl)-.25 G -2.15 -.25(ev e)-2.77 H 2.77(lo).25 G 2.77 (fl)-2.77 G .27(ocal name e)-2.77 F .27 -(xpansion between aliasing and forw)-.15 F 2.77(arding. It)-.1 F -(also uses the NEWDB package.)188.4 518.4 Q -(This may change in future releases.)5 E(The follo)102 534.6 Q +(xpansion between aliasing and forw)-.15 F 2.77(arding. It)-.1 F 0 Cg EP +%%Page: 94 90 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-94 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF +(also uses the NEWDB package.)188.4 96 Q +(This may change in future releases.)5 E(The follo)102 112.2 Q (wing options are normally turned on in per)-.25 E -(-operating-system clauses in conf.h.)-.2 E(IDENTPR)102 550.8 Q -1.88 --.4(OT O)-.4 H 19.61<8743>.4 G .376 -(ompile in the IDENT protocol as de\214ned in RFC 1413.)-19.61 F .375 -(This def)5.375 F .375(aults on for)-.1 F 1.053(all systems e)188.4 -562.8 R 1.053(xcept Ultrix, which apparently has the interesting \231fe\ -ature\232 that)-.15 F .83(when it recei)188.4 574.8 R -.15(ve)-.25 G +(-operating-system clauses in conf.h.)-.2 E(IDENTPR)102 128.4 Q -1.88 +-.4(OT O)-.4 H 19.61<8743>.4 G .375 +(ompile in the IDENT protocol as de\214ned in RFC 1413.)-19.61 F .376 +(This def)5.376 F .376(aults on for)-.1 F 1.053(all systems e)188.4 +140.4 R 1.053(xcept Ultrix, which apparently has the interesting \231fe\ +ature\232 that)-.15 F .83(when it recei)188.4 152.4 R -.15(ve)-.25 G 3.33(sa\231).15 G .83 (host unreachable\232 message it closes all open connections)-3.33 F -1.921(to that host.)188.4 586.8 R 1.921(Since some \214re)6.921 F -.1 -(wa)-.25 G 1.922(ll g).1 F(ate)-.05 E -.1(wa)-.25 G 1.922 +1.922(to that host.)188.4 164.4 R 1.922(Since some \214re)6.922 F -.1 +(wa)-.25 G 1.922(ll g).1 F(ate)-.05 E -.1(wa)-.25 G 1.921 (ys send this error code when you).1 F 2.055(access an unauthorized por\ -t \(such as 113, used by IDENT\), Ultrix cannot)188.4 598.8 R(recei) -188.4 610.8 Q .3 -.15(ve e)-.25 H(mail from such hosts.).15 E 39.45 -(SYSTEM5 Set)102 627 R +t \(such as 113, used by IDENT\), Ultrix cannot)188.4 176.4 R(recei) +188.4 188.4 Q .3 -.15(ve e)-.25 H(mail from such hosts.).15 E 39.45 +(SYSTEM5 Set)102 204.6 R (all of the compilation parameters appropriate for System V)2.5 E(.) --1.29 E 26.12(HASFLOCK\207 Use)102 643.2 R(Berk)2.844 E(ele)-.1 E -(y-style)-.15 E F0(\215ock)2.844 E F1 .344(instead of System V)2.844 F -F0(lockf)2.845 E F1 .345(to do \214le locking.)2.845 F .345(Due to)5.345 -F .184(the highly unusual semantics of locks across forks in)188.4 655.2 -R F0(lockf)2.684 E F1 2.684(,t)C .184(his should al)-2.684 F -.1(wa)-.1 -G(ys).1 E(be used if at all possible.)188.4 667.2 Q(HASINITGR)102 683.4 -Q 4.86(OUPS Set)-.4 F 1.284(this if your system has the)3.783 F F2 -(initgr)3.784 E(oups\(\))-.45 E F1 1.284(call \(if you ha)3.784 F 1.584 --.15(ve m)-.2 H 1.284(ultiple group).15 F 4.417(support\). This)188.4 -695.4 R 1.917(is the def)4.417 F 1.917(ault if SYSTEM5 is)-.1 F F2(not) -4.416 E F1 1.916(de\214ned or if you are on)4.416 F(HPUX.)188.4 707.4 Q -0 Cg EP -%%Page: 93 89 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-93)195.86 E/F1 10/Times-Roman@0 SF(HASUN)102 96 Q 27.59(AME Set) --.35 F 1.148(this if you ha)3.648 F 1.448 -.15(ve t)-.2 H(he).15 E/F2 10 -/Times-Italic@0 SF(uname)3.648 E F1 1.149 +-1.29 E 26.12(HASFLOCK\207 Use)102 220.8 R(Berk)2.845 E(ele)-.1 E +(y-style)-.15 E F0(\215ock)2.845 E F1 .345(instead of System V)2.845 F +F0(lockf)2.845 E F1 .344(to do \214le locking.)2.845 F .344(Due to)5.344 +F .184(the highly unusual semantics of locks across forks in)188.4 232.8 +R F0(lockf)2.684 E F1 2.684(,t)C .185(his should al)-2.684 F -.1(wa)-.1 +G(ys).1 E(be used if at all possible.)188.4 244.8 Q(HASINITGR)102 261 Q +4.86(OUPS Set)-.4 F 1.284(this if your system has the)3.784 F/F2 10 +/Times-Italic@0 SF(initgr)3.784 E(oups\(\))-.45 E F1 1.284 +(call \(if you ha)3.784 F 1.583 -.15(ve m)-.2 H 1.283(ultiple group).15 +F 4.416(support\). This)188.4 273 R 1.916(is the def)4.416 F 1.916 +(ault if SYSTEM5 is)-.1 F F2(not)4.416 E F1 1.917 +(de\214ned or if you are on)4.417 F(HPUX.)188.4 285 Q(HASUN)102 301.2 Q +27.59(AME Set)-.35 F 1.149(this if you ha)3.649 F 1.448 -.15(ve t)-.2 H +(he).15 E F2(uname)3.648 E F1 1.148 (\(2\) system call \(or corresponding library rou-)B 2.5(tine\). Set) -188.4 108 R(by def)2.5 E(ault if SYSTEM5 is set.)-.1 E(HASGETDT)102 -124.2 Q(ABLESIZE)-.93 E(Set this if you ha)188.4 136.2 Q .3 -.15(ve t) +188.4 313.2 R(by def)2.5 E(ault if SYSTEM5 is set.)-.1 E(HASGETDT)102 +329.4 Q(ABLESIZE)-.93 E(Set this if you ha)188.4 341.4 Q .3 -.15(ve t) -.2 H(he).15 E F2 -.1(ge)2.5 G(tdtablesize).1 E F1(\(2\) system call.)A -(HASW)102 152.4 Q 22.89(AITPID Set)-1.2 F(this if you ha)2.5 E .3 -.15 +(HASW)102 357.6 Q 22.89(AITPID Set)-1.2 F(this if you ha)2.5 E .3 -.15 (ve t)-.2 H(he).15 E F2(haswaitpid)2.5 E F1(\(2\) system call.)A -.74 -(FA)102 168.6 S(ST_PID_RECYCLE).74 E .542(Set this if your system can p\ -ossibly reuse the same pid in the same second of)188.4 180.6 R(time.) -188.4 192.6 Q 37.22(SFS_TYPE The)102 208.8 R .517 +(FA)102 373.8 S(ST_PID_RECYCLE).74 E .542(Set this if your system can p\ +ossibly reuse the same pid in the same second of)188.4 385.8 R(time.) +188.4 397.8 Q 37.22(SFS_TYPE The)102 414 R .517 (mechanism that can be used to get \214le system capacity information.) -3.016 F(The)5.517 E -.25(va)188.4 220.8 S .215 -(lues can be one of SFS_UST).25 F 2.435 -1.11(AT \()-.93 H .214 +3.017 F(The)5.516 E -.25(va)188.4 426 S .214(lues can be one of SFS_UST) +.25 F 2.435 -1.11(AT \()-.93 H .215 (use the ustat\(2\) syscall\), SFS_4ARGS \(use)1.11 F .415(the four ar) -188.4 232.8 R .415(gument statfs\(2\) syscall\), SFS_VFS \(use the tw) --.18 F 2.915(oa)-.1 G -.18(rg)-2.915 G .415(ument statfs\(2\)).18 F .716 -(syscall including \), SFS_MOUNT \(use the tw)188.4 244.8 R -3.216(oa)-.1 G -.18(rg)-3.216 G .716(ument statfs\(2\)).18 F 4.32 -(syscall including \), SFS_ST)188.4 256.8 R -1.11(AT)-.93 G +188.4 438 R .415(gument statfs\(2\) syscall\), SFS_VFS \(use the tw)-.18 +F 2.915(oa)-.1 G -.18(rg)-2.915 G .415(ument statfs\(2\)).18 F .716 +(syscall including \), SFS_MOUNT \(use the tw)188.4 450 R +3.217(oa)-.1 G -.18(rg)-3.217 G .717(ument statfs\(2\)).18 F 4.32 +(syscall including \), SFS_ST)188.4 462 R -1.11(AT)-.93 G 4.32(FS \(use the tw)1.11 F 6.82(oa)-.1 G -.18(rg)-6.82 G(ument).18 E -1.109(statfs\(2\) syscall including \), SFS_ST)188.4 268.8 -R -1.11(AT)-.93 G 1.109(VFS \(use the tw)1.11 F 3.608(oa)-.1 G -.18(rg) --3.608 G(u-).18 E 1.511(ment statfs\(2\) syscall including \), or SFS_NONE \(no w)188.4 280.8 R 1.512(ay to)-.1 F -(get this information\).)188.4 292.8 Q 40.57(LA_TYPE The)102 309 R +1.108(statfs\(2\) syscall including \), SFS_ST)188.4 474 R +-1.11(AT)-.93 G 1.109(VFS \(use the tw)1.11 F 3.609(oa)-.1 G -.18(rg) +-3.609 G(u-).18 E 1.511(ment statfs\(2\) syscall including \), or SFS_NONE \(no w)188.4 486 R 1.511(ay to)-.1 F +(get this information\).)188.4 498 Q 40.57(LA_TYPE The)102 514.2 R (load a)2.5 E -.15(ve)-.2 G(rage type.).15 E(Details are described belo) -5 E -.65(w.)-.25 G .343(The are se)102 325.2 R -.15(ve)-.25 G .342 +5 E -.65(w.)-.25 G .342(The are se)102 530.4 R -.15(ve)-.25 G .342 (ral b).15 F .342(uilt-in w)-.2 F .342(ays of computing the load a)-.1 F --.15(ve)-.2 G(rage.).15 E F2(Sendmail)5.342 E F1 .342 -(tries to auto-con\214gure them)2.842 F .266 -(based on imperfect guesses; you can select one using the)102 337.2 R F2 -(cc)2.767 E F1(option)2.767 E F0(\255DLA_TYPE=)2.767 E F2(type)A F1 -2.767(,w)C(here)-2.767 E F2(type)2.767 E F1(is:)102 349.2 Q 48.91 -(LA_INT The)102 365.4 R -.1(ke)3.453 G .952(rnel stores the load a).1 F +-.15(ve)-.2 G(rage.).15 E F2(Sendmail)5.342 E F1 .343 +(tries to auto-con\214gure them)2.842 F .267 +(based on imperfect guesses; you can select one using the)102 542.4 R F2 +(cc)2.766 E F1(option)2.766 E F0(\255DLA_TYPE=)2.766 E F2(type)A F1 +2.766(,w)C(here)-2.766 E F2(type)2.766 E F1(is:)102 554.4 Q 48.91 +(LA_INT The)102 570.6 R -.1(ke)3.452 G .952(rnel stores the load a).1 F -.15(ve)-.2 G .952(rage in the k).15 F .952 (ernel as an array of long inte)-.1 F(gers.)-.15 E(The actual v)188.4 -377.4 Q(alues are scaled by a f)-.25 E(actor FSCALE \(def)-.1 E -(ault 256\).)-.1 E(LA_SHOR)102 393.6 Q 35.89(TT)-.6 G .793(he k)-35.89 F -.793(ernel stores the load a)-.1 F -.15(ve)-.2 G .794(rage in the k).15 -F .794(ernel as an array of short inte)-.1 F(gers.)-.15 E(The actual v) -188.4 405.6 Q(alues are scaled by a f)-.25 E(actor FSCALE \(def)-.1 E -(ault 256\).)-.1 E(LA_FLO)102 421.8 Q 37.03 -1.11(AT T)-.35 H .089(he k) -1.11 F .089(ernel stores the load a)-.1 F -.15(ve)-.2 G .089 -(rage in the k).15 F .088(ernel as an array of double precision)-.1 F -(\215oats.)188.4 433.8 Q(LA_MA)102 450 Q 35.97(CH Use)-.4 F(MA)2.5 E +582.6 Q(alues are scaled by a f)-.25 E(actor FSCALE \(def)-.1 E +(ault 256\).)-.1 E(LA_SHOR)102 598.8 Q 35.89(TT)-.6 G .794(he k)-35.89 F +.794(ernel stores the load a)-.1 F -.15(ve)-.2 G .794(rage in the k).15 +F .793(ernel as an array of short inte)-.1 F(gers.)-.15 E(The actual v) +188.4 610.8 Q(alues are scaled by a f)-.25 E(actor FSCALE \(def)-.1 E +(ault 256\).)-.1 E(LA_FLO)102 627 Q 37.03 -1.11(AT T)-.35 H .088(he k) +1.11 F .088(ernel stores the load a)-.1 F -.15(ve)-.2 G .089 +(rage in the k).15 F .089(ernel as an array of double precision)-.1 F +(\215oats.)188.4 639 Q(LA_MA)102 655.2 Q 35.97(CH Use)-.4 F(MA)2.5 E (CH-style load a)-.4 E -.15(ve)-.2 G(rages.).15 E 39.45(LA_SUBR Call)102 -466.2 R(the)2.5 E F2 -.1(ge)2.5 G(tloadavg).1 E F1 +671.4 R(the)2.5 E F2 -.1(ge)2.5 G(tloadavg).1 E F1 (routine to get the load a)2.5 E -.15(ve)-.2 G -(rage as an array of doubles.).15 E(LA_ZER)102 482.4 Q 42.36(OA)-.4 G +(rage as an array of doubles.).15 E(LA_ZER)102 687.6 Q 42.36(OA)-.4 G -.1(lwa)-42.36 G(ys return zero as the load a).1 E -.15(ve)-.2 G 2.5 -(rage. This).15 F(is the f)2.5 E(allback case.)-.1 E .493(If type)102 -498.6 R/F3 9/Times-Roman@0 SF(LA_INT)2.993 E F1(,)A F3(LA_SHOR)2.993 E -(T)-.54 E F1 2.993(,o)C(r)-2.993 E F3(LA_FLO)2.993 E -.999(AT)-.315 G F1 -.493(is speci\214ed, you may also need to specify)3.992 F F3(_P)2.994 E --.999(AT)-.828 G(H_UNIX).999 E F1 .949 -(\(the path to your system binary\) and)102 510.6 R F3(LA_A)3.448 E -(VENR)-1.215 E(UN)-.36 E F1 .948(\(the name of the v)3.448 F .948 -(ariable containing the load)-.25 F -2.25 -.2(av e)102 522.6 T +(rage. This).15 F(is the f)2.5 E(allback case.)-.1 E .494(If type)102 +703.8 R/F3 9/Times-Roman@0 SF(LA_INT)2.994 E F1(,)A F3(LA_SHOR)2.994 E +(T)-.54 E F1 2.994(,o)C(r)-2.994 E F3(LA_FLO)2.993 E -.999(AT)-.315 G F1 +.493(is speci\214ed, you may also need to specify)3.992 F F3(_P)2.993 E +-.999(AT)-.828 G(H_UNIX).999 E F1 .948 +(\(the path to your system binary\) and)102 715.8 R F3(LA_A)3.448 E +(VENR)-1.215 E(UN)-.36 E F1 .949(\(the name of the v)3.448 F .949 +(ariable containing the load)-.25 F 0 Cg EP +%%Page: 95 91 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-95)195.86 E/F1 10/Times-Roman@0 SF -2.25 -.2(av e)102 96 T (rage in the k).2 E(ernel; usually \231_a)-.1 E -.15(ve)-.2 G (nrun\232 or \231a).15 E -.15(ve)-.2 G(nrun\232\).).15 E F0 2.5 -(6.3. Con\214guration)87 546.6 R(in sendmail/conf)2.5 E(.c)-.15 E F1 -(The follo)127 562.8 Q(wing changes can be made in conf.c.)-.25 E F0 2.5 -(6.3.1. Built-in)102 586.8 R(Header Semantics)2.5 E F1 1.248 +(6.3. Con\214guration)87 120 R(in sendmail/conf)2.5 E(.c)-.15 E F1 +(The follo)127 136.2 Q(wing changes can be made in conf.c.)-.25 E F0 2.5 +(6.3.1. Built-in)102 160.2 R(Header Semantics)2.5 E F1 1.248 (Not all header semantics are de\214ned in the con\214guration \214le.) -142 603 R 1.248(Header lines that should)6.248 F .305(only be included \ -by certain mailers \(as well as other more obscure semantics\) must be \ -speci\214ed)117 615 R .046(in the)117 627 R F2(HdrInfo)2.546 E F1 .046 -(table in)2.546 F F2(conf)2.546 E(.c)-.15 E F1 5.046(.T)C .047 -(his table contains the header name \(which should be in all lo)-5.046 F +142 176.4 R 1.247(Header lines that should)6.247 F .305(only be include\ +d by certain mailers \(as well as other more obscure semantics\) must b\ +e speci\214ed)117 188.4 R .047(in the)117 200.4 R/F2 10/Times-Italic@0 +SF(HdrInfo)2.547 E F1 .047(table in)2.547 F F2(conf)2.547 E(.c)-.15 E F1 +5.047(.T)C .046 +(his table contains the header name \(which should be in all lo)-5.047 F (wer)-.25 E(case\) and a set of header control \215ags \(described belo) -117 639 Q(w\), The \215ags are:)-.25 E(H_A)117 655.2 Q 30.97 +117 212.4 Q(w\), The \215ags are:)-.25 E(H_A)117 228.6 Q 30.97 (CHECK Normally)-.4 F .007 -(when the check is made to see if a header line is compatible with)2.508 -F 2.94(am)203.4 667.2 S(ailer)-2.94 E(,)-.4 E F2(sendmail)2.94 E F1 .441 -(will not delete an e)2.94 F .441(xisting line.)-.15 F .441 -(If this \215ag is set,)5.441 F F2(send-)2.941 E(mail)203.4 679.2 Q F1 +(when the check is made to see if a header line is compatible with)2.507 +F 2.941(am)203.4 240.6 S(ailer)-2.941 E(,)-.4 E F2(sendmail)2.941 E F1 +.441(will not delete an e)2.941 F .441(xisting line.)-.15 F .44 +(If this \215ag is set,)5.441 F F2(send-)2.94 E(mail)203.4 252.6 Q F1 .152(will delete e)2.652 F -.15(ve)-.25 G 2.652(ne).15 G .152 (xisting header lines.)-2.802 F .152 (That is, if this bit is set and the)5.152 F 1.425(mailer does not ha) -203.4 691.2 R 1.725 -.15(ve \215)-.2 H 1.425 +203.4 264.6 R 1.725 -.15(ve \215)-.2 H 1.425 (ag bits set that intersect with the required mailer).15 F 2.204 (\215ags in the header de\214nition in sendmail.cf, the header line is) -203.4 703.2 R F2(always)4.703 E F1(deleted.)203.4 715.2 Q 0 Cg EP -%%Page: 94 90 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-94 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 51.13 -(H_EOH If)117 96 R .206(this header \214eld is set, treat it lik)2.705 F -2.706(eab)-.1 G .206(lank line, i.e., it will signal the end)-2.706 F -(of the header and the be)203.4 108 Q(ginning of the message te)-.15 E -(xt.)-.15 E 39.45(H_FORCE Add)117 124.2 R 2.039(this header entry e) -4.539 F -.15(ve)-.25 G 4.539(ni).15 G 4.539(fo)-4.539 G 2.038(ne e) --4.539 F 2.038(xisted in the message before.)-.15 F 2.038(If a)7.038 F -2.188(header entry does not ha)203.4 136.2 R 2.488 -.15(ve t)-.2 H 2.188 -(his bit set,).15 F/F2 10/Times-Italic@0 SF(sendmail)4.688 E F1 2.189 -(will not add another)4.689 F .62 -(header line if a header line of this name already e)203.4 148.2 R 3.12 +203.4 276.6 R F2(always)4.704 E F1(deleted.)203.4 288.6 Q 51.13 +(H_EOH If)117 304.8 R .206(this header \214eld is set, treat it lik) +2.706 F 2.706(eab)-.1 G .206(lank line, i.e., it will signal the end) +-2.706 F(of the header and the be)203.4 316.8 Q +(ginning of the message te)-.15 E(xt.)-.15 E 39.45(H_FORCE Add)117 333 R +2.038(this header entry e)4.538 F -.15(ve)-.25 G 4.538(ni).15 G 4.538 +(fo)-4.538 G 2.038(ne e)-4.538 F 2.039(xisted in the message before.) +-.15 F 2.039(If a)7.039 F 2.189(header entry does not ha)203.4 345 R +2.488 -.15(ve t)-.2 H 2.188(his bit set,).15 F F2(sendmail)4.688 E F1 +2.188(will not add another)4.688 F .62 +(header line if a header line of this name already e)203.4 357 R 3.12 (xisted. This)-.15 F -.1(wo)3.12 G .62(uld nor).1 F(-)-.2 E -(mally be used to stamp the message by e)203.4 160.2 Q -.15(ve)-.25 G -(ryone who handled it.).15 E(H_TRA)117 176.4 Q 39.3(CE If)-.4 F 1.043 -(set, this is a timestamp \(trace\) \214eld.)3.543 F 1.044 -(If the number of trace \214elds in a)6.043 F .706(message e)203.4 188.4 +(mally be used to stamp the message by e)203.4 369 Q -.15(ve)-.25 G +(ryone who handled it.).15 E(H_TRA)117 385.2 Q 39.3(CE If)-.4 F 1.044 +(set, this is a timestamp \(trace\) \214eld.)3.544 F 1.043 +(If the number of trace \214elds in a)6.043 F .705(message e)203.4 397.2 R .705(xceeds a preset amount the message is returned on the assump-) --.15 F(tion that it has an aliasing loop.)203.4 200.4 Q 46.67(H_RCPT If) -117 216.6 R .332(set, this \214eld contains recipient addresses.)2.832 F -.332(This is used by the)5.332 F F02.832 E F1 .333(\215ag to)2.833 +-.15 F(tion that it has an aliasing loop.)203.4 409.2 Q 46.67(H_RCPT If) +117 425.4 R .332(set, this \214eld contains recipient addresses.)2.833 F +.332(This is used by the)5.332 F F02.832 E F1 .332(\215ag to)2.832 F 1.349(determine who to send to when it is collecting recipients from \ -the mes-)203.4 228.6 R(sage.)203.4 240.6 Q(H_FR)117 256.8 Q 43.74 +the mes-)203.4 437.4 R(sage.)203.4 449.4 Q(H_FR)117 465.6 Q 43.74 (OM This)-.4 F 1.673 -(\215ag indicates that this \214eld speci\214es a sender)4.173 F 6.674 -(.T)-.55 G 1.674(he order of these)-6.674 F .898(\214elds in the)203.4 -268.8 R F2(HdrInfo)3.398 E F1 .898(table speci\214es)3.398 F F2 +(\215ag indicates that this \214eld speci\214es a sender)4.174 F 6.673 +(.T)-.55 G 1.673(he order of these)-6.673 F .898(\214elds in the)203.4 +477.6 R F2(HdrInfo)3.398 E F1 .898(table speci\214es)3.398 F F2 (sendmail)3.398 E F1 1.998 -.55('s p)D .898(reference for which \214eld) -.55 F(to return error messages to.)203.4 280.8 Q(H_ERR)117 297 Q(ORST) +.55 F(to return error messages to.)203.4 489.6 Q(H_ERR)117 505.8 Q(ORST) -.4 E 22.53(OA)-.18 G(ddresses in this header should recei)-22.53 E .3 --.15(ve e)-.25 H(rror messages.).15 E 52.79(H_CTE This)117 313.2 R +-.15(ve e)-.25 H(rror messages.).15 E 52.79(H_CTE This)117 522 R (header is a Content-T)2.5 E(ransfer)-.35 E(-Encoding header)-.2 E(.) --.55 E 40.01(H_CTYPE This)117 329.4 R(header is a Content-T)2.5 E -(ype header)-.8 E(.)-.55 E(H_STRIPV)117 345.6 Q 25.25(AL Strip)-1.35 F -(the v)2.5 E(alue from the header \(for Bcc:\).)-.25 E(Let')117 361.8 Q +-.55 E 40.01(H_CTYPE This)117 538.2 R(header is a Content-T)2.5 E +(ype header)-.8 E(.)-.55 E(H_STRIPV)117 554.4 Q 25.25(AL Strip)-1.35 F +(the v)2.5 E(alue from the header \(for Bcc:\).)-.25 E(Let')117 570.6 Q 2.5(sl)-.55 G(ook at a sample)-2.5 E F2(HdrInfo)2.5 E F1 -(speci\214cation:)2.5 E(struct hdrinfo)157 378 Q(HdrInfo[] =)84.6 E({) -157 390 Q(/* originator \214elds, most to least signi\214cant)189.5 402 -Q(*/)5 E 52.29("resent-sender", H_FR)177 414 R(OM,)-.4 E 58.95 -("resent-from", H_FR)177 426 R(OM,)-.4 E 79.5("sender", H_FR)177 438 R -(OM,)-.4 E 86.16("from", H_FR)177 450 R(OM,)-.4 E 66.72 -("full-name", H_A)177 462 R(CHECK,)-.4 E 71.17("errors-to", H_FR)177 474 +(speci\214cation:)2.5 E 0 Cg EP +%%Page: 96 92 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-96 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF +(struct hdrinfo)157 96 Q(HdrInfo[] =)84.6 E({)157 108 Q +(/* originator \214elds, most to least signi\214cant)189.5 120 Q(*/)5 E +52.29("resent-sender", H_FR)177 132 R(OM,)-.4 E 58.95 +("resent-from", H_FR)177 144 R(OM,)-.4 E 79.5("sender", H_FR)177 156 R +(OM,)-.4 E 86.16("from", H_FR)177 168 R(OM,)-.4 E 66.72 +("full-name", H_A)177 180 R(CHECK,)-.4 E 71.17("errors-to", H_FR)177 192 R -1.667(OM | H_ERR)-.4 F(ORST)-.4 E(O,)-.18 E -(/* destination \214elds */)189.5 486 Q 97.82("to", H_RCPT)177 498 R(,) --.74 E 70.61("resent-to", H_RCPT)177 510 R(,)-.74 E 96.72("cc", H_RCPT) -177 522 R(,)-.74 E 91.72("bcc", H_RCPT)177 534 R .833(|H).833 G(_STRIPV) --.833 E(AL,)-1.35 E(/* message identi\214cation and control */)189.5 546 -Q 71.72("message", H_EOH,)177 558 R("te)177 570 Q 90.75(xt", H_EOH,)-.15 -F(/* trace \214elds */)189.5 582 Q("recei)177 594 Q -.15(ve)-.25 G 72.13 +(/* destination \214elds */)189.5 204 Q 97.82("to", H_RCPT)177 216 R(,) +-.74 E 70.61("resent-to", H_RCPT)177 228 R(,)-.74 E 96.72("cc", H_RCPT) +177 240 R(,)-.74 E 91.72("bcc", H_RCPT)177 252 R .833(|H).833 G(_STRIPV) +-.833 E(AL,)-1.35 E(/* message identi\214cation and control */)189.5 264 +Q 71.72("message", H_EOH,)177 276 R("te)177 288 Q 90.75(xt", H_EOH,)-.15 +F(/* trace \214elds */)189.5 300 Q("recei)177 312 Q -.15(ve)-.25 G 72.13 (d", H_TRA).15 F -1.667(CE | H_FORCE,)-.4 F -(/* miscellaneous \214elds */)189.5 606 Q("content-transfer)177 618 Q -2.5(-encoding", H_CTE,)-.2 F 55.61("content-type", H_CTYPE,)177 630 R -87.1(NULL, 0,)177 654 R(};)157 666 Q 2.435 -(This structure indicates that the \231T)117 682.2 R 2.435 +(/* miscellaneous \214elds */)189.5 324 Q("content-transfer)177 336 Q +2.5(-encoding", H_CTE,)-.2 F 55.61("content-type", H_CTYPE,)177 348 R +87.1(NULL, 0,)177 372 R(};)157 384 Q 2.435 +(This structure indicates that the \231T)117 400.2 R 2.435 (o:\232, \231Resent-T)-.8 F 2.435 -(o:\232, and \231Cc:\232 \214elds all specify recipient)-.8 F 3.162 -(addresses. An)117 694.2 R 3.162<7999>-.15 G .661(Full-Name:\232 \214el\ +(o:\232, and \231Cc:\232 \214elds all specify recipient)-.8 F 3.161 +(addresses. An)117 412.2 R 3.161<7999>-.15 G .662(Full-Name:\232 \214el\ d will be deleted unless the required mailer \215ag \(indicated in) --3.162 F .245(the con\214guration \214le\) is speci\214ed.)117 706.2 R -.245(The \231Message:\232 and \231T)5.245 F -.15(ex)-.7 G .246 +-3.161 F .246(the con\214guration \214le\) is speci\214ed.)117 424.2 R +.245(The \231Message:\232 and \231T)5.246 F -.15(ex)-.7 G .245 (t:\232 \214elds will terminate the header;).15 F 1.936 -(these are used by random dissenters around the netw)117 718.2 R 1.936 +(these are used by random dissenters around the netw)117 436.2 R 1.936 (ork w)-.1 F 4.436(orld. The)-.1 F(\231Recei)4.436 E -.15(ve)-.25 G -1.936(d:\232 \214eld will).15 F 0 Cg EP -%%Page: 95 91 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-95)195.86 E/F1 10/Times-Roman@0 SF(al)117 96 Q -.1(wa)-.1 G -(ys be added, and can be used to trace messages.).1 E .445 -(There are a number of important points here.)142 112.2 R .446 -(First, header \214elds are not added automati-)5.446 F .657 -(cally just because the)117 124.2 R 3.157(ya)-.15 G .657(re in the) --3.157 F/F2 10/Times-Italic@0 SF(HdrInfo)3.157 E F1 .657(structure; the) -3.157 F 3.157(ym)-.15 G .656(ust be speci\214ed in the con\214guration) --3.157 F .727(\214le in order to be added to the message.)117 136.2 R -(An)5.728 E 3.228(yh)-.15 G .728 -(eader \214elds mentioned in the con\214guration \214le)-3.228 F -.2(bu) -117 148.2 S 3.24(tn).2 G .74(ot mentioned in the)-3.24 F F2(HdrInfo)3.24 +1.937(d:\232 \214eld will).15 F(al)117 448.2 Q -.1(wa)-.1 G +(ys be added, and can be used to trace messages.).1 E .446 +(There are a number of important points here.)142 464.4 R .445 +(First, header \214elds are not added automati-)5.446 F .656 +(cally just because the)117 476.4 R 3.156(ya)-.15 G .656(re in the) +-3.156 F/F2 10/Times-Italic@0 SF(HdrInfo)3.157 E F1 .657(structure; the) +3.157 F 3.157(ym)-.15 G .657(ust be speci\214ed in the con\214guration) +-3.157 F .728(\214le in order to be added to the message.)117 488.4 R +(An)5.727 E 3.227(yh)-.15 G .727 +(eader \214elds mentioned in the con\214guration \214le)-3.227 F -.2(bu) +117 500.4 S 3.24(tn).2 G .74(ot mentioned in the)-3.24 F F2(HdrInfo)3.24 E F1 .74(structure ha)3.24 F 1.04 -.15(ve d)-.2 H(ef).15 E .74 (ault processing performed; that is, the)-.1 F 3.24(ya)-.15 G(re)-3.24 E -1.374(added unless the)117 160.2 R 3.874(yw)-.15 G 1.374 -(ere in the message already)-3.874 F 6.375(.S)-.65 G 1.375(econd, the) --6.375 F F2(HdrInfo)3.875 E F1 1.375(structure only speci\214es)3.875 F +1.375(added unless the)117 512.4 R 3.875(yw)-.15 G 1.375 +(ere in the message already)-3.875 F 6.375(.S)-.65 G 1.374(econd, the) +-6.375 F F2(HdrInfo)3.874 E F1 1.374(structure only speci\214es)3.874 F .324(cliched processing; certain headers are processed specially by ad \ -hoc code re)117 172.2 R -.05(ga)-.15 G .324(rdless of the sta-).05 F .48 -(tus speci\214ed in)117 184.2 R F2(HdrInfo)2.98 E F1 5.48(.F)C .481 -(or e)-5.63 F .481 +hoc code re)117 524.4 R -.05(ga)-.15 G .325(rdless of the sta-).05 F +.481(tus speci\214ed in)117 536.4 R F2(HdrInfo)2.981 E F1 5.481(.F)C +.481(or e)-5.631 F .481 (xample, the \231Sender:\232 and \231From:\232 \214elds are al)-.15 F --.1(wa)-.1 G .481(ys scanned on).1 F(ARP)117 198.2 Q .75 +-.1(wa)-.1 G .48(ys scanned on).1 F(ARP)117 550.4 Q .751 (ANET mail to determine the sender)-.92 F/F3 7/Times-Roman@0 SF(24)-4 I -F1 3.251(;t)4 K .751 +F1 3.251(;t)4 K .75 (his is used to perform the \231return to sender\232 func-)-3.251 F -2.977(tion. The)117 210.2 R .476(\231From:\232 and \231Full-Name:\232 \ -\214elds are used to determine the full name of the sender if)2.977 F -(possible; this is stored in the macro)117 222.2 Q F0($x)2.5 E F1 +2.976(tion. The)117 562.4 R .476(\231From:\232 and \231Full-Name:\232 \ +\214elds are used to determine the full name of the sender if)2.976 F +(possible; this is stored in the macro)117 574.4 Q F0($x)2.5 E F1 (and used in a number of w)2.5 E(ays.)-.1 E F0 2.5(6.3.2. Restricting) -102 246.2 R(Use of Email)2.5 E F1 .149 -(If it is necessary to restrict mail through a relay)142 262.4 R 2.649 -(,t)-.65 G(he)-2.649 E F2 -.15(ch)2.65 G(ec).15 E(kcompat)-.2 E F1 .15 -(routine can be modi\214ed.)2.65 F .163(This routine is called for e)117 -274.4 R -.15(ve)-.25 G .163(ry recipient address.).15 F .163 +102 598.4 R(Use of Email)2.5 E F1 .15 +(If it is necessary to restrict mail through a relay)142 614.6 R 2.649 +(,t)-.65 G(he)-2.649 E F2 -.15(ch)2.649 G(ec).15 E(kcompat)-.2 E F1 .149 +(routine can be modi\214ed.)2.649 F .163(This routine is called for e) +117 626.6 R -.15(ve)-.25 G .163(ry recipient address.).15 F .163 (It returns an e)5.163 F .163(xit status indicating the status of)-.15 F -.895(the message.)117 286.4 R .895(The status)5.895 F/F4 9/Times-Roman@0 +.895(the message.)117 638.6 R .895(The status)5.895 F/F4 9/Times-Roman@0 SF(EX_OK)3.395 E F1 .895(accepts the address,)3.395 F F4(EX_TEMPF)3.395 -E(AIL)-.666 E F1 .895(queues the message for a)3.395 F .264(later try) -117 298.4 R 2.764(,a)-.65 G .264(nd other v)-2.764 F .264 +E(AIL)-.666 E F1 .895(queues the message for a)3.395 F .263(later try) +117 650.6 R 2.763(,a)-.65 G .263(nd other v)-2.763 F .264 (alues \(commonly)-.25 F F4(EX_UN)2.764 E -1.215(AVA)-.315 G(ILABLE) -1.215 E F1 2.764(\)r)C .264(eject the message.)-2.764 F .263 -(It is up to)5.264 F F2 -.15(ch)2.763 G(ec).15 E(k-)-.2 E(compat)117 -310.4 Q F1 .429(to print an error message \(using)2.929 F F2(usr)2.929 E -(err)-.37 E F1 2.929(\)i)C 2.929(ft)-2.929 G .43 -(he message is rejected.)-2.929 F -.15(Fo)5.43 G 2.93(re).15 G(xample,) --3.08 E F2 -.15(ch)2.93 G(ec).15 E(k-)-.2 E(compat)117 322.4 Q F1 -(could read:)2.5 E F4(int)157 337.4 Q(checkcompat\(to, e\))157 348.2 Q -(re)175 359 Q(gister ADDRESS *to;)-.135 E(re)175 369.8 Q -(gister ENVELOPE *e;)-.135 E({)157 380.6 Q(re)175 391.4 Q(gister ST) --.135 E(AB *s;)-.837 E 2.25(s=s)175 413 S(tab\("pri)-2.25 E -.225(va) --.225 G(te", ST_MAILER, ST_FIND\);).225 E -(if \(s != NULL && e\255>e_from.q_mailer != LocalMailer &&)175 423.8 Q -(to->q_mailer == s->s_mailer\))184 434.6 Q({)175 445.4 Q -(usrerr\("No pri)193 456.2 Q -.225(va)-.225 G(te net mail allo).225 E -(wed through this machine"\);)-.225 E(return \(EX_UN)193 467 Q -1.215 -(AVA)-.315 G(ILABLE\);)1.215 E(})175 477.8 Q -(if \(MsgSize > 50000 && bitnset\(M_LOCALMAILER, to\255>q_mailer\)\))175 -488.6 Q({)175 499.4 Q(usrerr\("Message too lar)193 510.2 Q -(ge for non-local deli)-.162 E -.135(ve)-.225 G(ry"\);).135 E -(e\255>e_\215ags |= EF_NORETURN;)193 521 Q(return \(EX_UN)193 531.8 Q --1.215(AVA)-.315 G(ILABLE\);)1.215 E(})175 542.6 Q(return \(EX_OK\);)175 -553.4 Q(})157 564.2 Q F1 .97(This w)117 580.4 R .969 -(ould reject messages greater than 50000 bytes unless the)-.1 F 3.469 -(yw)-.15 G .969(ere local.)-3.469 F(The)5.969 E F2(EF_NORE-)3.469 E -(TURN)117 592.4 Q F1 .651(\215ag can be set in)3.151 F F2(e)3.151 E/F5 -10/Symbol SFA F2(e_\215a)A(gs)-.1 E F1 .652 -(to suppress the return of the actual body of the message in)3.152 F -.656(the error return.)117 604.4 R .655(The actual use of this routine \ -is highly dependent on the implementation, and)5.656 F -(use should be limited.)117 616.4 Q F0 2.5(6.3.3. New)102 640.4 R -(Database Map Classes)2.5 E F1(Ne)142 656.6 Q 2.875(wk)-.25 G .675 -.15 -(ey m)-2.975 H .375(aps can be added by creating a class initialization\ - function and a lookup func-).15 F 2.5(tion. These)117 668.6 R -(are then added to the routine)2.5 E F2(setupmaps.)2.5 E .32 LW 76 678.2 -72 678.2 DL 80 678.2 76 678.2 DL 84 678.2 80 678.2 DL 88 678.2 84 678.2 -DL 92 678.2 88 678.2 DL 96 678.2 92 678.2 DL 100 678.2 96 678.2 DL 104 -678.2 100 678.2 DL 108 678.2 104 678.2 DL 112 678.2 108 678.2 DL 116 -678.2 112 678.2 DL 120 678.2 116 678.2 DL 124 678.2 120 678.2 DL 128 -678.2 124 678.2 DL 132 678.2 128 678.2 DL 136 678.2 132 678.2 DL 140 -678.2 136 678.2 DL 144 678.2 140 678.2 DL 148 678.2 144 678.2 DL 152 -678.2 148 678.2 DL 156 678.2 152 678.2 DL 160 678.2 156 678.2 DL 164 -678.2 160 678.2 DL 168 678.2 164 678.2 DL 172 678.2 168 678.2 DL 176 -678.2 172 678.2 DL 180 678.2 176 678.2 DL 184 678.2 180 678.2 DL 188 -678.2 184 678.2 DL 192 678.2 188 678.2 DL 196 678.2 192 678.2 DL 200 -678.2 196 678.2 DL 204 678.2 200 678.2 DL 208 678.2 204 678.2 DL 212 -678.2 208 678.2 DL 216 678.2 212 678.2 DL/F6 5/Times-Roman@0 SF(24)93.6 -688.6 Q/F7 8/Times-Roman@0 SF(Actually)3.2 I 2.632(,t)-.52 G .632 +1.215 E F1 2.764(\)r)C .264(eject the message.)-2.764 F .264 +(It is up to)5.264 F F2 -.15(ch)2.764 G(ec).15 E(k-)-.2 E(compat)117 +662.6 Q F1 2.477(to print an error message \(using)4.978 F F2(usr)4.977 +E(err)-.37 E F1 4.977(\)i)C 4.977(ft)-4.977 G 2.477 +(he message is rejected.)-4.977 F -.15(Fo)7.477 G 4.977(re).15 G +(xample,)-5.127 E .32 LW 76 672.2 72 672.2 DL 80 672.2 76 672.2 DL 84 +672.2 80 672.2 DL 88 672.2 84 672.2 DL 92 672.2 88 672.2 DL 96 672.2 92 +672.2 DL 100 672.2 96 672.2 DL 104 672.2 100 672.2 DL 108 672.2 104 +672.2 DL 112 672.2 108 672.2 DL 116 672.2 112 672.2 DL 120 672.2 116 +672.2 DL 124 672.2 120 672.2 DL 128 672.2 124 672.2 DL 132 672.2 128 +672.2 DL 136 672.2 132 672.2 DL 140 672.2 136 672.2 DL 144 672.2 140 +672.2 DL 148 672.2 144 672.2 DL 152 672.2 148 672.2 DL 156 672.2 152 +672.2 DL 160 672.2 156 672.2 DL 164 672.2 160 672.2 DL 168 672.2 164 +672.2 DL 172 672.2 168 672.2 DL 176 672.2 172 672.2 DL 180 672.2 176 +672.2 DL 184 672.2 180 672.2 DL 188 672.2 184 672.2 DL 192 672.2 188 +672.2 DL 196 672.2 192 672.2 DL 200 672.2 196 672.2 DL 204 672.2 200 +672.2 DL 208 672.2 204 672.2 DL 212 672.2 208 672.2 DL 216 672.2 212 +672.2 DL/F5 5/Times-Roman@0 SF(24)93.6 682.6 Q/F6 8/Times-Roman@0 SF +(Actually)3.2 I 2.631(,t)-.52 G .631 (his is no longer true in SMTP; this information is contained in the en) --2.632 F -.12(ve)-.32 G 2.631(lope. The).12 F .631(older ARP)2.631 F -.631(ANET protocols did)-.736 F(not completely distinguish en)72 701.4 Q +-2.631 F -.12(ve)-.32 G 2.632(lope. The).12 F .632(older ARP)2.632 F +.632(ANET protocols did)-.736 F(not completely distinguish en)72 695.4 Q -.12(ve)-.32 G(lope from header).12 E(.)-.44 E 0 Cg EP -%%Page: 96 92 +%%Page: 97 93 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-96 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -(The initialization function is called as)142 96 Q/F2 10/Times-Italic@0 -SF(xxx)157 112.2 Q F1(_map_init\(MAP *map, char *ar)A(gs\))-.18 E(The) -117 128.4 Q F2(map)3.28 E F1 .78(is an internal data structure.)3.28 F -(The)5.78 E F2(ar)3.279 E(gs)-.37 E F1 .779 -(is a pointer to the portion of the con\214guration)3.279 F .396 -(\214le line follo)117 140.4 R .396 -(wing the map class name; \215ags and \214lenames can be e)-.25 F .397 -(xtracted from this line.)-.15 F(The)5.397 E -(initialization function must return)117 152.4 Q/F3 9/Times-Roman@0 SF -(true)2.5 E F1(if it successfully opened the map,)2.5 E F3 -.09(fa)2.5 G -(lse).09 E F1(otherwise.)2.5 E(The lookup function is called as)142 -168.6 Q F2(xxx)157 184.8 Q F1(_map_lookup\(MAP *map, char b)A -(uf[], char **a)-.2 E 1.3 -.65(v, i)-.2 H(nt *statp\)).65 E(The)117 201 -Q F2(map)2.773 E F1 .273(de\214nes the map internally)2.773 F 5.273(.T) --.65 G(he)-5.273 E F2 -.2(bu)2.773 G(f).2 E F1 .273(has the input k) -2.773 F -.15(ey)-.1 G 5.273(.T)-.5 G .272 -(his may be \(and often is\) used)-5.273 F(destructi)117 213 Q -.15(ve) --.25 G(ly).15 E 5.151(.T)-.65 G(he)-5.151 E F2(av)2.651 E F1 .151 -(is a list of ar)2.651 F .151(guments passed in from the re)-.18 F .152 -(write line.)-.25 F .152(The lookup function)5.152 F .322 -(should return a pointer to the ne)117 225 R 2.822(wv)-.25 G 2.822 -(alue. If)-3.072 F .322(the map lookup f)2.822 F(ails,)-.1 E F2(*statp) -2.822 E F1 .322(should be set to an e)2.822 F(xit)-.15 E .301 -(status code; in particular)117 237 R 2.801(,i)-.4 G 2.801(ts)-2.801 G -.302(hould be set to)-2.801 F F3(EX_TEMPF)2.802 E(AIL)-.666 E F1 .302 -(if reco)2.802 F -.15(ve)-.15 G .302(ry is to be attempted by the).15 F -(higher le)117 249 Q -.15(ve)-.25 G 2.5(lc).15 G(ode.)-2.5 E F0 2.5 -(6.3.4. Queueing)102 273 R(Function)2.5 E F1 .783(The routine)142 289.2 -R F2(shouldqueue)3.283 E F1 .783 +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-97)195.86 E/F1 10/Times-Italic@0 SF -.15(ch)117 96 S(ec).15 E +(kcompat)-.2 E/F2 10/Times-Roman@0 SF(could read:)2.5 E/F3 9 +/Times-Roman@0 SF(int)157 111 Q(checkcompat\(to, e\))157 121.8 Q(re)175 +132.6 Q(gister ADDRESS *to;)-.135 E(re)175 143.4 Q(gister ENVELOPE *e;) +-.135 E({)157 154.2 Q(re)175 165 Q(gister ST)-.135 E(AB *s;)-.837 E 2.25 +(s=s)175 186.6 S(tab\("pri)-2.25 E -.225(va)-.225 G +(te", ST_MAILER, ST_FIND\);).225 E +(if \(s != NULL && e\255>e_from.q_mailer != LocalMailer &&)175 197.4 Q +(to->q_mailer == s->s_mailer\))184 208.2 Q({)175 219 Q(usrerr\("No pri) +193 229.8 Q -.225(va)-.225 G(te net mail allo).225 E +(wed through this machine"\);)-.225 E(return \(EX_UN)193 240.6 Q -1.215 +(AVA)-.315 G(ILABLE\);)1.215 E(})175 251.4 Q +(if \(MsgSize > 50000 && bitnset\(M_LOCALMAILER, to\255>q_mailer\)\))175 +262.2 Q({)175 273 Q(usrerr\("Message too lar)193 283.8 Q +(ge for non-local deli)-.162 E -.135(ve)-.225 G(ry"\);).135 E +(e\255>e_\215ags |= EF_NORETURN;)193 294.6 Q(return \(EX_UN)193 305.4 Q +-1.215(AVA)-.315 G(ILABLE\);)1.215 E(})175 316.2 Q(return \(EX_OK\);)175 +327 Q(})157 337.8 Q F2 .969(This w)117 354 R .969 +(ould reject messages greater than 50000 bytes unless the)-.1 F 3.469 +(yw)-.15 G .97(ere local.)-3.469 F(The)5.97 E F1(EF_NORE-)3.47 E(TURN) +117 366 Q F2 .652(\215ag can be set in)3.152 F F1(e)3.152 E/F4 10/Symbol +SFA F1(e_\215a)A(gs)-.1 E F2 .651 +(to suppress the return of the actual body of the message in)3.152 F +.655(the error return.)117 378 R .655(The actual use of this routine is\ + highly dependent on the implementation, and)5.655 F +(use should be limited.)117 390 Q F0 2.5(6.3.3. New)102 414 R +(Database Map Classes)2.5 E F2(Ne)142 430.2 Q 2.876(wk)-.25 G .676 -.15 +(ey m)-2.976 H .375(aps can be added by creating a class initialization\ + function and a lookup func-).15 F 2.5(tion. These)117 442.2 R +(are then added to the routine)2.5 E F1(setupmaps.)2.5 E F2 +(The initialization function is called as)142 458.4 Q F1(xxx)157 474.6 Q +F2(_map_init\(MAP *map, char *ar)A(gs\))-.18 E(The)117 490.8 Q F1(map) +3.279 E F2 .779(is an internal data structure.)3.279 F(The)5.779 E F1 +(ar)3.279 E(gs)-.37 E F2 .78 +(is a pointer to the portion of the con\214guration)3.279 F .397 +(\214le line follo)117 502.8 R .396 +(wing the map class name; \215ags and \214lenames can be e)-.25 F .396 +(xtracted from this line.)-.15 F(The)5.396 E +(initialization function must return)117 514.8 Q F3(true)2.5 E F2 +(if it successfully opened the map,)2.5 E F3 -.09(fa)2.5 G(lse).09 E F2 +(otherwise.)2.5 E(The lookup function is called as)142 531 Q F1(xxx)157 +547.2 Q F2(_map_lookup\(MAP *map, char b)A(uf[], char **a)-.2 E 1.3 -.65 +(v, i)-.2 H(nt *statp\)).65 E(The)117 563.4 Q F1(map)2.772 E F2 .272 +(de\214nes the map internally)2.772 F 5.273(.T)-.65 G(he)-5.273 E F1 -.2 +(bu)2.773 G(f).2 E F2 .273(has the input k)2.773 F -.15(ey)-.1 G 5.273 +(.T)-.5 G .273(his may be \(and often is\) used)-5.273 F(destructi)117 +575.4 Q -.15(ve)-.25 G(ly).15 E 5.152(.T)-.65 G(he)-5.152 E F1(av)2.652 +E F2 .151(is a list of ar)2.652 F .151(guments passed in from the re) +-.18 F .151(write line.)-.25 F .151(The lookup function)5.151 F .322 +(should return a pointer to the ne)117 587.4 R 2.822(wv)-.25 G 2.822 +(alue. If)-3.072 F .322(the map lookup f)2.822 F(ails,)-.1 E F1(*statp) +2.822 E F2 .322(should be set to an e)2.822 F(xit)-.15 E .302 +(status code; in particular)117 599.4 R 2.802(,i)-.4 G 2.802(ts)-2.802 G +.302(hould be set to)-2.802 F F3(EX_TEMPF)2.802 E(AIL)-.666 E F2 .302 +(if reco)2.802 F -.15(ve)-.15 G .301(ry is to be attempted by the).15 F +(higher le)117 611.4 Q -.15(ve)-.25 G 2.5(lc).15 G(ode.)-2.5 E F0 2.5 +(6.3.4. Queueing)102 635.4 R(Function)2.5 E F2 .782(The routine)142 +651.6 R F1(shouldqueue)3.282 E F2 .783 (is called to decide if a message should be queued or processed)3.283 F -(immediately)117 301.2 Q 6.618(.T)-.65 G 1.618 +(immediately)117 663.6 Q 6.619(.T)-.65 G 1.618 (ypically this compares the message priority to the current load a) --7.418 F -.15(ve)-.2 G 4.119(rage. The).15 F(def)117 313.2 Q -(ault de\214nition is:)-.1 E(bool)157 329.4 Q(shouldqueue\(pri, ctime\)) -157 341.4 Q(long pri;)175 353.4 Q(time_t ctime;)175 365.4 Q({)157 377.4 -Q(if \(CurrentLA < QueueLA\))175 389.4 Q(return f)193 401.4 Q(alse;)-.1 -E(return \(pri > \(QueueF)175 413.4 Q -(actor / \(CurrentLA \255 QueueLA + 1\)\)\);)-.15 E(})157 425.4 Q 2.063 -(If the current load a)117 441.6 R -.15(ve)-.2 G 2.062(rage \(global v) -.15 F(ariable)-.25 E F2(Curr)4.562 E(entLA)-.37 E F1 4.562(,w)C 2.062 -(hich is set before this function is)-4.562 F 1.057 -(called\) is less than the lo)117 453.6 R 3.558(wt)-.25 G 1.058 +-7.419 F -.15(ve)-.2 G 4.118(rage. The).15 F(def)117 675.6 Q +(ault de\214nition is:)-.1 E 0 Cg EP +%%Page: 98 94 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 193.36(SMM:08-98 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(bool)157 +96 Q(shouldqueue\(pri, ctime\))157 108 Q(long pri;)175 120 Q +(time_t ctime;)175 132 Q({)157 144 Q(if \(CurrentLA < QueueLA\))175 156 +Q(return f)193 168 Q(alse;)-.1 E(return \(pri > \(QueueF)175 180 Q +(actor / \(CurrentLA \255 QueueLA + 1\)\)\);)-.15 E(})157 192 Q 2.062 +(If the current load a)117 208.2 R -.15(ve)-.2 G 2.062(rage \(global v) +.15 F(ariable)-.25 E/F2 10/Times-Italic@0 SF(Curr)4.562 E(entLA)-.37 E +F1 4.562(,w)C 2.062(hich is set before this function is)-4.562 F 1.058 +(called\) is less than the lo)117 220.2 R 3.558(wt)-.25 G 1.058 (hreshold load a)-3.558 F -.15(ve)-.2 G 1.058(rage \(option).15 F F0(x) -3.558 E F1 3.558(,v)C(ariable)-3.808 E F2(QueueLA)3.558 E F1(\),)A F2 -(shouldqueue)3.558 E F1(returns)117 465.6 Q F3 -.09(fa)3.249 G(lse).09 E -F1 .749(immediately \(that is, it should)3.249 F F2(not)3.249 E F1 3.248 -(queue\). If)3.249 F .748(the current load a)3.248 F -.15(ve)-.2 G .748 -(rage e).15 F .748(xceeds the)-.15 F 1.418(high threshold load a)117 -477.6 R -.15(ve)-.2 G 1.418(rage \(option).15 F F0(X)3.919 E F1 3.919 -(,v)C(ariable)-4.169 E F2(RefuseLA)3.919 E F1(\),)A F2(shouldqueue)3.919 -E F1(returns)3.919 E F3(true)3.919 E F1(immedi-)3.919 E(ately)117 489.6 -Q 7.126(.O)-.65 G 2.125 -(therwise, it computes the function based on the message priority)-7.126 -F 4.625(,t)-.65 G 2.125(he queue f)-4.625 F(actor)-.1 E(\(option)117 -501.6 Q F0(q)2.5 E F1 2.5(,g)C(lobal v)-2.5 E(ariable)-.25 E F2(QueueF) +3.557 E F1 3.557(,v)C(ariable)-3.807 E F2(QueueLA)3.557 E F1(\),)A F2 +(shouldqueue)3.557 E F1(returns)117 232.2 Q/F3 9/Times-Roman@0 SF -.09 +(fa)3.248 G(lse).09 E F1 .748(immediately \(that is, it should)3.248 F +F2(not)3.248 E F1 3.249(queue\). If)3.249 F .749(the current load a) +3.249 F -.15(ve)-.2 G .749(rage e).15 F .749(xceeds the)-.15 F 1.419 +(high threshold load a)117 244.2 R -.15(ve)-.2 G 1.419(rage \(option).15 +F F0(X)3.919 E F1 3.919(,v)C(ariable)-4.169 E F2(RefuseLA)3.919 E F1 +(\),)A F2(shouldqueue)3.918 E F1(returns)3.918 E F3(true)3.918 E F1 +(immedi-)3.918 E(ately)117 256.2 Q 7.125(.O)-.65 G 2.125 +(therwise, it computes the function based on the message priority)-7.125 +F 4.626(,t)-.65 G 2.126(he queue f)-4.626 F(actor)-.1 E(\(option)117 +268.2 Q F0(q)2.5 E F1 2.5(,g)C(lobal v)-2.5 E(ariable)-.25 E F2(QueueF) 2.5 E(actor)-.75 E F1(\), and the current and threshold load a)A -.15 -(ve)-.2 G(rages.).15 E 1.066(An implementation wishing to tak)142 517.8 -R 3.566(et)-.1 G 1.067 -(he actual age of the message into account can also)-3.566 F 1.41 -(use the)117 529.8 R F2(ctime)3.91 E F1(parameter)3.91 E 3.91(,w)-.4 G +(ve)-.2 G(rages.).15 E 1.067(An implementation wishing to tak)142 284.4 +R 3.567(et)-.1 G 1.066 +(he actual age of the message into account can also)-3.567 F 1.41 +(use the)117 296.4 R F2(ctime)3.91 E F1(parameter)3.91 E 3.91(,w)-.4 G 1.41(hich is the time that the message w)-3.91 F 1.41 -(as \214rst submitted to)-.1 F F2(sendmail)3.91 E F1(.)A .928 -(Note that the)117 541.8 R F2(pri)3.428 E F1 .928(parameter is already \ +(as \214rst submitted to)-.1 F F2(sendmail)3.91 E F1(.)A .929 +(Note that the)117 308.4 R F2(pri)3.428 E F1 .928(parameter is already \ weighted by the number of times the message has been)3.428 F .395 -(tried \(although this tends to lo)117 553.8 R .395 +(tried \(although this tends to lo)117 320.4 R .395 (wer the priority of the message with time\); the e)-.25 F .395 -(xpectation is that)-.15 F(the)117 565.8 Q F2(ctime)2.674 E F1 -.1(wo) +(xpectation is that)-.15 F(the)117 332.4 Q F2(ctime)2.674 E F1 -.1(wo) 2.674 G .174 (uld be used as an \231escape clause\232 to ensure that messages are e) .1 F -.15(ve)-.25 G .174(ntually processed.).15 F F0 2.5 -(6.3.5. Refusing)102 589.8 R(Incoming SMTP Connections)2.5 E F1 2.063 -(The function)142 606 R F2 -.37(re)4.563 G(fuseconnections).37 E F1 -(returns)4.563 E F3(true)4.563 E F1 2.062 -(if incoming SMTP connections should be)4.563 F 3.563(refused. The)117 -618 R 1.063(current implementation is based e)3.563 F(xclusi)-.15 E -.15 -(ve)-.25 G 1.063(ly on the current load a).15 F -.15(ve)-.2 G 1.063 -(rage and the).15 F(refuse load a)117 630 Q -.15(ve)-.2 G +(6.3.5. Refusing)102 356.4 R(Incoming SMTP Connections)2.5 E F1 2.062 +(The function)142 372.6 R F2 -.37(re)4.562 G(fuseconnections).37 E F1 +(returns)4.562 E F3(true)4.562 E F1 2.063 +(if incoming SMTP connections should be)4.562 F 3.564(refused. The)117 +384.6 R 1.063(current implementation is based e)3.563 F(xclusi)-.15 E +-.15(ve)-.25 G 1.063(ly on the current load a).15 F -.15(ve)-.2 G 1.063 +(rage and the).15 F(refuse load a)117 396.6 Q -.15(ve)-.2 G (rage option \(option).15 E F0(X)2.5 E F1 2.5(,g)C(lobal v)-2.5 E -(ariable)-.25 E F2(RefuseLA)2.5 E F1(\):)A(bool)157 646.2 Q -(refuseconnections\(\))157 658.2 Q({)157 670.2 Q -(return \(RefuseLA > 0 && CurrentLA >= RefuseLA\);)175 682.2 Q(})157 -694.2 Q 2.5(Am)117 710.4 S(ore cle)-2.5 E -.15(ve)-.25 G 2.5(ri).15 G -(mplementation could look at more system resources.)-2.5 E 0 Cg EP -%%Page: 97 93 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-97)195.86 E 2.5(6.3.6. Load)102 96 R -.6 -1(Av e)2.5 H -(rage Computation)1 E/F1 10/Times-Roman@0 SF .244(The routine)142 112.2 -R/F2 10/Times-Italic@0 SF -.1(ge)2.743 G(tla).1 E F1 .243 +(ariable)-.25 E F2(RefuseLA)2.5 E F1(\):)A(bool)157 412.8 Q +(refuseconnections\(\))157 424.8 Q({)157 436.8 Q +(return \(RefuseLA > 0 && CurrentLA >= RefuseLA\);)175 448.8 Q(})157 +460.8 Q 2.5(Am)117 477 S(ore cle)-2.5 E -.15(ve)-.25 G 2.5(ri).15 G +(mplementation could look at more system resources.)-2.5 E F0 2.5 +(6.3.6. Load)102 501 R -.6 -1(Av e)2.5 H(rage Computation)1 E F1 .243 +(The routine)142 517.2 R F2 -.1(ge)2.743 G(tla).1 E F1 .243 (returns the current load a)2.743 F -.15(ve)-.2 G .243 -(rage \(as a rounded inte).15 F 2.743(ger\). The)-.15 F(distrib)2.743 E -(ution)-.2 E 1.156(includes se)117 124.2 R -.15(ve)-.25 G 1.157 +(rage \(as a rounded inte).15 F 2.743(ger\). The)-.15 F(distrib)2.744 E +(ution)-.2 E 1.157(includes se)117 529.2 R -.15(ve)-.25 G 1.157 (ral possible implementations.).15 F 1.157(If you are porting to a ne) 6.157 F 3.657(we)-.25 G -.4(nv)-3.657 G 1.157(ironment you may).4 F -(need to add some ne)117 138.2 Q 2.5(wt)-.25 G(weaks.)-2.5 E/F3 7 -/Times-Roman@0 SF(25)-4 I F0 2.5(6.4. Con\214guration)87 162.2 R -(in sendmail/daemon.c)2.5 E F1 .128(The \214le)127 178.4 R F2 -(sendmail/daemon.c)2.628 E F1 .128 +(need to add some ne)117 543.2 Q 2.5(wt)-.25 G(weaks.)-2.5 E/F4 7 +/Times-Roman@0 SF(25)-4 I F0 2.5(6.4. Con\214guration)87 567.2 R +(in sendmail/daemon.c)2.5 E F1 .127(The \214le)127 583.4 R F2 +(sendmail/daemon.c)2.627 E F1 .128 (contains a number of routines that are dependent on the local net-) -2.628 F -.1(wo)102 190.4 S(rking en).1 E 2.5(vironment. The)-.4 F -.15 +2.628 F -.1(wo)102 595.4 S(rking en).1 E 2.5(vironment. The)-.4 F -.15 (ve)2.5 G(rsion supplied assumes you ha).15 E .3 -.15(ve B)-.2 H -(SD style sock).15 E(ets.)-.1 E 2.16(In pre)127 206.6 R 2.16 +(SD style sock).15 E(ets.)-.1 E 2.16(In pre)127 611.6 R 2.16 (vious releases, we recommended that you modify the routine)-.25 F F2 -(maphostname)4.66 E F1 2.16(if you)4.66 F -.1(wa)102 218.6 S 1.919 +(maphostname)4.66 E F1 2.16(if you)4.66 F -.1(wa)102 623.6 S 1.918 (nted to generalize).1 F F0($[)4.418 E F1(...)4.418 E F0($])4.418 E F1 4.418(lookups. W)4.418 F 4.418(en)-.8 G 2.418 -.25(ow r)-4.418 H 1.918 -(ecommend that you create a ne).25 F 4.418(wk)-.25 G -.15(ey)-4.518 G -1.918(ed map).15 F(instead.)102 230.6 Q F0 2.5(6.5. LD)87 254.6 R(AP) --.35 E F1(In this section we assume that)127 270.8 Q F2(sendmail)2.5 E -F1(has been compiled with support for LD)2.5 E(AP)-.4 E(.)-1.11 E F0 2.5 -(6.5.1. LD)102 294.8 R(AP Recursion)-.35 E F1(LD)142 311 Q .349 -(AP Recursion allo)-.4 F .349(ws you to add types to the search attrib) --.25 F .35(utes on an LD)-.2 F .35(AP map speci-)-.4 F 2.5 -(\214cation. The)117 323 R(syntax is:)2.5 E117 339.2 Q F2 -.37(AT) -2.5 G(TRIB).37 E(UTE)-.1 E F1([:)A F2(TYPE)A F1([:)A F2(OBJECTCLASS)A F1 -([|)A F2(OBJECTCLASS)A F1(|...]]])A(The ne)142 355.4 Q(w)-.25 E F2(TYPE) -2.5 E F1 2.5(sa)C(re:)-2.5 E 26.17(NORMAL This)117 371.6 R(attrib)3.579 -E 1.079(ute type speci\214es the attrib)-.2 F 1.078 -(ute to add to the results string.)-.2 F 1.078(This is)6.078 F(the def) -189 383.6 Q(ault.)-.1 E 55.06(DN An)117 399.8 R 2.821(ym)-.15 G .321 -(atches for this attrib)-2.821 F .321(ute are e)-.2 F .321 -(xpected to ha)-.15 F .622 -.15(ve a v)-.2 H .322 -(alue of a fully quali\214ed)-.1 F 1.521(distinguished name.)189 411.8 R +(ecommend that you create a ne).25 F 4.419(wk)-.25 G -.15(ey)-4.519 G +1.919(ed map).15 F(instead.)102 635.6 Q .32 LW 76 678.8 72 678.8 DL 80 +678.8 76 678.8 DL 84 678.8 80 678.8 DL 88 678.8 84 678.8 DL 92 678.8 88 +678.8 DL 96 678.8 92 678.8 DL 100 678.8 96 678.8 DL 104 678.8 100 678.8 +DL 108 678.8 104 678.8 DL 112 678.8 108 678.8 DL 116 678.8 112 678.8 DL +120 678.8 116 678.8 DL 124 678.8 120 678.8 DL 128 678.8 124 678.8 DL 132 +678.8 128 678.8 DL 136 678.8 132 678.8 DL 140 678.8 136 678.8 DL 144 +678.8 140 678.8 DL 148 678.8 144 678.8 DL 152 678.8 148 678.8 DL 156 +678.8 152 678.8 DL 160 678.8 156 678.8 DL 164 678.8 160 678.8 DL 168 +678.8 164 678.8 DL 172 678.8 168 678.8 DL 176 678.8 172 678.8 DL 180 +678.8 176 678.8 DL 184 678.8 180 678.8 DL 188 678.8 184 678.8 DL 192 +678.8 188 678.8 DL 196 678.8 192 678.8 DL 200 678.8 196 678.8 DL 204 +678.8 200 678.8 DL 208 678.8 204 678.8 DL 212 678.8 208 678.8 DL 216 +678.8 212 678.8 DL/F5 5/Times-Roman@0 SF(25)93.6 689.2 Q/F6 8 +/Times-Roman@0 SF +(If you do, please send updates to sendmail@Sendmail.ORG.)3.2 I 0 Cg EP +%%Page: 99 95 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-99)195.86 E 2.5(6.5. LD)87 96 R(AP)-.35 E/F1 10/Times-Roman@0 SF +(In this section we assume that)127 112.2 Q/F2 10/Times-Italic@0 SF +(sendmail)2.5 E F1(has been compiled with support for LD)2.5 E(AP)-.4 E +(.)-1.11 E F0 2.5(6.5.1. LD)102 136.2 R(AP Recursion)-.35 E F1(LD)142 +152.4 Q .35(AP Recursion allo)-.4 F .349 +(ws you to add types to the search attrib)-.25 F .349(utes on an LD)-.2 +F .349(AP map speci-)-.4 F 2.5(\214cation. The)117 164.4 R(syntax is:) +2.5 E117 180.6 Q F2 -.37(AT)2.5 G(TRIB).37 E(UTE)-.1 E F1([:)A F2 +(TYPE)A F1([:)A F2(OBJECTCLASS)A F1([|)A F2(OBJECTCLASS)A F1(|...]]])A +(The ne)142 196.8 Q(w)-.25 E F2(TYPE)2.5 E F1 2.5(sa)C(re:)-2.5 E 26.17 +(NORMAL This)117 213 R(attrib)3.578 E 1.078 +(ute type speci\214es the attrib)-.2 F 1.079 +(ute to add to the results string.)-.2 F 1.079(This is)6.079 F(the def) +189 225 Q(ault.)-.1 E 55.06(DN An)117 241.2 R 2.822(ym)-.15 G .322 +(atches for this attrib)-2.822 F .322(ute are e)-.2 F .321 +(xpected to ha)-.15 F .621 -.15(ve a v)-.2 H .321 +(alue of a fully quali\214ed)-.1 F 1.521(distinguished name.)189 253.2 R F2(sendmail)6.521 E F1 1.521(will lookup that DN and apply the attrib) -4.021 F(utes)-.2 E(requested to the returned DN record.)189 423.8 Q(FIL) -117 440 Q 36.53(TER An)-.92 F 2.652(ym)-.15 G .153 -(atches for this attrib)-2.652 F .153(ute are e)-.2 F .153 +4.021 F(utes)-.2 E(requested to the returned DN record.)189 265.2 Q(FIL) +117 281.4 Q 36.53(TER An)-.92 F 2.653(ym)-.15 G .153 +(atches for this attrib)-2.653 F .153(ute are e)-.2 F .153 (xpected to ha)-.15 F .453 -.15(ve a v)-.2 H .153(alue of an LD)-.1 F -.153(AP search)-.4 F(\214lter)189 452 Q(.)-.55 E F2(sendmail)5.698 E F1 -.697(will perform a lookup with the same parameters as the origi-)3.198 -F(nal search b)189 464 Q +.152(AP search)-.4 F(\214lter)189 293.4 Q(.)-.55 E F2(sendmail)5.697 E +F1 .698(will perform a lookup with the same parameters as the origi-) +3.197 F(nal search b)189 305.4 Q (ut replaces the search \214lter with the one speci\214ed here.)-.2 E -49.5(URL An)117 480.2 R 2.87(ym)-.15 G .37(atches for this attrib)-2.87 +49.5(URL An)117 321.6 R 2.87(ym)-.15 G .37(atches for this attrib)-2.87 F .37(ute are e)-.2 F .37(xpected to ha)-.15 F .67 -.15(ve a v)-.2 H .37 -(alue of an LD)-.1 F .37(AP URL.)-.4 F F2(sendmail)189 492.2 Q F1 1.947 -(will perform a lookup of that URL and use the results from the)4.447 F -(attrib)189 504.2 Q .389(utes named in that URL.)-.2 F .389(Note ho) -5.389 F(we)-.25 E -.15(ve)-.25 G 2.889(rt).15 G .389 -(hat the search is done using the)-2.889 F 2.622(current LD)189 516.2 R +(alue of an LD)-.1 F .37(AP URL.)-.4 F F2(sendmail)189 333.6 Q F1 1.947 +(will perform a lookup of that URL and use the results from the)4.446 F +(attrib)189 345.6 Q .39(utes named in that URL.)-.2 F .389(Note ho)5.389 +F(we)-.25 E -.15(ve)-.25 G 2.889(rt).15 G .389 +(hat the search is done using the)-2.889 F 2.622(current LD)189 357.6 R 2.622(AP connection, re)-.4 F -.05(ga)-.15 G 2.622 -(rdless of what is speci\214ed as the scheme,).05 F(LD)189 528.2 Q +(rdless of what is speci\214ed as the scheme,).05 F(LD)189 369.6 Q (AP host, and LD)-.4 E(AP port in the LD)-.4 E(AP URL.)-.4 E(An)117 -544.4 Q 2.5(yu)-.15 G(ntyped attrib)-2.5 E(utes are considered)-.2 E/F4 +385.8 Q 2.5(yu)-.15 G(ntyped attrib)-2.5 E(utes are considered)-.2 E/F3 9/Times-Roman@0 SF(NORMAL)2.5 E F1(attrib)2.5 E(utes as described abo) --.2 E -.15(ve)-.15 G(.).15 E .91(The optional)142 560.6 R F2 -(OBJECTCLASS)3.41 E F1 .91 -(\(| separated\) list contains the objectClass v)3.41 F .91 -(alues for which)-.25 F 1.399(that attrib)117 572.6 R 1.399 -(ute applies.)-.2 F 1.399(If the list is gi)6.399 F -.15(ve)-.25 G 1.399 +-.2 E -.15(ve)-.15 G(.).15 E .91(The optional)142 402 R F2(OBJECTCLASS) +3.41 E F1 .91(\(| separated\) list contains the objectClass v)3.41 F .91 +(alues for which)-.25 F 1.398(that attrib)117 414 R 1.398(ute applies.) +-.2 F 1.399(If the list is gi)6.398 F -.15(ve)-.25 G 1.399 (n, the attrib).15 F 1.399(ute named will only be used if the LD)-.2 F (AP)-.4 E 1.111(record being returned is a member of that object class.) -117 584.6 R 1.111(Note that if these ne)6.111 F 3.612(wv)-.25 G 1.112 -(alue attrib)-3.862 F(ute)-.2 E F2(TYPE)117 596.6 Q F1 2.937(sa)C .436(\ -re used in an AliasFile option setting, it will need to be double quote\ -d to pre)-2.937 F -.15(ve)-.25 G(nt).15 E F2(send-)2.936 E(mail)117 -608.6 Q F1(from misparsing the colons.)2.5 E .257(Note that LD)142 624.8 -R .257(AP recursion attrib)-.4 F .257 -(utes which do not ultimately point to an LD)-.2 F .258(AP record are) --.4 F(not considered an error)117 636.8 Q(.)-.55 E .32 LW 76 678.8 72 -678.8 DL 80 678.8 76 678.8 DL 84 678.8 80 678.8 DL 88 678.8 84 678.8 DL -92 678.8 88 678.8 DL 96 678.8 92 678.8 DL 100 678.8 96 678.8 DL 104 -678.8 100 678.8 DL 108 678.8 104 678.8 DL 112 678.8 108 678.8 DL 116 -678.8 112 678.8 DL 120 678.8 116 678.8 DL 124 678.8 120 678.8 DL 128 -678.8 124 678.8 DL 132 678.8 128 678.8 DL 136 678.8 132 678.8 DL 140 -678.8 136 678.8 DL 144 678.8 140 678.8 DL 148 678.8 144 678.8 DL 152 -678.8 148 678.8 DL 156 678.8 152 678.8 DL 160 678.8 156 678.8 DL 164 -678.8 160 678.8 DL 168 678.8 164 678.8 DL 172 678.8 168 678.8 DL 176 -678.8 172 678.8 DL 180 678.8 176 678.8 DL 184 678.8 180 678.8 DL 188 -678.8 184 678.8 DL 192 678.8 188 678.8 DL 196 678.8 192 678.8 DL 200 -678.8 196 678.8 DL 204 678.8 200 678.8 DL 208 678.8 204 678.8 DL 212 -678.8 208 678.8 DL 216 678.8 212 678.8 DL/F5 5/Times-Roman@0 SF(25)93.6 -689.2 Q/F6 8/Times-Roman@0 SF -(If you do, please send updates to sendmail@Sendmail.ORG.)3.2 I 0 Cg EP -%%Page: 98 94 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 193.36(SMM:08-98 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E 2.5(6.5.1.1. Example)117 96 R/F1 -10/Times-Roman@0 SF .218(Since e)157 112.2 R .218 +117 426 R 1.111(Note that if these ne)6.111 F 3.611(wv)-.25 G 1.111 +(alue attrib)-3.861 F(ute)-.2 E F2(TYPE)117 438 Q F1 2.936(sa)C .436(re\ + used in an AliasFile option setting, it will need to be double quoted \ +to pre)-2.936 F -.15(ve)-.25 G(nt).15 E F2(send-)2.937 E(mail)117 450 Q +F1(from misparsing the colons.)2.5 E .258(Note that LD)142 466.2 R .257 +(AP recursion attrib)-.4 F .257 +(utes which do not ultimately point to an LD)-.2 F .257(AP record are) +-.4 F(not considered an error)117 478.2 Q(.)-.55 E F0 2.5 +(6.5.1.1. Example)117 502.2 R F1 .218(Since e)157 518.4 R .218 (xamples usually help clarify)-.15 F 2.718(,h)-.65 G .218(ere is an e) -2.718 F .218(xample which uses all four of the ne)-.15 F(w)-.25 E -(types:)132 124.2 Q 2.5(OL)172 140.4 S -.4(DA)-2.5 G(PDef).4 E +(types:)132 530.4 Q 2.5(OL)172 546.6 S -.4(DA)-2.5 G(PDef).4 E (aultSpec=-h ldap.e)-.1 E(xample.com -b dc=e)-.15 E(xample,dc=com)-.15 E --2.15 -.25(Ke x)172 164.4 T(ample ldap).25 E(-z,)194.5 176.4 Q -(-k \(&\(objectClass=sendmailMT)194.5 188.4 Q +-2.15 -.25(Ke x)172 570.6 T(ample ldap).25 E(-z,)194.5 582.6 Q +(-k \(&\(objectClass=sendmailMT)194.5 594.6 Q (AAliasObject\)\(sendmailMT)-.93 E(AK)-.93 E -.15(ey)-.25 G(=%0\)\)).15 -E(-v sendmailMT)194.5 200.4 Q(AAliasV)-.93 E(alue,mail:NORMAL:inetOr) --1.11 E(gPerson,)-.18 E(uniqueMember:DN:groupOfUniqueNames,)202 212.4 Q -(sendmailMT)202 224.4 Q(AAliasSearch:FIL)-.93 E(TER:sendmailMT)-.92 E -(AAliasObject,)-.93 E(sendmailMT)202 236.4 Q(AAliasURL:URL:sendmailMT) --.93 E(AAliasObject)-.93 E(That de\214nition speci\214es that:)157 256.8 -Q 5<8341>137 273 S .951 -.15(ny v)-5 H .651(alue in a)-.1 F/F2 9 -/Times-Roman@0 SF(sendmailMT)3.151 E(AAliasV)-.837 E(alue)-.999 E F1 -(attrib)3.151 E .652(ute will be added to the result string re)-.2 F --.05(ga)-.15 G(rd-).05 E(less of object class.)145.5 285 Q 5<8354>137 -297 S(he)-5 E F2(mail)2.552 E F1(attrib)2.552 E .052 -(ute will be added to the result string if the LD)-.2 F .051 -(AP record is a member of the)-.4 F F2(inetOr)145.5 309 Q(gPerson)-.162 -E F1(object class.)2.5 E 5<8354>137 321 S(he)-5 E F2(uniqueMember)4.596 -E F1(attrib)4.597 E 2.097(ute is a recursi)-.2 F 2.397 -.15(ve a)-.25 H -(ttrib).15 E 2.097(ute, used only in)-.2 F F2(groupOfUniqueNames)4.597 E -F1 .55(records, and should contain an LD)145.5 333 R .549 -(AP DN pointing to another LD)-.4 F .549(AP record.)-.4 F .549 -(The desire)5.549 F(here is to return the)145.5 345 Q F2(mail)2.5 E F1 -(attrib)2.5 E(ute from those DNs.)-.2 E 5<8354>137 357 S(he)-5 E F2 -(sendmailMT)4.373 E(AAliasSearch)-.837 E F1(attrib)4.373 E 1.873 -(ute and)-.2 F F2(sendmailMT)4.374 E(AAliasURL)-.837 E F1 1.874 -(are both used only if)4.374 F 2.084(referenced in a)145.5 369 R F2 -(sendmailMT)4.584 E(AAliasObject)-.837 E F1 7.084(.T)C(he)-7.084 E 4.584 -(ya)-.15 G 2.084(re both recursi)-4.584 F -.15(ve)-.25 G 4.584(,t).15 G -2.084(he \214rst for a ne)-4.584 F(w)-.25 E(LD)145.5 381 Q +E(-v sendmailMT)194.5 606.6 Q(AAliasV)-.93 E(alue,mail:NORMAL:inetOr) +-1.11 E(gPerson,)-.18 E(uniqueMember:DN:groupOfUniqueNames,)202 618.6 Q +(sendmailMT)202 630.6 Q(AAliasSearch:FIL)-.93 E(TER:sendmailMT)-.92 E +(AAliasObject,)-.93 E(sendmailMT)202 642.6 Q(AAliasURL:URL:sendmailMT) +-.93 E(AAliasObject)-.93 E(That de\214nition speci\214es that:)157 663 Q +5<8341>137 679.2 S .952 -.15(ny v)-5 H .652(alue in a)-.1 F F3 +(sendmailMT)3.152 E(AAliasV)-.837 E(alue)-.999 E F1(attrib)3.152 E .651 +(ute will be added to the result string re)-.2 F -.05(ga)-.15 G(rd-).05 +E(less of object class.)145.5 691.2 Q 5<8354>137 703.2 S(he)-5 E F3 +(mail)2.551 E F1(attrib)2.551 E .051 +(ute will be added to the result string if the LD)-.2 F .052 +(AP record is a member of the)-.4 F F3(inetOr)145.5 715.2 Q(gPerson) +-.162 E F1(object class.)2.5 E 0 Cg EP +%%Page: 100 96 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 188.36(SMM:08-100 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 5<8354> +137 96 S(he)-5 E/F2 9/Times-Roman@0 SF(uniqueMember)4.597 E F1(attrib) +4.597 E 2.097(ute is a recursi)-.2 F 2.397 -.15(ve a)-.25 H(ttrib).15 E +2.097(ute, used only in)-.2 F F2(groupOfUniqueNames)4.596 E F1 .549 +(records, and should contain an LD)145.5 108 R .549 +(AP DN pointing to another LD)-.4 F .55(AP record.)-.4 F .55(The desire) +5.55 F(here is to return the)145.5 120 Q F2(mail)2.5 E F1(attrib)2.5 E +(ute from those DNs.)-.2 E 5<8354>137 132 S(he)-5 E F2(sendmailMT)4.374 +E(AAliasSearch)-.837 E F1(attrib)4.374 E 1.874(ute and)-.2 F F2 +(sendmailMT)4.374 E(AAliasURL)-.837 E F1 1.873(are both used only if) +4.374 F 2.083(referenced in a)145.5 144 R F2(sendmailMT)4.584 E +(AAliasObject)-.837 E F1 7.084(.T)C(he)-7.084 E 4.584(ya)-.15 G 2.084 +(re both recursi)-4.584 F -.15(ve)-.25 G 4.584(,t).15 G 2.084 +(he \214rst for a ne)-4.584 F(w)-.25 E(LD)145.5 156 Q (AP search string and the latter for an LD)-.4 E(AP URL.)-.4 E F0 2.5 -(6.6. ST)87 405 R(AR)-.9 E(TTLS)-.4 E F1 .47 -(In this section we assume that)127 421.2 R/F3 10/Times-Italic@0 SF +(6.6. ST)87 180 R(AR)-.9 E(TTLS)-.4 E F1 .47 +(In this section we assume that)127 196.2 R/F3 10/Times-Italic@0 SF (sendmail)2.97 E F1 .47(has been compiled with support for ST)2.97 F(AR) --.93 E 2.97(TTLS. T)-.6 F(o)-.8 E .609 -(properly understand the use of ST)102 433.2 R(AR)-.93 E .609(TTLS in) +-.93 E 2.97(TTLS. T)-.6 F(o)-.8 E .608 +(properly understand the use of ST)102 208.2 R(AR)-.93 E .609(TTLS in) -.6 F F3(sendmail)3.109 E F1 3.109(,i)C 3.109(ti)-3.109 G 3.109(sn) --3.109 G .608(ecessary to understand at least some)-3.109 F 1.855 -(basics about X.509 certi\214cates and public k)102 445.2 R 2.155 -.15 -(ey c)-.1 H(ryptograph).15 E 5.655 -.65(y. T)-.05 H 1.856 +-3.109 G .609(ecessary to understand at least some)-3.109 F 1.856 +(basics about X.509 certi\214cates and public k)102 220.2 R 2.155 -.15 +(ey c)-.1 H(ryptograph).15 E 5.655 -.65(y. T)-.05 H 1.855 (his information can be found in).65 F -(books about SSL/TLS or on WWW sites, e.g., \231http://www)102 457.2 Q +(books about SSL/TLS or on WWW sites, e.g., \231http://www)102 232.2 Q (.OpenSSL.or)-.65 E(g/\232.)-.18 E F0 2.5(6.6.1. Certi\214cates)102 -481.2 R -.25(fo)2.5 G 2.5(rS).25 G -.9(TA)-2.5 G -.4(RT).9 G(TLS).4 E F1 -.438(When acting as a serv)142 497.4 R(er)-.15 E(,)-.4 E F3(sendmail) -2.938 E F1 .437(requires X.509 certi\214cates to support ST)2.938 F(AR) --.93 E .437(TTLS: one)-.6 F 1.45(as certi\214cate for the serv)117 509.4 +256.2 R -.25(fo)2.5 G 2.5(rS).25 G -.9(TA)-2.5 G -.4(RT).9 G(TLS).4 E F1 +.437(When acting as a serv)142 272.4 R(er)-.15 E(,)-.4 E F3(sendmail) +2.937 E F1 .438(requires X.509 certi\214cates to support ST)2.937 F(AR) +-.93 E .438(TTLS: one)-.6 F 1.45(as certi\214cate for the serv)117 284.4 R 1.45(er \(Serv)-.15 F 1.45(erCertFile and corresponding pri)-.15 F -.25(va)-.25 G 1.45(te Serv).25 F(erK)-.15 E -.15(ey)-.25 G 1.45 -(File\) at least).15 F .245(one root CA \(CA)117 521.4 R .244(CertFile\ +(File\) at least).15 F .244(one root CA \(CA)117 296.4 R .245(CertFile\ \), i.e., a certi\214cate that is used to sign other certi\214cates, an\ -d a path to a)-.4 F .898(directory which contains other CAs \(CA)117 -533.4 R(CertP)-.4 E 3.398(ath\). The)-.15 F .899 -(\214le speci\214ed via CA)3.398 F .899(CertFile can con-)-.4 F .919 -(tain se)117 545.4 R -.15(ve)-.25 G .919(ral certi\214cates of CAs.).15 +d a path to a)-.4 F .899(directory which contains other CAs \(CA)117 +308.4 R(CertP)-.4 E 3.398(ath\). The)-.15 F .898 +(\214le speci\214ed via CA)3.398 F .898(CertFile can con-)-.4 F .918 +(tain se)117 320.4 R -.15(ve)-.25 G .918(ral certi\214cates of CAs.).15 F .919 (The DNs of these certi\214cates are sent to the client during the)5.919 -F .925(TLS handshak)117 557.4 R 3.425(e\()-.1 G .925 +F .925(TLS handshak)117 332.4 R 3.425(e\()-.1 G .925 (as part of the Certi\214cateRequest\) as the list of acceptable CAs.) -3.425 F(Ho)5.925 E(we)-.25 E -.15(ve)-.25 G 1.725 -.4(r, d).15 H(o).4 E -(not list too man)117 569.4 Q 2.5(yr)-.15 G +(not list too man)117 344.4 Q 2.5(yr)-.15 G (oot CAs in that \214le, otherwise the TLS handshak)-2.5 E 2.5(em)-.1 G (ay f)-2.5 E(ail; e.g.,)-.1 E -(error:14094417:SSL routines:SSL3_READ_BYTES:)157 585.6 Q -(sslv3 alert ille)157 597.6 Q -.05(ga)-.15 G 2.5(lp).05 G -(arameter:s3_pkt.c:964:SSL alert number 47)-2.5 E -1.1(Yo)117 613.8 S -3.074(us)1.1 G .574(hould probably put only the CA cert into that \214l\ -e that signed your o)-3.074 F .574(wn cert\(s\), or at least)-.25 F .542 -(only those you trust.)117 625.8 R .543(The CA)5.543 F(CertP)-.4 E .543 +(error:14094417:SSL routines:SSL3_READ_BYTES:)157 360.6 Q +(sslv3 alert ille)157 372.6 Q -.05(ga)-.15 G 2.5(lp).05 G +(arameter:s3_pkt.c:964:SSL alert number 47)-2.5 E -1.1(Yo)117 388.8 S +3.073(us)1.1 G .574(hould probably put only the CA cert into that \214l\ +e that signed your o)-3.073 F .574(wn cert\(s\), or at least)-.25 F .543 +(only those you trust.)117 400.8 R .543(The CA)5.543 F(CertP)-.4 E .543 (ath directory must contain the hashes of each CA certi\214cate)-.15 F -1.585(as \214lenames \(or as links to them\).)117 637.8 R 1.584 -(Symbolic links can be generated with the follo)6.585 F 1.584(wing tw) --.25 F(o)-.1 E(\(Bourne\) shell commands:)117 649.8 Q -(C=FileName_of_CA_Certi\214cate)157 666 Q -(ln -s $C `openssl x509 -noout -hash < $C`.0)157 678 Q .202(An X.509 ce\ +1.584(as \214lenames \(or as links to them\).)117 412.8 R 1.585 +(Symbolic links can be generated with the follo)6.585 F 1.585(wing tw) +-.25 F(o)-.1 E(\(Bourne\) shell commands:)117 424.8 Q +(C=FileName_of_CA_Certi\214cate)157 441 Q +(ln -s $C `openssl x509 -noout -hash < $C`.0)157 453 Q .202(An X.509 ce\ rti\214cate is also required for authentication in client mode \(Client\ -CertFile and corre-)117 694.2 R .931(sponding pri)117 706.2 R -.25(va) +CertFile and corre-)117 469.2 R .931(sponding pri)117 481.2 R -.25(va) -.25 G .931(te ClientK).25 F -.15(ey)-.25 G .931(File\), ho).15 F(we) -.25 E -.15(ve)-.25 G -.4(r,).15 G F3(sendmail)3.831 E F1 .931(will al) 3.431 F -.1(wa)-.1 G .931(ys use ST).1 F(AR)-.93 E .931(TTLS when of)-.6 -F(fered)-.25 E .067(by a serv)117 718.2 R(er)-.15 E 5.067(.T)-.55 G .067 -(he client and serv)-5.067 F .067(er certi\214cates can be identical.) --.15 F .068(Certi\214cates can be obtained from)5.068 F 0 Cg EP -%%Page: 99 95 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-99)195.86 E/F1 10/Times-Roman@0 SF 2.848(ac)117 96 S .348 -(erti\214cate authority or created with the help of OpenSSL.)-2.848 F -.348(The required format for certi\214cates)5.348 F 4.583(and pri)117 -108 R -.25(va)-.25 G 4.583(te k).25 F -.15(ey)-.1 G 7.084(si).15 G 7.084 -(sP)-7.084 G 7.084(EM. T)-7.084 F 7.084(oa)-.8 G(llo)-7.084 E 7.084(wf) --.25 G 4.584(or automatic startup of sendmail, pri)-7.084 F -.25(va)-.25 -G 4.584(te k).25 F -.15(ey)-.1 G(s).15 E(\(Serv)117 120 Q(erK)-.15 E --.15(ey)-.25 G .25(File, ClientK).15 F -.15(ey)-.25 G .249 +F(fered)-.25 E .068(by a serv)117 493.2 R(er)-.15 E 5.068(.T)-.55 G .068 +(he client and serv)-5.068 F .067(er certi\214cates can be identical.) +-.15 F .067(Certi\214cates can be obtained from)5.067 F 2.847(ac)117 +505.2 S .348 +(erti\214cate authority or created with the help of OpenSSL.)-2.847 F +.348(The required format for certi\214cates)5.348 F 4.584(and pri)117 +517.2 R -.25(va)-.25 G 4.584(te k).25 F -.15(ey)-.1 G 7.084(si).15 G +7.084(sP)-7.084 G 7.084(EM. T)-7.084 F 7.084(oa)-.8 G(llo)-7.084 E 7.084 +(wf)-.25 G 4.584(or automatic startup of sendmail, pri)-7.084 F -.25(va) +-.25 G 4.583(te k).25 F -.15(ey)-.1 G(s).15 E(\(Serv)117 529.2 Q(erK) +-.15 E -.15(ey)-.25 G .249(File, ClientK).15 F -.15(ey)-.25 G .249 (File\) must be stored unencrypted.).15 F .249(The k)5.249 F -.15(ey)-.1 G 2.749(sa).15 G .249(re only protected by the)-2.749 F -(permissions of the \214le system.)117 132 Q(Ne)5 E -.15(ve)-.25 G 2.5 +(permissions of the \214le system.)117 541.2 Q(Ne)5 E -.15(ve)-.25 G 2.5 (rm).15 G(ak)-2.5 E 2.5(eap)-.1 G(ri)-2.5 E -.25(va)-.25 G(te k).25 E .3 -.15(ey a)-.1 H -.25(va)-.05 G(ilable to a third party).25 E(.)-.65 E F0 -2.5(6.6.2. PRNG)102 156 R -.25(fo)2.5 G 2.5(rS).25 G -.9(TA)-2.5 G -.4 -(RT).9 G(TLS).4 E F1(ST)142 172.2 Q(AR)-.93 E .504(TTLS requires a stro\ +2.5(6.6.2. PRNG)102 565.2 R -.25(fo)2.5 G 2.5(rS).25 G -.9(TA)-2.5 G -.4 +(RT).9 G(TLS).4 E F1(ST)142 581.4 Q(AR)-.93 E .504(TTLS requires a stro\ ng pseudo random number generator \(PRNG\) to operate prop-)-.6 F(erly) -117 184.2 Q 5.056(.D)-.65 G .056 -(epending on the TLS library you use, it may be required to e)-5.056 F -.055(xplicitly initialize the PRNG)-.15 F 1.154(with random data.)117 -196.2 R 1.154(OpenSSL mak)6.154 F 1.154(es use of)-.1 F F0(/de)3.654 E -(v/urandom\(4\))-.15 E F1 1.154(if a)3.654 F -.25(va)-.2 G 1.155 -(ilable \(this corresponds to).25 F 1.443 -(the compile \215ag HASURANDOMDEV\).)117 208.2 R 1.442 -(On systems which lack this support, a random \214le)6.443 F .223 -(must be speci\214ed in the)117 220.2 R/F2 10/Times-Italic@0 SF -(sendmail.cf)2.723 E F1 .223(\214le using the option RandFile.)2.723 F -.223(It is)5.223 F F0(str)2.723 E(ongly)-.18 E F1 .224(advised to use) -2.723 F .873(the "Entrop)117 232.2 R 3.373(yG)-.1 G .872 -(athering Daemon" EGD from Brian W)-3.373 F .872 -(arner on those systems to pro)-.8 F .872(vide useful)-.15 F 1.413 -(random data.)117 244.2 R 1.413(In this case,)6.413 F F2(sendmail)3.913 -E F1 1.414(must be compiled with the \215ag EGD, and the RandFile)3.913 -F .732(option must point to the EGD sock)117 256.2 R 3.231(et. If)-.1 F -(neither)3.231 E F0(/de)3.231 E(v/urandom\(4\))-.15 E F1 .731 -(nor EGD are a)3.231 F -.25(va)-.2 G .731(ilable, you).25 F(ha)117 268.2 -Q .473 -.15(ve t)-.2 H 2.673(om).15 G(ak)-2.673 E 2.674(es)-.1 G .174 +117 593.4 Q 5.055(.D)-.65 G .056 +(epending on the TLS library you use, it may be required to e)-5.055 F +.056(xplicitly initialize the PRNG)-.15 F 1.155(with random data.)117 +605.4 R 1.154(OpenSSL mak)6.154 F 1.154(es use of)-.1 F F0(/de)3.654 E +(v/urandom\(4\))-.15 E F1 1.154(if a)3.654 F -.25(va)-.2 G 1.154 +(ilable \(this corresponds to).25 F 1.442 +(the compile \215ag HASURANDOMDEV\).)117 617.4 R 1.443 +(On systems which lack this support, a random \214le)6.442 F .224 +(must be speci\214ed in the)117 629.4 R F3(sendmail.cf)2.723 E F1 .223 +(\214le using the option RandFile.)2.723 F .223(It is)5.223 F F0(str) +2.723 E(ongly)-.18 E F1 .223(advised to use)2.723 F .872(the "Entrop)117 +641.4 R 3.372(yG)-.1 G .872(athering Daemon" EGD from Brian W)-3.372 F +.873(arner on those systems to pro)-.8 F .873(vide useful)-.15 F 1.414 +(random data.)117 653.4 R 1.414(In this case,)6.414 F F3(sendmail)3.914 +E F1 1.413(must be compiled with the \215ag EGD, and the RandFile)3.913 +F .731(option must point to the EGD sock)117 665.4 R 3.231(et. If)-.1 F +(neither)3.231 E F0(/de)3.232 E(v/urandom\(4\))-.15 E F1 .732 +(nor EGD are a)3.232 F -.25(va)-.2 G .732(ilable, you).25 F(ha)117 677.4 +Q .474 -.15(ve t)-.2 H 2.674(om).15 G(ak)-2.674 E 2.674(es)-.1 G .174 (ure that useful random data is a)-2.674 F -.25(va)-.2 G .174 -(ilable all the time in RandFile.).25 F .174(If the \214le hasn')5.174 F +(ilable all the time in RandFile.).25 F .173(If the \214le hasn')5.174 F (t)-.18 E .39(been modi\214ed in the last 10 minutes before it is suppo\ -sed to be used by)117 280.2 R F2(sendmail)2.89 E F1 .39(the content is) -2.89 F(considered obsolete.)117 292.2 Q -(One method for generating this \214le is:)5 E -(openssl rand -out /etc/mail/rand\214le -rand)157 308.4 Q F2 -(/path/to/\214le:...)2.5 E F1(256)A .32 -(See the OpenSSL documentation for more information.)117 324.6 R .321 -(In this case, the PRNG for TLS is only)5.321 F .957 -(seeded with other random data if the)117 336.6 R F0(DontBlameSendmail) -3.456 E F1(option)3.456 E F0(Insuf\214cientEntr)3.456 E(opy)-.18 E F1 -.956(is set.)3.456 F(This is most lik)117 348.6 Q(ely not suf)-.1 E +sed to be used by)117 689.4 R F3(sendmail)2.89 E F1 .39(the content is) +2.89 F(considered obsolete.)117 701.4 Q +(One method for generating this \214le is:)5 E 0 Cg EP +%%Page: 101 97 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q +(SMM:08-101)190.86 E/F1 10/Times-Roman@0 SF +(openssl rand -out /etc/mail/rand\214le -rand)157 96 Q/F2 10 +/Times-Italic@0 SF(/path/to/\214le:...)2.5 E F1(256)A .321 +(See the OpenSSL documentation for more information.)117 112.2 R .32 +(In this case, the PRNG for TLS is only)5.321 F .956 +(seeded with other random data if the)117 124.2 R F0(DontBlameSendmail) +3.456 E F1(option)3.457 E F0(Insuf\214cientEntr)3.457 E(opy)-.18 E F1 +.957(is set.)3.457 F(This is most lik)117 136.2 Q(ely not suf)-.1 E (\214cient for certain actions, e.g., generation of \(temporary\) k)-.25 E -.15(ey)-.1 G(s.).15 E .051(Please see the OpenSSL documentation or o\ -ther sources for further information about cer)142 364.8 R(-)-.2 E 1.064 +ther sources for further information about cer)142 152.4 R(-)-.2 E 1.064 (ti\214cates, their creation and their usage, the importance of a good \ -PRNG, and other aspects of)117 376.8 R(TLS.)117 388.8 Q F0 2.5 -(6.7. Encoding)87 412.8 R(of ST)2.5 E(AR)-.9 E(TTLS and A)-.4 E(UTH r) --.5 E(elated Macr)-.18 E(os)-.18 E F1 .692(Macros that contain ST)127 -429 R(AR)-.93 E .692(TTLS and A)-.6 F .693 +PRNG, and other aspects of)117 164.4 R(TLS.)117 176.4 Q F0 2.5 +(6.7. Encoding)87 200.4 R(of ST)2.5 E(AR)-.9 E(TTLS and A)-.4 E(UTH r) +-.5 E(elated Macr)-.18 E(os)-.18 E F1 .693(Macros that contain ST)127 +216.6 R(AR)-.93 E .693(TTLS and A)-.6 F .692 (UTH related data which comes from outside sources,)-.55 F .809(e.g., a\ ll macros containing information from certi\214cates, are encoded to a) -102 441 R -.2(vo)-.2 G .809(id problems with non-).2 F .192 -(printable or special characters.)102 453 R .192 -(The latter are '\\', '<', '>', '\(', '\)', '"', '+', and ' '.)5.192 F -.193(All of these char)5.193 F(-)-.2 E(acters are replaced by their v) -102 465 Q(alue in he)-.25 E(xadecimal with a leading '+'.)-.15 E -.15 +102 228.6 R -.2(vo)-.2 G .81(id problems with non-).2 F .193 +(printable or special characters.)102 240.6 R .193 +(The latter are '\\', '<', '>', '\(', '\)', '"', '+', and ' '.)5.193 F +.192(All of these char)5.192 F(-)-.2 E(acters are replaced by their v) +102 252.6 Q(alue in he)-.25 E(xadecimal with a leading '+'.)-.15 E -.15 (Fo)5 G 2.5(re).15 G(xample:)-2.65 E(/C=US/ST=California/O=endmail.or) -142 481.2 Q(g/OU=pri)-.18 E -.25(va)-.25 G(te/CN=Darth Mail \(Cert\)/) -.25 E(Email=darth+cert@endmail.or)142 493.2 Q(g)-.18 E(is encoded as:) -102 509.4 Q(/C=US/ST=California/O=endmail.or)142 525.6 Q(g/OU=pri)-.18 E +142 268.8 Q(g/OU=pri)-.18 E -.25(va)-.25 G(te/CN=Darth Mail \(Cert\)/) +.25 E(Email=darth+cert@endmail.or)142 280.8 Q(g)-.18 E(is encoded as:) +102 297 Q(/C=US/ST=California/O=endmail.or)142 313.2 Q(g/OU=pri)-.18 E -.25(va)-.25 G(te/).25 E -(CN=Darth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.or)142 537.6 Q -(g)-.18 E .516(\(line breaks ha)102 553.8 R .816 -.15(ve b)-.2 H .516 -(een inserted for readability\).).15 F .515 -(The macros which are subject to this encoding are)5.515 F 6.827({cert_\ +(CN=Darth+20Mail+20+28Cert+29/Email=darth+2Bcert@endmail.or)142 325.2 Q +(g)-.18 E .515(\(line breaks ha)102 341.4 R .815 -.15(ve b)-.2 H .515 +(een inserted for readability\).).15 F .516 +(The macros which are subject to this encoding are)5.515 F 6.828({cert_\ subject}, {cert_issuer}, {cn_subject}, {cn_issuer}, as well as {auth_au\ -then} and)102 565.8 R({auth_author}.)102 577.8 Q F0 2.5(7. A)72 601.8 R -(CKNO)-.55 E(WLEDGEMENTS)-.5 E F1(I')112 618 Q 2.037 -.15(ve w)-.5 H +then} and)102 353.4 R({auth_author}.)102 365.4 Q F0 2.5(7. A)72 389.4 R +(CKNO)-.55 E(WLEDGEMENTS)-.5 E F1(I')112 405.6 Q 2.036 -.15(ve w)-.5 H (ork).05 E 1.737(ed on)-.1 F F2(sendmail)4.237 E F1 1.737(for man)4.237 F 4.237(yy)-.15 G 1.737(ears, and man)-4.237 F 4.237(ye)-.15 G(mplo) -4.237 E 1.737(yers ha)-.1 F 2.037 -.15(ve b)-.2 H 1.737 -(een remarkably patient).15 F .403(about letting me w)87 630 R .403 -(ork on a lar)-.1 F .403(ge project that w)-.18 F .404 -(as not part of my of)-.1 F .404(\214cial job)-.25 F 5.404(.T)-.4 G .404 -(his includes time on the)-5.404 F .282(INGRES Project at the Uni)87 642 -R -.15(ve)-.25 G .282(rsity of California at Berk).15 F(ele)-.1 E 1.582 --.65(y, a)-.15 H 2.782(tB).65 G .282(ritton Lee, and ag)-2.782 F .281 -(ain on the Mammoth)-.05 F(and T)87 654 Q(itan Projects at Berk)-.35 E -(ele)-.1 E -.65(y.)-.15 G .789(Much of the second w)112 670.2 R -2.25 --.2(av e)-.1 H .789(of impro)3.489 F -.15(ve)-.15 G .789 -(ments resulting in v).15 F .79(ersion 8.1 should be credited to Bryan) +(een remarkably patient).15 F .404(about letting me w)87 417.6 R .404 +(ork on a lar)-.1 F .404(ge project that w)-.18 F .403 +(as not part of my of)-.1 F .403(\214cial job)-.25 F 5.403(.T)-.4 G .403 +(his includes time on the)-5.403 F .281(INGRES Project at the Uni)87 +429.6 R -.15(ve)-.25 G .282(rsity of California at Berk).15 F(ele)-.1 E +1.582 -.65(y, a)-.15 H 2.782(tB).65 G .282(ritton Lee, and ag)-2.782 F +.282(ain on the Mammoth)-.05 F(and T)87 441.6 Q(itan Projects at Berk) +-.35 E(ele)-.1 E -.65(y.)-.15 G .79(Much of the second w)112 457.8 R +-2.25 -.2(av e)-.1 H .789(of impro)3.49 F -.15(ve)-.15 G .789 +(ments resulting in v).15 F .789(ersion 8.1 should be credited to Bryan) -.15 F .545(Costales of the International Computer Science Institute.)87 -682.2 R .545(As he passed me drafts of his book on)5.545 F F2(send-) -3.045 E(mail)87 694.2 Q F1 2.5(Iw)2.5 G(as inspired to start w)-2.6 E +469.8 R .545(As he passed me drafts of his book on)5.545 F F2(send-) +3.045 E(mail)87 481.8 Q F1 2.5(Iw)2.5 G(as inspired to start w)-2.6 E (orking on things ag)-.1 E 2.5(ain. Bryan)-.05 F -.1(wa)2.5 G 2.5(sa).1 G(lso a)-2.5 E -.25(va)-.2 G(ilable to bounce ideas of).25 E 2.5(fo)-.25 -G(f.)-2.5 E(Gre)112 710.4 Q .167(gory Neil Shapiro of W)-.15 F .168(orc\ -ester Polytechnic Institute has become instrumental in all phases of)-.8 -F F2(sendmail)87 722.4 Q F1 .34(support and de)2.84 F -.15(ve)-.25 G .34 +G(f.)-2.5 E(Gre)112 498 Q .168(gory Neil Shapiro of W)-.15 F .168(orces\ +ter Polytechnic Institute has become instrumental in all phases of)-.8 F +F2(sendmail)87 510 Q F1 .34(support and de)2.84 F -.15(ve)-.25 G .34 (lopment, and w).15 F .34(as lar)-.1 F .34 (gely responsible for getting v)-.18 F .34(ersions 8.8 and 8.9 out the) --.15 F 0 Cg EP -%%Page: 100 96 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Bold@0 SF 188.36(SMM:08-100 Sendmail)72 60 R -(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF(door)87 -96 Q(.)-.55 E(Man)112 112.2 Q 2.856 -.65(y, m)-.15 H(an).65 E 4.056(yp) --.15 G 1.556(eople contrib)-4.056 F 1.556 -(uted chunks of code and ideas to)-.2 F/F2 10/Times-Italic@0 SF -(sendmail)4.056 E F1 6.556(.I)C 4.056(th)-6.556 G 1.557(as pro)-4.056 F --.15(ve)-.15 G 4.057(nt).15 G 4.057(ob)-4.057 G 4.057(ea)-4.057 G .406 -(group netw)87 124.2 R .406(ork ef)-.1 F 2.906(fort. V)-.25 F .406 -(ersion 8 in particular w)-1.11 F .405(as a group project.)-.1 F .405 -(The follo)5.405 F .405(wing people and or)-.25 F -.05(ga)-.18 G(niza-) -.05 E(tions made notable contrib)87 136.2 Q(utions:)-.2 E(Claus Assmann) -127 152.4 Q(John Beck, He)127 164.4 Q(wlett-P)-.25 E -(ackard & Sun Microsystems)-.15 E -.25(Ke)127 176.4 S +-.15 F(door)87 522 Q(.)-.55 E(Man)112 538.2 Q 2.857 -.65(y, m)-.15 H(an) +.65 E 4.057(yp)-.15 G 1.557(eople contrib)-4.057 F 1.556 +(uted chunks of code and ideas to)-.2 F F2(sendmail)4.056 E F1 6.556(.I) +C 4.056(th)-6.556 G 1.556(as pro)-4.056 F -.15(ve)-.15 G 4.056(nt).15 G +4.056(ob)-4.056 G 4.056(ea)-4.056 G .405(group netw)87 550.2 R .405 +(ork ef)-.1 F 2.905(fort. V)-.25 F .405(ersion 8 in particular w)-1.11 F +.405(as a group project.)-.1 F .406(The follo)5.406 F .406 +(wing people and or)-.25 F -.05(ga)-.18 G(niza-).05 E +(tions made notable contrib)87 562.2 Q(utions:)-.2 E(Claus Assmann)127 +578.4 Q(John Beck, He)127 590.4 Q(wlett-P)-.25 E +(ackard & Sun Microsystems)-.15 E -.25(Ke)127 602.4 S (ith Bostic, CSRG, Uni).25 E -.15(ve)-.25 G(rsity of California, Berk) -.15 E(ele)-.1 E(y)-.15 E(Andre)127 188.4 Q 2.5(wC)-.25 G -(heng, Sun Microsystems)-2.5 E(Michael J. Corrig)127 200.4 Q(an, Uni) +.15 E(ele)-.1 E(y)-.15 E(Andre)127 614.4 Q 2.5(wC)-.25 G +(heng, Sun Microsystems)-2.5 E(Michael J. Corrig)127 626.4 Q(an, Uni) -.05 E -.15(ve)-.25 G(rsity of California, San Die).15 E(go)-.15 E (Bryan Costales, International Computer Science Institute & InfoBeat)127 -212.4 Q -.15(Pa)127 224.4 S -.5(..)-4.402 -6 O 2.5(r\().552 6 O -(Pell\) Emanuelsson)-2.5 E(Craig Ev)127 236.4 Q(erhart, T)-.15 E -(ransarc Corporation)-.35 E(Per Hedeland, Ericsson)127 248.4 Q -.8(To) -127 260.4 S 2.5(mI).8 G -.25(va)-2.5 G 2.5(rH).25 G(elbekkmo, Norwe)-2.5 +638.4 Q -.15(Pa)127 650.4 S -.5(..)-4.402 -6 O 2.5(r\().552 6 O +(Pell\) Emanuelsson)-2.5 E(Craig Ev)127 662.4 Q(erhart, T)-.15 E +(ransarc Corporation)-.35 E(Per Hedeland, Ericsson)127 674.4 Q -.8(To) +127 686.4 S 2.5(mI).8 G -.25(va)-2.5 G 2.5(rH).25 G(elbekkmo, Norwe)-2.5 E(gian School of Economics)-.15 E -(Kari Hurtta, Finnish Meteorological Institute)127 272.4 Q -(Allan E. Johannesen, WPI)127 284.4 Q(Jonathan Kamens, OpenV)127 296.4 Q -(ision T)-.6 E(echnologies, Inc.)-.7 E -.8(Ta)127 308.4 S -(kahiro Kanbe, Fuji Xerox Information Systems Co., Ltd.).8 E -(Brian Kantor)127 320.4 Q 2.5(,U)-.4 G(ni)-2.5 E -.15(ve)-.25 G -(rsity of California, San Die).15 E(go)-.15 E(John K)127 332.4 Q(ennedy) +(Kari Hurtta, Finnish Meteorological Institute)127 698.4 Q +(Allan E. Johannesen, WPI)127 710.4 Q(Jonathan Kamens, OpenV)127 722.4 Q +(ision T)-.6 E(echnologies, Inc.)-.7 E 0 Cg EP +%%Page: 102 98 +%%BeginPageSetup +BP +%%EndPageSetup +/F0 10/Times-Bold@0 SF 188.36(SMM:08-102 Sendmail)72 60 R +(Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF -.8(Ta) +127 96 S(kahiro Kanbe, Fuji Xerox Information Systems Co., Ltd.).8 E +(Brian Kantor)127 108 Q 2.5(,U)-.4 G(ni)-2.5 E -.15(ve)-.25 G +(rsity of California, San Die).15 E(go)-.15 E(John K)127 120 Q(ennedy) -.25 E 2.5(,C)-.65 G(al State Uni)-2.5 E -.15(ve)-.25 G(rsity).15 E 2.5 -(,C)-.65 G(hico)-2.5 E(Murray S. K)127 344.4 Q(uchera)-.15 E(wy)-.15 E -2.5(,H)-.65 G(ookUp Communication Corp.)-2.5 E(Bruce Lilly)127 356.4 Q -2.5(,S)-.65 G(on)-2.5 E 2.5(yU)-.15 G(.S.)-2.5 E(Karl London)127 368.4 Q -(Motonori Nakamura, Ritsumeikan Uni)127 380.4 Q -.15(ve)-.25 G -(rsity & K).15 E(yoto Uni)-.25 E -.15(ve)-.25 G(rsity).15 E -(John Gardiner Myers, Carne)127 392.4 Q(gie Mellon Uni)-.15 E -.15(ve) --.25 G(rsity).15 E(Neil Rick)127 404.4 Q(ert, Northern Illinois Uni)-.1 -E -.15(ve)-.25 G(rsity).15 E(Gre)127 416.4 Q(gory Neil Shapiro, WPI)-.15 -E(Eric Schnoebelen, Con)127 428.4 Q .3 -.15(vex C)-.4 H(omputer Corp.) -.15 E(Eric W)127 440.4 Q(assenaar)-.8 E 2.5(,N)-.4 G +(,C)-.65 G(hico)-2.5 E(Murray S. K)127 132 Q(uchera)-.15 E(wy)-.15 E 2.5 +(,H)-.65 G(ookUp Communication Corp.)-2.5 E(Bruce Lilly)127 144 Q 2.5 +(,S)-.65 G(on)-2.5 E 2.5(yU)-.15 G(.S.)-2.5 E(Karl London)127 156 Q +(Motonori Nakamura, Ritsumeikan Uni)127 168 Q -.15(ve)-.25 G(rsity & K) +.15 E(yoto Uni)-.25 E -.15(ve)-.25 G(rsity).15 E +(John Gardiner Myers, Carne)127 180 Q(gie Mellon Uni)-.15 E -.15(ve)-.25 +G(rsity).15 E(Neil Rick)127 192 Q(ert, Northern Illinois Uni)-.1 E -.15 +(ve)-.25 G(rsity).15 E(Gre)127 204 Q(gory Neil Shapiro, WPI)-.15 E +(Eric Schnoebelen, Con)127 216 Q .3 -.15(vex C)-.4 H(omputer Corp.).15 E +(Eric W)127 228 Q(assenaar)-.8 E 2.5(,N)-.4 G (ational Institute for Nuclear and High Ener)-2.5 E(gy Ph)-.18 E -(ysics, Amsterdam)-.05 E(Randall W)127 452.4 Q(inchester)-.4 E 2.5(,U) --.4 G(ni)-2.5 E -.15(ve)-.25 G(rsity of Maryland).15 E(Christophe W)127 -464.4 Q(olfhugel, P)-.8 E(asteur Institute & Herv)-.15 E 2.5(eS)-.15 G -(chauer Consultants \(P)-2.5 E(aris\))-.15 E(Exactis.com, Inc.)127 476.4 -Q 3.219(Ia)87 492.6 S .719(pologize for an)-3.219 F .719(yone I ha)-.15 -F 1.019 -.15(ve o)-.2 H .719(mitted, misspelled, misattrib).15 F .719 -(uted, or otherwise missed.)-.2 F .72(At this point, I)5.72 F 1.093 -(suspect that at least a hundred people ha)87 504.6 R 1.393 -.15(ve c) --.2 H(ontrib).15 E 1.093(uted code, and man)-.2 F 3.592(ym)-.15 G 1.092 -(ore ha)-3.592 F 1.392 -.15(ve c)-.2 H(ontrib).15 E 1.092(uted ideas,) --.2 F 1.533(comments, and encouragement.)87 516.6 R(I')6.534 E 1.834 --.15(ve t)-.5 H 1.534(ried to list them in the RELEASE_NO).15 F 1.534 -(TES in the distrib)-.4 F(ution)-.2 E(directory)87 528.6 Q 5(.I)-.65 G -(appreciate their contrib)-2.5 E(ution as well.)-.2 E .743 -(Special thanks are reserv)112 544.8 R .743(ed for Michael Corrig)-.15 F -.742(an and Christophe W)-.05 F .742(olfhugel, who besides being)-.8 F --.1(wo)87 556.8 S 2.1(nderful guinea pigs and contrib).1 F 2.1(utors ha) +(ysics, Amsterdam)-.05 E(Randall W)127 240 Q(inchester)-.4 E 2.5(,U)-.4 +G(ni)-2.5 E -.15(ve)-.25 G(rsity of Maryland).15 E(Christophe W)127 252 +Q(olfhugel, P)-.8 E(asteur Institute & Herv)-.15 E 2.5(eS)-.15 G +(chauer Consultants \(P)-2.5 E(aris\))-.15 E(Exactis.com, Inc.)127 264 Q +3.22(Ia)87 280.2 S .72(pologize for an)-3.22 F .72(yone I ha)-.15 F +1.019 -.15(ve o)-.2 H .719(mitted, misspelled, misattrib).15 F .719 +(uted, or otherwise missed.)-.2 F .719(At this point, I)5.719 F 1.092 +(suspect that at least a hundred people ha)87 292.2 R 1.393 -.15(ve c) +-.2 H(ontrib).15 E 1.093(uted code, and man)-.2 F 3.593(ym)-.15 G 1.093 +(ore ha)-3.593 F 1.393 -.15(ve c)-.2 H(ontrib).15 E 1.093(uted ideas,) +-.2 F 1.534(comments, and encouragement.)87 304.2 R(I')6.534 E 1.834 +-.15(ve t)-.5 H 1.534(ried to list them in the RELEASE_NO).15 F 1.533 +(TES in the distrib)-.4 F(ution)-.2 E(directory)87 316.2 Q 5(.I)-.65 G +(appreciate their contrib)-2.5 E(ution as well.)-.2 E .742 +(Special thanks are reserv)112 332.4 R .742(ed for Michael Corrig)-.15 F +.743(an and Christophe W)-.05 F .743(olfhugel, who besides being)-.8 F +-.1(wo)87 344.4 S 2.1(nderful guinea pigs and contrib).1 F 2.1(utors ha) -.2 F 2.4 -.15(ve a)-.2 H 2.1(lso consented to be added to the `).15 F -(`sendmail@Send-)-.74 E(mail.ORG')87 568.8 Q 3.611('l)-.74 G 1.111 -(ist and, by answering the b)-3.611 F 1.111 -(ulk of the questions sent to that list, ha)-.2 F 1.41 -.15(ve f)-.2 H -1.11(reed me up to do).15 F(other w)87 580.8 Q(ork.)-.1 E 0 Cg EP -%%Page: 101 97 +(`sendmail@Send-)-.74 E(mail.ORG')87 356.4 Q 3.61('l)-.74 G 1.11 +(ist and, by answering the b)-3.61 F 1.111 +(ulk of the questions sent to that list, ha)-.2 F 1.411 -.15(ve f)-.2 H +1.111(reed me up to do).15 F(other w)87 368.4 Q(ork.)-.1 E 0 Cg EP +%%Page: 103 99 %%BeginPageSetup BP %%EndPageSetup @@ -9063,13 +9091,13 @@ BP 224.832 141.6 Q(GS)-.66 E/F1 10/Times-Roman@0 SF(Ar)97 201 Q (guments must be presented with \215ags before addresses.)-.18 E (The \215ags are:)5 E72 217.2 Q/F2 10/Times-Italic@0 SF(x)A F1 -.048(Select an alternati)54.7 F .348 -.15(ve .)-.25 H .048 +.049(Select an alternati)54.7 F .349 -.15(ve .)-.25 H .049 (cf \214le which is either).15 F F2(sendmail.cf)2.549 E F1(for)2.549 E -/F3 10/Times-Bold@0 SF(\255Am)2.549 E F1(or)2.549 E F2(submit.cf)2.549 E -F1(for)2.549 E F3(\255Ac)2.549 E F1 5.049(.B)C(y)-5.049 E(def)144 229.2 +/F3 10/Times-Bold@0 SF(\255Am)2.549 E F1(or)2.548 E F2(submit.cf)2.548 E +F1(for)2.548 E F3(\255Ac)2.548 E F1 5.048(.B)C(y)-5.048 E(def)144 229.2 Q .024(ault the .cf \214le is chosen based on the operation mode.)-.1 F -.15(Fo)5.024 G(r).15 E F3(-bm)2.524 E F1(\(def)2.524 E(ault\),)-.1 E F3 -(-bs)2.524 E F1 2.524(,a)C(nd)-2.524 E F3(-t)2.524 E F1(it)2.524 E(is) +(-bs)2.524 E F1 2.524(,a)C(nd)-2.524 E F3(-t)2.525 E F1(it)2.525 E(is) 144 241.2 Q F2(submit.cf)2.5 E F1(if it e)2.5 E (xists, for all others it is)-.15 E F2(sendmail.cf)2.5 E F1(.)A72 257.4 Q F2(x)A F1(Set operation mode to)56.92 E F2(x)2.5 E F1 5(.O)C @@ -9090,70 +9118,70 @@ G 2.5(rt).15 G(he mail queue \(requires shared memory\))-2.5 E 15(hP)184 405.6 S(ur)-12.78 E(ge e)-.18 E (xpired entries from the persistent host status database)-.15 E72 426 Q F2(type)A F1(Indicate body type.)43.03 E72 442.2 Q F2 -(\214le)A F1 .946(Use a dif)47.47 F .946(ferent con\214guration \214le.) +(\214le)A F1 .947(Use a dif)47.47 F .946(ferent con\214guration \214le.) -.25 F F2(Sendmail)5.946 E F1 .946(runs as the in)3.446 F -.2(vo)-.4 G .946(king user \(rather than root\)).2 F (when this \215ag is speci\214ed.)144 454.2 Q72 470.4 Q F2(lo)2.5 E(g\214le)-.1 E F1(Send deb)31.74 E(ugging output to the indicated)-.2 E F2(lo)2.5 E(g\214le)-.1 E F1(instead of stdout.)2.5 E72 486.6 Q F2 (le)A(vel)-.15 E F1(Set deb)42.63 E(ugging le)-.2 E -.15(ve)-.25 G(l.) -.15 E72 502.8 Q F2(addr)2.5 E F1 .628(The en)41.64 F -.15(ve)-.4 G -.628(lope sender address is set to).15 F F2(addr)3.128 E F1 5.628(.T)C -.627(his address may also be used in the From:)-5.628 F .152 +.15 E72 502.8 Q F2(addr)2.5 E F1 .627(The en)41.64 F -.15(ve)-.4 G +.627(lope sender address is set to).15 F F2(addr)3.127 E F1 5.627(.T)C +.628(his address may also be used in the From:)-5.627 F .153 (header if that header is missing during initial submission.)144 514.8 R -.153(The en)5.152 F -.15(ve)-.4 G .153(lope sender address is).15 F +.152(The en)5.152 F -.15(ve)-.4 G .152(lope sender address is).15 F 1.263(used as the recipient for deli)144 526.8 R -.15(ve)-.25 G 1.263 (ry status noti\214cations and may also appear in a Return-).15 F -.15 (Pa)144 538.8 S(th: header).15 E(.)-.55 E72 555 Q F2(name)2.5 E F1 (Sets the full name of this user to)36.64 E F2(name)2.5 E F1(.)A 56.64 (\255G When)72 571.2 R 1.176 -(accepting messages via the command line, indicate that the)3.676 F -3.676(ya)-.15 G 1.177(re for relay \(g)-3.676 F(ate-)-.05 E -.1(wa)144 -583.2 S 2.216(y\) submission.).1 F 2.216 -(sendmail may complain about syntactically in)7.216 F -.25(va)-.4 G -2.215(lid messages, e.g.,).25 F .037(unquali\214ed host names, rather t\ -han \214xing them when this \215ag is set.)144 595.2 R .038 -(sendmail will not do)5.038 F(an)144 607.2 Q 2.5(yc)-.15 G +(accepting messages via the command line, indicate that the)3.677 F +3.676(ya)-.15 G 1.176(re for relay \(g)-3.676 F(ate-)-.05 E -.1(wa)144 +583.2 S 2.215(y\) submission.).1 F 2.216 +(sendmail may complain about syntactically in)7.215 F -.25(va)-.4 G +2.216(lid messages, e.g.,).25 F .037(unquali\214ed host names, rather t\ +han \214xing them when this \215ag is set.)144 595.2 R .037 +(sendmail will not do)5.037 F(an)144 607.2 Q 2.5(yc)-.15 G (anonicalization in this mode.)-2.5 E72 623.4 Q F2(cnt)2.5 E F1 -.726(Sets the \231hop count\232 to)46.64 F F2(cnt)3.226 E F1 5.725(.T)C -.725(his represents the number of times this message has been)-5.725 F +.725(Sets the \231hop count\232 to)46.64 F F2(cnt)3.225 E F1 5.725(.T)C +.726(his represents the number of times this message has been)-5.725 F .02(processed by)144 635.4 R F2(sendmail)2.52 E F1 .02(\(to the e)2.52 F .02(xtent that it is supported by the underlying netw)-.15 F(orks\).)-.1 E F2(Cnt)5.02 E F1 1.521(is incremented during processing, and if it re\ -aches MAXHOP \(currently 25\))144 647.4 R F2(sendmail)4.02 E F1(thro)144 -659.4 Q(ws a)-.25 E -.1(wa)-.15 G 2.5(yt).1 G(he message with an error) --2.5 E(.)-.55 E .32 LW 76 680.4 72 680.4 DL 80 680.4 76 680.4 DL 84 -680.4 80 680.4 DL 88 680.4 84 680.4 DL 92 680.4 88 680.4 DL 96 680.4 92 -680.4 DL 100 680.4 96 680.4 DL 104 680.4 100 680.4 DL 108 680.4 104 -680.4 DL 112 680.4 108 680.4 DL 116 680.4 112 680.4 DL 120 680.4 116 -680.4 DL 124 680.4 120 680.4 DL 128 680.4 124 680.4 DL 132 680.4 128 -680.4 DL 136 680.4 132 680.4 DL 140 680.4 136 680.4 DL 144 680.4 140 -680.4 DL 148 680.4 144 680.4 DL 152 680.4 148 680.4 DL 156 680.4 152 -680.4 DL 160 680.4 156 680.4 DL 164 680.4 160 680.4 DL 168 680.4 164 -680.4 DL 172 680.4 168 680.4 DL 176 680.4 172 680.4 DL 180 680.4 176 -680.4 DL 184 680.4 180 680.4 DL 188 680.4 184 680.4 DL 192 680.4 188 -680.4 DL 196 680.4 192 680.4 DL 200 680.4 196 680.4 DL 204 680.4 200 -680.4 DL 208 680.4 204 680.4 DL 212 680.4 208 680.4 DL 216 680.4 212 -680.4 DL/F4 8/Times-Roman@0 SF(\207Deprecated.)93.6 692.4 Q F3 -(Sendmail Installation and Operation Guide)72 756 Q(SMM:08-101)190.86 E +aches MAXHOP \(currently 25\))144 647.4 R F2(sendmail)4.021 E F1(thro) +144 659.4 Q(ws a)-.25 E -.1(wa)-.15 G 2.5(yt).1 G +(he message with an error)-2.5 E(.)-.55 E .32 LW 76 680.4 72 680.4 DL 80 +680.4 76 680.4 DL 84 680.4 80 680.4 DL 88 680.4 84 680.4 DL 92 680.4 88 +680.4 DL 96 680.4 92 680.4 DL 100 680.4 96 680.4 DL 104 680.4 100 680.4 +DL 108 680.4 104 680.4 DL 112 680.4 108 680.4 DL 116 680.4 112 680.4 DL +120 680.4 116 680.4 DL 124 680.4 120 680.4 DL 128 680.4 124 680.4 DL 132 +680.4 128 680.4 DL 136 680.4 132 680.4 DL 140 680.4 136 680.4 DL 144 +680.4 140 680.4 DL 148 680.4 144 680.4 DL 152 680.4 148 680.4 DL 156 +680.4 152 680.4 DL 160 680.4 156 680.4 DL 164 680.4 160 680.4 DL 168 +680.4 164 680.4 DL 172 680.4 168 680.4 DL 176 680.4 172 680.4 DL 180 +680.4 176 680.4 DL 184 680.4 180 680.4 DL 188 680.4 184 680.4 DL 192 +680.4 188 680.4 DL 196 680.4 192 680.4 DL 200 680.4 196 680.4 DL 204 +680.4 200 680.4 DL 208 680.4 204 680.4 DL 212 680.4 208 680.4 DL 216 +680.4 212 680.4 DL/F4 8/Times-Roman@0 SF(\207Deprecated.)93.6 692.4 Q F3 +(Sendmail Installation and Operation Guide)72 756 Q(SMM:08-103)190.86 E 0 Cg EP -%%Page: 102 98 +%%Page: 104 100 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF 188.36(SMM:08-102 Sendmail)72 60 R +/F0 10/Times-Bold@0 SF 188.36(SMM:08-104 Sendmail)72 60 R (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF72 -96 Q/F2 10/Times-Italic@0 SF(ta)2.5 E(g)-.1 E F1 1.482 -(Sets the identi\214er used for syslog.)45.07 F 1.483 +96 Q/F2 10/Times-Italic@0 SF(ta)2.5 E(g)-.1 E F1 1.483 +(Sets the identi\214er used for syslog.)45.07 F 1.482 (Note that this identi\214er is set as early as possible.)6.483 F(Ho)144 -108 Q(we)-.25 E -.15(ve)-.25 G -.4(r,).15 G F2(sendmail)2.916 E F1 .015 -(may be used if problems arise before the command line ar)2.516 F .015 +108 Q(we)-.25 E -.15(ve)-.25 G -.4(r,).15 G F2(sendmail)2.915 E F1 .015 +(may be used if problems arise before the command line ar)2.515 F .016 (guments are)-.18 F(processed.)144 120 Q 58.86(\255n Don')72 136.2 R 2.5 (td)-.18 G 2.5(oa)-2.5 G(liasing or forw)-2.5 E(arding.)-.1 E72 -152.4 Q F2(noti\214cations)2.5 E F1 -.8(Ta)7.19 G 3.127(ga).8 G .627 -(ll addresses being sent as w)-3.127 F .628(anting the indicated)-.1 F -F2(noti\214cations)3.128 E F1 3.128(,w)C .628(hich consists of the) --3.128 F -.1(wo)144 164.4 S .474 +152.4 Q F2(noti\214cations)2.5 E F1 -.8(Ta)7.19 G 3.128(ga).8 G .628 +(ll addresses being sent as w)-3.128 F .628(anting the indicated)-.1 F +F2(noti\214cations)3.128 E F1 3.127(,w)C .627(hich consists of the) +-3.127 F -.1(wo)144 164.4 S .474 (rd \231NEVER\232 or a comma-separated list of \231SUCCESS\232, \231F).1 F .474(AILURE\232, and \231DELA)-.74 F<599a>-1.05 E .86 (for successful deli)144 176.4 R -.15(ve)-.25 G(ry).15 E 3.36(,f)-.65 G @@ -9163,67 +9191,67 @@ E(Y\232.)-1.05 E72 204.6 Q F2(addr)2.5 E F1(An obsolete form of) 41.64 E F02.5 E F1(.)A72 220.8 Q F2 1.666(xv)C(alue)-1.666 E F1(Set option)33.594 E F2(x)2.5 E F1(to the speci\214ed)2.5 E F2(value) 2.5 E F1 5(.T)C(hese options are described in Section 5.6.)-5 E72 -237 Q F2(option)A F0(=)A F2(value)A F1(Set)6.22 E F2(option)5.174 E F1 -2.674(to the speci\214ed)5.174 F F2(value)5.174 E F1 2.674 -(\(for long form option names\).)5.174 F 2.673(These options are)7.674 F +237 Q F2(option)A F0(=)A F2(value)A F1(Set)6.22 E F2(option)5.173 E F1 +2.674(to the speci\214ed)5.173 F F2(value)5.174 E F1 2.674 +(\(for long form option names\).)5.174 F 2.674(These options are)7.674 F (described in Section 5.6.)144 249 Q72 265.2 Q F2 1.666(xv)C(alue) -1.666 E F1(Set macro)29.704 E F2(x)2.5 E F1(to the speci\214ed)2.5 E F2 -(value)2.5 E F1(.)A72 281.4 Q F2(pr)A(otocol)-.45 E F1 .4 +(value)2.5 E F1(.)A72 281.4 Q F2(pr)A(otocol)-.45 E F1 .401 (Set the sending protocol.)27.92 F .401 -(Programs are encouraged to set this.)5.4 F .401 -(The protocol \214eld can be)5.401 F .115(in the form)144 293.4 R F2(pr) -2.615 E(otocol)-.45 E F0(:)A F2(host)A F1 .114 -(to set both the sending protocol and sending host.)2.615 F -.15(Fo) -5.114 G 2.614(re).15 G(xample,)-2.764 E 2.147(\231\255pUUCP:uunet\232 s\ +(Programs are encouraged to set this.)5.401 F .4 +(The protocol \214eld can be)5.401 F .114(in the form)144 293.4 R F2(pr) +2.614 E(otocol)-.45 E F0(:)A F2(host)A F1 .114 +(to set both the sending protocol and sending host.)2.614 F -.15(Fo) +5.115 G 2.615(re).15 G(xample,)-2.765 E 2.147(\231\255pUUCP:uunet\232 s\ ets the sending protocol to UUCP and the sending host to uunet.)144 -305.4 R .974(\(Some e)144 317.4 R .974 +305.4 R .973(\(Some e)144 317.4 R .974 (xisting programs use \255oM to set the r and s macros; this is equi) --.15 F -.25(va)-.25 G .973(lent to using).25 F(\255p.\))144 329.4 Q -72 345.6 Q F2(time)A F1 -.35(Tr)44.14 G 2.775(yt).35 G 2.775(op) --2.775 G .275(rocess the queued up mail.)-2.775 F .276 -(If the time is gi)5.275 F -.15(ve)-.25 G .276(n, a).15 F F2(sendmail) -2.776 E F1 .276(will start one or more)2.776 F .011 +-.15 F -.25(va)-.25 G .974(lent to using).25 F(\255p.\))144 329.4 Q +72 345.6 Q F2(time)A F1 -.35(Tr)44.14 G 2.776(yt).35 G 2.776(op) +-2.776 G .276(rocess the queued up mail.)-2.776 F .276 +(If the time is gi)5.276 F -.15(ve)-.25 G .275(n, a).15 F F2(sendmail) +2.775 E F1 .275(will start one or more)2.775 F .011 (processes to run through the queue\(s\) at the speci\214ed time interv) -144 357.6 R .01(al to deli)-.25 F -.15(ve)-.25 G 2.51(rq).15 G .01 -(ueued mail;)-2.51 F .905(otherwise, it only runs once.)144 369.6 R .906 -(Each of these processes acts on a w)5.906 F 3.406(orkgroup. These)-.1 F -(pro-)3.406 E .96(cesses are also kno)144 381.6 R .959(wn as w)-.25 F -.959(orkgroup processes or WGP')-.1 F 3.459(sf)-.55 G .959(or short.) --3.459 F .959(Each w)5.959 F .959(orkgroup is)-.1 F .522 +144 357.6 R .011(al to deli)-.25 F -.15(ve)-.25 G 2.511(rq).15 G .011 +(ueued mail;)-2.511 F .906(otherwise, it only runs once.)144 369.6 R +.906(Each of these processes acts on a w)5.906 F 3.405(orkgroup. These) +-.1 F(pro-)3.405 E .959(cesses are also kno)144 381.6 R .959(wn as w) +-.25 F .959(orkgroup processes or WGP')-.1 F 3.459(sf)-.55 G .959 +(or short.)-3.459 F .96(Each w)5.96 F .96(orkgroup is)-.1 F .523 (responsible for controlling the processing of one or more queues; w)144 -393.6 R .523(orkgroups help man-)-.1 F 1.268 +393.6 R .522(orkgroups help man-)-.1 F 1.268 (age the use of system resources by sendmail.)144 405.6 R 1.268(Each w) -6.268 F 1.268(orkgroup may ha)-.1 F 1.568 -.15(ve o)-.2 H 1.267 +6.268 F 1.268(orkgroup may ha)-.1 F 1.568 -.15(ve o)-.2 H 1.268 (ne or more).15 F .357 (children concurrently processing queues depending on the setting of)144 -417.6 R F2(MaxQueueChildr)2.857 E(en)-.37 E F1(.)A(\255qp)72 433.8 Q F2 -(time)A F1 1.175(Similar to \255q with a time ar)39.14 F 1.175 -(gument, e)-.18 F 1.174 +417.6 R F2(MaxQueueChildr)2.856 E(en)-.37 E F1(.)A(\255qp)72 433.8 Q F2 +(time)A F1 1.174(Similar to \255q with a time ar)39.14 F 1.175 +(gument, e)-.18 F 1.175 (xcept that instead of periodically starting WGP')-.15 F(s)-.55 E .7 (sendmail starts persistent WGP')144 445.8 R 3.2(st)-.55 G .7 (hat alternate between processing queues and sleeping.)-3.2 F 1.123 (The sleep time is speci\214ed by the time ar)144 457.8 R 1.123 -(gument; it def)-.18 F 1.123(aults to 1 second, e)-.1 F 1.123 -(xcept that a)-.15 F 1.293(WGP al)144 469.8 R -.1(wa)-.1 G 1.293 +(gument; it def)-.18 F 1.123(aults to 1 second, e)-.1 F 1.124 +(xcept that a)-.15 F 1.294(WGP al)144 469.8 R -.1(wa)-.1 G 1.293 (ys sleeps at least 5 seconds if their queues were empty in the pre).1 F -1.294(vious run.)-.25 F .139 +1.293(vious run.)-.25 F .138 (Persistent processes are managed by a queue control process \(QCP\).) -144 481.8 R .138(The QCP is the par)5.138 F(-)-.2 E .179 +144 481.8 R .139(The QCP is the par)5.139 F(-)-.2 E .18 (ent process of the WGP')144 493.8 R 2.679(s. T)-.55 F .179 (ypically the QCP will be the sendmail daemon \(when started)-.8 F .424 (with \255bd or \255bD\) or a special process \(named Queue control\) \ -\(when started without \255bd)144 505.8 R .719(or \255bD\).)144 517.8 R -.719(If a persistent WGP ceases to be acti)5.719 F 1.019 -.15(ve f)-.25 -H .72(or some reason another WGP will be).15 F .862 +\(when started without \255bd)144 505.8 R .72(or \255bD\).)144 517.8 R +.72(If a persistent WGP ceases to be acti)5.72 F 1.019 -.15(ve f)-.25 H +.719(or some reason another WGP will be).15 F .862 (started by the QCP for the same w)144 529.8 R .862 -(orkgroup in most cases. When a persistent WGP has)-.1 F 1.007 -(core dumped, the deb)144 541.8 R 1.007(ug \215ag)-.2 F F2(no_per)3.507 -E(sistent_r)-.1 E(estart)-.37 E F1 1.008 -(is set or the speci\214c persistent WGP)3.507 F .677 +(orkgroup in most cases. When a persistent WGP has)-.1 F 1.008 +(core dumped, the deb)144 541.8 R 1.008(ug \215ag)-.2 F F2(no_per)3.508 +E(sistent_r)-.1 E(estart)-.37 E F1 1.007 +(is set or the speci\214c persistent WGP)3.508 F .676 (has been restarted too man)144 553.8 R 3.176(yt)-.15 G .676 -(imes already then the WGP will not be started ag)-3.176 F .676 -(ain and a)-.05 F .875(message will be logged to this ef)144 565.8 R -3.375(fect. T)-.25 F 3.375(os)-.8 G .876 +(imes already then the WGP will not be started ag)-3.176 F .677 +(ain and a)-.05 F .876(message will be logged to this ef)144 565.8 R +3.375(fect. T)-.25 F 3.375(os)-.8 G .875 (top \(SIGTERM\) or restart \(SIGHUP\) persis-)-3.375 F .116(tent WGP') 144 577.8 R 2.616(st)-.55 G .116 (he appropriate signal should be sent to the QCP)-2.616 F 2.616(.T)-1.11 @@ -9231,86 +9259,86 @@ G .116(he QCP will propag)-2.616 F .116(ate the)-.05 F (signal to all of the WGP')144 589.8 Q 2.5(sa)-.55 G (nd if appropriate restart the persistent WGP')-2.5 E(s.)-.55 E72 606 Q F2(Gname)A F1(Run the jobs in the queue group)32.48 E F2(name)2.5 -E F1(once.)2.5 E(\255q[!])72 622.2 Q F2(Xstring)A F1 .312 +E F1(once.)2.5 E(\255q[!])72 622.2 Q F2(Xstring)A F1 .313 (Run the queue once, limiting the jobs to those matching)21.92 F F2 -(Xstring)2.813 E F1 5.313(.T)C .313(he k)-5.313 F .613 -.15(ey l)-.1 H -(etter).15 E F2(X)2.813 E F1 .313(can be)2.813 F F0(I)144 634.2 Q F1 -1.347(to limit based on queue identi\214er)3.848 F(,)-.4 E F0(R)3.847 E +(Xstring)2.812 E F1 5.312(.T)C .312(he k)-5.312 F .612 -.15(ey l)-.1 H +(etter).15 E F2(X)2.812 E F1 .312(can be)2.812 F F0(I)144 634.2 Q F1 +1.347(to limit based on queue identi\214er)3.847 F(,)-.4 E F0(R)3.847 E F1 1.347(to limit based on recipient,)3.847 F F0(S)3.847 E F1 1.347 -(to limit based on)3.847 F(sender)144 646.2 Q 4.757(,o)-.4 G(r)-4.757 E -F0(Q)4.757 E F1 2.258 -(to limit based on quarantine reason for quarantined jobs.)4.757 F 4.758 -(Ap)7.258 G(articular)-4.758 E .062 +(to limit based on)3.847 F(sender)144 646.2 Q 4.758(,o)-.4 G(r)-4.758 E +F0(Q)4.758 E F1 2.258 +(to limit based on quarantine reason for quarantined jobs.)4.758 F 4.757 +(Ap)7.257 G(articular)-4.757 E .062 (queued job is accepted if one of the corresponding attrib)144 658.2 R -.062(utes contains the indicated)-.2 F F2(string)2.562 E F1(.)A .778 +.063(utes contains the indicated)-.2 F F2(string)2.563 E F1(.)A .779 (The optional ! character ne)144 670.2 R -.05(ga)-.15 G .778 -(tes the condition tested.).05 F(Multiple)5.778 E F2(\255qX)3.279 E F1 -.779(\215ags are permitted,)3.279 F .622(with items with the same k)144 +(tes the condition tested.).05 F(Multiple)5.778 E F2(\255qX)3.278 E F1 +.778(\215ags are permitted,)3.278 F .622(with items with the same k)144 682.2 R .922 -.15(ey l)-.1 H .622(etter \231or'ed\232 together).15 F -3.122(,a)-.4 G .622(nd items with dif)-3.122 F .622(ferent k)-.25 F .922 +3.122(,a)-.4 G .622(nd items with dif)-3.122 F .623(ferent k)-.25 F .923 -.15(ey l)-.1 H(etters).15 E(\231and'ed\232 together)144 694.2 Q(.)-.55 -E 23.88(\255Q[reason] Quarantine)72 710.4 R 4.689(an)4.689 G 2.189 +E 23.88(\255Q[reason] Quarantine)72 710.4 R 4.689(an)4.69 G 2.189 (ormal queue items with the gi)-4.689 F -.15(ve)-.25 G 4.689(nr).15 G 2.189(eason or unquarantine quarantined)-4.689 F 1.797 (queue items if no reason is gi)144 722.4 R -.15(ve)-.25 G 4.297 (n. This).15 F 1.797(should only be used with some sort of item)4.297 F 0 Cg EP -%%Page: 103 99 +%%Page: 105 101 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-103)190.86 E/F1 10/Times-Roman@0 SF(matching using)144 96 Q F0 +(SMM:08-105)190.86 E/F1 10/Times-Roman@0 SF(matching using)144 96 Q F0 (\255q[!])2.5 E/F2 10/Times-Italic@0 SF(Xstring)A F1(as described abo) 2.5 E -.15(ve)-.15 G(.).15 E(\255R ret)72 112.2 Q 1.687 (What information you w)46.64 F 1.687 (ant returned if the message bounces;)-.1 F F2 -.37(re)4.187 G(t).37 E -F1 1.687(can be \231HDRS\232 for)4.187 F .878 -(headers only or \231FULL\232 for headers plus body)144 124.2 R 5.878 -(.T)-.65 G .877(his is a request only; the other end is)-5.878 F 1.308 -(not required to honor the parameter)144 136.2 R 6.308(.I)-.55 G 3.808 -<6699>-6.308 G 1.309(HDRS\232 is speci\214ed local bounces also return) +F1 1.687(can be \231HDRS\232 for)4.187 F .877 +(headers only or \231FULL\232 for headers plus body)144 124.2 R 5.877 +(.T)-.65 G .878(his is a request only; the other end is)-5.877 F 1.309 +(not required to honor the parameter)144 136.2 R 6.309(.I)-.55 G 3.808 +<6699>-6.309 G 1.308(HDRS\232 is speci\214ed local bounces also return) -3.808 F(only the headers.)144 148.2 Q 61.08(\255t Read)72 164.4 R .752 (the header for \231T)3.252 F .752 (o:\232, \231Cc:\232, and \231Bcc:\232 lines, and send to e)-.8 F -.15 -(ve)-.25 G .752(ryone listed in those).15 F 2.539(lists. The)144 176.4 R -.039(\231Bcc:\232 line will be deleted before sending.)2.539 F(An)5.039 -E 2.539(ya)-.15 G .04(ddresses in the ar)-2.539 F .04(gument v)-.18 F +(ve)-.25 G .752(ryone listed in those).15 F 2.54(lists. The)144 176.4 R +.039(\231Bcc:\232 line will be deleted before sending.)2.54 F(An)5.039 E +2.539(ya)-.15 G .039(ddresses in the ar)-2.539 F .039(gument v)-.18 F (ec-)-.15 E(tor will be deleted from the send list.)144 188.4 Q -(\255V en)72 204.6 Q 32.32(vid The)-.4 F(indicated)3.18 E F2(en)3.18 E -(vid)-.4 E F1 .68(is passed with the en)3.18 F -.15(ve)-.4 G .679 +(\255V en)72 204.6 Q 32.32(vid The)-.4 F(indicated)3.179 E F2(en)3.179 E +(vid)-.4 E F1 .679(is passed with the en)3.179 F -.15(ve)-.4 G .68 (lope of the message and returned if the mes-).15 F(sage bounces.)144 -216.6 Q72 232.8 Q F2(lo)2.5 E(g\214le)-.1 E F1 .724(Log all traf) -31.74 F .724(\214c in and out of)-.25 F F2(sendmail)3.225 E F1 .725 -(in the indicated)3.225 F F2(lo)3.225 E(g\214le)-.1 E F1 .725(for deb) -3.225 F .725(ugging mailer prob-)-.2 F 2.5(lems. This)144 244.8 R +216.6 Q72 232.8 Q F2(lo)2.5 E(g\214le)-.1 E F1 .725(Log all traf) +31.74 F .725(\214c in and out of)-.25 F F2(sendmail)3.225 E F1 .725 +(in the indicated)3.225 F F2(lo)3.224 E(g\214le)-.1 E F1 .724(for deb) +3.224 F .724(ugging mailer prob-)-.2 F 2.5(lems. This)144 244.8 R (produces a lot of data v)2.5 E -(ery quickly and should be used sparingly)-.15 E(.)-.65 E .638 +(ery quickly and should be used sparingly)-.15 E(.)-.65 E .637 (There are a number of options that may be speci\214ed as primiti)97 261 -R .937 -.15(ve \215)-.25 H 3.137(ags. These).15 F .637 -(are the e, i, m, and v)3.137 F 3.784(options. Also,)72 273 R 1.284 -(the f option may be speci\214ed as the)3.784 F F03.784 E F1 3.785 -(\215ag. The)3.785 F 1.285 -(DSN related options \231\255N\232, \231\255R\232, and)3.785 F +R .938 -.15(ve \215)-.25 H 3.138(ags. These).15 F .638 +(are the e, i, m, and v)3.138 F 3.785(options. Also,)72 273 R 1.285 +(the f option may be speci\214ed as the)3.785 F F03.784 E F1 3.784 +(\215ag. The)3.784 F 1.284 +(DSN related options \231\255N\232, \231\255R\232, and)3.784 F <99ad569a206861>72 285 Q .3 -.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G (ects on).25 E F2(sendmail)2.5 E F1(running as daemon.)2.5 E 0 Cg EP -%%Page: 104 100 +%%Page: 106 102 %%BeginPageSetup BP %%EndPageSetup /F0 12/Times-Bold@0 SF 3(APPENDIX B)250.002 98.4 R -.12(QU)220.29 141.6 -S(EUE FILE FORMA).12 E(TS)-1.14 E/F1 10/Times-Roman@0 SF .102 +S(EUE FILE FORMA).12 E(TS)-1.14 E/F1 10/Times-Roman@0 SF .101 (This appendix describes the format of the queue \214les.)97 201 R .102 -(These \214les li)5.102 F .402 -.15(ve i)-.25 H 2.602(na).15 G .101 -(queue directory)-.001 F 5.101(.T)-.65 G .101(he indi-)-5.101 F .331 +(These \214les li)5.102 F .402 -.15(ve i)-.25 H 2.602(naq).15 G .102 +(ueue directory)-2.602 F 5.102(.T)-.65 G .102(he indi-)-5.102 F .331 (vidual qf, hf, Qf, df, and xf \214les may be stored in separate)72 213 R/F2 10/Times-Italic@0 SF(qf/)2.831 E F1(,)A F2(df/)2.831 E F1 2.831(,a) C(nd)-2.831 E F2(xf/)2.831 E F1 .331(subdirectories if the)2.831 F 2.831 -(ya)-.15 G .331(re present)-2.831 F(in the queue directory)72 225 Q(.) --.65 E .924(All queue \214les ha)97 241.2 R 1.224 -.15(ve t)-.2 H .924 -(he name).15 F F2(ttYMDhmsNNppppp)3.424 E F1(where)3.424 E F2 -(YMDhmsNNppppp)3.424 E F1 .923(is the)3.423 F F2(id)3.423 E F1 .923 -(for this mes-)3.423 F(sage and the)72 253.2 Q F2(tt)2.5 E F1 +(ya)-.15 G .33(re present)-2.831 F(in the queue directory)72 225 Q(.) +-.65 E .923(All queue \214les ha)97 241.2 R 1.223 -.15(ve t)-.2 H .923 +(he name).15 F F2(ttYMDhmsNNppppp)3.423 E F1(where)3.424 E F2 +(YMDhmsNNppppp)3.424 E F1 .924(is the)3.424 F F2(id)3.424 E F1 .924 +(for this mes-)3.424 F(sage and the)72 253.2 Q F2(tt)2.5 E F1 (is a type.)2.5 E(The indi)5 E(vidual letters in the)-.25 E F2(id)2.5 E F1(are:)2.5 E 28.78(YE)72 269.4 S(ncoded year)-28.78 E 27.11(ME)72 285.6 S(ncoded month)-27.11 E 28.78(DE)72 301.8 S(ncoded day)-28.78 E 31(hE)72 @@ -9320,65 +9348,66 @@ E -.15(ve)-.4 G(lope number).15 E 8.5(ppppp At)72 382.8 R(least \214v) 2.5 E 2.5(ed)-.15 G(ecimal digits of the process ID)-2.5 E .477 (All \214les with the same id collecti)97 399 R -.15(ve)-.25 G .477 (ly de\214ne one message.).15 F .477(Due to the use of memory-b)5.477 F -(uf)-.2 E .477(fered \214les,)-.25 F(some of these \214les may ne)72 411 +(uf)-.2 E .476(fered \214les,)-.25 F(some of these \214les may ne)72 411 Q -.15(ve)-.25 G 2.5(ra).15 G(ppear on disk.)-2.5 E(The types are:)97 427.2 Q 25.17(qf The)72 443.4 R(queue control \214le.)2.5 E (This \214le contains the information necessary to process the job)5 E (.)-.4 E 25.17(hf The)72 459.6 R(same as a queue control \214le, b)2.5 E (ut for a quarantined queue job)-.2 E(.)-.4 E 25.17(df The)72 475.8 R -.452(data \214le.)2.952 F .452(The message body \(e)5.452 F .452 -(xcluding the header\) is k)-.15 F .452(ept in this \214le.)-.1 F .451 -(Sometimes the df \214le)5.451 F .183(is not stored in the same directo\ +.451(data \214le.)2.951 F .452(The message body \(e)5.451 F .452 +(xcluding the header\) is k)-.15 F .452(ept in this \214le.)-.1 F .452 +(Sometimes the df \214le)5.452 F .183(is not stored in the same directo\ ry as the qf \214le; in this case, the qf \214le contains a `d' record \ which)108 487.8 R (names the queue directory that contains the df \214le.)108 499.8 Q -27.39(tf A)72 516 R .046(temporary \214le.)2.546 F .046 -(This is an image of the)5.046 F/F3 10/Times-Bold@0 SF(qf)2.546 E F1 -.046(\214le when it is being reb)2.546 F 2.545(uilt. It)-.2 F .045 -(should be renamed to a)2.545 F F3(qf)108 528 Q F1(\214le v)2.5 E -(ery quickly)-.15 E(.)-.65 E 25.17(xf A)72 544.2 R .566 -(transcript \214le, e)3.066 F .567 -(xisting during the life of a session sho)-.15 F .567(wing e)-.25 F -.15 -(ve)-.25 G .567(rything that happens during that).15 F 3.122 +27.39(tf A)72 516 R .045(temporary \214le.)2.545 F .045 +(This is an image of the)5.045 F/F3 10/Times-Bold@0 SF(qf)2.546 E F1 +.046(\214le when it is being reb)2.546 F 2.546(uilt. It)-.2 F .046 +(should be renamed to a)2.546 F F3(qf)108 528 Q F1(\214le v)2.5 E +(ery quickly)-.15 E(.)-.65 E 25.17(xf A)72 544.2 R .567 +(transcript \214le, e)3.067 F .567 +(xisting during the life of a session sho)-.15 F .566(wing e)-.25 F -.15 +(ve)-.25 G .566(rything that happens during that).15 F 3.121 (session. Sometimes)108 556.2 R .622(the xf \214le must be generated be\ -fore a queue group has been selected; in this)3.122 F +fore a queue group has been selected; in this)3.121 F (case, the xf \214le will be stored in a directory of the def)108 568.2 -Q(ault queue group.)-.1 E 22.95(Qf A)72 584.4 R -.74(``)3.278 G(lost') -.74 E 3.278('q)-.74 G .778(ueue control \214le.)-3.278 F F2(sendmail) +Q(ault queue group.)-.1 E 22.95(Qf A)72 584.4 R -.74(``)3.279 G(lost') +.74 E 3.279('q)-.74 G .779(ueue control \214le.)-3.279 F F2(sendmail) 5.778 E F1 .778(renames a)3.278 F F3(qf)3.278 E F1 .778(\214le to)3.278 -F F3(Qf)3.278 E F1 .779(if there is a se)3.278 F -.15(ve)-.25 G .779 +F F3(Qf)3.278 E F1 .778(if there is a se)3.278 F -.15(ve)-.25 G .778 (re \(con\214guration\)).15 F .256(problem that cannot be solv)108 596.4 R .256(ed without human interv)-.15 F 2.756(ention. Search)-.15 F .256 -(the log\214le for the queue \214le id)2.756 F .052 +(the log\214le for the queue \214le id)2.756 F .053 (to \214gure out what happened.)108 608.4 R .052(After you resolv)5.052 -F .052(ed the problem, you can rename the)-.15 F F3(Qf)2.552 E F1 .053 -(\214le to)2.553 F F3(qf)2.553 E F1(and)2.553 E(send it ag)108 620.4 Q -(ain.)-.05 E .741 +F .052(ed the problem, you can rename the)-.15 F F3(Qf)2.552 E F1 .052 +(\214le to)2.552 F F3(qf)2.552 E F1(and)2.552 E(send it ag)108 620.4 Q +(ain.)-.05 E .74 (The queue control \214le is structured as a series of lines each be)97 -636.6 R .74(ginning with a code letter)-.15 F 5.74(.T)-.55 G .74 -(he lines)-5.74 F(are as follo)72 648.6 Q(ws:)-.25 E 28.78(VT)72 664.8 S -.819(he v)-28.78 F .819 -(ersion number of the queue \214le format, used to allo)-.15 F 3.32(wn) --.25 G -.25(ew)-3.32 G F2(sendmail)3.57 E F1 .82(binaries to read queue) -3.32 F .004(\214les created by older v)108 676.8 R 2.504(ersions. Def) --.15 F .004(aults to v)-.1 F .004(ersion zero.)-.15 F .004 +636.6 R .741(ginning with a code letter)-.15 F 5.741(.T)-.55 G .741 +(he lines)-5.741 F(are as follo)72 648.6 Q(ws:)-.25 E 28.78(VT)72 664.8 +S .82(he v)-28.78 F .82 +(ersion number of the queue \214le format, used to allo)-.15 F 3.319(wn) +-.25 G -.25(ew)-3.319 G F2(sendmail)3.569 E F1 .819 +(binaries to read queue)3.319 F .003(\214les created by older v)108 +676.8 R 2.504(ersions. Def)-.15 F .004(aults to v)-.1 F .004 +(ersion zero.)-.15 F .004 (Must be the \214rst line of the \214le if present.)5.004 F -.15(Fo)108 688.8 S 2.5(r8).15 G(.12 the v)-2.5 E(ersion number is 6.)-.15 E 28.78 (AT)72 705 S 1.175(he information gi)-28.78 F -.15(ve)-.25 G 3.675(nb) .15 G 3.675(yt)-3.675 G 1.175(he A)-3.675 F 1.175 (UTH= parameter of the \231MAIL FR)-.55 F 1.175 (OM:\232 command or $f@$j if)-.4 F(sendmail has been called directly)108 -717 Q(.)-.65 E F3 188.36(SMM:08-104 Sendmail)72 756 R +717 Q(.)-.65 E F3 188.36(SMM:08-106 Sendmail)72 756 R (Installation and Operation Guide)2.5 E 0 Cg EP -%%Page: 105 101 +%%Page: 107 103 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Bold@0 SF(Sendmail Installation and Operation Guide)72 60 Q -(SMM:08-105)190.86 E/F1 10/Times-Roman@0 SF 28.78(HA)72 96 S .33 -(header de\214nition.)-25.95 F .33(There may be an)5.33 F 2.829(yn)-.15 -G .329(umber of these lines.)-2.829 F .329(The order is important: the) -5.329 F 2.829(yr)-.15 G(epre-)-2.829 E .046 +(SMM:08-107)190.86 E/F1 10/Times-Roman@0 SF 28.78(HA)72 96 S .329 +(header de\214nition.)-25.951 F .329(There may be an)5.329 F 2.829(yn) +-.15 G .329(umber of these lines.)-2.829 F .33 +(The order is important: the)5.33 F 2.83(yr)-.15 G(epre-)-2.83 E .046 (sent the order in the \214nal message.)108 108 R .046 (These use the same syntax as header de\214nitions in the con\214gu-) 5.046 F(ration \214le.)108 120 Q 29.33(CT)72 136.2 S .575 @@ -9387,56 +9416,56 @@ G .329(umber of these lines.)-2.829 F .329(The order is important: the) (Recipient addresses follo)5.575 F .575(wing this)-.25 F 2.814 (line will be \215agged so that deli)108 148.2 R -.15(ve)-.25 G 2.814 (ries will be run as the).15 F/F2 10/Times-Italic@0 SF(localuser)5.314 E -F1 2.814(\(a user name from the)5.314 F .562(/etc/passwd \214le\);)108 -160.2 R F2(aliasname)3.062 E F1 .561(is the name of the alias that e) -3.062 F .561(xpanded to this address \(used for print-)-.15 F +F1 2.814(\(a user name from the)5.314 F .561(/etc/passwd \214le\);)108 +160.2 R F2(aliasname)3.061 E F1 .561(is the name of the alias that e) +3.061 F .562(xpanded to this address \(used for print-)-.15 F (ing messages\).)108 172.2 Q 31(qT)72 188.4 S (he quarantine reason for quarantined queue items.)-31 E 28.78(QT)72 -204.6 S .797(he `)-28.78 F .797(`original recipient')-.74 F .798 +204.6 S .798(he `)-28.78 F .798(`original recipient')-.74 F .798 (', speci\214ed by the ORCPT= \214eld in an ESMTP transaction.)-.74 F -.798(Used e)5.798 F(xclu-)-.15 E(si)108 216.6 Q -.15(ve)-.25 G +.797(Used e)5.797 F(xclu-)-.15 E(si)108 216.6 Q -.15(ve)-.25 G (ly for Deli).15 E -.15(ve)-.25 G(ry Status Noti\214cations.).15 E (It applies only to the follo)5 E(wing `R' line.)-.25 E 32.67(rT)72 -232.8 S .783(he `)-32.67 F .783(`\214nal recipient')-.74 F 3.282('u)-.74 +232.8 S .782(he `)-32.67 F .782(`\214nal recipient')-.74 F 3.282('u)-.74 G .782(sed for Deli)-3.282 F -.15(ve)-.25 G .782 (ry Status Noti\214cations.).15 F .782(It applies only to the follo) -5.782 F .782(wing `R')-.25 F(line.)108 244.8 Q 29.33(RA)72 261 S .705 +5.782 F .783(wing `R')-.25 F(line.)108 244.8 Q 29.33(RA)72 261 S .705 (recipient address.)-26.125 F .705 (This will normally be completely aliased, b)5.705 F .705 -(ut is actually realiased when the)-.2 F .493(job is processed.)108 273 -R .492(There will be one line for each recipient.)5.493 F -1.11(Ve)5.492 -G .492(rsion 1 qf \214les also include a lead-)1.11 F .689(ing colon-te\ +(ut is actually realiased when the)-.2 F .492(job is processed.)108 273 +R .492(There will be one line for each recipient.)5.492 F -1.11(Ve)5.492 +G .493(rsion 1 qf \214les also include a lead-)1.11 F .689(ing colon-te\ rminated list of \215ags, which can be `S' to return a message on succe\ -ssful \214nal deli)108 285 R(v-)-.25 E(ery)108 297 Q 3.328(,`)-.65 G -.828(F' to return a message on f)-3.328 F .828 +ssful \214nal deli)108 285 R(v-)-.25 E(ery)108 297 Q 3.327(,`)-.65 G +.828(F' to return a message on f)-3.327 F .828 (ailure, `D' to return a message if the message is delayed, `B' to)-.1 F -.94(indicate that the body should be returned, `N' to suppress returnin\ -g the body)108 309 R 3.441(,a)-.65 G .941(nd `P' to declare)-3.441 F +.941(indicate that the body should be returned, `N' to suppress returni\ +ng the body)108 309 R 3.44(,a)-.65 G .94(nd `P' to declare)-3.44 F (this as a `)108 321 Q(`primary')-.74 E 2.5('\()-.74 G (command line or SMTP-session\) address.)-2.5 E 30.44(ST)72 337.2 S (he sender address.)-30.44 E(There may only be one of these lines.)5 E 29.89(TT)72 353.4 S(he job creation time.)-29.89 E (This is used to compute when to time out the job)5 E(.)-.4 E 30.44(PT) -72 369.6 S .114(he current message priority)-30.44 F 5.114(.T)-.65 G -.113(his is used to order the queue.)-5.114 F .113 -(Higher numbers mean lo)5.113 F .113(wer priori-)-.25 F 3.676(ties. The) +72 369.6 S .113(he current message priority)-30.44 F 5.113(.T)-.65 G +.113(his is used to order the queue.)-5.113 F .114 +(Higher numbers mean lo)5.114 F .114(wer priori-)-.25 F 3.677(ties. The) 108 381.6 R 1.176(priority changes as the message sits in the queue.) -3.676 F 1.177(The initial priority depends on the)6.176 F +3.677 F 1.176(The initial priority depends on the)6.176 F (message class and the size of the message.)108 393.6 Q 27.11(MA)72 -409.8 S 2.704(message. This)-24.406 F .204(line is printed by the)2.704 -F F2(mailq)2.704 E F1 .203 +409.8 S 2.703(message. This)-24.407 F .203(line is printed by the)2.703 +F F2(mailq)2.703 E F1 .204 (command, and is generally used to store status infor)2.704 F(-)-.2 E 2.5(mation. It)108 421.8 R(can contain an)2.5 E 2.5(yt)-.15 G -.15(ex) --2.5 G(t.).15 E 30.44(FF)72 438 S .043 +-2.5 G(t.).15 E 30.44(FF)72 438 S .044 (lag bits, represented as one letter per \215ag.)-30.44 F .043 -(De\214ned \215ag bits are)5.043 F F0(r)2.543 E F1 .044 -(indicating that this is a response)2.544 F .143(message and)108 450 R -F0(w)2.643 E F1 .143(indicating that a w)2.643 F .142 +(De\214ned \215ag bits are)5.043 F F0(r)2.543 E F1 .043 +(indicating that this is a response)2.543 F .142(message and)108 450 R +F0(w)2.642 E F1 .142(indicating that a w)2.642 F .143 (arning message has been sent announcing that the mail has been)-.1 F -2.513(delayed. Other)108 462 R .013(\215ag bits are:)2.513 F F0(8)2.513 -E F1 2.513(:t)C .013(he body contains 8bit data,)-2.513 F F0(b)2.513 E -F1 -5.012 2.513(:a B)D .014(cc: header should be remo)-2.513 F -.15(ve) --.15 G(d,).15 E F0(d)2.514 E F1(:)A .552 +2.514(delayed. Other)108 462 R .014(\215ag bits are:)2.514 F F0(8)2.514 +E F1 2.514(:t)C .013(he body contains 8bit data,)-2.514 F F0(b)2.513 E +F1 2.513(:aB)C .013(cc: header should be remo)-2.513 F -.15(ve)-.15 G +(d,).15 E F0(d)2.513 E F1(:)A .551 (the mail has RET parameters \(see RFC 1894\),)108 474 R F0(n)3.052 E F1 3.052(:t)C .552(he body of the message should not be returned)-3.052 F (in case of an error)108 486 Q(,)-.4 E F0(s)2.5 E F1 2.5(:t)C(he en)-2.5 @@ -9448,29 +9477,29 @@ E -.15(ve)-.4 G(lope has been split.).15 E 28.78(NT)72 502.2 S (he df \214le is in a dif)-3.15 F .65(ferent directory than the qf \214\ le, then a `d' record is present, specifying the)-.25 F (directory in which the df \214le resides.)108 546.6 Q 32.67(IT)72 562.8 -S .725(he i-number of the data \214le; this can be used to reco)-32.67 F --.15(ve)-.15 G 3.224(ry).15 G .724 -(our mail queue after a disastrous disk)-3.224 F(crash.)108 574.8 Q 31 +S .724(he i-number of the data \214le; this can be used to reco)-32.67 F +-.15(ve)-.15 G 3.225(ry).15 G .725 +(our mail queue after a disastrous disk)-3.225 F(crash.)108 574.8 Q 31 ($A)72 591 S(macro de\214nition.)-28.5 E(The v)5 E (alues of certain macros are passed through to the queue run phase.)-.25 -E 29.33(BT)72 607.2 S .924(he body type.)-29.33 F .925 -(The remainder of the line is a te)5.924 F .925 -(xt string de\214ning the body type.)-.15 F .925(If this \214eld is) -5.925 F .009(missing, the body type is assumed to be \231unde\214ned\ -\232 and no special processing is attempted.)108 619.2 R(Le)5.008 E -.05 +E 29.33(BT)72 607.2 S .925(he body type.)-29.33 F .925 +(The remainder of the line is a te)5.925 F .925 +(xt string de\214ning the body type.)-.15 F .924(If this \214eld is) +5.924 F .009(missing, the body type is assumed to be \231unde\214ned\ +\232 and no special processing is attempted.)108 619.2 R(Le)5.009 E -.05 (ga)-.15 G(l).05 E -.25(va)108 631.2 S (lues are \2317BIT\232 and \2318BITMIME\232.).25 E 29.89(ZT)72 647.4 S (he original en)-29.89 E -.15(ve)-.4 G (lope id \(from the ESMTP transaction\).).15 E -.15(Fo)5 G 2.5(rD).15 G (eli)-2.5 E -.15(ve)-.25 G 2.5(rS).15 G(tatus Noti\214cations only)-2.5 -E(.)-.65 E 4.072(As an e)97 663.6 R 4.072(xample, the follo)-.15 F 4.073 +E(.)-.65 E 4.073(As an e)97 663.6 R 4.073(xample, the follo)-.15 F 4.072 (wing is a queue \214le sent to \231eric@mammoth.Berk)-.25 F(ele)-.1 E --.65(y.)-.15 G 4.073(EDU\232 and).65 F 0 Cg EP -%%Page: 106 102 +-.65(y.)-.15 G 4.072(EDU\232 and).65 F 0 Cg EP +%%Page: 108 104 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF 188.36(SMM:08-106 Sendmail)72 60 R +/F0 10/Times-Bold@0 SF 188.36(SMM:08-108 Sendmail)72 60 R (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF (\231bostic@ok)72 98 Q(eef)-.1 E(fe.CS.Berk)-.25 E(ele)-.1 E -.65(y.) -.15 G(EDU\232).65 E/F2 7/Times-Roman@0 SF(1)-4 I F1(:)4 I(V4)112 114.2 @@ -9497,7 +9526,7 @@ E -.65(y.)-.15 G(EDU \(5.108/2.7\)).65 E (H??Message-id: <9207170931.AA22757@foo.bar)112 378.2 Q(.baz.de>)-.55 E (H??T)112 390.2 Q(o: sendmail@v)-.8 E(angogh.CS.Berk)-.25 E(ele)-.1 E -.65(y.)-.15 G(EDU).65 E(H??Subject: this is an e)112 402.2 Q -(xample message)-.15 E .657(This sho)72 418.4 R .658(ws the person who \ +(xample message)-.15 E .658(This sho)72 418.4 R .658(ws the person who \ sent the message, the submission time \(in seconds since January 1, 197\ 0\), the)-.25 F(message priority)72 430.4 Q 2.5(,t)-.65 G (he message class, the recipients, and the headers for the message.)-2.5 @@ -9513,49 +9542,48 @@ E .32 LW 76 678.8 72 678.8 DL 80 678.8 76 678.8 DL 84 678.8 80 678.8 DL 678.8 DL 188 678.8 184 678.8 DL 192 678.8 188 678.8 DL 196 678.8 192 678.8 DL 200 678.8 196 678.8 DL 204 678.8 200 678.8 DL 208 678.8 204 678.8 DL 212 678.8 208 678.8 DL 216 678.8 212 678.8 DL/F3 5 -/Times-Roman@0 SF(1)93.6 689.2 Q/F4 8/Times-Roman@0 SF .719(This e)3.2 J -.719(xample is contri)-.12 F -.12(ve)-.2 G 2.719(da).12 G .719 -(nd probably inaccurate for your en)-2.719 F 2.719(vironment. Glance) --.32 F -.12(ove)2.718 G 2.718(ri).12 G 2.718(tt)-2.718 G 2.718(og)-2.718 -G .718(et an idea; nothing can replace)-2.718 F(looking at what your o) +/Times-Roman@0 SF(1)93.6 689.2 Q/F4 8/Times-Roman@0 SF .718(This e)3.2 J +.718(xample is contri)-.12 F -.12(ve)-.2 G 2.718(da).12 G .718 +(nd probably inaccurate for your en)-2.718 F 2.719(vironment. Glance) +-.32 F -.12(ove)2.719 G 2.719(ri).12 G 2.719(tt)-2.719 G 2.719(og)-2.719 +G .719(et an idea; nothing can replace)-2.719 F(looking at what your o) 72 702 Q(wn system generates.)-.2 E 0 Cg EP -%%Page: 107 103 +%%Page: 109 105 %%BeginPageSetup BP %%EndPageSetup /F0 12/Times-Bold@0 SF 3(APPENDIX C)249.672 98.4 R(SUMMAR)198.282 141.6 Q 3(YO)-.42 G 3(FS)-3 G(UPPOR)-3 E 3(TF)-.48 G(ILES)-3 E/F1 10 -/Times-Roman@0 SF 1.52(This is a summary of the support \214les that)97 -201 R/F2 10/Times-Italic@0 SF(sendmail)4.019 E F1 1.519 -(creates or generates.)4.019 F(Man)6.519 E 4.019(yo)-.15 G 4.019(ft) --4.019 G 1.519(hese can be)-4.019 F(changed by editing the sendmail.cf \ -\214le; check there to \214nd the actual pathnames.)72 213 Q -(/usr/sbin/sendmail)72 229.2 Q(The binary of)144 241.2 Q F2(sendmail)2.5 -E F1(.)A(/usr/bin/ne)72 257.4 Q -.1(wa)-.25 G(liases).1 E 3.734(Al)144 -269.4 S 1.235 -(ink to /usr/sbin/sendmail; causes the alias database to be reb)-3.734 F -3.735(uilt. Running)-.2 F 1.235(this pro-)3.735 F +/Times-Roman@0 SF 1.519(This is a summary of the support \214les that)97 +201 R/F2 10/Times-Italic@0 SF(sendmail)4.019 E F1 1.52 +(creates or generates.)4.019 F(Man)6.52 E 4.02(yo)-.15 G 4.02(ft)-4.02 G +1.52(hese can be)-4.02 F(changed by editing the sendmail.cf \214le; che\ +ck there to \214nd the actual pathnames.)72 213 Q(/usr/sbin/sendmail)72 +229.2 Q(The binary of)144 241.2 Q F2(sendmail)2.5 E F1(.)A(/usr/bin/ne) +72 257.4 Q -.1(wa)-.25 G(liases).1 E 3.735(Al)144 269.4 S 1.235 +(ink to /usr/sbin/sendmail; causes the alias database to be reb)-3.735 F +3.734(uilt. Running)-.2 F 1.234(this pro-)3.734 F (gram is completely equi)144 281.4 Q -.25(va)-.25 G(lent to gi).25 E (ving)-.25 E F2(sendmail)2.5 E F1(the)2.5 E/F3 10/Times-Bold@0 SF (\255bi)2.5 E F1(\215ag.)2.5 E 13.38(/usr/bin/mailq Prints)72 297.6 R -3.703(al)3.703 G 1.203(isting of the mail queue.)-3.703 F 1.202 -(This program is equi)6.203 F -.25(va)-.25 G 1.202(lent to using the).25 -F F3(\255bp)3.702 E F1 1.202(\215ag to)3.702 F F2(sendmail)144 309.6 Q +3.702(al)3.702 G 1.202(isting of the mail queue.)-3.702 F 1.203 +(This program is equi)6.202 F -.25(va)-.25 G 1.203(lent to using the).25 +F F3(\255bp)3.703 E F1 1.203(\215ag to)3.703 F F2(sendmail)144 309.6 Q F1(.)A(/etc/mail/sendmail.cf)72 325.8 Q (The con\214guration \214le, in te)144 337.8 Q(xtual form.)-.15 E 1.72 (/etc/mail/help\214le The)72 354 R(SMTP help \214le.)2.5 E (/etc/mail/statistics)72 370.2 Q 2.5(As)144 382.2 S (tatistics \214le; need not be present.)-2.5 E(/etc/mail/sendmail.pid)72 398.4 Q .318(Created in daemon mode; it contains the process id of the \ -current SMTP daemon.)144 410.4 R .318(If you)5.318 F 1.048 -(use this in scripts; use `)144 422.4 R 1.048(`head \2551')-.74 F 3.548 -('t)-.74 G 3.548(og)-3.548 G 1.047 -(et just the \214rst line; the second line contains the)-3.548 F .679 +current SMTP daemon.)144 410.4 R .318(If you)5.318 F 1.047 +(use this in scripts; use `)144 422.4 R 1.047(`head \2551')-.74 F 3.548 +('t)-.74 G 3.548(og)-3.548 G 1.048 +(et just the \214rst line; the second line contains the)-3.548 F .68 (command line used to in)144 434.4 R -.2(vo)-.4 G .879 -.1(ke t).2 H -.679(he daemon, and later v).1 F .679(ersions of)-.15 F F2(sendmail)3.18 -E F1 .68(may add more)3.18 F(information to subsequent lines.)144 446.4 -Q 5.06(/etc/mail/aliases The)72 462.6 R(te)2.5 E(xtual v)-.15 E -(ersion of the alias \214le.)-.15 E(/etc/mail/aliases.db)72 478.8 Q +.679(he daemon, and later v).1 F .679(ersions of)-.15 F F2(sendmail) +3.179 E F1 .679(may add more)3.179 F(information to subsequent lines.) +144 446.4 Q 5.06(/etc/mail/aliases The)72 462.6 R(te)2.5 E(xtual v)-.15 +E(ersion of the alias \214le.)-.15 E(/etc/mail/aliases.db)72 478.8 Q (The alias \214le in)144 490.8 Q F2(hash)2.5 E F1(\(3\) format.)1.666 E (/etc/mail/aliases.{pag,dir})72 507 Q(The alias \214le in)144 519 Q F2 (ndbm)2.5 E F1(\(3\) format.)1.666 E(/v)72 535.2 Q(ar/spool/mqueue)-.25 @@ -9567,18 +9595,18 @@ de.)144 547.2 Q(/v)72 563.4 Q(ar/spool/mqueue/qf*)-.25 E (ersions of the qf \214les, used during queue \214le reb)-.15 E(uild.) -.2 E(/v)72 648 Q(ar/spool/mqueue/xf*)-.25 E 2.5(At)144 660 S (ranscript of the current session.)-2.5 E F3 -(Sendmail Installation and Operation Guide)72 756 Q(SMM:08-107)190.86 E +(Sendmail Installation and Operation Guide)72 756 Q(SMM:08-109)190.86 E 0 Cg EP -%%Page: 108 104 +%%Page: 110 106 %%BeginPageSetup BP %%EndPageSetup -/F0 10/Times-Bold@0 SF 188.36(SMM:08-108 Sendmail)72 60 R +/F0 10/Times-Bold@0 SF 188.36(SMM:08-110 Sendmail)72 60 R (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF (This page intentionally left blank;)256.225 300 Q (replace it with a blank sheet for double-sided output.)218.6 312 Q 0 Cg EP -%%Page: 3 105 +%%Page: 3 107 %%BeginPageSetup BP %%EndPageSetup @@ -9686,7 +9714,7 @@ E 23.5(................................................................\ .....)2.5 F(21)26 E 2.5(2.6.3. List)102 715.2 R -.25(ow)2.5 G 1.81(ners\ ......................................................................\ .............................................).25 F(21)26 E 0 Cg EP -%%Page: 4 106 +%%Page: 4 108 %%BeginPageSetup BP %%EndPageSetup @@ -9802,7 +9830,7 @@ R 1.56(Caching ........................................................\ 39)3.51 F 2.5(5.1.3. Semantics)102 715.2 R(of re)2.5 E (writing rule sets)-.25 E 23.5(........................................\ ........................................... 40)4.6 F 0 Cg EP -%%Page: 5 107 +%%Page: 5 109 %%BeginPageSetup BP %%EndPageSetup @@ -9860,7 +9888,7 @@ R 23.5(................................................................\ .......................................................................\ .. 46)3.52 F 2.5(5.3. C)87 412.8 R(and F \212 De\214ne Classes)2.5 E 23.5(..................................................................\ -................................... 52)2.67 F 2.5(5.4. M)87 427.2 R 2.5 +................................... 53)2.67 F 2.5(5.4. M)87 427.2 R 2.5 <8a44>2.5 G(e\214ne Mailer)-2.5 E 23.5(................................\ .......................................................................\ ........ 54)3.79 F 2.5(5.5. H)87 441.6 R 2.5<8a44>2.5 G(e\214ne Header) @@ -9871,50 +9899,50 @@ R 23.5(................................................................\ ............................. 60)3.22 F 2.5(5.7. P)87 470.4 R 2.5<8a50> 2.5 G(recedence De\214nitions)-2.5 E 23.5(.............................\ ..................................................................... 7\ -7)2.96 F 2.5(5.8. V)87 484.8 R 2.5<8a43>2.5 G(on\214guration V)-2.5 E +9)2.96 F 2.5(5.8. V)87 484.8 R 2.5<8a43>2.5 G(on\214guration V)-2.5 E (ersion Le)-1.11 E -.15(ve)-.25 G 2.8(l.).15 G 23.5(...................\ ..................................................................... 7\ -8)-2.8 F 2.5(5.9. K)87 499.2 R 2.5<8a4b>2.5 G .3 -.15(ey F)-2.75 H +9)-2.8 F 2.5(5.9. K)87 499.2 R 2.5<8a4b>2.5 G .3 -.15(ey F)-2.75 H (ile Declaration).15 E 23.5(...........................................\ -.......................................................... 79)2.81 F 2.5 +.......................................................... 80)2.81 F 2.5 (5.10. Q)87 513.6 R 2.5<8a51>2.5 G(ueue Group Declaration)-2.5 E 23.5(.\ .......................................................................\ -................... 86)2.98 F 2.5(5.11. X)87 528 R 2.5<8a4d>2.5 G +................... 87)2.98 F 2.5(5.11. X)87 528 R 2.5<8a4d>2.5 G (ail Filter \(Milter\) De\214nitions)-2.5 E 23.5(......................\ -............................................................ 87)4.61 F +............................................................ 89)4.61 F 2.5(5.12. The)87 542.4 R(User Database)2.5 E 23.5(.....................\ .......................................................................\ -.................. 88)4.92 F 2.5(5.12.1. Structure)102 556.8 R +.................. 89)4.92 F 2.5(5.12.1. Structure)102 556.8 R (of the user database)2.5 E 23.5(......................................\ -............................................... 88)2.7 F 2.5 +............................................... 90)2.7 F 2.5 (5.12.2. User)102 571.2 R(database semantics)2.5 E 23.5(...............\ .......................................................................\ -....... 89)3.25 F 2.5(5.12.3. Creating)102 587.6 R(the database)2.5 E/F2 +....... 90)3.25 F 2.5(5.12.3. Creating)102 587.6 R(the database)2.5 E/F2 7/Times-Roman@0 SF(23)-4 I F1 23.5(....................................\ -........................................................... 89)2.91 4 N +........................................................... 91)2.91 4 N 2.5(6. O)72 602 R(THER CONFIGURA)-.4 E 1.97(TION ......................\ .......................................................................\ -............)-1.11 F(90)26 E 2.5(6.1. P)87 616.4 R(arameters in de)-.15 +............)-1.11 F(91)26 E 2.5(6.1. P)87 616.4 R(arameters in de)-.15 E .3(vtools/OS/$oscf ..................................................\ -.........................................)-.25 F(90)26 E 2.5(6.2. P)87 +.........................................)-.25 F(91)26 E 2.5(6.2. P)87 630.8 R(arameters in sendmail/conf.h)-.15 E 23.5(......................\ .......................................................................\ -. 91)4.78 F 2.5(6.3. Con\214guration)87 645.2 R(in sendmail/conf.c)2.5 E +. 92)4.78 F 2.5(6.3. Con\214guration)87 645.2 R(in sendmail/conf.c)2.5 E 23.5(..................................................................\ -........................ 93)4.06 F 2.5(6.3.1. Built-in)102 659.6 R +........................ 95)4.06 F 2.5(6.3.1. Built-in)102 659.6 R (Header Semantics)2.5 E 23.5(..........................................\ -................................................. 93)4.9 F 2.5 +................................................. 95)4.9 F 2.5 (6.3.2. Restricting)102 674 R(Use of Email)2.5 E 23.5(.................\ .......................................................................\ -...... 95)4.34 F 2.5(6.3.3. Ne)102 688.4 R 2.5(wD)-.25 G +...... 96)4.34 F 2.5(6.3.3. Ne)102 688.4 R 2.5(wD)-.25 G (atabase Map Classes)-2.5 E 23.5(......................................\ -................................................... 95)4.89 F 2.5 +................................................... 97)4.89 F 2.5 (6.3.4. Queueing)102 702.8 R 1.56(Function ............................\ .......................................................................\ -....)2.5 F(96)26 E 2.5(6.3.5. Refusing)102 717.2 R +....)2.5 F(97)26 E 2.5(6.3.5. Refusing)102 717.2 R (Incoming SMTP Connections)2.5 E 23.5(.................................\ -...................................... 96)2.94 F 0 Cg EP -%%Page: 6 108 +...................................... 98)2.94 F 0 Cg EP +%%Page: 6 110 %%BeginPageSetup BP %%EndPageSetup @@ -9922,36 +9950,36 @@ BP (Installation and Operation Guide)2.5 E/F1 10/Times-Roman@0 SF 2.5 (6.3.6. Load)102 96 R -1.17 -.74(Av e)2.5 H(rage Computation).74 E 23.5 (......................................................................\ -.................... 97)2.74 F 2.5(6.4. Con\214guration)87 110.4 R +.................... 98)2.74 F 2.5(6.4. Con\214guration)87 110.4 R (in sendmail/daemon.c)2.5 E 23.5(......................................\ -............................................... 97)2.67 F 2.5(6.5. LD)87 +............................................... 98)2.67 F 2.5(6.5. LD)87 124.8 R .29(AP ........................................................\ .......................................................................\ -......)-.4 F(97)26 E 2.5(6.5.1. LD)102 139.2 R(AP Recursion)-.4 E 23.5(\ +......)-.4 F(99)26 E 2.5(6.5.1. LD)102 139.2 R(AP Recursion)-.4 E 23.5(\ .......................................................................\ -................................... 97)4.74 F 2.5(6.5.1.1. Example)117 +................................... 99)4.74 F 2.5(6.5.1.1. Example)117 153.6 R 23.5(..........................................................\ -..................................................... 98)2.95 F 2.5 +..................................................... 99)2.95 F 2.5 (6.6. ST)87 168 R(AR)-.93 E .58(TTLS ..................................\ .......................................................................\ -...................)-.6 F(98)26 E 2.5(6.6.1. Certi\214cates)102 182.4 R +...................)-.6 F(100)21 E 2.5(6.6.1. Certi\214cates)102 182.4 R (for ST)2.5 E(AR)-.93 E .87(TTLS ......................................\ -....................................................)-.6 F(98)26 E 2.5 +....................................................)-.6 F(100)21 E 2.5 (6.6.2. PRNG)102 196.8 R(for ST)2.5 E(AR)-.93 E 2.25(TTLS .............\ .......................................................................\ -.............)-.6 F(99)26 E 2.5(6.7. Encoding)87 211.2 R(of ST)2.5 E(AR) --.93 E(TTLS and A)-.6 E(UTH related Macros)-.55 E 23.5 -(............................................................ 99)2.56 F +.............)-.6 F(100)21 E 2.5(6.7. Encoding)87 211.2 R(of ST)2.5 E +(AR)-.93 E(TTLS and A)-.6 E(UTH related Macros)-.55 E 18.5 +(............................................................ 101)2.56 F 2.5(7. A)72 225.6 R(CKNO)-.4 E .1(WLEDGEMENTS .........................\ .......................................................................\ -............)-.35 F(99)26 E(Appendix A.)72 240 Q(COMMAND LINE FLA)5 E +............)-.35 F(101)21 E(Appendix A.)72 240 Q(COMMAND LINE FLA)5 E 1.97(GS ...............................................................\ -..........................)-.4 F(101)21 E(Appendix B.)72 254.4 Q -.1(QU) +..........................)-.4 F(103)21 E(Appendix B.)72 254.4 Q -.1(QU) 5 G(EUE FILE FORMA).1 E 1.38(TS .......................................\ -.....................................................)-1.11 F(104)21 E +.....................................................)-1.11 F(106)21 E (Appendix C.)72 268.8 Q(SUMMAR)5 E 2.5(YO)-.65 G 2.5(FS)-2.5 G(UPPOR) -2.5 E 2.5(TF)-.6 G 1.12(ILES .........................................\ -.....................................)-2.5 F(107)21 E 0 Cg EP +.....................................)-2.5 F(109)21 E 0 Cg EP %%Trailer end %%EOF diff --git a/contrib/sendmail-8.14/include/libmilter/mfapi.h b/contrib/sendmail-8.14/include/libmilter/mfapi.h index 4338645dc8..8e3a173286 100644 --- a/contrib/sendmail-8.14/include/libmilter/mfapi.h +++ b/contrib/sendmail-8.14/include/libmilter/mfapi.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999-2004, 2006 Sendmail, Inc. and its suppliers. + * Copyright (c) 1999-2004, 2006, 2008 Sendmail, Inc. and its suppliers. * All rights reserved. * * By using this file, you agree to the terms and conditions set @@ -7,7 +7,7 @@ * the sendmail distribution. * * - * $Id: mfapi.h,v 8.77 2006/11/02 02:44:07 ca Exp $ + * $Id: mfapi.h,v 8.80 2009/11/06 00:57:08 ca Exp $ */ /* @@ -18,7 +18,14 @@ # define _LIBMILTER_MFAPI_H 1 #ifndef SMFI_VERSION -# define SMFI_VERSION 0x01000000 /* libmilter version number */ +# if _FFR_MDS_NEGOTIATE +# define SMFI_VERSION 0x01000002 /* libmilter version number */ + + /* first libmilter version that has MDS support */ +# define SMFI_VERSION_MDS 0x01000002 +# else /* _FFR_MDS_NEGOTIATE */ +# define SMFI_VERSION 0x01000001 /* libmilter version number */ +# endif /* _FFR_MDS_NEGOTIATE */ #endif /* ! SMFI_VERSION */ #define SM_LM_VRS_MAJOR(v) (((v) & 0x7f000000) >> 24) @@ -163,9 +170,7 @@ LIBMILTER_API int smfi_setdbg __P((int)); LIBMILTER_API int smfi_settimeout __P((int)); LIBMILTER_API int smfi_setconn __P((char *)); LIBMILTER_API int smfi_stop __P((void)); -#if _FFR_MAXDATASIZE LIBMILTER_API size_t smfi_setmaxdatasize __P((size_t)); -#endif /* _FFR_MAXDATASIZE */ LIBMILTER_API int smfi_version __P((unsigned int *, unsigned int *, unsigned int *)); /* diff --git a/contrib/sendmail-8.14/include/libmilter/mfdef.h b/contrib/sendmail-8.14/include/libmilter/mfdef.h index 674856707d..f42ec026cc 100644 --- a/contrib/sendmail-8.14/include/libmilter/mfdef.h +++ b/contrib/sendmail-8.14/include/libmilter/mfdef.h @@ -7,7 +7,7 @@ * the sendmail distribution. * * - * $Id: mfdef.h,v 8.38 2007/03/27 18:53:48 ca Exp $ + * $Id: mfdef.h,v 8.39 2009/11/06 00:57:08 ca Exp $ */ /* @@ -27,6 +27,12 @@ #define MILTER_CHUNK_SIZE 65535 /* body chunk size */ #define MILTER_MAX_DATA_SIZE 65535 /* default milter command data limit */ +#if _FFR_MDS_NEGOTIATE +# define MILTER_MDS_64K ((64 * 1024) - 1) +# define MILTER_MDS_256K ((256 * 1024) - 1) +# define MILTER_MDS_1M ((1024 * 1024) - 1) +#endif /* _FFR_MDS_NEGOTIATE */ + /* These apply to SMFIF_* flags */ #define SMFI_V1_ACTS 0x0000000FL /* The actions of V1 filter */ #define SMFI_V2_ACTS 0x0000003FL /* The actions of V2 filter */ @@ -100,6 +106,9 @@ #define SMFIP_NR_EOH 0x00040000L /* No reply for eoh */ #define SMFIP_NR_BODY 0x00080000L /* No reply for body chunk */ #define SMFIP_HDR_LEADSPC 0x00100000L /* header value leading space */ +#define SMFIP_MDS_256K 0x10000000L /* MILTER_MAX_DATA_SIZE=256K */ +#define SMFIP_MDS_1M 0x20000000L /* MILTER_MAX_DATA_SIZE=1M */ +/* #define SMFIP_ 0x40000000L reserved: see SMFI_INTERNAL*/ #define SMFI_V1_PROT 0x0000003FL /* The protocol of V1 filter */ #define SMFI_V2_PROT 0x0000007FL /* The protocol of V2 filter */ @@ -107,4 +116,11 @@ /* all defined protocol bits */ #define SMFI_CURR_PROT 0x001FFFFFL +/* internal flags: only used between MTA and libmilter */ +#define SMFI_INTERNAL 0x70000000L + +#if _FFR_MILTER_CHECK +# define SMFIP_TEST 0x80000000L +#endif /* _FFR_MILTER_CHECK */ + #endif /* !_LIBMILTER_MFDEF_H */ diff --git a/contrib/sendmail-8.14/include/sm/conf.h b/contrib/sendmail-8.14/include/sm/conf.h index 13b3b50caf..5b1875426a 100644 --- a/contrib/sendmail-8.14/include/sm/conf.h +++ b/contrib/sendmail-8.14/include/sm/conf.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2007 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2009 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -10,7 +10,7 @@ * the sendmail distribution. * * - * $Id: conf.h,v 1.134 2007/09/24 23:05:37 ca Exp $ + * $Id: conf.h,v 1.139 2009/06/16 23:41:32 ca Exp $ */ /* @@ -460,6 +460,7 @@ typedef int pid_t; # endif /* SOLARIS >= 21000 || (SOLARIS < 10000 && SOLARIS >= 210) */ # if SOLARIS >= 21100 || (SOLARIS < 10000 && SOLARIS >= 211) # define GETLDAPALIASBYNAME_VERSION 2 /* changed in S11 */ +# define HAVE_NANOSLEEP 1 /* moved from librt to libc in S11 */ # endif /* SOLARIS >= 21100 || (SOLARIS < 10000 && SOLARIS >= 211) */ # ifndef HASGETUSERSHELL # define HASGETUSERSHELL 0 /* getusershell(3) causes core dumps pre-2.7 */ @@ -1021,6 +1022,10 @@ extern unsigned int sleepX __P((unsigned int seconds)); # define SMRSH_PATH "/bin:/usr/bin" # endif /* ! SMRSH_PATH */ # endif /* __FreeBSD_version >= 330000 */ +# if __FreeBSD_version >= 430000 /* 4.3.0-release and later */ +# define SOCKADDR_LEN_T socklen_t /* e.g., arg#3 to accept, getsockname */ +# define SOCKOPT_LEN_T socklen_t /* arg#5 to getsockopt */ +# endif /* __FreeBSD_version >= 430000 */ # define USESYSCTL 1 /* use sysctl(3) for getting ncpus */ # include # endif /* __FreeBSD__ >= 2 */ @@ -2800,6 +2805,20 @@ struct utsname # define MAXHOSTNAMELEN 256 # endif /* !defined(MAXHOSTNAMELEN) && !defined(_SCO_unix_) && !defined(NonStop_UX_BXX) && !defined(ALTOS_SYSTEM_V) */ + +# if _FFR_LINUX_MHNL && defined(__linux__) && MAXHOSTNAMELEN < 255 + /* + ** override Linux wierdness: a FQHN can be 255 chars long + ** SUSv3 requires HOST_NAME_MAX ("Maximum length of a host + ** name (not including the terminating null) as returned from the + ** gethostname() function.") to be at least 255. c.f.: + ** http://www.opengroup.org/onlinepubs/009695399 + ** but Linux defines that to 64 too. + */ +# undef MAXHOSTNAMELEN +# define MAXHOSTNAMELEN 256 +# endif /* _FFR_LINUX_MHNL && defined(__linux__) && MAXHOSTNAMELEN < 255 */ + # if !defined(SIGCHLD) && defined(SIGCLD) # define SIGCHLD SIGCLD # endif /* !defined(SIGCHLD) && defined(SIGCLD) */ diff --git a/contrib/sendmail-8.14/include/sm/ldap.h b/contrib/sendmail-8.14/include/sm/ldap.h index fc9a325fee..b0a9cc0580 100644 --- a/contrib/sendmail-8.14/include/sm/ldap.h +++ b/contrib/sendmail-8.14/include/sm/ldap.h @@ -6,7 +6,7 @@ * forth in the LICENSE file which can be found at the top level of * the sendmail distribution. * - * $Id: ldap.h,v 1.33 2007/10/10 00:06:44 ca Exp $ + * $Id: ldap.h,v 1.34 2008/11/17 21:02:54 ca Exp $ */ #ifndef SM_LDAP_H @@ -92,7 +92,7 @@ struct sm_ldap_struct char ldap_attrsep; # if _FFR_LDAP_NETWORK_TIMEOUT - struct timeval ldap_networktmo; + int ldap_networktmo; # endif /* _FFR_LDAP_NETWORK_TIMEOUT */ /* Linked list of maps sharing the same LDAP binding */ diff --git a/contrib/sendmail-8.14/include/sm/sem.h b/contrib/sendmail-8.14/include/sm/sem.h index 7b691a43ad..3ac0bc61cc 100644 --- a/contrib/sendmail-8.14/include/sm/sem.h +++ b/contrib/sendmail-8.14/include/sm/sem.h @@ -1,12 +1,12 @@ /* - * Copyright (c) 2000-2001, 2005 Sendmail, Inc. and its suppliers. + * Copyright (c) 2000-2001, 2005, 2008 Sendmail, Inc. and its suppliers. * All rights reserved. * * By using this file, you agree to the terms and conditions set * forth in the LICENSE file which can be found at the top level of * the sendmail distribution. * - * $Id: sem.h,v 1.9 2005/02/17 22:08:58 ca Exp $ + * $Id: sem.h,v 1.10 2008/05/30 16:26:39 ca Exp $ */ #ifndef SM_SEM_H @@ -47,6 +47,7 @@ extern int sm_sem_stop __P((int)); extern int sm_sem_acq __P((int, int, int)); extern int sm_sem_rel __P((int, int, int)); extern int sm_sem_get __P((int, int)); +extern int sm_semsetowner __P((int, uid_t, gid_t, mode_t)); # else /* SM_CONF_SEM > 0 */ # define sm_sem_start(key, nsem, semflg, owner) 0 diff --git a/contrib/sendmail-8.14/libmilter/Makefile.m4 b/contrib/sendmail-8.14/libmilter/Makefile.m4 index 7902c2f600..bc9bc66d67 100644 --- a/contrib/sendmail-8.14/libmilter/Makefile.m4 +++ b/contrib/sendmail-8.14/libmilter/Makefile.m4 @@ -1,4 +1,4 @@ -dnl $Id: Makefile.m4,v 8.78 2007/02/05 19:21:29 ca Exp $ +dnl $Id: Makefile.m4,v 8.85 2009/11/24 21:59:33 ca Exp $ include(confBUILDTOOLSDIR`/M4/switch.m4') dnl only required for compilation of EXTRAS diff --git a/contrib/sendmail-8.14/libmilter/comm.c b/contrib/sendmail-8.14/libmilter/comm.c index a7a44dffa7..e04681c8d0 100644 --- a/contrib/sendmail-8.14/libmilter/comm.c +++ b/contrib/sendmail-8.14/libmilter/comm.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999-2004 Sendmail, Inc. and its suppliers. + * Copyright (c) 1999-2004, 2009 Sendmail, Inc. and its suppliers. * All rights reserved. * * By using this file, you agree to the terms and conditions set @@ -9,7 +9,7 @@ */ #include -SM_RCSID("@(#)$Id: comm.c,v 8.67 2006/11/02 17:54:44 ca Exp $") +SM_RCSID("@(#)$Id: comm.c,v 8.70 2009/12/16 16:33:48 ca Exp $") #include "libmilter.h" #include @@ -18,7 +18,6 @@ SM_RCSID("@(#)$Id: comm.c,v 8.67 2006/11/02 17:54:44 ca Exp $") static ssize_t retry_writev __P((socket_t, struct iovec *, int, struct timeval *)); static size_t Maxdatasize = MILTER_MAX_DATA_SIZE; -#if _FFR_MAXDATASIZE /* ** SMFI_SETMAXDATASIZE -- set limit for milter data read/write. ** @@ -39,7 +38,6 @@ smfi_setmaxdatasize(sz) Maxdatasize = sz; return old; } -#endif /* _FFR_MAXDATASIZE */ /* ** MI_RD_CMD -- read a command @@ -122,8 +120,8 @@ mi_rd_cmd(sd, timeout, cmd, rlen, name) else if (ret < 0) { smi_log(SMI_LOG_ERR, - "%s: mi_rd_cmd: select returned %d: %s", - name, ret, sm_errstring(errno)); + "%s: mi_rd_cmd: %s() returned %d: %s", + name, MI_POLLSELECT, ret, sm_errstring(errno)); *cmd = SMFIC_RECVERR; return NULL; } @@ -214,8 +212,8 @@ mi_rd_cmd(sd, timeout, cmd, rlen, name) if (ret < 0) { smi_log(SMI_LOG_ERR, - "%s: mi_rd_cmd: select returned %d: %s", - name, ret, sm_errstring(save_errno)); + "%s: mi_rd_cmd: %s() returned %d: %s", + name, MI_POLLSELECT, ret, sm_errstring(save_errno)); *cmd = SMFIC_RECVERR; return NULL; } @@ -326,7 +324,7 @@ mi_wr_cmd(sd, timeout, cmd, buf, len) char *buf; size_t len; { - size_t sl, i; + size_t sl; ssize_t l; mi_int32 nl; int iovcnt; @@ -339,7 +337,6 @@ mi_wr_cmd(sd, timeout, cmd, buf, len) nl = htonl(len + 1); /* add 1 for the cmd char */ (void) memcpy(data, (void *) &nl, MILTER_LEN_BYTES); data[MILTER_LEN_BYTES] = (char) cmd; - i = 0; sl = MILTER_LEN_BYTES + 1; /* set up the vector for the size / command */ diff --git a/contrib/sendmail-8.14/libmilter/docs/api.html b/contrib/sendmail-8.14/libmilter/docs/api.html index 4214df4dd8..578e0ca686 100644 --- a/contrib/sendmail-8.14/libmilter/docs/api.html +++ b/contrib/sendmail-8.14/libmilter/docs/api.html @@ -2,7 +2,7 @@ Milter API

Milter API

@@ -80,7 +80,9 @@ The following functions change a message's contents and attributes. They may only be called in xxfi_eom. All of these functions may invoke additional communication with the MTA. They will return either MI_SUCCESS or MI_FAILURE to indicate the status of -the operation. +the operation. Message data (senders, recipients, headers, body chunks) +passed to these functions via parameters is copied and does not need to be +preserved (i.e., allocated memory can be freed).

A filter must have set the appropriate flag (listed below) in the @@ -310,7 +312,7 @@ for a protocol stage.


-Copyright (c) 2000, 2003, 2006 Sendmail, Inc. and its suppliers. +Copyright (c) 2000, 2003, 2006, 2009 Sendmail, Inc. and its suppliers. All rights reserved.
By using this file, you agree to the terms and conditions set diff --git a/contrib/sendmail-8.14/libmilter/docs/overview.html b/contrib/sendmail-8.14/libmilter/docs/overview.html index b7e80dfdbe..5c6f21ce4c 100644 --- a/contrib/sendmail-8.14/libmilter/docs/overview.html +++ b/contrib/sendmail-8.14/libmilter/docs/overview.html @@ -4,7 +4,7 @@

Technical Overview

@@ -60,7 +60,9 @@ returns to MESSAGE. For each of N connections { For each filter - process connection/helo (xxfi_connect, xxfi_helo) + process connection (xxfi_connect) + For each filter + process helo/ehlo (xxfi_helo) MESSAGE:For each message in this connection (sequentially) { For each filter diff --git a/contrib/sendmail-8.14/libmilter/docs/smfi_addheader.html b/contrib/sendmail-8.14/libmilter/docs/smfi_addheader.html index d068f9fdb9..460b4caf7c 100644 --- a/contrib/sendmail-8.14/libmilter/docs/smfi_addheader.html +++ b/contrib/sendmail-8.14/libmilter/docs/smfi_addheader.html @@ -2,7 +2,7 @@ smfi_addheader

smfi_addheader

@@ -90,7 +90,11 @@ To change a header's current value, use the MTA will add this automatically. It is the filter writer's responsibility to ensure that no standards are violated. -
  • The MTA adds a leading space to an added header value. +
  • The MTA adds a leading space to an added header value unless + the flag +SMFIP_HDR_LEADSPC + is set, in which case the milter + must include any desired leading spaces itself. @@ -116,7 +120,7 @@ To change a header's current value, use
    -Copyright (c) 2000-2003, 2006 Sendmail, Inc. and its suppliers. +Copyright (c) 2000-2003, 2006, 2009 Sendmail, Inc. and its suppliers. All rights reserved.
    By using this file, you agree to the terms and conditions set diff --git a/contrib/sendmail-8.14/libmilter/docs/smfi_chgheader.html b/contrib/sendmail-8.14/libmilter/docs/smfi_chgheader.html index 0701a3671a..517b5ba4c1 100644 --- a/contrib/sendmail-8.14/libmilter/docs/smfi_chgheader.html +++ b/contrib/sendmail-8.14/libmilter/docs/smfi_chgheader.html @@ -2,7 +2,7 @@ smfi_chgheader

    smfi_chgheader

    @@ -85,6 +85,11 @@ Otherwise, it returns MI_SUCCESS. carriage return (ASCII 0x0d); the MTA will add this automatically. It is the filter writer's responsibility to ensure that no standards are violated. +
  • The MTA adds a leading space to a header value unless + the flag +SMFIP_HDR_LEADSPC + is set, in which case the milter + must include any desired leading spaces itself. @@ -110,7 +115,7 @@ Otherwise, it returns MI_SUCCESS.
    -Copyright (c) 2000-2003 Sendmail, Inc. and its suppliers. +Copyright (c) 2000-2003, 2009 Sendmail, Inc. and its suppliers. All rights reserved.
    By using this file, you agree to the terms and conditions set diff --git a/contrib/sendmail-8.14/libmilter/docs/smfi_insheader.html b/contrib/sendmail-8.14/libmilter/docs/smfi_insheader.html index a4ba77f33d..5962e61afe 100644 --- a/contrib/sendmail-8.14/libmilter/docs/smfi_insheader.html +++ b/contrib/sendmail-8.14/libmilter/docs/smfi_insheader.html @@ -2,7 +2,7 @@ smfi_insheader

    smfi_insheader

    @@ -111,6 +111,11 @@ Otherwise, it returns MI_SUCCESS. the MTA will add this automatically. It is the filter writer's responsibility to ensure that no standards are violated. +
  • The MTA adds a leading space to an inserted header value unless + the flag +SMFIP_HDR_LEADSPC + is set, in which case the milter + must include any desired leading spaces itself. @@ -135,7 +140,7 @@ Otherwise, it returns MI_SUCCESS.
    -Copyright (c) 2004, 2006 Sendmail, Inc. and its suppliers. +Copyright (c) 2004, 2006, 2009 Sendmail, Inc. and its suppliers. All rights reserved.
    By using this file, you agree to the terms and conditions set diff --git a/contrib/sendmail-8.14/libmilter/docs/smfi_opensocket.html b/contrib/sendmail-8.14/libmilter/docs/smfi_opensocket.html index 151af07a91..53ea62b109 100644 --- a/contrib/sendmail-8.14/libmilter/docs/smfi_opensocket.html +++ b/contrib/sendmail-8.14/libmilter/docs/smfi_opensocket.html @@ -2,7 +2,7 @@ smfi_opensocket

    smfi_opensocket

    @@ -24,16 +24,21 @@ filter. - + +and the filter. +This allows the calling application to ensure that the +socket can be created. +If this is not called, +smfi_main() will do so implicitly. +
    Called WhenCalled only from program mainline, before calling -smfi_main().Called only from program mainline, +after calling smfi_setconn() and smfi_register(), +but before calling smfi_main(). +
    Effects smfi_opensocket attempts to create the socket specified previously by a call to smfi_setconn() which will be the interface between MTAs -and the filter. This allows the calling application to ensure that the -socket can be created. If this is not called, smfi_main() will -do so implicitly.
    @@ -58,7 +63,8 @@ do so implicitly.
  • The interface socket could not be created for any reason.
  • rmsocket was true, and either the socket could not be examined, or exists and could not be removed. -
  • smfi_setconn() has not been called. +
  • smfi_setconn() or smfi_register() + have not been called. Otherwise, it will return MI_SUCCESS @@ -68,7 +74,7 @@ Otherwise, it will return MI_SUCCESS
    -Copyright (c) 2003 Sendmail, Inc. and its suppliers. +Copyright (c) 2003, 2008 Sendmail, Inc. and its suppliers. All rights reserved.
    By using this file, you agree to the terms and conditions set diff --git a/contrib/sendmail-8.14/libmilter/docs/smfi_version.html b/contrib/sendmail-8.14/libmilter/docs/smfi_version.html index 3c1fc0520a..6dd451d152 100644 --- a/contrib/sendmail-8.14/libmilter/docs/smfi_version.html +++ b/contrib/sendmail-8.14/libmilter/docs/smfi_version.html @@ -2,7 +2,7 @@ smfi_version()

    smfi_version()

    @@ -59,24 +59,30 @@ Get the (runtime) version of libmilter. Note: the compile time version of libmilter is available in the macro SMFI_VERSION. -A milter can check this macro to determine which functions to use -(at compile time via C preprocessor statements). -Using this macro and the -smfi_version() -function, -a milter can determine at runtime whether it has been (dynamically) -linked against the expected libmilter version. To extract the major and minor version as well as the current patch level from this macro, the macros SM_LM_VRS_MAJOR(v), SM_LM_VRS_MINOR(v), and SM_LM_VRS_PLVL(v) can be used, respectively. +A milter can check the +SMFI_VERSION +macro to determine which functions to use +(at compile time via C preprocessor statements). +Using this macro and the +smfi_version() +function, +a milter can determine at runtime whether it has been (dynamically) +linked against the expected libmilter version. +Such a function should only compare the major and minor version, +not the patch level, +i.e., the libmilter library will be compatible despite +different patch levels.
    -Copyright (c) 2006, 2007 Sendmail, Inc. and its suppliers. +Copyright (c) 2006-2008 Sendmail, Inc. and its suppliers. All rights reserved.
    By using this file, you agree to the terms and conditions set diff --git a/contrib/sendmail-8.14/libmilter/engine.c b/contrib/sendmail-8.14/libmilter/engine.c index a024312151..a2d3e1e3f3 100644 --- a/contrib/sendmail-8.14/libmilter/engine.c +++ b/contrib/sendmail-8.14/libmilter/engine.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999-2004, 2006, 2007 Sendmail, Inc. and its suppliers. + * Copyright (c) 1999-2004, 2006-2008 Sendmail, Inc. and its suppliers. * All rights reserved. * * By using this file, you agree to the terms and conditions set @@ -9,7 +9,7 @@ */ #include -SM_RCSID("@(#)$Id: engine.c,v 8.159 2007/04/23 22:22:50 ca Exp $") +SM_RCSID("@(#)$Id: engine.c,v 8.166 2009/11/06 00:57:07 ca Exp $") #include "libmilter.h" @@ -113,6 +113,7 @@ static void fix_stm __P((SMFICTX_PTR)); static bool trans_ok __P((int, int)); static char **dec_argv __P((char *, size_t)); static int dec_arg2 __P((char *, size_t, char **, char **)); +static void mi_clr_symlist __P((SMFICTX_PTR)); #if _FFR_WORKERS_POOL static bool mi_rd_socket_ready __P((int)); @@ -757,6 +758,69 @@ mi_clr_macros(ctx, m) } } +/* +** MI_CLR_SYMLIST -- clear list of macros +** +** Parameters: +** ctx -- context structure +** +** Returns: +** None. +*/ + +static void +mi_clr_symlist(ctx) + SMFICTX *ctx; +{ + int i; + + SM_ASSERT(ctx != NULL); + for (i = SMFIM_FIRST; i <= SMFIM_LAST; i++) + { + if (ctx->ctx_mac_list[i] != NULL) + { + free(ctx->ctx_mac_list[i]); + ctx->ctx_mac_list[i] = NULL; + } + } +} + +/* +** MI_CLR_CTX -- clear context +** +** Parameters: +** ctx -- context structure +** +** Returns: +** None. +*/ + +void +mi_clr_ctx(ctx) + SMFICTX *ctx; +{ + SM_ASSERT(ctx != NULL); + if (ValidSocket(ctx->ctx_sd)) + { + (void) closesocket(ctx->ctx_sd); + ctx->ctx_sd = INVALID_SOCKET; + } + if (ctx->ctx_reply != NULL) + { + free(ctx->ctx_reply); + ctx->ctx_reply = NULL; + } + if (ctx->ctx_privdata != NULL) + { + smi_log(SMI_LOG_WARN, + "%s: private data not NULL", + ctx->ctx_smfi->xxfi_name); + } + mi_clr_macros(ctx, 0); + mi_clr_symlist(ctx); + free(ctx); +} + /* ** ST_OPTIONNEG -- negotiate options ** @@ -771,8 +835,11 @@ static int st_optionneg(g) genarg *g; { - mi_int32 i, v, fake_pflags; + mi_int32 i, v, fake_pflags, internal_pflags; SMFICTX_PTR ctx; +#if _FFR_MILTER_CHECK + bool testmode = false; +#endif /* _FFR_MILTER_CHECK */ int (*fi_negotiate) __P((SMFICTX *, unsigned long, unsigned long, unsigned long, unsigned long, @@ -826,6 +893,7 @@ st_optionneg(g) v = SMFI_V1_ACTS; ctx->ctx_mta_aflags = v; /* MTA action flags */ + internal_pflags = 0; (void) memcpy((void *) &i, (void *) &(g->a_buf[MILTER_LEN_BYTES * 2]), MILTER_LEN_BYTES); v = ntohl(i); @@ -833,7 +901,51 @@ st_optionneg(g) /* no flags? set to default value for V1 protocol */ if (v == 0) v = SMFI_V1_PROT; - ctx->ctx_mta_pflags = v; /* MTA protocol flags */ +#if _FFR_MDS_NEGOTIATE + else if (ctx->ctx_smfi->xxfi_version >= SMFI_VERSION_MDS) + { + /* + ** Allow changing the size only if milter is compiled + ** against a version that supports this. + ** If a milter is dynamically linked against a newer + ** libmilter version, we don't want to "surprise" + ** it with a larger buffer as it may rely on it + ** even though it is not documented as a limit. + */ + + if (bitset(SMFIP_MDS_1M, v)) + { + internal_pflags |= SMFIP_MDS_1M; + (void) smfi_setmaxdatasize(MILTER_MDS_1M); + } + else if (bitset(SMFIP_MDS_256K, v)) + { + internal_pflags |= SMFIP_MDS_256K; + (void) smfi_setmaxdatasize(MILTER_MDS_256K); + } + } +# if 0 + /* don't log this for now... */ + else if (ctx->ctx_smfi->xxfi_version < SMFI_VERSION_MDS && + bitset(SMFIP_MDS_1M|SMFIP_MDS_256K, v)) + { + smi_log(SMI_LOG_WARN, + "%s: st_optionneg[%ld]: milter version=%X, trying flags=%X", + ctx->ctx_smfi->xxfi_name, + (long) ctx->ctx_id, ctx->ctx_smfi->xxfi_version, v); + } +# endif /* 0 */ +#endif /* _FFR_MDS_NEGOTIATE */ + + /* + ** MTA protocol flags. + ** We pass the internal flags to the milter as "read only", + ** i.e., a milter can read them so it knows which size + ** will be used, but any changes by a milter will be ignored + ** (see below, search for SMFI_INTERNAL). + */ + + ctx->ctx_mta_pflags = (v & ~SMFI_INTERNAL) | internal_pflags; /* ** Copy flags from milter struct into libmilter context; @@ -880,6 +992,12 @@ st_optionneg(g) 0, 0, &m_aflags, &m_pflags, &m_f2, &m_f3); +#if _FFR_MILTER_CHECK + testmode = bitset(SMFIP_TEST, m_pflags); + if (testmode) + m_pflags &= ~SMFIP_TEST; +#endif /* _FFR_MILTER_CHECK */ + /* ** Types of protocol flags (pflags): ** 1. do NOT send protocol step X @@ -1001,6 +1119,7 @@ st_optionneg(g) (long) ctx->ctx_id, ctx->ctx_mta_pflags, i); return _SMFIS_ABORT; } + fix_stm(ctx); if (ctx->ctx_dbg > 3) sm_dprintf("[%ld] milter_negotiate:" @@ -1010,6 +1129,25 @@ st_optionneg(g) , ctx->ctx_mta_aflags, ctx->ctx_mta_pflags , ctx->ctx_aflags, ctx->ctx_pflags); +#if _FFR_MILTER_CHECK + if (ctx->ctx_dbg > 3) + sm_dprintf("[%ld] milter_negotiate:" + " testmode=%d, pflags2mta=%X, internal_pflags=%X\n" + , (long) ctx->ctx_id, testmode + , ctx->ctx_pflags2mta, internal_pflags); + + /* in test mode: take flags without further modifications */ + if (!testmode) + /* Warning: check statement below! */ +#endif /* _FFR_MILTER_CHECK */ + + /* + ** Remove the internal flags that might have been set by a milter + ** and set only those determined above. + */ + + ctx->ctx_pflags2mta = (ctx->ctx_pflags2mta & ~SMFI_INTERNAL) + | internal_pflags; return _SMFIS_OPTIONS; } @@ -1725,9 +1863,9 @@ mi_rd_socket_ready (sd) int n; int nerr = 0; #if SM_CONF_POLL - struct pollfd pfd; + struct pollfd pfd; #else /* SM_CONF_POLL */ - fd_set rd_set, exc_set; + fd_set rd_set, exc_set; #endif /* SM_CONF_POLL */ do diff --git a/contrib/sendmail-8.14/libmilter/example.c b/contrib/sendmail-8.14/libmilter/example.c index 5a09f1da97..cef4b0f33a 100644 --- a/contrib/sendmail-8.14/libmilter/example.c +++ b/contrib/sendmail-8.14/libmilter/example.c @@ -6,7 +6,7 @@ * forth in the LICENSE file which can be found at the top level of * the sendmail distribution. * - * $Id: example.c,v 8.3 2006/12/20 21:22:34 ca Exp $ + * $Id: example.c,v 8.4 2008/07/22 15:12:47 ca Exp $ */ /* @@ -252,7 +252,7 @@ struct smfiDesc smfilter = mlfi_close, /* connection cleanup */ mlfi_unknown, /* unknown/unimplemented SMTP commands */ mlfi_data, /* DATA command filter */ - mlfi_negotiate /* option negotation at connection startup */ + mlfi_negotiate /* option negotiation at connection startup */ }; int diff --git a/contrib/sendmail-8.14/libmilter/handler.c b/contrib/sendmail-8.14/libmilter/handler.c index 5fd4b2630a..2c34f1f05d 100644 --- a/contrib/sendmail-8.14/libmilter/handler.c +++ b/contrib/sendmail-8.14/libmilter/handler.c @@ -9,7 +9,7 @@ */ #include -SM_RCSID("@(#)$Id: handler.c,v 8.38 2006/11/02 02:38:22 ca Exp $") +SM_RCSID("@(#)$Id: handler.c,v 8.39 2008/11/25 01:14:16 ca Exp $") #include "libmilter.h" @@ -43,24 +43,7 @@ mi_handle_session(ctx) ret = MI_FAILURE; else ret = mi_engine(ctx); - if (ValidSocket(ctx->ctx_sd)) - { - (void) closesocket(ctx->ctx_sd); - ctx->ctx_sd = INVALID_SOCKET; - } - if (ctx->ctx_reply != NULL) - { - free(ctx->ctx_reply); - ctx->ctx_reply = NULL; - } - if (ctx->ctx_privdata != NULL) - { - smi_log(SMI_LOG_WARN, - "%s: private data not NULL", - ctx->ctx_smfi->xxfi_name); - } - mi_clr_macros(ctx, 0); - free(ctx); + mi_clr_ctx(ctx); ctx = NULL; return ret; } diff --git a/contrib/sendmail-8.14/libmilter/libmilter.h b/contrib/sendmail-8.14/libmilter/libmilter.h index 5a12409749..5824151da3 100644 --- a/contrib/sendmail-8.14/libmilter/libmilter.h +++ b/contrib/sendmail-8.14/libmilter/libmilter.h @@ -19,7 +19,7 @@ #ifdef _DEFINE # define EXTERN # define INIT(x) = x -SM_IDSTR(MilterlId, "@(#)$Id: libmilter.h,v 8.74 2006/12/19 18:19:52 ca Exp $") +SM_IDSTR(MilterlId, "@(#)$Id: libmilter.h,v 8.77 2008/11/25 18:28:18 ca Exp $") #else /* _DEFINE */ # define EXTERN extern # define INIT(x) @@ -282,6 +282,7 @@ extern int mi_handle_session __P((SMFICTX_PTR)); extern int mi_engine __P((SMFICTX_PTR)); extern int mi_listener __P((char *, int, smfiDesc_ptr, time_t, int)); extern void mi_clr_macros __P((SMFICTX_PTR, int)); +extern void mi_clr_ctx __P((SMFICTX_PTR)); extern int mi_stop __P((void)); extern int mi_control_startup __P((char *)); extern void mi_stop_milters __P((int)); diff --git a/contrib/sendmail-8.14/libmilter/listener.c b/contrib/sendmail-8.14/libmilter/listener.c index 6e68ae55d4..c20793611f 100644 --- a/contrib/sendmail-8.14/libmilter/listener.c +++ b/contrib/sendmail-8.14/libmilter/listener.c @@ -9,7 +9,7 @@ */ #include -SM_RCSID("@(#)$Id: listener.c,v 8.124 2007/04/23 22:22:50 ca Exp $") +SM_RCSID("@(#)$Id: listener.c,v 8.126 2009/12/16 16:40:23 ca Exp $") /* ** listener.c -- threaded network listener @@ -576,7 +576,7 @@ mi_thread_handle_wrapper(arg) ** is not used anywhere. */ - return (void *) mi_handle_session(arg); + return (void *)(intptr_t)mi_handle_session(arg); } #endif /* _FFR_WORKERS_POOL */ @@ -777,8 +777,9 @@ mi_listener(conn, dbg, smfi, timeout, backlog) continue; scnt++; smi_log(SMI_LOG_ERR, - "%s: select() failed (%s), %s", - smfi->xxfi_name, sm_errstring(save_errno), + "%s: %s() failed (%s), %s", + smfi->xxfi_name, MI_POLLSELECT, + sm_errstring(save_errno), scnt >= MAX_FAILS_S ? "abort" : "try again"); MI_SLEEP(scnt); if (scnt >= MAX_FAILS_S) diff --git a/contrib/sendmail-8.14/libmilter/main.c b/contrib/sendmail-8.14/libmilter/main.c index faff4f8363..d6e727959d 100644 --- a/contrib/sendmail-8.14/libmilter/main.c +++ b/contrib/sendmail-8.14/libmilter/main.c @@ -9,7 +9,7 @@ */ #include -SM_RCSID("@(#)$Id: main.c,v 8.83 2007/04/23 22:22:50 ca Exp $") +SM_RCSID("@(#)$Id: main.c,v 8.84 2008/09/02 05:37:06 ca Exp $") #define _DEFINE 1 #include "libmilter.h" @@ -52,7 +52,8 @@ smfi_register(smfilter) (void) sm_strlcpy(smfi->xxfi_name, smfilter.xxfi_name, len); /* compare milter version with hard coded version */ - if (smfi->xxfi_version != SMFI_VERSION && + if ((SM_LM_VRS_MAJOR(smfi->xxfi_version) != SM_LM_VRS_MAJOR(SMFI_VERSION) || + SM_LM_VRS_MINOR(smfi->xxfi_version) != SM_LM_VRS_MINOR(SMFI_VERSION)) && smfi->xxfi_version != 2 && smfi->xxfi_version != 3 && smfi->xxfi_version != 4) diff --git a/contrib/sendmail-8.14/libmilter/worker.c b/contrib/sendmail-8.14/libmilter/worker.c index 04026783f3..28d404fa3a 100644 --- a/contrib/sendmail-8.14/libmilter/worker.c +++ b/contrib/sendmail-8.14/libmilter/worker.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003-2004, 2006 Sendmail, Inc. and its suppliers. + * Copyright (c) 2003-2004, 2007, 2009 Sendmail, Inc. and its suppliers. * All rights reserved. * * By using this file, you agree to the terms and conditions set @@ -11,7 +11,7 @@ */ #include -SM_RCSID("@(#)$Id: worker.c,v 8.9 2006/12/18 18:26:51 ca Exp $") +SM_RCSID("@(#)$Id: worker.c,v 8.17 2009/06/15 15:34:54 ca Exp $") #include "libmilter.h" @@ -210,23 +210,7 @@ mi_close_session(ctx) SM_ASSERT(ctx != NULL); (void) mi_list_del_ctx(ctx); - if (ValidSocket(ctx->ctx_sd)) - { - (void) closesocket(ctx->ctx_sd); - ctx->ctx_sd = INVALID_SOCKET; - } - if (ctx->ctx_reply != NULL) - { - free(ctx->ctx_reply); - ctx->ctx_reply = NULL; - } - if (ctx->ctx_privdata != NULL) - { - smi_log(SMI_LOG_WARN, "%s: private data not NULL", - ctx->ctx_smfi->xxfi_name); - } - mi_clr_macros(ctx, 0); - free(ctx); + mi_clr_ctx(ctx); return MI_SUCCESS; } @@ -259,12 +243,10 @@ mi_pool_controller_init() if (pipe(Tskmgr.tm_p) != 0) { smi_log(SMI_LOG_ERR, "can't create event pipe: %s", - sm_errstring(r)); + sm_errstring(errno)); return MI_FAILURE; } - POOL_LEV_DPRINTF(4, ("PIPE r=[%d] w=[%d]", RD_PIPE, WR_PIPE)); - (void) smutex_init(&Tskmgr.tm_w_mutex); (void) scond_init(&Tskmgr.tm_w_cond); @@ -330,6 +312,7 @@ mi_pool_controller(arg) int dim_pfd = 0; bool rebuild_set = true; int pcnt = 0; /* error count for poll() failures */ + time_t lastcheck; Tskmgr.tm_tid = sthread_get_id(); if (pthread_detach(Tskmgr.tm_tid) != 0) @@ -347,12 +330,12 @@ mi_pool_controller(arg) } dim_pfd = PFD_STEP; + lastcheck = time(NULL); for (;;) { SMFICTX_PTR ctx; int nfd, rfd, i; time_t now; - time_t lastcheck; POOL_LEV_DPRINTF(4, ("Let's %s again...", WAITFN)); @@ -366,20 +349,20 @@ mi_pool_controller(arg) /* check for timed out sessions? */ if (lastcheck + DT_CHECK_OLD_SESSIONS < now) { - SM_TAILQ_FOREACH(ctx, &WRK_CTX_HEAD, ctx_link) + ctx = SM_TAILQ_FIRST(&WRK_CTX_HEAD); + while (ctx != SM_TAILQ_END(&WRK_CTX_HEAD)) { + SMFICTX_PTR ctx_nxt; + + ctx_nxt = SM_TAILQ_NEXT(ctx, ctx_link); if (ctx->ctx_wstate == WKST_WAITING) { if (ctx->ctx_wait == 0) - { ctx->ctx_wait = now; - continue; - } - - /* if session timed out, close it */ - if (ctx->ctx_wait + OLD_SESSION_TIMEOUT - < now) + else if (ctx->ctx_wait + OLD_SESSION_TIMEOUT + < now) { + /* if session timed out, close it */ sfsistat (*fi_close) __P((SMFICTX *)); POOL_LEV_DPRINTF(4, @@ -391,10 +374,9 @@ mi_pool_controller(arg) (void) (*fi_close)(ctx); mi_close_session(ctx); - ctx = SM_TAILQ_FIRST(&WRK_CTX_HEAD); - continue; } } + ctx = ctx_nxt; } lastcheck = now; } @@ -467,6 +449,7 @@ mi_pool_controller(arg) } } } + rebuild_set = false; } TASKMGR_UNLOCK(); diff --git a/contrib/sendmail-8.14/libsm/debug.c b/contrib/sendmail-8.14/libsm/debug.c index f9281fd5e7..ea9cd846ac 100644 --- a/contrib/sendmail-8.14/libsm/debug.c +++ b/contrib/sendmail-8.14/libsm/debug.c @@ -8,7 +8,7 @@ */ #include -SM_RCSID("@(#)$Id: debug.c,v 1.30 2004/08/03 20:10:26 ca Exp $") +SM_RCSID("@(#)$Id: debug.c,v 1.32 2009/09/20 05:38:46 ca Exp $") /* ** libsm debugging and tracing @@ -17,6 +17,10 @@ SM_RCSID("@(#)$Id: debug.c,v 1.30 2004/08/03 20:10:26 ca Exp $") #include #include +#if _FFR_DEBUG_PID_TIME +#include +#include +#endif /* _FFR_DEBUG_PID_TIME */ #include #include #include @@ -112,6 +116,11 @@ sm_debug_close() ** none. */ +#if _FFR_DEBUG_PID_TIME +SM_DEBUG_T SmDBGPidTime = SM_DEBUG_INITIALIZER("sm_trace_pid_time", + "@(#)$Debug: sm_trace_pid_time - print pid and time in debug $"); +#endif /* _FFR_DEBUG_PID_TIME */ + void #if SM_VA_STD sm_dprintf(char *fmt, ...) @@ -125,6 +134,26 @@ sm_dprintf(fmt, va_alist) if (SmDebugOutput == NULL) return; +#if _FFR_DEBUG_PID_TIME + /* note: this is ugly if the output isn't a full line! */ + if (sm_debug_active(&SmDBGPidTime, 1)) + { + static char str[32] = "[1900-00-00/00:00:00] "; + struct tm *tmp; + time_t currt; + + currt = time((time_t *)0); + tmp = localtime(&currt); + snprintf(str, sizeof(str), "[%d-%02d-%02d/%02d:%02d:%02d] ", + 1900 + tmp->tm_year, /* HACK */ + tmp->tm_mon + 1, + tmp->tm_mday, + tmp->tm_hour, tmp->tm_min, tmp->tm_sec); + sm_io_fprintf(SmDebugOutput, SmDebugOutput->f_timeout, + "%ld: %s ", (long) getpid(), str); + } +#endif /* _FFR_DEBUG_PID_TIME */ + SM_VA_START(ap, fmt); sm_io_vfprintf(SmDebugOutput, SmDebugOutput->f_timeout, fmt, ap); SM_VA_END(ap); diff --git a/contrib/sendmail-8.14/libsm/ldap.c b/contrib/sendmail-8.14/libsm/ldap.c index 252e547537..7ee57fcbb6 100644 --- a/contrib/sendmail-8.14/libsm/ldap.c +++ b/contrib/sendmail-8.14/libsm/ldap.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001-2007 Sendmail, Inc. and its suppliers. + * Copyright (c) 2001-2009 Sendmail, Inc. and its suppliers. * All rights reserved. * * By using this file, you agree to the terms and conditions set @@ -11,7 +11,7 @@ #define LDAP_DEPRECATED 1 #include -SM_RCSID("@(#)$Id: ldap.c,v 1.80 2007/10/12 00:19:44 ca Exp $") +SM_RCSID("@(#)$Id: ldap.c,v 1.83 2009/06/19 22:02:26 guenther Exp $") #if LDAPMAP # include @@ -1099,7 +1099,21 @@ sm_ldap_results(lmap, msgid, flags, delim, rpool, result, if (ret == 0) save_errno = ETIMEDOUT; else - save_errno = sm_ldap_geterrno(lmap->ldap_ld); + { + int rc; + + /* + ** We may have gotten an LDAP_RES_SEARCH_RESULT response + ** with an error inside it, so we have to extract that + ** with ldap_parse_result(). This can happen when talking + ** to an LDAP proxy whose backend has gone down. + */ + + save_errno = ldap_parse_result(lmap->ldap_ld, lmap->ldap_res, + &rc, NULL, NULL, NULL, NULL, 0); + if (save_errno == LDAP_SUCCESS) + save_errno = rc; + } if (save_errno != LDAP_SUCCESS) { statp = EX_TEMPFAIL; @@ -1370,9 +1384,16 @@ sm_ldap_setopts(ld, lmap) ldap_set_option(ld, LDAP_OPT_REFERRALS, LDAP_OPT_OFF); ldap_set_option(ld, LDAP_OPT_SIZELIMIT, &lmap->ldap_sizelimit); ldap_set_option(ld, LDAP_OPT_TIMELIMIT, &lmap->ldap_timelimit); -# if _FFR_LDAP_NETWORK_TIMEOUT && defined(LDAP_OPT_NETWORK_TIMEOUT) - ldap_set_option(ld, LDAP_OPT_NETWORK_TIMEOUT, &lmap->ldap_networktmo); -# endif /* _FFR_LDAP_NETWORK_TIMEOUT && defined(LDAP_OPT_NETWORK_TIMEOUT) */ +# if _FFR_LDAP_NETWORK_TIMEOUT && defined(LDAP_OPT_NETWORK_TIMEOUT) + if (lmap->ldap_networktmo > 0) + { + struct timeval tmo; + + tmo.tv_sec = lmap->ldap_networktmo; + tmo.tv_usec = 0; + ldap_set_option(ld, LDAP_OPT_NETWORK_TIMEOUT, &tmo); + } +# endif /* _FFR_LDAP_NETWORK_TIMEOUT && defined(LDAP_OPT_NETWORK_TIMEOUT) */ # ifdef LDAP_OPT_RESTART ldap_set_option(ld, LDAP_OPT_RESTART, LDAP_OPT_ON); # endif /* LDAP_OPT_RESTART */ diff --git a/contrib/sendmail-8.14/libsm/mbdb.c b/contrib/sendmail-8.14/libsm/mbdb.c index ad0e7ccbd1..3bb514df51 100644 --- a/contrib/sendmail-8.14/libsm/mbdb.c +++ b/contrib/sendmail-8.14/libsm/mbdb.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001-2002 Sendmail, Inc. and its suppliers. + * Copyright (c) 2001-2003,2009 Sendmail, Inc. and its suppliers. * All rights reserved. * * By using this file, you agree to the terms and conditions set @@ -8,7 +8,7 @@ */ #include -SM_RCSID("@(#)$Id: mbdb.c,v 1.40 2003/12/10 03:19:07 gshapiro Exp $") +SM_RCSID("@(#)$Id: mbdb.c,v 1.41 2009/06/19 22:02:26 guenther Exp $") #include @@ -564,7 +564,20 @@ mbdb_ldap_lookup(name, user) entry = ldap_first_entry(LDAPLMAP.ldap_ld, LDAPLMAP.ldap_res); if (entry == NULL) { - save_errno = sm_ldap_geterrno(LDAPLMAP.ldap_ld); + int rc; + + /* + ** We may have gotten an LDAP_RES_SEARCH_RESULT response + ** with an error inside it, so we have to extract that + ** with ldap_parse_result(). This can happen when talking + ** to an LDAP proxy whose backend has gone down. + */ + + save_errno = ldap_parse_result(LDAPLMAP.ldap_ld, + LDAPLMAP.ldap_res, &rc, NULL, + NULL, NULL, NULL, 0); + if (save_errno == LDAP_SUCCESS) + save_errno = rc; if (save_errno == LDAP_SUCCESS) { errno = ENOENT; diff --git a/contrib/sendmail-8.14/libsm/sem.c b/contrib/sendmail-8.14/libsm/sem.c index 89394cbee4..83a54e32e1 100644 --- a/contrib/sendmail-8.14/libsm/sem.c +++ b/contrib/sendmail-8.14/libsm/sem.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2001, 2005 Sendmail, Inc. and its suppliers. + * Copyright (c) 2000-2001, 2005, 2008 Sendmail, Inc. and its suppliers. * All rights reserved. * * By using this file, you agree to the terms and conditions set @@ -8,11 +8,12 @@ */ #include -SM_RCSID("@(#)$Id: sem.c,v 1.13 2005/08/12 20:39:59 ca Exp $") +SM_RCSID("@(#)$Id: sem.c,v 1.14 2008/05/30 16:26:38 ca Exp $") #if SM_CONF_SEM # include # include +# include # include # include # include @@ -200,4 +201,45 @@ sm_sem_get(semid, semnum) return -1; return semval; } + +/* +** SM_SEMSETOWNER -- set owner/group/mode of semaphores. +** +** Parameters: +** semid -- id for semaphores. +** uid -- uid to use +** gid -- gid to use +** mode -- mode to use +** +** Returns: +** 0 on success. +** < 0 on failure. +*/ + +int +sm_semsetowner(semid, uid, gid, mode) + int semid; + uid_t uid; + gid_t gid; + mode_t mode; +{ + int r; + struct semid_ds semidds; + union semun { + int val; + struct semid_ds *buf; + ushort *array; + } arg; + + memset(&semidds, 0, sizeof(semidds)); + arg.buf = &semidds; + if ((r = semctl(semid, 1, IPC_STAT, arg)) < 0) + return r; + semidds.sem_perm.uid = uid; + semidds.sem_perm.gid = gid; + semidds.sem_perm.mode = mode; + if ((r = semctl(semid, 1, IPC_SET, arg)) < 0) + return r; + return 0; +} #endif /* SM_CONF_SEM */ diff --git a/contrib/sendmail-8.14/libsm/t-sem.c b/contrib/sendmail-8.14/libsm/t-sem.c index 24d056365f..662b4f6d43 100644 --- a/contrib/sendmail-8.14/libsm/t-sem.c +++ b/contrib/sendmail-8.14/libsm/t-sem.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2001, 2005-2007 Sendmail, Inc. and its suppliers. + * Copyright (c) 2000-2001, 2005-2008 Sendmail, Inc. and its suppliers. * All rights reserved. * * By using this file, you agree to the terms and conditions set @@ -8,7 +8,7 @@ */ #include -SM_RCSID("@(#)$Id: t-sem.c,v 1.16 2007/03/21 23:22:10 ca Exp $") +SM_RCSID("@(#)$Id: t-sem.c,v 1.17 2008/05/30 16:26:38 ca Exp $") #include @@ -127,6 +127,20 @@ sem_cleanup(sig) exit(EX_UNAVAILABLE); } +static int +drop_priv(uid, gid) + uid_t uid; + gid_t gid; +{ + int r; + + r = setgid(gid); + if (r != 0) + return r; + r = setuid(uid); + return r; +} + /* ** SEMTEST -- test of semaphores ** @@ -141,12 +155,23 @@ sem_cleanup(sig) # define MAX_CNT 10 static int -semtest(owner) +semtest(owner, uid, gid) int owner; + uid_t uid; + gid_t gid; { int semid, r; int cnt = 0; + if (!owner && uid != 0) + { + r = drop_priv(uid, gid); + if (r < 0) + { + perror("drop_priv child failed"); + return -1; + } + } semid = sm_sem_start(T_SM_SEM_KEY, 1, 0, owner); if (semid < 0) { @@ -156,6 +181,22 @@ semtest(owner) if (owner) { + if (uid != 0) + { + r = sm_semsetowner(semid, uid, gid, 0660); + if (r < 0) + { + perror("sm_semsetowner failed"); + return -1; + } + r = drop_priv(uid, gid); + if (r < 0) + { + perror("drop_priv owner failed"); + return -1; + } + } + /* just in case someone kills the program... */ semid_c = semid; (void) sm_signal(SIGHUP, sem_cleanup); @@ -281,18 +322,31 @@ main(argc, argv) { bool interactive = false; bool owner = false; - int ch; - int r = 0; + int ch, r; + uid_t uid; + gid_t gid; + + uid = 0; + gid = 0; + r = 0; -# define OPTIONS "io" +# define OPTIONS "iog:u:" while ((ch = getopt(argc, argv, OPTIONS)) != -1) { switch ((char) ch) { + case 'g': + gid = (gid_t)strtoul(optarg, 0, 0); + break; + case 'i': interactive = true; break; + case 'u': + uid = (uid_t)strtoul(optarg, 0, 0); + break; + case 'o': owner = true; break; @@ -323,11 +377,11 @@ main(argc, argv) { /* give the parent the chance to setup data */ sleep(1); - r = semtest(false); + r = semtest(false, uid, gid); } else { - r = semtest(true); + r = semtest(true, uid, gid); } SM_TEST(r == 0); return sm_test_end(); diff --git a/contrib/sendmail-8.14/libsmdb/smdb1.c b/contrib/sendmail-8.14/libsmdb/smdb1.c index e45de7c7f8..842d4b2eca 100644 --- a/contrib/sendmail-8.14/libsmdb/smdb1.c +++ b/contrib/sendmail-8.14/libsmdb/smdb1.c @@ -1,5 +1,5 @@ /* -** Copyright (c) 1999-2002 Sendmail, Inc. and its suppliers. +** Copyright (c) 1999-2002, 2004, 2009 Sendmail, Inc. and its suppliers. ** All rights reserved. ** ** By using this file, you agree to the terms and conditions set @@ -8,7 +8,7 @@ */ #include -SM_RCSID("@(#)$Id: smdb1.c,v 8.59 2004/08/03 20:58:39 ca Exp $") +SM_RCSID("@(#)$Id: smdb1.c,v 8.62 2009/11/12 23:04:18 ca Exp $") #include #include @@ -397,15 +397,19 @@ smdb1_cursor(database, cursor, flags) if (db1->smdb1_cursor_in_use) return SMDBE_ONLY_SUPPORTS_ONE_CURSOR; - db1->smdb1_cursor_in_use = true; db1_cursor = (SMDB_DB1_CURSOR *) malloc(sizeof(SMDB_DB1_CURSOR)); - db1_cursor->db = db1; + if (db1_cursor == NULL) + return SMDBE_MALLOC; cur = (SMDB_CURSOR *) malloc(sizeof(SMDB_CURSOR)); - if (cur == NULL) + { + free(db1_cursor); return SMDBE_MALLOC; + } + db1->smdb1_cursor_in_use = true; + db1_cursor->db = db1; cur->smdbc_impl = db1_cursor; cur->smdbc_close = smdb1_cursor_close; cur->smdbc_del = smdb1_cursor_del; @@ -502,7 +506,12 @@ smdb_db_open(database, db_name, mode, mode_mask, sff, type, user_info, smdb_db = smdb_malloc_database(); db1 = smdb1_malloc_database(); if (smdb_db == NULL || db1 == NULL) + { + (void) smdb_unlock_file(lock_fd); + smdb_free_database(smdb_db); + free(db1); return SMDBE_MALLOC; + } db1->smdb1_lock_fd = lock_fd; params = NULL; diff --git a/contrib/sendmail-8.14/libsmdb/smdb2.c b/contrib/sendmail-8.14/libsmdb/smdb2.c index be07d636b4..15806619ee 100644 --- a/contrib/sendmail-8.14/libsmdb/smdb2.c +++ b/contrib/sendmail-8.14/libsmdb/smdb2.c @@ -1,5 +1,5 @@ /* -** Copyright (c) 1999-2003 Sendmail, Inc. and its suppliers. +** Copyright (c) 1999-2003, 2009 Sendmail, Inc. and its suppliers. ** All rights reserved. ** ** By using this file, you agree to the terms and conditions set @@ -8,7 +8,7 @@ */ #include -SM_RCSID("@(#)$Id: smdb2.c,v 8.79 2003/06/13 21:33:11 ca Exp $") +SM_RCSID("@(#)$Id: smdb2.c,v 8.80 2009/11/12 23:07:49 ca Exp $") #include #include @@ -620,12 +620,13 @@ smdb_db_open(database, db_name, mode, mode_mask, sff, type, user_info, db_params } smdb_db = smdb_malloc_database(); - if (smdb_db == NULL) - return SMDBE_MALLOC; - db2 = smdb2_malloc_database(); - if (db2 == NULL) + if (db2 == NULL || smdb_db == NULL) + { + smdb_unlock_file(lock_fd); + smdb_free_database(smdb_db); /* ok to be NULL */ return SMDBE_MALLOC; + } db2->smdb2_lock_fd = lock_fd; diff --git a/contrib/sendmail-8.14/libsmutil/safefile.c b/contrib/sendmail-8.14/libsmutil/safefile.c index 8488534280..f299e10535 100644 --- a/contrib/sendmail-8.14/libsmutil/safefile.c +++ b/contrib/sendmail-8.14/libsmutil/safefile.c @@ -15,7 +15,7 @@ #include #include -SM_RCSID("@(#)$Id: safefile.c,v 8.128 2004/09/30 18:15:49 ca Exp $") +SM_RCSID("@(#)$Id: safefile.c,v 8.129 2008/08/04 18:07:04 gshapiro Exp $") /* @@ -699,7 +699,6 @@ safeopen(fn, omode, cmode, sff) if (bitset(O_CREAT, omode)) sff |= SFF_CREAT; omode &= ~O_CREAT; - smode = 0; switch (omode & O_ACCMODE) { case O_RDONLY: diff --git a/contrib/sendmail-8.14/mail.local/mail.local.c b/contrib/sendmail-8.14/mail.local/mail.local.c index 492e115404..dd31069041 100644 --- a/contrib/sendmail-8.14/mail.local/mail.local.c +++ b/contrib/sendmail-8.14/mail.local/mail.local.c @@ -18,7 +18,7 @@ SM_IDSTR(copyright, Copyright (c) 1990, 1993, 1994\n\ The Regents of the University of California. All rights reserved.\n") -SM_IDSTR(id, "@(#)$Id: mail.local.c,v 8.254 2006/10/12 22:23:45 ca Exp $") +SM_IDSTR(id, "@(#)$Id: mail.local.c,v 8.256 2008/02/19 07:13:30 gshapiro Exp $") #include #include @@ -79,6 +79,15 @@ SM_IDSTR(id, "@(#)$Id: mail.local.c,v 8.254 2006/10/12 22:23:45 ca Exp $") # endif /* HASHSPOOLMD5 */ #endif /* HASHSPOOL */ +#if _FFR_SPOOL_PATH + /* + ** Override path to mail store at run time (using -p). + ** From: Eugene Grosbein of Svyaz Service JSC + ** See: http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/114195 + ** NOTE: Update man page before adding this to a release. + */ +#endif /* _FFR_SPOOL_PATH */ + #ifndef LOCKTO_RM # define LOCKTO_RM 300 /* timeout for stale lockfile removal */ @@ -227,7 +236,11 @@ main(argc, argv) #if HASHSPOOL while ((ch = getopt(argc, argv, "7bdD:f:h:r:lH:p:n")) != -1) #else /* HASHSPOOL */ +# if _FFR_SPOOL_PATH + while ((ch = getopt(argc, argv, "7bdD:f:h:r:lp:")) != -1) +# else /* _FFR_SPOOL_PATH */ while ((ch = getopt(argc, argv, "7bdD:f:h:r:l")) != -1) +# endif /* _FFR_SPOOL_PATH */ #endif /* HASHSPOOL */ { switch(ch) @@ -308,6 +321,12 @@ main(argc, argv) } break; + case 'n': + StripRcptDomain = false; + break; +#endif /* HASHSPOOL */ + +#if HASHSPOOL || _FFR_SPOOL_PATH case 'p': if (optarg == NULL || *optarg == '\0') { @@ -321,11 +340,7 @@ main(argc, argv) usage(); } break; - - case 'n': - StripRcptDomain = false; - break; -#endif /* HASHSPOOL */ +#endif /* HASHSPOOL || _FFR_SPOOL_PATH */ case '?': default: @@ -1566,7 +1581,11 @@ void usage() { ExitVal = EX_USAGE; +# if _FFR_SPOOL_PATH + mailerr(NULL, "usage: mail.local [-7] [-b] [-d] [-l] [-f from|-r from] [-h filename] [-p path] user ..."); +# else /* _FFR_SPOOL_PATH */ mailerr(NULL, "usage: mail.local [-7] [-b] [-d] [-l] [-f from|-r from] [-h filename] user ..."); +# endif /* _FFR_SPOOL_PATH */ sm_exit(ExitVal); } diff --git a/contrib/sendmail-8.14/makemap/makemap.0 b/contrib/sendmail-8.14/makemap/makemap.0 index 398579f4c6..5e30b72014 100644 --- a/contrib/sendmail-8.14/makemap/makemap.0 +++ b/contrib/sendmail-8.14/makemap/makemap.0 @@ -72,7 +72,8 @@ DDEESSCCRRIIPPTTIIOONN checking for hard or symbolic links in world writable directo- ries. - --tt Use the specified delimiter instead of white space. + --tt Use the specified delimiter instead of white space (also for + dumping a map). --uu dump (unmap) the content of the database to standard output. @@ -86,4 +87,4 @@ HHIISSTTOORRYY - $Date: 2002/06/27 23:41:04 $ MAKEMAP(8) + $Date: 2008/05/02 23:07:48 $ MAKEMAP(8) diff --git a/contrib/sendmail-8.14/makemap/makemap.8 b/contrib/sendmail-8.14/makemap/makemap.8 index 96338e79cb..ca8a949de8 100644 --- a/contrib/sendmail-8.14/makemap/makemap.8 +++ b/contrib/sendmail-8.14/makemap/makemap.8 @@ -8,9 +8,9 @@ .\" the sendmail distribution. .\" .\" -.\" $Id: makemap.8,v 8.30 2002/06/27 23:41:04 gshapiro Exp $ +.\" $Id: makemap.8,v 8.31 2008/05/02 23:07:48 ca Exp $ .\" -.TH MAKEMAP 8 "$Date: 2002/06/27 23:41:04 $" +.TH MAKEMAP 8 "$Date: 2008/05/02 23:07:48 $" .SH NAME makemap \- create database maps for sendmail @@ -156,7 +156,8 @@ This includes checking for hard or symbolic links in world writable directories. .TP .B \-t -Use the specified delimiter instead of white space. +Use the specified delimiter instead of white space +(also for dumping a map). .TP .B \-u dump (unmap) the content of the database to standard output. diff --git a/contrib/sendmail-8.14/makemap/makemap.c b/contrib/sendmail-8.14/makemap/makemap.c index 730274848a..cacec001e7 100644 --- a/contrib/sendmail-8.14/makemap/makemap.c +++ b/contrib/sendmail-8.14/makemap/makemap.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2002, 2004 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2002, 2004, 2008 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1992 Eric P. Allman. All rights reserved. * Copyright (c) 1992, 1993 @@ -20,7 +20,7 @@ SM_IDSTR(copyright, Copyright (c) 1992, 1993\n\ The Regents of the University of California. All rights reserved.\n") -SM_IDSTR(id, "@(#)$Id: makemap.c,v 8.178 2007/05/11 18:45:39 ca Exp $") +SM_IDSTR(id, "@(#)$Id: makemap.c,v 8.179 2008/04/14 02:06:16 ca Exp $") #include @@ -378,9 +378,10 @@ main(argc, argv) break; (void) sm_io_fprintf(smioout, SM_TIME_DEFAULT, - "%.*s\t%.*s\n", + "%.*s%c%.*s\n", (int) db_key.size, (char *) db_key.data, + (sep != '\0') ? sep : '\t', (int) db_val.size, (char *)db_val.data); diff --git a/contrib/sendmail-8.14/praliases/praliases.0 b/contrib/sendmail-8.14/praliases/praliases.0 index 03047014c8..28b474f1e6 100644 --- a/contrib/sendmail-8.14/praliases/praliases.0 +++ b/contrib/sendmail-8.14/praliases/praliases.0 @@ -15,10 +15,12 @@ DDEESSCCRRIIPPTTIIOONN The options are as follows: - --CC Read the specified sendmail configuration file instead of the + --CC _f_i_l_e + Read the specified sendmail configuration file instead of the default sseennddmmaaiill configuration file. - --ff Read the specified file instead of the configured sseennddmmaaiill sys- + --ff _f_i_l_e + Read the specified file instead of the configured sseennddmmaaiill sys- tem aliases file(s). If one or more keys are specified on the command line, only entries @@ -34,4 +36,4 @@ SSEEEE AALLSSOO - $Date: 2000/12/15 19:53:45 $ PRALIASES(8) + $Date: 2008/07/10 20:13:10 $ PRALIASES(8) diff --git a/contrib/sendmail-8.14/praliases/praliases.8 b/contrib/sendmail-8.14/praliases/praliases.8 index 2c78cacff5..1f11014f41 100644 --- a/contrib/sendmail-8.14/praliases/praliases.8 +++ b/contrib/sendmail-8.14/praliases/praliases.8 @@ -1,4 +1,4 @@ -.\" Copyright (c) 1998-2000 Sendmail, Inc. and its suppliers. +.\" Copyright (c) 1998-2000, 2008 Sendmail, Inc. and its suppliers. .\" All rights reserved. .\" .\" By using this file, you agree to the terms and conditions set @@ -6,9 +6,9 @@ .\" the sendmail distribution. .\" .\" -.\" $Id: praliases.8,v 8.17 2000/12/15 19:53:45 gshapiro Exp $ +.\" $Id: praliases.8,v 8.19 2008/07/10 20:13:10 ca Exp $ .\" -.TH PRALIASES 8 "$Date: 2000/12/15 19:53:45 $" +.TH PRALIASES 8 "$Date: 2008/07/10 20:13:10 $" .SH NAME praliases \- display system mail aliases @@ -30,12 +30,12 @@ The special internal @:@ alias will be displayed if present. .PP The options are as follows: .TP -.B \-C +.BI "\-C " file Read the specified sendmail configuration file instead of the default .B sendmail configuration file. .TP -.B \-f +.BI "\-f " file Read the specified file instead of the configured .B sendmail system aliases file(s). diff --git a/contrib/sendmail-8.14/praliases/praliases.c b/contrib/sendmail-8.14/praliases/praliases.c index 984981ff77..d0ee54e37a 100644 --- a/contrib/sendmail-8.14/praliases/praliases.c +++ b/contrib/sendmail-8.14/praliases/praliases.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2001 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2001, 2008 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -20,7 +20,7 @@ SM_IDSTR(copyright, Copyright (c) 1988, 1993\n\ The Regents of the University of California. All rights reserved.\n") -SM_IDSTR(id, "@(#)$Id: praliases.c,v 8.94 2007/05/11 18:50:36 ca Exp $") +SM_IDSTR(id, "@(#)$Id: praliases.c,v 8.96 2008/07/10 20:13:10 ca Exp $") #include #include @@ -99,7 +99,8 @@ main(argc, argv) case '?': default: (void) sm_io_fprintf(smioerr, SM_TIME_DEFAULT, - "usage: praliases [-C cffile] [-f aliasfile]\n"); + "usage: praliases [-C cffile] [-f aliasfile]" + " [key ...]\n"); exit(EX_USAGE); } } diff --git a/contrib/sendmail-8.14/sendmail/Makefile.m4 b/contrib/sendmail-8.14/sendmail/Makefile.m4 index b2bfa1a8d2..0fa337467d 100644 --- a/contrib/sendmail-8.14/sendmail/Makefile.m4 +++ b/contrib/sendmail-8.14/sendmail/Makefile.m4 @@ -1,4 +1,4 @@ -dnl $Id: Makefile.m4,v 8.112 2007/10/17 21:29:43 ca Exp $ +dnl $Id: Makefile.m4,v 8.121 2009/12/15 22:39:23 ca Exp $ include(confBUILDTOOLSDIR`/M4/switch.m4') define(`confREQUIRE_LIBSM', `true') diff --git a/contrib/sendmail-8.14/sendmail/README b/contrib/sendmail-8.14/sendmail/README index 2039674381..9c4628ffed 100644 --- a/contrib/sendmail-8.14/sendmail/README +++ b/contrib/sendmail-8.14/sendmail/README @@ -9,7 +9,7 @@ # the sendmail distribution. # # -# $Id: README,v 8.390 2006/11/13 22:27:27 ca Exp $ +# $Id: README,v 8.392 2009/04/10 17:49:19 gshapiro Exp $ # This directory contains the source files for sendmail(TM). @@ -32,6 +32,7 @@ For detailed instructions, please read the document ../doc/op/op.me: cd ../doc/op ; make op.ps op.txt Sendmail is a trademark of Sendmail, Inc. +US Patent Numbers 6865671, 6986037. +-------------------+ @@ -41,7 +42,7 @@ Sendmail is a trademark of Sendmail, Inc. By far, the easiest way to compile sendmail is to use the "Build" script: - sh Build + sh ./Build This uses the "uname" command to figure out what architecture you are on and creates a proper Makefile accordingly. It also creates a @@ -52,7 +53,7 @@ read the note below in the OPERATING SYSTEM AND COMPILE QUIRKS section. If you need to look at other include or library directories, use the -I or -L flags on the command line, e.g., - sh Build -I/usr/sww/include -L/usr/sww/lib + sh ./Build -I/usr/sww/include -L/usr/sww/lib It's also possible to create local site configuration in the file site.config.m4 (or another file settable with the -f flag). This @@ -1847,4 +1848,4 @@ util.c Some general purpose routines used by sendmail. version.c The version number and information about this version of sendmail. -(Version $Revision: 8.390 $, last update $Date: 2006/11/13 22:27:27 $ ) +(Version $Revision: 8.392 $, last update $Date: 2009/04/10 17:49:19 $ ) diff --git a/contrib/sendmail-8.14/sendmail/TRACEFLAGS b/contrib/sendmail-8.14/sendmail/TRACEFLAGS index a6249fd2c4..6fdfdd97df 100644 --- a/contrib/sendmail-8.14/sendmail/TRACEFLAGS +++ b/contrib/sendmail-8.14/sendmail/TRACEFLAGS @@ -1,4 +1,4 @@ -# $Id: TRACEFLAGS,v 8.47 2006/09/11 22:36:32 ca Exp $ +# $Id: TRACEFLAGS,v 8.48 2008/11/03 21:09:26 gshapiro Exp $ 0, 4 main.c main canonical name, UUCP node name, a.k.a.s 0, 15 main.c main print configuration 0, 44 util.c printav print address of each string @@ -86,6 +86,7 @@ 70 queue.c quarantining 71,>99 milter.c quarantine on errors 73 queue.c shared memory updates +74,>99 map.c LDAP map defer 80 content length 81 sun remote mode 83 collect.c timeout diff --git a/contrib/sendmail-8.14/sendmail/collect.c b/contrib/sendmail-8.14/sendmail/collect.c index 56fed0a664..f5d72477c5 100644 --- a/contrib/sendmail-8.14/sendmail/collect.c +++ b/contrib/sendmail-8.14/sendmail/collect.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2006 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2006, 2008 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -13,7 +13,7 @@ #include -SM_RCSID("@(#)$Id: collect.c,v 8.280 2006/11/29 00:20:40 ca Exp $") +SM_RCSID("@(#)$Id: collect.c,v 8.284 2008/08/06 05:26:24 ca Exp $") static void eatfrom __P((char *volatile, ENVELOPE *)); static void collect_doheader __P((ENVELOPE *)); @@ -308,6 +308,7 @@ collect(fp, smtpmode, hdrp, e, rsetsize) dbto = smtpmode ? ((int) TimeOuts.to_datablock * 1000) : SM_TIME_FOREVER; sm_io_setinfo(fp, SM_IO_WHAT_TIMEOUT, &dbto); + set_tls_rd_tmo(TimeOuts.to_datablock); c = SM_IO_EOF; inputerr = false; headeronly = hdrp != NULL; @@ -846,6 +847,9 @@ readerr: } /* Log collection information. */ + if (tTd(92, 2)) + sm_dprintf("collect: e_id=%s, EF_LOGSENDER=%d, LogLevel=%d\n", + e->e_id, bitset(EF_LOGSENDER, e->e_flags), LogLevel); if (bitset(EF_LOGSENDER, e->e_flags) && LogLevel > 4) { logsender(e, e->e_msgid); diff --git a/contrib/sendmail-8.14/sendmail/conf.c b/contrib/sendmail-8.14/sendmail/conf.c index 0cbb88e34d..8d8f9ed6b1 100644 --- a/contrib/sendmail-8.14/sendmail/conf.c +++ b/contrib/sendmail-8.14/sendmail/conf.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2007 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2009 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -13,7 +13,7 @@ #include -SM_RCSID("@(#)$Id: conf.c,v 8.1136 2007/10/10 00:06:45 ca Exp $") +SM_RCSID("@(#)$Id: conf.c,v 8.1153 2009/12/18 17:25:12 ca Exp $") #include #include @@ -392,6 +392,9 @@ setdefaults(e) #if REQUIRES_DIR_FSYNC RequiresDirfsync = true; #endif /* REQUIRES_DIR_FSYNC */ +#if _FFR_RCPTTHROTDELAY + BadRcptThrottleDelay = 1; +#endif /* _FFR_RCPTTHROTDELAY */ ConnectionRateWindowSize = 60; setupmaps(); setupqueues(); @@ -782,7 +785,7 @@ inithostmaps() else if (strcmp(maptype[i], "ldap") == 0 && stab("aliases.ldap", ST_MAP, ST_FIND) == NULL) { - (void) strlcpy(buf, "aliases.ldap ldap -b . -h localhost -k mail=%0 -v mailgroup", + (void) sm_strlcpy(buf, "aliases.ldap ldap -b . -h localhost -k mail=%0 -v mailgroup", sizeof buf); (void) makemapentry(buf); } @@ -968,7 +971,10 @@ switch_map_find(service, maptype, mapreturn) p = strpbrk(buf, "#\n"); if (p != NULL) *p = '\0'; - p = strpbrk(buf, " \t"); +#ifndef SM_NSSWITCH_DELIMS +# define SM_NSSWITCH_DELIMS " \t" +#endif /* SM_NSSWITCH_DELIMS */ + p = strpbrk(buf, SM_NSSWITCH_DELIMS); if (p != NULL) *p++ = '\0'; if (buf[0] == '\0') @@ -981,7 +987,7 @@ switch_map_find(service, maptype, mapreturn) buf); continue; } - while (isspace(*p)) + while (isascii(*p) && isspace(*p)) p++; if (*p == '\0') continue; @@ -1007,7 +1013,7 @@ switch_map_find(service, maptype, mapreturn) if (p == NULL) break; *p++ = '\0'; - while (isspace(*p)) + while (isascii(*p) && isspace(*p)) p++; } if (svcno < MAXMAPSTACK) @@ -1513,7 +1519,7 @@ getla() sm_dprintf("getla: symbol address = %#lx\n", (unsigned long) Nl[X_AVENRUN].n_value); if (lseek(kmem, (off_t) Nl[X_AVENRUN].n_value, SEEK_SET) == -1 || - read(kmem, (char *) avenrun, sizeof(avenrun)) < sizeof(avenrun)) + read(kmem, (char *) avenrun, sizeof(avenrun)) != sizeof(avenrun)) { /* thank you Ian */ if (tTd(3, 1)) @@ -1835,7 +1841,7 @@ getla(void) if (lseek(kmem, CAST_SYSMP(sysmp(MP_KERNADDR, MPKA_AVENRUN)), SEEK_SET) == -1 || - read(kmem, (char *) avenrun, sizeof(avenrun)) < sizeof(avenrun)) + read(kmem, (char *) avenrun, sizeof(avenrun)) != sizeof(avenrun)) { if (tTd(3, 1)) sm_dprintf("getla: lseek or read: %s\n", @@ -1943,6 +1949,13 @@ getla() } r = read(afd, &avenrun, sizeof(avenrun)); + if (r != sizeof(avenrun)) + { + sm_syslog(LOG_ERR, NOQID, + "can't read %s: %s", _PATH_AVENRUN, + r == -1 ? sm_errstring(errno) : "short read"); + return -1; + } if (tTd(3, 5)) sm_dprintf("getla: avenrun = %d\n", avenrun); @@ -2275,7 +2288,8 @@ refuseconnections(e, dn, active) # define MIN_DELAY_LOG 90 /* wait before logging this again */ # define D_MSG_LA "delaying connections on daemon %s: load average=%d >= %d" /* sleep to flatten out connection load */ - sm_setproctitle(true, e, D_MSG_LA, Daemons[dn].d_name, limit); + sm_setproctitle(true, e, D_MSG_LA, Daemons[dn].d_name, + CurrentLA, limit); if (LogLevel > 8 && (now = curtime()) > log_delay) { sm_syslog(LOG_INFO, NOQID, D_MSG_LA, @@ -3367,6 +3381,10 @@ enoughdiskspace(msize, e) { int i; +#if _FFR_TESTS + if (tTd(4, 101)) + return false; +#endif /* _FFR_TESTS */ if (MinBlocksFree <= 0 && msize <= 0) { if (tTd(4, 80)) @@ -4067,7 +4085,7 @@ strtol(nptr, endptr, base) */ do { c = *s++; - } while (isspace(c)); + } while (isascii(c) && isspace(c)); if (c == '-') { neg = 1; c = *s++; @@ -4103,9 +4121,9 @@ strtol(nptr, endptr, base) cutlim = cutoff % (unsigned long) base; cutoff /= (unsigned long) base; for (acc = 0, any = 0;; c = *s++) { - if (isdigit(c)) + if (isascii(c) && isdigit(c)) c -= '0'; - else if (isalpha(c)) + else if (isascii(c) && isalpha(c)) c -= isupper(c) ? 'A' - 10 : 'a' - 10; else break; @@ -6024,6 +6042,10 @@ char *FFRCompileOptions[] = /* DefaultAuthInfo doesn't really work in 8.13 anymore. */ "_FFR_ALLOW_SASLINFO", #endif /* _FFR_ALLOW_SASLINFO */ +#if _FFR_BADRCPT_SHUTDOWN + /* shut down connection (421) if there are too many bad RCPTs */ + "_FFR_BADRCPT_SHUTDOWN", +#endif /* _FFR_BADRCPT_SHUTDOWN */ #if _FFR_BESTMX_BETTER_TRUNCATION /* Better truncation of list of MX records for dns map. */ "_FFR_BESTMX_BETTER_TRUNCATION", @@ -6032,6 +6054,10 @@ char *FFRCompileOptions[] = /* Deal with MTAs that send a reply during the DATA phase. */ "_FFR_CATCH_BROKEN_MTAS", #endif /* _FFR_CATCH_BROKEN_MTAS */ +#if _FFR_CHECKCONFIG + /* New OpMode to check the configuration file */ + "_FFR_CHECKCONFIG", +#endif /* _FFR_CHECKCONFIG */ #if _FFR_CHK_QUEUE /* Stricter checks about queue directory permissions. */ "_FFR_CHK_QUEUE", @@ -6106,6 +6132,10 @@ char *FFRCompileOptions[] = /* EightBitAddrOK: allow 8-bit e-mail addresses */ "_FFR_EIGHT_BIT_ADDR_OK", #endif /* _FFR_EIGHT_BIT_ADDR_OK */ +#if _FFR_EXPDELAY + /* exponential queue delay */ + "_FFR_EXPDELAY", +#endif /* _FFR_EXPDELAY */ #if _FFR_EXTRA_MAP_CHECK /* perform extra checks on $( $) in R lines */ "_FFR_EXTRA_MAP_CHECK", @@ -6164,6 +6194,17 @@ char *FFRCompileOptions[] = /* Ignore extensions offered in response to HELO */ "_FFR_IGNORE_EXT_ON_HELO", #endif /* _FFR_IGNORE_EXT_ON_HELO */ +#if _FFR_LINUX_MHNL + /* Set MAXHOSTNAMELEN to 256 (Linux) */ + "_FFR_LINUX_MHNL", +#endif /* _FFR_LINUX_MHNL */ +#if _FFR_LOCAL_DAEMON + /* Local daemon mode (-bl) which only accepts loopback connections */ + "_FFR_LOCAL_DAEMON", +#endif /* _FFR_LOCAL_DAEMON */ +#if _FFR_MAIL_MACRO + "_FFR_MAIL_MACRO", +#endif /* _FFR_MAIL_MACRO */ #if _FFR_MAXDATASIZE /* ** It is possible that a header is larger than MILTER_CHUNK_SIZE, @@ -6184,6 +6225,10 @@ char *FFRCompileOptions[] = /* Limit sleep(2) time in libsm/clock.c */ "_FFR_MAX_SLEEP_TIME", #endif /* _FFR_MAX_SLEEP_TIME */ +#if _FFR_MDS_NEGOTIATE + /* MaxDataSize negotation with libmilter */ + "_FFR_MDS_NEGOTIATE", +#endif /* _FFR_MDS_NEGOTIATE */ #if _FFR_MEMSTAT /* Check free memory */ "_FFR_MEMSTAT", @@ -6217,6 +6262,10 @@ char *FFRCompileOptions[] = "_FFR_MILTER_CHECK_REJECTIONS_TOO", #endif /* _FFR_MILTER_CHECK_REJECTIONS_TOO */ +#if _FFR_MILTER_ENHSC + /* extract enhanced status code from milter replies for dsn= logging */ + "_FFR_MILTER_ENHSC", +#endif /* _FFR_MILTER_ENHSC */ #if _FFR_MIME7TO8_OLD /* Old mime7to8 code, the new is broken for at least one example. */ "_FFR_MIME7TO8_OLD", @@ -6270,6 +6319,10 @@ char *FFRCompileOptions[] = /* Debug output for the queue scheduler. */ "_FFR_QUEUE_SCHED_DBG", #endif /* _FFR_QUEUE_SCHED_DBG */ +#if _FFR_RCPTTHROTDELAY + /* configurable delay for BadRcptThrottle */ + "_FFR_RCPTTHROTDELAY" +#endif /* _FFR_RCPTTHROTDELAY */ #if _FFR_REDIRECTEMPTY /* ** envelope <> can't be sent to mailing lists, only owner- @@ -6346,6 +6399,10 @@ char *FFRCompileOptions[] = /* SuperSafe per DaemonPortOptions: 'T' (better letter?) */ "_FFR_SS_PER_DAEMON", #endif /* _FFR_SS_PER_DAEMON */ +#if _FFR_TESTS + /* enable some test code */ + "_FFR_TESTS", +#endif /* _FFR_TESTS */ #if _FFR_TIMERS /* Donated code (unused). */ "_FFR_TIMERS", diff --git a/contrib/sendmail-8.14/sendmail/conf.h b/contrib/sendmail-8.14/sendmail/conf.h index f1386c4b61..dff37ff99f 100644 --- a/contrib/sendmail-8.14/sendmail/conf.h +++ b/contrib/sendmail-8.14/sendmail/conf.h @@ -10,7 +10,7 @@ * the sendmail distribution. * * - * $Id: conf.h,v 8.574 2006/11/29 00:36:06 ca Exp $ + * $Id: conf.h,v 8.575 2009/03/25 20:04:00 ca Exp $ */ /* @@ -123,9 +123,18 @@ struct rusage; /* forward declaration to get gcc to shut up in wait.h */ #define DATA_PROGRESS_TIMEOUT 300 /* how often to check DATA progress */ #define ENHSCLEN 10 /* max len of enhanced status code */ #define DEFAULT_MAX_RCPT 100 /* max number of RCPTs per envelope */ -#define MAXQUEUEGROUPS 50 /* max # of queue groups */ +#ifndef MAXQUEUEGROUPS +# define MAXQUEUEGROUPS 50 /* max # of queue groups */ /* must be less than BITMAPBITS for DoQueueRun */ -#define MAXWORKGROUPS 50 /* max # of work groups */ +#endif /* MAXQUEUEGROUPS */ +#if MAXQUEUEGROUPS >= BITMAPBITS + ERROR _MAXQUEUEGROUPS must be less than _BITMAPBITS +#endif /* MAXQUEUEGROUPS >= BITMAPBITS */ + +#ifndef MAXWORKGROUPS +# define MAXWORKGROUPS 50 /* max # of work groups */ +#endif /* MAXWORKGROUPS */ + #define MAXFILESYS BITMAPBITS /* max # of queue file systems * must be <= BITMAPBITS */ #ifndef FILESYS_UPDATE_INTERVAL diff --git a/contrib/sendmail-8.14/sendmail/daemon.c b/contrib/sendmail-8.14/sendmail/daemon.c index 76b5b58260..983ad2fe3e 100644 --- a/contrib/sendmail-8.14/sendmail/daemon.c +++ b/contrib/sendmail-8.14/sendmail/daemon.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2007 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2007, 2009 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -14,7 +14,7 @@ #include #include "map.h" -SM_RCSID("@(#)$Id: daemon.c,v 8.678 2007/03/08 00:33:40 ca Exp $") +SM_RCSID("@(#)$Id: daemon.c,v 8.683 2009/12/18 01:12:40 ca Exp $") #if defined(SOCK_STREAM) || defined(__GNU_LIBRARY__) # define USE_SOCK_STREAM 1 @@ -199,7 +199,7 @@ getrequests(e) if (tTd(15, 1)) { for (idx = 0; idx < NDaemons; idx++) - sm_dprintf("getrequests: daemon %s: %d\n", + sm_dprintf("getrequests: daemon %s: socket %d\n", Daemons[idx].d_name, Daemons[idx].d_socket); } @@ -1257,7 +1257,8 @@ setupdaemon(daemonaddr) #if NETINET case AF_INET: if (daemonaddr->sin.sin_addr.s_addr == 0) - daemonaddr->sin.sin_addr.s_addr = INADDR_ANY; + daemonaddr->sin.sin_addr.s_addr = + LocalDaemon ? htonl(INADDR_LOOPBACK) : INADDR_ANY; port = daemonaddr->sin.sin_port; break; #endif /* NETINET */ @@ -1265,7 +1266,8 @@ setupdaemon(daemonaddr) #if NETINET6 case AF_INET6: if (IN6_IS_ADDR_UNSPECIFIED(&daemonaddr->sin6.sin6_addr)) - daemonaddr->sin6.sin6_addr = in6addr_any; + daemonaddr->sin6.sin6_addr = + LocalDaemon ? in6addr_loopback : in6addr_any; port = daemonaddr->sin6.sin6_port; break; #endif /* NETINET6 */ @@ -2159,7 +2161,8 @@ makeconnection(host, port, mci, e, enough) case AF_INET: clt_addr.sin.sin_addr.s_addr = inet_addr(p); if (clt_addr.sin.sin_addr.s_addr != INADDR_NONE && - clt_addr.sin.sin_addr.s_addr != INADDR_LOOPBACK) + clt_addr.sin.sin_addr.s_addr != + htonl(INADDR_LOOPBACK)) { clt_bind = true; socksize = sizeof(struct sockaddr_in); @@ -2204,7 +2207,8 @@ makeconnection(host, port, mci, e, enough) #if NETINET case AF_INET: if (clt_addr.sin.sin_addr.s_addr == 0) - clt_addr.sin.sin_addr.s_addr = INADDR_ANY; + clt_addr.sin.sin_addr.s_addr = LocalDaemon ? + htonl(INADDR_LOOPBACK) : INADDR_ANY; else clt_bind = true; if (clt_addr.sin.sin_port != 0) @@ -2215,7 +2219,8 @@ makeconnection(host, port, mci, e, enough) #if NETINET6 case AF_INET6: if (IN6_IS_ADDR_UNSPECIFIED(&clt_addr.sin6.sin6_addr)) - clt_addr.sin6.sin6_addr = in6addr_any; + clt_addr.sin6.sin6_addr = LocalDaemon ? + in6addr_loopback : in6addr_any; else clt_bind = true; socksize = sizeof(struct sockaddr_in6); @@ -2338,7 +2343,7 @@ makeconnection(host, port, mci, e, enough) } } gothostent: - if (hp == NULL) + if (hp == NULL || hp->h_addr == NULL) { #if NAMED_BIND /* check for name server timeouts */ @@ -3274,7 +3279,7 @@ myhostname(hostbuf, size) if (strchr(hostbuf, '.') == NULL && !getcanonname(hostbuf, size, true, NULL)) { - sm_syslog(LOG_CRIT, NOQID, + sm_syslog(LocalDaemon ? LOG_WARNING : LOG_CRIT, NOQID, "My unqualified host name (%s) unknown; sleeping for retry", hostbuf); message("My unqualified host name (%s) unknown; sleeping for retry", @@ -3282,7 +3287,7 @@ myhostname(hostbuf, size) (void) sleep(60); if (!getcanonname(hostbuf, size, true, NULL)) { - sm_syslog(LOG_ALERT, NOQID, + sm_syslog(LocalDaemon ? LOG_WARNING : LOG_ALERT, NOQID, "unable to qualify my own domain name (%s) -- using short name", hostbuf); message("WARNING: unable to qualify my own domain name (%s) -- using short name", diff --git a/contrib/sendmail-8.14/sendmail/deliver.c b/contrib/sendmail-8.14/sendmail/deliver.c index ed60e47a3c..0322c956ef 100644 --- a/contrib/sendmail-8.14/sendmail/deliver.c +++ b/contrib/sendmail-8.14/sendmail/deliver.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2007 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2008 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -14,7 +14,7 @@ #include #include -SM_RCSID("@(#)$Id: deliver.c,v 8.1015 2007/10/17 21:35:30 ca Exp $") +SM_RCSID("@(#)$Id: deliver.c,v 8.1020 2009/12/18 17:08:01 ca Exp $") #if HASSETUSERCONTEXT # include @@ -575,12 +575,12 @@ sendall(e, mode) #endif /* HASFLOCK */ if (e->e_nrcpts > 0) e->e_flags |= EF_INQUEUE; - dropenvelope(e, splitenv != NULL, true); + (void) dropenvelope(e, splitenv != NULL, true); for (ee = splitenv; ee != NULL; ee = ee->e_sibling) { if (ee->e_nrcpts > 0) ee->e_flags |= EF_INQUEUE; - dropenvelope(ee, false, true); + (void) dropenvelope(ee, false, true); } return; @@ -602,7 +602,7 @@ sendall(e, mode) /* now drop the envelope in the parent */ e->e_flags |= EF_INQUEUE; - dropenvelope(e, splitenv != NULL, false); + (void) dropenvelope(e, splitenv != NULL, false); /* arrange to reacquire lock after fork */ e->e_id = qid; @@ -615,7 +615,7 @@ sendall(e, mode) /* drop envelope in parent */ ee->e_flags |= EF_INQUEUE; - dropenvelope(ee, false, false); + (void) dropenvelope(ee, false, false); /* and save qid for reacquisition */ ee->e_id = qid; @@ -762,14 +762,14 @@ sendall(e, mode) } sendenvelope(e, mode); - dropenvelope(e, true, true); + (void) dropenvelope(e, true, true); for (ee = splitenv; ee != NULL; ee = ee->e_sibling) { CurEnv = ee; if (mode != SM_VERIFY) openxscript(ee); sendenvelope(ee, mode); - dropenvelope(ee, true, true); + (void) dropenvelope(ee, true, true); } CurEnv = e; @@ -1391,7 +1391,7 @@ deliver(e, firstto) else p = e->e_from.q_paddr; rpath = remotename(p, m, RF_SENDERADDR|RF_CANONICAL, &rcode, e); - if (strlen(rpath) > MAXSHORTSTR) + if (strlen(rpath) > MAXNAME) { rpath = shortenstring(rpath, MAXSHORTSTR); @@ -2978,7 +2978,7 @@ reconnect: /* after switching to an encrypted connection */ char *s; /* - ** TLS negotation failed, what to do? + ** TLS negotiation failed, what to do? ** fall back to unencrypted connection ** or abort? How to decide? ** set a macro and call a ruleset. @@ -3021,7 +3021,7 @@ reconnect: /* after switching to an encrypted connection */ /* ** rcode == EX_SOFTWARE is special: - ** the TLS negotation failed + ** the TLS negotiation failed ** we have to drop the connection no matter what ** However, we call tls_server to give it the chance ** to log the problem and return an appropriate @@ -6075,8 +6075,9 @@ initclttls(tls_ok) return false; if (clt_ctx != NULL) return true; /* already done */ - tls_ok_clt = inittls(&clt_ctx, TLS_I_CLT, false, CltCertFile, - CltKeyFile, CACertPath, CACertFile, DHParams); + tls_ok_clt = inittls(&clt_ctx, TLS_I_CLT, Clt_SSL_Options, false, + CltCertFile, CltKeyFile, + CACertPath, CACertFile, DHParams); return tls_ok_clt; } @@ -6108,6 +6109,16 @@ starttls(m, mci, e) if (clt_ctx == NULL && !initclttls(true)) return EX_TEMPFAIL; + +# if USE_OPENSSL_ENGINE + if (!SSL_set_engine(NULL)) + { + sm_syslog(LOG_ERR, NOQID, + "STARTTLS=client, SSL_set_engine=failed"); + return EX_TEMPFAIL; + } +# endif /* USE_OPENSSL_ENGINE */ + smtpmessage("STARTTLS", m, mci); /* get the reply */ diff --git a/contrib/sendmail-8.14/sendmail/envelope.c b/contrib/sendmail-8.14/sendmail/envelope.c index 20b0ba22b0..022c3ca8b2 100644 --- a/contrib/sendmail-8.14/sendmail/envelope.c +++ b/contrib/sendmail-8.14/sendmail/envelope.c @@ -13,7 +13,7 @@ #include -SM_RCSID("@(#)$Id: envelope.c,v 8.304 2007/04/18 17:15:49 ca Exp $") +SM_RCSID("@(#)$Id: envelope.c,v 8.310 2009/12/18 17:08:01 ca Exp $") /* ** CLRSESSENVELOPE -- clear session oriented data in an envelope @@ -75,7 +75,7 @@ newenvelope(e, parent, rpool) register ENVELOPE *parent; SM_RPOOL_T *rpool; { - int sendmode, dm; + int sendmode; /* ** This code used to read: @@ -86,16 +86,8 @@ newenvelope(e, parent, rpool) ** This meant macvalue() could go into an infinite loop. */ - dm = DM_NOTSET; if (parent != NULL) - { - char *str; - sendmode = parent->e_sendmode; - str = macvalue(macid("{deliveryMode}"), parent); - if (str != NULL) - dm = (int) str[0]; - } else sendmode = DM_NOTSET; @@ -144,9 +136,7 @@ newenvelope(e, parent, rpool) if (CurEnv->e_xfp != NULL) (void) sm_io_flush(CurEnv->e_xfp, SM_TIME_DEFAULT); if (sendmode != DM_NOTSET) - e->e_sendmode = sendmode; - if (dm != DM_NOTSET) - set_delivery_mode(dm, e); + set_delivery_mode(sendmode, e); return e; } @@ -173,14 +163,14 @@ newenvelope(e, parent, rpool) ** split -- if true, split by recipient if message is queued up ** ** Returns: -** none. +** EX_* status (currently: 0: success, EX_IOERR on panic) ** ** Side Effects: ** housekeeping necessary to dispose of an envelope. ** Unlocks this queue file. */ -void +int dropenvelope(e, fulldrop, split) register ENVELOPE *e; bool fulldrop; @@ -219,12 +209,15 @@ dropenvelope(e, fulldrop, split) /* we must have an id to remove disk files */ if (id == NULL) - return; + return EX_OK; /* if verify-only mode, we can skip most of this */ if (OpMode == MD_VERIFY) goto simpledrop; + if (tTd(92, 2)) + sm_dprintf("dropenvelope: e_id=%s, EF_LOGSENDER=%d, LogLevel=%d\n", + e->e_id, bitset(EF_LOGSENDER, e->e_flags), LogLevel); if (LogLevel > 4 && bitset(EF_LOGSENDER, e->e_flags)) logsender(e, NULL); e->e_flags &= ~EF_LOGSENDER; @@ -628,7 +621,11 @@ simpledrop: } e->e_id = NULL; e->e_flags &= ~EF_HAS_DF; + if (panic) + return EX_IOERR; + return EX_OK; } + /* ** CLEARENVELOPE -- clear an envelope without unlocking ** @@ -724,6 +721,9 @@ clearenvelope(e, fullclear, rpool) bh = bh->h_link; nhp = &(*nhp)->h_link; } +#if _FFR_MILTER_ENHSC + e->e_enhsc[0] = '\0'; +#endif /* _FFR_MILTER_ENHSC */ } /* ** INITSYS -- initialize instantiation of system diff --git a/contrib/sendmail-8.14/sendmail/headers.c b/contrib/sendmail-8.14/sendmail/headers.c index 8e70fed761..c4bdc87700 100644 --- a/contrib/sendmail-8.14/sendmail/headers.c +++ b/contrib/sendmail-8.14/sendmail/headers.c @@ -14,7 +14,7 @@ #include #include -SM_RCSID("@(#)$Id: headers.c,v 8.312 2007/06/19 18:52:11 ca Exp $") +SM_RCSID("@(#)$Id: headers.c,v 8.317 2008/08/27 20:11:55 gshapiro Exp $") static HDR *allocheader __P((char *, char *, int, SM_RPOOL_T *, bool)); static size_t fix_mime_header __P((HDR *, ENVELOPE *)); @@ -715,7 +715,16 @@ hvalue(field, header) { if (!bitset(H_DEFAULT, h->h_flags) && sm_strcasecmp(h->h_field, field) == 0) - return h->h_value; + { + char *s; + + s = h->h_value; + if (s == NULL) + return NULL; + while (isascii(*s) && isspace(*s)) + s++; + return s; + } } return NULL; } @@ -1065,6 +1074,10 @@ eatheader(e, full, log) ** Log collection information. */ + if (tTd(92, 2)) + sm_dprintf("eatheader: e_id=%s, EF_LOGSENDER=%d, LogLevel=%d, log=%d\n", + e->e_id, bitset(EF_LOGSENDER, e->e_flags), LogLevel, + log); if (log && bitset(EF_LOGSENDER, e->e_flags) && LogLevel > 4) { logsender(e, e->e_msgid); diff --git a/contrib/sendmail-8.14/sendmail/main.c b/contrib/sendmail-8.14/sendmail/main.c index 8680add40b..1bbb070dac 100644 --- a/contrib/sendmail-8.14/sendmail/main.c +++ b/contrib/sendmail-8.14/sendmail/main.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2006 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2006, 2008, 2009 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -26,7 +26,7 @@ SM_UNUSED(static char copyright[]) = The Regents of the University of California. All rights reserved.\n"; #endif /* ! lint */ -SM_RCSID("@(#)$Id: main.c,v 8.963 2007/06/29 20:07:37 ca Exp $") +SM_RCSID("@(#)$Id: main.c,v 8.971 2009/12/18 17:08:01 ca Exp $") #if NETINET || NETINET6 @@ -129,7 +129,7 @@ int SyslogPrefixLen; /* estimated length of syslog prefix */ { \ if (extraprivs && \ OpMode != MD_DELIVER && OpMode != MD_SMTP && \ - OpMode != MD_ARPAFTP && \ + OpMode != MD_ARPAFTP && OpMode != MD_CHECKCONFIG && \ OpMode != MD_VERIFY && OpMode != MD_TEST) \ { \ (void) sm_io_fprintf(smioout, SM_TIME_DEFAULT, \ @@ -302,6 +302,9 @@ main(argc, argv, envp) ExitStat = EX_OK; SubmitMode = SUBMIT_UNKNOWN; +#if _FFR_LOCAL_DAEMON + LocalDaemon = false; +#endif /* _FFR_LOCAL_DAEMON */ #if XDEBUG checkfd012("after openlog"); #endif /* XDEBUG */ @@ -398,9 +401,19 @@ main(argc, argv, envp) case MD_HOSTSTAT: case MD_PURGESTAT: case MD_ARPAFTP: +#if _FFR_CHECKCONFIG + case MD_CHECKCONFIG: +#endif /* _FFR_CHECKCONFIG */ OpMode = j; break; +#if _FFR_LOCAL_DAEMON + case MD_LOCAL: + OpMode = MD_DAEMON; + LocalDaemon = true; + break; +#endif /* _FFR_LOCAL_DAEMON */ + case MD_FREEZE: (void) sm_io_fprintf(smioout, SM_TIME_DEFAULT, "Frozen configurations unsupported\n"); @@ -1182,7 +1195,7 @@ main(argc, argv, envp) } /* if we've had errors so far, exit now */ - if ((ExitStat != EX_OK && OpMode != MD_TEST) || + if ((ExitStat != EX_OK && OpMode != MD_TEST && OpMode != MD_CHECKCONFIG) || ExitStat == EX_OSERR) { finis(false, true, ExitStat); @@ -1556,6 +1569,7 @@ main(argc, argv, envp) break; case MD_TEST: + case MD_CHECKCONFIG: case MD_PRINT: case MD_PRINTNQE: case MD_FREEZE: @@ -1616,6 +1630,9 @@ main(argc, argv, envp) case MD_TEST: /* don't have persistent host status in test mode */ HostStatDir = NULL; + /* FALLTHROUGH */ + + case MD_CHECKCONFIG: if (Verbose == 0) Verbose = 2; BlankEnvelope.e_errormode = EM_PRINT; @@ -1923,8 +1940,8 @@ main(argc, argv, envp) } } - /* if we've had errors so far, exit now */ - if (ExitStat != EX_OK && OpMode != MD_TEST) + /* if checking config or have had errors so far, exit now */ + if (OpMode == MD_CHECKCONFIG || (ExitStat != EX_OK && OpMode != MD_TEST)) { finis(false, true, ExitStat); /* NOTREACHED */ @@ -1948,7 +1965,7 @@ main(argc, argv, envp) case MD_PRINT: /* print the queue */ HoldErrs = false; - dropenvelope(&BlankEnvelope, true, false); + (void) dropenvelope(&BlankEnvelope, true, false); (void) sm_signal(SIGPIPE, sigpipe); if (qgrp != NOQGRP) { @@ -1971,7 +1988,7 @@ main(argc, argv, envp) case MD_PRINTNQE: /* print number of entries in queue */ - dropenvelope(&BlankEnvelope, true, false); + (void) dropenvelope(&BlankEnvelope, true, false); (void) sm_signal(SIGPIPE, sigpipe); printnqe(smioout, NULL); finis(false, true, EX_OK); @@ -2123,8 +2140,8 @@ main(argc, argv, envp) else if (OpMode == MD_DAEMON || OpMode == MD_FGDAEMON || OpMode == MD_SMTP) { - /* check whether STARTTLS is turned off for the server */ - if (chkdaemonmodifiers(D_NOTLS)) + /* check whether STARTTLS is turned off */ + if (chkdaemonmodifiers(D_NOTLS) && chkclientmodifiers(D_NOTLS)) tls_ok = false; } else /* other modes don't need STARTTLS */ @@ -2520,7 +2537,7 @@ main(argc, argv, envp) } } } - dropenvelope(&MainEnvelope, true, false); + (void) dropenvelope(&MainEnvelope, true, false); #if STARTTLS /* init TLS for server, ignore result for now */ @@ -2942,7 +2959,11 @@ finis(drop, cleanup, exitstat) { if (CurEnv->e_id != NULL) { - dropenvelope(CurEnv, true, false); + int r; + + r = dropenvelope(CurEnv, true, false); + if (exitstat == EX_OK) + exitstat = r; sm_rpool_free(CurEnv->e_rpool); CurEnv->e_rpool = NULL; diff --git a/contrib/sendmail-8.14/sendmail/map.c b/contrib/sendmail-8.14/sendmail/map.c index 4248fd90f5..be88685bab 100644 --- a/contrib/sendmail-8.14/sendmail/map.c +++ b/contrib/sendmail-8.14/sendmail/map.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2007 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2008 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1992, 1995-1997 Eric P. Allman. All rights reserved. * Copyright (c) 1992, 1993 @@ -13,7 +13,7 @@ #include -SM_RCSID("@(#)$Id: map.c,v 8.699 2007/10/10 00:06:45 ca Exp $") +SM_RCSID("@(#)$Id: map.c,v 8.705 2009/08/11 22:22:40 ca Exp $") #if LDAPMAP # include @@ -730,7 +730,7 @@ getcanonname(host, hbsize, trymx, pttl) int mapno; bool found = false; bool got_tempfail = false; - auto int status; + auto int status = EX_UNAVAILABLE; char *maptype[MAXMAPSTACK]; short mapreturn[MAXMAPACTIONS]; #if defined(SUN_EXTENSIONS) && defined(SUN_INIT_DOMAIN) @@ -1710,7 +1710,7 @@ lockdbm: { map->map_mflags |= MF_OPEN; map->map_pid = CurrentPid; - if ((omode && O_ACCMODE) == O_RDWR) + if ((omode & O_ACCMODE) == O_RDWR) map->map_mflags |= MF_WRITABLE; goto lockdbm; } @@ -2359,7 +2359,7 @@ db_map_lookup(map, name, av, statp) { map->map_mflags |= MF_OPEN; map->map_pid = CurrentPid; - if ((omode && O_ACCMODE) == O_RDWR) + if ((omode & O_ACCMODE) == O_RDWR) map->map_mflags |= MF_WRITABLE; db = (DB *) map->map_db2; goto lockdb; @@ -3415,6 +3415,18 @@ ldapmap_open(map, mode) else id = "localhost"; + if (tTd(74, 104)) + { + extern MAPCLASS NullMapClass; + + /* debug mode: don't actually open an LDAP connection */ + map->map_orgclass = map->map_class; + map->map_class = &NullMapClass; + map->map_mflags |= MF_OPEN; + map->map_pid = CurrentPid; + return true; + } + /* No connection yet, connect */ if (!sm_ldap_start(map->map_mname, lmap)) { @@ -3514,12 +3526,12 @@ sunet_id_hash(str) p_last = p; while (*p != '\0') { - if (islower(*p) || isdigit(*p)) + if (isascii(*p) && (islower(*p) || isdigit(*p))) { *p_last = *p; p_last++; } - else if (isupper(*p)) + else if (isascii(*p) && isupper(*p)) { *p_last = tolower(*p); p_last++; @@ -3967,6 +3979,10 @@ ldapmap_parseargs(map, args) map->map_coldelim = ' '; } +# if _FFR_LDAP_NETWORK_TIMEOUT + lmap->ldap_networktmo = 120; +# endif /* _FFR_LDAP_NETWORK_TIMEOUT */ + for (;;) { while (isascii(*p) && isspace(*p)) @@ -4066,7 +4082,7 @@ ldapmap_parseargs(map, args) case 'c': /* network (connect) timeout */ while (isascii(*++p) && isspace(*p)) continue; - lmap->ldap_networktmo.tv_sec = atoi(p); + lmap->ldap_networktmo = atoi(p); break; # endif /* _FFR_LDAP_NETWORK_TIMEOUT */ @@ -6687,6 +6703,13 @@ null_map_store(map, key, val) return; } +MAPCLASS NullMapClass = +{ + "null-map", NULL, 0, + NULL, null_map_lookup, null_map_store, + null_map_open, null_map_close, +}; + /* ** BOGUS stubs */ @@ -7325,7 +7348,8 @@ arith_map_lookup(map, name, av, statp) if (LogLevel > 10) sm_syslog(LOG_WARNING, NOQID, "arith_map: unknown operator %c", - isprint(*name) ? *name : '?'); + (isascii(*name) && isprint(*name)) ? + *name : '?'); return NULL; } if (boolres) diff --git a/contrib/sendmail-8.14/sendmail/mci.c b/contrib/sendmail-8.14/sendmail/mci.c index ae33f66ce3..277011770b 100644 --- a/contrib/sendmail-8.14/sendmail/mci.c +++ b/contrib/sendmail-8.14/sendmail/mci.c @@ -13,7 +13,7 @@ #include -SM_RCSID("@(#)$Id: mci.c,v 8.218 2006/08/15 23:24:57 ca Exp $") +SM_RCSID("@(#)$Id: mci.c,v 8.221 2007/11/13 23:44:25 gshapiro Exp $") #if NETINET || NETINET6 # include @@ -1143,16 +1143,27 @@ mci_traverse_persistent(action, pathname) pathname, sm_errstring(errno)); return -1; } - len = sizeof(newpath) - MAXNAMLEN - 3; + + /* + ** Reserve space for trailing '/', at least one + ** character, and '\0' + */ + + len = sizeof(newpath) - 3; if (sm_strlcpy(newpath, pathname, len) >= len) { + int save_errno = errno; + if (tTd(56, 2)) sm_dprintf("mci_traverse: path \"%s\" too long", pathname); + (void) closedir(d); + errno = save_errno; return -1; } newptr = newpath + strlen(newpath); *newptr++ = '/'; + len = sizeof(newpath) - (newptr - newpath); /* ** repeat until no file has been removed @@ -1169,9 +1180,17 @@ mci_traverse_persistent(action, pathname) if (e->d_name[0] == '.') continue; - (void) sm_strlcpy(newptr, e->d_name, - sizeof(newpath) - - (newptr - newpath)); + if (sm_strlcpy(newptr, e->d_name, len) >= len) + { + /* Skip truncated copies */ + if (tTd(56, 4)) + { + *newptr = '\0'; + sm_dprintf("mci_traverse: path \"%s%s\" too long", + newpath, e->d_name); + } + continue; + } if (StopRequest) stop_sendmail(); diff --git a/contrib/sendmail-8.14/sendmail/milter.c b/contrib/sendmail-8.14/sendmail/milter.c index 816c7bf7d4..773dfa8f9c 100644 --- a/contrib/sendmail-8.14/sendmail/milter.c +++ b/contrib/sendmail-8.14/sendmail/milter.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999-2006 Sendmail, Inc. and its suppliers. + * Copyright (c) 1999-2009 Sendmail, Inc. and its suppliers. * All rights reserved. * * By using this file, you agree to the terms and conditions set @@ -10,7 +10,7 @@ #include -SM_RCSID("@(#)$Id: milter.c,v 8.269 2007/06/06 17:26:12 ca Exp $") +SM_RCSID("@(#)$Id: milter.c,v 8.277 2009/11/06 00:57:06 ca Exp $") #if MILTER # include @@ -514,7 +514,6 @@ milter_write(m, cmd, buf, len, to, e, where) ENVELOPE *e; const char *where; { - time_t writestart = (time_t) 0; ssize_t sl, i; int num_vectors; mi_int32 nl; @@ -532,12 +531,16 @@ milter_write(m, cmd, buf, len, to, e, where) if (len < 0 || len > MilterMaxDataSize) { if (tTd(64, 5)) - sm_dprintf("milter_write(%s): length %ld out of range\n", - m->mf_name, (long) len); + { + sm_dprintf("milter_write(%s): length %ld out of range, cmd=%c\n", + m->mf_name, (long) len, command); + sm_dprintf("milter_write(%s): buf=%s\n", + m->mf_name, str2prt(buf)); + } if (MilterLogLevel > 0) sm_syslog(LOG_ERR, e->e_id, - "milter_write(%s): length %ld out of range", - m->mf_name, (long) len); + "milter_write(%s): length %ld out of range, cmd=%c", + m->mf_name, (long) len, command); milter_error(m, e); return NULL; } @@ -594,10 +597,7 @@ milter_write(m, cmd, buf, len, to, e, where) } if (to > 0) - { - writestart = curtime(); MILTER_TIMEOUT("write", to, true, started, where); - } /* write the vector(s) */ i = writev(m->mf_sock, vector, num_vectors); @@ -1572,10 +1572,10 @@ static struct milteropt # define MO_LOGLEVEL 0x07 { "loglevel", MO_LOGLEVEL }, -# if _FFR_MAXDATASIZE +# if _FFR_MAXDATASIZE || _FFR_MDS_NEGOTIATE # define MO_MAXDATASIZE 0x08 { "maxdatasize", MO_MAXDATASIZE }, -# endif /* _FFR_MAXDATASIZE */ +# endif /* _FFR_MAXDATASIZE || _FFR_MDS_NEGOTIATE */ { NULL, (unsigned char)-1 }, }; @@ -1631,11 +1631,29 @@ milter_set_option(name, val, sticky) MilterLogLevel = atoi(val); break; -#if _FFR_MAXDATASIZE +# if _FFR_MAXDATASIZE || _FFR_MDS_NEGOTIATE case MO_MAXDATASIZE: +# if _FFR_MDS_NEGOTIATE MilterMaxDataSize = (size_t)atol(val); + if (MilterMaxDataSize != MILTER_MDS_64K && + MilterMaxDataSize != MILTER_MDS_256K && + MilterMaxDataSize != MILTER_MDS_1M) + { + sm_syslog(LOG_WARNING, NOQID, + "WARNING: Milter.%s=%d, allowed are only %d, %d, and %d", + name, MilterMaxDataSize, + MILTER_MDS_64K, MILTER_MDS_256K, + MILTER_MDS_1M); + if (MilterMaxDataSize < MILTER_MDS_64K) + MilterMaxDataSize = MILTER_MDS_64K; + else if (MilterMaxDataSize < MILTER_MDS_256K) + MilterMaxDataSize = MILTER_MDS_256K; + else + MilterMaxDataSize = MILTER_MDS_1M; + } +# endif /* _FFR_MDS_NEGOTIATE */ break; -#endif /* _FFR_MAXDATASIZE */ +# endif /* _FFR_MAXDATASIZE || _FFR_MDS_NEGOTIATE */ case MO_MACROS_CONNECT: if (macros == NULL) @@ -2411,6 +2429,12 @@ milter_negotiate(m, e, milters) mta_prot_flags = SMFI_CURR_PROT; mta_actions = SMFI_CURR_ACTS; #endif /* _FFR_MILTER_CHECK */ +#if _FFR_MDS_NEGOTIATE + if (MilterMaxDataSize == MILTER_MDS_256K) + mta_prot_flags |= SMFIP_MDS_256K; + else if (MilterMaxDataSize == MILTER_MDS_1M) + mta_prot_flags |= SMFIP_MDS_1M; +#endif /* _FFR_MDS_NEGOTIATE */ fvers = htonl(mta_prot_vers); pflags = htonl(mta_prot_flags); @@ -2525,6 +2549,39 @@ milter_negotiate(m, e, milters) goto error; } +#if _FFR_MDS_NEGOTIATE + /* use a table instead of sequence? */ + if (bitset(SMFIP_MDS_1M, m->mf_pflags)) + { + if (MilterMaxDataSize != MILTER_MDS_1M) + { + /* this should not happen... */ + sm_syslog(LOG_WARNING, NOQID, + "WARNING: Milter.maxdatasize: configured=%d, set by libmilter=%d", + MilterMaxDataSize, MILTER_MDS_1M); + MilterMaxDataSize = MILTER_MDS_1M; + } + } + else if (bitset(SMFIP_MDS_256K, m->mf_pflags)) + { + if (MilterMaxDataSize != MILTER_MDS_256K) + { + sm_syslog(LOG_WARNING, NOQID, + "WARNING: Milter.maxdatasize: configured=%d, set by libmilter=%d", + MilterMaxDataSize, MILTER_MDS_256K); + MilterMaxDataSize = MILTER_MDS_256K; + } + } + else if (MilterMaxDataSize != MILTER_MDS_64K) + { + sm_syslog(LOG_WARNING, NOQID, + "WARNING: Milter.maxdatasize: configured=%d, set by libmilter=%d", + MilterMaxDataSize, MILTER_MDS_64K); + MilterMaxDataSize = MILTER_MDS_64K; + } + m->mf_pflags &= ~SMFI_INTERNAL; +#endif /* _FFR_MDS_NEGOTIATE */ + /* check for protocol feature mismatch */ if ((m->mf_pflags & mta_prot_flags) != m->mf_pflags) { @@ -2976,7 +3033,7 @@ milter_addheader(m, response, rlen, e) h->h_value = mh_value; else { - h->h_value = addleadingspace (mh_value, e->e_rpool); + h->h_value = addleadingspace(mh_value, e->e_rpool); SM_FREE(mh_value); } h->h_flags |= H_USER; @@ -3277,7 +3334,7 @@ milter_changeheader(m, response, rlen, e) h->h_value = mh_value; else { - h->h_value = addleadingspace (mh_value, e->e_rpool); + h->h_value = addleadingspace(mh_value, e->e_rpool); SM_FREE(mh_value); } h->h_flags |= H_USER; @@ -3330,7 +3387,7 @@ milter_split_response(response, rlen, pargc) return NULL; /* last entry is only for the name */ - s = (char **)malloc(nelem * (sizeof(*s))); + s = (char **)malloc((nelem + 1) * (sizeof(*s))); if (s == NULL) return NULL; s[0] = response; @@ -3813,7 +3870,7 @@ milter_init(e, state, milters) m->mf_sock < 0 ? "open" : "negotiate"); - /* if negotation failure, close socket */ + /* if negotiation failure, close socket */ milter_error(m, e); MILTER_CHECK_ERROR(true, continue); continue; @@ -4383,7 +4440,7 @@ milter_data(e, state) response = milter_read(m, &rcmd, &rlen, m->mf_timeout[SMFTO_READ], e, - "body"); + "eom"); if (m->mf_state == SMFS_ERROR) break; diff --git a/contrib/sendmail-8.14/sendmail/parseaddr.c b/contrib/sendmail-8.14/sendmail/parseaddr.c index eca60f984c..19bcf739bd 100644 --- a/contrib/sendmail-8.14/sendmail/parseaddr.c +++ b/contrib/sendmail-8.14/sendmail/parseaddr.c @@ -13,7 +13,7 @@ #include -SM_RCSID("@(#)$Id: parseaddr.c,v 8.401 2007/09/27 23:33:59 ca Exp $") +SM_RCSID("@(#)$Id: parseaddr.c,v 8.403 2008/02/08 02:27:35 ca Exp $") #include #include "map.h" @@ -1460,6 +1460,7 @@ rewrite(pvp, ruleset, reclevel, e, maxatom) size_t trsize; char *replac; int endtoken; + bool external; STAB *map; char *mapname; char **key_rvp; @@ -1575,6 +1576,7 @@ rewrite(pvp, ruleset, reclevel, e, maxatom) true); argvect[0] = cbuf; replac = map_lookup(map, cbuf, argvect, &rstat, e); + external = replac != NULL; /* if no replacement, use default */ if (replac == NULL && default_rvp != NULL) @@ -1599,7 +1601,8 @@ rewrite(pvp, ruleset, reclevel, e, maxatom) { /* scan the new replacement */ xpvp = prescan(replac, '\0', pvpbuf, - sizeof(pvpbuf), NULL, NULL, + sizeof(pvpbuf), NULL, + external ? NULL : IntTokenTab, false); if (xpvp == NULL) { @@ -2263,7 +2266,7 @@ cataddr(pvp, evp, buf, sz, spacesub, external) { char *q; - natomtok = (ExtTokenTab[**pvp & 0xff] == ATM); + natomtok = (IntTokenTab[**pvp & 0xff] == ATM); if (oatomtok && natomtok) { *p++ = spacesub; diff --git a/contrib/sendmail-8.14/sendmail/queue.c b/contrib/sendmail-8.14/sendmail/queue.c index e80a0357b9..194f5250d6 100644 --- a/contrib/sendmail-8.14/sendmail/queue.c +++ b/contrib/sendmail-8.14/sendmail/queue.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2007 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2009 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -14,7 +14,7 @@ #include #include -SM_RCSID("@(#)$Id: queue.c,v 8.975 2007/06/18 20:08:40 ca Exp $") +SM_RCSID("@(#)$Id: queue.c,v 8.987 2009/12/18 17:08:01 ca Exp $") #include @@ -134,7 +134,7 @@ static const char EmptyString[] = ""; static void grow_wlist __P((int, int)); static int multiqueue_cache __P((char *, int, QUEUEGRP *, int, unsigned int *)); -static int gatherq __P((int, int, bool, bool *, bool *)); +static int gatherq __P((int, int, bool, bool *, bool *, int *)); static int sortq __P((int)); static void printctladdr __P((ADDRESS *, SM_FILE_T *)); static bool readqf __P((ENVELOPE *, bool)); @@ -2106,7 +2106,7 @@ run_work_group(wgrp, flags) for (i = 0; i < Queue[qgrp]->qg_numqueues; i++) { - h = gatherq(qgrp, qdir, false, &full, &more); + (void) gatherq(qgrp, qdir, false, &full, &more, &h); #if SM_CONF_SHM if (ShmId != SM_SHM_NO_ID) QSHM_ENTRIES(Queue[qgrp]->qg_qpaths[qdir].qp_idx) = h; @@ -2450,6 +2450,7 @@ runqueueevent(ignore) ** full -- (optional) to be set 'true' if WorkList is full ** more -- (optional) to be set 'true' if there are still more ** messages in this queue not added to WorkList +** pnentries -- (optional) total nuber of entries in queue ** ** Returns: ** The number of request in the queue (not necessarily @@ -2472,25 +2473,26 @@ static int WorkListSize = 0; /* current max size of WorkList */ static int WorkListCount = 0; /* # of work items in WorkList */ static int -gatherq(qgrp, qdir, doall, full, more) +gatherq(qgrp, qdir, doall, full, more, pnentries) int qgrp; int qdir; bool doall; bool *full; bool *more; + int *pnentries; { register struct dirent *d; register WORK *w; register char *p; DIR *f; - int i, num_ent; - int wn; + int i, num_ent, wn, nentries; QUEUE_CHAR *check; char qd[MAXPATHLEN]; char qf[MAXPATHLEN]; wn = WorkListCount - 1; num_ent = 0; + nentries = 0; if (qdir == NOQDIR) (void) sm_strlcpy(qd, ".", sizeof(qd)); else @@ -2600,6 +2602,7 @@ gatherq(qgrp, qdir, doall, full, more) continue; } + ++nentries; check = QueueLimitId; while (check != NULL) { @@ -2855,6 +2858,21 @@ gatherq(qgrp, qdir, doall, full, more) break; case 'K': +#if _FFR_EXPDELAY + if (MaxQueueAge > 0) + { + time_t lasttry, delay; + + lasttry = (time_t) atol(&lbuf[1]); + delay = MIN(lasttry - w->w_ctime, + MaxQueueAge); + age = curtime() - lasttry; + if (age < delay) + w->w_tooyoung = true; + break; + } +#endif /* _FFR_EXPDELAY */ + age = curtime() - (time_t) atol(&lbuf[1]); if (age >= 0 && MinQueueAge > 0 && age < MinQueueAge) @@ -2900,6 +2918,8 @@ gatherq(qgrp, qdir, doall, full, more) *full = (wn >= MaxQueueRun && MaxQueueRun > 0) || (WorkList == NULL && wn > 0); + if (pnentries != NULL) + *pnentries = nentries; return i; } /* @@ -3331,8 +3351,8 @@ workcmpf4(a, b) ** WORKCMPF5 -- compare based on assigned random number ** ** Parameters: -** a -- the first argument (ignored). -** b -- the second argument (ignored). +** a -- the first argument. +** b -- the second argument. ** ** Returns: ** randomly 1/-1 @@ -3682,7 +3702,7 @@ dowork(qgrp, qdir, id, forkflag, requeueflag, e) finis(true, true, ExitStat); else { - dropenvelope(e, true, false); + (void) dropenvelope(e, true, false); sm_rpool_free(rpool); e->e_rpool = NULL; } @@ -3859,7 +3879,7 @@ doworklist(el, forkflag, requeueflag) /* do the delivery */ sendall(&e, SM_DELIVER); - dropenvelope(&e, true, false); + (void) dropenvelope(&e, true, false); } else { @@ -4514,7 +4534,7 @@ readqf(e, openonly) (void) sm_io_close(qfp, SM_TIME_DEFAULT); return false; } - + #if _FFR_QF_PARANOIA /* Check to make sure key fields were read */ if (e->e_from.q_mailer == NULL) @@ -4834,7 +4854,7 @@ print_single_queue(qgrp, qdir) ** Read and order the queue. */ - nrequests = gatherq(qgrp, qdir, true, NULL, NULL); + nrequests = gatherq(qgrp, qdir, true, NULL, NULL, NULL); (void) sortq(Queue[qgrp]->qg_maxlist); /* @@ -5332,31 +5352,31 @@ static const char QueueIdChars[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefgh */ # define queuenextid() CurrentPid - +#define QIC_LEN_SQR (QIC_LEN * QIC_LEN) void assign_queueid(e) register ENVELOPE *e; { pid_t pid = queuenextid(); - static int cX = 0; - static long random_offset; + static unsigned int cX = 0; + static unsigned int random_offset; struct tm *tm; char idbuf[MAXQFNAME - 2]; - int seq; + unsigned int seq; if (e->e_id != NULL) return; /* see if we need to get a new base time/pid */ - if (cX >= QIC_LEN * QIC_LEN || LastQueueTime == 0 || - LastQueuePid != pid) + if (cX >= QIC_LEN_SQR || LastQueueTime == 0 || LastQueuePid != pid) { time_t then = LastQueueTime; /* if the first time through, pick a random offset */ if (LastQueueTime == 0) - random_offset = get_random(); + random_offset = ((unsigned int)get_random()) + % QIC_LEN_SQR; while ((LastQueueTime = curtime()) == then && LastQueuePid == pid) @@ -5368,16 +5388,16 @@ assign_queueid(e) } /* - ** Generate a new sequence number between 0 and QIC_LEN*QIC_LEN-1. - ** This lets us generate up to QIC_LEN*QIC_LEN unique queue ids + ** Generate a new sequence number between 0 and QIC_LEN_SQR-1. + ** This lets us generate up to QIC_LEN_SQR unique queue ids ** per second, per process. With envelope splitting, ** a single message can consume many queue ids. */ - seq = (int)((cX + random_offset) % (QIC_LEN * QIC_LEN)); + seq = (cX + random_offset) % QIC_LEN_SQR; ++cX; if (tTd(7, 50)) - sm_dprintf("assign_queueid: random_offset = %ld (%d)\n", + sm_dprintf("assign_queueid: random_offset=%u (%u)\n", random_offset, seq); tm = gmtime(&LastQueueTime); @@ -5430,6 +5450,7 @@ sync_queue_time() { #if FAST_PID_RECYCLE if (OpMode != MD_TEST && + OpMode != MD_CHECKCONFIG && OpMode != MD_VERIFY && LastQueueTime > 0 && LastQueuePid == CurrentPid && @@ -5740,6 +5761,10 @@ pickqdir(qg, fsize, e) else qdir = get_rand_mod(qg->qg_numqueues); +#if _FFR_TESTS + if (tTd(4, 101)) + return NOQDIR; +#endif /* _FFR_TESTS */ if (MinBlocksFree <= 0 && fsize <= 0) return qdir; @@ -6596,10 +6621,20 @@ init_sem(owner) if (SemId < 0) { sm_syslog(LOG_ERR, NOQID, - "func=init_sem, sem_key=%ld, sm_sem_start=%d", - (long) SemKey, SemId); + "func=init_sem, sem_key=%ld, sm_sem_start=%d, error=%s", + (long) SemKey, SemId, sm_errstring(-SemId)); return; } + if (owner && RunAsUid != 0) + { + int r; + + r = sm_semsetowner(SemId, RunAsUid, RunAsGid, 0660); + if (r != 0) + sm_syslog(LOG_ERR, NOQID, + "key=%ld, sm_semsetowner=%d, RunAsUid=%d, RunAsGid=%d", + (long) SemKey, r, RunAsUid, RunAsGid); + } #endif /* SM_CONF_SEM */ #endif /* _FFR_USE_SEM_LOCKING */ return; @@ -8826,7 +8861,7 @@ quarantine_queue(reason, qgrplimit) if (StopRequest) stop_sendmail(); - nrequests = gatherq(qgrp, qdir, true, NULL, NULL); + nrequests = gatherq(qgrp, qdir, true, NULL, NULL, NULL); /* first see if there is anything */ if (nrequests <= 0) diff --git a/contrib/sendmail-8.14/sendmail/ratectrl.c b/contrib/sendmail-8.14/sendmail/ratectrl.c index 22f9803efb..773955a6db 100644 --- a/contrib/sendmail-8.14/sendmail/ratectrl.c +++ b/contrib/sendmail-8.14/sendmail/ratectrl.c @@ -45,7 +45,7 @@ */ #include -SM_RCSID("@(#)$Id: ratectrl.c,v 8.11 2006/08/15 23:24:57 ca Exp $") +SM_RCSID("@(#)$Id: ratectrl.c,v 8.13 2009/05/05 23:19:34 ca Exp $") /* ** stuff included - given some warnings (inet_ntoa) @@ -69,9 +69,6 @@ SM_RCSID("@(#)$Id: ratectrl.c,v 8.11 2006/08/15 23:24:57 ca Exp $") /* forward declarations */ static int client_rate __P((time_t, SOCKADDR *, bool)); static int total_rate __P((time_t, bool)); -#if 0 -static int sockaddrcmp __P((SOCKADDR *, SOCKADDR *)); -#endif /* 0 */ /* ** CONNECTION_RATE_CHECK - updates connection history data @@ -114,7 +111,7 @@ connection_rate_check(hostaddr, e) /* update server connection rate */ totalrate = total_rate(now, e == NULL); #if RATECTL_DEBUG - sm_syslog(LOG_INFO, NOQID, "global connection rate: %d", globalRate); + sm_syslog(LOG_INFO, NOQID, "global connection rate: %d", totalrate); #endif /* RATECTL_DEBUG */ /* update client connection rate */ @@ -485,50 +482,3 @@ total_rate(now, update) return cnt; } - -#if 0 -/* -** SOCKADDRCMP - compare two SOCKADDR structures -** this function may be used to compare SOCKADDR -** structures when using bsearch and qsort functions -** in the same way we do with strcmp -** -** Parameters: -** a, b - addresses -** -** Returns: -** 1 if a > b -** -1 if a < b -** 0 if a = b -** -** OBS: This call isn't used at the moment, it will -** be used when code will be extended to work with IPV6 -*/ - -static int -sockaddrcmp(a, b) - SOCKADDR *a; - SOCKADDR *b; -{ - if (a->sa.sa_family > b->sa.sa_family) - return 1; - if (a->sa.sa_family < b->sa.sa_family) - return -1; - - switch (a->sa.sa_family) - { - case AF_INET: - if (a->sin.sin_addr.s_addr > b->sin.sin_addr.s_addr) - return 1; - if (a->sin.sin_addr.s_addr < b->sin.sin_addr.s_addr) - return -1; - return 0; - break; - - case AF_INET6: - /* TO BE DONE */ - break; - } - return 0; -} -#endif /* 0 */ diff --git a/contrib/sendmail-8.14/sendmail/readcf.c b/contrib/sendmail-8.14/sendmail/readcf.c index 0d0849b18d..c6d48a8cfe 100644 --- a/contrib/sendmail-8.14/sendmail/readcf.c +++ b/contrib/sendmail-8.14/sendmail/readcf.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2006 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2006, 2008, 2009 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -14,7 +14,7 @@ #include #include -SM_RCSID("@(#)$Id: readcf.c,v 8.664 2007/07/10 17:01:22 ca Exp $") +SM_RCSID("@(#)$Id: readcf.c,v 8.674 2009/10/26 17:47:00 ca Exp $") #if NETINET || NETINET6 # include @@ -113,6 +113,9 @@ readcf(cfname, safe, e) FileName = cfname; LineNumber = 0; +#if STARTTLS + Srv_SSL_Options = Clt_SSL_Options = SSL_OP_ALL; +#endif /* STARTTLS */ if (DontLockReadFiles) sff |= SFF_NOLOCK; cf = safefopen(cfname, O_RDONLY, 0444, sff); @@ -136,7 +139,7 @@ readcf(cfname, safe, e) if (OpMode != MD_TEST && bitset(S_IWGRP|S_IWOTH, statb.st_mode)) { - if (OpMode == MD_DAEMON || OpMode == MD_INITALIAS) + if (OpMode == MD_DAEMON || OpMode == MD_INITALIAS || OpMode == MD_CHECKCONFIG) (void) sm_io_fprintf(smioerr, SM_TIME_DEFAULT, "%s: WARNING: dangerous write permissions\n", FileName); @@ -462,7 +465,7 @@ readcf(cfname, safe, e) rwp = RewriteRules[ruleset]; if (rwp != NULL) { - if (OpMode == MD_TEST) + if (OpMode == MD_TEST || OpMode == MD_CHECKCONFIG) (void) sm_io_fprintf(smioout, SM_TIME_DEFAULT, "WARNING: Ruleset %s has multiple definitions\n", @@ -534,7 +537,6 @@ readcf(cfname, safe, e) p++; while (isascii(*p) && isspace(*p)) p++; - file = p; } else optional = false; @@ -2249,10 +2251,107 @@ static struct optioninfo # define O_ADDR_TYPE_MODES 0xe0 { "AddrTypeModes", O_ADDR_TYPE_MODES, OI_NONE }, #endif /* _FFR_ADDR_TYPE_MODES */ +#if _FFR_BADRCPT_SHUTDOWN +# define O_RCPTSHUTD 0xe1 + { "BadRcptShutdown", O_RCPTSHUTD, OI_SAFE }, +# define O_RCPTSHUTDG 0xe2 + { "BadRcptShutdownGood", O_RCPTSHUTDG, OI_SAFE }, +#endif /* _FFR_BADRCPT_SHUTDOWN */ +#if STARTTLS && _FFR_TLS_1 +# define O_SRV_SSL_OPTIONS 0xe3 + { "ServerSSLOptions", O_SRV_SSL_OPTIONS, OI_NONE }, +# define O_CLT_SSL_OPTIONS 0xe4 + { "ClientSSLOptions", O_CLT_SSL_OPTIONS, OI_NONE }, +#endif /* STARTTLS && _FFR_TLS_1 */ +#if _FFR_EXPDELAY +# define O_MAX_QUEUE_AGE 0xe5 + { "MaxQueueAge", O_MAX_QUEUE_AGE, OI_NONE }, +#endif /* _FFR_EXPDELAY */ +#if _FFR_RCPTTHROTDELAY +# define O_RCPTTHROTDELAY 0xe6 + { "BadRcptThrottleDelay", O_RCPTTHROTDELAY, OI_SAFE }, +#endif /* _FFR_RCPTTHROTDELAY */ { NULL, '\0', OI_NONE } }; +#if STARTTLS && _FFR_TLS_1 +static struct ssl_options +{ + const char *sslopt_name; /* name of the flag */ + long sslopt_bits; /* bits to set/clear */ +} SSL_Option[] = +{ +/* these are turned on by default */ +#ifdef SSL_OP_MICROSOFT_SESS_ID_BUG + { "SSL_OP_MICROSOFT_SESS_ID_BUG", SSL_OP_MICROSOFT_SESS_ID_BUG }, +#endif /* SSL_OP_MICROSOFT_SESS_ID_BUG */ +#ifdef SSL_OP_NETSCAPE_CHALLENGE_BUG + { "SSL_OP_NETSCAPE_CHALLENGE_BUG", SSL_OP_NETSCAPE_CHALLENGE_BUG }, +#endif /* SSL_OP_NETSCAPE_CHALLENGE_BUG */ +#ifdef SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG + { "SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG", SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG }, +#endif /* SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG */ +#ifdef SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG + { "SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG", SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG }, +#endif /* SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG */ +#ifdef SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER + { "SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER", SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER }, +#endif /* SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER */ +#ifdef SSL_OP_MSIE_SSLV2_RSA_PADDING + { "SSL_OP_MSIE_SSLV2_RSA_PADDING", SSL_OP_MSIE_SSLV2_RSA_PADDING }, +#endif /* SSL_OP_MSIE_SSLV2_RSA_PADDING */ +#ifdef SSL_OP_SSLEAY_080_CLIENT_DH_BUG + { "SSL_OP_SSLEAY_080_CLIENT_DH_BUG", SSL_OP_SSLEAY_080_CLIENT_DH_BUG }, +#endif /* SSL_OP_SSLEAY_080_CLIENT_DH_BUG */ +#ifdef SSL_OP_TLS_D5_BUG + { "SSL_OP_TLS_D5_BUG", SSL_OP_TLS_D5_BUG }, +#endif /* SSL_OP_TLS_D5_BUG */ +#ifdef SSL_OP_TLS_BLOCK_PADDING_BUG + { "SSL_OP_TLS_BLOCK_PADDING_BUG", SSL_OP_TLS_BLOCK_PADDING_BUG }, +#endif /* SSL_OP_TLS_BLOCK_PADDING_BUG */ +#ifdef SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS + { "SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS", SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS }, +#endif /* SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS */ + { "SSL_OP_ALL", SSL_OP_ALL }, +#ifdef SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION + { "SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION", SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION }, +#endif /* SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION */ +#ifdef SSL_OP_EPHEMERAL_RSA + { "SSL_OP_EPHEMERAL_RSA", SSL_OP_EPHEMERAL_RSA }, +#endif /* SSL_OP_EPHEMERAL_RSA */ +#ifdef SSL_OP_CIPHER_SERVER_PREFERENCE + { "SSL_OP_CIPHER_SERVER_PREFERENCE", SSL_OP_CIPHER_SERVER_PREFERENCE }, +#endif /* SSL_OP_CIPHER_SERVER_PREFERENCE */ +#ifdef SSL_OP_TLS_ROLLBACK_BUG + { "SSL_OP_TLS_ROLLBACK_BUG", SSL_OP_TLS_ROLLBACK_BUG }, +#endif /* SSL_OP_TLS_ROLLBACK_BUG */ +#ifdef SSL_OP_NO_SSLv2 + { "SSL_OP_NO_SSLv2", SSL_OP_NO_SSLv2 }, +#endif /* SSL_OP_NO_SSLv2 */ +#ifdef SSL_OP_NO_SSLv3 + { "SSL_OP_NO_SSLv3", SSL_OP_NO_SSLv3 }, +#endif /* SSL_OP_NO_SSLv3 */ +#ifdef SSL_OP_NO_TLSv1 + { "SSL_OP_NO_TLSv1", SSL_OP_NO_TLSv1 }, +#endif /* SSL_OP_NO_TLSv1 */ +#ifdef SSL_OP_PKCS1_CHECK_1 + { "SSL_OP_PKCS1_CHECK_1", SSL_OP_PKCS1_CHECK_1 }, +#endif /* SSL_OP_PKCS1_CHECK_1 */ +#ifdef SSL_OP_PKCS1_CHECK_2 + { "SSL_OP_PKCS1_CHECK_2", SSL_OP_PKCS1_CHECK_2 }, +#endif /* SSL_OP_PKCS1_CHECK_2 */ +#ifdef SSL_OP_NETSCAPE_CA_DN_BUG + { "SSL_OP_NETSCAPE_CA_DN_BUG", SSL_OP_NETSCAPE_CA_DN_BUG }, +#endif /* SSL_OP_NETSCAPE_CA_DN_BUG */ +#ifdef SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG + { "SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG", SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG }, +#endif /* SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG */ + { NULL, 0 } +}; +#endif /* STARTTLS && _FFR_TLS_1 */ + + # define CANONIFY(val) # define SET_OPT_DEFAULT(opt, val) opt = val @@ -2293,6 +2392,9 @@ setoption(opt, val, safe, sticky, e) char *newval; char exbuf[MAXLINE]; #endif /* STARTTLS || SM_CONF_SHM */ +#if STARTTLS && _FFR_TLS_1 + long *pssloptions = NULL; +#endif /* STARTTLS && _FFR_TLS_1 */ errno = 0; if (opt == ' ') @@ -2989,6 +3091,12 @@ setoption(opt, val, safe, sticky, e) MinQueueAge = convtime(val, 'm'); break; +#if _FFR_EXPDELAY + case O_MAX_QUEUE_AGE: + MaxQueueAge = convtime(val, 'm'); + break; +#endif /* _FFR_EXPDELAY */ + case O_DEFCHARSET: /* default character set for mimefying */ DefaultCharSet = newstr(denlstring(val, true, true)); break; @@ -3311,6 +3419,12 @@ setoption(opt, val, safe, sticky, e) BadRcptThrottle = atoi(val); break; +#if _FFR_RCPTTHROTDELAY + case O_RCPTTHROTDELAY: + BadRcptThrottleDelay = atoi(val); + break; +#endif /* _FFR_RCPTTHROTDELAY */ + case O_DEADLETTER: CANONIFY(val); PSTRSET(DeadLetterDrop, val); @@ -3572,7 +3686,51 @@ setoption(opt, val, safe, sticky, e) SET_STRING_EXP(DHParams5); case O_CIPHERLIST: SET_STRING_EXP(CipherList); + case O_SRV_SSL_OPTIONS: + pssloptions = &Srv_SSL_Options; + case O_CLT_SSL_OPTIONS: + if (pssloptions == NULL) + pssloptions = &Clt_SSL_Options; + for (p = val; *p != 0; ) + { + bool clearmode; + char *q; + struct ssl_options *sslopts; + + while (*p == ' ') + p++; + if (*p == '\0') + break; + clearmode = false; + if (*p == '-' || *p == '+') + clearmode = *p++ == '-'; + q = p; + while (*p != '\0' && !(isascii(*p) && isspace(*p))) + p++; + if (*p != '\0') + *p++ = '\0'; + for (sslopts = SSL_Option; + sslopts->sslopt_name != NULL; sslopts++) + { + if (sm_strcasecmp(q, sslopts->sslopt_name) == 0) + break; + } + if (sslopts->sslopt_name == NULL) + { + errno = 0; + syserr("readcf: %s option value %s unrecognized", + o->o_name, q); + } + else if (clearmode) + *pssloptions &= ~sslopts->sslopt_bits; + else + *pssloptions |= sslopts->sslopt_bits; + } + pssloptions = NULL; + break; + # endif /* _FFR_TLS_1 */ + case O_CRLFILE: # if OPENSSL_VERSION_NUMBER > 0x00907000L SET_STRING_EXP(CRLFile); @@ -3817,6 +3975,16 @@ setoption(opt, val, safe, sticky, e) break; #endif /* _FFR_ADDR_TYPE_MODES */ +#if _FFR_BADRCPT_SHUTDOWN + case O_RCPTSHUTD: + BadRcptShutdown = atoi(val); + break; + + case O_RCPTSHUTDG: + BadRcptShutdownGood = atoi(val); + break; +#endif /* _FFR_BADRCPT_SHUTDOWN */ + default: if (tTd(37, 1)) { @@ -4010,8 +4178,7 @@ strtorwset(p, endp, stabmode) char *q = NULL; q = p; - while (*p != '\0' && isascii(*p) && - (isalnum(*p) || *p == '_')) + while (*p != '\0' && isascii(*p) && (isalnum(*p) || *p == '_')) p++; if (q == p || !(isascii(*q) && isalpha(*q))) { diff --git a/contrib/sendmail-8.14/sendmail/savemail.c b/contrib/sendmail-8.14/sendmail/savemail.c index cf72e8d497..4178245cc5 100644 --- a/contrib/sendmail-8.14/sendmail/savemail.c +++ b/contrib/sendmail-8.14/sendmail/savemail.c @@ -13,7 +13,7 @@ #include -SM_RCSID("@(#)$Id: savemail.c,v 8.313 2006/11/29 00:20:41 ca Exp $") +SM_RCSID("@(#)$Id: savemail.c,v 8.314 2009/12/18 17:08:01 ca Exp $") static bool errbody __P((MCI *, ENVELOPE *, char *)); static bool pruneroute __P((char *)); @@ -705,7 +705,7 @@ returntosender(msg, returnq, flags, e) sendall(ee, SM_DELIVER); /* restore state */ - dropenvelope(ee, true, false); + (void) dropenvelope(ee, true, false); sm_rpool_free(ee->e_rpool); CurEnv = oldcur; returndepth--; diff --git a/contrib/sendmail-8.14/sendmail/sendmail.0 b/contrib/sendmail-8.14/sendmail/sendmail.0 index 060ed242f6..ccf9ad945f 100644 --- a/contrib/sendmail-8.14/sendmail/sendmail.0 +++ b/contrib/sendmail-8.14/sendmail/sendmail.0 @@ -457,9 +457,11 @@ SSEEEE AALLSSOO http://www.sendmail.org/ + US Patent Numbers 6865671, 6986037. + HHIISSTTOORRYY The sseennddmmaaiill command appeared in 4.2BSD. - $Date: 2007/08/02 05:42:33 $ SENDMAIL(8) + $Date: 2009/04/10 17:49:19 $ SENDMAIL(8) diff --git a/contrib/sendmail-8.14/sendmail/sendmail.8 b/contrib/sendmail-8.14/sendmail/sendmail.8 index 27b44d62ea..691fa74a50 100644 --- a/contrib/sendmail-8.14/sendmail/sendmail.8 +++ b/contrib/sendmail-8.14/sendmail/sendmail.8 @@ -9,9 +9,9 @@ .\" the sendmail distribution. .\" .\" -.\" $Id: sendmail.8,v 8.58 2007/08/02 05:42:33 ca Exp $ +.\" $Id: sendmail.8,v 8.59 2009/04/10 17:49:19 gshapiro Exp $ .\" -.TH SENDMAIL 8 "$Date: 2007/08/02 05:42:33 $" +.TH SENDMAIL 8 "$Date: 2009/04/10 17:49:19 $" .SH NAME sendmail \- an electronic mail transport agent @@ -741,6 +741,8 @@ Internet Request For Comments No. 8, SMM. .PP http://www.sendmail.org/ +.PP +US Patent Numbers 6865671, 6986037. .SH HISTORY The .B sendmail diff --git a/contrib/sendmail-8.14/sendmail/sendmail.h b/contrib/sendmail-8.14/sendmail/sendmail.h index 82ab6a9d93..b170c2bbb3 100644 --- a/contrib/sendmail-8.14/sendmail/sendmail.h +++ b/contrib/sendmail-8.14/sendmail/sendmail.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2007 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2009 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -52,7 +52,7 @@ #ifdef _DEFINE # ifndef lint -SM_UNUSED(static char SmailId[]) = "@(#)$Id: sendmail.h,v 8.1052 2007/10/05 23:06:30 ca Exp $"; +SM_UNUSED(static char SmailId[]) = "@(#)$Id: sendmail.h,v 8.1068 2009/12/18 17:08:01 ca Exp $"; # endif /* ! lint */ #endif /* _DEFINE */ @@ -607,7 +607,7 @@ extern bool filesys_free __P((long)); ERROR: change SASL_SEC_MASK_ notify sendmail.org! # endif /* SASL_SEC_NOPLAINTEXT & SASL_SEC_MASK) == 0 ... */ # endif /* SASL >= 20101 */ -# define MAXOUTLEN 8192 /* length of output buffer */ +# define MAXOUTLEN 8192 /* length of output buffer, should be 2^n */ /* functions */ extern char *intersect __P((char *, char *, SM_RPOOL_T *)); @@ -931,6 +931,10 @@ struct envelope int e_dlvr_flag; /* deliver by flag */ SM_RPOOL_T *e_rpool; /* resource pool for this envelope */ unsigned int e_features; /* server features */ +#if _FFR_MILTER_ENHSC +#define ENHSC_LEN 11 + char e_enhsc[ENHSC_LEN]; /* enhanced status code */ +#endif /* _FFR_MILTER_ENHSC */ }; /* values for e_flags */ @@ -982,7 +986,7 @@ extern ENVELOPE BlankEnvelope; /* functions */ extern void clearenvelope __P((ENVELOPE *, bool, SM_RPOOL_T *)); -extern void dropenvelope __P((ENVELOPE *, bool, bool)); +extern int dropenvelope __P((ENVELOPE *, bool, bool)); extern ENVELOPE *newenvelope __P((ENVELOPE *, ENVELOPE *, SM_RPOOL_T *)); extern void clrsessenvelope __P((ENVELOPE *)); extern void printenvflags __P((ENVELOPE *)); @@ -1551,6 +1555,7 @@ extern void stabapply __P((void (*)(STAB *, int), int)); #define MD_ARPAFTP 'a' /* obsolete ARPANET mode (Grey Book) */ #define MD_DAEMON 'd' /* run as a daemon */ #define MD_FGDAEMON 'D' /* run daemon in foreground */ +#define MD_LOCAL 'l' /* like daemon, but localhost only */ #define MD_VERIFY 'v' /* verify: don't collect or deliver */ #define MD_TEST 't' /* test mode: resolve addrs only */ #define MD_INITALIAS 'i' /* initialize alias database */ @@ -1560,6 +1565,13 @@ extern void stabapply __P((void (*)(STAB *, int), int)); #define MD_HOSTSTAT 'h' /* print persistent host stat info */ #define MD_PURGESTAT 'H' /* purge persistent host stat info */ #define MD_QUEUERUN 'q' /* queue run */ +#define MD_CHECKCONFIG 'C' /* check configuration file */ + +#if _FFR_LOCAL_DAEMON +EXTERN bool LocalDaemon; +#else /* _FFR_LOCAL_DAEMON */ +# define LocalDaemon false +#endif /* _FFR_LOCAL_DAEMON */ /* Note: see also include/sendmail/pathnames.h: GET_CLIENT_CF */ @@ -1873,7 +1885,7 @@ struct termescape /* functions */ extern bool init_tls_library __P((void)); -extern bool inittls __P((SSL_CTX **, unsigned long, bool, char *, char *, char *, char *, char *)); +extern bool inittls __P((SSL_CTX **, unsigned long, long, bool, char *, char *, char *, char *, char *)); extern bool initclttls __P((bool)); extern void setclttls __P((bool)); extern bool initsrvtls __P((bool)); @@ -1899,6 +1911,7 @@ EXTERN char *CRLFile; /* file CRLs */ EXTERN char *CRLPath; /* path to CRLs (dir. with hashes) */ #endif /* _FFR_CRLPATH */ EXTERN unsigned long TLS_Srv_Opts; /* TLS server options */ +EXTERN long Srv_SSL_Options, Clt_SSL_Options; /* SSL options */ #endif /* STARTTLS */ /* @@ -1979,6 +1992,9 @@ EXTERN int QueueFileMode; /* mode on files in mail queue */ EXTERN int QueueMode; /* which queue items to act upon */ EXTERN int QueueSortOrder; /* queue sorting order algorithm */ EXTERN time_t MinQueueAge; /* min delivery interval */ +#if _FFR_EXPDELAY +EXTERN time_t MaxQueueAge; /* max delivery interval */ +#endif /* _FFR_EXPDELAY */ EXTERN time_t QueueIntvl; /* intervals between running the queue */ EXTERN char *QueueDir; /* location of queue directory */ EXTERN QUEUE_CHAR *QueueLimitId; /* limit queue run to id */ @@ -2228,7 +2244,16 @@ EXTERN bool UseNameServer; /* using DNS -- interpret h_errno & MX RRs */ EXTERN char InetMode; /* default network for daemon mode */ EXTERN char OpMode; /* operation mode, see below */ EXTERN char SpaceSub; /* substitution for */ +#if _FFR_BADRCPT_SHUTDOWN +EXTERN int BadRcptShutdown; /* Shutdown connection for rejected RCPTs */ +EXTERN int BadRcptShutdownGood; /* above even when there are good RCPTs */ +#endif /* _FFR_BADRCPT_SHUTDOWN */ EXTERN int BadRcptThrottle; /* Throttle rejected RCPTs per SMTP message */ +#if _FFR_RCPTTHROTDELAY +EXTERN unsigned int BadRcptThrottleDelay; /* delay for BadRcptThrottle */ +#else +# define BadRcptThrottleDelay 1 +#endif /* _FFR_RCPTTHROTDELAY */ EXTERN int CheckpointInterval; /* queue file checkpoint interval */ EXTERN int ConfigLevel; /* config file level */ EXTERN int ConnRateThrottle; /* throttle for SMTP connection rate */ @@ -2590,6 +2615,11 @@ extern void setoption __P((int, char *, bool, bool, ENVELOPE *)); extern sigfunc_t setsignal __P((int, sigfunc_t)); extern void sm_setuserenv __P((const char *, const char *)); extern void settime __P((ENVELOPE *)); +#if STARTTLS +extern void set_tls_rd_tmo __P((int)); +#else /* STARTTLS */ +#define set_tls_rd_tmo(rd_tmo) +#endif /* STARTTLS */ extern char *sfgets __P((char *, int, SM_FILE_T *, time_t, char *)); extern char *shortenstring __P((const char *, size_t)); extern char *shorten_hostname __P((char [])); @@ -2626,7 +2656,7 @@ extern void unsetenv __P((char *)); /* update file system information: +/- some blocks */ #if SM_CONF_SHM -extern void upd_qs __P((ENVELOPE *, bool, bool, char *)); +extern void upd_qs __P((ENVELOPE *, int, int, char *)); # define updfs(e, count, space, where) upd_qs(e, count, space, where) #else /* SM_CONF_SHM */ # define updfs(e, count, space, where) diff --git a/contrib/sendmail-8.14/sendmail/sfsasl.c b/contrib/sendmail-8.14/sendmail/sfsasl.c index 216d87ef0a..cad16db168 100644 --- a/contrib/sendmail-8.14/sendmail/sfsasl.c +++ b/contrib/sendmail-8.14/sendmail/sfsasl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999-2006 Sendmail, Inc. and its suppliers. + * Copyright (c) 1999-2006, 2008 Sendmail, Inc. and its suppliers. * All rights reserved. * * By using this file, you agree to the terms and conditions set @@ -9,7 +9,7 @@ */ #include -SM_RCSID("@(#)$Id: sfsasl.c,v 8.115 2006/04/18 21:34:07 ca Exp $") +SM_RCSID("@(#)$Id: sfsasl.c,v 8.118 2008/07/22 15:12:48 ca Exp $") #include #include #include @@ -296,7 +296,7 @@ sasl_write(fp, buf, size) /* ** Fetch the maximum input buffer size for sasl_encode(). ** This can be less than the size set in attemptauth() - ** due to a negotation with the other side, e.g., + ** due to a negotiation with the other side, e.g., ** Cyrus IMAP lmtp program sets maxbuf=4096, ** digestmd5 substracts 25 and hence we'll get 4071 ** instead of 8192 (MAXOUTLEN). @@ -674,6 +674,26 @@ tls_retry(ssl, rfd, wfd, tlsstart, timeout, err, where) # define SM_ERR_TIMEOUT EIO #endif /* ETIMEDOUT */ +/* +** SET_TLS_RD_TMO -- read secured information for the caller +** +** Parameters: +** rd_tmo -- read timeout +** +** Results: +** none +** This is a hack: there is no way to pass it in +*/ + +static int tls_rd_tmo = -1; + +void +set_tls_rd_tmo(rd_tmo) + int rd_tmo; +{ + tls_rd_tmo = rd_tmo; +} + /* ** TLS_READ -- read secured information for the caller ** @@ -725,7 +745,9 @@ tls_read(fp, buf, size) rfd = SSL_get_rfd(so->con); wfd = SSL_get_wfd(so->con); try = tls_retry(so->con, rfd, wfd, tlsstart, - TimeOuts.to_datablock, ssl_err, "read"); + (tls_rd_tmo < 0) ? TimeOuts.to_datablock + : tls_rd_tmo, + ssl_err, "read"); if (try > 0) goto retry; errno = SM_ERR_TIMEOUT; diff --git a/contrib/sendmail-8.14/sendmail/sm_resolve.c b/contrib/sendmail-8.14/sendmail/sm_resolve.c index 035a9e51ba..6d9c28d73f 100644 --- a/contrib/sendmail-8.14/sendmail/sm_resolve.c +++ b/contrib/sendmail-8.14/sendmail/sm_resolve.c @@ -46,7 +46,7 @@ # if NAMED_BIND # include "sm_resolve.h" -SM_RCSID("$Id: sm_resolve.c,v 8.35 2007/06/25 16:20:14 ca Exp $") +SM_RCSID("$Id: sm_resolve.c,v 8.36 2008/02/11 23:04:16 ca Exp $") static struct stot { @@ -168,7 +168,7 @@ parse_dns_reply(data, len) int len; { unsigned char *p; - ushort ans_cnt, ui; + unsigned short ans_cnt, ui; int status; size_t l; char host[MAXHOSTNAMELEN]; @@ -198,7 +198,7 @@ parse_dns_reply(data, len) return NULL; } - ans_cnt = ntohs((ushort) r->dns_r_h.ancount); + ans_cnt = ntohs((unsigned short) r->dns_r_h.ancount); p += status; GETSHORT(r->dns_r_q.dns_q_type, p); diff --git a/contrib/sendmail-8.14/sendmail/srvrsmtp.c b/contrib/sendmail-8.14/sendmail/srvrsmtp.c index 514a5e6310..49016e4572 100644 --- a/contrib/sendmail-8.14/sendmail/srvrsmtp.c +++ b/contrib/sendmail-8.14/sendmail/srvrsmtp.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2007 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2008 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -17,7 +17,7 @@ # include #endif /* MILTER */ -SM_RCSID("@(#)$Id: srvrsmtp.c,v 8.967 2007/10/01 16:22:14 ca Exp $") +SM_RCSID("@(#)$Id: srvrsmtp.c,v 8.989 2009/12/18 17:08:01 ca Exp $") #include #include @@ -479,6 +479,9 @@ do \ e->e_sendqueue = NULL; \ e->e_flags |= EF_CLRQUEUE; \ \ + if (tTd(92, 2)) \ + sm_dprintf("CLEAR_STATE: e_id=%s, EF_LOGSENDER=%d, LogLevel=%d\n",\ + e->e_id, bitset(EF_LOGSENDER, e->e_flags), LogLevel);\ if (LogLevel > 4 && bitset(EF_LOGSENDER, e->e_flags)) \ logsender(e, NULL); \ e->e_flags &= ~EF_LOGSENDER; \ @@ -486,7 +489,7 @@ do \ /* clean up a bit */ \ smtp.sm_gotmail = false; \ SuprErrs = true; \ - dropenvelope(e, true, false); \ + (void) dropenvelope(e, true, false); \ sm_rpool_free(e->e_rpool); \ e = newenvelope(e, CurEnv, sm_rpool_new_x(NULL)); \ CurEnv = e; \ @@ -637,6 +640,9 @@ smtp(nullserver, d_flags, e) # define p_addr_st NULL #endif /* MILTER */ size_t inplen; +#if _FFR_BADRCPT_SHUTDOWN + int n_badrcpts_adj; +#endif /* _FFR_BADRCPT_SHUTDOWN */ SevenBitInput_Saved = SevenBitInput; smtp.sm_nrcpts = 0; @@ -903,6 +909,18 @@ smtp(nullserver, d_flags, e) #endif /* SASL */ #if STARTTLS +# if USE_OPENSSL_ENGINE + if (tls_ok_srv && bitset(SRV_OFFER_TLS, features) && + !SSL_set_engine(NULL)) + { + sm_syslog(LOG_ERR, NOQID, + "STARTTLS=server, SSL_set_engine=failed"); + tls_ok_srv = false; + } +# endif /* USE_OPENSSL_ENGINE */ + + + set_tls_rd_tmo(TimeOuts.to_nextcommand); #endif /* STARTTLS */ #if MILTER @@ -942,6 +960,7 @@ smtp(nullserver, d_flags, e) /* arrange to ignore send list */ e->e_sendqueue = NULL; + lognullconnection = false; goto doquit; } } @@ -1054,10 +1073,10 @@ smtp(nullserver, d_flags, e) if (select(fd + 1, FDSET_CAST &readfds, NULL, NULL, &timeout) > 0 && FD_ISSET(fd, &readfds) && - (eoftest = sm_io_getc(InChannel, SM_TIME_DEFAULT)) + (eoftest = sm_io_getc(InChannel, SM_TIME_DEFAULT)) != SM_IO_EOF) { - sm_io_ungetc(InChannel, SM_TIME_DEFAULT, + sm_io_ungetc(InChannel, SM_TIME_DEFAULT, eoftest); gettimeofday(&ep, NULL); timersub(&ep, &bp, &tp); @@ -1266,7 +1285,8 @@ smtp(nullserver, d_flags, e) { if (++np_log < 3) sm_syslog(LOG_INFO, NOQID, - "unauthorized PIPELINING, sleeping"); + "unauthorized PIPELINING, sleeping, relay=%.100s", + CurSmtpClient); sleep(1); } @@ -1441,8 +1461,9 @@ smtp(nullserver, d_flags, e) message("454 4.5.4 Internal error: unable to encode64"); if (LogLevel > 5) sm_syslog(LOG_WARNING, e->e_id, - "AUTH encode64 error [%d for \"%s\"]", - result, out); + "AUTH encode64 error [%d for \"%s\"], relay=%.100s", + result, out, + CurSmtpClient); /* start over? */ authenticating = SASL_NOT_AUTH; } @@ -1463,16 +1484,17 @@ smtp(nullserver, d_flags, e) message("535 5.7.0 authentication failed"); if (LogLevel > 9) sm_syslog(LOG_WARNING, e->e_id, - "AUTH failure (%s): %s (%d) %s", + "AUTH failure (%s): %s (%d) %s, relay=%.100s", auth_type, sasl_errstring(result, NULL, NULL), result, # if SASL >= 20000 - sasl_errdetail(conn)); + sasl_errdetail(conn), # else /* SASL >= 20000 */ - errstr == NULL ? "" : errstr); + errstr == NULL ? "" : errstr, # endif /* SASL >= 20000 */ + CurSmtpClient); RESET_SASLCONN; authenticating = SASL_NOT_AUTH; } @@ -1694,8 +1716,9 @@ smtp(nullserver, d_flags, e) q); if (LogLevel > 5) sm_syslog(LOG_WARNING, e->e_id, - "AUTH decode64 error [%d for \"%s\"]", - result, q); + "AUTH decode64 error [%d for \"%s\"], relay=%.100s", + result, q, + CurSmtpClient); /* start over? */ authenticating = SASL_NOT_AUTH; # if SASL >= 20000 @@ -1728,16 +1751,17 @@ smtp(nullserver, d_flags, e) message("535 5.7.0 authentication failed"); if (LogLevel > 9) sm_syslog(LOG_ERR, e->e_id, - "AUTH failure (%s): %s (%d) %s", + "AUTH failure (%s): %s (%d) %s, relay=%.100s", p, sasl_errstring(result, NULL, NULL), result, # if SASL >= 20000 - sasl_errdetail(conn)); + sasl_errdetail(conn), # else /* SASL >= 20000 */ - errstr); + errstr, # endif /* SASL >= 20000 */ + CurSmtpClient); RESET_SASLCONN; break; } @@ -1887,8 +1911,9 @@ smtp(nullserver, d_flags, e) if (LogLevel > 5) { sm_syslog(LOG_WARNING, NOQID, - "STARTTLS=server, error: accept failed=%d, SSL_error=%d, errno=%d, retry=%d", - r, ssl_err, errno, i); + "STARTTLS=server, error: accept failed=%d, SSL_error=%d, errno=%d, retry=%d, relay=%.100s", + r, ssl_err, errno, i, + CurSmtpClient); if (LogLevel > 8) tlslogerr("server"); } @@ -2523,6 +2548,36 @@ smtp(nullserver, d_flags, e) milter_rcpt_added = false; smtp.sm_e_nrcpts_orig = e->e_nrcpts; #endif +#if _FFR_BADRCPT_SHUTDOWN + /* + ** hack to deal with hack, see below: + ** n_badrcpts is increased if limit is reached. + */ + + n_badrcpts_adj = (BadRcptThrottle > 0 && + n_badrcpts > BadRcptThrottle && + LogLevel > 5) + ? n_badrcpts - 1 : n_badrcpts; + if (BadRcptShutdown > 0 && + n_badrcpts_adj >= BadRcptShutdown && + (BadRcptShutdownGood == 0 || + smtp.sm_nrcpts == 0 || + (n_badrcpts_adj * 100 / + (smtp.sm_nrcpts + n_badrcpts) >= + BadRcptShutdownGood))) + { + if (LogLevel > 5) + sm_syslog(LOG_INFO, e->e_id, + "%s: Possible SMTP RCPT flood, shutting down connection.", + CurSmtpClient); + message("421 4.7.0 %s Too many bad recipients; closing connection", + MyHostName); + + /* arrange to ignore any current send list */ + e->e_sendqueue = NULL; + goto doquit; + } +#endif /* _FFR_BADRCPT_SHUTDOWN */ if (BadRcptThrottle > 0 && n_badrcpts >= BadRcptThrottle) { @@ -2540,12 +2595,12 @@ smtp(nullserver, d_flags, e) /* ** Don't use exponential backoff for now. - ** Some servers will open more connections + ** Some systems will open more connections ** and actually overload the receiver even ** more. */ - (void) sleep(1); + (void) sleep(BadRcptThrottleDelay); } if (!smtp.sm_gotmail) { @@ -3111,6 +3166,11 @@ doquit: milter_quit(e); #endif /* MILTER */ + if (tTd(92, 2)) + sm_dprintf("QUIT: e_id=%s, EF_LOGSENDER=%d, LogLevel=%d\n", + e->e_id, + bitset(EF_LOGSENDER, e->e_flags), + LogLevel); if (LogLevel > 4 && bitset(EF_LOGSENDER, e->e_flags)) logsender(e, NULL); e->e_flags &= ~EF_LOGSENDER; @@ -3322,6 +3382,11 @@ smtp_data(smtp, e) response); LogUsrErrs = false; } +#if _FFR_MILTER_ENHSC + if (ISSMTPCODE(response)) + (void) extenhsc(response + 4, ' ', e->e_enhsc); +#endif /* _FFR_MILTER_ENHSC */ + usrerr(response); if (strncmp(response, "421 ", 4) == 0 || strncmp(response, "421-", 4) == 0) @@ -3338,6 +3403,10 @@ smtp_data(smtp, e) "Milter: cmd=data, reject=550 5.7.1 Command rejected"); LogUsrErrs = false; } +#if _FFR_MILTER_ENHSC + (void) sm_strlcpy(e->e_enhsc, "5.7.1", + sizeof(e->e_enhsc)); +#endif /* _FFR_MILTER_ENHSC */ usrerr("550 5.7.1 Command rejected"); return true; @@ -3356,6 +3425,9 @@ smtp_data(smtp, e) MSG_TEMPFAIL); LogUsrErrs = false; } +#if _FFR_MILTER_ENHSC + (void) extenhsc(MSG_TEMPFAIL + 4, ' ', e->e_enhsc); +#endif /* _FFR_MILTER_ENHSC */ usrerr(MSG_TEMPFAIL); return true; @@ -3431,7 +3503,14 @@ smtp_data(smtp, e) "Milter: data, reject=%s", response); milteraccept = false; +#if _FFR_MILTER_ENHSC + if (ISSMTPCODE(response)) + (void) extenhsc(response + 4, ' ', e->e_enhsc); +#endif /* _FFR_MILTER_ENHSC */ usrerr(response); + if (strncmp(response, "421 ", 4) == 0 + || strncmp(response, "421-", 4) == 0) + rv = false; break; case SMFIR_REJECT: @@ -3456,6 +3535,9 @@ smtp_data(smtp, e) "Milter: data, reject=%s", MSG_TEMPFAIL); milteraccept = false; +#if _FFR_MILTER_ENHSC + (void) extenhsc(MSG_TEMPFAIL + 4, ' ', e->e_enhsc); +#endif /* _FFR_MILTER_ENHSC */ usrerr(MSG_TEMPFAIL); break; @@ -3746,6 +3828,9 @@ smtp_data(smtp, e) } abortmessage: + if (tTd(92, 2)) + sm_dprintf("abortmessage: e_id=%s, EF_LOGSENDER=%d, LogLevel=%d\n", + e->e_id, bitset(EF_LOGSENDER, e->e_flags), LogLevel); if (LogLevel > 4 && bitset(EF_LOGSENDER, e->e_flags)) logsender(e, NULL); e->e_flags &= ~EF_LOGSENDER; @@ -3759,7 +3844,7 @@ smtp_data(smtp, e) */ if (aborting || bitset(EF_DISCARD, e->e_flags)) - dropenvelope(e, true, false); + (void) dropenvelope(e, true, false); else { for (ee = e; ee != NULL; ee = ee->e_sibling) @@ -3768,24 +3853,17 @@ smtp_data(smtp, e) QueueMode != QM_QUARANTINE && ee->e_quarmsg != NULL) { - dropenvelope(ee, true, false); + (void) dropenvelope(ee, true, false); continue; } if (WILL_BE_QUEUED(ee->e_sendmode)) - dropenvelope(ee, true, false); + (void) dropenvelope(ee, true, false); } } - sm_rpool_free(e->e_rpool); - - /* - ** At this point, e == &MainEnvelope, but if we did splitting, - ** then CurEnv may point to an envelope structure that was just - ** freed with the rpool. So reset CurEnv *before* calling - ** newenvelope. - */ CurEnv = e; features = e->e_features; + sm_rpool_free(e->e_rpool); newenvelope(e, e, sm_rpool_new_x(NULL)); e->e_flags = BlankEnvelope.e_flags; e->e_features = features; @@ -3841,8 +3919,13 @@ logundelrcpts(e, msg, level, all) if (!QS_IS_UNDELIVERED(a->q_state) && !all) continue; e->e_to = a->q_paddr; - logdelivery(NULL, NULL, a->q_status, msg, NULL, - (time_t) 0, e); + logdelivery(NULL, NULL, +#if _FFR_MILTER_ENHSC + (a->q_status == NULL && e->e_enhsc[0] != '\0') + ? e->e_enhsc : +#endif /* _FFR_MILTER_ENHSC */ + a->q_status, + msg, NULL, (time_t) 0, e); } e->e_to = NULL; } @@ -4663,8 +4746,9 @@ initsrvtls(tls_ok) return false; /* do NOT remove assignment */ - tls_ok_srv = inittls(&srv_ctx, TLS_Srv_Opts, true, SrvCertFile, - SrvKeyFile, CACertPath, CACertFile, DHParams); + tls_ok_srv = inittls(&srv_ctx, TLS_Srv_Opts, Srv_SSL_Options, true, + SrvCertFile, SrvKeyFile, + CACertPath, CACertFile, DHParams); return tls_ok_srv; } #endif /* STARTTLS */ diff --git a/contrib/sendmail-8.14/sendmail/tls.c b/contrib/sendmail-8.14/sendmail/tls.c index 1a213cab68..7031994495 100644 --- a/contrib/sendmail-8.14/sendmail/tls.c +++ b/contrib/sendmail-8.14/sendmail/tls.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000-2006 Sendmail, Inc. and its suppliers. + * Copyright (c) 2000-2006, 2008, 2009 Sendmail, Inc. and its suppliers. * All rights reserved. * * By using this file, you agree to the terms and conditions set @@ -10,7 +10,7 @@ #include -SM_RCSID("@(#)$Id: tls.c,v 8.107 2006/10/12 21:35:11 ca Exp $") +SM_RCSID("@(#)$Id: tls.c,v 8.114 2009/08/10 15:11:09 ca Exp $") #if STARTTLS # include @@ -486,6 +486,7 @@ tls_safe_f(var, sff, srv) ** Parameters: ** ctx -- pointer to context ** req -- requirements for initialization (see sendmail.h) +** options -- options ** srv -- server side? ** certfile -- filename of certificate ** keyfile -- filename of private key @@ -514,9 +515,10 @@ static char server_session_id_context[] = "sendmail8"; #endif bool -inittls(ctx, req, srv, certfile, keyfile, cacertpath, cacertfile, dhparam) +inittls(ctx, req, options, srv, certfile, keyfile, cacertpath, cacertfile, dhparam) SSL_CTX **ctx; unsigned long req; + long options; bool srv; char *certfile, *keyfile, *cacertpath, *cacertfile, *dhparam; { @@ -525,7 +527,7 @@ inittls(ctx, req, srv, certfile, keyfile, cacertpath, cacertfile, dhparam) # endif /* !NO_DH */ int r; bool ok; - long sff, status, options; + long sff, status; char *who; # if _FFR_TLS_1 char *cf2, *kf2; @@ -643,7 +645,10 @@ inittls(ctx, req, srv, certfile, keyfile, cacertpath, cacertfile, dhparam) } } if (dhparam == NULL) + { dhparam = srv ? "1" : "5"; + req |= (srv ? TLS_I_DH1024 : TLS_I_DH512); + } else if (*dhparam == '/') { TLS_OK_F(dhparam, "DHParameters", @@ -913,7 +918,6 @@ inittls(ctx, req, srv, certfile, keyfile, cacertpath, cacertfile, dhparam) /* SSL_CTX_set_quiet_shutdown(*ctx, 1); violation of standard? */ - options = SSL_OP_ALL; /* bug compatibility? */ #if SM_SSL_OP_TLS_BLOCK_PADDING_BUG /* @@ -1196,23 +1200,62 @@ tls_get_info(ssl, srv, host, mac, certreq) if (cert != NULL) { unsigned int n; + X509_NAME *subj, *issuer; unsigned char md[EVP_MAX_MD_SIZE]; char buf[MAXNAME]; - X509_NAME_oneline(X509_get_subject_name(cert), - buf, sizeof(buf)); + subj = X509_get_subject_name(cert); + issuer = X509_get_issuer_name(cert); + X509_NAME_oneline(subj, buf, sizeof(buf)); macdefine(mac, A_TEMP, macid("{cert_subject}"), xtextify(buf, "<>\")")); - X509_NAME_oneline(X509_get_issuer_name(cert), - buf, sizeof(buf)); + X509_NAME_oneline(issuer, buf, sizeof(buf)); macdefine(mac, A_TEMP, macid("{cert_issuer}"), xtextify(buf, "<>\")")); - X509_NAME_get_text_by_NID(X509_get_subject_name(cert), - NID_commonName, buf, sizeof(buf)); + +#define CHECK_X509_NAME(which) \ + do { \ + if (r == -1) \ + { \ + sm_strlcpy(buf, "BadCertificateUnknown", sizeof(buf)); \ + if (LogLevel > 7) \ + sm_syslog(LOG_INFO, NOQID, \ + "STARTTLS=%s, relay=%.100s, field=%s, status=failed to extract CN", \ + who, \ + host == NULL ? "local" : host, \ + which); \ + } \ + else if ((size_t)r >= sizeof(buf) - 1) \ + { \ + sm_strlcpy(buf, "BadCertificateTooLong", sizeof(buf)); \ + if (LogLevel > 7) \ + sm_syslog(LOG_INFO, NOQID, \ + "STARTTLS=%s, relay=%.100s, field=%s, status=CN too long", \ + who, \ + host == NULL ? "local" : host, \ + which); \ + } \ + else if ((size_t)r > strlen(buf)) \ + { \ + sm_strlcpy(buf, "BadCertificateContainsNUL", \ + sizeof(buf)); \ + if (LogLevel > 7) \ + sm_syslog(LOG_INFO, NOQID, \ + "STARTTLS=%s, relay=%.100s, field=%s, status=CN contains NUL", \ + who, \ + host == NULL ? "local" : host, \ + which); \ + } \ + } while (0) + + r = X509_NAME_get_text_by_NID(subj, NID_commonName, buf, + sizeof buf); + CHECK_X509_NAME("cn_subject"); macdefine(mac, A_TEMP, macid("{cn_subject}"), xtextify(buf, "<>\")")); - X509_NAME_get_text_by_NID(X509_get_issuer_name(cert), - NID_commonName, buf, sizeof(buf)); + r = X509_NAME_get_text_by_NID(issuer, NID_commonName, buf, + sizeof buf); + CHECK_X509_NAME("cn_issuer"); macdefine(mac, A_TEMP, macid("{cn_issuer}"), xtextify(buf, "<>\")")); n = 0; @@ -1596,14 +1639,19 @@ tls_verify_cb(ctx, unused) { int ok; + /* + ** man SSL_CTX_set_cert_verify_callback(): + ** callback should return 1 to indicate verification success + ** and 0 to indicate verification failure. + */ + ok = X509_verify_cert(ctx); - if (ok == 0) + if (ok <= 0) { if (LogLevel > 13) return tls_verify_log(ok, ctx, "TLS"); - return 1; /* override it */ } - return ok; + return 1; } /* ** TLSLOGERR -- log the errors from the TLS error stack diff --git a/contrib/sendmail-8.14/sendmail/usersmtp.c b/contrib/sendmail-8.14/sendmail/usersmtp.c index 724f10c90d..23278b0b59 100644 --- a/contrib/sendmail-8.14/sendmail/usersmtp.c +++ b/contrib/sendmail-8.14/sendmail/usersmtp.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2006 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2006, 2008, 2009 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -13,7 +13,7 @@ #include -SM_RCSID("@(#)$Id: usersmtp.c,v 8.470 2007/10/17 21:35:30 ca Exp $") +SM_RCSID("@(#)$Id: usersmtp.c,v 8.473 2009/06/17 17:26:51 ca Exp $") #include @@ -1568,7 +1568,9 @@ attemptauth(m, mci, e, sai) sasl_interact_t *client_interact = NULL; char *mechusing; sasl_security_properties_t ssp; - char in64[MAXOUTLEN]; + + /* MUST NOT be a multiple of 4: bug in some sasl_encode64() versions */ + char in64[MAXOUTLEN + 1]; #if NETINET || (NETINET6 && SASL >= 20000) extern SOCKADDR CurHostAddr; #endif /* NETINET || (NETINET6 && SASL >= 20000) */ @@ -1770,7 +1772,8 @@ attemptauth(m, mci, e, sai) } else { - saslresult = sasl_encode64(out, outlen, in64, MAXOUTLEN, NULL); + saslresult = sasl_encode64(out, outlen, in64, sizeof(in64), + NULL); if (saslresult != SASL_OK) /* internal error */ { if (LogLevel > 8) @@ -1837,7 +1840,7 @@ attemptauth(m, mci, e, sai) if (outlen > 0) { saslresult = sasl_encode64(out, outlen, in64, - MAXOUTLEN, NULL); + sizeof(in64), NULL); if (saslresult != SASL_OK) { /* give an error reply to the other side! */ @@ -3077,6 +3080,7 @@ reply(m, mci, e, timeout, pfunc, enhstat, rtype) */ bufp = SmtpReplyBuffer; + set_tls_rd_tmo(timeout); for (;;) { register char *p; diff --git a/contrib/sendmail-8.14/sendmail/util.c b/contrib/sendmail-8.14/sendmail/util.c index 95d2f9a413..ab491fbfe5 100644 --- a/contrib/sendmail-8.14/sendmail/util.c +++ b/contrib/sendmail-8.14/sendmail/util.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2007 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2007, 2009 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -13,7 +13,7 @@ #include -SM_RCSID("@(#)$Id: util.c,v 8.413 2007/09/26 23:29:11 ca Exp $") +SM_RCSID("@(#)$Id: util.c,v 8.416 2009/12/18 17:05:26 ca Exp $") #include #include @@ -868,7 +868,7 @@ xputs(fp, s) c &= 0177; } printchar: - if (isprint(c)) + if (isascii(c) && isprint(c)) { (void) sm_io_putc(fp, SM_TIME_DEFAULT, c); continue; @@ -895,7 +895,7 @@ xputs(fp, s) TermEscape.te_rv_on); shiftout = true; } - if (isprint(c)) + if (isascii(c) && isprint(c)) { (void) sm_io_putc(fp, SM_TIME_DEFAULT, '\\'); (void) sm_io_putc(fp, SM_TIME_DEFAULT, c); @@ -2823,9 +2823,10 @@ count_open_connections(hostaddr) return 0; /* - ** Initialize to 1 instead of 0 because this code gets called - ** before proc_list_add() gets called, so we (the daemon child - ** for this connection) don't count ourselves. + ** This code gets called before proc_list_add() gets called, + ** so we (the daemon child for this connection) have not yet + ** counted ourselves. Hence initialize the counter to 1 + ** instead of 0 to compensate. */ n = 1; diff --git a/contrib/sendmail-8.14/sendmail/version.c b/contrib/sendmail-8.14/sendmail/version.c index ee09fc93a2..cb94d0f2c5 100644 --- a/contrib/sendmail-8.14/sendmail/version.c +++ b/contrib/sendmail-8.14/sendmail/version.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998-2007 Sendmail, Inc. and its suppliers. + * Copyright (c) 1998-2009 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983 Eric P. Allman. All rights reserved. * Copyright (c) 1988, 1993 @@ -13,6 +13,6 @@ #include -SM_RCSID("@(#)$Id: version.c,v 8.199 2007/10/31 16:04:12 ca Exp $") +SM_RCSID("@(#)$Id: version.c,v 8.218 2009/12/23 04:43:09 ca Exp $") -char Version[] = "8.14.2"; +char Version[] = "8.14.4"; diff --git a/contrib/sendmail-8.14/smrsh/README b/contrib/sendmail-8.14/smrsh/README index 0719a3f506..452b208ea2 100644 --- a/contrib/sendmail-8.14/smrsh/README +++ b/contrib/sendmail-8.14/smrsh/README @@ -24,7 +24,7 @@ Unix C compilers. smrsh should build on most systems with the enclosed Build script: - host.domain% sh Build + host.domain% sh ./Build To compile smrsh.c by hand, use the following command: @@ -36,13 +36,13 @@ compiler, you should compile with the -Bstatic option. host.domain% cc -Bstatic -o smrsh smrsh.c or - host.domain% sh Build LDOPTS=-Bstatic + host.domain% sh ./Build LDOPTS=-Bstatic With gcc, the GNU C compiler, use the -static option. host.domain% cc -static -o smrsh smrsh.c or - host.domain% sh Build LDOPTS=-static + host.domain% sh ./Build LDOPTS=-static The following C defines can be set defined to change the search path and the bin directory used by smrsh. @@ -58,7 +58,7 @@ conf_smrsh_ENVDEF. As root, install smrsh in /usr/libexec. Using the Build script: - host.domain# sh Build install + host.domain# sh ./Build install For manual installation: install smrsh in the /usr/libexec directory, with mode 511. @@ -163,4 +163,4 @@ a typical system follows: host.domain# /usr/sbin/sendmail -bd -q30m -$Revision: 8.9 $, Last updated $Date: 2003/05/26 04:30:58 $ +$Revision: 8.10 $, Last updated $Date: 2008/02/12 16:40:06 $ diff --git a/contrib/sendmail-8.14/vacation/vacation.c b/contrib/sendmail-8.14/vacation/vacation.c index 10712b8ed8..2ead0b86cb 100644 --- a/contrib/sendmail-8.14/vacation/vacation.c +++ b/contrib/sendmail-8.14/vacation/vacation.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999-2002 Sendmail, Inc. and its suppliers. + * Copyright (c) 1999-2002, 2009 Sendmail, Inc. and its suppliers. * All rights reserved. * Copyright (c) 1983, 1987, 1993 * The Regents of the University of California. All rights reserved. @@ -14,13 +14,13 @@ #include SM_IDSTR(copyright, -"@(#) Copyright (c) 1999-2001 Sendmail, Inc. and its suppliers.\n\ +"@(#) Copyright (c) 1999-2002, 2009 Sendmail, Inc. and its suppliers.\n\ All rights reserved.\n\ Copyright (c) 1983, 1987, 1993\n\ The Regents of the University of California. All rights reserved.\n\ Copyright (c) 1983 Eric P. Allman. All rights reserved.\n") -SM_IDSTR(id, "@(#)$Id: vacation.c,v 8.144 2007/05/11 18:50:36 ca Exp $") +SM_IDSTR(id, "@(#)$Id: vacation.c,v 8.146 2009/08/07 21:28:39 ca Exp $") #include @@ -153,7 +153,7 @@ main(argc, argv) char *dbfilename = NULL; char *msgfilename = NULL; char *cfpath = NULL; - char *name; + char *name = NULL; char *returnaddr = NULL; SMDB_USER_INFO user_info; static char rnamebuf[MAXNAME]; @@ -299,7 +299,7 @@ main(argc, argv) "vacation: no such user uid %u.\n", getuid()); EXITM(EX_NOUSER); } - name = pw->pw_name; + name = strdup(pw->pw_name); user_info.smdbu_id = pw->pw_uid; user_info.smdbu_group_id = pw->pw_gid; (void) sm_strlcpy(user_info.smdbu_name, pw->pw_name, @@ -314,7 +314,7 @@ main(argc, argv) } else if (runasuser) { - name = *argv; + name = strdup(*argv); if (dbfilename == NULL || msgfilename == NULL) { msglog(LOG_NOTICE, @@ -358,7 +358,7 @@ main(argc, argv) sm_strexit(err)); EXITM(err); } - name = user.mbdb_name; + name = strdup(user.mbdb_name); if (chdir(user.mbdb_homedir) != 0) { msglog(LOG_NOTICE, @@ -371,6 +371,12 @@ main(argc, argv) (void) sm_strlcpy(user_info.smdbu_name, user.mbdb_name, SMDB_MAX_USER_NAME_LEN); } + if (name == NULL) + { + msglog(LOG_ERR, + "vacation: can't allocate memory for username.\n"); + EXITM(EX_OSERR); + } if (dbfilename == NULL) dbfilename = VDB; @@ -1032,6 +1038,14 @@ sendmessage(myname, msgfn, sender) (void *) &(pvect[1]), SM_IO_WRONLY, NULL)) != NULL) { +#if _FFR_VAC_WAIT4SM +# ifdef WAITUNION + union wait st; +# else /* WAITUNION */ + auto int st; +# endif /* WAITUNION */ +#endif /* _FFR_VAC_WAIT4SM */ + (void) sm_io_fprintf(sfp, SM_TIME_DEFAULT, "To: %s\n", From); (void) sm_io_fprintf(sfp, SM_TIME_DEFAULT, "Auto-Submitted: auto-replied\n"); @@ -1039,6 +1053,9 @@ sendmessage(myname, msgfn, sender) (void) sm_io_fputs(sfp, SM_TIME_DEFAULT, buf); (void) sm_io_close(mfp, SM_TIME_DEFAULT); (void) sm_io_close(sfp, SM_TIME_DEFAULT); +#if _FFR_VAC_WAIT4SM + (void) wait(&st); +#endif /* _FFR_VAC_WAIT4SM */ } else { -- 2.41.0 From e2ba133e3d3e557b0605c261be0dfaf9aa2e9ee6 Mon Sep 17 00:00:00 2001 From: Jan Lentfer Date: Mon, 25 Jan 2010 19:35:05 +0100 Subject: [PATCH 02/16] sendmail: Update master to work with v8.14.4 * Removed some now obsolete patches * Made remaining patches apply cleanly --- usr.sbin/sendmail/Makefile | 2 +- usr.sbin/sendmail/mci.c.patch | 47 ------------------------------ usr.sbin/sendmail/srvrsmtp.c.patch | 20 ++++--------- 3 files changed, 6 insertions(+), 63 deletions(-) delete mode 100644 usr.sbin/sendmail/mci.c.patch diff --git a/usr.sbin/sendmail/Makefile b/usr.sbin/sendmail/Makefile index 1a686ac90a..dfcc1abe1c 100644 --- a/usr.sbin/sendmail/Makefile +++ b/usr.sbin/sendmail/Makefile @@ -7,7 +7,7 @@ SMDIR= ${SENDMAIL_DIR}/sendmail .PATH: ${SMDIR} CONTRIBDIR= ${SMDIR} -PATCHES= mci.c.patch main.c.patch srvrsmtp.c.patch +PATCHES= main.c.patch srvrsmtp.c.patch BINDIR= /usr/libexec/sendmail diff --git a/usr.sbin/sendmail/mci.c.patch b/usr.sbin/sendmail/mci.c.patch deleted file mode 100644 index 42a69b2bcb..0000000000 --- a/usr.sbin/sendmail/mci.c.patch +++ /dev/null @@ -1,47 +0,0 @@ -$DragonFly: src/usr.sbin/sendmail/mci.c.patch,v 1.4 2007/04/14 17:43:48 gshapiro Exp $ - -Index: mci.c -=================================================================== -RCS file: /home/joerg/wd/repository/dragonflybsd/src/contrib/sendmail-8.13.6/sendmail/mci.c,v -retrieving revision 1.1.1.1 -diff -u -r1.1.1.1 mci.c ---- mci.c 6 Jun 2005 04:25:22 -0000 1.1.1.1 -+++ mci.c 23 Aug 2005 15:04:54 -0000 -@@ -1131,7 +1131,7 @@ - size_t len; - char *newptr; - struct dirent *e; -- char newpath[MAXPATHLEN]; -+ char newpath[PATH_MAX]; - #if MAXPATHLEN <= MAXNAMLEN - 3 - ERROR "MAXPATHLEN <= MAXNAMLEN - 3" - #endif /* MAXPATHLEN <= MAXNAMLEN - 3 */ -@@ -1143,7 +1143,7 @@ - pathname, sm_errstring(errno)); - return -1; - } -- len = sizeof(newpath) - MAXNAMLEN - 3; -+ len = sizeof(newpath) - 2; /* enough space for '/' and NUL */ - if (sm_strlcpy(newpath, pathname, len) >= len) - { - if (tTd(56, 2)) -@@ -1153,6 +1153,7 @@ - } - newptr = newpath + strlen(newpath); - *newptr++ = '/'; -+ len = sizeof(newpath) - (newptr - newpath); - - /* - ** repeat until no file has been removed -@@ -1169,9 +1170,8 @@ - if (e->d_name[0] == '.') - continue; - -- (void) sm_strlcpy(newptr, e->d_name, -- sizeof(newpath) - -- (newptr - newpath)); -+ if (sm_strlcpy(newptr, e->d_name, len) >= len) -+ continue; - - if (StopRequest) - stop_sendmail(); diff --git a/usr.sbin/sendmail/srvrsmtp.c.patch b/usr.sbin/sendmail/srvrsmtp.c.patch index 9d885185b6..a482f502dc 100644 --- a/usr.sbin/sendmail/srvrsmtp.c.patch +++ b/usr.sbin/sendmail/srvrsmtp.c.patch @@ -16,10 +16,10 @@ diff -u -p -r1.1.1.2 srvrsmtp.c /* abort milter filters */ \ MILTER_ABORT(e); \ \ -@@ -487,8 +489,9 @@ /* clean up a bit */ \ +@@ -490,8 +489,9 @@ /* clean up a bit */ \ smtp.sm_gotmail = false; \ SuprErrs = true; \ - dropenvelope(e, true, false); \ + (void) dropenvelope(e, true, false); \ - sm_rpool_free(e->e_rpool); \ + orpool = e->e_rpool; \ e = newenvelope(e, CurEnv, sm_rpool_new_x(NULL)); \ @@ -27,7 +27,7 @@ diff -u -p -r1.1.1.2 srvrsmtp.c CurEnv = e; \ e->e_features = features; \ \ -@@ -3285,6 +3288,7 @@ char *id; +@@ -3345,6 +3288,7 @@ char *id; char *oldid; unsigned int features; char buf[32]; @@ -35,21 +35,11 @@ diff -u -p -r1.1.1.2 srvrsmtp.c SmtpPhase = "server DATA"; if (!smtp->sm_gotmail) -@@ -3775,18 +3779,12 @@ if (WILL_BE_QUEUED(ee->e_sendmode)) - dropenvelope(ee, true, false); - } - } -- sm_rpool_free(e->e_rpool); -- -- /* -- ** At this point, e == &MainEnvelope, but if we did splitting, -- ** then CurEnv may point to an envelope structure that was just -- ** freed with the rpool. So reset CurEnv *before* calling -- ** newenvelope. -- */ +@@ -3863,8 +3863,9 @@ CurEnv = e; features = e->e_features; +- sm_rpool_free(e->e_rpool); + orpool = e->e_rpool; newenvelope(e, e, sm_rpool_new_x(NULL)); + sm_rpool_free(orpool); -- 2.41.0 From f72f829955d08c92e993c82eb4bafc859843822c Mon Sep 17 00:00:00 2001 From: Jan Lentfer Date: Mon, 25 Jan 2010 20:07:20 +0100 Subject: [PATCH 03/16] file: update vendor branch to v5.04 --- contrib/file/ChangeLog | 78 ++++++++++ contrib/file/README.DRAGONFLY | 12 ++ contrib/file/doc/file.man | 40 ++--- contrib/file/doc/libmagic.man | 16 +- contrib/file/doc/magic.man | 10 +- contrib/file/magic/Magdir/acorn | 2 + contrib/file/magic/Magdir/adi | 1 + contrib/file/magic/Magdir/adventure | 1 + contrib/file/magic/Magdir/allegro | 2 + contrib/file/magic/Magdir/alliant | 1 + contrib/file/magic/Magdir/alpha | 2 + contrib/file/magic/Magdir/amanda | 2 + contrib/file/magic/Magdir/amigaos | 2 + contrib/file/magic/Magdir/animation | 26 ++-- contrib/file/magic/Magdir/apl | 1 + contrib/file/magic/Magdir/apple | 2 + contrib/file/magic/Magdir/applix | 1 + contrib/file/magic/Magdir/archive | 133 ++++++++++------- contrib/file/magic/Magdir/asterix | 1 + contrib/file/magic/Magdir/att3b | 1 + contrib/file/magic/Magdir/audio | 6 +- contrib/file/magic/Magdir/basis | 2 + contrib/file/magic/Magdir/bflt | 2 + contrib/file/magic/Magdir/blender | 2 + contrib/file/magic/Magdir/blit | 1 + contrib/file/magic/Magdir/bout | 4 +- contrib/file/magic/Magdir/bsdi | 2 + contrib/file/magic/Magdir/btsnoop | 2 + contrib/file/magic/Magdir/c-lang | 2 + contrib/file/magic/Magdir/c64 | 2 + contrib/file/magic/Magdir/cad | 1 + contrib/file/magic/Magdir/cafebabe | 2 + contrib/file/magic/Magdir/cddb | 4 +- contrib/file/magic/Magdir/chord | 1 + contrib/file/magic/Magdir/cisco | 2 + contrib/file/magic/Magdir/citrus | 2 + contrib/file/magic/Magdir/clarion | 1 + contrib/file/magic/Magdir/claris | 1 + contrib/file/magic/Magdir/clipper | 1 + contrib/file/magic/Magdir/commands | 51 +++---- contrib/file/magic/Magdir/communications | 1 + contrib/file/magic/Magdir/compress | 1 + contrib/file/magic/Magdir/console | 2 + contrib/file/magic/Magdir/convex | 2 + contrib/file/magic/Magdir/cracklib | 1 + contrib/file/magic/Magdir/ctags | 2 + contrib/file/magic/Magdir/dact | 1 + contrib/file/magic/Magdir/database | 1 + contrib/file/magic/Magdir/diamond | 1 + contrib/file/magic/Magdir/diff | 5 + contrib/file/magic/Magdir/digital | 3 + contrib/file/magic/Magdir/dolby | 3 + contrib/file/magic/Magdir/dump | 1 + contrib/file/magic/Magdir/dyadic | 1 + contrib/file/magic/Magdir/editors | 1 + contrib/file/magic/Magdir/efi | 1 + contrib/file/magic/Magdir/elf | 1 + contrib/file/magic/Magdir/encore | 1 + contrib/file/magic/Magdir/epoc | 54 ++++++- contrib/file/magic/Magdir/erlang | 1 + contrib/file/magic/Magdir/esri | 1 + contrib/file/magic/Magdir/fcs | 1 + contrib/file/magic/Magdir/filesystems | 124 ++++++++++++++-- contrib/file/magic/Magdir/flash | 4 + contrib/file/magic/Magdir/fonts | 10 +- contrib/file/magic/Magdir/fortran | 3 + contrib/file/magic/Magdir/frame | 2 + contrib/file/magic/Magdir/freebsd | 1 + contrib/file/magic/Magdir/fsav | 1 + contrib/file/magic/Magdir/games | 2 + contrib/file/magic/Magdir/gcc | 1 + contrib/file/magic/Magdir/geos | 1 + contrib/file/magic/Magdir/gimp | 2 + contrib/file/magic/Magdir/gnome-keyring | 3 + contrib/file/magic/Magdir/gnu | 2 + contrib/file/magic/Magdir/gnumeric | 1 + contrib/file/magic/Magdir/grace | 1 + contrib/file/magic/Magdir/graphviz | 2 + contrib/file/magic/Magdir/gringotts | 1 + contrib/file/magic/Magdir/hitachi-sh | 1 + contrib/file/magic/Magdir/hp | 2 + contrib/file/magic/Magdir/human68k | 1 + contrib/file/magic/Magdir/ibm370 | 1 + contrib/file/magic/Magdir/ibm6000 | 1 + contrib/file/magic/Magdir/iff | 1 + contrib/file/magic/Magdir/images | 29 +++- contrib/file/magic/Magdir/inform | 3 +- contrib/file/magic/Magdir/intel | 1 + contrib/file/magic/Magdir/interleaf | 1 + contrib/file/magic/Magdir/island | 1 + contrib/file/magic/Magdir/ispell | 1 + contrib/file/magic/Magdir/java | 2 + contrib/file/magic/Magdir/jpeg | 1 + contrib/file/magic/Magdir/karma | 1 + contrib/file/magic/Magdir/kde | 1 + contrib/file/magic/Magdir/kml | 2 + contrib/file/magic/Magdir/lecter | 2 + contrib/file/magic/Magdir/lex | 2 + contrib/file/magic/Magdir/lif | 1 + contrib/file/magic/Magdir/linux | 5 + contrib/file/magic/Magdir/lisp | 4 +- contrib/file/magic/Magdir/llvm | 1 + contrib/file/magic/Magdir/lua | 6 +- contrib/file/magic/Magdir/luks | 1 + contrib/file/magic/Magdir/mach | 2 + contrib/file/magic/Magdir/macintosh | 1 + contrib/file/magic/Magdir/magic | 1 + contrib/file/magic/Magdir/mail.news | 2 + contrib/file/magic/Magdir/maple | 1 + contrib/file/magic/Magdir/mathcad | 1 + contrib/file/magic/Magdir/mathematica | 2 + contrib/file/magic/Magdir/matroska | 3 +- contrib/file/magic/Magdir/mcrypt | 2 + contrib/file/magic/Magdir/mercurial | 1 + contrib/file/magic/Magdir/mime | 2 + contrib/file/magic/Magdir/mips | 1 + contrib/file/magic/Magdir/mirage | 1 + contrib/file/magic/Magdir/misctools | 2 + contrib/file/magic/Magdir/mkid | 1 + contrib/file/magic/Magdir/mlssa | 1 + contrib/file/magic/Magdir/mmdf | 1 + contrib/file/magic/Magdir/modem | 2 + contrib/file/magic/Magdir/motorola | 1 + contrib/file/magic/Magdir/mozilla | 1 + contrib/file/magic/Magdir/msdos | 9 +- contrib/file/magic/Magdir/msvc | 1 + contrib/file/magic/Magdir/mup | 2 + contrib/file/magic/Magdir/natinst | 1 + contrib/file/magic/Magdir/ncr | 1 + contrib/file/magic/Magdir/netbsd | 1 + contrib/file/magic/Magdir/netscape | 1 + contrib/file/magic/Magdir/netware | 1 + contrib/file/magic/Magdir/news | 1 + contrib/file/magic/Magdir/nitpicker | 2 + contrib/file/magic/Magdir/ocaml | 1 + contrib/file/magic/Magdir/octave | 2 + contrib/file/magic/Magdir/ole2compounddocs | 1 + contrib/file/magic/Magdir/olf | 1 + contrib/file/magic/Magdir/os2 | 2 + contrib/file/magic/Magdir/os400 | 2 + contrib/file/magic/Magdir/os9 | 3 + contrib/file/magic/Magdir/osf1 | 3 + contrib/file/magic/Magdir/palm | 1 + contrib/file/magic/Magdir/parix | 1 + contrib/file/magic/Magdir/pbm | 1 + contrib/file/magic/Magdir/pdf | 2 + contrib/file/magic/Magdir/pdp | 1 + contrib/file/magic/Magdir/perl | 20 +-- contrib/file/magic/Magdir/pgp | 1 + contrib/file/magic/Magdir/pkgadd | 1 + contrib/file/magic/Magdir/plan9 | 1 + contrib/file/magic/Magdir/plus5 | 1 + contrib/file/magic/Magdir/printer | 1 + contrib/file/magic/Magdir/project | 1 + contrib/file/magic/Magdir/psdbms | 1 + contrib/file/magic/Magdir/pulsar | 1 + contrib/file/magic/Magdir/pyramid | 1 + contrib/file/magic/Magdir/python | 17 ++- contrib/file/magic/Magdir/revision | 1 + contrib/file/magic/Magdir/riff | 1 + contrib/file/magic/Magdir/rpm | 41 ++++-- contrib/file/magic/Magdir/rtf | 1 + contrib/file/magic/Magdir/ruby | 12 +- contrib/file/magic/Magdir/sc | 1 + contrib/file/magic/Magdir/sccs | 1 + contrib/file/magic/Magdir/scientific | 2 + contrib/file/magic/Magdir/securitycerts | 3 + contrib/file/magic/Magdir/sendmail | 1 + contrib/file/magic/Magdir/sequent | 1 + contrib/file/magic/Magdir/sgi | 1 + contrib/file/magic/Magdir/sgml | 52 +++++-- contrib/file/magic/Magdir/sharc | 1 + contrib/file/magic/Magdir/sinclair | 1 + contrib/file/magic/Magdir/sketch | 2 + contrib/file/magic/Magdir/smalltalk | 1 + contrib/file/magic/Magdir/sniffer | 1 + contrib/file/magic/Magdir/softquad | 2 + contrib/file/magic/Magdir/spec | 1 + contrib/file/magic/Magdir/spectrum | 1 + contrib/file/magic/Magdir/sql | 1 + contrib/file/magic/Magdir/sun | 1 + contrib/file/magic/Magdir/sysex | 2 + contrib/file/magic/Magdir/teapot | 2 + contrib/file/magic/Magdir/terminfo | 1 + contrib/file/magic/Magdir/tex | 2 + contrib/file/magic/Magdir/tgif | 2 + contrib/file/magic/Magdir/ti-8x | 4 +- contrib/file/magic/Magdir/timezone | 1 + contrib/file/magic/Magdir/troff | 2 + contrib/file/magic/Magdir/tuxedo | 3 +- contrib/file/magic/Magdir/typeset | 1 + contrib/file/magic/Magdir/unicode | 4 +- contrib/file/magic/Magdir/unknown | 1 + contrib/file/magic/Magdir/uuencode | 2 + contrib/file/magic/Magdir/varied.out | 1 + contrib/file/magic/Magdir/varied.script | 2 + contrib/file/magic/Magdir/vax | 1 + contrib/file/magic/Magdir/vicar | 1 + contrib/file/magic/Magdir/virtutech | 2 + contrib/file/magic/Magdir/visx | 1 + contrib/file/magic/Magdir/vms | 1 + contrib/file/magic/Magdir/vmware | 3 +- contrib/file/magic/Magdir/vorbis | 1 + contrib/file/magic/Magdir/vxl | 1 + contrib/file/magic/Magdir/warc | 1 + contrib/file/magic/Magdir/weak | 1 + contrib/file/magic/Magdir/windows | 1 + contrib/file/magic/Magdir/wireless | 2 + contrib/file/magic/Magdir/wordprocessors | 2 + contrib/file/magic/Magdir/xdelta | 1 + contrib/file/magic/Magdir/xenix | 1 + contrib/file/magic/Magdir/xilinx | 1 + contrib/file/magic/Magdir/xo65 | 1 + contrib/file/magic/Magdir/xwindows | 1 + contrib/file/magic/Magdir/zilog | 1 + contrib/file/magic/Magdir/zyxel | 1 + contrib/file/src/apprentice.c | 118 ++++++++++----- contrib/file/src/cdf.c | 162 ++++++++++++--------- contrib/file/src/cdf_time.c | 23 ++- contrib/file/src/compress.c | 20 +-- contrib/file/src/encoding.c | 18 ++- contrib/file/src/file.c | 48 ++---- contrib/file/src/file.h | 35 +++-- contrib/file/src/fsmagic.c | 4 +- contrib/file/src/funcs.c | 6 +- contrib/file/src/magic.c | 42 +++++- contrib/file/src/magic.h | 1 + contrib/file/src/patchlevel.h | 7 +- contrib/file/src/print.c | 20 ++- contrib/file/src/readcdf.c | 63 +++++--- contrib/file/src/readelf.c | 8 +- contrib/file/src/softmagic.c | 49 ++++--- 232 files changed, 1234 insertions(+), 435 deletions(-) create mode 100644 contrib/file/README.DRAGONFLY diff --git a/contrib/file/ChangeLog b/contrib/file/ChangeLog index 90a32fcecf..fff2f579c6 100644 --- a/contrib/file/ChangeLog +++ b/contrib/file/ChangeLog @@ -1,3 +1,81 @@ +2010-01-22 15:45 Christos Zoulas + + * print proper mime for crystal reports file + + * print the last summary information of a cdf document, not the + first so that nested documents print the right info + +2010-01-16 18:42 Charles Longeau + + * bring back some fixes from OpenBSD: + - make gcc2 builds file + - fix typos in a magic file comment + +2009-11-17 18:35 Christos Zoulas + + * ctime/asctime can return NULL on some OS's although + they should not (Toshit Antani) + +2009-09-14 13:49 Christos Zoulas + + * Centralize magic path handling routines and remove the + special-casing from file.c so that the python module for + example comes up with the same magic path (Fixes ~/.magic + handling) (from Gab) + +2009-09-11 23:38 Reuben Thomas + + * When magic argument is a directory, read the files in + strcmp-sorted order (fixes Debian bug #488562 and our own FIXME). + +2009-09-11 13:11 Reuben Thomas + + * Combine overlapping epoc and psion magic files into one (epoc). + + * Add some more EPOC MIME types. + +2009-08-19 15:55 Christos Zoulas + + * Fix 3 bugs (From Ian Darwin): + - file_showstr could move one past the end of the array + - parse_apple did not nul terminate the string in the overflow case + - parse_mime truncated the wrong string in the overflow case + +2009-08-12 12:28 Robert Byrnes + + * Include Localstuff when compiling magic. + +2009-07-15 10:05 Christos Zoulas + + * Fix logic for including mygetopts.h + + * Make cdf.c compile again with debugging + + * Add the necessary field handling for crystal reports files to work + +2009-06-23 01:34 Reuben Thomas + + * Stop "(if" identifying Lisp files, that's plain dumb! + +2009-06-09 22:13 Reuben Thomas + + * Add a couple of missing MP3 MIME types. + +2009-05-27 23:00 Reuben Thomas + + * Add full range of hash-bang tests for Python and Ruby. + + * Add MIME types for Python and Ruby scripts. + +2009-05-13 10:44 Christos Zoulas + + * off by one in parsing hw capabilities in elf + (Cheng Renquan) + +2009-05-08 13:40 Christos Zoulas + + * lint fixes and more from NetBSD + 2009-05-06 10:25 Christos Zoulas * Avoid null dereference in cdf code (Drew Yao) diff --git a/contrib/file/README.DRAGONFLY b/contrib/file/README.DRAGONFLY new file mode 100644 index 0000000000..9d01cdedf3 --- /dev/null +++ b/contrib/file/README.DRAGONFLY @@ -0,0 +1,12 @@ +This directory contains most of the file distribution. The original +source can be obtained from: + ftp://ftp.astron.com/pub/file/ + + MD5 (file-5.04.tar.gz) = accade81ff1cc774904b47c72c8aeea0 + SHA1 (file-5.04.tar.gz) = 56ddf7135471aa656334ed8fefe1112bcccc2cc3 + +A list of the omitted files and directories can be found in +README.DELETED. + +This is used in lib/libmagic and usr.bin/file. When upgrading, remember +to update config.h in lib/libmagic. diff --git a/contrib/file/doc/file.man b/contrib/file/doc/file.man index 1215e69e16..444842ac46 100644 --- a/contrib/file/doc/file.man +++ b/contrib/file/doc/file.man @@ -1,4 +1,4 @@ -.\" $File: file.man,v 1.79 2008/11/06 22:49:08 rrt Exp $ +.\" $File: file.man,v 1.82 2009/11/04 22:30:34 christos Exp $ .Dd October 9, 2008 .Dt FILE __CSECTION__ .Os @@ -7,16 +7,20 @@ .Nd determine file type .Sh SYNOPSIS .Nm -.Op Fl bchikLnNprsvz -.Op Fl -mime-type +.Bk -words +.Op Fl bchikLNnprsvz0 +.Op Fl -apple .Op Fl -mime-encoding -.Op Fl f Ar namefile +.Op Fl -mime-type +.Op Fl e Ar testname .Op Fl F Ar separator +.Op Fl f Ar namefile .Op Fl m Ar magicfiles -.Ar file +.Ar +.Ek -words .Nm .Fl C -.Op Fl m Ar magicfile +.Op Fl m Ar magicfiles .Nm .Op Fl -help .Sh DESCRIPTION @@ -161,21 +165,21 @@ in any of the character sets listed above is simply said to be .Bl -tag -width indent .It Fl b , -brief Do not prepend filenames to output lines (brief mode). +.It Fl C , -compile +Write a +.Pa magic.mgc +output file that contains a pre-parsed version of the magic file or directory. .It Fl c , -checking-printout Cause a checking printout of the parsed form of the magic file. This is usually used in conjunction with the .Fl m flag to debug a new magic file before installing it. -.It Fl C , -compile -Write a -.Pa magic.mgc -output file that contains a pre-parsed version of the magic file or directory. .It Fl e , -exclude Ar testname Exclude the test named in .Ar testname from the list of tests made to determine the file type. Valid test names are: -.Bl -tag -width +.Bl -tag -width compress .It apptype .Dv EMX application type (only on EMX). @@ -198,6 +202,10 @@ Consults magic files. .It tar Examines tar files. .El +.It Fl F , -separator Ar separator +Use the specified string as the separator between the filename and the +file result returned. Defaults to +.Sq \&: . .It Fl f , -files-from Ar namefile Read the names of the files to be examined from .Ar namefile @@ -209,10 +217,6 @@ or at least one filename argument must be present; to test the standard input, use .Sq - as a filename argument. -.It Fl F , -separator Ar separator -Use the specified string as the separator between the filename and the -file result returned. Defaults to -.Sq \&: . .It Fl h , -no-dereference option causes symlinks not to be followed (on systems that support symbolic links). This is the default if the @@ -250,16 +254,16 @@ option causes symlinks to be followed, as the like-named option in This is the default if the environment variable .Dv POSIXLY_CORRECT is defined. -.It Fl m , -magic-file Ar list +.It Fl m , -magic-file Ar magicfiles Specify an alternate list of files and directories containing magic. This can be a single item, or a colon-separated list. If a compiled magic file is found alongside a file or directory, it will be used instead. +.It Fl N , -no-pad +Don't pad filenames so that they align in the output. .It Fl n , -no-buffer Force stdout to be flushed after checking each file. This is only useful if checking a list of files. It is intended to be used by programs that want filetype output from a pipe. -.It Fl N , -no-pad -Don't pad filenames so that they align in the output. .It Fl p , -preserve-date On systems that support .Xr utime 2 diff --git a/contrib/file/doc/libmagic.man b/contrib/file/doc/libmagic.man index e39a61053c..a9e5921577 100644 --- a/contrib/file/doc/libmagic.man +++ b/contrib/file/doc/libmagic.man @@ -1,4 +1,4 @@ -.\" $File: libmagic.man,v 1.19 2008/10/06 20:16:04 christos Exp $ +.\" $File: libmagic.man,v 1.21 2009/11/24 21:16:14 christos Exp $ .\" .\" Copyright (c) Christos Zoulas 2003. .\" All Rights Reserved. @@ -12,7 +12,7 @@ .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. -.\" +.\" .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE @@ -25,8 +25,8 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd October 6, 2008 -.Dt MAGIC 3 +.Dd November 24, 2009 +.Dt LIBMAGIC 3 .Os .Sh NAME .Nm magic_open , @@ -73,7 +73,7 @@ in The function .Fn magic_open creates a magic cookie pointer and returns it. It returns NULL if -there was an error allocating the magic cookie. The +there was an error allocating the magic cookie. The .Ar flags argument specifies how the other magic functions should behave: .Bl -tag -width MAGIC_COMPRESS @@ -165,7 +165,7 @@ bytes size. .Pp The .Fn magic_setflags -function sets the +function sets the .Ar flags described above. Note that using both MIME flags together can also return extra information on the charset. @@ -219,7 +219,7 @@ functions return 0 on success and -1 on failure. The .Fn magic_file , and -.Fn magic_buffer +.Fn magic_buffer functions return a string on success and NULL on failure. The .Fn magic_error function returns a textual description of the errors of the above @@ -242,7 +242,7 @@ The compiled default magic database. .El .Sh SEE ALSO .Xr file __CSECTION__ , -.Xr magic __FSECTION__ +.Xr magic __FSECTION__ .Sh AUTHORS Måns Rullgård Initial libmagic implementation, and configuration. diff --git a/contrib/file/doc/magic.man b/contrib/file/doc/magic.man index fb334bc9cf..f95280cf24 100644 --- a/contrib/file/doc/magic.man +++ b/contrib/file/doc/magic.man @@ -1,4 +1,4 @@ -.\" $File: magic.man,v 1.59 2008/11/06 23:22:53 christos Exp $ +.\" $File: magic.man,v 1.60 2009/05/08 23:02:44 christos Exp $ .Dd August 30, 2008 .Dt MAGIC __FSECTION__ .Os @@ -297,14 +297,14 @@ space. .El .Pp An APPLE 4+4 character APPLE creator and type can be specified as: -.Bd -literal -offset indent +.Bd -literal -offset indent !:apple CREATYPE .Ed .Pp A MIME type is given on a separate line, which must be the next non-blank or comment line after the magic line that identifies the file type, and has the following format: -.Bd -literal -offset indent +.Bd -literal -offset indent !:mime MIMETYPE .Ed .Pp @@ -314,13 +314,13 @@ followed by the MIME type. .Pp An optional strength can be supplied on a separate line which refers to the current magic description using the following format: -.Bd -literal -offset indent +.Bd -literal -offset indent !:strength OP VALUE .Ed .Pp The operand .Dv OP -can be: +can be: .Dv + , .Dv - , .Dv * , diff --git a/contrib/file/magic/Magdir/acorn b/contrib/file/magic/Magdir/acorn index 5acb31ee20..4202be9124 100644 --- a/contrib/file/magic/Magdir/acorn +++ b/contrib/file/magic/Magdir/acorn @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: acorn,v 1.5 2009/09/19 16:28:07 christos Exp $ # acorn: file(1) magic for files found on Acorn systems # diff --git a/contrib/file/magic/Magdir/adi b/contrib/file/magic/Magdir/adi index 12d7da59bc..2fe79d4431 100644 --- a/contrib/file/magic/Magdir/adi +++ b/contrib/file/magic/Magdir/adi @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: adi,v 1.4 2009/09/19 16:28:07 christos Exp $ # adi: file(1) magic for ADi's objects # From Gregory McGarry # diff --git a/contrib/file/magic/Magdir/adventure b/contrib/file/magic/Magdir/adventure index 7b30c49614..5087ce66c4 100644 --- a/contrib/file/magic/Magdir/adventure +++ b/contrib/file/magic/Magdir/adventure @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: adventure,v 1.10 2009/09/19 16:28:07 christos Exp $ # adventure: file(1) magic for Adventure game files # # from Allen Garvin diff --git a/contrib/file/magic/Magdir/allegro b/contrib/file/magic/Magdir/allegro index 41f4ad6cd2..b937c9cb02 100644 --- a/contrib/file/magic/Magdir/allegro +++ b/contrib/file/magic/Magdir/allegro @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: allegro,v 1.4 2009/09/19 16:28:07 christos Exp $ # allegro: file(1) magic for Allegro datafiles # Toby Deshane # diff --git a/contrib/file/magic/Magdir/alliant b/contrib/file/magic/Magdir/alliant index 69cf4b44d7..962020238e 100644 --- a/contrib/file/magic/Magdir/alliant +++ b/contrib/file/magic/Magdir/alliant @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: alliant,v 1.7 2009/09/19 16:28:07 christos Exp $ # alliant: file(1) magic for Alliant FX series a.out files # # If the FX series is the one that had a processor with a 68K-derived diff --git a/contrib/file/magic/Magdir/alpha b/contrib/file/magic/Magdir/alpha index c0191fb931..f1bdb6d7f2 100644 --- a/contrib/file/magic/Magdir/alpha +++ b/contrib/file/magic/Magdir/alpha @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: alpha,v 1.7 2009/09/19 16:28:07 christos Exp $ # alpha architecture description # diff --git a/contrib/file/magic/Magdir/amanda b/contrib/file/magic/Magdir/amanda index 2b9565083e..395ef545c2 100644 --- a/contrib/file/magic/Magdir/amanda +++ b/contrib/file/magic/Magdir/amanda @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: amanda,v 1.5 2009/09/19 16:28:07 christos Exp $ # amanda: file(1) magic for amanda file format # 0 string AMANDA:\ AMANDA diff --git a/contrib/file/magic/Magdir/amigaos b/contrib/file/magic/Magdir/amigaos index bb98299d89..f4c9cf2653 100644 --- a/contrib/file/magic/Magdir/amigaos +++ b/contrib/file/magic/Magdir/amigaos @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: amigaos,v 1.14 2009/09/19 16:28:07 christos Exp $ # amigaos: file(1) magic for AmigaOS binary formats: # diff --git a/contrib/file/magic/Magdir/animation b/contrib/file/magic/Magdir/animation index 46b23ecd50..5fdb3d02ba 100644 --- a/contrib/file/magic/Magdir/animation +++ b/contrib/file/magic/Magdir/animation @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: animation,v 1.39 2009/09/27 19:02:12 christos Exp $ # animation: file(1) magic for animation/movie formats # # animation formats @@ -29,7 +30,7 @@ #!:mime image/x-quicktime 4 string pckg Apple QuickTime compressed archive !:mime application/x-quicktime-player -4 string/B jP JPEG 2000 image +4 string/W jP JPEG 2000 image !:mime image/jp2 4 string ftyp ISO Media >8 string isom \b, MPEG v4 system, version 1 @@ -41,7 +42,7 @@ !:mime video/mp4 >8 string mp7t \b, MPEG v4 system, MPEG v7 XML >8 string mp7b \b, MPEG v4 system, MPEG v7 binary XML ->8 string/B jp2 \b, JPEG 2000 +>8 string/W jp2 \b, JPEG 2000 !:mime image/jp2 >8 string 3gp \b, MPEG v4 system, 3GPP !:mime video/3gpp @@ -52,13 +53,13 @@ !:mime video/mp4 >8 string avc1 \b, MPEG v4 system, 3GPP JVT AVC !:mime video/3gpp ->8 string/B M4A \b, MPEG v4 system, iTunes AAC-LC +>8 string/W M4A \b, MPEG v4 system, iTunes AAC-LC !:mime audio/mp4 ->8 string/B M4V \b, MPEG v4 system, iTunes AVC-LC +>8 string/W M4V \b, MPEG v4 system, iTunes AVC-LC !:mime video/mp4 ->8 string/B M4P \b, MPEG v4 system, iTunes AES encrypted ->8 string/B M4B \b, MPEG v4 system, iTunes bookmarked ->8 string/B qt \b, Apple QuickTime movie +>8 string/W M4P \b, MPEG v4 system, iTunes AES encrypted +>8 string/W M4B \b, MPEG v4 system, iTunes bookmarked +>8 string/W qt \b, Apple QuickTime movie !:mime video/quicktime # MPEG sequences @@ -71,6 +72,7 @@ >>7 byte x \b @ L %u 0 belong&0xFFFFFF00 0x00000100 >3 byte 0xBA MPEG sequence +!:mime video/mpeg >>4 byte &0x40 \b, v2, program multiplex >>4 byte ^0x40 \b, v1, system multiplex >3 byte 0xBB MPEG sequence, v1/2, multiplex (missing pack header) @@ -80,6 +82,7 @@ >>4 byte 88 \b, extended >>6 byte x \b @ L %u >3 byte 0xB0 MPEG sequence, v4 +!:mime video/mpeg4-generic >>5 belong 0x000001B5 >>>9 byte &0x80 >>>>10 byte&0xF0 16 \b, video @@ -469,6 +472,7 @@ # MPA, M2A 0 beshort&0xFFFE 0xFFF6 MPEG ADTS, layer I, v2 +!:mime audio/mpeg # rate >2 byte&0xF0 0x10 \b, 32 kbps >2 byte&0xF0 0x20 \b, 48 kbps @@ -503,6 +507,7 @@ # MP3, M25A 0 beshort&0xFFFE 0xFFE2 MPEG ADTS, layer III, v2.5 +!:mime audio/mpeg # rate >2 byte&0xF0 0x10 \b, 8 kbps >2 byte&0xF0 0x20 \b, 16 kbps @@ -697,6 +702,7 @@ # Microsoft Advanced Streaming Format (ASF) 0 belong 0x3026b275 Microsoft ASF +!:mime video/x-ms-asf # MNG Video Format, 0 string \x8aMNG MNG video data, @@ -718,16 +724,16 @@ 3 string \x0D\x0AVersion:Vivo Vivo video data # VRML (Virtual Reality Modelling Language) -0 string/b #VRML\ V1.0\ ascii VRML 1 file +0 string/w #VRML\ V1.0\ ascii VRML 1 file !:mime model/vrml -0 string/b #VRML\ V2.0\ utf8 ISO/IEC 14772 VRML 97 file +0 string/w #VRML\ V2.0\ utf8 ISO/IEC 14772 VRML 97 file !:mime model/vrml # X3D (Extensible 3D) [http://www.web3d.org/specifications/x3d-3.0.dtd] # From Michel Briand 0 string \20 search/1000/cb \20 search/1000/cw \ # diff --git a/contrib/file/magic/Magdir/archive b/contrib/file/magic/Magdir/archive index b75fac0838..07c509c1a0 100644 --- a/contrib/file/magic/Magdir/archive +++ b/contrib/file/magic/Magdir/archive @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: archive,v 1.55 2009/12/04 15:00:47 christos Exp $ # archive: file(1) magic for archive formats (see also "msdos" for self- # extracting compressed archives) # @@ -560,79 +562,105 @@ # [JW] see exe section for self-extracting version 0 string UC2\x1a UC2 archive data +# PKZIP multi-volume archive +0 string PK\x07\x08PK\x03\x04 Zip multi-volume archive data, at least PKZIP v2.50 to extract +!:mime application/zip + # ZIP archives (Greg Roelofs, c/o zip-bugs@wkuvx1.wku.edu) 0 string PK\003\004 ->4 byte 0x00 Zip archive data +>30 ubelong !0x6d696d65 +>>4 byte 0x00 Zip archive data !:mime application/zip ->4 byte 0x09 Zip archive data, at least v0.9 to extract +>>4 byte 0x09 Zip archive data, at least v0.9 to extract !:mime application/zip ->4 byte 0x0a Zip archive data, at least v1.0 to extract +>>4 byte 0x0a Zip archive data, at least v1.0 to extract !:mime application/zip ->4 byte 0x0b Zip archive data, at least v1.1 to extract +>>4 byte 0x0b Zip archive data, at least v1.1 to extract !:mime application/zip ->0x161 string WINZIP Zip archive data, WinZIP self-extracting +>>0x161 string WINZIP Zip archive data, WinZIP self-extracting !:mime application/zip ->4 byte 0x14 ->>30 ubelong !0x6d696d65 Zip archive data, at least v2.0 to extract +>>4 byte 0x14 Zip archive data, at least v2.0 to extract !:mime application/zip # OpenOffice.org / KOffice / StarOffice documents # Listed here because they ARE zip files # # From: Abel Cheung ->4 byte 0x14 ->>30 string mimetype +>30 string mimetype # KOffice (1.2 or above) formats ->>>50 string vnd.kde. KOffice (>=1.2) ->>>>58 string karbon Karbon document ->>>>58 string kchart KChart document ->>>>58 string kformula KFormula document ->>>>58 string kivio Kivio document ->>>>58 string kontour Kontour document ->>>>58 string kpresenter KPresenter document ->>>>58 string kspread KSpread document ->>>>58 string kword KWord document +>>50 string vnd.kde. KOffice (>=1.2) +>>>58 string karbon Karbon document +>>>58 string kchart KChart document +>>>58 string kformula KFormula document +>>>58 string kivio Kivio document +>>>58 string kontour Kontour document +>>>58 string kpresenter KPresenter document +>>>58 string kspread KSpread document +>>>58 string kword KWord document # OpenOffice formats (for OpenOffice 1.x / StarOffice 6/7) ->>>50 string vnd.sun.xml. OpenOffice.org 1.x ->>>>62 string writer Writer ->>>>>68 byte !0x2e document ->>>>>68 string .template template ->>>>>68 string .global global document ->>>>62 string calc Calc ->>>>>66 byte !0x2e spreadsheet ->>>>>66 string .template template ->>>>62 string draw Draw ->>>>>66 byte !0x2e document ->>>>>66 string .template template ->>>>62 string impress Impress ->>>>>69 byte !0x2e presentation ->>>>>69 string .template template ->>>>62 string math Math document ->>>>62 string base Database file +>>50 string vnd.sun.xml. OpenOffice.org 1.x +>>>62 string writer Writer +>>>>68 byte !0x2e document +>>>>68 string .template template +>>>>68 string .global global document +>>>62 string calc Calc +>>>>66 byte !0x2e spreadsheet +>>>>66 string .template template +>>>62 string draw Draw +>>>>66 byte !0x2e document +>>>>66 string .template template +>>>62 string impress Impress +>>>>69 byte !0x2e presentation +>>>>69 string .template template +>>>62 string math Math document +>>>62 string base Database file # OpenDocument formats (for OpenOffice 2.x / StarOffice >= 8) # http://lists.oasis-open.org/archives/office/200505/msg00006.html ->>>50 string vnd.oasis.opendocument. OpenDocument ->>>>73 string text ->>>>>77 byte !0x2d Text +>>50 string vnd.oasis.opendocument. OpenDocument +>>>73 string text +>>>>77 byte !0x2d Text !:mime application/vnd.oasis.opendocument.text ->>>>>77 string -template Text Template ->>>>>77 string -web HTML Document Template ->>>>>77 string -master Master Document ->>>>73 string graphics Drawing ->>>>>81 string -template Template ->>>>73 string presentation Presentation ->>>>>85 string -template Template ->>>>73 string spreadsheet Spreadsheet ->>>>>84 string -template Template ->>>>73 string chart Chart ->>>>>78 string -template Template ->>>>73 string formula Formula ->>>>>80 string -template Template ->>>>73 string database Database ->>>>73 string image Image +>>>>77 string -template Text Template +!:mime application/vnd.oasis.opendocument.text-template +>>>>77 string -web HTML Document Template +!:mime application/vnd.oasis.opendocument.text-web +>>>>77 string -master Master Document +!:mime application/vnd.oasis.opendocument.text-master +>>>73 string graphics +>>>>81 byte !0x2d Drawing +!:mime application/vnd.oasis.opendocument.graphics +>>>>81 string -template Template +!:mime application/vnd.oasis.opendocument.graphics-template +>>>73 string presentation +>>>>85 byte !0x2d Presentation +!:mime application/vnd.oasis.opendocument.presentation +>>>>85 string -template Template +!:mime application/vnd.oasis.opendocument.presentation-template +>>>73 string spreadsheet +>>>>84 byte !0x2d Spreadsheet +!:mime application/vnd.oasis.opendocument.spreadsheet +>>>>84 string -template Template +!:mime application/vnd.oasis.opendocument.spreadsheet-template +>>>73 string chart +>>>>78 byte !0x2d Chart +!:mime application/vnd.oasis.opendocument.chart +>>>>78 string -template Template +!:mime application/vnd.oasis.opendocument.chart-template +>>>73 string formula +>>>>80 byte !0x2d Formula +!:mime application/vnd.oasis.opendocument.formula +>>>>80 string -template Template +!:mime application/vnd.oasis.opendocument.formula-template +>>>73 string database Database +!:mime application/vnd.oasis.opendocument.database +>>>73 string image +>>>>78 byte !0x2d Image +!:mime application/vnd.oasis.opendocument.image +>>>>78 string -template Template +!:mime application/vnd.oasis.opendocument.image-template # Zoo archiver 20 lelong 0xfdc4a7dc Zoo archive data @@ -802,4 +830,3 @@ >24 belong 0 no checksum >24 belong 1 SHA-1 checksum >24 belong 2 MD5 checksum - diff --git a/contrib/file/magic/Magdir/asterix b/contrib/file/magic/Magdir/asterix index d89504a240..a9ea885cdb 100644 --- a/contrib/file/magic/Magdir/asterix +++ b/contrib/file/magic/Magdir/asterix @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: asterix,v 1.5 2009/09/19 16:28:08 christos Exp $ # asterix: file(1) magic for Aster*x; SunOS 5.5.1 gave the 4-character # strings as "long" - we assume they're just strings: # From: guy@netapp.com (Guy Harris) diff --git a/contrib/file/magic/Magdir/att3b b/contrib/file/magic/Magdir/att3b index 884ad4aa43..96880111e0 100644 --- a/contrib/file/magic/Magdir/att3b +++ b/contrib/file/magic/Magdir/att3b @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: att3b,v 1.8 2009/09/19 16:28:08 christos Exp $ # att3b: file(1) magic for AT&T 3B machines # # The `versions' should be un-commented if they work for you. diff --git a/contrib/file/magic/Magdir/audio b/contrib/file/magic/Magdir/audio index 04f80eb47c..e9694919bd 100644 --- a/contrib/file/magic/Magdir/audio +++ b/contrib/file/magic/Magdir/audio @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: audio,v 1.59 2009/11/04 17:27:37 christos Exp $ # audio: file(1) magic for sound formats (see also "iff") # # Jan Nicolai Langfeldt (janl@ifi.uio.no), Dan Quinlan (quinlan@yggdrasil.com), @@ -276,8 +278,8 @@ >21 ubyte <128 note %d, >22 byte =0 replay 5.485 KHz >22 byte =1 replay 8.084 KHz ->22 byte =2 replay 10.971 Khz ->22 byte =3 replay 16.168 Khz +>22 byte =2 replay 10.971 KHz +>22 byte =3 replay 16.168 KHz >22 byte =4 replay 21.942 KHz >22 byte =5 replay 32.336 KHz >22 byte =6 replay 43.885 KHz diff --git a/contrib/file/magic/Magdir/basis b/contrib/file/magic/Magdir/basis index 1813c0e0f0..128aa4c77c 100644 --- a/contrib/file/magic/Magdir/basis +++ b/contrib/file/magic/Magdir/basis @@ -1,4 +1,6 @@ + #---------------------------------------------------------------- +# $File: basis,v 1.4 2009/09/19 16:28:08 christos Exp $ # basis: file(1) magic for BBx/Pro5-files # Oliver Dammer 2005/11/07 # http://www.basis.com business-basic-files. diff --git a/contrib/file/magic/Magdir/bflt b/contrib/file/magic/Magdir/bflt index 5e288d130b..03eb59d34a 100644 --- a/contrib/file/magic/Magdir/bflt +++ b/contrib/file/magic/Magdir/bflt @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: bflt,v 1.4 2009/09/19 16:28:08 christos Exp $ # bFLT: file(1) magic for BFLT uclinux binary files # # From Philippe De Muyter diff --git a/contrib/file/magic/Magdir/blender b/contrib/file/magic/Magdir/blender index 6ef79507ef..1814738ab4 100644 --- a/contrib/file/magic/Magdir/blender +++ b/contrib/file/magic/Magdir/blender @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: blender,v 1.5 2009/09/19 16:28:08 christos Exp $ # blender: file(1) magic for Blender 3D related files # # Native format rule v1.2. For questions use the developers list diff --git a/contrib/file/magic/Magdir/blit b/contrib/file/magic/Magdir/blit index 7a470ed4a6..d5b687fce6 100644 --- a/contrib/file/magic/Magdir/blit +++ b/contrib/file/magic/Magdir/blit @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: blit,v 1.8 2009/09/19 16:28:08 christos Exp $ # blit: file(1) magic for 68K Blit stuff as seen from 680x0 machine # # Note that this 0407 conflicts with several other a.out formats... diff --git a/contrib/file/magic/Magdir/bout b/contrib/file/magic/Magdir/bout index 4cd6f76ef5..693cc2a4bd 100644 --- a/contrib/file/magic/Magdir/bout +++ b/contrib/file/magic/Magdir/bout @@ -1,4 +1,6 @@ -# + +#------------------------------------------------------------------------------ +# $File: bout,v 1.5 2009/09/19 16:28:08 christos Exp $ # i80960 b.out objects and archives # 0 long 0x10d i960 b.out relocatable object diff --git a/contrib/file/magic/Magdir/bsdi b/contrib/file/magic/Magdir/bsdi index ad547599ba..be16e3a1a2 100644 --- a/contrib/file/magic/Magdir/bsdi +++ b/contrib/file/magic/Magdir/bsdi @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: bsdi,v 1.5 2009/09/19 16:28:08 christos Exp $ # bsdi: file(1) magic for BSD/OS (from BSDI) objects # diff --git a/contrib/file/magic/Magdir/btsnoop b/contrib/file/magic/Magdir/btsnoop index 85d867a446..d72daad877 100644 --- a/contrib/file/magic/Magdir/btsnoop +++ b/contrib/file/magic/Magdir/btsnoop @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: btsnoop,v 1.5 2009/09/19 16:28:08 christos Exp $ # BTSnoop: file(1) magic for BTSnoop files # # From diff --git a/contrib/file/magic/Magdir/c-lang b/contrib/file/magic/Magdir/c-lang index 895e37f656..cb6d10abcc 100644 --- a/contrib/file/magic/Magdir/c-lang +++ b/contrib/file/magic/Magdir/c-lang @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: c-lang,v 1.14 2009/09/19 16:28:08 christos Exp $ # c-lang: file(1) magic for C programs (or REXX) # diff --git a/contrib/file/magic/Magdir/c64 b/contrib/file/magic/Magdir/c64 index f8a8b76c6b..eea3e31910 100644 --- a/contrib/file/magic/Magdir/c64 +++ b/contrib/file/magic/Magdir/c64 @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: c64,v 1.5 2009/09/19 16:28:08 christos Exp $ # c64: file(1) magic for various commodore 64 related files # # From: Dirk Jagdmann diff --git a/contrib/file/magic/Magdir/cad b/contrib/file/magic/Magdir/cad index 757dab6be0..f2b0eba7cb 100644 --- a/contrib/file/magic/Magdir/cad +++ b/contrib/file/magic/Magdir/cad @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: cad,v 1.9 2009/09/19 16:28:08 christos Exp $ # autocad: file(1) magic for cad files # diff --git a/contrib/file/magic/Magdir/cafebabe b/contrib/file/magic/Magdir/cafebabe index e25c974dd5..6400e2f3b0 100644 --- a/contrib/file/magic/Magdir/cafebabe +++ b/contrib/file/magic/Magdir/cafebabe @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: cafebabe,v 1.8 2009/09/19 16:28:08 christos Exp $ # Cafe Babes unite! # # Since Java bytecode and Mach-O fat-files have the same magic number, the test diff --git a/contrib/file/magic/Magdir/cddb b/contrib/file/magic/Magdir/cddb index 42ca416bd8..5d8a8517e2 100644 --- a/contrib/file/magic/Magdir/cddb +++ b/contrib/file/magic/Magdir/cddb @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: cddb,v 1.4 2009/09/19 16:28:08 christos Exp $ # CDDB: file(1) magic for CDDB(tm) format CD text data files # # From @@ -7,4 +9,4 @@ # CDDB-enabled CD player applications. # -0 search/1/b #\040xmcd CDDB(tm) format CD text data +0 search/1/w #\040xmcd CDDB(tm) format CD text data diff --git a/contrib/file/magic/Magdir/chord b/contrib/file/magic/Magdir/chord index 3639f3c491..134ee81f9e 100644 --- a/contrib/file/magic/Magdir/chord +++ b/contrib/file/magic/Magdir/chord @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: chord,v 1.4 2009/09/19 16:28:08 christos Exp $ # chord: file(1) magic for Chord music sheet typesetting utility input files # # From Philippe De Muyter diff --git a/contrib/file/magic/Magdir/cisco b/contrib/file/magic/Magdir/cisco index 77e3efb5e3..0279bbb5b5 100644 --- a/contrib/file/magic/Magdir/cisco +++ b/contrib/file/magic/Magdir/cisco @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: cisco,v 1.4 2009/09/19 16:28:08 christos Exp $ # cisco: file(1) magic for cisco Systems routers # # Most cisco file-formats are covered by the generic elf code diff --git a/contrib/file/magic/Magdir/citrus b/contrib/file/magic/Magdir/citrus index 6d44794553..ff2471ea75 100644 --- a/contrib/file/magic/Magdir/citrus +++ b/contrib/file/magic/Magdir/citrus @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: citrus,v 1.4 2009/09/19 16:28:08 christos Exp $ # citrus locale declaration # diff --git a/contrib/file/magic/Magdir/clarion b/contrib/file/magic/Magdir/clarion index 5f5f6e7561..cff7a3bdd0 100644 --- a/contrib/file/magic/Magdir/clarion +++ b/contrib/file/magic/Magdir/clarion @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: clarion,v 1.4 2009/09/19 16:28:08 christos Exp $ # clarion: file(1) magic for # Clarion Personal/Professional Developer # (v2 and above) # From: Julien Blache diff --git a/contrib/file/magic/Magdir/claris b/contrib/file/magic/Magdir/claris index 368b473260..a2b120a834 100644 --- a/contrib/file/magic/Magdir/claris +++ b/contrib/file/magic/Magdir/claris @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: claris,v 1.5 2009/09/19 16:28:08 christos Exp $ # claris: file(1) magic for claris # "H. Nanosecond" # Claris Works a word processor, etc. diff --git a/contrib/file/magic/Magdir/clipper b/contrib/file/magic/Magdir/clipper index c325cb8f7c..9f47534059 100644 --- a/contrib/file/magic/Magdir/clipper +++ b/contrib/file/magic/Magdir/clipper @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: clipper,v 1.6 2009/09/19 16:28:08 christos Exp $ # clipper: file(1) magic for Intergraph (formerly Fairchild) Clipper. # # XXX - what byte order does the Clipper use? diff --git a/contrib/file/magic/Magdir/commands b/contrib/file/magic/Magdir/commands index 0942802d91..7874de7e2c 100644 --- a/contrib/file/magic/Magdir/commands +++ b/contrib/file/magic/Magdir/commands @@ -1,62 +1,63 @@ #------------------------------------------------------------------------------ +# $File: commands,v 1.36 2010/01/24 18:41:11 christos Exp $ # commands: file(1) magic for various shells and interpreters # #0 string : shell archive or script for antique kernel text -0 string/b #!\ /bin/sh POSIX shell script text executable +0 string/w #!\ /bin/sh POSIX shell script text executable !:mime text/x-shellscript -0 string/b #!\ /bin/csh C shell script text executable +0 string/w #!\ /bin/csh C shell script text executable !:mime text/x-shellscript # korn shell magic, sent by George Wu, gwu@clyde.att.com -0 string/b #!\ /bin/ksh Korn shell script text executable +0 string/w #!\ /bin/ksh Korn shell script text executable !:mime text/x-shellscript -0 string/b #!\ /bin/tcsh Tenex C shell script text executable +0 string/w #!\ /bin/tcsh Tenex C shell script text executable !:mime text/x-shellscript -0 string/b #!\ /usr/local/tcsh Tenex C shell script text executable +0 string/w #!\ /usr/local/tcsh Tenex C shell script text executable !:mime text/x-shellscript -0 string/b #!\ /usr/local/bin/tcsh Tenex C shell script text executable +0 string/w #!\ /usr/local/bin/tcsh Tenex C shell script text executable !:mime text/x-shellscript # # zsh/ash/ae/nawk/gawk magic from cameron@cs.unsw.oz.au (Cameron Simpson) -0 string/b #!\ /bin/zsh Paul Falstad's zsh script text executable +0 string/w #!\ /bin/zsh Paul Falstad's zsh script text executable !:mime text/x-shellscript -0 string/b #!\ /usr/bin/zsh Paul Falstad's zsh script text executable +0 string/w #!\ /usr/bin/zsh Paul Falstad's zsh script text executable !:mime text/x-shellscript -0 string/b #!\ /usr/local/bin/zsh Paul Falstad's zsh script text executable +0 string/w #!\ /usr/local/bin/zsh Paul Falstad's zsh script text executable !:mime text/x-shellscript -0 string/b #!\ /usr/local/bin/ash Neil Brown's ash script text executable +0 string/w #!\ /usr/local/bin/ash Neil Brown's ash script text executable !:mime text/x-shellscript -0 string/b #!\ /usr/local/bin/ae Neil Brown's ae script text executable +0 string/w #!\ /usr/local/bin/ae Neil Brown's ae script text executable !:mime text/x-shellscript -0 string/b #!\ /bin/nawk new awk script text executable +0 string/w #!\ /bin/nawk new awk script text executable !:mime text/x-nawk -0 string/b #!\ /usr/bin/nawk new awk script text executable +0 string/w #!\ /usr/bin/nawk new awk script text executable !:mime text/x-nawk -0 string/b #!\ /usr/local/bin/nawk new awk script text executable +0 string/w #!\ /usr/local/bin/nawk new awk script text executable !:mime text/x-nawk -0 string/b #!\ /bin/gawk GNU awk script text executable +0 string/w #!\ /bin/gawk GNU awk script text executable !:mime text/x-gawk -0 string/b #!\ /usr/bin/gawk GNU awk script text executable +0 string/w #!\ /usr/bin/gawk GNU awk script text executable !:mime text/x-gawk -0 string/b #!\ /usr/local/bin/gawk GNU awk script text executable +0 string/w #!\ /usr/local/bin/gawk GNU awk script text executable !:mime text/x-gawk # -0 string/b #!\ /bin/awk awk script text executable +0 string/w #!\ /bin/awk awk script text executable !:mime text/x-awk -0 string/b #!\ /usr/bin/awk awk script text executable +0 string/w #!\ /usr/bin/awk awk script text executable !:mime text/x-awk # update to distinguish from *.vcf files # this is broken because postscript has /EBEGIN{ for example. -#0 search/Bb BEGIN { awk script text +#0 search/Ww BEGIN { awk script text # AT&T Bell Labs' Plan 9 shell -0 string/b #!\ /bin/rc Plan 9 rc shell script text executable +0 string/w #!\ /bin/rc Plan 9 rc shell script text executable # bash shell magic, from Peter Tobias (tobias@server.et-inf.fho-emden.de) -0 string/b #!\ /bin/bash Bourne-Again shell script text executable +0 string/w #!\ /bin/bash Bourne-Again shell script text executable !:mime text/x-shellscript -0 string/b #!\ /usr/local/bin/bash Bourne-Again shell script text executable +0 string/w #!\ /usr/local/bin/bash Bourne-Again shell script text executable !:mime text/x-shellscript # using env @@ -73,9 +74,9 @@ !:mime text/x-php 0 search/1 = # ines: file(1) magic for Marat's iNES Nintendo Entertainment System diff --git a/contrib/file/magic/Magdir/convex b/contrib/file/magic/Magdir/convex index b1235d7e79..6141a82bba 100644 --- a/contrib/file/magic/Magdir/convex +++ b/contrib/file/magic/Magdir/convex @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: convex,v 1.7 2009/09/19 16:28:08 christos Exp $ # convex: file(1) magic for Convex boxes # # Convexes are big-endian. diff --git a/contrib/file/magic/Magdir/cracklib b/contrib/file/magic/Magdir/cracklib index a1a5a27553..167659670d 100644 --- a/contrib/file/magic/Magdir/cracklib +++ b/contrib/file/magic/Magdir/cracklib @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: cracklib,v 1.7 2009/09/19 16:28:08 christos Exp $ # cracklib: file (1) magic for cracklib v2.7 0 lelong 0x70775631 Cracklib password index, little endian diff --git a/contrib/file/magic/Magdir/ctags b/contrib/file/magic/Magdir/ctags index f326cf5cf9..f480d32338 100644 --- a/contrib/file/magic/Magdir/ctags +++ b/contrib/file/magic/Magdir/ctags @@ -1,4 +1,6 @@ + # ---------------------------------------------------------------------------- +# $File: ctags,v 1.6 2009/09/19 16:28:08 christos Exp $ # ctags: file (1) magic for Exuberant Ctags files # From: Alexander Mai 0 search/1 =!_TAG Exuberant Ctags tag file text diff --git a/contrib/file/magic/Magdir/dact b/contrib/file/magic/Magdir/dact index 5cca8d9616..04627c9703 100644 --- a/contrib/file/magic/Magdir/dact +++ b/contrib/file/magic/Magdir/dact @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: dact,v 1.4 2009/09/19 16:28:08 christos Exp $ # dact: file(1) magic for DACT compressed files # 0 long 0x444354C3 DACT compressed data diff --git a/contrib/file/magic/Magdir/database b/contrib/file/magic/Magdir/database index 0134355f38..c4a03f41d5 100644 --- a/contrib/file/magic/Magdir/database +++ b/contrib/file/magic/Magdir/database @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: database,v 1.24 2009/09/19 16:28:08 christos Exp $ # database: file(1) magic for various databases # # extracted from header/code files by Graeme Wilford (eep2gw@ee.surrey.ac.uk) diff --git a/contrib/file/magic/Magdir/diamond b/contrib/file/magic/Magdir/diamond index 1abd01e030..39d1ed6258 100644 --- a/contrib/file/magic/Magdir/diamond +++ b/contrib/file/magic/Magdir/diamond @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: diamond,v 1.7 2009/09/19 16:28:08 christos Exp $ # diamond: file(1) magic for Diamond system # # ... diamond is a multi-media mail and electronic conferencing system.... diff --git a/contrib/file/magic/Magdir/diff b/contrib/file/magic/Magdir/diff index 291bae67f5..0992caa9c4 100644 --- a/contrib/file/magic/Magdir/diff +++ b/contrib/file/magic/Magdir/diff @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: diff,v 1.10 2009/09/19 16:28:08 christos Exp $ # diff: file(1) magic for diff(1) output # 0 search/1 diff\ diff output text @@ -12,3 +14,6 @@ 0 search/1 Index: RCS/CVS diff output text !:mime text/x-diff + +# bsdiff: file(1) magic for bsdiff(1) output +0 string BSDIFF40 bsdiff(1) patch file diff --git a/contrib/file/magic/Magdir/digital b/contrib/file/magic/Magdir/digital index 615ef7a58c..7f08b44e57 100644 --- a/contrib/file/magic/Magdir/digital +++ b/contrib/file/magic/Magdir/digital @@ -1,3 +1,6 @@ + +#------------------------------------------------------------------------------ +# $File: digital,v 1.8 2009/09/19 16:28:08 christos Exp $ # Digital UNIX - Info # 0 string =!\n________64E Alpha archive diff --git a/contrib/file/magic/Magdir/dolby b/contrib/file/magic/Magdir/dolby index 230f738a20..fee287ccf1 100644 --- a/contrib/file/magic/Magdir/dolby +++ b/contrib/file/magic/Magdir/dolby @@ -1,3 +1,6 @@ + +#------------------------------------------------------------------------------ +# $File: dolby,v 1.5 2009/09/19 16:28:08 christos Exp $ # ATSC A/53 aka AC-3 aka Dolby Digital # from http://www.atsc.org/standards/a_52a.pdf # corrections, additions, etc. are always welcome! diff --git a/contrib/file/magic/Magdir/dump b/contrib/file/magic/Magdir/dump index cef191a2de..1ac91e2201 100644 --- a/contrib/file/magic/Magdir/dump +++ b/contrib/file/magic/Magdir/dump @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: dump,v 1.11 2009/09/19 16:28:09 christos Exp $ # dump: file(1) magic for dump file format--for new and old dump filesystems # # We specify both byte orders in order to recognize byte-swapped dumps. diff --git a/contrib/file/magic/Magdir/dyadic b/contrib/file/magic/Magdir/dyadic index e8a9d25d8c..aa10c2e4e8 100644 --- a/contrib/file/magic/Magdir/dyadic +++ b/contrib/file/magic/Magdir/dyadic @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: dyadic,v 1.4 2009/09/19 16:28:09 christos Exp $ # Dyadic: file(1) magic for Dyalog APL. # 0 byte 0xaa diff --git a/contrib/file/magic/Magdir/editors b/contrib/file/magic/Magdir/editors index 0b15bf820a..4c5b8a6699 100644 --- a/contrib/file/magic/Magdir/editors +++ b/contrib/file/magic/Magdir/editors @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: editors,v 1.8 2009/09/19 16:28:09 christos Exp $ # T602 editor documents # by David Necas 0 string @CT\ T602 document data, diff --git a/contrib/file/magic/Magdir/efi b/contrib/file/magic/Magdir/efi index 4eec2eb937..7335c5cefd 100644 --- a/contrib/file/magic/Magdir/efi +++ b/contrib/file/magic/Magdir/efi @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: efi,v 1.4 2009/09/19 16:28:09 christos Exp $ # efi: file(1) magic for Universal EFI binaries 0 lelong 0x0ef1fab9 diff --git a/contrib/file/magic/Magdir/elf b/contrib/file/magic/Magdir/elf index c605495429..f4e7af52b9 100644 --- a/contrib/file/magic/Magdir/elf +++ b/contrib/file/magic/Magdir/elf @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: elf,v 1.53 2009/09/19 16:28:09 christos Exp $ # elf: file(1) magic for ELF executables # # We have to check the byte order flag to see what byte order all the diff --git a/contrib/file/magic/Magdir/encore b/contrib/file/magic/Magdir/encore index 63cb5d4f9f..ef82eed64b 100644 --- a/contrib/file/magic/Magdir/encore +++ b/contrib/file/magic/Magdir/encore @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: encore,v 1.6 2009/09/19 16:28:09 christos Exp $ # encore: file(1) magic for Encore machines # # XXX - needs to have the byte order specified (NS32K was little-endian, diff --git a/contrib/file/magic/Magdir/epoc b/contrib/file/magic/Magdir/epoc index 80229c47f3..c67a8b66e7 100644 --- a/contrib/file/magic/Magdir/epoc +++ b/contrib/file/magic/Magdir/epoc @@ -1,11 +1,53 @@ + #------------------------------------------------------------------------------ +# $File: epoc,v 1.7 2009/09/19 16:28:09 christos Exp $ # EPOC : file(1) magic for EPOC documents [Psion Series 5/Osaris/Geofox 1] -# Stefan Praszalowicz (hpicollo@worldnet.fr) +# Stefan Praszalowicz and Peter Breitenlohner # Useful information for improving this file can be found at: # http://software.frodo.looijaard.name/psiconv/formats/Index.html -0 lelong 0x10000037 +#------------------------------------------------------------------------------ +0 lelong 0x10000037 Psion Series 5 +>4 lelong 0x10000039 font file +>4 lelong 0x1000003A printer driver +>4 lelong 0x1000003B clipboard +>4 lelong 0x10000042 multi-bitmap image +!:mime image/x-epoc-mbm +>4 lelong 0x1000006A application information file >4 lelong 0x1000006D ->>8 lelong 0x1000007F Psion Word ->>8 lelong 0x10000088 Psion Sheet ->>8 lelong 0x1000007D Psion Sketch ->>8 lelong 0x10000085 Psion TextEd +>>8 lelong 0x1000007D Sketch image +!:mime image/x-epoc-sketch +>>8 lelong 0x1000007E voice note +>>8 lelong 0x1000007F Word file +!:mime application/x-epoc-word +>>8 lelong 0x10000085 OPL program (TextEd) +!:mime application/x-epoc-opl +>>8 lelong 0x10000088 Sheet file +!:mime application/x-epoc-sheet +>>8 lelong 0x100001C4 EasyFax initialisation file +>4 lelong 0x10000073 OPO module +!:mime application/x-epoc-opo +>4 lelong 0x10000074 OPL application +!:mime application/x-epoc-app +>4 lelong 0x1000008A exported multi-bitmap image + +0 lelong 0x10000041 Psion Series 5 ROM multi-bitmap image + +0 lelong 0x10000050 Psion Series 5 +>4 lelong 0x1000006D database +>4 lelong 0x100000E4 ini file + +0 lelong 0x10000079 Psion Series 5 binary: +>4 lelong 0x00000000 DLL +>4 lelong 0x10000049 comms hardware library +>4 lelong 0x1000004A comms protocol library +>4 lelong 0x1000005D OPX +>4 lelong 0x1000006C application +>4 lelong 0x1000008D DLL +>4 lelong 0x100000AC logical device driver +>4 lelong 0x100000AD physical device driver +>4 lelong 0x100000E5 file transfer protocol +>4 lelong 0x100000E5 file transfer protocol +>4 lelong 0x10000140 printer definition +>4 lelong 0x10000141 printer definition + +0 lelong 0x1000007A Psion Series 5 executable diff --git a/contrib/file/magic/Magdir/erlang b/contrib/file/magic/Magdir/erlang index 6b2c4dcc3c..4686868767 100644 --- a/contrib/file/magic/Magdir/erlang +++ b/contrib/file/magic/Magdir/erlang @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: erlang,v 1.5 2009/09/19 16:28:09 christos Exp $ # erlang: file(1) magic for Erlang JAM and BEAM files # URL: http://www.erlang.org/faq/x779.html#AEN812 diff --git a/contrib/file/magic/Magdir/esri b/contrib/file/magic/Magdir/esri index 35c34923e0..e070e4f83f 100644 --- a/contrib/file/magic/Magdir/esri +++ b/contrib/file/magic/Magdir/esri @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: esri,v 1.4 2009/09/19 16:28:09 christos Exp $ # ESRI Shapefile format (.shp .shx .dbf=DBaseIII) # Based on info from # diff --git a/contrib/file/magic/Magdir/fcs b/contrib/file/magic/Magdir/fcs index ac4b02c81c..613437f842 100644 --- a/contrib/file/magic/Magdir/fcs +++ b/contrib/file/magic/Magdir/fcs @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: fcs,v 1.4 2009/09/19 16:28:09 christos Exp $ # fcs: file(1) magic for FCS (Flow Cytometry Standard) data files # From Roger Leigh 0 string FCS1.0 Flow Cytometry Standard (FCS) data, version 1.0 diff --git a/contrib/file/magic/Magdir/filesystems b/contrib/file/magic/Magdir/filesystems index 93da429432..8d60f69fd6 100644 --- a/contrib/file/magic/Magdir/filesystems +++ b/contrib/file/magic/Magdir/filesystems @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: filesystems,v 1.55 2010/01/16 17:45:12 chl Exp $ # filesystems: file(1) magic for different filesystems # 0 string \366\366\366\366 PC formatted floppy with no filesystem @@ -202,7 +203,7 @@ # http://www.bcdwb.de/bcdw/index_e.htm >3 string BCDL >>498 string BCDL\ \ \ \ BIN \b, Bootable CD Loader (1.50Z) -# mbr partion table entries +# mbr partition table entries # OEM-ID does not contain MicroSoft,NEWLDR,DOS,SYSLINUX,or MTOOLs >3 string !MS >>3 string !SYSLINUX @@ -256,7 +257,7 @@ #>>>>>>>>>>>>496 ubeshort&1023 x \b, startcylinder? %d >>>>>>>>>>>>502 ulelong x \b, startsector %u >>>>>>>>>>>>506 ulelong x \b, %u sectors -# mbr partion table entries end +# mbr partition table entries end # http://www.acronis.de/ #FAT label=ACRONIS\ SZ #OEM-ID=BOOTWIZ0 @@ -882,13 +883,37 @@ # Minix filesystems - Juan Cespedes -0x410 leshort 0x137f Minix filesystem -0x410 beshort 0x137f Minix filesystem (big endian) ->0x402 beshort !0 \b, %d zones +0x410 leshort 0x137f +>0x402 beshort < 100 Minix filesystem, V1, %d zones +>0x1e string minix \b, bootable +0x410 beshort 0x137f +>0x402 beshort < 100 Minix filesystem, V1 (big endian), %d zones +>0x1e string minix \b, bootable +0x410 leshort 0x138f +>0x402 beshort < 100 Minix filesystem, V1, 30 char names, %d zones +>0x1e string minix \b, bootable +0x410 beshort 0x138f +>0x402 beshort < 100 Minix filesystem, V1, 30 char names (big endian), %d zones +>0x1e string minix \b, bootable +0x410 leshort 0x2468 +>0x402 beshort < 100 Minix filesystem, V2, %d zones +>0x1e string minix \b, bootable +0x410 beshort 0x2468 +>0x402 beshort < 100 Minix filesystem, V2 (big endian), %d zones +>0x1e string minix \b, bootable + +0x410 leshort 0x2478 +>0x402 beshort < 100 Minix filesystem, V2, 30 char names, %d zones +>0x1e string minix \b, bootable +0x410 leshort 0x2478 +>0x402 beshort < 100 Minix filesystem, V2, 30 char names, %d zones +>0x1e string minix \b, bootable +0x410 beshort 0x2478 +>0x402 beshort !0 Minix filesystem, V2, 30 char names (big endian), %d zones +>0x1e string minix \b, bootable +0x410 leshort 0x4d5a +>0x402 beshort !0 Minix filesystem, V3, %d zones >0x1e string minix \b, bootable -0x410 leshort 0x138f Minix filesystem, 30 char names -0x410 leshort 0x2468 Minix filesystem, version 2 -0x410 leshort 0x2478 Minix filesystem, version 2, 30 char names # romfs filesystems - Juan Cespedes 0 string -rom1fs- romfs filesystem, version 1 @@ -1211,6 +1236,9 @@ !:mime application/x-iso9660-image 32776 string CDROM High Sierra CD-ROM filesystem data +# .cso files +0 string CISO Compressed ISO CD image + # cramfs filesystem - russell@coker.com.au 0 lelong 0x28cd3d45 Linux Compressed ROM File System data, little endian >4 lelong x size %lu @@ -1255,11 +1283,70 @@ 0 string VoIP\ Startup\ and Aculab VoIP firmware >35 string x format %s -# u-boot/PPCBoot image file -# From: Mark Brown -0 belong 0x27051956 u-boot/PPCBoot image ->4 string PPCBoot ->>12 string x version %s +# From: Mark Brown [old] +# From: Behan Webster +0 belong 0x27051956 u-boot legacy uImage, +>32 string x %s, +>28 byte 0 Invalid os/ +>28 byte 1 OpenBSD/ +>28 byte 2 NetBSD/ +>28 byte 3 FreeBSD/ +>28 byte 4 4.4BSD/ +>28 byte 5 Linux/ +>28 byte 6 SVR4/ +>28 byte 7 Esix/ +>28 byte 8 Solaris/ +>28 byte 9 Irix/ +>28 byte 10 SCO/ +>28 byte 11 Dell/ +>28 byte 12 NCR/ +>28 byte 13 LynxOS/ +>28 byte 14 VxWorks/ +>28 byte 15 pSOS/ +>28 byte 16 QNX/ +>28 byte 17 Firmware/ +>28 byte 18 RTEMS/ +>28 byte 19 ARTOS/ +>28 byte 20 Unity OS/ +>28 byte 21 INTEGRITY/ +>29 byte 0 \bInvalid CPU, +>29 byte 1 \bAlpha, +>29 byte 2 \bARM, +>29 byte 3 \bIntel x86, +>29 byte 4 \bIA64, +>29 byte 5 \bMIPS, +>29 byte 6 \bMIPS 64-bit, +>29 byte 7 \bPowerPC, +>29 byte 8 \bIBM S390, +>29 byte 9 \bSuperH, +>29 byte 10 \bSparc, +>29 byte 11 \bSparc 64-bit, +>29 byte 12 \bM68K, +>29 byte 13 \bNios-32, +>29 byte 14 \bMicroBlaze, +>29 byte 15 \bNios-II, +>29 byte 16 \bBlackfin, +>29 byte 17 \bAVR32, +>29 byte 18 \bSTMicroelectronics ST200, +>30 byte 0 Invalid Image +>30 byte 1 Standalone Program +>30 byte 2 OS Kernel Image +>30 byte 3 RAMDisk Image +>30 byte 4 Multi-File Image +>30 byte 5 Firmware Image +>30 byte 6 Script File +>30 byte 7 Filesystem Image (any type) +>30 byte 8 Binary Flat Device Tree BLOB +>31 byte 0 (Not compressed), +>31 byte 1 (gzip), +>31 byte 2 (bzip2), +>31 byte 3 (lzma), +>12 belong x %d bytes, +>8 bedate x %s, +>16 belong x Load Address: 0x%08X, +>20 belong x Entry Point: 0x%08X, +>4 belong x Header CRC: 0x%08X, +>24 belong x Data CRC: 0x%08X # JFFS2 file system 0 leshort 0x1984 Linux old jffs2 filesystem data little endian @@ -1312,6 +1399,10 @@ >>>>>>>>&0 bedate !0 incremental since: %s #---------------------------------------------------------- +#delta ISO Daniel Novotny (dnovotny@redhat.com) +0 string DISO Delta ISO data +>4 belong x version %d + # VMS backup savesets - gerardo.cacciari@gmail.com # 4 string \x01\x00\x01\x00\x01\x00 @@ -1392,3 +1483,10 @@ # dvdisaster's .ecc # From: "Nelson A. de Oliveira" 0 string *dvdisaster* dvdisaster error correction file + +# xfs metadump image +# mb_magic XFSM at 0; superblock magic XFSB at 1 << mb_blocklog +# but can we do the << ? For now it's always 512 (0x200) anyway. +0 string XFSM +>0x200 string XFSB XFS filesystem metadump image + diff --git a/contrib/file/magic/Magdir/flash b/contrib/file/magic/Magdir/flash index 0b985f22b7..dea35aed0b 100644 --- a/contrib/file/magic/Magdir/flash +++ b/contrib/file/magic/Magdir/flash @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: flash,v 1.9 2009/11/08 01:30:01 christos Exp $ # flash: file(1) magic for Macromedia Flash file format # # See @@ -17,5 +18,8 @@ !:mime video/x-flv # +# Yosu Gomez +0 string AGD2\xbe\xb8\xbb\xcd\x00 Macromedia Freehand 7 Document +0 string AGD3\xbe\xb8\xbb\xcc\x00 Macromedia Freehand 8 Document # From Dave Wilson 0 string AGD4\xbe\xb8\xbb\xcb\x00 Macromedia Freehand 9 Document diff --git a/contrib/file/magic/Magdir/fonts b/contrib/file/magic/Magdir/fonts index 31ff8a2c8b..3c5d7441c4 100644 --- a/contrib/file/magic/Magdir/fonts +++ b/contrib/file/magic/Magdir/fonts @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: fonts,v 1.21 2009/12/06 23:17:52 rrt Exp $ # fonts: file(1) magic for font data # 0 search/1 FONT ASCII vfont text @@ -9,6 +11,9 @@ 0 string %!PS-AdobeFont-1. PostScript Type 1 font text >20 string >\0 (%s) 6 string %!PS-AdobeFont-1. PostScript Type 1 font program data +0 string %!FontType1 PostScript Type 1 font program data +6 string %!FontType1 PostScript Type 1 font program data +0 string %!PS-Adobe-3.0\ Resource-Font PostScript Type 1 font text # X11 font files in SNF (Server Natural Format) format 0 belong 00000004 X11 SNF font data, MSB first @@ -51,6 +56,7 @@ # True Type fonts 0 string \000\001\000\000\000 TrueType font data +!:mime application/x-font-ttf 0 string \007\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font 0 string \012\001\001\000Copyright\ (c)\ 199 Adobe Multiple Master font @@ -58,8 +64,10 @@ 0 string ttcf TrueType font collection data # Opentype font data from Avi Bercovich -0 string OTTO OpenType font data +0 string OTTO OpenType font data +!:mime application/vnd.ms-opentype # Gürkan Sengün , www.linuks.mine.nu 0 string SplineFontDB: Spline Font Database +!:mime application/vnd.font-fontforge-sfd >14 string x version %s diff --git a/contrib/file/magic/Magdir/fortran b/contrib/file/magic/Magdir/fortran index f42c7c8a8d..e2ef0cdb75 100644 --- a/contrib/file/magic/Magdir/fortran +++ b/contrib/file/magic/Magdir/fortran @@ -1,3 +1,6 @@ + +#------------------------------------------------------------------------------ +# $File: fortran,v 1.6 2009/09/19 16:28:09 christos Exp $ # FORTRAN source 0 regex/100 \^[Cc][\ \t] FORTRAN program !:mime text/x-fortran diff --git a/contrib/file/magic/Magdir/frame b/contrib/file/magic/Magdir/frame index 3699b44223..babe890271 100644 --- a/contrib/file/magic/Magdir/frame +++ b/contrib/file/magic/Magdir/frame @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: frame,v 1.12 2009/09/19 16:28:09 christos Exp $ # frame: file(1) magic for FrameMaker files # # This stuff came on a FrameMaker demo tape, most of which is diff --git a/contrib/file/magic/Magdir/freebsd b/contrib/file/magic/Magdir/freebsd index be30417770..a01ac4a285 100644 --- a/contrib/file/magic/Magdir/freebsd +++ b/contrib/file/magic/Magdir/freebsd @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: freebsd,v 1.7 2009/09/19 16:28:09 christos Exp $ # freebsd: file(1) magic for FreeBSD objects # # All new-style FreeBSD magic numbers are in host byte order (i.e., diff --git a/contrib/file/magic/Magdir/fsav b/contrib/file/magic/Magdir/fsav index ccc6d596c2..0a7a7f8020 100644 --- a/contrib/file/magic/Magdir/fsav +++ b/contrib/file/magic/Magdir/fsav @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: fsav,v 1.11 2009/09/19 16:28:09 christos Exp $ # fsav: file(1) magic for datafellows fsav virus definition files # Anthon van der Neut (anthon@mnt.org) diff --git a/contrib/file/magic/Magdir/games b/contrib/file/magic/Magdir/games index 32ccdfeaab..782bfe93d7 100644 --- a/contrib/file/magic/Magdir/games +++ b/contrib/file/magic/Magdir/games @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: games,v 1.8 2009/09/19 16:28:09 christos Exp $ # games: file(1) for games # Fabio Bonelli diff --git a/contrib/file/magic/Magdir/gcc b/contrib/file/magic/Magdir/gcc index ee726f3a5a..893d0d91e6 100644 --- a/contrib/file/magic/Magdir/gcc +++ b/contrib/file/magic/Magdir/gcc @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: gcc,v 1.4 2009/09/19 16:28:09 christos Exp $ # gcc: file(1) magic for GCC special files # 0 string gpch GCC precompiled header diff --git a/contrib/file/magic/Magdir/geos b/contrib/file/magic/Magdir/geos index af1df7b719..66c2bd1a29 100644 --- a/contrib/file/magic/Magdir/geos +++ b/contrib/file/magic/Magdir/geos @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: geos,v 1.4 2009/09/19 16:28:09 christos Exp $ # GEOS files (Vidar Madsen, vidar@gimp.org) # semi-commonly used in embedded and handheld systems. 0 belong 0xc745c153 GEOS diff --git a/contrib/file/magic/Magdir/gimp b/contrib/file/magic/Magdir/gimp index 674bbfba62..4fc65210a5 100644 --- a/contrib/file/magic/Magdir/gimp +++ b/contrib/file/magic/Magdir/gimp @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: gimp,v 1.6 2009/09/19 16:28:09 christos Exp $ # GIMP Gradient: file(1) magic for the GIMP's gradient data files # by Federico Mena diff --git a/contrib/file/magic/Magdir/gnome-keyring b/contrib/file/magic/Magdir/gnome-keyring index 80a4f882c1..463688fe7d 100644 --- a/contrib/file/magic/Magdir/gnome-keyring +++ b/contrib/file/magic/Magdir/gnome-keyring @@ -1,3 +1,6 @@ + +#------------------------------------------------------------------------------ +# $File: gnome-keyring,v 1.2 2009/09/19 16:28:09 christos Exp $ # GNOME keyring # Contributed by Josh Triplett # FIXME: Could be simplified if pstring supported two-byte counts diff --git a/contrib/file/magic/Magdir/gnu b/contrib/file/magic/Magdir/gnu index 66c670c55f..55df7b7458 100644 --- a/contrib/file/magic/Magdir/gnu +++ b/contrib/file/magic/Magdir/gnu @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: gnu,v 1.11 2009/09/19 16:28:09 christos Exp $ # gnu: file(1) magic for various GNU tools # # GNU nlsutils message catalog file format diff --git a/contrib/file/magic/Magdir/gnumeric b/contrib/file/magic/Magdir/gnumeric index 76dfa90684..928ad3eed1 100644 --- a/contrib/file/magic/Magdir/gnumeric +++ b/contrib/file/magic/Magdir/gnumeric @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: gnumeric,v 1.4 2009/09/19 16:28:09 christos Exp $ # gnumeric: file(1) magic for Gnumeric spreadsheet # This entry is only semi-helpful, as Gnumeric compresses its files, so # they will ordinarily reported as "compressed", but at least -z helps diff --git a/contrib/file/magic/Magdir/grace b/contrib/file/magic/Magdir/grace index a5f143359e..25bd759edc 100644 --- a/contrib/file/magic/Magdir/grace +++ b/contrib/file/magic/Magdir/grace @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: grace,v 1.4 2009/09/19 16:28:09 christos Exp $ # ACE/gr and Grace type files - PLEASE DO NOT REMOVE THIS LINE # # ACE/gr binary diff --git a/contrib/file/magic/Magdir/graphviz b/contrib/file/magic/Magdir/graphviz index 831a002595..b944d4637c 100644 --- a/contrib/file/magic/Magdir/graphviz +++ b/contrib/file/magic/Magdir/graphviz @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: graphviz,v 1.7 2009/09/19 16:28:09 christos Exp $ # graphviz: file(1) magic for http://www.graphviz.org/ # FIXME: These patterns match too generally. For example, the first diff --git a/contrib/file/magic/Magdir/gringotts b/contrib/file/magic/Magdir/gringotts index 6e833a3e1d..2bfef1b7f7 100644 --- a/contrib/file/magic/Magdir/gringotts +++ b/contrib/file/magic/Magdir/gringotts @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: gringotts,v 1.5 2009/09/19 16:28:09 christos Exp $ # gringotts: file(1) magic for Gringotts # http://devel.pluto.linux.it/projects/Gringotts/ # author: Germano Rizzo diff --git a/contrib/file/magic/Magdir/hitachi-sh b/contrib/file/magic/Magdir/hitachi-sh index a096eebf1f..96067e9ba5 100644 --- a/contrib/file/magic/Magdir/hitachi-sh +++ b/contrib/file/magic/Magdir/hitachi-sh @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: hitachi-sh,v 1.5 2009/09/19 16:28:09 christos Exp $ # hitach-sh: file(1) magic for Hitachi Super-H # # Super-H COFF diff --git a/contrib/file/magic/Magdir/hp b/contrib/file/magic/Magdir/hp index 2d064cc997..3201c1567c 100644 --- a/contrib/file/magic/Magdir/hp +++ b/contrib/file/magic/Magdir/hp @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: hp,v 1.23 2009/09/19 16:28:09 christos Exp $ # hp: file(1) magic for Hewlett Packard machines (see also "printer") # # XXX - somebody should figure out whether any byte order needs to be diff --git a/contrib/file/magic/Magdir/human68k b/contrib/file/magic/Magdir/human68k index d8070f725d..b3d66ce5d0 100644 --- a/contrib/file/magic/Magdir/human68k +++ b/contrib/file/magic/Magdir/human68k @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: human68k,v 1.5 2009/09/19 16:28:09 christos Exp $ # human68k: file(1) magic for Human68k (X680x0 DOS) binary formats # Magic too short! #0 string HU Human68k diff --git a/contrib/file/magic/Magdir/ibm370 b/contrib/file/magic/Magdir/ibm370 index 8cd9da27ae..37d17bd8a5 100644 --- a/contrib/file/magic/Magdir/ibm370 +++ b/contrib/file/magic/Magdir/ibm370 @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: ibm370,v 1.8 2009/09/19 16:28:09 christos Exp $ # ibm370: file(1) magic for IBM 370 and compatibles. # # "ibm370" said that 0x15d == 0535 was "ibm 370 pure executable". diff --git a/contrib/file/magic/Magdir/ibm6000 b/contrib/file/magic/Magdir/ibm6000 index 6870c3121a..72755fafc4 100644 --- a/contrib/file/magic/Magdir/ibm6000 +++ b/contrib/file/magic/Magdir/ibm6000 @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: ibm6000,v 1.9 2009/09/19 16:28:09 christos Exp $ # ibm6000: file(1) magic for RS/6000 and the RT PC. # 0 beshort 0x01df executable (RISC System/6000 V3.1) or obj module diff --git a/contrib/file/magic/Magdir/iff b/contrib/file/magic/Magdir/iff index 4d2a832c6e..bde16b1db3 100644 --- a/contrib/file/magic/Magdir/iff +++ b/contrib/file/magic/Magdir/iff @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: iff,v 1.12 2009/09/19 16:28:09 christos Exp $ # iff: file(1) magic for Interchange File Format (see also "audio" & "images") # # Daniel Quinlan (quinlan@yggdrasil.com) -- IFF was designed by Electronic diff --git a/contrib/file/magic/Magdir/images b/contrib/file/magic/Magdir/images index 7eacf862fa..7586ad8e76 100644 --- a/contrib/file/magic/Magdir/images +++ b/contrib/file/magic/Magdir/images @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: images,v 1.64 2009/12/06 00:38:50 christos Exp $ # images: file(1) magic for image formats (see also "iff", and "c-lang" for # XPM bitmaps) # @@ -75,7 +77,7 @@ # # 137 P N G \r \n ^Z \n [4-byte length] H E A D [HEAD data] [HEAD crc] ... # -0 string \x89PNG\x0d\x0a\x1a\x0a PNG image +0 string \x89PNG\x0d\x0a\x1a\x0a PNG image data !:mime image/png >16 belong x \b, %ld x >20 belong x %ld, @@ -400,8 +402,28 @@ >2 byte 1 RLE compressed # Adobe Photoshop +# From: Asbjoern Sloth Toennesen 0 string 8BPS Adobe Photoshop Image !:mime image/vnd.adobe.photoshop +>4 beshort 2 (PSB) +>18 belong x \b, %d x +>14 belong x %d, +>24 beshort 0 bitmap +>24 beshort 1 grayscale +>>12 beshort 2 with alpha +>24 beshort 2 indexed +>24 beshort 3 RGB +>>12 beshort 4 \bA +>24 beshort 4 CMYK +>>12 beshort 5 \bA +>24 beshort 7 multichannel +>24 beshort 8 duotone +>24 beshort 9 lab +>12 beshort > 1 +>>12 beshort x \b, %dx +>12 beshort 1 \b, +>22 beshort x %d-bit channel +>12 beshort > 1 \bs # XV thumbnail indicator (ThMO) 0 string P7\ 332 XV thumbnail image data @@ -546,11 +568,14 @@ # Submitted by: Stephane Loeuillet # Modified by (1): Abel Cheung 0 string AT&TFORM -!:mime image/vnd.djvu >12 string DJVM DjVu multiple page document +!:mime image/vnd.djvu >12 string DJVU DjVu image or single page document +!:mime image/vnd.djvu >12 string DJVI DjVu shared document +!:mime image/vnd.djvu >12 string THUM DjVu page thumbnails +!:mime image/vnd.djvu # From Marc Espie diff --git a/contrib/file/magic/Magdir/inform b/contrib/file/magic/Magdir/inform index ba35d61e04..fe518ece91 100644 --- a/contrib/file/magic/Magdir/inform +++ b/contrib/file/magic/Magdir/inform @@ -1,8 +1,9 @@ #------------------------------------------------------------------------------ +# $File: inform,v 1.5 2009/09/19 16:28:09 christos Exp $ # inform: file(1) magic for Inform interactive fiction language # URL: http://www.inform-fiction.org/ # From: Reuben Thomas -0 search/cB/100 constant\ story Inform source text +0 search/100/cW constant\ story Inform source text diff --git a/contrib/file/magic/Magdir/intel b/contrib/file/magic/Magdir/intel index 00942c2b2e..9cd5d7e365 100644 --- a/contrib/file/magic/Magdir/intel +++ b/contrib/file/magic/Magdir/intel @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: intel,v 1.8 2009/09/19 16:28:10 christos Exp $ # intel: file(1) magic for x86 Unix # # Various flavors of x86 UNIX executable/object (other than Xenix, which diff --git a/contrib/file/magic/Magdir/interleaf b/contrib/file/magic/Magdir/interleaf index 3eea3cff26..8e3aaf57da 100644 --- a/contrib/file/magic/Magdir/interleaf +++ b/contrib/file/magic/Magdir/interleaf @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: interleaf,v 1.10 2009/09/19 16:28:10 christos Exp $ # interleaf: file(1) magic for InterLeaf TPS: # 0 string =\210OPS Interleaf saved data diff --git a/contrib/file/magic/Magdir/island b/contrib/file/magic/Magdir/island index 9903cddf92..f40521a036 100644 --- a/contrib/file/magic/Magdir/island +++ b/contrib/file/magic/Magdir/island @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: island,v 1.5 2009/09/19 16:28:10 christos Exp $ # island: file(1) magic for IslandWite/IslandDraw, from SunOS 5.5.1 # "/etc/magic": # From: guy@netapp.com (Guy Harris) diff --git a/contrib/file/magic/Magdir/ispell b/contrib/file/magic/Magdir/ispell index 592f064ed6..57a6e9e789 100644 --- a/contrib/file/magic/Magdir/ispell +++ b/contrib/file/magic/Magdir/ispell @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: ispell,v 1.8 2009/09/19 16:28:10 christos Exp $ # ispell: file(1) magic for ispell # # Ispell 3.0 has a magic of 0x9601 and ispell 3.1 has 0x9602. This magic diff --git a/contrib/file/magic/Magdir/java b/contrib/file/magic/Magdir/java index cca5542c1f..9d8b488e0f 100644 --- a/contrib/file/magic/Magdir/java +++ b/contrib/file/magic/Magdir/java @@ -1,4 +1,6 @@ + #------------------------------------------------------------ +# $File: java,v 1.12 2009/09/19 16:28:10 christos Exp $ # Java ByteCode and Mach-O binaries (e.g., Mac OS X) use the # same magic number, 0xcafebabe, so they are both handled # in the entry called "cafebabe". diff --git a/contrib/file/magic/Magdir/jpeg b/contrib/file/magic/Magdir/jpeg index 4470be4adf..dbf8be7987 100644 --- a/contrib/file/magic/Magdir/jpeg +++ b/contrib/file/magic/Magdir/jpeg @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: jpeg,v 1.15 2009/09/19 16:28:10 christos Exp $ # JPEG images # SunOS 5.5.1 had # diff --git a/contrib/file/magic/Magdir/karma b/contrib/file/magic/Magdir/karma index 89e77727ea..007a4b74b2 100644 --- a/contrib/file/magic/Magdir/karma +++ b/contrib/file/magic/Magdir/karma @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: karma,v 1.6 2009/09/19 16:28:10 christos Exp $ # karma: file(1) magic for Karma data files # # From diff --git a/contrib/file/magic/Magdir/kde b/contrib/file/magic/Magdir/kde index d81ee693fd..f8a1e844c5 100644 --- a/contrib/file/magic/Magdir/kde +++ b/contrib/file/magic/Magdir/kde @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: kde,v 1.4 2009/09/19 16:28:10 christos Exp $ # kde: file(1) magic for KDE 0 string [KDE\ Desktop\ Entry] KDE desktop entry diff --git a/contrib/file/magic/Magdir/kml b/contrib/file/magic/Magdir/kml index 5b59b9e555..5770101dd3 100644 --- a/contrib/file/magic/Magdir/kml +++ b/contrib/file/magic/Magdir/kml @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: kml,v 1.2 2009/09/19 16:28:10 christos Exp $ # Type: Google KML, formerly Keyhole Markup Language # Future development of this format has been handed # over to the Open Geospatial Consortium. diff --git a/contrib/file/magic/Magdir/lecter b/contrib/file/magic/Magdir/lecter index 87c186bab3..6ae87c12c0 100644 --- a/contrib/file/magic/Magdir/lecter +++ b/contrib/file/magic/Magdir/lecter @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: lecter,v 1.4 2009/09/19 16:28:10 christos Exp $ # DEC SRC Virtual Paper: Lectern files # Karl M. Hegbloom 0 string lect DEC SRC Virtual Paper Lectern file diff --git a/contrib/file/magic/Magdir/lex b/contrib/file/magic/Magdir/lex index eae9b107c2..cc9fac5e1f 100644 --- a/contrib/file/magic/Magdir/lex +++ b/contrib/file/magic/Magdir/lex @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: lex,v 1.6 2009/09/19 16:28:10 christos Exp $ # lex: file(1) magic for lex # # derived empirically, your offsets may vary! diff --git a/contrib/file/magic/Magdir/lif b/contrib/file/magic/Magdir/lif index cf20e4997d..a7a0a8abe7 100644 --- a/contrib/file/magic/Magdir/lif +++ b/contrib/file/magic/Magdir/lif @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: lif,v 1.8 2009/09/19 16:28:10 christos Exp $ # lif: file(1) magic for lif # # (Daniel Quinlan ) diff --git a/contrib/file/magic/Magdir/linux b/contrib/file/magic/Magdir/linux index 83d4305d0a..ce337f18cb 100644 --- a/contrib/file/magic/Magdir/linux +++ b/contrib/file/magic/Magdir/linux @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: linux,v 1.33 2009/10/23 16:44:59 christos Exp $ # linux: file(1) magic for Linux files # # Values for Linux/i386 binaries, from Daniel Quinlan @@ -61,6 +63,9 @@ >0x404 long x size %d pages >>4086 string SWAPSPACE2 >>>1052 string >\0 Label %s +# From Daniel Novotny +# swap file for PowerPC +65526 string SWAPSPACE2 Linux/ppc swap file # ECOFF magic for OSF/1 and Linux (only tested under Linux though) # # from Erik Troan (ewt@redhat.com) examining od dumps, so this diff --git a/contrib/file/magic/Magdir/lisp b/contrib/file/magic/Magdir/lisp index c6f31dae42..110988020e 100644 --- a/contrib/file/magic/Magdir/lisp +++ b/contrib/file/magic/Magdir/lisp @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: lisp,v 1.23 2009/09/19 16:28:10 christos Exp $ # lisp: file(1) magic for lisp programs # # various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com) @@ -11,8 +13,6 @@ #>2 search/4096 !\r Lisp/Scheme program text #>2 search/4096 \r Windows INF file -0 search/4096 (if\ Lisp/Scheme program text -!:mime text/x-lisp 0 search/4096 (setq\ Lisp/Scheme program text !:mime text/x-lisp 0 search/4096 (defvar\ Lisp/Scheme program text diff --git a/contrib/file/magic/Magdir/llvm b/contrib/file/magic/Magdir/llvm index 8c1610cd10..058fe4e106 100644 --- a/contrib/file/magic/Magdir/llvm +++ b/contrib/file/magic/Magdir/llvm @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: llvm,v 1.4 2009/09/19 16:28:10 christos Exp $ # llvm: file(1) magic for LLVM byte-codes # URL: http://llvm.cs.uiuc.edu/docs/BytecodeFormat.html#signature # From: Al Stone diff --git a/contrib/file/magic/Magdir/lua b/contrib/file/magic/Magdir/lua index 9aa87b159c..61e69a63b5 100644 --- a/contrib/file/magic/Magdir/lua +++ b/contrib/file/magic/Magdir/lua @@ -1,12 +1,14 @@ + #------------------------------------------------------------------------------ +# $File: lua,v 1.5 2009/09/19 16:28:10 christos Exp $ # lua: file(1) magic for Lua scripting language # URL: http://www.lua.org/ # From: Reuben Thomas , Seo Sanghyeon # Lua scripts -0 search/1/b #!\ /usr/bin/lua Lua script text executable +0 search/1/w #!\ /usr/bin/lua Lua script text executable !:mime text/x-lua -0 search/1/b #!\ /usr/local/bin/lua Lua script text executable +0 search/1/w #!\ /usr/local/bin/lua Lua script text executable !:mime text/x-lua 0 search/1 #!/usr/bin/env\ lua Lua script text executable !:mime text/x-lua diff --git a/contrib/file/magic/Magdir/luks b/contrib/file/magic/Magdir/luks index 2ab23935ef..6ecc40aff1 100644 --- a/contrib/file/magic/Magdir/luks +++ b/contrib/file/magic/Magdir/luks @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: luks,v 1.4 2009/09/19 16:28:10 christos Exp $ # luks: file(1) magic for Linux Unified Key Setup # URL: http://luks.endorphin.org/spec # From: Anthon van der Neut diff --git a/contrib/file/magic/Magdir/mach b/contrib/file/magic/Magdir/mach index e53be0737d..8d03f1ae4a 100644 --- a/contrib/file/magic/Magdir/mach +++ b/contrib/file/magic/Magdir/mach @@ -1,4 +1,6 @@ + #------------------------------------------------------------ +# $File: mach,v 1.9 2009/09/19 16:28:10 christos Exp $ # Mach has two magic numbers, 0xcafebabe and 0xfeedface. # Unfortunately the first, cafebabe, is shared with # Java ByteCode, so they are both handled in the file "cafebabe". diff --git a/contrib/file/magic/Magdir/macintosh b/contrib/file/magic/Magdir/macintosh index ca665ded8c..42c8e551f0 100644 --- a/contrib/file/magic/Magdir/macintosh +++ b/contrib/file/magic/Magdir/macintosh @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: macintosh,v 1.20 2009/09/19 16:28:10 christos Exp $ # macintosh description # # BinHex is the Macintosh ASCII-encoded file format (see also "apple") diff --git a/contrib/file/magic/Magdir/magic b/contrib/file/magic/Magdir/magic index 3bf4e2ee7a..ba56caac74 100644 --- a/contrib/file/magic/Magdir/magic +++ b/contrib/file/magic/Magdir/magic @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: magic,v 1.9 2009/09/19 16:28:10 christos Exp $ # magic: file(1) magic for magic files # 0 string #\ Magic magic text file for file(1) cmd diff --git a/contrib/file/magic/Magdir/mail.news b/contrib/file/magic/Magdir/mail.news index 0b9d90a4e2..56a5250d99 100644 --- a/contrib/file/magic/Magdir/mail.news +++ b/contrib/file/magic/Magdir/mail.news @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: mail.news,v 1.17 2009/09/19 16:28:10 christos Exp $ # mail.news: file(1) magic for mail and news # # Unfortunately, saved netnews also has From line added in some news software. diff --git a/contrib/file/magic/Magdir/maple b/contrib/file/magic/Magdir/maple index 6bc75628fc..4a263e0846 100644 --- a/contrib/file/magic/Magdir/maple +++ b/contrib/file/magic/Magdir/maple @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: maple,v 1.6 2009/09/19 16:28:10 christos Exp $ # maple: file(1) magic for maple files # "H. Nanosecond" # Maple V release 4, a multi-purpose math program diff --git a/contrib/file/magic/Magdir/mathcad b/contrib/file/magic/Magdir/mathcad index 4180196888..b186641f7d 100644 --- a/contrib/file/magic/Magdir/mathcad +++ b/contrib/file/magic/Magdir/mathcad @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: mathcad,v 1.5 2009/09/19 16:28:10 christos Exp $ # mathcad: file(1) magic for Mathcad documents # URL: http://www.mathsoft.com/ # From: Josh Triplett diff --git a/contrib/file/magic/Magdir/mathematica b/contrib/file/magic/Magdir/mathematica index abbc1125e0..3c10a57db5 100644 --- a/contrib/file/magic/Magdir/mathematica +++ b/contrib/file/magic/Magdir/mathematica @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: mathematica,v 1.7 2009/09/19 16:28:10 christos Exp $ # mathematica: file(1) magic for mathematica files # "H. Nanosecond" # Mathematica a multi-purpose math program diff --git a/contrib/file/magic/Magdir/matroska b/contrib/file/magic/Magdir/matroska index ca00db4b20..0ede715471 100644 --- a/contrib/file/magic/Magdir/matroska +++ b/contrib/file/magic/Magdir/matroska @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: matroska,v 1.5 2009/09/27 19:02:12 christos Exp $ # matroska: file(1) magic for Matroska files # # See http://www.matroska.org/ @@ -11,4 +12,4 @@ >5 beshort 0x4282 # DocType contents: >>8 string matroska Matroska data - +!:mime video/x-matroska diff --git a/contrib/file/magic/Magdir/mcrypt b/contrib/file/magic/Magdir/mcrypt index e862f59d74..9c66af48b2 100644 --- a/contrib/file/magic/Magdir/mcrypt +++ b/contrib/file/magic/Magdir/mcrypt @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: mcrypt,v 1.5 2009/09/19 16:28:10 christos Exp $ # Mavroyanopoulos Nikos # mcrypt: file(1) magic for mcrypt 2.2.x; 0 string \0m\3 mcrypt 2.5 encrypted data, diff --git a/contrib/file/magic/Magdir/mercurial b/contrib/file/magic/Magdir/mercurial index 3f1bdfc8f9..8bc5a54715 100644 --- a/contrib/file/magic/Magdir/mercurial +++ b/contrib/file/magic/Magdir/mercurial @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: mercurial,v 1.4 2009/09/19 16:28:10 christos Exp $ # mercurial: file(1) magic for Mercurial changeset bundles # http://www.selenic.com/mercurial/wiki/ # diff --git a/contrib/file/magic/Magdir/mime b/contrib/file/magic/Magdir/mime index 2219094f67..d1740e89af 100644 --- a/contrib/file/magic/Magdir/mime +++ b/contrib/file/magic/Magdir/mime @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: mime,v 1.5 2009/09/19 16:28:10 christos Exp $ # mime: file(1) magic for MIME encoded files # 0 string Content-Type:\ diff --git a/contrib/file/magic/Magdir/mips b/contrib/file/magic/Magdir/mips index 634eff4106..6ed7c9ab77 100644 --- a/contrib/file/magic/Magdir/mips +++ b/contrib/file/magic/Magdir/mips @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: mips,v 1.5 2009/09/19 16:28:10 christos Exp $ # mips: file(1) magic for Silicon Graphics (MIPS, IRIS, IRIX, etc.) # Dec Ultrix (MIPS) # all of SGI's *current* machines and OSes run in big-endian mode on the diff --git a/contrib/file/magic/Magdir/mirage b/contrib/file/magic/Magdir/mirage index 73c3747bb7..cdeb3fcbc2 100644 --- a/contrib/file/magic/Magdir/mirage +++ b/contrib/file/magic/Magdir/mirage @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: mirage,v 1.7 2009/09/19 16:28:10 christos Exp $ # mirage: file(1) magic for Mirage executables # # XXX - byte order? diff --git a/contrib/file/magic/Magdir/misctools b/contrib/file/magic/Magdir/misctools index 9a43e7b4e3..03fcfc0f04 100644 --- a/contrib/file/magic/Magdir/misctools +++ b/contrib/file/magic/Magdir/misctools @@ -1,4 +1,6 @@ + #----------------------------------------------------------------------------- +# $File: misctools,v 1.10 2009/09/19 16:28:10 christos Exp $ # misctools: file(1) magic for miscellaneous UNIX tools. # 0 search/1 %%!! X-Post-It-Note text diff --git a/contrib/file/magic/Magdir/mkid b/contrib/file/magic/Magdir/mkid index dfb2d93f43..faad3966c0 100644 --- a/contrib/file/magic/Magdir/mkid +++ b/contrib/file/magic/Magdir/mkid @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: mkid,v 1.6 2009/09/19 16:28:10 christos Exp $ # mkid: file(1) magic for mkid(1) databases # # ID is the binary tags database produced by mkid(1). diff --git a/contrib/file/magic/Magdir/mlssa b/contrib/file/magic/Magdir/mlssa index 21ab61e1d8..3c8875eb3d 100644 --- a/contrib/file/magic/Magdir/mlssa +++ b/contrib/file/magic/Magdir/mlssa @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: mlssa,v 1.4 2009/09/19 16:28:10 christos Exp $ # mlssa: file(1) magic for MLSSA datafiles # 0 lelong 0xffffabcd MLSSA datafile, diff --git a/contrib/file/magic/Magdir/mmdf b/contrib/file/magic/Magdir/mmdf index 72cd9f3258..5576a66277 100644 --- a/contrib/file/magic/Magdir/mmdf +++ b/contrib/file/magic/Magdir/mmdf @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: mmdf,v 1.6 2009/09/19 16:28:10 christos Exp $ # mmdf: file(1) magic for MMDF mail files # 0 string \001\001\001\001 MMDF mailbox diff --git a/contrib/file/magic/Magdir/modem b/contrib/file/magic/Magdir/modem index 73e747e161..6d2540a3ac 100644 --- a/contrib/file/magic/Magdir/modem +++ b/contrib/file/magic/Magdir/modem @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: modem,v 1.4 2009/09/19 16:28:10 christos Exp $ # modem: file(1) magic for modem programs # # From: Florian La Roche diff --git a/contrib/file/magic/Magdir/motorola b/contrib/file/magic/Magdir/motorola index bfe7ea030e..b56e5e483a 100644 --- a/contrib/file/magic/Magdir/motorola +++ b/contrib/file/magic/Magdir/motorola @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: motorola,v 1.10 2009/09/19 16:28:11 christos Exp $ # motorola: file(1) magic for Motorola 68K and 88K binaries # # 68K diff --git a/contrib/file/magic/Magdir/mozilla b/contrib/file/magic/Magdir/mozilla index 069886064f..1f89589aa1 100644 --- a/contrib/file/magic/Magdir/mozilla +++ b/contrib/file/magic/Magdir/mozilla @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: mozilla,v 1.4 2009/09/19 16:28:11 christos Exp $ # mozilla: file(1) magic for Mozilla XUL fastload files # (XUL.mfasl and XPC.mfasl) # URL: http://www.mozilla.org/ diff --git a/contrib/file/magic/Magdir/msdos b/contrib/file/magic/Magdir/msdos index a44533b437..223724e6d2 100644 --- a/contrib/file/magic/Magdir/msdos +++ b/contrib/file/magic/Magdir/msdos @@ -1,18 +1,19 @@ #------------------------------------------------------------------------------ +# $File: msdos,v 1.65 2009/09/19 16:28:11 christos Exp $ # msdos: file(1) magic for MS-DOS files # # .BAT files (Daniel Quinlan, quinlan@yggdrasil.com) # updated by Joerg Jenderek at Oct 2008 0 string @ ->1 string/cB \ echo\ off DOS batch file text +>1 string/cW \ echo\ off DOS batch file text !:mime text/x-msdos-batch ->1 string/cB echo\ off DOS batch file text +>1 string/cW echo\ off DOS batch file text !:mime text/x-msdos-batch ->1 string/cB rem\ DOS batch file text +>1 string/cW rem\ DOS batch file text !:mime text/x-msdos-batch ->1 string/cB set\ DOS batch file text +>1 string/cW set\ DOS batch file text !:mime text/x-msdos-batch diff --git a/contrib/file/magic/Magdir/msvc b/contrib/file/magic/Magdir/msvc index 95853fec9b..1095d05109 100644 --- a/contrib/file/magic/Magdir/msvc +++ b/contrib/file/magic/Magdir/msvc @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: msvc,v 1.5 2009/09/19 16:28:11 christos Exp $ # msvc: file(1) magic for msvc # "H. Nanosecond" # Microsoft visual C diff --git a/contrib/file/magic/Magdir/mup b/contrib/file/magic/Magdir/mup index f1022e39b0..5060c01dd8 100644 --- a/contrib/file/magic/Magdir/mup +++ b/contrib/file/magic/Magdir/mup @@ -1,4 +1,6 @@ + # ------------------------------------------------------------------------ +# $File: mup,v 1.4 2009/09/19 16:28:11 christos Exp $ # mup: file(1) magic for Mup (Music Publisher) input file. # # From: Abel Cheung diff --git a/contrib/file/magic/Magdir/natinst b/contrib/file/magic/Magdir/natinst index 5deb9dedf7..7c31980126 100644 --- a/contrib/file/magic/Magdir/natinst +++ b/contrib/file/magic/Magdir/natinst @@ -1,5 +1,6 @@ #----------------------------------------------------------------------------- +# $File: natinst,v 1.4 2009/09/19 16:28:11 christos Exp $ # natinst: file(1) magic for National Instruments Code Files # diff --git a/contrib/file/magic/Magdir/ncr b/contrib/file/magic/Magdir/ncr index 2faf98ada7..4067596f59 100644 --- a/contrib/file/magic/Magdir/ncr +++ b/contrib/file/magic/Magdir/ncr @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: ncr,v 1.7 2009/09/19 16:28:11 christos Exp $ # ncr: file(1) magic for NCR Tower objects # # contributed by diff --git a/contrib/file/magic/Magdir/netbsd b/contrib/file/magic/Magdir/netbsd index b6aae1ac62..a889a31ecc 100644 --- a/contrib/file/magic/Magdir/netbsd +++ b/contrib/file/magic/Magdir/netbsd @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: netbsd,v 1.18 2009/09/19 16:28:11 christos Exp $ # netbsd: file(1) magic for NetBSD objects # # All new-style magic numbers are in network byte order. diff --git a/contrib/file/magic/Magdir/netscape b/contrib/file/magic/Magdir/netscape index f14227db76..942f08adb1 100644 --- a/contrib/file/magic/Magdir/netscape +++ b/contrib/file/magic/Magdir/netscape @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: netscape,v 1.6 2009/09/19 16:28:11 christos Exp $ # netscape: file(1) magic for Netscape files # "H. Nanosecond" # version 3 and 4 I think diff --git a/contrib/file/magic/Magdir/netware b/contrib/file/magic/Magdir/netware index fbc16054a3..c3f57e8381 100644 --- a/contrib/file/magic/Magdir/netware +++ b/contrib/file/magic/Magdir/netware @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: netware,v 1.4 2009/09/19 16:28:11 christos Exp $ # netware: file(1) magic for NetWare Loadable Modules (NLMs) # From: Mads Martin Joergensen diff --git a/contrib/file/magic/Magdir/news b/contrib/file/magic/Magdir/news index 0ac4fa2697..eea8aed765 100644 --- a/contrib/file/magic/Magdir/news +++ b/contrib/file/magic/Magdir/news @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: news,v 1.6 2009/09/19 16:28:11 christos Exp $ # news: file(1) magic for SunOS NeWS fonts (not "news" as in "netnews") # 0 string StartFontMetrics ASCII font metrics diff --git a/contrib/file/magic/Magdir/nitpicker b/contrib/file/magic/Magdir/nitpicker index c40daecef3..d1a66287fd 100644 --- a/contrib/file/magic/Magdir/nitpicker +++ b/contrib/file/magic/Magdir/nitpicker @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: nitpicker,v 1.4 2009/09/19 16:28:11 christos Exp $ # nitpicker: file(1) magic for Flowfiles. # From: Christian Jachmann http://www.nitpicker.de 0 string NPFF NItpicker Flow File diff --git a/contrib/file/magic/Magdir/ocaml b/contrib/file/magic/Magdir/ocaml index f8ba976272..7fc626ce84 100644 --- a/contrib/file/magic/Magdir/ocaml +++ b/contrib/file/magic/Magdir/ocaml @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: ocaml,v 1.4 2009/09/19 16:28:11 christos Exp $ # ocaml: file(1) magic for Objective Caml files. 0 string Caml1999 Objective caml >8 string X exec file diff --git a/contrib/file/magic/Magdir/octave b/contrib/file/magic/Magdir/octave index 309314820e..49ea3e73e0 100644 --- a/contrib/file/magic/Magdir/octave +++ b/contrib/file/magic/Magdir/octave @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: octave,v 1.4 2009/09/19 16:28:11 christos Exp $ # octave binary data file(1) magic, from Dirk Eddelbuettel 0 string Octave-1-L Octave binary data (little endian) 0 string Octave-1-B Octave binary data (big endian) diff --git a/contrib/file/magic/Magdir/ole2compounddocs b/contrib/file/magic/Magdir/ole2compounddocs index ee07514ec5..383948ba0e 100644 --- a/contrib/file/magic/Magdir/ole2compounddocs +++ b/contrib/file/magic/Magdir/ole2compounddocs @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: ole2compounddocs,v 1.4 2009/09/19 16:28:11 christos Exp $ # Microsoft OLE 2 Compound Documents : file(1) magic for Microsoft Structured # storage (http://en.wikipedia.org/wiki/Structured_Storage) # Additional tests for OLE 2 Compound Documents should be under this recipe. diff --git a/contrib/file/magic/Magdir/olf b/contrib/file/magic/Magdir/olf index e698c36a49..6ae3fc04e5 100644 --- a/contrib/file/magic/Magdir/olf +++ b/contrib/file/magic/Magdir/olf @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: olf,v 1.4 2009/09/19 16:28:11 christos Exp $ # olf: file(1) magic for OLF executables # # We have to check the byte order flag to see what byte order all the diff --git a/contrib/file/magic/Magdir/os2 b/contrib/file/magic/Magdir/os2 index 35f79ef4ba..8643adc0a9 100644 --- a/contrib/file/magic/Magdir/os2 +++ b/contrib/file/magic/Magdir/os2 @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: os2,v 1.7 2009/09/19 16:28:11 christos Exp $ # os2: file(1) magic for OS/2 files # diff --git a/contrib/file/magic/Magdir/os400 b/contrib/file/magic/Magdir/os400 index 3dc05bf906..6a05f083eb 100644 --- a/contrib/file/magic/Magdir/os400 +++ b/contrib/file/magic/Magdir/os400 @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: os400,v 1.5 2009/09/19 16:28:11 christos Exp $ # os400: file(1) magic for IBM OS/400 files # # IBM OS/400 (i5/OS) Save file (SAVF) - gerardo.cacciari@gmail.com diff --git a/contrib/file/magic/Magdir/os9 b/contrib/file/magic/Magdir/os9 index ed2ed2ca4b..f311a896af 100644 --- a/contrib/file/magic/Magdir/os9 +++ b/contrib/file/magic/Magdir/os9 @@ -1,3 +1,6 @@ + +#------------------------------------------------------------------------------ +# $File: os9,v 1.6 2009/09/19 16:28:11 christos Exp $ # # Copyright (c) 1996 Ignatios Souvatzis. All rights reserved. # diff --git a/contrib/file/magic/Magdir/osf1 b/contrib/file/magic/Magdir/osf1 index 31166c1f34..4e9147196d 100644 --- a/contrib/file/magic/Magdir/osf1 +++ b/contrib/file/magic/Magdir/osf1 @@ -1,3 +1,6 @@ + +#------------------------------------------------------------------------------ +# $File: osf1,v 1.7 2009/09/19 16:28:11 christos Exp $ # # Mach magic number info # diff --git a/contrib/file/magic/Magdir/palm b/contrib/file/magic/Magdir/palm index e57e119b54..a9d42bf6ae 100644 --- a/contrib/file/magic/Magdir/palm +++ b/contrib/file/magic/Magdir/palm @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: palm,v 1.7 2009/09/19 16:28:11 christos Exp $ # palm: file(1) magic for PalmOS {.prc,.pdb}: applications, docfiles, and hacks # # Brian Lalor diff --git a/contrib/file/magic/Magdir/parix b/contrib/file/magic/Magdir/parix index 09965d122c..221f4917ea 100644 --- a/contrib/file/magic/Magdir/parix +++ b/contrib/file/magic/Magdir/parix @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: parix,v 1.4 2009/09/19 16:28:11 christos Exp $ # # Parix COFF executables # From: Ignatios Souvatzis diff --git a/contrib/file/magic/Magdir/pbm b/contrib/file/magic/Magdir/pbm index 98c15f7948..40ecf49114 100644 --- a/contrib/file/magic/Magdir/pbm +++ b/contrib/file/magic/Magdir/pbm @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: pbm,v 1.6 2009/09/19 16:28:11 christos Exp $ # pbm: file(1) magic for Portable Bitmap files # # XXX - byte order? diff --git a/contrib/file/magic/Magdir/pdf b/contrib/file/magic/Magdir/pdf index 8a4d2e7eba..ccde22f2c1 100644 --- a/contrib/file/magic/Magdir/pdf +++ b/contrib/file/magic/Magdir/pdf @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: pdf,v 1.6 2009/09/19 16:28:11 christos Exp $ # pdf: file(1) magic for Portable Document Format # diff --git a/contrib/file/magic/Magdir/pdp b/contrib/file/magic/Magdir/pdp index 545200529d..fa4b82b6a8 100644 --- a/contrib/file/magic/Magdir/pdp +++ b/contrib/file/magic/Magdir/pdp @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: pdp,v 1.8 2009/09/19 16:28:11 christos Exp $ # pdp: file(1) magic for PDP-11 executable/object and APL workspace # 0 lelong 0101555 PDP-11 single precision APL workspace diff --git a/contrib/file/magic/Magdir/perl b/contrib/file/magic/Magdir/perl index 4c22ecc9b5..1186833979 100644 --- a/contrib/file/magic/Magdir/perl +++ b/contrib/file/magic/Magdir/perl @@ -1,18 +1,20 @@ + #------------------------------------------------------------------------------ +# $File: perl,v 1.16 2009/09/19 16:28:11 christos Exp $ # perl: file(1) magic for Larry Wall's perl language. # # The `eval' lines recognizes an outrageously clever hack. # Keith Waclena # Send additions to -0 search/1/b #!\ /bin/perl Perl script text executable +0 search/1/w #!\ /bin/perl Perl script text executable !:mime text/x-perl 0 search/1 eval\ "exec\ /bin/perl Perl script text !:mime text/x-perl -0 search/1/b #!\ /usr/bin/perl Perl script text executable +0 search/1/w #!\ /usr/bin/perl Perl script text executable !:mime text/x-perl 0 search/1 eval\ "exec\ /usr/bin/perl Perl script text !:mime text/x-perl -0 search/1/b #!\ /usr/local/bin/perl Perl script text executable +0 search/1/w #!\ /usr/local/bin/perl Perl script text executable !:mime text/x-perl 0 search/1 eval\ "exec\ /usr/local/bin/perl Perl script text !:mime text/x-perl @@ -33,12 +35,12 @@ # Perl POD documents # From: Tom Hukins -0 search/1/B \=pod\n Perl POD document text -0 search/1/B \n\=pod\n Perl POD document text -0 search/1/B \=head1\ Perl POD document text -0 search/1/B \n\=head1\ Perl POD document text -0 search/1/B \=head2\ Perl POD document text -0 search/1/B \n\=head2\ Perl POD document text +0 search/1/W \=pod\n Perl POD document text +0 search/1/W \n\=pod\n Perl POD document text +0 search/1/W \=head1\ Perl POD document text +0 search/1/W \n\=head1\ Perl POD document text +0 search/1/W \=head2\ Perl POD document text +0 search/1/W \n\=head2\ Perl POD document text # Perl Storable data files. 0 string perl-store perl Storable (v0.6) data diff --git a/contrib/file/magic/Magdir/pgp b/contrib/file/magic/Magdir/pgp index 63042adeef..a8d3c9a133 100644 --- a/contrib/file/magic/Magdir/pgp +++ b/contrib/file/magic/Magdir/pgp @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: pgp,v 1.9 2009/09/19 16:28:11 christos Exp $ # pgp: file(1) magic for Pretty Good Privacy # see http://lists.gnupg.org/pipermail/gnupg-devel/1999-September/016052.html # diff --git a/contrib/file/magic/Magdir/pkgadd b/contrib/file/magic/Magdir/pkgadd index 876dacd79c..7dfb28691d 100644 --- a/contrib/file/magic/Magdir/pkgadd +++ b/contrib/file/magic/Magdir/pkgadd @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: pkgadd,v 1.6 2009/09/19 16:28:11 christos Exp $ # pkgadd: file(1) magic for SysV R4 PKG Datastreams # 0 string #\ PaCkAgE\ DaTaStReAm pkg Datastream (SVR4) diff --git a/contrib/file/magic/Magdir/plan9 b/contrib/file/magic/Magdir/plan9 index 58fb071c7b..da5eb66650 100644 --- a/contrib/file/magic/Magdir/plan9 +++ b/contrib/file/magic/Magdir/plan9 @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: plan9,v 1.5 2009/09/19 16:28:11 christos Exp $ # plan9: file(1) magic for AT&T Bell Labs' Plan 9 executables # From: "Stefan A. Haubenthal" # diff --git a/contrib/file/magic/Magdir/plus5 b/contrib/file/magic/Magdir/plus5 index acf3bf4037..795cca1f11 100644 --- a/contrib/file/magic/Magdir/plus5 +++ b/contrib/file/magic/Magdir/plus5 @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: plus5,v 1.6 2009/09/19 16:28:11 christos Exp $ # plus5: file(1) magic for Plus Five's UNIX MUMPS # # XXX - byte order? Paging Hokey.... diff --git a/contrib/file/magic/Magdir/printer b/contrib/file/magic/Magdir/printer index e25d03e977..d3edb6f3a0 100644 --- a/contrib/file/magic/Magdir/printer +++ b/contrib/file/magic/Magdir/printer @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: printer,v 1.22 2009/09/19 16:28:11 christos Exp $ # printer: file(1) magic for printer-formatted files # diff --git a/contrib/file/magic/Magdir/project b/contrib/file/magic/Magdir/project index 04e8865c2e..efa5d40f7a 100644 --- a/contrib/file/magic/Magdir/project +++ b/contrib/file/magic/Magdir/project @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: project,v 1.4 2009/09/19 16:28:11 christos Exp $ # project: file(1) magic for Project management # # Magic strings for ftnchek project files. Alexander Mai diff --git a/contrib/file/magic/Magdir/psdbms b/contrib/file/magic/Magdir/psdbms index f36121fcbc..09c733fddf 100644 --- a/contrib/file/magic/Magdir/psdbms +++ b/contrib/file/magic/Magdir/psdbms @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: psdbms,v 1.6 2009/09/19 16:28:11 christos Exp $ # psdbms: file(1) magic for psdatabase # 0 belong&0xff00ffff 0x56000000 ps database diff --git a/contrib/file/magic/Magdir/pulsar b/contrib/file/magic/Magdir/pulsar index a4a5c21d3d..7cb6f18bda 100644 --- a/contrib/file/magic/Magdir/pulsar +++ b/contrib/file/magic/Magdir/pulsar @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: pulsar,v 1.5 2009/09/19 16:28:12 christos Exp $ # pulsar: file(1) magic for Pulsar POP3 daemon binary files # # http://pulsar.sourceforge.net diff --git a/contrib/file/magic/Magdir/pyramid b/contrib/file/magic/Magdir/pyramid index fe16608436..ee47c80767 100644 --- a/contrib/file/magic/Magdir/pyramid +++ b/contrib/file/magic/Magdir/pyramid @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: pyramid,v 1.7 2009/09/19 16:28:12 christos Exp $ # pyramid: file(1) magic for Pyramids # # XXX - byte order? diff --git a/contrib/file/magic/Magdir/python b/contrib/file/magic/Magdir/python index 4803203dcf..703504c3b8 100644 --- a/contrib/file/magic/Magdir/python +++ b/contrib/file/magic/Magdir/python @@ -1,11 +1,13 @@ #------------------------------------------------------------------------------ +# $File: python,v 1.12 2009/10/27 14:49:57 christos Exp $ # python: file(1) magic for python # # From: David Necas # often the module starts with a multiline string 0 string """ a python script text executable -# MAGIC as specified in Python/import.c (1.5 to 2.3.0a) +# MAGIC as specified in Python/import.c (1.5 to 2.6a1 and 3.1a0, assuming +# that Py_UnicodeFlag is off for Python 2) # 20121 ( YEAR - 1995 ) + MONTH + DAY (little endian followed by "\r\n" 0 belong 0x994e0d0a python 1.5/1.6 byte-compiled 0 belong 0x87c60d0a python 2.0 byte-compiled @@ -15,7 +17,14 @@ 0 belong 0x6df20d0a python 2.4 byte-compiled 0 belong 0xb3f20d0a python 2.5 byte-compiled 0 belong 0xd1f20d0a python 2.6 byte-compiled +0 belong 0x3b0c0d0a python 3.0 byte-compiled +0 belong 0x4f0c0d0a python 3.1 byte-compiled - -0 string/b #!\ /usr/bin/python python script text executable - +0 search/1/w #!\ /usr/bin/python Python script text executable +!:mime text/x-python +0 search/1/w #!\ /usr/local/bin/python Python script text executable +!:mime text/x-python +0 search/1 #!/usr/bin/env\ python Python script text executable +!:mime text/x-python +0 search/1 #!\ /usr/bin/env\ ruby Python script text executable +!:mime text/x-python diff --git a/contrib/file/magic/Magdir/revision b/contrib/file/magic/Magdir/revision index a809cb9e60..d973faf132 100644 --- a/contrib/file/magic/Magdir/revision +++ b/contrib/file/magic/Magdir/revision @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: revision,v 1.6 2009/09/19 16:28:12 christos Exp $ # file(1) magic for revision control files # From Hendrik Scholz 0 string /1\ :pserver: cvs password text file diff --git a/contrib/file/magic/Magdir/riff b/contrib/file/magic/Magdir/riff index c6e3070b56..9bc3c4b45c 100644 --- a/contrib/file/magic/Magdir/riff +++ b/contrib/file/magic/Magdir/riff @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: riff,v 1.18 2009/09/19 16:28:12 christos Exp $ # riff: file(1) magic for RIFF format # See # diff --git a/contrib/file/magic/Magdir/rpm b/contrib/file/magic/Magdir/rpm index 6d7e850bb7..455f9c7728 100644 --- a/contrib/file/magic/Magdir/rpm +++ b/contrib/file/magic/Magdir/rpm @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: rpm,v 1.9 2009/11/06 13:53:52 christos Exp $ # # RPM: file(1) magic for Red Hat Packages Erik Troan (ewt@redhat.com) # @@ -6,18 +8,31 @@ >2 beshort 0xeedb RPM !:mime application/x-rpm >>4 byte x v%d ->>6 beshort 0 bin +>>5 byte x \b.%d >>6 beshort 1 src ->>8 beshort 1 i386 ->>8 beshort 2 Alpha ->>8 beshort 3 Sparc ->>8 beshort 4 MIPS ->>8 beshort 5 PowerPC ->>8 beshort 6 68000 ->>8 beshort 7 SGI ->>8 beshort 8 RS6000 ->>8 beshort 9 IA64 ->>8 beshort 10 Sparc64 ->>8 beshort 11 MIPSel ->>8 beshort 12 ARM +>>6 beshort 0 bin +>>>8 beshort 1 i386/x86_64 +>>>8 beshort 2 Alpha/Sparc64 +>>>8 beshort 3 Sparc +>>>8 beshort 4 MIPS +>>>8 beshort 5 PowerPC +>>>8 beshort 6 68000 +>>>8 beshort 7 SGI +>>>8 beshort 8 RS6000 +>>>8 beshort 9 IA64 +>>>8 beshort 10 Sparc64 + +#delta RPM Daniel Novotny (dnovotny@redhat.com) +0 string drpm Delta RPM +!:mime application/x-rpm +>12 string x %s + +>>>8 beshort 11 MIPSel +>>>8 beshort 12 ARM +>>>8 beshort 13 MiNT +>>>8 beshort 14 S/390 +>>>8 beshort 15 S/390x +>>>8 beshort 16 PowerPC64 +>>>8 beshort 17 SuperH +>>>8 beshort 18 Xtensa >>10 string x %s diff --git a/contrib/file/magic/Magdir/rtf b/contrib/file/magic/Magdir/rtf index 8e5bfe0e32..dca3195623 100644 --- a/contrib/file/magic/Magdir/rtf +++ b/contrib/file/magic/Magdir/rtf @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: rtf,v 1.7 2009/09/19 16:28:12 christos Exp $ # rtf: file(1) magic for Rich Text Format (RTF) # # Duncan P. Simpson, D.P.Simpson@dcs.warwick.ac.uk diff --git a/contrib/file/magic/Magdir/ruby b/contrib/file/magic/Magdir/ruby index de6f2a0974..70302955f5 100644 --- a/contrib/file/magic/Magdir/ruby +++ b/contrib/file/magic/Magdir/ruby @@ -1,10 +1,16 @@ + #------------------------------------------------------------------------------ -# ruby: file(1) magic for Lua scripting language +# $File: ruby,v 1.3 2009/09/19 16:28:12 christos Exp $ +# ruby: file(1) magic for Ruby scripting language # URL: http://www.ruby-lang.org/ # From: Reuben Thomas # Ruby scripts -0 search/1/b #!\ /usr/bin/ruby Ruby script text executable -0 search/1/b #!\ /usr/local/bin/ruby Ruby script text executable +0 search/1/w #!\ /usr/bin/ruby Ruby script text executable +!:mime text/x-ruby +0 search/1/w #!\ /usr/local/bin/ruby Ruby script text executable +!:mime text/x-ruby 0 search/1 #!/usr/bin/env\ ruby Ruby script text executable +!:mime text/x-ruby 0 search/1 #!\ /usr/bin/env\ ruby Ruby script text executable +!:mime text/x-ruby diff --git a/contrib/file/magic/Magdir/sc b/contrib/file/magic/Magdir/sc index 72027d69eb..dc6d6c83d7 100644 --- a/contrib/file/magic/Magdir/sc +++ b/contrib/file/magic/Magdir/sc @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: sc,v 1.6 2009/09/19 16:28:12 christos Exp $ # sc: file(1) magic for "sc" spreadsheet # 38 string Spreadsheet sc spreadsheet file diff --git a/contrib/file/magic/Magdir/sccs b/contrib/file/magic/Magdir/sccs index 11d50b23c0..95b3a5db12 100644 --- a/contrib/file/magic/Magdir/sccs +++ b/contrib/file/magic/Magdir/sccs @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: sccs,v 1.6 2009/09/19 16:28:12 christos Exp $ # sccs: file(1) magic for SCCS archives # # SCCS archive structure: diff --git a/contrib/file/magic/Magdir/scientific b/contrib/file/magic/Magdir/scientific index f7aedaebd2..dcdde17456 100644 --- a/contrib/file/magic/Magdir/scientific +++ b/contrib/file/magic/Magdir/scientific @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: scientific,v 1.6 2009/09/19 16:28:12 christos Exp $ # scientific: file(1) magic for scientific formats # # From: Joe Krahn diff --git a/contrib/file/magic/Magdir/securitycerts b/contrib/file/magic/Magdir/securitycerts index aa55d2188f..8785dd883f 100644 --- a/contrib/file/magic/Magdir/securitycerts +++ b/contrib/file/magic/Magdir/securitycerts @@ -1,3 +1,6 @@ + +#------------------------------------------------------------------------------ +# $File: securitycerts,v 1.4 2009/09/19 16:28:12 christos Exp $ 0 search/1 -----BEGIN\ CERTIFICATE------ RFC1421 Security Certificate text 0 search/1 -----BEGIN\ NEW\ CERTIFICATE RFC1421 Security Certificate Signing Request text 0 belong 0xedfeedfe Sun 'jks' Java Keystore File data diff --git a/contrib/file/magic/Magdir/sendmail b/contrib/file/magic/Magdir/sendmail index 7880ab510e..aeb6203142 100644 --- a/contrib/file/magic/Magdir/sendmail +++ b/contrib/file/magic/Magdir/sendmail @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: sendmail,v 1.7 2009/09/19 16:28:12 christos Exp $ # sendmail: file(1) magic for sendmail config files # # XXX - byte order? diff --git a/contrib/file/magic/Magdir/sequent b/contrib/file/magic/Magdir/sequent index e6f7b52aac..0ce6bf2c79 100644 --- a/contrib/file/magic/Magdir/sequent +++ b/contrib/file/magic/Magdir/sequent @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: sequent,v 1.8 2009/09/19 16:28:12 christos Exp $ # sequent: file(1) magic for Sequent machines # # Sequent information updated by Don Dwiggins . diff --git a/contrib/file/magic/Magdir/sgi b/contrib/file/magic/Magdir/sgi index 5b540278c8..b1b154b1bd 100644 --- a/contrib/file/magic/Magdir/sgi +++ b/contrib/file/magic/Magdir/sgi @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: sgi,v 1.17 2009/09/19 16:28:12 christos Exp $ # sgi: file(1) magic for Silicon Graphics applications # diff --git a/contrib/file/magic/Magdir/sgml b/contrib/file/magic/Magdir/sgml index 7e3391b09b..0a57375639 100644 --- a/contrib/file/magic/Magdir/sgml +++ b/contrib/file/magic/Magdir/sgml @@ -1,36 +1,59 @@ #------------------------------------------------------------------------------ +# $File: sgml,v 1.24 2009/09/19 17:31:35 christos Exp $ # Type: SVG Vectorial Graphics # From: Noel Torres 0 string \15 string >\0 ->>23 search/400 \>19 search/4096 \>23 search/400 \>19 search/4096 \15 string >\0 +>>19 search/4096/cWbt \15 string >\0 +>>19 search/4096/cWbt \15 string >\0 +>>19 search/4096/cWbt \15 search/1 >\0 %.3s document text >>23 search/1 \>24 search/1 \ 0 search/1 ##Sketch Sketch document text diff --git a/contrib/file/magic/Magdir/smalltalk b/contrib/file/magic/Magdir/smalltalk index b8827598c1..9ff2c6b0c0 100644 --- a/contrib/file/magic/Magdir/smalltalk +++ b/contrib/file/magic/Magdir/smalltalk @@ -1,5 +1,6 @@ #----------------------------------------------- +# $File: smalltalk,v 1.5 2009/09/19 16:28:12 christos Exp $ # GNU Smalltalk image, starting at version 1.6.2 # From: catull_us@yahoo.com # diff --git a/contrib/file/magic/Magdir/sniffer b/contrib/file/magic/Magdir/sniffer index 282c44fec4..26eee39750 100644 --- a/contrib/file/magic/Magdir/sniffer +++ b/contrib/file/magic/Magdir/sniffer @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: sniffer,v 1.14 2009/09/19 16:28:12 christos Exp $ # sniffer: file(1) magic for packet capture files # # From: guy@alum.mit.edu (Guy Harris) diff --git a/contrib/file/magic/Magdir/softquad b/contrib/file/magic/Magdir/softquad index ac7891d736..06c1f018f8 100644 --- a/contrib/file/magic/Magdir/softquad +++ b/contrib/file/magic/Magdir/softquad @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: softquad,v 1.13 2009/09/19 16:28:12 christos Exp $ # softquad: file(1) magic for SoftQuad Publishing Software # # Author/Editor and RulesBuilder diff --git a/contrib/file/magic/Magdir/spec b/contrib/file/magic/Magdir/spec index bfda30642c..c504b1fd19 100644 --- a/contrib/file/magic/Magdir/spec +++ b/contrib/file/magic/Magdir/spec @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: spec,v 1.4 2009/09/19 16:28:12 christos Exp $ # spec: file(1) magic for SPEC raw results (*.raw, *.rsf) # # Cloyce D. Spradling diff --git a/contrib/file/magic/Magdir/spectrum b/contrib/file/magic/Magdir/spectrum index a48ac41357..e25ebf228f 100644 --- a/contrib/file/magic/Magdir/spectrum +++ b/contrib/file/magic/Magdir/spectrum @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: spectrum,v 1.6 2009/09/19 16:28:12 christos Exp $ # spectrum: file(1) magic for Spectrum emulator files. # # John Elliott diff --git a/contrib/file/magic/Magdir/sql b/contrib/file/magic/Magdir/sql index 21c6e515e9..cce5550fef 100644 --- a/contrib/file/magic/Magdir/sql +++ b/contrib/file/magic/Magdir/sql @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: sql,v 1.6 2009/09/19 16:28:12 christos Exp $ # sql: file(1) magic for SQL files # # From: "Marty Leisner" diff --git a/contrib/file/magic/Magdir/sun b/contrib/file/magic/Magdir/sun index 871071e999..271193812d 100644 --- a/contrib/file/magic/Magdir/sun +++ b/contrib/file/magic/Magdir/sun @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: sun,v 1.20 2009/09/19 16:28:12 christos Exp $ # sun: file(1) magic for Sun machines # # Values for big-endian Sun (MC680x0, SPARC) binaries on pre-5.x diff --git a/contrib/file/magic/Magdir/sysex b/contrib/file/magic/Magdir/sysex index 03d6cdd6b7..70b5b1cf24 100644 --- a/contrib/file/magic/Magdir/sysex +++ b/contrib/file/magic/Magdir/sysex @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------ +# $File: sysex,v 1.6 2009/09/19 16:28:12 christos Exp $ # sysex: file(1) magic for MIDI sysex files # # diff --git a/contrib/file/magic/Magdir/teapot b/contrib/file/magic/Magdir/teapot index d9554bfb73..b6577b6f28 100644 --- a/contrib/file/magic/Magdir/teapot +++ b/contrib/file/magic/Magdir/teapot @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: teapot,v 1.4 2009/09/19 16:28:12 christos Exp $ # teapot: file(1) magic for "teapot" spreadsheet # 0 string #!teapot\012xdr teapot work sheet (XDR format) diff --git a/contrib/file/magic/Magdir/terminfo b/contrib/file/magic/Magdir/terminfo index 2226ce8cee..97ea429299 100644 --- a/contrib/file/magic/Magdir/terminfo +++ b/contrib/file/magic/Magdir/terminfo @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: terminfo,v 1.6 2009/09/19 16:28:12 christos Exp $ # terminfo: file(1) magic for terminfo # # XXX - byte order for screen images? diff --git a/contrib/file/magic/Magdir/tex b/contrib/file/magic/Magdir/tex index 5416db1746..b650497b60 100644 --- a/contrib/file/magic/Magdir/tex +++ b/contrib/file/magic/Magdir/tex @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: tex,v 1.16 2009/09/19 16:28:12 christos Exp $ # tex: file(1) magic for TeX files # # XXX - needs byte-endian stuff (big-endian and little-endian DVI?) diff --git a/contrib/file/magic/Magdir/tgif b/contrib/file/magic/Magdir/tgif index 779883ac84..18c6df975d 100644 --- a/contrib/file/magic/Magdir/tgif +++ b/contrib/file/magic/Magdir/tgif @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: tgif,v 1.5 2009/09/19 16:28:12 christos Exp $ # file(1) magic for tgif(1) files # From Hendrik Scholz diff --git a/contrib/file/magic/Magdir/ti-8x b/contrib/file/magic/Magdir/ti-8x index 89e220401c..d7903febcb 100644 --- a/contrib/file/magic/Magdir/ti-8x +++ b/contrib/file/magic/Magdir/ti-8x @@ -1,4 +1,6 @@ -# ------------------------------------------------------------------------ + +#------------------------------------------------------------------------------ +# $File: ti-8x,v 1.6 2009/09/19 16:28:12 christos Exp $ # ti-8x: file(1) magic for the TI-8x and TI-9x Graphing Calculators. # # From: Ryan McGuire (rmcguire@freenet.columbus.oh.us). diff --git a/contrib/file/magic/Magdir/timezone b/contrib/file/magic/Magdir/timezone index c9ce02582c..9381a0cdd3 100644 --- a/contrib/file/magic/Magdir/timezone +++ b/contrib/file/magic/Magdir/timezone @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: timezone,v 1.11 2009/09/19 16:28:12 christos Exp $ # timezone: file(1) magic for timezone data # # from Daniel Quinlan (quinlan@yggdrasil.com) diff --git a/contrib/file/magic/Magdir/troff b/contrib/file/magic/Magdir/troff index 73731a89b3..b24ea0a498 100644 --- a/contrib/file/magic/Magdir/troff +++ b/contrib/file/magic/Magdir/troff @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: troff,v 1.10 2009/09/19 16:28:12 christos Exp $ # troff: file(1) magic for *roff # # updated by Daniel Quinlan (quinlan@yggdrasil.com) diff --git a/contrib/file/magic/Magdir/tuxedo b/contrib/file/magic/Magdir/tuxedo index 119afa6a6b..191501decf 100644 --- a/contrib/file/magic/Magdir/tuxedo +++ b/contrib/file/magic/Magdir/tuxedo @@ -1,5 +1,6 @@ -# + #------------------------------------------------------------------------------ +# $File: tuxedo,v 1.4 2009/09/19 16:28:13 christos Exp $ # tuxedo: file(1) magic for BEA TUXEDO data files # # from Ian Springer diff --git a/contrib/file/magic/Magdir/typeset b/contrib/file/magic/Magdir/typeset index 2eda7c3e41..e99fe3731b 100644 --- a/contrib/file/magic/Magdir/typeset +++ b/contrib/file/magic/Magdir/typeset @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: typeset,v 1.8 2009/09/19 16:28:13 christos Exp $ # typeset: file(1) magic for other typesetting # 0 string Interpress/Xerox Xerox InterPress data diff --git a/contrib/file/magic/Magdir/unicode b/contrib/file/magic/Magdir/unicode index 5f4a576470..ef92c1ec83 100644 --- a/contrib/file/magic/Magdir/unicode +++ b/contrib/file/magic/Magdir/unicode @@ -1,4 +1,6 @@ -#--------------------------------------------------------------------------- + +#------------------------------------------------------------------------------ +# $File: unicode,v 1.5 2009/09/19 16:28:13 christos Exp $ # Unicode: BOM prefixed text files - Adrian Havill # GRR: These types should be recognised in file_ascmagic so these # encodings can be treated by text patterns. diff --git a/contrib/file/magic/Magdir/unknown b/contrib/file/magic/Magdir/unknown index 910cea48e0..82ac2ad164 100644 --- a/contrib/file/magic/Magdir/unknown +++ b/contrib/file/magic/Magdir/unknown @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: unknown,v 1.7 2009/09/19 16:28:13 christos Exp $ # unknown: file(1) magic for unknown machines # # XXX - this probably should be pruned, as it'll match PDP-11 and diff --git a/contrib/file/magic/Magdir/uuencode b/contrib/file/magic/Magdir/uuencode index 982cba9046..c00ddabbde 100644 --- a/contrib/file/magic/Magdir/uuencode +++ b/contrib/file/magic/Magdir/uuencode @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: uuencode,v 1.7 2009/09/19 16:28:13 christos Exp $ # uuencode: file(1) magic for ASCII-encoded files # diff --git a/contrib/file/magic/Magdir/varied.out b/contrib/file/magic/Magdir/varied.out index 6df6fd93a4..f9135fd8f3 100644 --- a/contrib/file/magic/Magdir/varied.out +++ b/contrib/file/magic/Magdir/varied.out @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: varied.out,v 1.21 2009/09/19 16:28:13 christos Exp $ # varied.out: file(1) magic for various USG systems # # Herewith many of the object file formats used by USG systems. diff --git a/contrib/file/magic/Magdir/varied.script b/contrib/file/magic/Magdir/varied.script index 61f935cdcd..ea5725e420 100644 --- a/contrib/file/magic/Magdir/varied.script +++ b/contrib/file/magic/Magdir/varied.script @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: varied.script,v 1.6 2009/09/19 16:28:13 christos Exp $ # varied.script: file(1) magic for various interpreter scripts 0 string #!\ / a diff --git a/contrib/file/magic/Magdir/vax b/contrib/file/magic/Magdir/vax index 7dd86ccf53..31a35123dd 100644 --- a/contrib/file/magic/Magdir/vax +++ b/contrib/file/magic/Magdir/vax @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: vax,v 1.7 2009/09/19 16:28:13 christos Exp $ # vax: file(1) magic for VAX executable/object and APL workspace # 0 lelong 0101557 VAX single precision APL workspace diff --git a/contrib/file/magic/Magdir/vicar b/contrib/file/magic/Magdir/vicar index ab216eeea8..59d843d7ca 100644 --- a/contrib/file/magic/Magdir/vicar +++ b/contrib/file/magic/Magdir/vicar @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: vicar,v 1.4 2009/09/19 16:28:13 christos Exp $ # vicar: file(1) magic for VICAR files. # # From: Ossama Othman diff --git a/contrib/file/magic/Magdir/visx b/contrib/file/magic/Magdir/visx index 4919964260..fe5c827d94 100644 --- a/contrib/file/magic/Magdir/visx +++ b/contrib/file/magic/Magdir/visx @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: visx,v 1.5 2009/09/19 16:28:13 christos Exp $ # visx: file(1) magic for Visx format files # 0 short 0x5555 VISX image file diff --git a/contrib/file/magic/Magdir/vms b/contrib/file/magic/Magdir/vms index c91186f68c..d114dfd79e 100644 --- a/contrib/file/magic/Magdir/vms +++ b/contrib/file/magic/Magdir/vms @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: vms,v 1.6 2009/09/19 16:28:13 christos Exp $ # vms: file(1) magic for VMS executables (experimental) # # VMS .exe formats, both VAX and AXP (Greg Roelofs, newt@uchicago.edu) diff --git a/contrib/file/magic/Magdir/vmware b/contrib/file/magic/Magdir/vmware index 28e19e57a8..b6b6a619b3 100644 --- a/contrib/file/magic/Magdir/vmware +++ b/contrib/file/magic/Magdir/vmware @@ -1,5 +1,6 @@ -# ----------------------------------------------------------- +#------------------------------------------------------------------------------ +# $File: vmware,v 1.7 2009/09/19 16:28:13 christos Exp $ # VMware specific files (deducted from version 1.1 and log file entries) # Anthon van der Neut (anthon@mnt.org) 0 belong 0x4d52564e VMware nvram diff --git a/contrib/file/magic/Magdir/vorbis b/contrib/file/magic/Magdir/vorbis index cbef5fdff6..ed6c040c30 100644 --- a/contrib/file/magic/Magdir/vorbis +++ b/contrib/file/magic/Magdir/vorbis @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: vorbis,v 1.16 2009/09/19 16:28:13 christos Exp $ # vorbis: file(1) magic for Ogg/Vorbis files # # From Felix von Leitner diff --git a/contrib/file/magic/Magdir/vxl b/contrib/file/magic/Magdir/vxl index d3f55619eb..0fdc68a7f0 100644 --- a/contrib/file/magic/Magdir/vxl +++ b/contrib/file/magic/Magdir/vxl @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: vxl,v 1.4 2009/09/19 16:28:13 christos Exp $ # VXL: file(1) magic for VXL binary IO data files # # from Ian Scott diff --git a/contrib/file/magic/Magdir/warc b/contrib/file/magic/Magdir/warc index 968e267924..72a22ee6d9 100644 --- a/contrib/file/magic/Magdir/warc +++ b/contrib/file/magic/Magdir/warc @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: warc,v 1.2 2009/09/19 16:28:13 christos Exp $ # warc: file(1) magic for WARC files 0 string WARC/ WARC Archive diff --git a/contrib/file/magic/Magdir/weak b/contrib/file/magic/Magdir/weak index 21324ea494..6dc1793c92 100644 --- a/contrib/file/magic/Magdir/weak +++ b/contrib/file/magic/Magdir/weak @@ -1,3 +1,4 @@ + #------------------------------------------------------------------------------ # weak: file(1) magic for very weak magic entries, disabled by default # diff --git a/contrib/file/magic/Magdir/windows b/contrib/file/magic/Magdir/windows index 8d76807321..cd760ec767 100644 --- a/contrib/file/magic/Magdir/windows +++ b/contrib/file/magic/Magdir/windows @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: windows,v 1.4 2009/09/19 16:28:13 christos Exp $ # windows: file(1) magic for Microsoft Windows # # This file is mainly reserved for files where programs diff --git a/contrib/file/magic/Magdir/wireless b/contrib/file/magic/Magdir/wireless index aaae5a58fb..badb73bb85 100644 --- a/contrib/file/magic/Magdir/wireless +++ b/contrib/file/magic/Magdir/wireless @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: wireless,v 1.2 2009/09/19 16:28:13 christos Exp $ # wireless-regdb: file(1) magic for CRDA wireless-regdb file format # 0 string RGDB CRDA wireless regulatory database file diff --git a/contrib/file/magic/Magdir/wordprocessors b/contrib/file/magic/Magdir/wordprocessors index 8965d3387b..6e35c7d0d7 100644 --- a/contrib/file/magic/Magdir/wordprocessors +++ b/contrib/file/magic/Magdir/wordprocessors @@ -1,4 +1,6 @@ + #------------------------------------------------------------------------------ +# $File: wordprocessors,v 1.14 2009/09/19 16:28:13 christos Exp $ # wordprocessors: file(1) magic fo word processors. # ####### PWP file format used on Smith Corona Personal Word Processors: diff --git a/contrib/file/magic/Magdir/xdelta b/contrib/file/magic/Magdir/xdelta index 80c92dac03..1177521193 100644 --- a/contrib/file/magic/Magdir/xdelta +++ b/contrib/file/magic/Magdir/xdelta @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: xdelta,v 1.4 2009/09/19 16:28:13 christos Exp $ # file(1) magic(5) data for xdelta Josh MacDonald # 0 string %XDELTA% XDelta binary patch file 0.14 diff --git a/contrib/file/magic/Magdir/xenix b/contrib/file/magic/Magdir/xenix index 1acadec62a..3d238df39f 100644 --- a/contrib/file/magic/Magdir/xenix +++ b/contrib/file/magic/Magdir/xenix @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: xenix,v 1.9 2009/09/19 16:28:13 christos Exp $ # xenix: file(1) magic for Microsoft Xenix # # "Middle model" stuff, and "Xenix 8086 relocatable or 80286 small diff --git a/contrib/file/magic/Magdir/xilinx b/contrib/file/magic/Magdir/xilinx index 8f411ce21d..26efb1baeb 100644 --- a/contrib/file/magic/Magdir/xilinx +++ b/contrib/file/magic/Magdir/xilinx @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: xilinx,v 1.4 2009/09/19 16:28:13 christos Exp $ # This is Aaron's attempt at a MAGIC file for Xilinx .bit files. # Xilinx-Magic@RevRagnarok.com # Got the info from FPGA-FAQ 0026 diff --git a/contrib/file/magic/Magdir/xo65 b/contrib/file/magic/Magdir/xo65 index 1020cee58c..7b38818e09 100644 --- a/contrib/file/magic/Magdir/xo65 +++ b/contrib/file/magic/Magdir/xo65 @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: xo65,v 1.4 2009/09/19 16:28:13 christos Exp $ # xo65 object files # From: "Ullrich von Bassewitz" # diff --git a/contrib/file/magic/Magdir/xwindows b/contrib/file/magic/Magdir/xwindows index cae45a780d..0cb5b1104a 100644 --- a/contrib/file/magic/Magdir/xwindows +++ b/contrib/file/magic/Magdir/xwindows @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: xwindows,v 1.6 2009/09/19 16:28:13 christos Exp $ # xwindows: file(1) magic for various X/Window system file formats. # Compiled X Keymap diff --git a/contrib/file/magic/Magdir/zilog b/contrib/file/magic/Magdir/zilog index b746e204f5..1c861fb283 100644 --- a/contrib/file/magic/Magdir/zilog +++ b/contrib/file/magic/Magdir/zilog @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: zilog,v 1.7 2009/09/19 16:28:13 christos Exp $ # zilog: file(1) magic for Zilog Z8000. # # Was it big-endian or little-endian? My Product Specification doesn't diff --git a/contrib/file/magic/Magdir/zyxel b/contrib/file/magic/Magdir/zyxel index 12a6abd5de..d3a43e4878 100644 --- a/contrib/file/magic/Magdir/zyxel +++ b/contrib/file/magic/Magdir/zyxel @@ -1,5 +1,6 @@ #------------------------------------------------------------------------------ +# $File: zyxel,v 1.6 2009/09/19 16:28:13 christos Exp $ # zyxel: file(1) magic for ZyXEL modems # # From diff --git a/contrib/file/src/apprentice.c b/contrib/file/src/apprentice.c index bbadc0c25b..58826c3165 100644 --- a/contrib/file/src/apprentice.c +++ b/contrib/file/src/apprentice.c @@ -32,7 +32,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: apprentice.c,v 1.151 2009/03/18 15:19:23 christos Exp $") +FILE_RCSID("@(#)$File: apprentice.c,v 1.158 2009/10/19 13:10:20 christos Exp $") #endif /* lint */ #include "magic.h" @@ -353,12 +353,10 @@ file_apprentice(struct magic_set *ms, const char *fn, int action) int file_err, errs = -1; struct mlist *mlist; - init_file_tables(); + if ((fn = magic_getpath(fn, action)) == NULL) + return NULL; - if (fn == NULL) - fn = getenv("MAGIC"); - if (fn == NULL) - fn = MAGIC; + init_file_tables(); if ((mfn = strdup(fn)) == NULL) { file_oomem(ms, strlen(fn)); @@ -594,10 +592,21 @@ set_test_type(struct magic *mstart, struct magic *m) break; case FILE_REGEX: case FILE_SEARCH: + /* Check for override */ + if (mstart->str_flags & STRING_BINTEST) + mstart->flag |= BINTEST; + if (mstart->str_flags & STRING_TEXTTEST) + mstart->flag |= TEXTTEST; + + if (mstart->flag & (TEXTTEST|BINTEST)) + break; + /* binary test if pattern is not text */ if (file_looks_utf8(m->value.us, (size_t)m->vallen, NULL, NULL) <= 0) mstart->flag |= BINTEST; + else + mstart->flag |= TEXTTEST; break; case FILE_DEFAULT: /* can't deduce anything; we shouldn't see this at the @@ -627,7 +636,9 @@ load_1(struct magic_set *ms, int action, const char *fn, int *errs, (*errs)++; } else { /* read and parse this file */ - for (ms->line = 1; fgets(line, sizeof(line), f) != NULL; ms->line++) { + for (ms->line = 1; + fgets(line, CAST(int, sizeof(line)), f) != NULL; + ms->line++) { size_t len; len = strlen(line); if (len == 0) /* null line, garbage, etc */ @@ -683,6 +694,12 @@ load_1(struct magic_set *ms, int action, const char *fn, int *errs, * parse a file or directory of files * const char *fn: name of magic file or directory */ +private int +cmpstrp(const void *p1, const void *p2) +{ + return strcmp(*(char *const *)p1, *(char *const *)p2); +} + private int apprentice_load(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp, const char *fn, int action) @@ -690,8 +707,8 @@ apprentice_load(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp, int errs = 0; struct magic_entry *marray; uint32_t marraycount, i, mentrycount = 0, starttest; - size_t slen; - char subfn[MAXPATHLEN]; + size_t slen, files = 0, maxfiles = 0; + char subfn[MAXPATHLEN], **filearr = NULL, *mfn; struct stat st; DIR *dir; struct dirent *d; @@ -711,23 +728,43 @@ apprentice_load(struct magic_set *ms, struct magic **magicp, uint32_t *nmagicp, (void)fprintf(stderr, "%s\n", usg_hdr); /* load directory or file */ - /* FIXME: Read file names and sort them to prevent - non-determinism. See Debian bug #488562. */ if (stat(fn, &st) == 0 && S_ISDIR(st.st_mode)) { dir = opendir(fn); - if (dir) { - while ((d = readdir(dir)) != NULL) { - snprintf(subfn, sizeof(subfn), "%s/%s", - fn, d->d_name); - if (stat(subfn, &st) == 0 && - S_ISREG(st.st_mode)) { - load_1(ms, action, subfn, &errs, - &marray, &marraycount); + if (!dir) { + errs++; + goto out; + } + while ((d = readdir(dir)) != NULL) { + (void)snprintf(subfn, sizeof(subfn), "%s/%s", + fn, d->d_name); + if (stat(subfn, &st) == -1 || !S_ISREG(st.st_mode)) + continue; + if ((mfn = strdup(subfn)) == NULL) { + file_oomem(ms, strlen(subfn)); + errs++; + goto out; + } + if (files >= maxfiles) { + size_t mlen; + maxfiles = (maxfiles + 1) * 2; + mlen = maxfiles * sizeof(*filearr); + if ((filearr = CAST(char **, + realloc(filearr, mlen))) == NULL) { + file_oomem(ms, mlen); + errs++; + goto out; } } - closedir(dir); - } else - errs++; + filearr[files++] = mfn; + } + closedir(dir); + qsort(filearr, files, sizeof(*filearr), cmpstrp); + for (i = 0; i < files; i++) { + load_1(ms, action, filearr[i], &errs, &marray, + &marraycount); + free(filearr[i]); + } + free(filearr); } else load_1(ms, action, fn, &errs, &marray, &marraycount); if (errs) @@ -923,14 +960,14 @@ string_modifier_check(struct magic_set *ms, struct magic *m) } break; case FILE_REGEX: - if ((m->str_flags & STRING_COMPACT_BLANK) != 0) { + if ((m->str_flags & STRING_COMPACT_WHITESPACE) != 0) { file_magwarn(ms, "'/%c' not allowed on regex\n", - CHAR_COMPACT_BLANK); + CHAR_COMPACT_WHITESPACE); return -1; } - if ((m->str_flags & STRING_COMPACT_OPTIONAL_BLANK) != 0) { + if ((m->str_flags & STRING_COMPACT_OPTIONAL_WHITESPACE) != 0) { file_magwarn(ms, "'/%c' not allowed on regex\n", - CHAR_COMPACT_OPTIONAL_BLANK); + CHAR_COMPACT_OPTIONAL_WHITESPACE); return -1; } break; @@ -1087,7 +1124,7 @@ parse(struct magic_set *ms, struct magic_entry **mentryp, uint32_t *nmentryp, return -1; } me->mp = m = nm; - me->max_count = cnt; + me->max_count = CAST(uint32_t, cnt); } m = &me->mp[me->cont_count++]; (void)memset(m, 0, sizeof(*m)); @@ -1123,7 +1160,7 @@ parse(struct magic_set *ms, struct magic_entry **mentryp, uint32_t *nmentryp, m->cont_level = 0; me->cont_count = 1; } - m->lineno = lineno; + m->lineno = CAST(uint32_t, lineno); if (*l == '&') { /* m->cont_level == 0 checked below. */ ++l; /* step over */ @@ -1296,18 +1333,19 @@ parse(struct magic_set *ms, struct magic_entry **mentryp, uint32_t *nmentryp, file_magwarn(ms, "multiple ranges"); have_range = 1; - m->str_range = strtoul(l, &t, 0); + m->str_range = CAST(uint32_t, + strtoul(l, &t, 0)); if (m->str_range == 0) file_magwarn(ms, "zero range"); l = t - 1; break; - case CHAR_COMPACT_BLANK: - m->str_flags |= STRING_COMPACT_BLANK; + case CHAR_COMPACT_WHITESPACE: + m->str_flags |= STRING_COMPACT_WHITESPACE; break; - case CHAR_COMPACT_OPTIONAL_BLANK: + case CHAR_COMPACT_OPTIONAL_WHITESPACE: m->str_flags |= - STRING_COMPACT_OPTIONAL_BLANK; + STRING_COMPACT_OPTIONAL_WHITESPACE; break; case CHAR_IGNORE_LOWERCASE: m->str_flags |= STRING_IGNORE_LOWERCASE; @@ -1318,6 +1356,12 @@ parse(struct magic_set *ms, struct magic_entry **mentryp, uint32_t *nmentryp, case CHAR_REGEX_OFFSET_START: m->str_flags |= REGEX_OFFSET_START; break; + case CHAR_BINTEST: + m->str_flags |= STRING_BINTEST; + break; + case CHAR_TEXTTEST: + m->str_flags |= STRING_TEXTTEST; + break; default: if (ms->flags & MAGIC_CHECK) file_magwarn(ms, @@ -1509,6 +1553,7 @@ parse_apple(struct magic_set *ms, struct magic_entry *me, const char *line) || strchr("-+/.", *l)) && i < sizeof(m->apple); m->apple[i++] = *l++) continue; if (i == sizeof(m->apple) && *l) { + /* We don't need to NUL terminate here, printing handles it */ if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "APPLE type `%s' truncated %zu", line, i); @@ -1542,7 +1587,7 @@ parse_mime(struct magic_set *ms, struct magic_entry *me, const char *line) || strchr("-+/.", *l)) && i < sizeof(m->mimetype); m->mimetype[i++] = *l++) continue; if (i == sizeof(m->mimetype)) { - m->desc[sizeof(m->mimetype) - 1] = '\0'; + m->mimetype[sizeof(m->mimetype) - 1] = '\0'; if (ms->flags & MAGIC_CHECK) file_magwarn(ms, "MIME type `%s' truncated %zu", m->mimetype, i); @@ -1943,7 +1988,7 @@ getstr(struct magic_set *ms, struct magic *m, const char *s, int warn) } out: *p = '\0'; - m->vallen = p - origp; + m->vallen = CAST(unsigned char, (p - origp)); if (m->type == FILE_PSTRING) m->vallen++; return s; @@ -1975,14 +2020,15 @@ file_showstr(FILE *fp, const char *s, size_t len) char c; for (;;) { - c = *s++; if (len == ~0U) { + c = *s++; if (c == '\0') break; } else { if (len-- == 0) break; + c = *s++; } if (c >= 040 && c <= 0176) /* TODO isprint && !iscntrl */ (void) fputc(c, fp); diff --git a/contrib/file/src/cdf.c b/contrib/file/src/cdf.c index fd13bc00e9..92791ea8e6 100644 --- a/contrib/file/src/cdf.c +++ b/contrib/file/src/cdf.c @@ -32,7 +32,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: cdf.c,v 1.30 2009/05/06 14:29:47 christos Exp $") +FILE_RCSID("@(#)$File: cdf.c,v 1.36 2010/01/22 20:56:26 christos Exp $") #endif #include @@ -44,6 +44,9 @@ FILE_RCSID("@(#)$File: cdf.c,v 1.30 2009/05/06 14:29:47 christos Exp $") #include #include #include +#ifdef HAVE_LIMITS_H +#include +#endif #ifndef EFTYPE #define EFTYPE EINVAL @@ -68,9 +71,9 @@ static union { #define NEED_SWAP (cdf_bo.u == (uint32_t)0x01020304) -#define CDF_TOLE8(x) (NEED_SWAP ? cdf_tole8(x) : (uint64_t)(x)) -#define CDF_TOLE4(x) (NEED_SWAP ? cdf_tole4(x) : (uint32_t)(x)) -#define CDF_TOLE2(x) (NEED_SWAP ? cdf_tole2(x) : (uint16_t)(x)) +#define CDF_TOLE8(x) ((uint64_t)(NEED_SWAP ? cdf_tole8(x) : (uint64_t)(x))) +#define CDF_TOLE4(x) ((uint32_t)(NEED_SWAP ? cdf_tole4(x) : (uint32_t)(x))) +#define CDF_TOLE2(x) ((uint16_t)(NEED_SWAP ? cdf_tole2(x) : (uint16_t)(x))) /* * swap a short @@ -145,15 +148,15 @@ cdf_swap_header(cdf_header_t *h) h->h_min_size_standard_stream = CDF_TOLE4(h->h_min_size_standard_stream); h->h_secid_first_sector_in_short_sat = - CDF_TOLE4(h->h_secid_first_sector_in_short_sat); + CDF_TOLE4((uint32_t)h->h_secid_first_sector_in_short_sat); h->h_num_sectors_in_short_sat = CDF_TOLE4(h->h_num_sectors_in_short_sat); h->h_secid_first_sector_in_master_sat = - CDF_TOLE4(h->h_secid_first_sector_in_master_sat); + CDF_TOLE4((uint32_t)h->h_secid_first_sector_in_master_sat); h->h_num_sectors_in_master_sat = CDF_TOLE4(h->h_num_sectors_in_master_sat); for (i = 0; i < __arraycount(h->h_master_sat); i++) - h->h_master_sat[i] = CDF_TOLE4(h->h_master_sat[i]); + h->h_master_sat[i] = CDF_TOLE4((uint32_t)h->h_master_sat[i]); } void @@ -186,15 +189,15 @@ void cdf_swap_dir(cdf_directory_t *d) { d->d_namelen = CDF_TOLE2(d->d_namelen); - d->d_left_child = CDF_TOLE4(d->d_left_child); - d->d_right_child = CDF_TOLE4(d->d_right_child); - d->d_storage = CDF_TOLE4(d->d_storage); + d->d_left_child = CDF_TOLE4((uint32_t)d->d_left_child); + d->d_right_child = CDF_TOLE4((uint32_t)d->d_right_child); + d->d_storage = CDF_TOLE4((uint32_t)d->d_storage); d->d_storage_uuid[0] = CDF_TOLE8(d->d_storage_uuid[0]); d->d_storage_uuid[1] = CDF_TOLE8(d->d_storage_uuid[1]); d->d_flags = CDF_TOLE4(d->d_flags); - d->d_created = CDF_TOLE8(d->d_created); - d->d_modified = CDF_TOLE8(d->d_modified); - d->d_stream_first_sector = CDF_TOLE4(d->d_stream_first_sector); + d->d_created = CDF_TOLE8((uint64_t)d->d_created); + d->d_modified = CDF_TOLE8((uint64_t)d->d_modified); + d->d_stream_first_sector = CDF_TOLE4((uint32_t)d->d_stream_first_sector); d->d_size = CDF_TOLE4(d->d_size); } @@ -228,14 +231,17 @@ cdf_unpack_dir(cdf_directory_t *d, char *buf) } static int -cdf_check_stream_offset(const cdf_stream_t *sst, const void *p, size_t tail) +cdf_check_stream_offset(const cdf_stream_t *sst, const void *p, size_t tail, + int line) { const char *b = (const char *)sst->sst_tab; const char *e = ((const char *)p) + tail; + (void)&line; if (e >= b && (size_t)(e - b) < sst->sst_dirlen * sst->sst_len) return 0; - DPRINTF((stderr, "offset begin %p end %p %zu >= %zu\n", b, e, - (size_t)(e - b), sst->sst_dirlen * sst->sst_len)); + DPRINTF(("%d: offset begin %p end %p %zu >= %zu [%zu %zu]\n", + line, b, e, (size_t)(e - b), sst->sst_dirlen * sst->sst_len, + sst->sst_dirlen, sst->sst_len)); errno = EFTYPE; return -1; } @@ -344,7 +350,8 @@ cdf_read_sat(const cdf_info_t *info, cdf_header_t *h, cdf_sat_t *sat) sat->sat_len = h->h_num_sectors_in_master_sat * nsatpersec + i; DPRINTF(("sat_len = %zu ss = %zu\n", sat->sat_len, ss)); - if ((sat->sat_tab = calloc(sat->sat_len, ss)) == NULL) + if ((sat->sat_tab = CAST(cdf_secid_t *, calloc(sat->sat_len, ss))) + == NULL) return -1; for (i = 0; i < __arraycount(h->h_master_sat); i++) { @@ -357,7 +364,7 @@ cdf_read_sat(const cdf_info_t *info, cdf_header_t *h, cdf_sat_t *sat) } } - if ((msa = calloc(1, ss)) == NULL) + if ((msa = CAST(cdf_secid_t *, calloc(1, ss))) == NULL) goto out1; mid = h->h_secid_first_sector_in_master_sat; @@ -374,7 +381,7 @@ cdf_read_sat(const cdf_info_t *info, cdf_header_t *h, cdf_sat_t *sat) goto out2; } for (k = 0; k < nsatpersec; k++, i++) { - sec = CDF_TOLE4(msa[k]); + sec = CDF_TOLE4((uint32_t)msa[k]); if (sec < 0) goto out; if (i >= sat->sat_len) { @@ -390,7 +397,7 @@ cdf_read_sat(const cdf_info_t *info, cdf_header_t *h, cdf_sat_t *sat) goto out2; } } - mid = CDF_TOLE4(msa[nsatpersec]); + mid = CDF_TOLE4((uint32_t)msa[nsatpersec]); } out: sat->sat_len = i; @@ -422,7 +429,7 @@ cdf_count_chain(const cdf_sat_t *sat, cdf_secid_t sid, size_t size) errno = EFTYPE; return (size_t)-1; } - sid = CDF_TOLE4(sat->sat_tab[sid]); + sid = CDF_TOLE4((uint32_t)sat->sat_tab[sid]); } DPRINTF(("\n")); return i; @@ -465,7 +472,7 @@ cdf_read_long_sector_chain(const cdf_info_t *info, const cdf_header_t *h, DPRINTF(("Reading long sector chain %d", sid)); goto out; } - sid = CDF_TOLE4(sat->sat_tab[sid]); + sid = CDF_TOLE4((uint32_t)sat->sat_tab[sid]); } return 0; out: @@ -506,7 +513,7 @@ cdf_read_short_sector_chain(const cdf_header_t *h, DPRINTF(("Reading short sector chain %d", sid)); goto out; } - sid = CDF_TOLE4(ssat->sat_tab[sid]); + sid = CDF_TOLE4((uint32_t)ssat->sat_tab[sid]); } return 0; out: @@ -520,7 +527,7 @@ cdf_read_sector_chain(const cdf_info_t *info, const cdf_header_t *h, cdf_secid_t sid, size_t len, cdf_stream_t *scn) { - if (len < h->h_min_size_standard_stream) + if (len < h->h_min_size_standard_stream && sst->sst_tab != NULL) return cdf_read_short_sector_chain(h, ssat, sst, sid, len, scn); else @@ -543,11 +550,12 @@ cdf_read_dir(const cdf_info_t *info, const cdf_header_t *h, nd = ss / CDF_DIRECTORY_SIZE; dir->dir_len = ns * nd; - dir->dir_tab = calloc(dir->dir_len, sizeof(dir->dir_tab[0])); + dir->dir_tab = CAST(cdf_directory_t *, + calloc(dir->dir_len, sizeof(dir->dir_tab[0]))); if (dir->dir_tab == NULL) return -1; - if ((buf = malloc(ss)) == NULL) { + if ((buf = CAST(char *, malloc(ss))) == NULL) { free(dir->dir_tab); return -1; } @@ -566,7 +574,7 @@ cdf_read_dir(const cdf_info_t *info, const cdf_header_t *h, cdf_unpack_dir(&dir->dir_tab[i * nd + j], &buf[j * CDF_DIRECTORY_SIZE]); } - sid = CDF_TOLE4(sat->sat_tab[sid]); + sid = CDF_TOLE4((uint32_t)sat->sat_tab[sid]); } if (NEED_SWAP) for (i = 0; i < dir->dir_len; i++) @@ -592,7 +600,7 @@ cdf_read_ssat(const cdf_info_t *info, const cdf_header_t *h, if (ssat->sat_len == (size_t)-1) return -1; - ssat->sat_tab = calloc(ssat->sat_len, ss); + ssat->sat_tab = CAST(cdf_secid_t *, calloc(ssat->sat_len, ss)); if (ssat->sat_tab == NULL) return -1; @@ -613,7 +621,7 @@ cdf_read_ssat(const cdf_info_t *info, const cdf_header_t *h, DPRINTF(("Reading short sat sector %d", sid)); goto out; } - sid = CDF_TOLE4(sat->sat_tab[sid]); + sid = CDF_TOLE4((uint32_t)sat->sat_tab[sid]); } return 0; out: @@ -668,18 +676,18 @@ cdf_read_summary_info(const cdf_info_t *info, const cdf_header_t *h, const cdf_directory_t *d; static const char name[] = "\05SummaryInformation"; - for (i = 0; i < dir->dir_len; i++) - if (dir->dir_tab[i].d_type == CDF_DIR_TYPE_USER_STREAM && - cdf_namecmp(name, dir->dir_tab[i].d_name, sizeof(name)) + for (i = dir->dir_len; i > 0; i--) + if (dir->dir_tab[i - 1].d_type == CDF_DIR_TYPE_USER_STREAM && + cdf_namecmp(name, dir->dir_tab[i - 1].d_name, sizeof(name)) == 0) break; - if (i == dir->dir_len) { + if (i == 0) { DPRINTF(("Cannot find summary information section\n")); - errno = EFTYPE; + errno = ESRCH; return -1; } - d = &dir->dir_tab[i]; + d = &dir->dir_tab[i - 1]; return cdf_read_sector_chain(info, h, sat, ssat, sst, d->d_stream_first_sector, d->d_size, scn); } @@ -704,8 +712,9 @@ cdf_read_property_info(const cdf_stream_t *sst, uint32_t offs, errno = EFTYPE; goto out; } - shp = (const void *)((const char *)sst->sst_tab + offs); - if (cdf_check_stream_offset(sst, shp, sizeof(*shp)) == -1) + shp = CAST(const cdf_section_header_t *, (const void *) + ((const char *)sst->sst_tab + offs)); + if (cdf_check_stream_offset(sst, shp, sizeof(*shp), __LINE__) == -1) goto out; sh.sh_len = CDF_TOLE4(shp->sh_len); #define CDF_SHLEN_LIMIT (UINT32_MAX / 8) @@ -723,22 +732,28 @@ cdf_read_property_info(const cdf_stream_t *sst, uint32_t offs, if (*maxcount > CDF_PROP_LIMIT) goto out; *maxcount += sh.sh_properties; - inp = realloc(*info, *maxcount * sizeof(*inp)); + inp = CAST(cdf_property_info_t *, + realloc(*info, *maxcount * sizeof(*inp))); } else { *maxcount = sh.sh_properties; - inp = malloc(*maxcount * sizeof(*inp)); + inp = CAST(cdf_property_info_t *, + malloc(*maxcount * sizeof(*inp))); } if (inp == NULL) goto out; *info = inp; inp += *count; *count += sh.sh_properties; - p = (const void *)((const char *)sst->sst_tab + offs + sizeof(sh)); - e = (const void *)(((const char *)shp) + sh.sh_len); - if (cdf_check_stream_offset(sst, e, 0) == -1) + p = CAST(const uint32_t *, (const void *) + ((const char *)(const void *)sst->sst_tab + + offs + sizeof(sh))); + e = CAST(const uint32_t *, (const void *) + (((const char *)(const void *)shp) + sh.sh_len)); + if (cdf_check_stream_offset(sst, e, 0, __LINE__) == -1) goto out; for (i = 0; i < sh.sh_properties; i++) { - q = (const uint32_t *)((const char *)p + + q = (const uint32_t *)(const void *) + ((const char *)(const void *)p + CDF_TOLE4(p[(i << 1) + 1])) - 2; if (q > e) { DPRINTF(("Ran of the end %p > %p\n", q, e)); @@ -758,6 +773,7 @@ cdf_read_property_info(const cdf_stream_t *sst, uint32_t offs, if (inp[i].pi_type & (CDF_ARRAY|CDF_BYREF|CDF_RESERVED)) goto unknown; switch (inp[i].pi_type & CDF_TYPEMASK) { + case CDF_NULL: case CDF_EMPTY: break; case CDF_SIGNED16: @@ -770,7 +786,7 @@ cdf_read_property_info(const cdf_stream_t *sst, uint32_t offs, if (inp[i].pi_type & CDF_VECTOR) goto unknown; (void)memcpy(&s32, &q[o], sizeof(s32)); - inp[i].pi_s32 = CDF_TOLE4(s32); + inp[i].pi_s32 = CDF_TOLE4((uint32_t)s32); break; case CDF_BOOL: case CDF_UNSIGNED32: @@ -783,22 +799,24 @@ cdf_read_property_info(const cdf_stream_t *sst, uint32_t offs, if (inp[i].pi_type & CDF_VECTOR) goto unknown; (void)memcpy(&s64, &q[o], sizeof(s64)); - inp[i].pi_s64 = CDF_TOLE4(s64); + inp[i].pi_s64 = CDF_TOLE8((uint64_t)s64); break; case CDF_UNSIGNED64: if (inp[i].pi_type & CDF_VECTOR) goto unknown; (void)memcpy(&u64, &q[o], sizeof(u64)); - inp[i].pi_u64 = CDF_TOLE4(u64); + inp[i].pi_u64 = CDF_TOLE8((uint64_t)u64); break; case CDF_LENGTH32_STRING: + case CDF_LENGTH32_WSTRING: if (nelements > 1) { size_t nelem = inp - *info; if (*maxcount > CDF_PROP_LIMIT || nelements > CDF_PROP_LIMIT) goto out; *maxcount += nelements; - inp = realloc(*info, *maxcount * sizeof(*inp)); + inp = CAST(cdf_property_info_t *, + realloc(*info, *maxcount * sizeof(*inp))); if (inp == NULL) goto out; *info = inp; @@ -808,11 +826,12 @@ cdf_read_property_info(const cdf_stream_t *sst, uint32_t offs, for (j = 0; j < nelements; j++, i++) { uint32_t l = CDF_TOLE4(q[o]); inp[i].pi_str.s_len = l; - inp[i].pi_str.s_buf = (const char *)(&q[o+1]); + inp[i].pi_str.s_buf = + (const char *)(const void *)(&q[o+1]); DPRINTF(("l = %d, r = %d, s = %s\n", l, CDF_ROUND(l, sizeof(l)), inp[i].pi_str.s_buf)); - l = 4 + CDF_ROUND(l, sizeof(l)); + l = 4 + (uint32_t)CDF_ROUND(l, sizeof(l)); o += l >> 2; } i--; @@ -821,7 +840,7 @@ cdf_read_property_info(const cdf_stream_t *sst, uint32_t offs, if (inp[i].pi_type & CDF_VECTOR) goto unknown; (void)memcpy(&tp, &q[o], sizeof(tp)); - inp[i].pi_tp = CDF_TOLE8(tp); + inp[i].pi_tp = CDF_TOLE8((uint64_t)tp); break; case CDF_CLIPBOARD: if (inp[i].pi_type & CDF_VECTOR) @@ -845,12 +864,14 @@ cdf_unpack_summary_info(const cdf_stream_t *sst, cdf_summary_info_header_t *ssi, cdf_property_info_t **info, size_t *count) { size_t i, maxcount; - const cdf_summary_info_header_t *si = sst->sst_tab; - const cdf_section_declaration_t *sd = (const void *) - ((const char *)sst->sst_tab + CDF_SECTION_DECLARATION_OFFSET); - - if (cdf_check_stream_offset(sst, si, sizeof(*si)) == -1 || - cdf_check_stream_offset(sst, sd, sizeof(*sd)) == -1) + const cdf_summary_info_header_t *si = + CAST(const cdf_summary_info_header_t *, sst->sst_tab); + const cdf_section_declaration_t *sd = + CAST(const cdf_section_declaration_t *, (const void *) + ((const char *)sst->sst_tab + CDF_SECTION_DECLARATION_OFFSET)); + + if (cdf_check_stream_offset(sst, si, sizeof(*si), __LINE__) == -1 || + cdf_check_stream_offset(sst, sd, sizeof(*sd), __LINE__) == -1) return -1; ssi->si_byte_order = CDF_TOLE2(si->si_byte_order); ssi->si_os_version = CDF_TOLE2(si->si_os_version); @@ -926,32 +947,32 @@ cdf_print_property_name(char *buf, size_t bufsiz, uint32_t p) int cdf_print_elapsed_time(char *buf, size_t bufsiz, cdf_timestamp_t ts) { - size_t len = 0; + int len = 0; int days, hours, mins, secs; ts /= CDF_TIME_PREC; - secs = ts % 60; + secs = (int)(ts % 60); ts /= 60; - mins = ts % 60; + mins = (int)(ts % 60); ts /= 60; - hours = ts % 24; + hours = (int)(ts % 24); ts /= 24; - days = ts; + days = (int)ts; if (days) { len += snprintf(buf + len, bufsiz - len, "%dd+", days); - if (len >= bufsiz) + if ((size_t)len >= bufsiz) return len; } if (days || hours) { len += snprintf(buf + len, bufsiz - len, "%.2d:", hours); - if (len >= bufsiz) + if ((size_t)len >= bufsiz) return len; } len += snprintf(buf + len, bufsiz - len, "%.2d:", mins); - if (len >= bufsiz) + if ((size_t)len >= bufsiz) return len; len += snprintf(buf + len, bufsiz - len, "%.2d", secs); @@ -1096,12 +1117,14 @@ cdf_dump_property_info(const cdf_property_info_t *info, size_t count) cdf_timestamp_t tp; struct timespec ts; char buf[64]; - size_t i; + size_t i, j; for (i = 0; i < count; i++) { cdf_print_property_name(buf, sizeof(buf), info[i].pi_id); (void)fprintf(stderr, "%zu) %s: ", i, buf); switch (info[i].pi_type) { + case CDF_NULL: + break; case CDF_SIGNED16: (void)fprintf(stderr, "signed 16 [%hd]\n", info[i].pi_s16); @@ -1119,6 +1142,13 @@ cdf_dump_property_info(const cdf_property_info_t *info, size_t count) info[i].pi_str.s_len, info[i].pi_str.s_len, info[i].pi_str.s_buf); break; + case CDF_LENGTH32_WSTRING: + (void)fprintf(stderr, "string %u [", + info[i].pi_str.s_len); + for (j = 0; j < info[i].pi_str.s_len - 1; j++) + (void)fputc(info[i].pi_str.s_buf[j << 1], stderr); + (void)fprintf(stderr, "]\n"); + break; case CDF_FILETIME: tp = info[i].pi_tp; if (tp < 1000000000000000LL) { @@ -1203,7 +1233,7 @@ main(int argc, char *argv[]) if (cdf_read_ssat(&info, &h, &sat, &ssat) == -1) err(1, "Cannot read ssat"); #ifdef CDF_DEBUG - cdf_dump_sat("SSAT", &h, &ssat, CDF_SHORT_SEC_SIZE(&h)); + cdf_dump_sat("SSAT", &ssat, CDF_SHORT_SEC_SIZE(&h)); #endif if (cdf_read_dir(&info, &h, &sat, &dir) == -1) diff --git a/contrib/file/src/cdf_time.c b/contrib/file/src/cdf_time.c index 932253bef4..14dcfc6f74 100644 --- a/contrib/file/src/cdf_time.c +++ b/contrib/file/src/cdf_time.c @@ -27,7 +27,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: cdf_time.c,v 1.6 2009/03/10 11:44:29 christos Exp $") +FILE_RCSID("@(#)$File: cdf_time.c,v 1.8 2009/06/20 20:47:30 christos Exp $") #endif #include @@ -45,6 +45,12 @@ static const int mdays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; +#ifdef __DJGPP__ +#define timespec timeval +#define tv_nsec tv_usec +#endif + + /* * Return the number of days between jan 01 1601 and jan 01 of year. */ @@ -108,22 +114,22 @@ cdf_timestamp_to_timespec(struct timespec *ts, cdf_timestamp_t t) ts->tv_nsec = (t % CDF_TIME_PREC) * 100; t /= CDF_TIME_PREC; - tm.tm_sec = t % 60; + tm.tm_sec = (int)(t % 60); t /= 60; - tm.tm_min = t % 60; + tm.tm_min = (int)(t % 60); t /= 60; - tm.tm_hour = t % 24; + tm.tm_hour = (int)(t % 24); t /= 24; // XXX: Approx - tm.tm_year = CDF_BASE_YEAR + (t / 365); + tm.tm_year = (int)(CDF_BASE_YEAR + (t / 365)); rdays = cdf_getdays(tm.tm_year); t -= rdays; - tm.tm_mday = cdf_getday(tm.tm_year, t); - tm.tm_mon = cdf_getmonth(tm.tm_year, t); + tm.tm_mday = cdf_getday(tm.tm_year, (int)t); + tm.tm_mon = cdf_getmonth(tm.tm_year, (int)t); tm.tm_wday = 0; tm.tm_yday = 0; tm.tm_isdst = 0; @@ -143,10 +149,13 @@ cdf_timestamp_to_timespec(struct timespec *ts, cdf_timestamp_t t) } int +/*ARGSUSED*/ cdf_timespec_to_timestamp(cdf_timestamp_t *t, const struct timespec *ts) { +#ifndef __lint__ (void)&t; (void)&ts; +#endif #ifdef notyet struct tm tm; if (gmtime_r(&ts->ts_sec, &tm) == NULL) { diff --git a/contrib/file/src/compress.c b/contrib/file/src/compress.c index 28dacd338c..f04ab27d79 100644 --- a/contrib/file/src/compress.c +++ b/contrib/file/src/compress.c @@ -35,7 +35,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: compress.c,v 1.63 2009/03/23 14:21:51 christos Exp $") +FILE_RCSID("@(#)$File: compress.c,v 1.64 2009/05/08 17:41:58 christos Exp $") #endif #include "magic.h" @@ -144,7 +144,7 @@ error: private ssize_t swrite(int fd, const void *buf, size_t n) { - int rv; + ssize_t rv; size_t rn = n; do @@ -155,7 +155,7 @@ swrite(int fd, const void *buf, size_t n) return -1; default: n -= rv; - buf = ((const char *)buf) + rv; + buf = CAST(const char *, buf) + rv; break; } while (n > 0); @@ -169,7 +169,7 @@ swrite(int fd, const void *buf, size_t n) protected ssize_t sread(int fd, void *buf, size_t n, int canbepipe) { - int rv, cnt; + ssize_t rv, cnt; #ifdef FIONREAD int t = 0; #endif @@ -235,7 +235,8 @@ file_pipe2file(struct magic_set *ms, int fd, const void *startbuf, size_t nbytes) { char buf[4096]; - int r, tfd; + ssize_t r; + int tfd, te; (void)strlcpy(buf, "/tmp/file.XXXXXX", sizeof buf); #ifndef HAVE_MKSTEMP @@ -248,9 +249,9 @@ file_pipe2file(struct magic_set *ms, int fd, const void *startbuf, } #else tfd = mkstemp(buf); - r = errno; + te = errno; (void)unlink(buf); - errno = r; + errno = te; #endif if (tfd == -1) { file_error(ms, errno, @@ -337,13 +338,14 @@ uncompressgzipped(struct magic_set *ms, const unsigned char *old, /* XXX: const castaway, via strchr */ z.next_in = (Bytef *)strchr((const char *)old + data_start, old[data_start]); - z.avail_in = n - data_start; + z.avail_in = CAST(uint32_t, (n - data_start)); z.next_out = *newch; z.avail_out = HOWMANY; z.zalloc = Z_NULL; z.zfree = Z_NULL; z.opaque = Z_NULL; + /* LINTED bug in header macro */ rc = inflateInit2(&z, -15); if (rc != Z_OK) { file_error(ms, 0, "zlib: %s", z.msg); @@ -371,7 +373,7 @@ uncompressbuf(struct magic_set *ms, int fd, size_t method, const unsigned char *old, unsigned char **newch, size_t n) { int fdin[2], fdout[2]; - int r; + ssize_t r; #ifdef BUILTIN_DECOMPRESS /* FIXME: This doesn't cope with bzip2 */ diff --git a/contrib/file/src/encoding.c b/contrib/file/src/encoding.c index 4e94f9b868..0440514e0d 100644 --- a/contrib/file/src/encoding.c +++ b/contrib/file/src/encoding.c @@ -35,7 +35,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: encoding.c,v 1.3 2009/02/03 20:27:51 christos Exp $") +FILE_RCSID("@(#)$File: encoding.c,v 1.4 2009/09/13 19:02:22 christos Exp $") #endif /* lint */ #include "magic.h" @@ -52,6 +52,12 @@ private int looks_latin1(const unsigned char *, size_t, unichar *, size_t *); private int looks_extended(const unsigned char *, size_t, unichar *, size_t *); private void from_ebcdic(const unsigned char *, size_t, unsigned char *); +#ifdef DEBUG_ENCODING +#define DPRINTF(a) printf a +#else +#define DPRINTF(a) +#endif + /* * Try to determine whether text is in some character code we can * identify. Each of these tests, if it succeeds, will leave @@ -78,12 +84,16 @@ file_encoding(struct magic_set *ms, const unsigned char *buf, size_t nbytes, uni *type = "text"; if (looks_ascii(buf, nbytes, *ubuf, ulen)) { + DPRINTF(("ascii %zu\n", *ulen)); *code = "ASCII"; *code_mime = "us-ascii"; } else if (looks_utf8_with_BOM(buf, nbytes, *ubuf, ulen) > 0) { + DPRINTF(("utf8/bom %zu\n", *ulen)); *code = "UTF-8 Unicode (with BOM)"; *code_mime = "utf-8"; } else if (file_looks_utf8(buf, nbytes, *ubuf, ulen) > 1) { + DPRINTF(("utf8 %zu\n", *ulen)); + *code = "UTF-8 Unicode (with BOM)"; *code = "UTF-8 Unicode"; *code_mime = "utf-8"; } else if ((ucs_type = looks_ucs16(buf, nbytes, *ubuf, ulen)) != 0) { @@ -94,22 +104,28 @@ file_encoding(struct magic_set *ms, const unsigned char *buf, size_t nbytes, uni *code = "Big-endian UTF-16 Unicode"; *code_mime = "utf-16be"; } + DPRINTF(("ucs16 %zu\n", *ulen)); } else if (looks_latin1(buf, nbytes, *ubuf, ulen)) { + DPRINTF(("latin1 %zu\n", *ulen)); *code = "ISO-8859"; *code_mime = "iso-8859-1"; } else if (looks_extended(buf, nbytes, *ubuf, ulen)) { + DPRINTF(("extended %zu\n", *ulen)); *code = "Non-ISO extended-ASCII"; *code_mime = "unknown-8bit"; } else { from_ebcdic(buf, nbytes, nbuf); if (looks_ascii(nbuf, nbytes, *ubuf, ulen)) { + DPRINTF(("ebcdic %zu\n", *ulen)); *code = "EBCDIC"; *code_mime = "ebcdic"; } else if (looks_latin1(nbuf, nbytes, *ubuf, ulen)) { + DPRINTF(("ebcdic/international %zu\n", *ulen)); *code = "International EBCDIC"; *code_mime = "ebcdic"; } else { /* Doesn't look like text at all */ + DPRINTF(("binary\n")); rv = 0; *type = "binary"; } diff --git a/contrib/file/src/file.c b/contrib/file/src/file.c index 34aa44c854..3b73c5662e 100644 --- a/contrib/file/src/file.c +++ b/contrib/file/src/file.c @@ -32,7 +32,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: file.c,v 1.131 2009/02/13 18:48:05 christos Exp $") +FILE_RCSID("@(#)$File: file.c,v 1.136 2009/12/06 23:18:04 rrt Exp $") #endif /* lint */ #include "magic.h" @@ -63,24 +63,27 @@ FILE_RCSID("@(#)$File: file.c,v 1.131 2009/02/13 18:48:05 christos Exp $") #if defined(HAVE_GETOPT_H) && defined(HAVE_STRUCT_OPTION) #include -#else -#include "mygetopt.h" -#endif #ifndef HAVE_GETOPT_LONG int getopt_long(int argc, char * const *argv, const char *optstring, const struct option *longopts, int *longindex); #endif - -#include /* for byte swapping */ +#else +#include "mygetopt.h" +#endif #include "patchlevel.h" #ifdef S_IFLNK -#define SYMLINKFLAG "Lh" +#define FILE_FLAGS "-bchikLNnprsvz0" #else -#define SYMLINKFLAG "" +#define FILE_FLAGS "-bcikNnprsvz0" #endif -# define USAGE "Usage: %s [-bcik" SYMLINKFLAG "nNrsvz0] [-e test] [-f namefile] [-F separator] [-m magicfiles] file...\n %s -C -m magicfiles\n" +# define USAGE \ + "Usage: %s [" FILE_FLAGS \ + "] [--apple] [--mime-encoding] [--mime-type]\n" \ + " [-e testname] [-F separator] [-f namefile] [-m magicfiles] file ...\n" \ + " %s -C [-m magicfiles]\n" \ + " %s [--help]\n" #ifndef MAXPATHLEN #define MAXPATHLEN 1024 @@ -92,9 +95,7 @@ private int /* Global command-line options */ nobuffer = 0, /* Do not buffer stdout */ nulsep = 0; /* Append '\0' to the separator */ -private const char *default_magicfile = MAGIC; private const char *separator = ":"; /* Default field separator */ -private const char hmagic[] = "/.magic"; private const struct option long_options[] = { #define OPT(shortname, longname, opt, doc) \ {longname, opt, NULL, shortname}, @@ -143,11 +144,9 @@ main(int argc, char *argv[]) size_t i; int action = 0, didsomefiles = 0, errflg = 0; int flags = 0, e = 0; - char *home, *usermagic; struct magic_set *magic = NULL; - char magicpath[2 * MAXPATHLEN + 2]; int longindex; - const char *magicfile; /* where the magic is */ + const char *magicfile = NULL; /* where the magic is */ /* makes islower etc work for other langs */ (void)setlocale(LC_CTYPE, ""); @@ -162,20 +161,6 @@ main(int argc, char *argv[]) else progname = argv[0]; - magicfile = default_magicfile; - if ((usermagic = getenv("MAGIC")) != NULL) - magicfile = usermagic; - else - if ((home = getenv("HOME")) != NULL) { - (void)snprintf(magicpath, sizeof(magicpath), "%s%s", - home, hmagic); - if (access(magicpath, R_OK) == 0) { - (void)snprintf(magicpath, sizeof(magicpath), - "%s%s:%s", home, hmagic, magicfile); - magicfile = magicpath; - } - } - #ifdef S_IFLNK flags |= getenv("POSIXLY_CORRECT") ? MAGIC_SYMLINK : 0; #endif @@ -263,6 +248,8 @@ main(int argc, char *argv[]) flags |= MAGIC_DEVICES; break; case 'v': + if (magicfile == NULL) + magicfile = magic_getpath(magicfile, action); (void)fprintf(stderr, "%s-%d.%.2d\n", progname, FILE_VERSION_MAJOR, patchlevel); (void)fprintf(stderr, "magic file from %s\n", @@ -298,8 +285,6 @@ main(int argc, char *argv[]) * Don't try to check/compile ~/.magic unless we explicitly * ask for it. */ - if (magicfile == magicpath) - magicfile = default_magicfile; magic = magic_open(flags|MAGIC_CHECK); if (magic == NULL) { (void)fprintf(stderr, "%s: %s\n", progname, @@ -475,8 +460,7 @@ file_mbswidth(const char *s) private void usage(void) { - (void)fprintf(stderr, USAGE, progname, progname); - (void)fputs("Try `file --help' for more information.\n", stderr); + (void)fprintf(stderr, USAGE, progname, progname, progname); exit(1); } diff --git a/contrib/file/src/file.h b/contrib/file/src/file.h index ce12e64cbb..c07f2d4540 100644 --- a/contrib/file/src/file.h +++ b/contrib/file/src/file.h @@ -27,7 +27,7 @@ */ /* * file.h - definitions for file(1) program - * @(#)$File: file.h,v 1.119 2009/02/04 18:24:32 christos Exp $ + * @(#)$File: file.h,v 1.124 2010/01/16 17:45:12 chl Exp $ */ #ifndef __file_h__ @@ -41,6 +41,9 @@ #include #include /* For open and flags */ #ifdef HAVE_STDINT_H +#ifndef __STDC_LIMIT_MACROS +#define __STDC_LIMIT_MACROS +#endif #include #endif #ifdef HAVE_INTTYPES_H @@ -136,7 +139,7 @@ struct magic { #define NOSPACE 0x10 /* suppress space character before output */ #define BINTEST 0x20 /* test is for a binary type (set only for top-level tests) */ -#define TEXTTEST 0 /* for passing to file_softmagic */ +#define TEXTTEST 0x40 /* for passing to file_softmagic */ uint8_t factor; @@ -271,16 +274,20 @@ struct magic { }; #define BIT(A) (1 << (A)) -#define STRING_COMPACT_BLANK BIT(0) -#define STRING_COMPACT_OPTIONAL_BLANK BIT(1) -#define STRING_IGNORE_LOWERCASE BIT(2) -#define STRING_IGNORE_UPPERCASE BIT(3) -#define REGEX_OFFSET_START BIT(4) -#define CHAR_COMPACT_BLANK 'B' -#define CHAR_COMPACT_OPTIONAL_BLANK 'b' -#define CHAR_IGNORE_LOWERCASE 'c' -#define CHAR_IGNORE_UPPERCASE 'C' -#define CHAR_REGEX_OFFSET_START 's' +#define STRING_COMPACT_WHITESPACE BIT(0) +#define STRING_COMPACT_OPTIONAL_WHITESPACE BIT(1) +#define STRING_IGNORE_LOWERCASE BIT(2) +#define STRING_IGNORE_UPPERCASE BIT(3) +#define REGEX_OFFSET_START BIT(4) +#define STRING_TEXTTEST BIT(5) +#define STRING_BINTEST BIT(6) +#define CHAR_COMPACT_WHITESPACE 'W' +#define CHAR_COMPACT_OPTIONAL_WHITESPACE 'w' +#define CHAR_IGNORE_LOWERCASE 'c' +#define CHAR_IGNORE_UPPERCASE 'C' +#define CHAR_REGEX_OFFSET_START 's' +#define CHAR_TEXTTEST 't' +#define CHAR_BINTEST 'b' #define STRING_IGNORE_CASE (STRING_IGNORE_LOWERCASE|STRING_IGNORE_UPPERCASE) #define STRING_DEFAULT_RANGE 100 @@ -298,7 +305,7 @@ struct mlist { #ifdef __cplusplus #define CAST(T, b) static_cast(b) #else -#define CAST(T, b) (b) +#define CAST(T, b) (T)(b) #endif struct level_info { @@ -434,7 +441,7 @@ size_t strlcat(char *dst, const char *src, size_t siz); #endif #ifndef __cplusplus -#ifdef __GNUC__ +#if defined(__GNUC__) && (__GNUC__ >= 3) #define FILE_RCSID(id) \ static const char rcsid[] __attribute__((__used__)) = id; #else diff --git a/contrib/file/src/fsmagic.c b/contrib/file/src/fsmagic.c index a68cd109f7..537fb14d40 100644 --- a/contrib/file/src/fsmagic.c +++ b/contrib/file/src/fsmagic.c @@ -32,7 +32,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: fsmagic.c,v 1.59 2009/02/03 20:27:51 christos Exp $") +FILE_RCSID("@(#)$File: fsmagic.c,v 1.60 2009/05/08 17:41:59 christos Exp $") #endif /* lint */ #include "magic.h" @@ -106,7 +106,7 @@ file_fsmagic(struct magic_set *ms, const char *fn, struct stat *sb) int mime = ms->flags & MAGIC_MIME; #ifdef S_IFLNK char buf[BUFSIZ+4]; - int nch; + ssize_t nch; struct stat tstatbuf; #endif diff --git a/contrib/file/src/funcs.c b/contrib/file/src/funcs.c index c6f0d09c54..2397417369 100644 --- a/contrib/file/src/funcs.c +++ b/contrib/file/src/funcs.c @@ -27,7 +27,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: funcs.c,v 1.53 2009/04/07 11:07:00 christos Exp $") +FILE_RCSID("@(#)$File: funcs.c,v 1.54 2009/05/08 17:41:59 christos Exp $") #endif /* lint */ #include "magic.h" @@ -95,7 +95,7 @@ file_printf(struct magic_set *ms, const char *fmt, ...) /*VARARGS*/ private void file_error_core(struct magic_set *ms, int error, const char *f, va_list va, - uint32_t lineno) + size_t lineno) { /* Only the first error is ok */ if (ms->event_flags & EVENT_HAD_ERR) @@ -103,7 +103,7 @@ file_error_core(struct magic_set *ms, int error, const char *f, va_list va, if (lineno != 0) { free(ms->o.buf); ms->o.buf = NULL; - file_printf(ms, "line %u: ", lineno); + file_printf(ms, "line %zu: ", lineno); } file_vprintf(ms, f, va); if (error > 0) diff --git a/contrib/file/src/magic.c b/contrib/file/src/magic.c index b89989b338..d49c29a3d8 100644 --- a/contrib/file/src/magic.c +++ b/contrib/file/src/magic.c @@ -28,7 +28,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: magic.c,v 1.62 2009/03/20 21:25:41 christos Exp $") +FILE_RCSID("@(#)$File: magic.c,v 1.65 2009/09/14 17:50:38 christos Exp $") #endif /* lint */ #include "magic.h" @@ -57,8 +57,6 @@ FILE_RCSID("@(#)$File: magic.c,v 1.62 2009/03/20 21:25:41 christos Exp $") #include /* for read() */ #endif -#include /* for byte swapping */ - #include "patchlevel.h" #ifndef PIPE_BUF @@ -74,6 +72,7 @@ private void free_mlist(struct mlist *); private void close_and_restore(const struct magic_set *, const char *, int, const struct stat *); private int unreadable_info(struct magic_set *, mode_t, const char *); +private const char* get_default_magic(void); #ifndef COMPILE_ONLY private const char *file_or_fd(struct magic_set *, const char *, int); #endif @@ -82,13 +81,48 @@ private const char *file_or_fd(struct magic_set *, const char *, int); #define STDIN_FILENO 0 #endif +private const char * +get_default_magic(void) +{ + static const char hmagic[] = "/.magic"; + static char default_magic[2 * MAXPATHLEN + 2]; + char *home; + char hmagicpath[MAXPATHLEN + 1]; + + if ((home = getenv("HOME")) == NULL) + return MAGIC; + + (void)snprintf(hmagicpath, sizeof(hmagicpath), "%s%s", home, hmagic); + + if (access(hmagicpath, R_OK) == -1) + return MAGIC; + + (void)snprintf(default_magic, sizeof(default_magic), "%s:%s", + hmagicpath, MAGIC); + + return default_magic; +} + +public const char * +magic_getpath(const char *magicfile, int action) +{ + if (magicfile != NULL) + return magicfile; + + magicfile = getenv("MAGIC"); + if (magicfile != NULL) + return magicfile; + + return action == FILE_LOAD ? get_default_magic() : MAGIC; +} + public struct magic_set * magic_open(int flags) { struct magic_set *ms; size_t len; - if ((ms = CAST(magic_set *, calloc((size_t)1, + if ((ms = CAST(struct magic_set *, calloc((size_t)1, sizeof(struct magic_set)))) == NULL) return NULL; diff --git a/contrib/file/src/magic.h b/contrib/file/src/magic.h index a664e9aa39..765ff2be35 100644 --- a/contrib/file/src/magic.h +++ b/contrib/file/src/magic.h @@ -69,6 +69,7 @@ typedef struct magic_set *magic_t; magic_t magic_open(int); void magic_close(magic_t); +const char *magic_getpath(const char *, int); const char *magic_file(magic_t, const char *); const char *magic_descriptor(magic_t, int); const char *magic_buffer(magic_t, const void *, size_t); diff --git a/contrib/file/src/patchlevel.h b/contrib/file/src/patchlevel.h index 472cca3ccd..29006b7eaf 100644 --- a/contrib/file/src/patchlevel.h +++ b/contrib/file/src/patchlevel.h @@ -1,11 +1,14 @@ #define FILE_VERSION_MAJOR 5 -#define patchlevel 3 +#define patchlevel 4 /* * Patchlevel file for Ian Darwin's MAGIC command. - * $File: patchlevel.h,v 1.74 2009/05/06 20:32:48 christos Exp $ + * $File: patchlevel.h,v 1.75 2010/01/22 21:08:13 christos Exp $ * * $Log: patchlevel.h,v $ + * Revision 1.75 2010/01/22 21:08:13 christos + * welcome to 5.04 + * * Revision 1.74 2009/05/06 20:32:48 christos * welcome to 5.03 * diff --git a/contrib/file/src/print.c b/contrib/file/src/print.c index d44a5b3b1b..a94881745e 100644 --- a/contrib/file/src/print.c +++ b/contrib/file/src/print.c @@ -32,7 +32,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: print.c,v 1.66 2009/02/03 20:27:51 christos Exp $") +FILE_RCSID("@(#)$File: print.c,v 1.68 2009/11/18 23:35:14 christos Exp $") #endif /* lint */ #include @@ -77,10 +77,10 @@ file_mdump(struct magic *m) if (IS_STRING(m->type)) { if (m->str_flags) { (void) fputc('/', stderr); - if (m->str_flags & STRING_COMPACT_BLANK) - (void) fputc(CHAR_COMPACT_BLANK, stderr); - if (m->str_flags & STRING_COMPACT_OPTIONAL_BLANK) - (void) fputc(CHAR_COMPACT_OPTIONAL_BLANK, + if (m->str_flags & STRING_COMPACT_WHITESPACE) + (void) fputc(CHAR_COMPACT_WHITESPACE, stderr); + if (m->str_flags & STRING_COMPACT_OPTIONAL_WHITESPACE) + (void) fputc(CHAR_COMPACT_OPTIONAL_WHITESPACE, stderr); if (m->str_flags & STRING_IGNORE_LOWERCASE) (void) fputc(CHAR_IGNORE_LOWERCASE, stderr); @@ -198,6 +198,7 @@ file_magwarn(struct magic_set *ms, const char *f, ...) (void) fputc('\n', stderr); } +#ifndef COMPILE_ONLY protected const char * file_fmttime(uint32_t v, int local) { @@ -218,7 +219,7 @@ file_fmttime(uint32_t v, int local) (void)time(&now); tm1 = localtime(&now); if (tm1 == NULL) - return "*Invalid time*"; + goto out; daylight = tm1->tm_isdst; } #endif /* HAVE_TM_ISDST */ @@ -227,10 +228,15 @@ file_fmttime(uint32_t v, int local) t += 3600; tm = gmtime(&t); if (tm == NULL) - return "*Invalid time*"; + goto out; pp = asctime(tm); } + if (pp == NULL) + goto out; pp[strcspn(pp, "\n")] = '\0'; return pp; +out: + return "*Invalid time*"; } +#endif diff --git a/contrib/file/src/readcdf.c b/contrib/file/src/readcdf.c index 15f53fe7a6..52cf579c93 100644 --- a/contrib/file/src/readcdf.c +++ b/contrib/file/src/readcdf.c @@ -26,7 +26,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: readcdf.c,v 1.18 2009/05/06 20:48:22 christos Exp $") +FILE_RCSID("@(#)$File: readcdf.c,v 1.22 2010/01/20 01:36:55 christos Exp $") #endif #include @@ -55,6 +55,8 @@ cdf_file_property_info(struct magic_set *ms, const cdf_property_info_t *info, for (i = 0; i < count; i++) { cdf_print_property_name(buf, sizeof(buf), info[i].pi_id); switch (info[i].pi_type) { + case CDF_NULL: + break; case CDF_SIGNED16: if (NOTMIME(ms) && file_printf(ms, ", %s: %hd", buf, info[i].pi_s16) == -1) @@ -71,22 +73,26 @@ cdf_file_property_info(struct magic_set *ms, const cdf_property_info_t *info, return -1; break; case CDF_LENGTH32_STRING: + case CDF_LENGTH32_WSTRING: len = info[i].pi_str.s_len; if (len > 1) { + char vbuf[1024]; + size_t j, k = 1; + + if (info[i].pi_type == CDF_LENGTH32_WSTRING) + k++; s = info[i].pi_str.s_buf; + for (j = 0; j < sizeof(vbuf) && len--; + j++, s += k) { + if (*s == '\0') + break; + if (isprint((unsigned char)*s)) + vbuf[j] = *s; + } + if (j == sizeof(vbuf)) + --j; + vbuf[j] = '\0'; if (NOTMIME(ms)) { - char vbuf[1024]; - size_t j; - for (j = 0; j < sizeof(vbuf) && len--; - j++, s++) { - if (*s == '\0') - break; - if (isprint((unsigned char)*s)) - vbuf[j] = *s; - } - if (j == sizeof(vbuf)) - --j; - vbuf[j] = '\0'; if (vbuf[0]) { if (file_printf(ms, ", %s: %s", buf, vbuf) == -1) @@ -94,12 +100,15 @@ cdf_file_property_info(struct magic_set *ms, const cdf_property_info_t *info, } } else if (info[i].pi_id == CDF_PROPERTY_NAME_OF_APPLICATION) { - if (strstr(s, "Word")) + if (strstr(vbuf, "Word")) str = "msword"; - else if (strstr(s, "Excel")) + else if (strstr(vbuf, "Excel")) str = "vnd.ms-excel"; - else if (strstr(s, "Powerpoint")) + else if (strstr(vbuf, "Powerpoint")) str = "vnd.ms-powerpoint"; + else if (strstr(vbuf, + "Crystal Reports")) + str = "x-rpt"; } } break; @@ -160,20 +169,20 @@ cdf_file_summary_info(struct magic_set *ms, const cdf_stream_t *sst) switch (si.si_os) { case 2: if (file_printf(ms, ", Os: Windows, Version %d.%d", - si.si_os_version & 0xff, si.si_os_version >> 8) - == -1) + si.si_os_version & 0xff, + (uint32_t)si.si_os_version >> 8) == -1) return -1; break; case 1: if (file_printf(ms, ", Os: MacOS, Version %d.%d", - si.si_os_version >> 8, si.si_os_version & 0xff) - == -1) + (uint32_t)si.si_os_version >> 8, + si.si_os_version & 0xff) == -1) return -1; break; default: if (file_printf(ms, ", Os %d, Version: %d.%d", si.si_os, - si.si_os_version & 0xff, si.si_os_version >> 8) - == -1) + si.si_os_version & 0xff, + (uint32_t)si.si_os_version >> 8) == -1) return -1; break; } @@ -196,6 +205,7 @@ file_trycdf(struct magic_set *ms, int fd, const unsigned char *buf, cdf_dir_t dir; int i; const char *expn = ""; + const char *corrupt = "corrupt: "; info.i_fd = fd; info.i_buf = buf; @@ -239,7 +249,12 @@ file_trycdf(struct magic_set *ms, int fd, const unsigned char *buf, if ((i = cdf_read_summary_info(&info, &h, &sat, &ssat, &sst, &dir, &scn)) == -1) { - expn = "Cannot read summary info"; + if (errno == ESRCH) { + corrupt = expn; + expn = "No summary info"; + } else { + expn = "Cannot read summary info"; + } goto out4; } #ifdef CDF_DEBUG @@ -261,7 +276,7 @@ out0: if (file_printf(ms, "CDF V2 Document") == -1) return -1; if (*expn) - if (file_printf(ms, ", corrupt: %s", expn) == -1) + if (file_printf(ms, ", %s%s", corrupt, expn) == -1) return -1; i = 1; } diff --git a/contrib/file/src/readelf.c b/contrib/file/src/readelf.c index 6f0b328cac..5915569f3f 100644 --- a/contrib/file/src/readelf.c +++ b/contrib/file/src/readelf.c @@ -27,7 +27,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: readelf.c,v 1.81 2008/11/04 16:38:28 christos Exp $") +FILE_RCSID("@(#)$File: readelf.c,v 1.83 2009/05/13 14:43:10 christos Exp $") #endif #ifdef BUILTIN_ELF @@ -909,7 +909,7 @@ doshn(struct magic_set *ms, int clazz, int swap, int fd, off_t off, int num, Elf64_Cap cap64; char cbuf[/*CONSTCOND*/ MAX(sizeof cap32, sizeof cap64)]; - if ((coff += xcap_sizeof) >= (off_t)xsh_size) + if ((coff += xcap_sizeof) > (off_t)xsh_size) break; if (read(fd, cbuf, (size_t)xcap_sizeof) != (ssize_t)xcap_sizeof) { @@ -1019,7 +1019,7 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, const char *linking_style = "statically"; const char *shared_libraries = ""; unsigned char nbuf[BUFSIZ]; - int bufsize; + ssize_t bufsize; size_t offset, align; off_t savedoffset = (off_t)-1; struct stat st; @@ -1074,7 +1074,7 @@ dophn_exec(struct magic_set *ms, int clazz, int swap, int fd, off_t off, shared_libraries = " (uses shared libs)"; break; case PT_NOTE: - if ((align = xph_align) & 0x80000000) { + if ((align = xph_align) & 0x80000000UL) { if (file_printf(ms, ", invalid note alignment 0x%lx", (unsigned long)align) == -1) diff --git a/contrib/file/src/softmagic.c b/contrib/file/src/softmagic.c index 88f5214500..d8a5675317 100644 --- a/contrib/file/src/softmagic.c +++ b/contrib/file/src/softmagic.c @@ -32,7 +32,7 @@ #include "file.h" #ifndef lint -FILE_RCSID("@(#)$File: softmagic.c,v 1.135 2009/03/27 22:42:49 christos Exp $") +FILE_RCSID("@(#)$File: softmagic.c,v 1.138 2009/10/19 13:10:20 christos Exp $") #endif /* lint */ #include "magic.h" @@ -123,7 +123,7 @@ match(struct magic_set *ms, struct magic *magic, uint32_t nmagic, int flush = 0; struct magic *m = &magic[magindex]; - if ((m->flag & BINTEST) != mode) { + if ((m->flag & mode) != mode) { /* Skip sub-tests */ while (magic[magindex + 1].cont_level != 0 && ++magindex < nmagic) @@ -582,23 +582,23 @@ moffset(struct magic_set *ms, struct magic *m) { switch (m->type) { case FILE_BYTE: - return ms->offset + sizeof(char); + return CAST(int32_t, (ms->offset + sizeof(char))); case FILE_SHORT: case FILE_BESHORT: case FILE_LESHORT: - return ms->offset + sizeof(short); + return CAST(int32_t, (ms->offset + sizeof(short))); case FILE_LONG: case FILE_BELONG: case FILE_LELONG: case FILE_MELONG: - return ms->offset + sizeof(int32_t); + return CAST(int32_t, (ms->offset + sizeof(int32_t))); case FILE_QUAD: case FILE_BEQUAD: case FILE_LEQUAD: - return ms->offset + sizeof(int64_t); + return CAST(int32_t, (ms->offset + sizeof(int64_t))); case FILE_STRING: case FILE_PSTRING: @@ -612,7 +612,7 @@ moffset(struct magic_set *ms, struct magic *m) if (*m->value.s == '\0') p->s[strcspn(p->s, "\n")] = '\0'; - t = ms->offset + strlen(p->s); + t = CAST(uint32_t, (ms->offset + strlen(p->s))); if (m->type == FILE_PSTRING) t++; return t; @@ -622,46 +622,46 @@ moffset(struct magic_set *ms, struct magic *m) case FILE_BEDATE: case FILE_LEDATE: case FILE_MEDATE: - return ms->offset + sizeof(time_t); + return CAST(int32_t, (ms->offset + sizeof(time_t))); case FILE_LDATE: case FILE_BELDATE: case FILE_LELDATE: case FILE_MELDATE: - return ms->offset + sizeof(time_t); + return CAST(int32_t, (ms->offset + sizeof(time_t))); case FILE_QDATE: case FILE_BEQDATE: case FILE_LEQDATE: - return ms->offset + sizeof(uint64_t); + return CAST(int32_t, (ms->offset + sizeof(uint64_t))); case FILE_QLDATE: case FILE_BEQLDATE: case FILE_LEQLDATE: - return ms->offset + sizeof(uint64_t); + return CAST(int32_t, (ms->offset + sizeof(uint64_t))); case FILE_FLOAT: case FILE_BEFLOAT: case FILE_LEFLOAT: - return ms->offset + sizeof(float); + return CAST(int32_t, (ms->offset + sizeof(float))); case FILE_DOUBLE: case FILE_BEDOUBLE: case FILE_LEDOUBLE: - return ms->offset + sizeof(double); - break; + return CAST(int32_t, (ms->offset + sizeof(double))); case FILE_REGEX: if ((m->str_flags & REGEX_OFFSET_START) != 0) - return ms->search.offset; + return CAST(int32_t, ms->search.offset); else - return ms->search.offset + ms->search.rm_len; + return CAST(int32_t, (ms->search.offset + + ms->search.rm_len)); case FILE_SEARCH: if ((m->str_flags & REGEX_OFFSET_START) != 0) - return ms->search.offset; + return CAST(int32_t, ms->search.offset); else - return ms->search.offset + m->vallen; + return CAST(int32_t, (ms->search.offset + m->vallen)); case FILE_DEFAULT: return ms->offset; @@ -800,7 +800,7 @@ mconvert(struct magic_set *ms, struct magic *m) } case FILE_PSTRING: { char *ptr1 = p->s, *ptr2 = ptr1 + 1; - size_t len = *p->s; + size_t len = *p->s; if (len >= sizeof(p->s)) len = sizeof(p->s) - 1; while (len--) @@ -945,8 +945,11 @@ mcopy(struct magic_set *ms, union VALUETYPE *p, int type, int indir, buf = (const char *)s + offset; end = last = (const char *)s + nbytes; /* mget() guarantees buf <= last */ - for (lines = linecnt, b = buf; - lines && ((b = memchr(c = b, '\n', end - b)) || (b = memchr(c, '\r', end - c))); + for (lines = linecnt, b = buf; lines && + ((b = CAST(const char *, + memchr(c = b, '\n', CAST(size_t, (end - b))))) + || (b = CAST(const char *, + memchr(c, '\r', CAST(size_t, (end - c)))))); lines--, b++) { last = b; if (b[0] == '\r' && b[1] == '\n') @@ -1633,7 +1636,7 @@ file_strncmp(const char *s1, const char *s2, size_t len, uint32_t flags) if ((v = toupper(*b++) - *a++) != '\0') break; } - else if ((flags & STRING_COMPACT_BLANK) && + else if ((flags & STRING_COMPACT_WHITESPACE) && isspace(*a)) { a++; if (isspace(*b++)) { @@ -1645,7 +1648,7 @@ file_strncmp(const char *s1, const char *s2, size_t len, uint32_t flags) break; } } - else if ((flags & STRING_COMPACT_OPTIONAL_BLANK) && + else if ((flags & STRING_COMPACT_OPTIONAL_WHITESPACE) && isspace(*a)) { a++; while (isspace(*b)) -- 2.41.0 From f1792b378655a2d05b1a82918aeede497c61c9b7 Mon Sep 17 00:00:00 2001 From: Jan Lentfer Date: Mon, 25 Jan 2010 21:44:38 +0100 Subject: [PATCH 04/16] file: updated master to v5.04 --- lib/libmagic/config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/libmagic/config.h b/lib/libmagic/config.h index 705ae07ca6..f12cb81645 100644 --- a/lib/libmagic/config.h +++ b/lib/libmagic/config.h @@ -213,7 +213,7 @@ /* #undef TM_IN_SYS_TIME */ /* Version number of package */ -#define VERSION "5.03" +#define VERSION "5.04" /* Number of bits in a file offset, on hosts where this is settable. */ /* #undef _FILE_OFFSET_BITS */ -- 2.41.0 From 442e7c7667f3cf6e373be0d337bd0bc2936796c4 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Mon, 25 Jan 2010 15:39:37 -0800 Subject: [PATCH 05/16] includes - Shift inclusion of sys/event.h from sys/file.h * sys/file.h was including sys/event.h for struct klist, but only the kernle needs it. Shift the inclusion from outside to inside the _KERNEL conditional. * Should fix the pkgsrc build of databases/db4 and databases/db46. Reported-by: Goetz Isenmann --- sys/sys/file.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sys/sys/file.h b/sys/sys/file.h index 3d55b190dd..d52f0a9625 100644 --- a/sys/sys/file.h +++ b/sys/sys/file.h @@ -47,12 +47,12 @@ #ifndef _SYS_UNISTD_H_ #include #endif -#ifndef _SYS_EVENT_H_ -#include -#endif #if defined(_KERNEL) || defined(_KERNEL_STRUCTURES) +#ifndef _SYS_EVENT_H_ +#include +#endif #ifndef _SYS_QUEUE_H_ #include #endif -- 2.41.0 From a20a6263a628d3f88cde66781f31de5669e26bdf Mon Sep 17 00:00:00 2001 From: Jan Lentfer Date: Mon, 25 Jan 2010 22:38:11 +0100 Subject: [PATCH 06/16] groff: remove version tag from directory --- contrib/{groff-1.19 => groff}/COPYING | 0 contrib/{groff-1.19 => groff}/README | 0 contrib/{groff-1.19 => groff}/README.DELETED | 0 contrib/{groff-1.19 => groff}/README.DRAGONFLY | 0 contrib/{groff-1.19 => groff}/REVISION | 0 contrib/{groff-1.19 => groff}/VERSION | 0 contrib/{groff-1.19 => groff}/contrib/eqn2graph/eqn2graph.man | 0 contrib/{groff-1.19 => groff}/contrib/eqn2graph/eqn2graph.sh | 0 contrib/{groff-1.19 => groff}/contrib/grap2graph/grap2graph.man | 0 contrib/{groff-1.19 => groff}/contrib/grap2graph/grap2graph.sh | 0 contrib/{groff-1.19 => groff}/contrib/groffer/groffer.man | 0 contrib/{groff-1.19 => groff}/contrib/groffer/groffer.sh | 0 contrib/{groff-1.19 => groff}/contrib/groffer/groffer2.sh | 0 contrib/{groff-1.19 => groff}/contrib/mm/groff_mm.man | 0 contrib/{groff-1.19 => groff}/contrib/mm/groff_mmse.man | 0 contrib/{groff-1.19 => groff}/contrib/mm/m.tmac | 0 contrib/{groff-1.19 => groff}/contrib/mm/mm.tmac | 0 contrib/{groff-1.19 => groff}/contrib/mm/mm/0.MT | 0 contrib/{groff-1.19 => groff}/contrib/mm/mm/4.MT | 0 contrib/{groff-1.19 => groff}/contrib/mm/mm/5.MT | 0 contrib/{groff-1.19 => groff}/contrib/mm/mm/ms.cov | 0 contrib/{groff-1.19 => groff}/contrib/mm/mm/se_ms.cov | 0 contrib/{groff-1.19 => groff}/contrib/mm/mmroff.man | 0 contrib/{groff-1.19 => groff}/contrib/mm/mmroff.pl | 0 contrib/{groff-1.19 => groff}/contrib/mm/mmse.tmac | 0 contrib/{groff-1.19 => groff}/contrib/mm/mse.tmac | 0 contrib/{groff-1.19 => groff}/contrib/mom/copyright | 0 contrib/{groff-1.19 => groff}/contrib/mom/groff_mom.man | 0 contrib/{groff-1.19 => groff}/contrib/mom/mom.tmac | 0 contrib/{groff-1.19 => groff}/contrib/mom/om.tmac | 0 contrib/{groff-1.19 => groff}/contrib/pdfmark/cover.ms | 0 contrib/{groff-1.19 => groff}/contrib/pdfmark/pdfmark.ms | 0 contrib/{groff-1.19 => groff}/contrib/pdfmark/pdfmark.tmac | 0 contrib/{groff-1.19 => groff}/contrib/pdfmark/pdfroff.man | 0 contrib/{groff-1.19 => groff}/contrib/pdfmark/pdfroff.sh | 0 contrib/{groff-1.19 => groff}/contrib/pdfmark/spdf.tmac | 0 contrib/{groff-1.19 => groff}/contrib/pic2graph/pic2graph.man | 0 contrib/{groff-1.19 => groff}/contrib/pic2graph/pic2graph.sh | 0 contrib/{groff-1.19 => groff}/doc/fdl.texi | 0 contrib/{groff-1.19 => groff}/doc/groff.texinfo | 0 contrib/{groff-1.19 => groff}/font/devX100-12/CB | 0 contrib/{groff-1.19 => groff}/font/devX100-12/CBI | 0 contrib/{groff-1.19 => groff}/font/devX100-12/CI | 0 contrib/{groff-1.19 => groff}/font/devX100-12/CR | 0 contrib/{groff-1.19 => groff}/font/devX100-12/DESC | 0 contrib/{groff-1.19 => groff}/font/devX100-12/HB | 0 contrib/{groff-1.19 => groff}/font/devX100-12/HBI | 0 contrib/{groff-1.19 => groff}/font/devX100-12/HI | 0 contrib/{groff-1.19 => groff}/font/devX100-12/HR | 0 contrib/{groff-1.19 => groff}/font/devX100-12/Makefile.sub | 0 contrib/{groff-1.19 => groff}/font/devX100-12/NB | 0 contrib/{groff-1.19 => groff}/font/devX100-12/NBI | 0 contrib/{groff-1.19 => groff}/font/devX100-12/NI | 0 contrib/{groff-1.19 => groff}/font/devX100-12/NR | 0 contrib/{groff-1.19 => groff}/font/devX100-12/S | 0 contrib/{groff-1.19 => groff}/font/devX100-12/TB | 0 contrib/{groff-1.19 => groff}/font/devX100-12/TBI | 0 contrib/{groff-1.19 => groff}/font/devX100-12/TI | 0 contrib/{groff-1.19 => groff}/font/devX100-12/TR | 0 contrib/{groff-1.19 => groff}/font/devX100/CB | 0 contrib/{groff-1.19 => groff}/font/devX100/CBI | 0 contrib/{groff-1.19 => groff}/font/devX100/CI | 0 contrib/{groff-1.19 => groff}/font/devX100/CR | 0 contrib/{groff-1.19 => groff}/font/devX100/DESC | 0 contrib/{groff-1.19 => groff}/font/devX100/HB | 0 contrib/{groff-1.19 => groff}/font/devX100/HBI | 0 contrib/{groff-1.19 => groff}/font/devX100/HI | 0 contrib/{groff-1.19 => groff}/font/devX100/HR | 0 contrib/{groff-1.19 => groff}/font/devX100/Makefile.sub | 0 contrib/{groff-1.19 => groff}/font/devX100/NB | 0 contrib/{groff-1.19 => groff}/font/devX100/NBI | 0 contrib/{groff-1.19 => groff}/font/devX100/NI | 0 contrib/{groff-1.19 => groff}/font/devX100/NR | 0 contrib/{groff-1.19 => groff}/font/devX100/S | 0 contrib/{groff-1.19 => groff}/font/devX100/TB | 0 contrib/{groff-1.19 => groff}/font/devX100/TBI | 0 contrib/{groff-1.19 => groff}/font/devX100/TI | 0 contrib/{groff-1.19 => groff}/font/devX100/TR | 0 contrib/{groff-1.19 => groff}/font/devX75-12/CB | 0 contrib/{groff-1.19 => groff}/font/devX75-12/CBI | 0 contrib/{groff-1.19 => groff}/font/devX75-12/CI | 0 contrib/{groff-1.19 => groff}/font/devX75-12/CR | 0 contrib/{groff-1.19 => groff}/font/devX75-12/DESC | 0 contrib/{groff-1.19 => groff}/font/devX75-12/HB | 0 contrib/{groff-1.19 => groff}/font/devX75-12/HBI | 0 contrib/{groff-1.19 => groff}/font/devX75-12/HI | 0 contrib/{groff-1.19 => groff}/font/devX75-12/HR | 0 contrib/{groff-1.19 => groff}/font/devX75-12/Makefile.sub | 0 contrib/{groff-1.19 => groff}/font/devX75-12/NB | 0 contrib/{groff-1.19 => groff}/font/devX75-12/NBI | 0 contrib/{groff-1.19 => groff}/font/devX75-12/NI | 0 contrib/{groff-1.19 => groff}/font/devX75-12/NR | 0 contrib/{groff-1.19 => groff}/font/devX75-12/S | 0 contrib/{groff-1.19 => groff}/font/devX75-12/TB | 0 contrib/{groff-1.19 => groff}/font/devX75-12/TBI | 0 contrib/{groff-1.19 => groff}/font/devX75-12/TI | 0 contrib/{groff-1.19 => groff}/font/devX75-12/TR | 0 contrib/{groff-1.19 => groff}/font/devX75/CB | 0 contrib/{groff-1.19 => groff}/font/devX75/CBI | 0 contrib/{groff-1.19 => groff}/font/devX75/CI | 0 contrib/{groff-1.19 => groff}/font/devX75/CR | 0 contrib/{groff-1.19 => groff}/font/devX75/DESC | 0 contrib/{groff-1.19 => groff}/font/devX75/HB | 0 contrib/{groff-1.19 => groff}/font/devX75/HBI | 0 contrib/{groff-1.19 => groff}/font/devX75/HI | 0 contrib/{groff-1.19 => groff}/font/devX75/HR | 0 contrib/{groff-1.19 => groff}/font/devX75/Makefile.sub | 0 contrib/{groff-1.19 => groff}/font/devX75/NB | 0 contrib/{groff-1.19 => groff}/font/devX75/NBI | 0 contrib/{groff-1.19 => groff}/font/devX75/NI | 0 contrib/{groff-1.19 => groff}/font/devX75/NR | 0 contrib/{groff-1.19 => groff}/font/devX75/S | 0 contrib/{groff-1.19 => groff}/font/devX75/TB | 0 contrib/{groff-1.19 => groff}/font/devX75/TBI | 0 contrib/{groff-1.19 => groff}/font/devX75/TI | 0 contrib/{groff-1.19 => groff}/font/devX75/TR | 0 contrib/{groff-1.19 => groff}/font/devascii/DESC.proto | 0 contrib/{groff-1.19 => groff}/font/devascii/R.proto | 0 contrib/{groff-1.19 => groff}/font/devcp1047/DESC.proto | 0 contrib/{groff-1.19 => groff}/font/devcp1047/R.proto | 0 contrib/{groff-1.19 => groff}/font/devdvi/CW | 0 contrib/{groff-1.19 => groff}/font/devdvi/CWEC | 0 contrib/{groff-1.19 => groff}/font/devdvi/CWI | 0 contrib/{groff-1.19 => groff}/font/devdvi/CWIEC | 0 contrib/{groff-1.19 => groff}/font/devdvi/CWITC | 0 contrib/{groff-1.19 => groff}/font/devdvi/CWTC | 0 contrib/{groff-1.19 => groff}/font/devdvi/DESC.in | 0 contrib/{groff-1.19 => groff}/font/devdvi/EX | 0 contrib/{groff-1.19 => groff}/font/devdvi/HB | 0 contrib/{groff-1.19 => groff}/font/devdvi/HBEC | 0 contrib/{groff-1.19 => groff}/font/devdvi/HBI | 0 contrib/{groff-1.19 => groff}/font/devdvi/HBIEC | 0 contrib/{groff-1.19 => groff}/font/devdvi/HBITC | 0 contrib/{groff-1.19 => groff}/font/devdvi/HBTC | 0 contrib/{groff-1.19 => groff}/font/devdvi/HI | 0 contrib/{groff-1.19 => groff}/font/devdvi/HIEC | 0 contrib/{groff-1.19 => groff}/font/devdvi/HITC | 0 contrib/{groff-1.19 => groff}/font/devdvi/HR | 0 contrib/{groff-1.19 => groff}/font/devdvi/HREC | 0 contrib/{groff-1.19 => groff}/font/devdvi/HRTC | 0 contrib/{groff-1.19 => groff}/font/devdvi/MI | 0 contrib/{groff-1.19 => groff}/font/devdvi/S | 0 contrib/{groff-1.19 => groff}/font/devdvi/SA | 0 contrib/{groff-1.19 => groff}/font/devdvi/SB | 0 contrib/{groff-1.19 => groff}/font/devdvi/SC | 0 contrib/{groff-1.19 => groff}/font/devdvi/TB | 0 contrib/{groff-1.19 => groff}/font/devdvi/TBEC | 0 contrib/{groff-1.19 => groff}/font/devdvi/TBI | 0 contrib/{groff-1.19 => groff}/font/devdvi/TBIEC | 0 contrib/{groff-1.19 => groff}/font/devdvi/TBITC | 0 contrib/{groff-1.19 => groff}/font/devdvi/TBTC | 0 contrib/{groff-1.19 => groff}/font/devdvi/TI | 0 contrib/{groff-1.19 => groff}/font/devdvi/TIEC | 0 contrib/{groff-1.19 => groff}/font/devdvi/TITC | 0 contrib/{groff-1.19 => groff}/font/devdvi/TR | 0 contrib/{groff-1.19 => groff}/font/devdvi/TREC | 0 contrib/{groff-1.19 => groff}/font/devdvi/TRTC | 0 contrib/{groff-1.19 => groff}/font/devdvi/generate/CompileFonts | 0 contrib/{groff-1.19 => groff}/font/devdvi/generate/Makefile | 0 contrib/{groff-1.19 => groff}/font/devdvi/generate/ec.map | 0 contrib/{groff-1.19 => groff}/font/devdvi/generate/msam.map | 0 contrib/{groff-1.19 => groff}/font/devdvi/generate/msbm.map | 0 contrib/{groff-1.19 => groff}/font/devdvi/generate/tc.map | 0 contrib/{groff-1.19 => groff}/font/devdvi/generate/texb.map | 0 contrib/{groff-1.19 => groff}/font/devdvi/generate/texex.map | 0 contrib/{groff-1.19 => groff}/font/devdvi/generate/texi.map | 0 contrib/{groff-1.19 => groff}/font/devdvi/generate/texmi.map | 0 contrib/{groff-1.19 => groff}/font/devdvi/generate/texr.map | 0 contrib/{groff-1.19 => groff}/font/devdvi/generate/texsy.map | 0 contrib/{groff-1.19 => groff}/font/devdvi/generate/textex.map | 0 contrib/{groff-1.19 => groff}/font/devdvi/generate/textt.map | 0 contrib/{groff-1.19 => groff}/font/devhtml/DESC.proto | 0 contrib/{groff-1.19 => groff}/font/devhtml/R.proto | 0 contrib/{groff-1.19 => groff}/font/devlatin1/DESC.proto | 0 contrib/{groff-1.19 => groff}/font/devlatin1/R.proto | 0 contrib/{groff-1.19 => groff}/font/devlbp/CB | 0 contrib/{groff-1.19 => groff}/font/devlbp/CI | 0 contrib/{groff-1.19 => groff}/font/devlbp/CR | 0 contrib/{groff-1.19 => groff}/font/devlbp/DESC.in | 0 contrib/{groff-1.19 => groff}/font/devlbp/EB | 0 contrib/{groff-1.19 => groff}/font/devlbp/EI | 0 contrib/{groff-1.19 => groff}/font/devlbp/ER | 0 contrib/{groff-1.19 => groff}/font/devlbp/HB | 0 contrib/{groff-1.19 => groff}/font/devlbp/HBI | 0 contrib/{groff-1.19 => groff}/font/devlbp/HI | 0 contrib/{groff-1.19 => groff}/font/devlbp/HNB | 0 contrib/{groff-1.19 => groff}/font/devlbp/HNBI | 0 contrib/{groff-1.19 => groff}/font/devlbp/HNI | 0 contrib/{groff-1.19 => groff}/font/devlbp/HNR | 0 contrib/{groff-1.19 => groff}/font/devlbp/HR | 0 contrib/{groff-1.19 => groff}/font/devlbp/TB | 0 contrib/{groff-1.19 => groff}/font/devlbp/TBI | 0 contrib/{groff-1.19 => groff}/font/devlbp/TI | 0 contrib/{groff-1.19 => groff}/font/devlbp/TR | 0 contrib/{groff-1.19 => groff}/font/devlj4/AB | 0 contrib/{groff-1.19 => groff}/font/devlj4/ABI | 0 contrib/{groff-1.19 => groff}/font/devlj4/AI | 0 contrib/{groff-1.19 => groff}/font/devlj4/ALBB | 0 contrib/{groff-1.19 => groff}/font/devlj4/ALBR | 0 contrib/{groff-1.19 => groff}/font/devlj4/AOB | 0 contrib/{groff-1.19 => groff}/font/devlj4/AOI | 0 contrib/{groff-1.19 => groff}/font/devlj4/AOR | 0 contrib/{groff-1.19 => groff}/font/devlj4/AR | 0 contrib/{groff-1.19 => groff}/font/devlj4/CB | 0 contrib/{groff-1.19 => groff}/font/devlj4/CBI | 0 contrib/{groff-1.19 => groff}/font/devlj4/CI | 0 contrib/{groff-1.19 => groff}/font/devlj4/CLARENDON | 0 contrib/{groff-1.19 => groff}/font/devlj4/CORONET | 0 contrib/{groff-1.19 => groff}/font/devlj4/CR | 0 contrib/{groff-1.19 => groff}/font/devlj4/DESC.in | 0 contrib/{groff-1.19 => groff}/font/devlj4/GB | 0 contrib/{groff-1.19 => groff}/font/devlj4/GBI | 0 contrib/{groff-1.19 => groff}/font/devlj4/GI | 0 contrib/{groff-1.19 => groff}/font/devlj4/GR | 0 contrib/{groff-1.19 => groff}/font/devlj4/LGB | 0 contrib/{groff-1.19 => groff}/font/devlj4/LGI | 0 contrib/{groff-1.19 => groff}/font/devlj4/LGR | 0 contrib/{groff-1.19 => groff}/font/devlj4/MARIGOLD | 0 contrib/{groff-1.19 => groff}/font/devlj4/OB | 0 contrib/{groff-1.19 => groff}/font/devlj4/OBI | 0 contrib/{groff-1.19 => groff}/font/devlj4/OI | 0 contrib/{groff-1.19 => groff}/font/devlj4/OR | 0 contrib/{groff-1.19 => groff}/font/devlj4/S | 0 contrib/{groff-1.19 => groff}/font/devlj4/SYMBOL | 0 contrib/{groff-1.19 => groff}/font/devlj4/TB | 0 contrib/{groff-1.19 => groff}/font/devlj4/TBI | 0 contrib/{groff-1.19 => groff}/font/devlj4/TI | 0 contrib/{groff-1.19 => groff}/font/devlj4/TNRB | 0 contrib/{groff-1.19 => groff}/font/devlj4/TNRBI | 0 contrib/{groff-1.19 => groff}/font/devlj4/TNRI | 0 contrib/{groff-1.19 => groff}/font/devlj4/TNRR | 0 contrib/{groff-1.19 => groff}/font/devlj4/TR | 0 contrib/{groff-1.19 => groff}/font/devlj4/UB | 0 contrib/{groff-1.19 => groff}/font/devlj4/UBI | 0 contrib/{groff-1.19 => groff}/font/devlj4/UCB | 0 contrib/{groff-1.19 => groff}/font/devlj4/UCBI | 0 contrib/{groff-1.19 => groff}/font/devlj4/UCI | 0 contrib/{groff-1.19 => groff}/font/devlj4/UCR | 0 contrib/{groff-1.19 => groff}/font/devlj4/UI | 0 contrib/{groff-1.19 => groff}/font/devlj4/UR | 0 contrib/{groff-1.19 => groff}/font/devlj4/WINGDINGS | 0 contrib/{groff-1.19 => groff}/font/devlj4/generate/Makefile | 0 contrib/{groff-1.19 => groff}/font/devlj4/generate/special.awk | 0 contrib/{groff-1.19 => groff}/font/devlj4/generate/special.map | 0 contrib/{groff-1.19 => groff}/font/devlj4/generate/symbol.map | 0 contrib/{groff-1.19 => groff}/font/devlj4/generate/text.map | 0 contrib/{groff-1.19 => groff}/font/devlj4/generate/wingdings.map | 0 contrib/{groff-1.19 => groff}/font/devps/AB | 0 contrib/{groff-1.19 => groff}/font/devps/ABI | 0 contrib/{groff-1.19 => groff}/font/devps/AI | 0 contrib/{groff-1.19 => groff}/font/devps/AR | 0 contrib/{groff-1.19 => groff}/font/devps/BMB | 0 contrib/{groff-1.19 => groff}/font/devps/BMBI | 0 contrib/{groff-1.19 => groff}/font/devps/BMI | 0 contrib/{groff-1.19 => groff}/font/devps/BMR | 0 contrib/{groff-1.19 => groff}/font/devps/CB | 0 contrib/{groff-1.19 => groff}/font/devps/CBI | 0 contrib/{groff-1.19 => groff}/font/devps/CI | 0 contrib/{groff-1.19 => groff}/font/devps/CR | 0 contrib/{groff-1.19 => groff}/font/devps/DESC.in | 0 contrib/{groff-1.19 => groff}/font/devps/EURO | 0 contrib/{groff-1.19 => groff}/font/devps/HB | 0 contrib/{groff-1.19 => groff}/font/devps/HBI | 0 contrib/{groff-1.19 => groff}/font/devps/HI | 0 contrib/{groff-1.19 => groff}/font/devps/HNB | 0 contrib/{groff-1.19 => groff}/font/devps/HNBI | 0 contrib/{groff-1.19 => groff}/font/devps/HNI | 0 contrib/{groff-1.19 => groff}/font/devps/HNR | 0 contrib/{groff-1.19 => groff}/font/devps/HR | 0 contrib/{groff-1.19 => groff}/font/devps/NB | 0 contrib/{groff-1.19 => groff}/font/devps/NBI | 0 contrib/{groff-1.19 => groff}/font/devps/NI | 0 contrib/{groff-1.19 => groff}/font/devps/NR | 0 contrib/{groff-1.19 => groff}/font/devps/PB | 0 contrib/{groff-1.19 => groff}/font/devps/PBI | 0 contrib/{groff-1.19 => groff}/font/devps/PI | 0 contrib/{groff-1.19 => groff}/font/devps/PR | 0 contrib/{groff-1.19 => groff}/font/devps/S | 0 contrib/{groff-1.19 => groff}/font/devps/SS | 0 contrib/{groff-1.19 => groff}/font/devps/TB | 0 contrib/{groff-1.19 => groff}/font/devps/TBI | 0 contrib/{groff-1.19 => groff}/font/devps/TI | 0 contrib/{groff-1.19 => groff}/font/devps/TR | 0 contrib/{groff-1.19 => groff}/font/devps/ZCMI | 0 contrib/{groff-1.19 => groff}/font/devps/ZD | 0 contrib/{groff-1.19 => groff}/font/devps/ZDR | 0 contrib/{groff-1.19 => groff}/font/devps/download | 0 contrib/{groff-1.19 => groff}/font/devps/freeeuro.afm | 0 contrib/{groff-1.19 => groff}/font/devps/freeeuro.pfa | 0 contrib/{groff-1.19 => groff}/font/devps/generate/Makefile | 0 contrib/{groff-1.19 => groff}/font/devps/generate/afmname | 0 contrib/{groff-1.19 => groff}/font/devps/generate/dingbats.map | 0 contrib/{groff-1.19 => groff}/font/devps/generate/dingbats.rmap | 0 contrib/{groff-1.19 => groff}/font/devps/generate/freeeuro.sfd | 0 contrib/{groff-1.19 => groff}/font/devps/generate/lgreekmap | 0 contrib/{groff-1.19 => groff}/font/devps/generate/sfdtopfa.pe | 0 contrib/{groff-1.19 => groff}/font/devps/generate/symbol.sed | 0 contrib/{groff-1.19 => groff}/font/devps/generate/symbolchars | 0 contrib/{groff-1.19 => groff}/font/devps/generate/symbolsl.afm | 0 contrib/{groff-1.19 => groff}/font/devps/generate/textmap | 0 contrib/{groff-1.19 => groff}/font/devps/prologue.ps | 0 contrib/{groff-1.19 => groff}/font/devps/psstrip.sed | 0 contrib/{groff-1.19 => groff}/font/devps/symbol.afm | 0 contrib/{groff-1.19 => groff}/font/devps/symbolmap | 0 contrib/{groff-1.19 => groff}/font/devps/symbolsl.ps | 0 contrib/{groff-1.19 => groff}/font/devps/text.enc | 0 contrib/{groff-1.19 => groff}/font/devps/zapfdr.afm | 0 contrib/{groff-1.19 => groff}/font/devps/zapfdr.ps | 0 contrib/{groff-1.19 => groff}/font/devutf8/DESC.proto | 0 contrib/{groff-1.19 => groff}/font/devutf8/NOTES | 0 contrib/{groff-1.19 => groff}/font/devutf8/R.proto | 0 contrib/{groff-1.19 => groff}/man/ditroff.man | 0 contrib/{groff-1.19 => groff}/man/groff.man | 0 contrib/{groff-1.19 => groff}/man/groff_char.man | 0 contrib/{groff-1.19 => groff}/man/groff_diff.man | 0 contrib/{groff-1.19 => groff}/man/groff_font.man | 0 contrib/{groff-1.19 => groff}/man/groff_out.man | 0 contrib/{groff-1.19 => groff}/man/groff_tmac.man | 0 contrib/{groff-1.19 => groff}/man/roff.man | 0 contrib/{groff-1.19 => groff}/mdate.sh | 0 contrib/{groff-1.19 => groff}/src/devices/grodvi/dvi.cpp | 0 contrib/{groff-1.19 => groff}/src/devices/grodvi/grodvi.man | 0 contrib/{groff-1.19 => groff}/src/devices/grohtml/grohtml.man | 0 contrib/{groff-1.19 => groff}/src/devices/grohtml/html-table.cpp | 0 contrib/{groff-1.19 => groff}/src/devices/grohtml/html-table.h | 0 contrib/{groff-1.19 => groff}/src/devices/grohtml/html-text.cpp | 0 contrib/{groff-1.19 => groff}/src/devices/grohtml/html-text.h | 0 contrib/{groff-1.19 => groff}/src/devices/grohtml/html.h | 0 contrib/{groff-1.19 => groff}/src/devices/grohtml/output.cpp | 0 contrib/{groff-1.19 => groff}/src/devices/grohtml/post-html.cpp | 0 contrib/{groff-1.19 => groff}/src/devices/grolbp/charset.h | 0 contrib/{groff-1.19 => groff}/src/devices/grolbp/grolbp.man | 0 contrib/{groff-1.19 => groff}/src/devices/grolbp/lbp.cpp | 0 contrib/{groff-1.19 => groff}/src/devices/grolbp/lbp.h | 0 contrib/{groff-1.19 => groff}/src/devices/grolj4/grolj4.man | 0 contrib/{groff-1.19 => groff}/src/devices/grolj4/lj4.cpp | 0 contrib/{groff-1.19 => groff}/src/devices/grolj4/lj4_font.man | 0 contrib/{groff-1.19 => groff}/src/devices/grops/grops.man | 0 contrib/{groff-1.19 => groff}/src/devices/grops/ps.cpp | 0 contrib/{groff-1.19 => groff}/src/devices/grops/ps.h | 0 contrib/{groff-1.19 => groff}/src/devices/grops/psfig.diff | 0 contrib/{groff-1.19 => groff}/src/devices/grops/psrm.cpp | 0 contrib/{groff-1.19 => groff}/src/devices/grotty/grotty.man | 0 contrib/{groff-1.19 => groff}/src/devices/grotty/tty.cpp | 0 contrib/{groff-1.19 => groff}/src/include/assert.h | 0 contrib/{groff-1.19 => groff}/src/include/cmap.h | 0 contrib/{groff-1.19 => groff}/src/include/color.h | 0 contrib/{groff-1.19 => groff}/src/include/config.hin | 0 contrib/{groff-1.19 => groff}/src/include/cset.h | 0 contrib/{groff-1.19 => groff}/src/include/device.h | 0 contrib/{groff-1.19 => groff}/src/include/driver.h | 0 contrib/{groff-1.19 => groff}/src/include/errarg.h | 0 contrib/{groff-1.19 => groff}/src/include/error.h | 0 contrib/{groff-1.19 => groff}/src/include/font.h | 0 contrib/{groff-1.19 => groff}/src/include/geometry.h | 0 contrib/{groff-1.19 => groff}/src/include/html-strings.h | 0 contrib/{groff-1.19 => groff}/src/include/htmlhint.h | 0 contrib/{groff-1.19 => groff}/src/include/index.h | 0 contrib/{groff-1.19 => groff}/src/include/lib.h | 0 contrib/{groff-1.19 => groff}/src/include/macropath.h | 0 contrib/{groff-1.19 => groff}/src/include/nonposix.h | 0 contrib/{groff-1.19 => groff}/src/include/paper.h | 0 contrib/{groff-1.19 => groff}/src/include/posix.h | 0 contrib/{groff-1.19 => groff}/src/include/printer.h | 0 contrib/{groff-1.19 => groff}/src/include/ptable.h | 0 contrib/{groff-1.19 => groff}/src/include/refid.h | 0 contrib/{groff-1.19 => groff}/src/include/search.h | 0 contrib/{groff-1.19 => groff}/src/include/searchpath.h | 0 contrib/{groff-1.19 => groff}/src/include/stringclass.h | 0 contrib/{groff-1.19 => groff}/src/include/symbol.h | 0 contrib/{groff-1.19 => groff}/src/include/unicode.h | 0 contrib/{groff-1.19 => groff}/src/libs/libbib/common.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libbib/index.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libbib/linear.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libbib/map.c | 0 contrib/{groff-1.19 => groff}/src/libs/libbib/search.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libdriver/input.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libdriver/printer.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/assert.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/change_lf.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/cmap.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/color.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/cset.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/device.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/errarg.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/error.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/fatal.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/filename.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/font.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/fontfile.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/geometry.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/glyphuni.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/htmlhint.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/hypot.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/iftoa.c | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/invalid.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/itoa.c | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/lf.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/lineno.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/macropath.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/matherr.c | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/maxfilename.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/mksdir.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/nametoindex.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/new.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/paper.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/prime.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/progname.c | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/ptable.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/quotearg.c | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/searchpath.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/spawnvp.c | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/string.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/strsave.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/symbol.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/tmpfile.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/tmpname.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/unicode.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/uniglyph.cpp | 0 contrib/{groff-1.19 => groff}/src/libs/libgroff/uniuni.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/box.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/box.h | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/delim.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/eqn.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/eqn.h | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/eqn.man | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/eqn.y | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/eqn_tab.h | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/lex.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/limit.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/list.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/main.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/mark.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/neqn.man | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/neqn.sh | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/other.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/over.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/pbox.h | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/pile.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/script.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/special.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/sqrt.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/eqn/text.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/grn/gprint.h | 0 contrib/{groff-1.19 => groff}/src/preproc/grn/grn.man | 0 contrib/{groff-1.19 => groff}/src/preproc/grn/hdb.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/grn/hgraph.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/grn/hpoint.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/grn/main.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/html/pre-html.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/html/pre-html.h | 0 contrib/{groff-1.19 => groff}/src/preproc/html/pushback.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/html/pushback.h | 0 contrib/{groff-1.19 => groff}/src/preproc/pic/common.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/pic/common.h | 0 contrib/{groff-1.19 => groff}/src/preproc/pic/lex.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/pic/main.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/pic/object.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/pic/object.h | 0 contrib/{groff-1.19 => groff}/src/preproc/pic/output.h | 0 contrib/{groff-1.19 => groff}/src/preproc/pic/pic.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/pic/pic.h | 0 contrib/{groff-1.19 => groff}/src/preproc/pic/pic.man | 0 contrib/{groff-1.19 => groff}/src/preproc/pic/pic.y | 0 contrib/{groff-1.19 => groff}/src/preproc/pic/pic_tab.h | 0 contrib/{groff-1.19 => groff}/src/preproc/pic/position.h | 0 contrib/{groff-1.19 => groff}/src/preproc/pic/tex.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/pic/text.h | 0 contrib/{groff-1.19 => groff}/src/preproc/pic/troff.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/refer/command.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/refer/command.h | 0 contrib/{groff-1.19 => groff}/src/preproc/refer/label.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/refer/label.y | 0 contrib/{groff-1.19 => groff}/src/preproc/refer/ref.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/refer/ref.h | 0 contrib/{groff-1.19 => groff}/src/preproc/refer/refer.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/refer/refer.h | 0 contrib/{groff-1.19 => groff}/src/preproc/refer/refer.man | 0 contrib/{groff-1.19 => groff}/src/preproc/refer/token.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/refer/token.h | 0 contrib/{groff-1.19 => groff}/src/preproc/soelim/soelim.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/soelim/soelim.man | 0 contrib/{groff-1.19 => groff}/src/preproc/tbl/main.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/tbl/table.cpp | 0 contrib/{groff-1.19 => groff}/src/preproc/tbl/table.h | 0 contrib/{groff-1.19 => groff}/src/preproc/tbl/tbl.man | 0 contrib/{groff-1.19 => groff}/src/roff/groff/groff.cpp | 0 contrib/{groff-1.19 => groff}/src/roff/groff/groff.man | 0 contrib/{groff-1.19 => groff}/src/roff/groff/pipeline.c | 0 contrib/{groff-1.19 => groff}/src/roff/groff/pipeline.h | 0 contrib/{groff-1.19 => groff}/src/roff/grog/grog.man | 0 contrib/{groff-1.19 => groff}/src/roff/grog/grog.pl | 0 contrib/{groff-1.19 => groff}/src/roff/grog/grog.sh | 0 contrib/{groff-1.19 => groff}/src/roff/nroff/nroff.man | 0 contrib/{groff-1.19 => groff}/src/roff/nroff/nroff.sh | 0 contrib/{groff-1.19 => groff}/src/roff/troff/charinfo.h | 0 contrib/{groff-1.19 => groff}/src/roff/troff/column.cpp | 0 contrib/{groff-1.19 => groff}/src/roff/troff/dictionary.cpp | 0 contrib/{groff-1.19 => groff}/src/roff/troff/dictionary.h | 0 contrib/{groff-1.19 => groff}/src/roff/troff/div.cpp | 0 contrib/{groff-1.19 => groff}/src/roff/troff/div.h | 0 contrib/{groff-1.19 => groff}/src/roff/troff/env.cpp | 0 contrib/{groff-1.19 => groff}/src/roff/troff/env.h | 0 contrib/{groff-1.19 => groff}/src/roff/troff/hvunits.h | 0 contrib/{groff-1.19 => groff}/src/roff/troff/input.cpp | 0 contrib/{groff-1.19 => groff}/src/roff/troff/input.h | 0 contrib/{groff-1.19 => groff}/src/roff/troff/mtsm.cpp | 0 contrib/{groff-1.19 => groff}/src/roff/troff/mtsm.h | 0 contrib/{groff-1.19 => groff}/src/roff/troff/node.cpp | 0 contrib/{groff-1.19 => groff}/src/roff/troff/node.h | 0 contrib/{groff-1.19 => groff}/src/roff/troff/number.cpp | 0 contrib/{groff-1.19 => groff}/src/roff/troff/reg.cpp | 0 contrib/{groff-1.19 => groff}/src/roff/troff/reg.h | 0 contrib/{groff-1.19 => groff}/src/roff/troff/request.h | 0 contrib/{groff-1.19 => groff}/src/roff/troff/token.h | 0 contrib/{groff-1.19 => groff}/src/roff/troff/troff.h | 0 contrib/{groff-1.19 => groff}/src/roff/troff/troff.man | 0 contrib/{groff-1.19 => groff}/src/utils/addftinfo/addftinfo.cpp | 0 contrib/{groff-1.19 => groff}/src/utils/addftinfo/addftinfo.man | 0 contrib/{groff-1.19 => groff}/src/utils/addftinfo/guess.cpp | 0 contrib/{groff-1.19 => groff}/src/utils/addftinfo/guess.h | 0 contrib/{groff-1.19 => groff}/src/utils/afmtodit/afmtodit.man | 0 contrib/{groff-1.19 => groff}/src/utils/afmtodit/afmtodit.pl | 0 contrib/{groff-1.19 => groff}/src/utils/hpftodit/hpftodit.cpp | 0 contrib/{groff-1.19 => groff}/src/utils/hpftodit/hpftodit.man | 0 contrib/{groff-1.19 => groff}/src/utils/hpftodit/hpuni.cpp | 0 contrib/{groff-1.19 => groff}/src/utils/indxbib/eign | 0 contrib/{groff-1.19 => groff}/src/utils/indxbib/indxbib.cpp | 0 contrib/{groff-1.19 => groff}/src/utils/indxbib/indxbib.man | 0 contrib/{groff-1.19 => groff}/src/utils/indxbib/signal.c | 0 contrib/{groff-1.19 => groff}/src/utils/lkbib/lkbib.cpp | 0 contrib/{groff-1.19 => groff}/src/utils/lkbib/lkbib.man | 0 contrib/{groff-1.19 => groff}/src/utils/lookbib/lookbib.cpp | 0 contrib/{groff-1.19 => groff}/src/utils/lookbib/lookbib.man | 0 contrib/{groff-1.19 => groff}/src/utils/pfbtops/pfbtops.c | 0 contrib/{groff-1.19 => groff}/src/utils/pfbtops/pfbtops.man | 0 contrib/{groff-1.19 => groff}/src/utils/tfmtodit/tfmtodit.cpp | 0 contrib/{groff-1.19 => groff}/src/utils/tfmtodit/tfmtodit.man | 0 contrib/{groff-1.19 => groff}/tmac/README | 0 contrib/{groff-1.19 => groff}/tmac/X.tmac | 0 contrib/{groff-1.19 => groff}/tmac/Xps.tmac | 0 contrib/{groff-1.19 => groff}/tmac/a4.tmac | 0 contrib/{groff-1.19 => groff}/tmac/an-old.tmac | 0 contrib/{groff-1.19 => groff}/tmac/an.tmac | 0 contrib/{groff-1.19 => groff}/tmac/andoc.tmac | 0 contrib/{groff-1.19 => groff}/tmac/composite.tmac | 0 contrib/{groff-1.19 => groff}/tmac/cp1047.tmac | 0 contrib/{groff-1.19 => groff}/tmac/devtag.tmac | 0 contrib/{groff-1.19 => groff}/tmac/doc-common | 0 contrib/{groff-1.19 => groff}/tmac/doc-ditroff | 0 contrib/{groff-1.19 => groff}/tmac/doc-nroff | 0 contrib/{groff-1.19 => groff}/tmac/doc-old.tmac | 0 contrib/{groff-1.19 => groff}/tmac/doc-syms | 0 contrib/{groff-1.19 => groff}/tmac/doc.tmac | 0 contrib/{groff-1.19 => groff}/tmac/dvi.tmac | 0 contrib/{groff-1.19 => groff}/tmac/e.tmac | 0 contrib/{groff-1.19 => groff}/tmac/ec.tmac | 0 contrib/{groff-1.19 => groff}/tmac/eqnrc | 0 contrib/{groff-1.19 => groff}/tmac/europs.tmac | 0 contrib/{groff-1.19 => groff}/tmac/fixmacros.sed | 0 contrib/{groff-1.19 => groff}/tmac/groff_man.man | 0 contrib/{groff-1.19 => groff}/tmac/groff_mdoc.man | 0 contrib/{groff-1.19 => groff}/tmac/groff_me.man | 0 contrib/{groff-1.19 => groff}/tmac/groff_ms.man | 0 contrib/{groff-1.19 => groff}/tmac/groff_trace.man | 0 contrib/{groff-1.19 => groff}/tmac/groff_www.man | 0 contrib/{groff-1.19 => groff}/tmac/html-end.tmac | 0 contrib/{groff-1.19 => groff}/tmac/html.tmac | 0 contrib/{groff-1.19 => groff}/tmac/hyphen.us | 0 contrib/{groff-1.19 => groff}/tmac/hyphenex.pl | 0 contrib/{groff-1.19 => groff}/tmac/hyphenex.us | 0 contrib/{groff-1.19 => groff}/tmac/latin1.tmac | 0 contrib/{groff-1.19 => groff}/tmac/latin2.tmac | 0 contrib/{groff-1.19 => groff}/tmac/latin5.tmac | 0 contrib/{groff-1.19 => groff}/tmac/latin9.tmac | 0 contrib/{groff-1.19 => groff}/tmac/lbp.tmac | 0 contrib/{groff-1.19 => groff}/tmac/lj4.tmac | 0 contrib/{groff-1.19 => groff}/tmac/man.local | 0 contrib/{groff-1.19 => groff}/tmac/man.tmac | 0 contrib/{groff-1.19 => groff}/tmac/man.ultrix | 0 contrib/{groff-1.19 => groff}/tmac/mandoc.tmac | 0 contrib/{groff-1.19 => groff}/tmac/mdoc.tmac | 0 contrib/{groff-1.19 => groff}/tmac/me.tmac | 0 contrib/{groff-1.19 => groff}/tmac/ms.tmac | 0 contrib/{groff-1.19 => groff}/tmac/papersize.tmac | 0 contrib/{groff-1.19 => groff}/tmac/pic.tmac | 0 contrib/{groff-1.19 => groff}/tmac/ps.tmac | 0 contrib/{groff-1.19 => groff}/tmac/psatk.tmac | 0 contrib/{groff-1.19 => groff}/tmac/psfig.tmac | 0 contrib/{groff-1.19 => groff}/tmac/psold.tmac | 0 contrib/{groff-1.19 => groff}/tmac/pspic.tmac | 0 contrib/{groff-1.19 => groff}/tmac/s.tmac | 0 contrib/{groff-1.19 => groff}/tmac/safer.tmac | 0 contrib/{groff-1.19 => groff}/tmac/strip.sed | 0 contrib/{groff-1.19 => groff}/tmac/trace.tmac | 0 contrib/{groff-1.19 => groff}/tmac/troffrc | 0 contrib/{groff-1.19 => groff}/tmac/troffrc-end | 0 contrib/{groff-1.19 => groff}/tmac/tty-char.tmac | 0 contrib/{groff-1.19 => groff}/tmac/tty.tmac | 0 contrib/{groff-1.19 => groff}/tmac/unicode.tmac | 0 contrib/{groff-1.19 => groff}/tmac/www.tmac | 0 601 files changed, 0 insertions(+), 0 deletions(-) rename contrib/{groff-1.19 => groff}/COPYING (100%) rename contrib/{groff-1.19 => groff}/README (100%) rename contrib/{groff-1.19 => groff}/README.DELETED (100%) rename contrib/{groff-1.19 => groff}/README.DRAGONFLY (100%) rename contrib/{groff-1.19 => groff}/REVISION (100%) rename contrib/{groff-1.19 => groff}/VERSION (100%) rename contrib/{groff-1.19 => groff}/contrib/eqn2graph/eqn2graph.man (100%) rename contrib/{groff-1.19 => groff}/contrib/eqn2graph/eqn2graph.sh (100%) rename contrib/{groff-1.19 => groff}/contrib/grap2graph/grap2graph.man (100%) rename contrib/{groff-1.19 => groff}/contrib/grap2graph/grap2graph.sh (100%) rename contrib/{groff-1.19 => groff}/contrib/groffer/groffer.man (100%) rename contrib/{groff-1.19 => groff}/contrib/groffer/groffer.sh (100%) rename contrib/{groff-1.19 => groff}/contrib/groffer/groffer2.sh (100%) rename contrib/{groff-1.19 => groff}/contrib/mm/groff_mm.man (100%) rename contrib/{groff-1.19 => groff}/contrib/mm/groff_mmse.man (100%) rename contrib/{groff-1.19 => groff}/contrib/mm/m.tmac (100%) rename contrib/{groff-1.19 => groff}/contrib/mm/mm.tmac (100%) rename contrib/{groff-1.19 => groff}/contrib/mm/mm/0.MT (100%) rename contrib/{groff-1.19 => groff}/contrib/mm/mm/4.MT (100%) rename contrib/{groff-1.19 => groff}/contrib/mm/mm/5.MT (100%) rename contrib/{groff-1.19 => groff}/contrib/mm/mm/ms.cov (100%) rename contrib/{groff-1.19 => groff}/contrib/mm/mm/se_ms.cov (100%) rename contrib/{groff-1.19 => groff}/contrib/mm/mmroff.man (100%) rename contrib/{groff-1.19 => groff}/contrib/mm/mmroff.pl (100%) rename contrib/{groff-1.19 => groff}/contrib/mm/mmse.tmac (100%) rename contrib/{groff-1.19 => groff}/contrib/mm/mse.tmac (100%) rename contrib/{groff-1.19 => groff}/contrib/mom/copyright (100%) rename contrib/{groff-1.19 => groff}/contrib/mom/groff_mom.man (100%) rename contrib/{groff-1.19 => groff}/contrib/mom/mom.tmac (100%) rename contrib/{groff-1.19 => groff}/contrib/mom/om.tmac (100%) rename contrib/{groff-1.19 => groff}/contrib/pdfmark/cover.ms (100%) rename contrib/{groff-1.19 => groff}/contrib/pdfmark/pdfmark.ms (100%) rename contrib/{groff-1.19 => groff}/contrib/pdfmark/pdfmark.tmac (100%) rename contrib/{groff-1.19 => groff}/contrib/pdfmark/pdfroff.man (100%) rename contrib/{groff-1.19 => groff}/contrib/pdfmark/pdfroff.sh (100%) rename contrib/{groff-1.19 => groff}/contrib/pdfmark/spdf.tmac (100%) rename contrib/{groff-1.19 => groff}/contrib/pic2graph/pic2graph.man (100%) rename contrib/{groff-1.19 => groff}/contrib/pic2graph/pic2graph.sh (100%) rename contrib/{groff-1.19 => groff}/doc/fdl.texi (100%) rename contrib/{groff-1.19 => groff}/doc/groff.texinfo (100%) rename contrib/{groff-1.19 => groff}/font/devX100-12/CB (100%) rename contrib/{groff-1.19 => groff}/font/devX100-12/CBI (100%) rename contrib/{groff-1.19 => groff}/font/devX100-12/CI (100%) rename contrib/{groff-1.19 => groff}/font/devX100-12/CR (100%) rename contrib/{groff-1.19 => groff}/font/devX100-12/DESC (100%) rename contrib/{groff-1.19 => groff}/font/devX100-12/HB (100%) rename contrib/{groff-1.19 => groff}/font/devX100-12/HBI (100%) rename contrib/{groff-1.19 => groff}/font/devX100-12/HI (100%) rename contrib/{groff-1.19 => groff}/font/devX100-12/HR (100%) rename contrib/{groff-1.19 => groff}/font/devX100-12/Makefile.sub (100%) rename contrib/{groff-1.19 => groff}/font/devX100-12/NB (100%) rename contrib/{groff-1.19 => groff}/font/devX100-12/NBI (100%) rename contrib/{groff-1.19 => groff}/font/devX100-12/NI (100%) rename contrib/{groff-1.19 => groff}/font/devX100-12/NR (100%) rename contrib/{groff-1.19 => groff}/font/devX100-12/S (100%) rename contrib/{groff-1.19 => groff}/font/devX100-12/TB (100%) rename contrib/{groff-1.19 => groff}/font/devX100-12/TBI (100%) rename contrib/{groff-1.19 => groff}/font/devX100-12/TI (100%) rename contrib/{groff-1.19 => groff}/font/devX100-12/TR (100%) rename contrib/{groff-1.19 => groff}/font/devX100/CB (100%) rename contrib/{groff-1.19 => groff}/font/devX100/CBI (100%) rename contrib/{groff-1.19 => groff}/font/devX100/CI (100%) rename contrib/{groff-1.19 => groff}/font/devX100/CR (100%) rename contrib/{groff-1.19 => groff}/font/devX100/DESC (100%) rename contrib/{groff-1.19 => groff}/font/devX100/HB (100%) rename contrib/{groff-1.19 => groff}/font/devX100/HBI (100%) rename contrib/{groff-1.19 => groff}/font/devX100/HI (100%) rename contrib/{groff-1.19 => groff}/font/devX100/HR (100%) rename contrib/{groff-1.19 => groff}/font/devX100/Makefile.sub (100%) rename contrib/{groff-1.19 => groff}/font/devX100/NB (100%) rename contrib/{groff-1.19 => groff}/font/devX100/NBI (100%) rename contrib/{groff-1.19 => groff}/font/devX100/NI (100%) rename contrib/{groff-1.19 => groff}/font/devX100/NR (100%) rename contrib/{groff-1.19 => groff}/font/devX100/S (100%) rename contrib/{groff-1.19 => groff}/font/devX100/TB (100%) rename contrib/{groff-1.19 => groff}/font/devX100/TBI (100%) rename contrib/{groff-1.19 => groff}/font/devX100/TI (100%) rename contrib/{groff-1.19 => groff}/font/devX100/TR (100%) rename contrib/{groff-1.19 => groff}/font/devX75-12/CB (100%) rename contrib/{groff-1.19 => groff}/font/devX75-12/CBI (100%) rename contrib/{groff-1.19 => groff}/font/devX75-12/CI (100%) rename contrib/{groff-1.19 => groff}/font/devX75-12/CR (100%) rename contrib/{groff-1.19 => groff}/font/devX75-12/DESC (100%) rename contrib/{groff-1.19 => groff}/font/devX75-12/HB (100%) rename contrib/{groff-1.19 => groff}/font/devX75-12/HBI (100%) rename contrib/{groff-1.19 => groff}/font/devX75-12/HI (100%) rename contrib/{groff-1.19 => groff}/font/devX75-12/HR (100%) rename contrib/{groff-1.19 => groff}/font/devX75-12/Makefile.sub (100%) rename contrib/{groff-1.19 => groff}/font/devX75-12/NB (100%) rename contrib/{groff-1.19 => groff}/font/devX75-12/NBI (100%) rename contrib/{groff-1.19 => groff}/font/devX75-12/NI (100%) rename contrib/{groff-1.19 => groff}/font/devX75-12/NR (100%) rename contrib/{groff-1.19 => groff}/font/devX75-12/S (100%) rename contrib/{groff-1.19 => groff}/font/devX75-12/TB (100%) rename contrib/{groff-1.19 => groff}/font/devX75-12/TBI (100%) rename contrib/{groff-1.19 => groff}/font/devX75-12/TI (100%) rename contrib/{groff-1.19 => groff}/font/devX75-12/TR (100%) rename contrib/{groff-1.19 => groff}/font/devX75/CB (100%) rename contrib/{groff-1.19 => groff}/font/devX75/CBI (100%) rename contrib/{groff-1.19 => groff}/font/devX75/CI (100%) rename contrib/{groff-1.19 => groff}/font/devX75/CR (100%) rename contrib/{groff-1.19 => groff}/font/devX75/DESC (100%) rename contrib/{groff-1.19 => groff}/font/devX75/HB (100%) rename contrib/{groff-1.19 => groff}/font/devX75/HBI (100%) rename contrib/{groff-1.19 => groff}/font/devX75/HI (100%) rename contrib/{groff-1.19 => groff}/font/devX75/HR (100%) rename contrib/{groff-1.19 => groff}/font/devX75/Makefile.sub (100%) rename contrib/{groff-1.19 => groff}/font/devX75/NB (100%) rename contrib/{groff-1.19 => groff}/font/devX75/NBI (100%) rename contrib/{groff-1.19 => groff}/font/devX75/NI (100%) rename contrib/{groff-1.19 => groff}/font/devX75/NR (100%) rename contrib/{groff-1.19 => groff}/font/devX75/S (100%) rename contrib/{groff-1.19 => groff}/font/devX75/TB (100%) rename contrib/{groff-1.19 => groff}/font/devX75/TBI (100%) rename contrib/{groff-1.19 => groff}/font/devX75/TI (100%) rename contrib/{groff-1.19 => groff}/font/devX75/TR (100%) rename contrib/{groff-1.19 => groff}/font/devascii/DESC.proto (100%) rename contrib/{groff-1.19 => groff}/font/devascii/R.proto (100%) rename contrib/{groff-1.19 => groff}/font/devcp1047/DESC.proto (100%) rename contrib/{groff-1.19 => groff}/font/devcp1047/R.proto (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/CW (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/CWEC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/CWI (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/CWIEC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/CWITC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/CWTC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/DESC.in (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/EX (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/HB (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/HBEC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/HBI (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/HBIEC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/HBITC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/HBTC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/HI (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/HIEC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/HITC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/HR (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/HREC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/HRTC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/MI (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/S (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/SA (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/SB (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/SC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/TB (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/TBEC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/TBI (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/TBIEC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/TBITC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/TBTC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/TI (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/TIEC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/TITC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/TR (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/TREC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/TRTC (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/generate/CompileFonts (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/generate/Makefile (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/generate/ec.map (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/generate/msam.map (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/generate/msbm.map (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/generate/tc.map (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/generate/texb.map (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/generate/texex.map (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/generate/texi.map (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/generate/texmi.map (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/generate/texr.map (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/generate/texsy.map (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/generate/textex.map (100%) rename contrib/{groff-1.19 => groff}/font/devdvi/generate/textt.map (100%) rename contrib/{groff-1.19 => groff}/font/devhtml/DESC.proto (100%) rename contrib/{groff-1.19 => groff}/font/devhtml/R.proto (100%) rename contrib/{groff-1.19 => groff}/font/devlatin1/DESC.proto (100%) rename contrib/{groff-1.19 => groff}/font/devlatin1/R.proto (100%) rename contrib/{groff-1.19 => groff}/font/devlbp/CB (100%) rename contrib/{groff-1.19 => groff}/font/devlbp/CI (100%) rename contrib/{groff-1.19 => groff}/font/devlbp/CR (100%) rename contrib/{groff-1.19 => groff}/font/devlbp/DESC.in (100%) rename contrib/{groff-1.19 => groff}/font/devlbp/EB (100%) rename contrib/{groff-1.19 => groff}/font/devlbp/EI (100%) rename contrib/{groff-1.19 => groff}/font/devlbp/ER (100%) rename contrib/{groff-1.19 => groff}/font/devlbp/HB (100%) rename contrib/{groff-1.19 => groff}/font/devlbp/HBI (100%) rename contrib/{groff-1.19 => groff}/font/devlbp/HI (100%) rename contrib/{groff-1.19 => groff}/font/devlbp/HNB (100%) rename contrib/{groff-1.19 => groff}/font/devlbp/HNBI (100%) rename contrib/{groff-1.19 => groff}/font/devlbp/HNI (100%) rename contrib/{groff-1.19 => groff}/font/devlbp/HNR (100%) rename contrib/{groff-1.19 => groff}/font/devlbp/HR (100%) rename contrib/{groff-1.19 => groff}/font/devlbp/TB (100%) rename contrib/{groff-1.19 => groff}/font/devlbp/TBI (100%) rename contrib/{groff-1.19 => groff}/font/devlbp/TI (100%) rename contrib/{groff-1.19 => groff}/font/devlbp/TR (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/AB (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/ABI (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/AI (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/ALBB (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/ALBR (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/AOB (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/AOI (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/AOR (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/AR (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/CB (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/CBI (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/CI (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/CLARENDON (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/CORONET (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/CR (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/DESC.in (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/GB (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/GBI (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/GI (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/GR (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/LGB (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/LGI (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/LGR (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/MARIGOLD (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/OB (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/OBI (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/OI (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/OR (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/S (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/SYMBOL (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/TB (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/TBI (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/TI (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/TNRB (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/TNRBI (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/TNRI (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/TNRR (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/TR (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/UB (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/UBI (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/UCB (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/UCBI (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/UCI (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/UCR (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/UI (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/UR (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/WINGDINGS (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/generate/Makefile (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/generate/special.awk (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/generate/special.map (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/generate/symbol.map (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/generate/text.map (100%) rename contrib/{groff-1.19 => groff}/font/devlj4/generate/wingdings.map (100%) rename contrib/{groff-1.19 => groff}/font/devps/AB (100%) rename contrib/{groff-1.19 => groff}/font/devps/ABI (100%) rename contrib/{groff-1.19 => groff}/font/devps/AI (100%) rename contrib/{groff-1.19 => groff}/font/devps/AR (100%) rename contrib/{groff-1.19 => groff}/font/devps/BMB (100%) rename contrib/{groff-1.19 => groff}/font/devps/BMBI (100%) rename contrib/{groff-1.19 => groff}/font/devps/BMI (100%) rename contrib/{groff-1.19 => groff}/font/devps/BMR (100%) rename contrib/{groff-1.19 => groff}/font/devps/CB (100%) rename contrib/{groff-1.19 => groff}/font/devps/CBI (100%) rename contrib/{groff-1.19 => groff}/font/devps/CI (100%) rename contrib/{groff-1.19 => groff}/font/devps/CR (100%) rename contrib/{groff-1.19 => groff}/font/devps/DESC.in (100%) rename contrib/{groff-1.19 => groff}/font/devps/EURO (100%) rename contrib/{groff-1.19 => groff}/font/devps/HB (100%) rename contrib/{groff-1.19 => groff}/font/devps/HBI (100%) rename contrib/{groff-1.19 => groff}/font/devps/HI (100%) rename contrib/{groff-1.19 => groff}/font/devps/HNB (100%) rename contrib/{groff-1.19 => groff}/font/devps/HNBI (100%) rename contrib/{groff-1.19 => groff}/font/devps/HNI (100%) rename contrib/{groff-1.19 => groff}/font/devps/HNR (100%) rename contrib/{groff-1.19 => groff}/font/devps/HR (100%) rename contrib/{groff-1.19 => groff}/font/devps/NB (100%) rename contrib/{groff-1.19 => groff}/font/devps/NBI (100%) rename contrib/{groff-1.19 => groff}/font/devps/NI (100%) rename contrib/{groff-1.19 => groff}/font/devps/NR (100%) rename contrib/{groff-1.19 => groff}/font/devps/PB (100%) rename contrib/{groff-1.19 => groff}/font/devps/PBI (100%) rename contrib/{groff-1.19 => groff}/font/devps/PI (100%) rename contrib/{groff-1.19 => groff}/font/devps/PR (100%) rename contrib/{groff-1.19 => groff}/font/devps/S (100%) rename contrib/{groff-1.19 => groff}/font/devps/SS (100%) rename contrib/{groff-1.19 => groff}/font/devps/TB (100%) rename contrib/{groff-1.19 => groff}/font/devps/TBI (100%) rename contrib/{groff-1.19 => groff}/font/devps/TI (100%) rename contrib/{groff-1.19 => groff}/font/devps/TR (100%) rename contrib/{groff-1.19 => groff}/font/devps/ZCMI (100%) rename contrib/{groff-1.19 => groff}/font/devps/ZD (100%) rename contrib/{groff-1.19 => groff}/font/devps/ZDR (100%) rename contrib/{groff-1.19 => groff}/font/devps/download (100%) rename contrib/{groff-1.19 => groff}/font/devps/freeeuro.afm (100%) rename contrib/{groff-1.19 => groff}/font/devps/freeeuro.pfa (100%) rename contrib/{groff-1.19 => groff}/font/devps/generate/Makefile (100%) rename contrib/{groff-1.19 => groff}/font/devps/generate/afmname (100%) rename contrib/{groff-1.19 => groff}/font/devps/generate/dingbats.map (100%) rename contrib/{groff-1.19 => groff}/font/devps/generate/dingbats.rmap (100%) rename contrib/{groff-1.19 => groff}/font/devps/generate/freeeuro.sfd (100%) rename contrib/{groff-1.19 => groff}/font/devps/generate/lgreekmap (100%) rename contrib/{groff-1.19 => groff}/font/devps/generate/sfdtopfa.pe (100%) rename contrib/{groff-1.19 => groff}/font/devps/generate/symbol.sed (100%) rename contrib/{groff-1.19 => groff}/font/devps/generate/symbolchars (100%) rename contrib/{groff-1.19 => groff}/font/devps/generate/symbolsl.afm (100%) rename contrib/{groff-1.19 => groff}/font/devps/generate/textmap (100%) rename contrib/{groff-1.19 => groff}/font/devps/prologue.ps (100%) rename contrib/{groff-1.19 => groff}/font/devps/psstrip.sed (100%) rename contrib/{groff-1.19 => groff}/font/devps/symbol.afm (100%) rename contrib/{groff-1.19 => groff}/font/devps/symbolmap (100%) rename contrib/{groff-1.19 => groff}/font/devps/symbolsl.ps (100%) rename contrib/{groff-1.19 => groff}/font/devps/text.enc (100%) rename contrib/{groff-1.19 => groff}/font/devps/zapfdr.afm (100%) rename contrib/{groff-1.19 => groff}/font/devps/zapfdr.ps (100%) rename contrib/{groff-1.19 => groff}/font/devutf8/DESC.proto (100%) rename contrib/{groff-1.19 => groff}/font/devutf8/NOTES (100%) rename contrib/{groff-1.19 => groff}/font/devutf8/R.proto (100%) rename contrib/{groff-1.19 => groff}/man/ditroff.man (100%) rename contrib/{groff-1.19 => groff}/man/groff.man (100%) rename contrib/{groff-1.19 => groff}/man/groff_char.man (100%) rename contrib/{groff-1.19 => groff}/man/groff_diff.man (100%) rename contrib/{groff-1.19 => groff}/man/groff_font.man (100%) rename contrib/{groff-1.19 => groff}/man/groff_out.man (100%) rename contrib/{groff-1.19 => groff}/man/groff_tmac.man (100%) rename contrib/{groff-1.19 => groff}/man/roff.man (100%) rename contrib/{groff-1.19 => groff}/mdate.sh (100%) rename contrib/{groff-1.19 => groff}/src/devices/grodvi/dvi.cpp (100%) rename contrib/{groff-1.19 => groff}/src/devices/grodvi/grodvi.man (100%) rename contrib/{groff-1.19 => groff}/src/devices/grohtml/grohtml.man (100%) rename contrib/{groff-1.19 => groff}/src/devices/grohtml/html-table.cpp (100%) rename contrib/{groff-1.19 => groff}/src/devices/grohtml/html-table.h (100%) rename contrib/{groff-1.19 => groff}/src/devices/grohtml/html-text.cpp (100%) rename contrib/{groff-1.19 => groff}/src/devices/grohtml/html-text.h (100%) rename contrib/{groff-1.19 => groff}/src/devices/grohtml/html.h (100%) rename contrib/{groff-1.19 => groff}/src/devices/grohtml/output.cpp (100%) rename contrib/{groff-1.19 => groff}/src/devices/grohtml/post-html.cpp (100%) rename contrib/{groff-1.19 => groff}/src/devices/grolbp/charset.h (100%) rename contrib/{groff-1.19 => groff}/src/devices/grolbp/grolbp.man (100%) rename contrib/{groff-1.19 => groff}/src/devices/grolbp/lbp.cpp (100%) rename contrib/{groff-1.19 => groff}/src/devices/grolbp/lbp.h (100%) rename contrib/{groff-1.19 => groff}/src/devices/grolj4/grolj4.man (100%) rename contrib/{groff-1.19 => groff}/src/devices/grolj4/lj4.cpp (100%) rename contrib/{groff-1.19 => groff}/src/devices/grolj4/lj4_font.man (100%) rename contrib/{groff-1.19 => groff}/src/devices/grops/grops.man (100%) rename contrib/{groff-1.19 => groff}/src/devices/grops/ps.cpp (100%) rename contrib/{groff-1.19 => groff}/src/devices/grops/ps.h (100%) rename contrib/{groff-1.19 => groff}/src/devices/grops/psfig.diff (100%) rename contrib/{groff-1.19 => groff}/src/devices/grops/psrm.cpp (100%) rename contrib/{groff-1.19 => groff}/src/devices/grotty/grotty.man (100%) rename contrib/{groff-1.19 => groff}/src/devices/grotty/tty.cpp (100%) rename contrib/{groff-1.19 => groff}/src/include/assert.h (100%) rename contrib/{groff-1.19 => groff}/src/include/cmap.h (100%) rename contrib/{groff-1.19 => groff}/src/include/color.h (100%) rename contrib/{groff-1.19 => groff}/src/include/config.hin (100%) rename contrib/{groff-1.19 => groff}/src/include/cset.h (100%) rename contrib/{groff-1.19 => groff}/src/include/device.h (100%) rename contrib/{groff-1.19 => groff}/src/include/driver.h (100%) rename contrib/{groff-1.19 => groff}/src/include/errarg.h (100%) rename contrib/{groff-1.19 => groff}/src/include/error.h (100%) rename contrib/{groff-1.19 => groff}/src/include/font.h (100%) rename contrib/{groff-1.19 => groff}/src/include/geometry.h (100%) rename contrib/{groff-1.19 => groff}/src/include/html-strings.h (100%) rename contrib/{groff-1.19 => groff}/src/include/htmlhint.h (100%) rename contrib/{groff-1.19 => groff}/src/include/index.h (100%) rename contrib/{groff-1.19 => groff}/src/include/lib.h (100%) rename contrib/{groff-1.19 => groff}/src/include/macropath.h (100%) rename contrib/{groff-1.19 => groff}/src/include/nonposix.h (100%) rename contrib/{groff-1.19 => groff}/src/include/paper.h (100%) rename contrib/{groff-1.19 => groff}/src/include/posix.h (100%) rename contrib/{groff-1.19 => groff}/src/include/printer.h (100%) rename contrib/{groff-1.19 => groff}/src/include/ptable.h (100%) rename contrib/{groff-1.19 => groff}/src/include/refid.h (100%) rename contrib/{groff-1.19 => groff}/src/include/search.h (100%) rename contrib/{groff-1.19 => groff}/src/include/searchpath.h (100%) rename contrib/{groff-1.19 => groff}/src/include/stringclass.h (100%) rename contrib/{groff-1.19 => groff}/src/include/symbol.h (100%) rename contrib/{groff-1.19 => groff}/src/include/unicode.h (100%) rename contrib/{groff-1.19 => groff}/src/libs/libbib/common.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libbib/index.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libbib/linear.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libbib/map.c (100%) rename contrib/{groff-1.19 => groff}/src/libs/libbib/search.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libdriver/input.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libdriver/printer.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/assert.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/change_lf.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/cmap.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/color.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/cset.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/device.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/errarg.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/error.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/fatal.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/filename.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/font.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/fontfile.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/geometry.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/glyphuni.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/htmlhint.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/hypot.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/iftoa.c (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/invalid.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/itoa.c (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/lf.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/lineno.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/macropath.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/matherr.c (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/maxfilename.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/mksdir.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/nametoindex.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/new.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/paper.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/prime.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/progname.c (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/ptable.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/quotearg.c (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/searchpath.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/spawnvp.c (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/string.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/strsave.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/symbol.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/tmpfile.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/tmpname.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/unicode.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/uniglyph.cpp (100%) rename contrib/{groff-1.19 => groff}/src/libs/libgroff/uniuni.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/box.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/box.h (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/delim.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/eqn.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/eqn.h (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/eqn.man (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/eqn.y (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/eqn_tab.h (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/lex.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/limit.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/list.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/main.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/mark.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/neqn.man (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/neqn.sh (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/other.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/over.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/pbox.h (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/pile.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/script.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/special.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/sqrt.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/eqn/text.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/grn/gprint.h (100%) rename contrib/{groff-1.19 => groff}/src/preproc/grn/grn.man (100%) rename contrib/{groff-1.19 => groff}/src/preproc/grn/hdb.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/grn/hgraph.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/grn/hpoint.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/grn/main.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/html/pre-html.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/html/pre-html.h (100%) rename contrib/{groff-1.19 => groff}/src/preproc/html/pushback.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/html/pushback.h (100%) rename contrib/{groff-1.19 => groff}/src/preproc/pic/common.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/pic/common.h (100%) rename contrib/{groff-1.19 => groff}/src/preproc/pic/lex.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/pic/main.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/pic/object.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/pic/object.h (100%) rename contrib/{groff-1.19 => groff}/src/preproc/pic/output.h (100%) rename contrib/{groff-1.19 => groff}/src/preproc/pic/pic.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/pic/pic.h (100%) rename contrib/{groff-1.19 => groff}/src/preproc/pic/pic.man (100%) rename contrib/{groff-1.19 => groff}/src/preproc/pic/pic.y (100%) rename contrib/{groff-1.19 => groff}/src/preproc/pic/pic_tab.h (100%) rename contrib/{groff-1.19 => groff}/src/preproc/pic/position.h (100%) rename contrib/{groff-1.19 => groff}/src/preproc/pic/tex.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/pic/text.h (100%) rename contrib/{groff-1.19 => groff}/src/preproc/pic/troff.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/refer/command.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/refer/command.h (100%) rename contrib/{groff-1.19 => groff}/src/preproc/refer/label.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/refer/label.y (100%) rename contrib/{groff-1.19 => groff}/src/preproc/refer/ref.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/refer/ref.h (100%) rename contrib/{groff-1.19 => groff}/src/preproc/refer/refer.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/refer/refer.h (100%) rename contrib/{groff-1.19 => groff}/src/preproc/refer/refer.man (100%) rename contrib/{groff-1.19 => groff}/src/preproc/refer/token.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/refer/token.h (100%) rename contrib/{groff-1.19 => groff}/src/preproc/soelim/soelim.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/soelim/soelim.man (100%) rename contrib/{groff-1.19 => groff}/src/preproc/tbl/main.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/tbl/table.cpp (100%) rename contrib/{groff-1.19 => groff}/src/preproc/tbl/table.h (100%) rename contrib/{groff-1.19 => groff}/src/preproc/tbl/tbl.man (100%) rename contrib/{groff-1.19 => groff}/src/roff/groff/groff.cpp (100%) rename contrib/{groff-1.19 => groff}/src/roff/groff/groff.man (100%) rename contrib/{groff-1.19 => groff}/src/roff/groff/pipeline.c (100%) rename contrib/{groff-1.19 => groff}/src/roff/groff/pipeline.h (100%) rename contrib/{groff-1.19 => groff}/src/roff/grog/grog.man (100%) rename contrib/{groff-1.19 => groff}/src/roff/grog/grog.pl (100%) rename contrib/{groff-1.19 => groff}/src/roff/grog/grog.sh (100%) rename contrib/{groff-1.19 => groff}/src/roff/nroff/nroff.man (100%) rename contrib/{groff-1.19 => groff}/src/roff/nroff/nroff.sh (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/charinfo.h (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/column.cpp (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/dictionary.cpp (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/dictionary.h (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/div.cpp (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/div.h (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/env.cpp (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/env.h (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/hvunits.h (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/input.cpp (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/input.h (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/mtsm.cpp (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/mtsm.h (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/node.cpp (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/node.h (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/number.cpp (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/reg.cpp (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/reg.h (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/request.h (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/token.h (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/troff.h (100%) rename contrib/{groff-1.19 => groff}/src/roff/troff/troff.man (100%) rename contrib/{groff-1.19 => groff}/src/utils/addftinfo/addftinfo.cpp (100%) rename contrib/{groff-1.19 => groff}/src/utils/addftinfo/addftinfo.man (100%) rename contrib/{groff-1.19 => groff}/src/utils/addftinfo/guess.cpp (100%) rename contrib/{groff-1.19 => groff}/src/utils/addftinfo/guess.h (100%) rename contrib/{groff-1.19 => groff}/src/utils/afmtodit/afmtodit.man (100%) rename contrib/{groff-1.19 => groff}/src/utils/afmtodit/afmtodit.pl (100%) rename contrib/{groff-1.19 => groff}/src/utils/hpftodit/hpftodit.cpp (100%) rename contrib/{groff-1.19 => groff}/src/utils/hpftodit/hpftodit.man (100%) rename contrib/{groff-1.19 => groff}/src/utils/hpftodit/hpuni.cpp (100%) rename contrib/{groff-1.19 => groff}/src/utils/indxbib/eign (100%) rename contrib/{groff-1.19 => groff}/src/utils/indxbib/indxbib.cpp (100%) rename contrib/{groff-1.19 => groff}/src/utils/indxbib/indxbib.man (100%) rename contrib/{groff-1.19 => groff}/src/utils/indxbib/signal.c (100%) rename contrib/{groff-1.19 => groff}/src/utils/lkbib/lkbib.cpp (100%) rename contrib/{groff-1.19 => groff}/src/utils/lkbib/lkbib.man (100%) rename contrib/{groff-1.19 => groff}/src/utils/lookbib/lookbib.cpp (100%) rename contrib/{groff-1.19 => groff}/src/utils/lookbib/lookbib.man (100%) rename contrib/{groff-1.19 => groff}/src/utils/pfbtops/pfbtops.c (100%) rename contrib/{groff-1.19 => groff}/src/utils/pfbtops/pfbtops.man (100%) rename contrib/{groff-1.19 => groff}/src/utils/tfmtodit/tfmtodit.cpp (100%) rename contrib/{groff-1.19 => groff}/src/utils/tfmtodit/tfmtodit.man (100%) rename contrib/{groff-1.19 => groff}/tmac/README (100%) rename contrib/{groff-1.19 => groff}/tmac/X.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/Xps.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/a4.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/an-old.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/an.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/andoc.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/composite.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/cp1047.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/devtag.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/doc-common (100%) rename contrib/{groff-1.19 => groff}/tmac/doc-ditroff (100%) rename contrib/{groff-1.19 => groff}/tmac/doc-nroff (100%) rename contrib/{groff-1.19 => groff}/tmac/doc-old.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/doc-syms (100%) rename contrib/{groff-1.19 => groff}/tmac/doc.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/dvi.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/e.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/ec.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/eqnrc (100%) rename contrib/{groff-1.19 => groff}/tmac/europs.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/fixmacros.sed (100%) rename contrib/{groff-1.19 => groff}/tmac/groff_man.man (100%) rename contrib/{groff-1.19 => groff}/tmac/groff_mdoc.man (100%) rename contrib/{groff-1.19 => groff}/tmac/groff_me.man (100%) rename contrib/{groff-1.19 => groff}/tmac/groff_ms.man (100%) rename contrib/{groff-1.19 => groff}/tmac/groff_trace.man (100%) rename contrib/{groff-1.19 => groff}/tmac/groff_www.man (100%) rename contrib/{groff-1.19 => groff}/tmac/html-end.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/html.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/hyphen.us (100%) rename contrib/{groff-1.19 => groff}/tmac/hyphenex.pl (100%) rename contrib/{groff-1.19 => groff}/tmac/hyphenex.us (100%) rename contrib/{groff-1.19 => groff}/tmac/latin1.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/latin2.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/latin5.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/latin9.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/lbp.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/lj4.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/man.local (100%) rename contrib/{groff-1.19 => groff}/tmac/man.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/man.ultrix (100%) rename contrib/{groff-1.19 => groff}/tmac/mandoc.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/mdoc.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/me.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/ms.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/papersize.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/pic.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/ps.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/psatk.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/psfig.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/psold.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/pspic.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/s.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/safer.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/strip.sed (100%) rename contrib/{groff-1.19 => groff}/tmac/trace.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/troffrc (100%) rename contrib/{groff-1.19 => groff}/tmac/troffrc-end (100%) rename contrib/{groff-1.19 => groff}/tmac/tty-char.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/tty.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/unicode.tmac (100%) rename contrib/{groff-1.19 => groff}/tmac/www.tmac (100%) diff --git a/contrib/groff-1.19/COPYING b/contrib/groff/COPYING similarity index 100% rename from contrib/groff-1.19/COPYING rename to contrib/groff/COPYING diff --git a/contrib/groff-1.19/README b/contrib/groff/README similarity index 100% rename from contrib/groff-1.19/README rename to contrib/groff/README diff --git a/contrib/groff-1.19/README.DELETED b/contrib/groff/README.DELETED similarity index 100% rename from contrib/groff-1.19/README.DELETED rename to contrib/groff/README.DELETED diff --git a/contrib/groff-1.19/README.DRAGONFLY b/contrib/groff/README.DRAGONFLY similarity index 100% rename from contrib/groff-1.19/README.DRAGONFLY rename to contrib/groff/README.DRAGONFLY diff --git a/contrib/groff-1.19/REVISION b/contrib/groff/REVISION similarity index 100% rename from contrib/groff-1.19/REVISION rename to contrib/groff/REVISION diff --git a/contrib/groff-1.19/VERSION b/contrib/groff/VERSION similarity index 100% rename from contrib/groff-1.19/VERSION rename to contrib/groff/VERSION diff --git a/contrib/groff-1.19/contrib/eqn2graph/eqn2graph.man b/contrib/groff/contrib/eqn2graph/eqn2graph.man similarity index 100% rename from contrib/groff-1.19/contrib/eqn2graph/eqn2graph.man rename to contrib/groff/contrib/eqn2graph/eqn2graph.man diff --git a/contrib/groff-1.19/contrib/eqn2graph/eqn2graph.sh b/contrib/groff/contrib/eqn2graph/eqn2graph.sh similarity index 100% rename from contrib/groff-1.19/contrib/eqn2graph/eqn2graph.sh rename to contrib/groff/contrib/eqn2graph/eqn2graph.sh diff --git a/contrib/groff-1.19/contrib/grap2graph/grap2graph.man b/contrib/groff/contrib/grap2graph/grap2graph.man similarity index 100% rename from contrib/groff-1.19/contrib/grap2graph/grap2graph.man rename to contrib/groff/contrib/grap2graph/grap2graph.man diff --git a/contrib/groff-1.19/contrib/grap2graph/grap2graph.sh b/contrib/groff/contrib/grap2graph/grap2graph.sh similarity index 100% rename from contrib/groff-1.19/contrib/grap2graph/grap2graph.sh rename to contrib/groff/contrib/grap2graph/grap2graph.sh diff --git a/contrib/groff-1.19/contrib/groffer/groffer.man b/contrib/groff/contrib/groffer/groffer.man similarity index 100% rename from contrib/groff-1.19/contrib/groffer/groffer.man rename to contrib/groff/contrib/groffer/groffer.man diff --git a/contrib/groff-1.19/contrib/groffer/groffer.sh b/contrib/groff/contrib/groffer/groffer.sh similarity index 100% rename from contrib/groff-1.19/contrib/groffer/groffer.sh rename to contrib/groff/contrib/groffer/groffer.sh diff --git a/contrib/groff-1.19/contrib/groffer/groffer2.sh b/contrib/groff/contrib/groffer/groffer2.sh similarity index 100% rename from contrib/groff-1.19/contrib/groffer/groffer2.sh rename to contrib/groff/contrib/groffer/groffer2.sh diff --git a/contrib/groff-1.19/contrib/mm/groff_mm.man b/contrib/groff/contrib/mm/groff_mm.man similarity index 100% rename from contrib/groff-1.19/contrib/mm/groff_mm.man rename to contrib/groff/contrib/mm/groff_mm.man diff --git a/contrib/groff-1.19/contrib/mm/groff_mmse.man b/contrib/groff/contrib/mm/groff_mmse.man similarity index 100% rename from contrib/groff-1.19/contrib/mm/groff_mmse.man rename to contrib/groff/contrib/mm/groff_mmse.man diff --git a/contrib/groff-1.19/contrib/mm/m.tmac b/contrib/groff/contrib/mm/m.tmac similarity index 100% rename from contrib/groff-1.19/contrib/mm/m.tmac rename to contrib/groff/contrib/mm/m.tmac diff --git a/contrib/groff-1.19/contrib/mm/mm.tmac b/contrib/groff/contrib/mm/mm.tmac similarity index 100% rename from contrib/groff-1.19/contrib/mm/mm.tmac rename to contrib/groff/contrib/mm/mm.tmac diff --git a/contrib/groff-1.19/contrib/mm/mm/0.MT b/contrib/groff/contrib/mm/mm/0.MT similarity index 100% rename from contrib/groff-1.19/contrib/mm/mm/0.MT rename to contrib/groff/contrib/mm/mm/0.MT diff --git a/contrib/groff-1.19/contrib/mm/mm/4.MT b/contrib/groff/contrib/mm/mm/4.MT similarity index 100% rename from contrib/groff-1.19/contrib/mm/mm/4.MT rename to contrib/groff/contrib/mm/mm/4.MT diff --git a/contrib/groff-1.19/contrib/mm/mm/5.MT b/contrib/groff/contrib/mm/mm/5.MT similarity index 100% rename from contrib/groff-1.19/contrib/mm/mm/5.MT rename to contrib/groff/contrib/mm/mm/5.MT diff --git a/contrib/groff-1.19/contrib/mm/mm/ms.cov b/contrib/groff/contrib/mm/mm/ms.cov similarity index 100% rename from contrib/groff-1.19/contrib/mm/mm/ms.cov rename to contrib/groff/contrib/mm/mm/ms.cov diff --git a/contrib/groff-1.19/contrib/mm/mm/se_ms.cov b/contrib/groff/contrib/mm/mm/se_ms.cov similarity index 100% rename from contrib/groff-1.19/contrib/mm/mm/se_ms.cov rename to contrib/groff/contrib/mm/mm/se_ms.cov diff --git a/contrib/groff-1.19/contrib/mm/mmroff.man b/contrib/groff/contrib/mm/mmroff.man similarity index 100% rename from contrib/groff-1.19/contrib/mm/mmroff.man rename to contrib/groff/contrib/mm/mmroff.man diff --git a/contrib/groff-1.19/contrib/mm/mmroff.pl b/contrib/groff/contrib/mm/mmroff.pl similarity index 100% rename from contrib/groff-1.19/contrib/mm/mmroff.pl rename to contrib/groff/contrib/mm/mmroff.pl diff --git a/contrib/groff-1.19/contrib/mm/mmse.tmac b/contrib/groff/contrib/mm/mmse.tmac similarity index 100% rename from contrib/groff-1.19/contrib/mm/mmse.tmac rename to contrib/groff/contrib/mm/mmse.tmac diff --git a/contrib/groff-1.19/contrib/mm/mse.tmac b/contrib/groff/contrib/mm/mse.tmac similarity index 100% rename from contrib/groff-1.19/contrib/mm/mse.tmac rename to contrib/groff/contrib/mm/mse.tmac diff --git a/contrib/groff-1.19/contrib/mom/copyright b/contrib/groff/contrib/mom/copyright similarity index 100% rename from contrib/groff-1.19/contrib/mom/copyright rename to contrib/groff/contrib/mom/copyright diff --git a/contrib/groff-1.19/contrib/mom/groff_mom.man b/contrib/groff/contrib/mom/groff_mom.man similarity index 100% rename from contrib/groff-1.19/contrib/mom/groff_mom.man rename to contrib/groff/contrib/mom/groff_mom.man diff --git a/contrib/groff-1.19/contrib/mom/mom.tmac b/contrib/groff/contrib/mom/mom.tmac similarity index 100% rename from contrib/groff-1.19/contrib/mom/mom.tmac rename to contrib/groff/contrib/mom/mom.tmac diff --git a/contrib/groff-1.19/contrib/mom/om.tmac b/contrib/groff/contrib/mom/om.tmac similarity index 100% rename from contrib/groff-1.19/contrib/mom/om.tmac rename to contrib/groff/contrib/mom/om.tmac diff --git a/contrib/groff-1.19/contrib/pdfmark/cover.ms b/contrib/groff/contrib/pdfmark/cover.ms similarity index 100% rename from contrib/groff-1.19/contrib/pdfmark/cover.ms rename to contrib/groff/contrib/pdfmark/cover.ms diff --git a/contrib/groff-1.19/contrib/pdfmark/pdfmark.ms b/contrib/groff/contrib/pdfmark/pdfmark.ms similarity index 100% rename from contrib/groff-1.19/contrib/pdfmark/pdfmark.ms rename to contrib/groff/contrib/pdfmark/pdfmark.ms diff --git a/contrib/groff-1.19/contrib/pdfmark/pdfmark.tmac b/contrib/groff/contrib/pdfmark/pdfmark.tmac similarity index 100% rename from contrib/groff-1.19/contrib/pdfmark/pdfmark.tmac rename to contrib/groff/contrib/pdfmark/pdfmark.tmac diff --git a/contrib/groff-1.19/contrib/pdfmark/pdfroff.man b/contrib/groff/contrib/pdfmark/pdfroff.man similarity index 100% rename from contrib/groff-1.19/contrib/pdfmark/pdfroff.man rename to contrib/groff/contrib/pdfmark/pdfroff.man diff --git a/contrib/groff-1.19/contrib/pdfmark/pdfroff.sh b/contrib/groff/contrib/pdfmark/pdfroff.sh similarity index 100% rename from contrib/groff-1.19/contrib/pdfmark/pdfroff.sh rename to contrib/groff/contrib/pdfmark/pdfroff.sh diff --git a/contrib/groff-1.19/contrib/pdfmark/spdf.tmac b/contrib/groff/contrib/pdfmark/spdf.tmac similarity index 100% rename from contrib/groff-1.19/contrib/pdfmark/spdf.tmac rename to contrib/groff/contrib/pdfmark/spdf.tmac diff --git a/contrib/groff-1.19/contrib/pic2graph/pic2graph.man b/contrib/groff/contrib/pic2graph/pic2graph.man similarity index 100% rename from contrib/groff-1.19/contrib/pic2graph/pic2graph.man rename to contrib/groff/contrib/pic2graph/pic2graph.man diff --git a/contrib/groff-1.19/contrib/pic2graph/pic2graph.sh b/contrib/groff/contrib/pic2graph/pic2graph.sh similarity index 100% rename from contrib/groff-1.19/contrib/pic2graph/pic2graph.sh rename to contrib/groff/contrib/pic2graph/pic2graph.sh diff --git a/contrib/groff-1.19/doc/fdl.texi b/contrib/groff/doc/fdl.texi similarity index 100% rename from contrib/groff-1.19/doc/fdl.texi rename to contrib/groff/doc/fdl.texi diff --git a/contrib/groff-1.19/doc/groff.texinfo b/contrib/groff/doc/groff.texinfo similarity index 100% rename from contrib/groff-1.19/doc/groff.texinfo rename to contrib/groff/doc/groff.texinfo diff --git a/contrib/groff-1.19/font/devX100-12/CB b/contrib/groff/font/devX100-12/CB similarity index 100% rename from contrib/groff-1.19/font/devX100-12/CB rename to contrib/groff/font/devX100-12/CB diff --git a/contrib/groff-1.19/font/devX100-12/CBI b/contrib/groff/font/devX100-12/CBI similarity index 100% rename from contrib/groff-1.19/font/devX100-12/CBI rename to contrib/groff/font/devX100-12/CBI diff --git a/contrib/groff-1.19/font/devX100-12/CI b/contrib/groff/font/devX100-12/CI similarity index 100% rename from contrib/groff-1.19/font/devX100-12/CI rename to contrib/groff/font/devX100-12/CI diff --git a/contrib/groff-1.19/font/devX100-12/CR b/contrib/groff/font/devX100-12/CR similarity index 100% rename from contrib/groff-1.19/font/devX100-12/CR rename to contrib/groff/font/devX100-12/CR diff --git a/contrib/groff-1.19/font/devX100-12/DESC b/contrib/groff/font/devX100-12/DESC similarity index 100% rename from contrib/groff-1.19/font/devX100-12/DESC rename to contrib/groff/font/devX100-12/DESC diff --git a/contrib/groff-1.19/font/devX100-12/HB b/contrib/groff/font/devX100-12/HB similarity index 100% rename from contrib/groff-1.19/font/devX100-12/HB rename to contrib/groff/font/devX100-12/HB diff --git a/contrib/groff-1.19/font/devX100-12/HBI b/contrib/groff/font/devX100-12/HBI similarity index 100% rename from contrib/groff-1.19/font/devX100-12/HBI rename to contrib/groff/font/devX100-12/HBI diff --git a/contrib/groff-1.19/font/devX100-12/HI b/contrib/groff/font/devX100-12/HI similarity index 100% rename from contrib/groff-1.19/font/devX100-12/HI rename to contrib/groff/font/devX100-12/HI diff --git a/contrib/groff-1.19/font/devX100-12/HR b/contrib/groff/font/devX100-12/HR similarity index 100% rename from contrib/groff-1.19/font/devX100-12/HR rename to contrib/groff/font/devX100-12/HR diff --git a/contrib/groff-1.19/font/devX100-12/Makefile.sub b/contrib/groff/font/devX100-12/Makefile.sub similarity index 100% rename from contrib/groff-1.19/font/devX100-12/Makefile.sub rename to contrib/groff/font/devX100-12/Makefile.sub diff --git a/contrib/groff-1.19/font/devX100-12/NB b/contrib/groff/font/devX100-12/NB similarity index 100% rename from contrib/groff-1.19/font/devX100-12/NB rename to contrib/groff/font/devX100-12/NB diff --git a/contrib/groff-1.19/font/devX100-12/NBI b/contrib/groff/font/devX100-12/NBI similarity index 100% rename from contrib/groff-1.19/font/devX100-12/NBI rename to contrib/groff/font/devX100-12/NBI diff --git a/contrib/groff-1.19/font/devX100-12/NI b/contrib/groff/font/devX100-12/NI similarity index 100% rename from contrib/groff-1.19/font/devX100-12/NI rename to contrib/groff/font/devX100-12/NI diff --git a/contrib/groff-1.19/font/devX100-12/NR b/contrib/groff/font/devX100-12/NR similarity index 100% rename from contrib/groff-1.19/font/devX100-12/NR rename to contrib/groff/font/devX100-12/NR diff --git a/contrib/groff-1.19/font/devX100-12/S b/contrib/groff/font/devX100-12/S similarity index 100% rename from contrib/groff-1.19/font/devX100-12/S rename to contrib/groff/font/devX100-12/S diff --git a/contrib/groff-1.19/font/devX100-12/TB b/contrib/groff/font/devX100-12/TB similarity index 100% rename from contrib/groff-1.19/font/devX100-12/TB rename to contrib/groff/font/devX100-12/TB diff --git a/contrib/groff-1.19/font/devX100-12/TBI b/contrib/groff/font/devX100-12/TBI similarity index 100% rename from contrib/groff-1.19/font/devX100-12/TBI rename to contrib/groff/font/devX100-12/TBI diff --git a/contrib/groff-1.19/font/devX100-12/TI b/contrib/groff/font/devX100-12/TI similarity index 100% rename from contrib/groff-1.19/font/devX100-12/TI rename to contrib/groff/font/devX100-12/TI diff --git a/contrib/groff-1.19/font/devX100-12/TR b/contrib/groff/font/devX100-12/TR similarity index 100% rename from contrib/groff-1.19/font/devX100-12/TR rename to contrib/groff/font/devX100-12/TR diff --git a/contrib/groff-1.19/font/devX100/CB b/contrib/groff/font/devX100/CB similarity index 100% rename from contrib/groff-1.19/font/devX100/CB rename to contrib/groff/font/devX100/CB diff --git a/contrib/groff-1.19/font/devX100/CBI b/contrib/groff/font/devX100/CBI similarity index 100% rename from contrib/groff-1.19/font/devX100/CBI rename to contrib/groff/font/devX100/CBI diff --git a/contrib/groff-1.19/font/devX100/CI b/contrib/groff/font/devX100/CI similarity index 100% rename from contrib/groff-1.19/font/devX100/CI rename to contrib/groff/font/devX100/CI diff --git a/contrib/groff-1.19/font/devX100/CR b/contrib/groff/font/devX100/CR similarity index 100% rename from contrib/groff-1.19/font/devX100/CR rename to contrib/groff/font/devX100/CR diff --git a/contrib/groff-1.19/font/devX100/DESC b/contrib/groff/font/devX100/DESC similarity index 100% rename from contrib/groff-1.19/font/devX100/DESC rename to contrib/groff/font/devX100/DESC diff --git a/contrib/groff-1.19/font/devX100/HB b/contrib/groff/font/devX100/HB similarity index 100% rename from contrib/groff-1.19/font/devX100/HB rename to contrib/groff/font/devX100/HB diff --git a/contrib/groff-1.19/font/devX100/HBI b/contrib/groff/font/devX100/HBI similarity index 100% rename from contrib/groff-1.19/font/devX100/HBI rename to contrib/groff/font/devX100/HBI diff --git a/contrib/groff-1.19/font/devX100/HI b/contrib/groff/font/devX100/HI similarity index 100% rename from contrib/groff-1.19/font/devX100/HI rename to contrib/groff/font/devX100/HI diff --git a/contrib/groff-1.19/font/devX100/HR b/contrib/groff/font/devX100/HR similarity index 100% rename from contrib/groff-1.19/font/devX100/HR rename to contrib/groff/font/devX100/HR diff --git a/contrib/groff-1.19/font/devX100/Makefile.sub b/contrib/groff/font/devX100/Makefile.sub similarity index 100% rename from contrib/groff-1.19/font/devX100/Makefile.sub rename to contrib/groff/font/devX100/Makefile.sub diff --git a/contrib/groff-1.19/font/devX100/NB b/contrib/groff/font/devX100/NB similarity index 100% rename from contrib/groff-1.19/font/devX100/NB rename to contrib/groff/font/devX100/NB diff --git a/contrib/groff-1.19/font/devX100/NBI b/contrib/groff/font/devX100/NBI similarity index 100% rename from contrib/groff-1.19/font/devX100/NBI rename to contrib/groff/font/devX100/NBI diff --git a/contrib/groff-1.19/font/devX100/NI b/contrib/groff/font/devX100/NI similarity index 100% rename from contrib/groff-1.19/font/devX100/NI rename to contrib/groff/font/devX100/NI diff --git a/contrib/groff-1.19/font/devX100/NR b/contrib/groff/font/devX100/NR similarity index 100% rename from contrib/groff-1.19/font/devX100/NR rename to contrib/groff/font/devX100/NR diff --git a/contrib/groff-1.19/font/devX100/S b/contrib/groff/font/devX100/S similarity index 100% rename from contrib/groff-1.19/font/devX100/S rename to contrib/groff/font/devX100/S diff --git a/contrib/groff-1.19/font/devX100/TB b/contrib/groff/font/devX100/TB similarity index 100% rename from contrib/groff-1.19/font/devX100/TB rename to contrib/groff/font/devX100/TB diff --git a/contrib/groff-1.19/font/devX100/TBI b/contrib/groff/font/devX100/TBI similarity index 100% rename from contrib/groff-1.19/font/devX100/TBI rename to contrib/groff/font/devX100/TBI diff --git a/contrib/groff-1.19/font/devX100/TI b/contrib/groff/font/devX100/TI similarity index 100% rename from contrib/groff-1.19/font/devX100/TI rename to contrib/groff/font/devX100/TI diff --git a/contrib/groff-1.19/font/devX100/TR b/contrib/groff/font/devX100/TR similarity index 100% rename from contrib/groff-1.19/font/devX100/TR rename to contrib/groff/font/devX100/TR diff --git a/contrib/groff-1.19/font/devX75-12/CB b/contrib/groff/font/devX75-12/CB similarity index 100% rename from contrib/groff-1.19/font/devX75-12/CB rename to contrib/groff/font/devX75-12/CB diff --git a/contrib/groff-1.19/font/devX75-12/CBI b/contrib/groff/font/devX75-12/CBI similarity index 100% rename from contrib/groff-1.19/font/devX75-12/CBI rename to contrib/groff/font/devX75-12/CBI diff --git a/contrib/groff-1.19/font/devX75-12/CI b/contrib/groff/font/devX75-12/CI similarity index 100% rename from contrib/groff-1.19/font/devX75-12/CI rename to contrib/groff/font/devX75-12/CI diff --git a/contrib/groff-1.19/font/devX75-12/CR b/contrib/groff/font/devX75-12/CR similarity index 100% rename from contrib/groff-1.19/font/devX75-12/CR rename to contrib/groff/font/devX75-12/CR diff --git a/contrib/groff-1.19/font/devX75-12/DESC b/contrib/groff/font/devX75-12/DESC similarity index 100% rename from contrib/groff-1.19/font/devX75-12/DESC rename to contrib/groff/font/devX75-12/DESC diff --git a/contrib/groff-1.19/font/devX75-12/HB b/contrib/groff/font/devX75-12/HB similarity index 100% rename from contrib/groff-1.19/font/devX75-12/HB rename to contrib/groff/font/devX75-12/HB diff --git a/contrib/groff-1.19/font/devX75-12/HBI b/contrib/groff/font/devX75-12/HBI similarity index 100% rename from contrib/groff-1.19/font/devX75-12/HBI rename to contrib/groff/font/devX75-12/HBI diff --git a/contrib/groff-1.19/font/devX75-12/HI b/contrib/groff/font/devX75-12/HI similarity index 100% rename from contrib/groff-1.19/font/devX75-12/HI rename to contrib/groff/font/devX75-12/HI diff --git a/contrib/groff-1.19/font/devX75-12/HR b/contrib/groff/font/devX75-12/HR similarity index 100% rename from contrib/groff-1.19/font/devX75-12/HR rename to contrib/groff/font/devX75-12/HR diff --git a/contrib/groff-1.19/font/devX75-12/Makefile.sub b/contrib/groff/font/devX75-12/Makefile.sub similarity index 100% rename from contrib/groff-1.19/font/devX75-12/Makefile.sub rename to contrib/groff/font/devX75-12/Makefile.sub diff --git a/contrib/groff-1.19/font/devX75-12/NB b/contrib/groff/font/devX75-12/NB similarity index 100% rename from contrib/groff-1.19/font/devX75-12/NB rename to contrib/groff/font/devX75-12/NB diff --git a/contrib/groff-1.19/font/devX75-12/NBI b/contrib/groff/font/devX75-12/NBI similarity index 100% rename from contrib/groff-1.19/font/devX75-12/NBI rename to contrib/groff/font/devX75-12/NBI diff --git a/contrib/groff-1.19/font/devX75-12/NI b/contrib/groff/font/devX75-12/NI similarity index 100% rename from contrib/groff-1.19/font/devX75-12/NI rename to contrib/groff/font/devX75-12/NI diff --git a/contrib/groff-1.19/font/devX75-12/NR b/contrib/groff/font/devX75-12/NR similarity index 100% rename from contrib/groff-1.19/font/devX75-12/NR rename to contrib/groff/font/devX75-12/NR diff --git a/contrib/groff-1.19/font/devX75-12/S b/contrib/groff/font/devX75-12/S similarity index 100% rename from contrib/groff-1.19/font/devX75-12/S rename to contrib/groff/font/devX75-12/S diff --git a/contrib/groff-1.19/font/devX75-12/TB b/contrib/groff/font/devX75-12/TB similarity index 100% rename from contrib/groff-1.19/font/devX75-12/TB rename to contrib/groff/font/devX75-12/TB diff --git a/contrib/groff-1.19/font/devX75-12/TBI b/contrib/groff/font/devX75-12/TBI similarity index 100% rename from contrib/groff-1.19/font/devX75-12/TBI rename to contrib/groff/font/devX75-12/TBI diff --git a/contrib/groff-1.19/font/devX75-12/TI b/contrib/groff/font/devX75-12/TI similarity index 100% rename from contrib/groff-1.19/font/devX75-12/TI rename to contrib/groff/font/devX75-12/TI diff --git a/contrib/groff-1.19/font/devX75-12/TR b/contrib/groff/font/devX75-12/TR similarity index 100% rename from contrib/groff-1.19/font/devX75-12/TR rename to contrib/groff/font/devX75-12/TR diff --git a/contrib/groff-1.19/font/devX75/CB b/contrib/groff/font/devX75/CB similarity index 100% rename from contrib/groff-1.19/font/devX75/CB rename to contrib/groff/font/devX75/CB diff --git a/contrib/groff-1.19/font/devX75/CBI b/contrib/groff/font/devX75/CBI similarity index 100% rename from contrib/groff-1.19/font/devX75/CBI rename to contrib/groff/font/devX75/CBI diff --git a/contrib/groff-1.19/font/devX75/CI b/contrib/groff/font/devX75/CI similarity index 100% rename from contrib/groff-1.19/font/devX75/CI rename to contrib/groff/font/devX75/CI diff --git a/contrib/groff-1.19/font/devX75/CR b/contrib/groff/font/devX75/CR similarity index 100% rename from contrib/groff-1.19/font/devX75/CR rename to contrib/groff/font/devX75/CR diff --git a/contrib/groff-1.19/font/devX75/DESC b/contrib/groff/font/devX75/DESC similarity index 100% rename from contrib/groff-1.19/font/devX75/DESC rename to contrib/groff/font/devX75/DESC diff --git a/contrib/groff-1.19/font/devX75/HB b/contrib/groff/font/devX75/HB similarity index 100% rename from contrib/groff-1.19/font/devX75/HB rename to contrib/groff/font/devX75/HB diff --git a/contrib/groff-1.19/font/devX75/HBI b/contrib/groff/font/devX75/HBI similarity index 100% rename from contrib/groff-1.19/font/devX75/HBI rename to contrib/groff/font/devX75/HBI diff --git a/contrib/groff-1.19/font/devX75/HI b/contrib/groff/font/devX75/HI similarity index 100% rename from contrib/groff-1.19/font/devX75/HI rename to contrib/groff/font/devX75/HI diff --git a/contrib/groff-1.19/font/devX75/HR b/contrib/groff/font/devX75/HR similarity index 100% rename from contrib/groff-1.19/font/devX75/HR rename to contrib/groff/font/devX75/HR diff --git a/contrib/groff-1.19/font/devX75/Makefile.sub b/contrib/groff/font/devX75/Makefile.sub similarity index 100% rename from contrib/groff-1.19/font/devX75/Makefile.sub rename to contrib/groff/font/devX75/Makefile.sub diff --git a/contrib/groff-1.19/font/devX75/NB b/contrib/groff/font/devX75/NB similarity index 100% rename from contrib/groff-1.19/font/devX75/NB rename to contrib/groff/font/devX75/NB diff --git a/contrib/groff-1.19/font/devX75/NBI b/contrib/groff/font/devX75/NBI similarity index 100% rename from contrib/groff-1.19/font/devX75/NBI rename to contrib/groff/font/devX75/NBI diff --git a/contrib/groff-1.19/font/devX75/NI b/contrib/groff/font/devX75/NI similarity index 100% rename from contrib/groff-1.19/font/devX75/NI rename to contrib/groff/font/devX75/NI diff --git a/contrib/groff-1.19/font/devX75/NR b/contrib/groff/font/devX75/NR similarity index 100% rename from contrib/groff-1.19/font/devX75/NR rename to contrib/groff/font/devX75/NR diff --git a/contrib/groff-1.19/font/devX75/S b/contrib/groff/font/devX75/S similarity index 100% rename from contrib/groff-1.19/font/devX75/S rename to contrib/groff/font/devX75/S diff --git a/contrib/groff-1.19/font/devX75/TB b/contrib/groff/font/devX75/TB similarity index 100% rename from contrib/groff-1.19/font/devX75/TB rename to contrib/groff/font/devX75/TB diff --git a/contrib/groff-1.19/font/devX75/TBI b/contrib/groff/font/devX75/TBI similarity index 100% rename from contrib/groff-1.19/font/devX75/TBI rename to contrib/groff/font/devX75/TBI diff --git a/contrib/groff-1.19/font/devX75/TI b/contrib/groff/font/devX75/TI similarity index 100% rename from contrib/groff-1.19/font/devX75/TI rename to contrib/groff/font/devX75/TI diff --git a/contrib/groff-1.19/font/devX75/TR b/contrib/groff/font/devX75/TR similarity index 100% rename from contrib/groff-1.19/font/devX75/TR rename to contrib/groff/font/devX75/TR diff --git a/contrib/groff-1.19/font/devascii/DESC.proto b/contrib/groff/font/devascii/DESC.proto similarity index 100% rename from contrib/groff-1.19/font/devascii/DESC.proto rename to contrib/groff/font/devascii/DESC.proto diff --git a/contrib/groff-1.19/font/devascii/R.proto b/contrib/groff/font/devascii/R.proto similarity index 100% rename from contrib/groff-1.19/font/devascii/R.proto rename to contrib/groff/font/devascii/R.proto diff --git a/contrib/groff-1.19/font/devcp1047/DESC.proto b/contrib/groff/font/devcp1047/DESC.proto similarity index 100% rename from contrib/groff-1.19/font/devcp1047/DESC.proto rename to contrib/groff/font/devcp1047/DESC.proto diff --git a/contrib/groff-1.19/font/devcp1047/R.proto b/contrib/groff/font/devcp1047/R.proto similarity index 100% rename from contrib/groff-1.19/font/devcp1047/R.proto rename to contrib/groff/font/devcp1047/R.proto diff --git a/contrib/groff-1.19/font/devdvi/CW b/contrib/groff/font/devdvi/CW similarity index 100% rename from contrib/groff-1.19/font/devdvi/CW rename to contrib/groff/font/devdvi/CW diff --git a/contrib/groff-1.19/font/devdvi/CWEC b/contrib/groff/font/devdvi/CWEC similarity index 100% rename from contrib/groff-1.19/font/devdvi/CWEC rename to contrib/groff/font/devdvi/CWEC diff --git a/contrib/groff-1.19/font/devdvi/CWI b/contrib/groff/font/devdvi/CWI similarity index 100% rename from contrib/groff-1.19/font/devdvi/CWI rename to contrib/groff/font/devdvi/CWI diff --git a/contrib/groff-1.19/font/devdvi/CWIEC b/contrib/groff/font/devdvi/CWIEC similarity index 100% rename from contrib/groff-1.19/font/devdvi/CWIEC rename to contrib/groff/font/devdvi/CWIEC diff --git a/contrib/groff-1.19/font/devdvi/CWITC b/contrib/groff/font/devdvi/CWITC similarity index 100% rename from contrib/groff-1.19/font/devdvi/CWITC rename to contrib/groff/font/devdvi/CWITC diff --git a/contrib/groff-1.19/font/devdvi/CWTC b/contrib/groff/font/devdvi/CWTC similarity index 100% rename from contrib/groff-1.19/font/devdvi/CWTC rename to contrib/groff/font/devdvi/CWTC diff --git a/contrib/groff-1.19/font/devdvi/DESC.in b/contrib/groff/font/devdvi/DESC.in similarity index 100% rename from contrib/groff-1.19/font/devdvi/DESC.in rename to contrib/groff/font/devdvi/DESC.in diff --git a/contrib/groff-1.19/font/devdvi/EX b/contrib/groff/font/devdvi/EX similarity index 100% rename from contrib/groff-1.19/font/devdvi/EX rename to contrib/groff/font/devdvi/EX diff --git a/contrib/groff-1.19/font/devdvi/HB b/contrib/groff/font/devdvi/HB similarity index 100% rename from contrib/groff-1.19/font/devdvi/HB rename to contrib/groff/font/devdvi/HB diff --git a/contrib/groff-1.19/font/devdvi/HBEC b/contrib/groff/font/devdvi/HBEC similarity index 100% rename from contrib/groff-1.19/font/devdvi/HBEC rename to contrib/groff/font/devdvi/HBEC diff --git a/contrib/groff-1.19/font/devdvi/HBI b/contrib/groff/font/devdvi/HBI similarity index 100% rename from contrib/groff-1.19/font/devdvi/HBI rename to contrib/groff/font/devdvi/HBI diff --git a/contrib/groff-1.19/font/devdvi/HBIEC b/contrib/groff/font/devdvi/HBIEC similarity index 100% rename from contrib/groff-1.19/font/devdvi/HBIEC rename to contrib/groff/font/devdvi/HBIEC diff --git a/contrib/groff-1.19/font/devdvi/HBITC b/contrib/groff/font/devdvi/HBITC similarity index 100% rename from contrib/groff-1.19/font/devdvi/HBITC rename to contrib/groff/font/devdvi/HBITC diff --git a/contrib/groff-1.19/font/devdvi/HBTC b/contrib/groff/font/devdvi/HBTC similarity index 100% rename from contrib/groff-1.19/font/devdvi/HBTC rename to contrib/groff/font/devdvi/HBTC diff --git a/contrib/groff-1.19/font/devdvi/HI b/contrib/groff/font/devdvi/HI similarity index 100% rename from contrib/groff-1.19/font/devdvi/HI rename to contrib/groff/font/devdvi/HI diff --git a/contrib/groff-1.19/font/devdvi/HIEC b/contrib/groff/font/devdvi/HIEC similarity index 100% rename from contrib/groff-1.19/font/devdvi/HIEC rename to contrib/groff/font/devdvi/HIEC diff --git a/contrib/groff-1.19/font/devdvi/HITC b/contrib/groff/font/devdvi/HITC similarity index 100% rename from contrib/groff-1.19/font/devdvi/HITC rename to contrib/groff/font/devdvi/HITC diff --git a/contrib/groff-1.19/font/devdvi/HR b/contrib/groff/font/devdvi/HR similarity index 100% rename from contrib/groff-1.19/font/devdvi/HR rename to contrib/groff/font/devdvi/HR diff --git a/contrib/groff-1.19/font/devdvi/HREC b/contrib/groff/font/devdvi/HREC similarity index 100% rename from contrib/groff-1.19/font/devdvi/HREC rename to contrib/groff/font/devdvi/HREC diff --git a/contrib/groff-1.19/font/devdvi/HRTC b/contrib/groff/font/devdvi/HRTC similarity index 100% rename from contrib/groff-1.19/font/devdvi/HRTC rename to contrib/groff/font/devdvi/HRTC diff --git a/contrib/groff-1.19/font/devdvi/MI b/contrib/groff/font/devdvi/MI similarity index 100% rename from contrib/groff-1.19/font/devdvi/MI rename to contrib/groff/font/devdvi/MI diff --git a/contrib/groff-1.19/font/devdvi/S b/contrib/groff/font/devdvi/S similarity index 100% rename from contrib/groff-1.19/font/devdvi/S rename to contrib/groff/font/devdvi/S diff --git a/contrib/groff-1.19/font/devdvi/SA b/contrib/groff/font/devdvi/SA similarity index 100% rename from contrib/groff-1.19/font/devdvi/SA rename to contrib/groff/font/devdvi/SA diff --git a/contrib/groff-1.19/font/devdvi/SB b/contrib/groff/font/devdvi/SB similarity index 100% rename from contrib/groff-1.19/font/devdvi/SB rename to contrib/groff/font/devdvi/SB diff --git a/contrib/groff-1.19/font/devdvi/SC b/contrib/groff/font/devdvi/SC similarity index 100% rename from contrib/groff-1.19/font/devdvi/SC rename to contrib/groff/font/devdvi/SC diff --git a/contrib/groff-1.19/font/devdvi/TB b/contrib/groff/font/devdvi/TB similarity index 100% rename from contrib/groff-1.19/font/devdvi/TB rename to contrib/groff/font/devdvi/TB diff --git a/contrib/groff-1.19/font/devdvi/TBEC b/contrib/groff/font/devdvi/TBEC similarity index 100% rename from contrib/groff-1.19/font/devdvi/TBEC rename to contrib/groff/font/devdvi/TBEC diff --git a/contrib/groff-1.19/font/devdvi/TBI b/contrib/groff/font/devdvi/TBI similarity index 100% rename from contrib/groff-1.19/font/devdvi/TBI rename to contrib/groff/font/devdvi/TBI diff --git a/contrib/groff-1.19/font/devdvi/TBIEC b/contrib/groff/font/devdvi/TBIEC similarity index 100% rename from contrib/groff-1.19/font/devdvi/TBIEC rename to contrib/groff/font/devdvi/TBIEC diff --git a/contrib/groff-1.19/font/devdvi/TBITC b/contrib/groff/font/devdvi/TBITC similarity index 100% rename from contrib/groff-1.19/font/devdvi/TBITC rename to contrib/groff/font/devdvi/TBITC diff --git a/contrib/groff-1.19/font/devdvi/TBTC b/contrib/groff/font/devdvi/TBTC similarity index 100% rename from contrib/groff-1.19/font/devdvi/TBTC rename to contrib/groff/font/devdvi/TBTC diff --git a/contrib/groff-1.19/font/devdvi/TI b/contrib/groff/font/devdvi/TI similarity index 100% rename from contrib/groff-1.19/font/devdvi/TI rename to contrib/groff/font/devdvi/TI diff --git a/contrib/groff-1.19/font/devdvi/TIEC b/contrib/groff/font/devdvi/TIEC similarity index 100% rename from contrib/groff-1.19/font/devdvi/TIEC rename to contrib/groff/font/devdvi/TIEC diff --git a/contrib/groff-1.19/font/devdvi/TITC b/contrib/groff/font/devdvi/TITC similarity index 100% rename from contrib/groff-1.19/font/devdvi/TITC rename to contrib/groff/font/devdvi/TITC diff --git a/contrib/groff-1.19/font/devdvi/TR b/contrib/groff/font/devdvi/TR similarity index 100% rename from contrib/groff-1.19/font/devdvi/TR rename to contrib/groff/font/devdvi/TR diff --git a/contrib/groff-1.19/font/devdvi/TREC b/contrib/groff/font/devdvi/TREC similarity index 100% rename from contrib/groff-1.19/font/devdvi/TREC rename to contrib/groff/font/devdvi/TREC diff --git a/contrib/groff-1.19/font/devdvi/TRTC b/contrib/groff/font/devdvi/TRTC similarity index 100% rename from contrib/groff-1.19/font/devdvi/TRTC rename to contrib/groff/font/devdvi/TRTC diff --git a/contrib/groff-1.19/font/devdvi/generate/CompileFonts b/contrib/groff/font/devdvi/generate/CompileFonts similarity index 100% rename from contrib/groff-1.19/font/devdvi/generate/CompileFonts rename to contrib/groff/font/devdvi/generate/CompileFonts diff --git a/contrib/groff-1.19/font/devdvi/generate/Makefile b/contrib/groff/font/devdvi/generate/Makefile similarity index 100% rename from contrib/groff-1.19/font/devdvi/generate/Makefile rename to contrib/groff/font/devdvi/generate/Makefile diff --git a/contrib/groff-1.19/font/devdvi/generate/ec.map b/contrib/groff/font/devdvi/generate/ec.map similarity index 100% rename from contrib/groff-1.19/font/devdvi/generate/ec.map rename to contrib/groff/font/devdvi/generate/ec.map diff --git a/contrib/groff-1.19/font/devdvi/generate/msam.map b/contrib/groff/font/devdvi/generate/msam.map similarity index 100% rename from contrib/groff-1.19/font/devdvi/generate/msam.map rename to contrib/groff/font/devdvi/generate/msam.map diff --git a/contrib/groff-1.19/font/devdvi/generate/msbm.map b/contrib/groff/font/devdvi/generate/msbm.map similarity index 100% rename from contrib/groff-1.19/font/devdvi/generate/msbm.map rename to contrib/groff/font/devdvi/generate/msbm.map diff --git a/contrib/groff-1.19/font/devdvi/generate/tc.map b/contrib/groff/font/devdvi/generate/tc.map similarity index 100% rename from contrib/groff-1.19/font/devdvi/generate/tc.map rename to contrib/groff/font/devdvi/generate/tc.map diff --git a/contrib/groff-1.19/font/devdvi/generate/texb.map b/contrib/groff/font/devdvi/generate/texb.map similarity index 100% rename from contrib/groff-1.19/font/devdvi/generate/texb.map rename to contrib/groff/font/devdvi/generate/texb.map diff --git a/contrib/groff-1.19/font/devdvi/generate/texex.map b/contrib/groff/font/devdvi/generate/texex.map similarity index 100% rename from contrib/groff-1.19/font/devdvi/generate/texex.map rename to contrib/groff/font/devdvi/generate/texex.map diff --git a/contrib/groff-1.19/font/devdvi/generate/texi.map b/contrib/groff/font/devdvi/generate/texi.map similarity index 100% rename from contrib/groff-1.19/font/devdvi/generate/texi.map rename to contrib/groff/font/devdvi/generate/texi.map diff --git a/contrib/groff-1.19/font/devdvi/generate/texmi.map b/contrib/groff/font/devdvi/generate/texmi.map similarity index 100% rename from contrib/groff-1.19/font/devdvi/generate/texmi.map rename to contrib/groff/font/devdvi/generate/texmi.map diff --git a/contrib/groff-1.19/font/devdvi/generate/texr.map b/contrib/groff/font/devdvi/generate/texr.map similarity index 100% rename from contrib/groff-1.19/font/devdvi/generate/texr.map rename to contrib/groff/font/devdvi/generate/texr.map diff --git a/contrib/groff-1.19/font/devdvi/generate/texsy.map b/contrib/groff/font/devdvi/generate/texsy.map similarity index 100% rename from contrib/groff-1.19/font/devdvi/generate/texsy.map rename to contrib/groff/font/devdvi/generate/texsy.map diff --git a/contrib/groff-1.19/font/devdvi/generate/textex.map b/contrib/groff/font/devdvi/generate/textex.map similarity index 100% rename from contrib/groff-1.19/font/devdvi/generate/textex.map rename to contrib/groff/font/devdvi/generate/textex.map diff --git a/contrib/groff-1.19/font/devdvi/generate/textt.map b/contrib/groff/font/devdvi/generate/textt.map similarity index 100% rename from contrib/groff-1.19/font/devdvi/generate/textt.map rename to contrib/groff/font/devdvi/generate/textt.map diff --git a/contrib/groff-1.19/font/devhtml/DESC.proto b/contrib/groff/font/devhtml/DESC.proto similarity index 100% rename from contrib/groff-1.19/font/devhtml/DESC.proto rename to contrib/groff/font/devhtml/DESC.proto diff --git a/contrib/groff-1.19/font/devhtml/R.proto b/contrib/groff/font/devhtml/R.proto similarity index 100% rename from contrib/groff-1.19/font/devhtml/R.proto rename to contrib/groff/font/devhtml/R.proto diff --git a/contrib/groff-1.19/font/devlatin1/DESC.proto b/contrib/groff/font/devlatin1/DESC.proto similarity index 100% rename from contrib/groff-1.19/font/devlatin1/DESC.proto rename to contrib/groff/font/devlatin1/DESC.proto diff --git a/contrib/groff-1.19/font/devlatin1/R.proto b/contrib/groff/font/devlatin1/R.proto similarity index 100% rename from contrib/groff-1.19/font/devlatin1/R.proto rename to contrib/groff/font/devlatin1/R.proto diff --git a/contrib/groff-1.19/font/devlbp/CB b/contrib/groff/font/devlbp/CB similarity index 100% rename from contrib/groff-1.19/font/devlbp/CB rename to contrib/groff/font/devlbp/CB diff --git a/contrib/groff-1.19/font/devlbp/CI b/contrib/groff/font/devlbp/CI similarity index 100% rename from contrib/groff-1.19/font/devlbp/CI rename to contrib/groff/font/devlbp/CI diff --git a/contrib/groff-1.19/font/devlbp/CR b/contrib/groff/font/devlbp/CR similarity index 100% rename from contrib/groff-1.19/font/devlbp/CR rename to contrib/groff/font/devlbp/CR diff --git a/contrib/groff-1.19/font/devlbp/DESC.in b/contrib/groff/font/devlbp/DESC.in similarity index 100% rename from contrib/groff-1.19/font/devlbp/DESC.in rename to contrib/groff/font/devlbp/DESC.in diff --git a/contrib/groff-1.19/font/devlbp/EB b/contrib/groff/font/devlbp/EB similarity index 100% rename from contrib/groff-1.19/font/devlbp/EB rename to contrib/groff/font/devlbp/EB diff --git a/contrib/groff-1.19/font/devlbp/EI b/contrib/groff/font/devlbp/EI similarity index 100% rename from contrib/groff-1.19/font/devlbp/EI rename to contrib/groff/font/devlbp/EI diff --git a/contrib/groff-1.19/font/devlbp/ER b/contrib/groff/font/devlbp/ER similarity index 100% rename from contrib/groff-1.19/font/devlbp/ER rename to contrib/groff/font/devlbp/ER diff --git a/contrib/groff-1.19/font/devlbp/HB b/contrib/groff/font/devlbp/HB similarity index 100% rename from contrib/groff-1.19/font/devlbp/HB rename to contrib/groff/font/devlbp/HB diff --git a/contrib/groff-1.19/font/devlbp/HBI b/contrib/groff/font/devlbp/HBI similarity index 100% rename from contrib/groff-1.19/font/devlbp/HBI rename to contrib/groff/font/devlbp/HBI diff --git a/contrib/groff-1.19/font/devlbp/HI b/contrib/groff/font/devlbp/HI similarity index 100% rename from contrib/groff-1.19/font/devlbp/HI rename to contrib/groff/font/devlbp/HI diff --git a/contrib/groff-1.19/font/devlbp/HNB b/contrib/groff/font/devlbp/HNB similarity index 100% rename from contrib/groff-1.19/font/devlbp/HNB rename to contrib/groff/font/devlbp/HNB diff --git a/contrib/groff-1.19/font/devlbp/HNBI b/contrib/groff/font/devlbp/HNBI similarity index 100% rename from contrib/groff-1.19/font/devlbp/HNBI rename to contrib/groff/font/devlbp/HNBI diff --git a/contrib/groff-1.19/font/devlbp/HNI b/contrib/groff/font/devlbp/HNI similarity index 100% rename from contrib/groff-1.19/font/devlbp/HNI rename to contrib/groff/font/devlbp/HNI diff --git a/contrib/groff-1.19/font/devlbp/HNR b/contrib/groff/font/devlbp/HNR similarity index 100% rename from contrib/groff-1.19/font/devlbp/HNR rename to contrib/groff/font/devlbp/HNR diff --git a/contrib/groff-1.19/font/devlbp/HR b/contrib/groff/font/devlbp/HR similarity index 100% rename from contrib/groff-1.19/font/devlbp/HR rename to contrib/groff/font/devlbp/HR diff --git a/contrib/groff-1.19/font/devlbp/TB b/contrib/groff/font/devlbp/TB similarity index 100% rename from contrib/groff-1.19/font/devlbp/TB rename to contrib/groff/font/devlbp/TB diff --git a/contrib/groff-1.19/font/devlbp/TBI b/contrib/groff/font/devlbp/TBI similarity index 100% rename from contrib/groff-1.19/font/devlbp/TBI rename to contrib/groff/font/devlbp/TBI diff --git a/contrib/groff-1.19/font/devlbp/TI b/contrib/groff/font/devlbp/TI similarity index 100% rename from contrib/groff-1.19/font/devlbp/TI rename to contrib/groff/font/devlbp/TI diff --git a/contrib/groff-1.19/font/devlbp/TR b/contrib/groff/font/devlbp/TR similarity index 100% rename from contrib/groff-1.19/font/devlbp/TR rename to contrib/groff/font/devlbp/TR diff --git a/contrib/groff-1.19/font/devlj4/AB b/contrib/groff/font/devlj4/AB similarity index 100% rename from contrib/groff-1.19/font/devlj4/AB rename to contrib/groff/font/devlj4/AB diff --git a/contrib/groff-1.19/font/devlj4/ABI b/contrib/groff/font/devlj4/ABI similarity index 100% rename from contrib/groff-1.19/font/devlj4/ABI rename to contrib/groff/font/devlj4/ABI diff --git a/contrib/groff-1.19/font/devlj4/AI b/contrib/groff/font/devlj4/AI similarity index 100% rename from contrib/groff-1.19/font/devlj4/AI rename to contrib/groff/font/devlj4/AI diff --git a/contrib/groff-1.19/font/devlj4/ALBB b/contrib/groff/font/devlj4/ALBB similarity index 100% rename from contrib/groff-1.19/font/devlj4/ALBB rename to contrib/groff/font/devlj4/ALBB diff --git a/contrib/groff-1.19/font/devlj4/ALBR b/contrib/groff/font/devlj4/ALBR similarity index 100% rename from contrib/groff-1.19/font/devlj4/ALBR rename to contrib/groff/font/devlj4/ALBR diff --git a/contrib/groff-1.19/font/devlj4/AOB b/contrib/groff/font/devlj4/AOB similarity index 100% rename from contrib/groff-1.19/font/devlj4/AOB rename to contrib/groff/font/devlj4/AOB diff --git a/contrib/groff-1.19/font/devlj4/AOI b/contrib/groff/font/devlj4/AOI similarity index 100% rename from contrib/groff-1.19/font/devlj4/AOI rename to contrib/groff/font/devlj4/AOI diff --git a/contrib/groff-1.19/font/devlj4/AOR b/contrib/groff/font/devlj4/AOR similarity index 100% rename from contrib/groff-1.19/font/devlj4/AOR rename to contrib/groff/font/devlj4/AOR diff --git a/contrib/groff-1.19/font/devlj4/AR b/contrib/groff/font/devlj4/AR similarity index 100% rename from contrib/groff-1.19/font/devlj4/AR rename to contrib/groff/font/devlj4/AR diff --git a/contrib/groff-1.19/font/devlj4/CB b/contrib/groff/font/devlj4/CB similarity index 100% rename from contrib/groff-1.19/font/devlj4/CB rename to contrib/groff/font/devlj4/CB diff --git a/contrib/groff-1.19/font/devlj4/CBI b/contrib/groff/font/devlj4/CBI similarity index 100% rename from contrib/groff-1.19/font/devlj4/CBI rename to contrib/groff/font/devlj4/CBI diff --git a/contrib/groff-1.19/font/devlj4/CI b/contrib/groff/font/devlj4/CI similarity index 100% rename from contrib/groff-1.19/font/devlj4/CI rename to contrib/groff/font/devlj4/CI diff --git a/contrib/groff-1.19/font/devlj4/CLARENDON b/contrib/groff/font/devlj4/CLARENDON similarity index 100% rename from contrib/groff-1.19/font/devlj4/CLARENDON rename to contrib/groff/font/devlj4/CLARENDON diff --git a/contrib/groff-1.19/font/devlj4/CORONET b/contrib/groff/font/devlj4/CORONET similarity index 100% rename from contrib/groff-1.19/font/devlj4/CORONET rename to contrib/groff/font/devlj4/CORONET diff --git a/contrib/groff-1.19/font/devlj4/CR b/contrib/groff/font/devlj4/CR similarity index 100% rename from contrib/groff-1.19/font/devlj4/CR rename to contrib/groff/font/devlj4/CR diff --git a/contrib/groff-1.19/font/devlj4/DESC.in b/contrib/groff/font/devlj4/DESC.in similarity index 100% rename from contrib/groff-1.19/font/devlj4/DESC.in rename to contrib/groff/font/devlj4/DESC.in diff --git a/contrib/groff-1.19/font/devlj4/GB b/contrib/groff/font/devlj4/GB similarity index 100% rename from contrib/groff-1.19/font/devlj4/GB rename to contrib/groff/font/devlj4/GB diff --git a/contrib/groff-1.19/font/devlj4/GBI b/contrib/groff/font/devlj4/GBI similarity index 100% rename from contrib/groff-1.19/font/devlj4/GBI rename to contrib/groff/font/devlj4/GBI diff --git a/contrib/groff-1.19/font/devlj4/GI b/contrib/groff/font/devlj4/GI similarity index 100% rename from contrib/groff-1.19/font/devlj4/GI rename to contrib/groff/font/devlj4/GI diff --git a/contrib/groff-1.19/font/devlj4/GR b/contrib/groff/font/devlj4/GR similarity index 100% rename from contrib/groff-1.19/font/devlj4/GR rename to contrib/groff/font/devlj4/GR diff --git a/contrib/groff-1.19/font/devlj4/LGB b/contrib/groff/font/devlj4/LGB similarity index 100% rename from contrib/groff-1.19/font/devlj4/LGB rename to contrib/groff/font/devlj4/LGB diff --git a/contrib/groff-1.19/font/devlj4/LGI b/contrib/groff/font/devlj4/LGI similarity index 100% rename from contrib/groff-1.19/font/devlj4/LGI rename to contrib/groff/font/devlj4/LGI diff --git a/contrib/groff-1.19/font/devlj4/LGR b/contrib/groff/font/devlj4/LGR similarity index 100% rename from contrib/groff-1.19/font/devlj4/LGR rename to contrib/groff/font/devlj4/LGR diff --git a/contrib/groff-1.19/font/devlj4/MARIGOLD b/contrib/groff/font/devlj4/MARIGOLD similarity index 100% rename from contrib/groff-1.19/font/devlj4/MARIGOLD rename to contrib/groff/font/devlj4/MARIGOLD diff --git a/contrib/groff-1.19/font/devlj4/OB b/contrib/groff/font/devlj4/OB similarity index 100% rename from contrib/groff-1.19/font/devlj4/OB rename to contrib/groff/font/devlj4/OB diff --git a/contrib/groff-1.19/font/devlj4/OBI b/contrib/groff/font/devlj4/OBI similarity index 100% rename from contrib/groff-1.19/font/devlj4/OBI rename to contrib/groff/font/devlj4/OBI diff --git a/contrib/groff-1.19/font/devlj4/OI b/contrib/groff/font/devlj4/OI similarity index 100% rename from contrib/groff-1.19/font/devlj4/OI rename to contrib/groff/font/devlj4/OI diff --git a/contrib/groff-1.19/font/devlj4/OR b/contrib/groff/font/devlj4/OR similarity index 100% rename from contrib/groff-1.19/font/devlj4/OR rename to contrib/groff/font/devlj4/OR diff --git a/contrib/groff-1.19/font/devlj4/S b/contrib/groff/font/devlj4/S similarity index 100% rename from contrib/groff-1.19/font/devlj4/S rename to contrib/groff/font/devlj4/S diff --git a/contrib/groff-1.19/font/devlj4/SYMBOL b/contrib/groff/font/devlj4/SYMBOL similarity index 100% rename from contrib/groff-1.19/font/devlj4/SYMBOL rename to contrib/groff/font/devlj4/SYMBOL diff --git a/contrib/groff-1.19/font/devlj4/TB b/contrib/groff/font/devlj4/TB similarity index 100% rename from contrib/groff-1.19/font/devlj4/TB rename to contrib/groff/font/devlj4/TB diff --git a/contrib/groff-1.19/font/devlj4/TBI b/contrib/groff/font/devlj4/TBI similarity index 100% rename from contrib/groff-1.19/font/devlj4/TBI rename to contrib/groff/font/devlj4/TBI diff --git a/contrib/groff-1.19/font/devlj4/TI b/contrib/groff/font/devlj4/TI similarity index 100% rename from contrib/groff-1.19/font/devlj4/TI rename to contrib/groff/font/devlj4/TI diff --git a/contrib/groff-1.19/font/devlj4/TNRB b/contrib/groff/font/devlj4/TNRB similarity index 100% rename from contrib/groff-1.19/font/devlj4/TNRB rename to contrib/groff/font/devlj4/TNRB diff --git a/contrib/groff-1.19/font/devlj4/TNRBI b/contrib/groff/font/devlj4/TNRBI similarity index 100% rename from contrib/groff-1.19/font/devlj4/TNRBI rename to contrib/groff/font/devlj4/TNRBI diff --git a/contrib/groff-1.19/font/devlj4/TNRI b/contrib/groff/font/devlj4/TNRI similarity index 100% rename from contrib/groff-1.19/font/devlj4/TNRI rename to contrib/groff/font/devlj4/TNRI diff --git a/contrib/groff-1.19/font/devlj4/TNRR b/contrib/groff/font/devlj4/TNRR similarity index 100% rename from contrib/groff-1.19/font/devlj4/TNRR rename to contrib/groff/font/devlj4/TNRR diff --git a/contrib/groff-1.19/font/devlj4/TR b/contrib/groff/font/devlj4/TR similarity index 100% rename from contrib/groff-1.19/font/devlj4/TR rename to contrib/groff/font/devlj4/TR diff --git a/contrib/groff-1.19/font/devlj4/UB b/contrib/groff/font/devlj4/UB similarity index 100% rename from contrib/groff-1.19/font/devlj4/UB rename to contrib/groff/font/devlj4/UB diff --git a/contrib/groff-1.19/font/devlj4/UBI b/contrib/groff/font/devlj4/UBI similarity index 100% rename from contrib/groff-1.19/font/devlj4/UBI rename to contrib/groff/font/devlj4/UBI diff --git a/contrib/groff-1.19/font/devlj4/UCB b/contrib/groff/font/devlj4/UCB similarity index 100% rename from contrib/groff-1.19/font/devlj4/UCB rename to contrib/groff/font/devlj4/UCB diff --git a/contrib/groff-1.19/font/devlj4/UCBI b/contrib/groff/font/devlj4/UCBI similarity index 100% rename from contrib/groff-1.19/font/devlj4/UCBI rename to contrib/groff/font/devlj4/UCBI diff --git a/contrib/groff-1.19/font/devlj4/UCI b/contrib/groff/font/devlj4/UCI similarity index 100% rename from contrib/groff-1.19/font/devlj4/UCI rename to contrib/groff/font/devlj4/UCI diff --git a/contrib/groff-1.19/font/devlj4/UCR b/contrib/groff/font/devlj4/UCR similarity index 100% rename from contrib/groff-1.19/font/devlj4/UCR rename to contrib/groff/font/devlj4/UCR diff --git a/contrib/groff-1.19/font/devlj4/UI b/contrib/groff/font/devlj4/UI similarity index 100% rename from contrib/groff-1.19/font/devlj4/UI rename to contrib/groff/font/devlj4/UI diff --git a/contrib/groff-1.19/font/devlj4/UR b/contrib/groff/font/devlj4/UR similarity index 100% rename from contrib/groff-1.19/font/devlj4/UR rename to contrib/groff/font/devlj4/UR diff --git a/contrib/groff-1.19/font/devlj4/WINGDINGS b/contrib/groff/font/devlj4/WINGDINGS similarity index 100% rename from contrib/groff-1.19/font/devlj4/WINGDINGS rename to contrib/groff/font/devlj4/WINGDINGS diff --git a/contrib/groff-1.19/font/devlj4/generate/Makefile b/contrib/groff/font/devlj4/generate/Makefile similarity index 100% rename from contrib/groff-1.19/font/devlj4/generate/Makefile rename to contrib/groff/font/devlj4/generate/Makefile diff --git a/contrib/groff-1.19/font/devlj4/generate/special.awk b/contrib/groff/font/devlj4/generate/special.awk similarity index 100% rename from contrib/groff-1.19/font/devlj4/generate/special.awk rename to contrib/groff/font/devlj4/generate/special.awk diff --git a/contrib/groff-1.19/font/devlj4/generate/special.map b/contrib/groff/font/devlj4/generate/special.map similarity index 100% rename from contrib/groff-1.19/font/devlj4/generate/special.map rename to contrib/groff/font/devlj4/generate/special.map diff --git a/contrib/groff-1.19/font/devlj4/generate/symbol.map b/contrib/groff/font/devlj4/generate/symbol.map similarity index 100% rename from contrib/groff-1.19/font/devlj4/generate/symbol.map rename to contrib/groff/font/devlj4/generate/symbol.map diff --git a/contrib/groff-1.19/font/devlj4/generate/text.map b/contrib/groff/font/devlj4/generate/text.map similarity index 100% rename from contrib/groff-1.19/font/devlj4/generate/text.map rename to contrib/groff/font/devlj4/generate/text.map diff --git a/contrib/groff-1.19/font/devlj4/generate/wingdings.map b/contrib/groff/font/devlj4/generate/wingdings.map similarity index 100% rename from contrib/groff-1.19/font/devlj4/generate/wingdings.map rename to contrib/groff/font/devlj4/generate/wingdings.map diff --git a/contrib/groff-1.19/font/devps/AB b/contrib/groff/font/devps/AB similarity index 100% rename from contrib/groff-1.19/font/devps/AB rename to contrib/groff/font/devps/AB diff --git a/contrib/groff-1.19/font/devps/ABI b/contrib/groff/font/devps/ABI similarity index 100% rename from contrib/groff-1.19/font/devps/ABI rename to contrib/groff/font/devps/ABI diff --git a/contrib/groff-1.19/font/devps/AI b/contrib/groff/font/devps/AI similarity index 100% rename from contrib/groff-1.19/font/devps/AI rename to contrib/groff/font/devps/AI diff --git a/contrib/groff-1.19/font/devps/AR b/contrib/groff/font/devps/AR similarity index 100% rename from contrib/groff-1.19/font/devps/AR rename to contrib/groff/font/devps/AR diff --git a/contrib/groff-1.19/font/devps/BMB b/contrib/groff/font/devps/BMB similarity index 100% rename from contrib/groff-1.19/font/devps/BMB rename to contrib/groff/font/devps/BMB diff --git a/contrib/groff-1.19/font/devps/BMBI b/contrib/groff/font/devps/BMBI similarity index 100% rename from contrib/groff-1.19/font/devps/BMBI rename to contrib/groff/font/devps/BMBI diff --git a/contrib/groff-1.19/font/devps/BMI b/contrib/groff/font/devps/BMI similarity index 100% rename from contrib/groff-1.19/font/devps/BMI rename to contrib/groff/font/devps/BMI diff --git a/contrib/groff-1.19/font/devps/BMR b/contrib/groff/font/devps/BMR similarity index 100% rename from contrib/groff-1.19/font/devps/BMR rename to contrib/groff/font/devps/BMR diff --git a/contrib/groff-1.19/font/devps/CB b/contrib/groff/font/devps/CB similarity index 100% rename from contrib/groff-1.19/font/devps/CB rename to contrib/groff/font/devps/CB diff --git a/contrib/groff-1.19/font/devps/CBI b/contrib/groff/font/devps/CBI similarity index 100% rename from contrib/groff-1.19/font/devps/CBI rename to contrib/groff/font/devps/CBI diff --git a/contrib/groff-1.19/font/devps/CI b/contrib/groff/font/devps/CI similarity index 100% rename from contrib/groff-1.19/font/devps/CI rename to contrib/groff/font/devps/CI diff --git a/contrib/groff-1.19/font/devps/CR b/contrib/groff/font/devps/CR similarity index 100% rename from contrib/groff-1.19/font/devps/CR rename to contrib/groff/font/devps/CR diff --git a/contrib/groff-1.19/font/devps/DESC.in b/contrib/groff/font/devps/DESC.in similarity index 100% rename from contrib/groff-1.19/font/devps/DESC.in rename to contrib/groff/font/devps/DESC.in diff --git a/contrib/groff-1.19/font/devps/EURO b/contrib/groff/font/devps/EURO similarity index 100% rename from contrib/groff-1.19/font/devps/EURO rename to contrib/groff/font/devps/EURO diff --git a/contrib/groff-1.19/font/devps/HB b/contrib/groff/font/devps/HB similarity index 100% rename from contrib/groff-1.19/font/devps/HB rename to contrib/groff/font/devps/HB diff --git a/contrib/groff-1.19/font/devps/HBI b/contrib/groff/font/devps/HBI similarity index 100% rename from contrib/groff-1.19/font/devps/HBI rename to contrib/groff/font/devps/HBI diff --git a/contrib/groff-1.19/font/devps/HI b/contrib/groff/font/devps/HI similarity index 100% rename from contrib/groff-1.19/font/devps/HI rename to contrib/groff/font/devps/HI diff --git a/contrib/groff-1.19/font/devps/HNB b/contrib/groff/font/devps/HNB similarity index 100% rename from contrib/groff-1.19/font/devps/HNB rename to contrib/groff/font/devps/HNB diff --git a/contrib/groff-1.19/font/devps/HNBI b/contrib/groff/font/devps/HNBI similarity index 100% rename from contrib/groff-1.19/font/devps/HNBI rename to contrib/groff/font/devps/HNBI diff --git a/contrib/groff-1.19/font/devps/HNI b/contrib/groff/font/devps/HNI similarity index 100% rename from contrib/groff-1.19/font/devps/HNI rename to contrib/groff/font/devps/HNI diff --git a/contrib/groff-1.19/font/devps/HNR b/contrib/groff/font/devps/HNR similarity index 100% rename from contrib/groff-1.19/font/devps/HNR rename to contrib/groff/font/devps/HNR diff --git a/contrib/groff-1.19/font/devps/HR b/contrib/groff/font/devps/HR similarity index 100% rename from contrib/groff-1.19/font/devps/HR rename to contrib/groff/font/devps/HR diff --git a/contrib/groff-1.19/font/devps/NB b/contrib/groff/font/devps/NB similarity index 100% rename from contrib/groff-1.19/font/devps/NB rename to contrib/groff/font/devps/NB diff --git a/contrib/groff-1.19/font/devps/NBI b/contrib/groff/font/devps/NBI similarity index 100% rename from contrib/groff-1.19/font/devps/NBI rename to contrib/groff/font/devps/NBI diff --git a/contrib/groff-1.19/font/devps/NI b/contrib/groff/font/devps/NI similarity index 100% rename from contrib/groff-1.19/font/devps/NI rename to contrib/groff/font/devps/NI diff --git a/contrib/groff-1.19/font/devps/NR b/contrib/groff/font/devps/NR similarity index 100% rename from contrib/groff-1.19/font/devps/NR rename to contrib/groff/font/devps/NR diff --git a/contrib/groff-1.19/font/devps/PB b/contrib/groff/font/devps/PB similarity index 100% rename from contrib/groff-1.19/font/devps/PB rename to contrib/groff/font/devps/PB diff --git a/contrib/groff-1.19/font/devps/PBI b/contrib/groff/font/devps/PBI similarity index 100% rename from contrib/groff-1.19/font/devps/PBI rename to contrib/groff/font/devps/PBI diff --git a/contrib/groff-1.19/font/devps/PI b/contrib/groff/font/devps/PI similarity index 100% rename from contrib/groff-1.19/font/devps/PI rename to contrib/groff/font/devps/PI diff --git a/contrib/groff-1.19/font/devps/PR b/contrib/groff/font/devps/PR similarity index 100% rename from contrib/groff-1.19/font/devps/PR rename to contrib/groff/font/devps/PR diff --git a/contrib/groff-1.19/font/devps/S b/contrib/groff/font/devps/S similarity index 100% rename from contrib/groff-1.19/font/devps/S rename to contrib/groff/font/devps/S diff --git a/contrib/groff-1.19/font/devps/SS b/contrib/groff/font/devps/SS similarity index 100% rename from contrib/groff-1.19/font/devps/SS rename to contrib/groff/font/devps/SS diff --git a/contrib/groff-1.19/font/devps/TB b/contrib/groff/font/devps/TB similarity index 100% rename from contrib/groff-1.19/font/devps/TB rename to contrib/groff/font/devps/TB diff --git a/contrib/groff-1.19/font/devps/TBI b/contrib/groff/font/devps/TBI similarity index 100% rename from contrib/groff-1.19/font/devps/TBI rename to contrib/groff/font/devps/TBI diff --git a/contrib/groff-1.19/font/devps/TI b/contrib/groff/font/devps/TI similarity index 100% rename from contrib/groff-1.19/font/devps/TI rename to contrib/groff/font/devps/TI diff --git a/contrib/groff-1.19/font/devps/TR b/contrib/groff/font/devps/TR similarity index 100% rename from contrib/groff-1.19/font/devps/TR rename to contrib/groff/font/devps/TR diff --git a/contrib/groff-1.19/font/devps/ZCMI b/contrib/groff/font/devps/ZCMI similarity index 100% rename from contrib/groff-1.19/font/devps/ZCMI rename to contrib/groff/font/devps/ZCMI diff --git a/contrib/groff-1.19/font/devps/ZD b/contrib/groff/font/devps/ZD similarity index 100% rename from contrib/groff-1.19/font/devps/ZD rename to contrib/groff/font/devps/ZD diff --git a/contrib/groff-1.19/font/devps/ZDR b/contrib/groff/font/devps/ZDR similarity index 100% rename from contrib/groff-1.19/font/devps/ZDR rename to contrib/groff/font/devps/ZDR diff --git a/contrib/groff-1.19/font/devps/download b/contrib/groff/font/devps/download similarity index 100% rename from contrib/groff-1.19/font/devps/download rename to contrib/groff/font/devps/download diff --git a/contrib/groff-1.19/font/devps/freeeuro.afm b/contrib/groff/font/devps/freeeuro.afm similarity index 100% rename from contrib/groff-1.19/font/devps/freeeuro.afm rename to contrib/groff/font/devps/freeeuro.afm diff --git a/contrib/groff-1.19/font/devps/freeeuro.pfa b/contrib/groff/font/devps/freeeuro.pfa similarity index 100% rename from contrib/groff-1.19/font/devps/freeeuro.pfa rename to contrib/groff/font/devps/freeeuro.pfa diff --git a/contrib/groff-1.19/font/devps/generate/Makefile b/contrib/groff/font/devps/generate/Makefile similarity index 100% rename from contrib/groff-1.19/font/devps/generate/Makefile rename to contrib/groff/font/devps/generate/Makefile diff --git a/contrib/groff-1.19/font/devps/generate/afmname b/contrib/groff/font/devps/generate/afmname similarity index 100% rename from contrib/groff-1.19/font/devps/generate/afmname rename to contrib/groff/font/devps/generate/afmname diff --git a/contrib/groff-1.19/font/devps/generate/dingbats.map b/contrib/groff/font/devps/generate/dingbats.map similarity index 100% rename from contrib/groff-1.19/font/devps/generate/dingbats.map rename to contrib/groff/font/devps/generate/dingbats.map diff --git a/contrib/groff-1.19/font/devps/generate/dingbats.rmap b/contrib/groff/font/devps/generate/dingbats.rmap similarity index 100% rename from contrib/groff-1.19/font/devps/generate/dingbats.rmap rename to contrib/groff/font/devps/generate/dingbats.rmap diff --git a/contrib/groff-1.19/font/devps/generate/freeeuro.sfd b/contrib/groff/font/devps/generate/freeeuro.sfd similarity index 100% rename from contrib/groff-1.19/font/devps/generate/freeeuro.sfd rename to contrib/groff/font/devps/generate/freeeuro.sfd diff --git a/contrib/groff-1.19/font/devps/generate/lgreekmap b/contrib/groff/font/devps/generate/lgreekmap similarity index 100% rename from contrib/groff-1.19/font/devps/generate/lgreekmap rename to contrib/groff/font/devps/generate/lgreekmap diff --git a/contrib/groff-1.19/font/devps/generate/sfdtopfa.pe b/contrib/groff/font/devps/generate/sfdtopfa.pe similarity index 100% rename from contrib/groff-1.19/font/devps/generate/sfdtopfa.pe rename to contrib/groff/font/devps/generate/sfdtopfa.pe diff --git a/contrib/groff-1.19/font/devps/generate/symbol.sed b/contrib/groff/font/devps/generate/symbol.sed similarity index 100% rename from contrib/groff-1.19/font/devps/generate/symbol.sed rename to contrib/groff/font/devps/generate/symbol.sed diff --git a/contrib/groff-1.19/font/devps/generate/symbolchars b/contrib/groff/font/devps/generate/symbolchars similarity index 100% rename from contrib/groff-1.19/font/devps/generate/symbolchars rename to contrib/groff/font/devps/generate/symbolchars diff --git a/contrib/groff-1.19/font/devps/generate/symbolsl.afm b/contrib/groff/font/devps/generate/symbolsl.afm similarity index 100% rename from contrib/groff-1.19/font/devps/generate/symbolsl.afm rename to contrib/groff/font/devps/generate/symbolsl.afm diff --git a/contrib/groff-1.19/font/devps/generate/textmap b/contrib/groff/font/devps/generate/textmap similarity index 100% rename from contrib/groff-1.19/font/devps/generate/textmap rename to contrib/groff/font/devps/generate/textmap diff --git a/contrib/groff-1.19/font/devps/prologue.ps b/contrib/groff/font/devps/prologue.ps similarity index 100% rename from contrib/groff-1.19/font/devps/prologue.ps rename to contrib/groff/font/devps/prologue.ps diff --git a/contrib/groff-1.19/font/devps/psstrip.sed b/contrib/groff/font/devps/psstrip.sed similarity index 100% rename from contrib/groff-1.19/font/devps/psstrip.sed rename to contrib/groff/font/devps/psstrip.sed diff --git a/contrib/groff-1.19/font/devps/symbol.afm b/contrib/groff/font/devps/symbol.afm similarity index 100% rename from contrib/groff-1.19/font/devps/symbol.afm rename to contrib/groff/font/devps/symbol.afm diff --git a/contrib/groff-1.19/font/devps/symbolmap b/contrib/groff/font/devps/symbolmap similarity index 100% rename from contrib/groff-1.19/font/devps/symbolmap rename to contrib/groff/font/devps/symbolmap diff --git a/contrib/groff-1.19/font/devps/symbolsl.ps b/contrib/groff/font/devps/symbolsl.ps similarity index 100% rename from contrib/groff-1.19/font/devps/symbolsl.ps rename to contrib/groff/font/devps/symbolsl.ps diff --git a/contrib/groff-1.19/font/devps/text.enc b/contrib/groff/font/devps/text.enc similarity index 100% rename from contrib/groff-1.19/font/devps/text.enc rename to contrib/groff/font/devps/text.enc diff --git a/contrib/groff-1.19/font/devps/zapfdr.afm b/contrib/groff/font/devps/zapfdr.afm similarity index 100% rename from contrib/groff-1.19/font/devps/zapfdr.afm rename to contrib/groff/font/devps/zapfdr.afm diff --git a/contrib/groff-1.19/font/devps/zapfdr.ps b/contrib/groff/font/devps/zapfdr.ps similarity index 100% rename from contrib/groff-1.19/font/devps/zapfdr.ps rename to contrib/groff/font/devps/zapfdr.ps diff --git a/contrib/groff-1.19/font/devutf8/DESC.proto b/contrib/groff/font/devutf8/DESC.proto similarity index 100% rename from contrib/groff-1.19/font/devutf8/DESC.proto rename to contrib/groff/font/devutf8/DESC.proto diff --git a/contrib/groff-1.19/font/devutf8/NOTES b/contrib/groff/font/devutf8/NOTES similarity index 100% rename from contrib/groff-1.19/font/devutf8/NOTES rename to contrib/groff/font/devutf8/NOTES diff --git a/contrib/groff-1.19/font/devutf8/R.proto b/contrib/groff/font/devutf8/R.proto similarity index 100% rename from contrib/groff-1.19/font/devutf8/R.proto rename to contrib/groff/font/devutf8/R.proto diff --git a/contrib/groff-1.19/man/ditroff.man b/contrib/groff/man/ditroff.man similarity index 100% rename from contrib/groff-1.19/man/ditroff.man rename to contrib/groff/man/ditroff.man diff --git a/contrib/groff-1.19/man/groff.man b/contrib/groff/man/groff.man similarity index 100% rename from contrib/groff-1.19/man/groff.man rename to contrib/groff/man/groff.man diff --git a/contrib/groff-1.19/man/groff_char.man b/contrib/groff/man/groff_char.man similarity index 100% rename from contrib/groff-1.19/man/groff_char.man rename to contrib/groff/man/groff_char.man diff --git a/contrib/groff-1.19/man/groff_diff.man b/contrib/groff/man/groff_diff.man similarity index 100% rename from contrib/groff-1.19/man/groff_diff.man rename to contrib/groff/man/groff_diff.man diff --git a/contrib/groff-1.19/man/groff_font.man b/contrib/groff/man/groff_font.man similarity index 100% rename from contrib/groff-1.19/man/groff_font.man rename to contrib/groff/man/groff_font.man diff --git a/contrib/groff-1.19/man/groff_out.man b/contrib/groff/man/groff_out.man similarity index 100% rename from contrib/groff-1.19/man/groff_out.man rename to contrib/groff/man/groff_out.man diff --git a/contrib/groff-1.19/man/groff_tmac.man b/contrib/groff/man/groff_tmac.man similarity index 100% rename from contrib/groff-1.19/man/groff_tmac.man rename to contrib/groff/man/groff_tmac.man diff --git a/contrib/groff-1.19/man/roff.man b/contrib/groff/man/roff.man similarity index 100% rename from contrib/groff-1.19/man/roff.man rename to contrib/groff/man/roff.man diff --git a/contrib/groff-1.19/mdate.sh b/contrib/groff/mdate.sh similarity index 100% rename from contrib/groff-1.19/mdate.sh rename to contrib/groff/mdate.sh diff --git a/contrib/groff-1.19/src/devices/grodvi/dvi.cpp b/contrib/groff/src/devices/grodvi/dvi.cpp similarity index 100% rename from contrib/groff-1.19/src/devices/grodvi/dvi.cpp rename to contrib/groff/src/devices/grodvi/dvi.cpp diff --git a/contrib/groff-1.19/src/devices/grodvi/grodvi.man b/contrib/groff/src/devices/grodvi/grodvi.man similarity index 100% rename from contrib/groff-1.19/src/devices/grodvi/grodvi.man rename to contrib/groff/src/devices/grodvi/grodvi.man diff --git a/contrib/groff-1.19/src/devices/grohtml/grohtml.man b/contrib/groff/src/devices/grohtml/grohtml.man similarity index 100% rename from contrib/groff-1.19/src/devices/grohtml/grohtml.man rename to contrib/groff/src/devices/grohtml/grohtml.man diff --git a/contrib/groff-1.19/src/devices/grohtml/html-table.cpp b/contrib/groff/src/devices/grohtml/html-table.cpp similarity index 100% rename from contrib/groff-1.19/src/devices/grohtml/html-table.cpp rename to contrib/groff/src/devices/grohtml/html-table.cpp diff --git a/contrib/groff-1.19/src/devices/grohtml/html-table.h b/contrib/groff/src/devices/grohtml/html-table.h similarity index 100% rename from contrib/groff-1.19/src/devices/grohtml/html-table.h rename to contrib/groff/src/devices/grohtml/html-table.h diff --git a/contrib/groff-1.19/src/devices/grohtml/html-text.cpp b/contrib/groff/src/devices/grohtml/html-text.cpp similarity index 100% rename from contrib/groff-1.19/src/devices/grohtml/html-text.cpp rename to contrib/groff/src/devices/grohtml/html-text.cpp diff --git a/contrib/groff-1.19/src/devices/grohtml/html-text.h b/contrib/groff/src/devices/grohtml/html-text.h similarity index 100% rename from contrib/groff-1.19/src/devices/grohtml/html-text.h rename to contrib/groff/src/devices/grohtml/html-text.h diff --git a/contrib/groff-1.19/src/devices/grohtml/html.h b/contrib/groff/src/devices/grohtml/html.h similarity index 100% rename from contrib/groff-1.19/src/devices/grohtml/html.h rename to contrib/groff/src/devices/grohtml/html.h diff --git a/contrib/groff-1.19/src/devices/grohtml/output.cpp b/contrib/groff/src/devices/grohtml/output.cpp similarity index 100% rename from contrib/groff-1.19/src/devices/grohtml/output.cpp rename to contrib/groff/src/devices/grohtml/output.cpp diff --git a/contrib/groff-1.19/src/devices/grohtml/post-html.cpp b/contrib/groff/src/devices/grohtml/post-html.cpp similarity index 100% rename from contrib/groff-1.19/src/devices/grohtml/post-html.cpp rename to contrib/groff/src/devices/grohtml/post-html.cpp diff --git a/contrib/groff-1.19/src/devices/grolbp/charset.h b/contrib/groff/src/devices/grolbp/charset.h similarity index 100% rename from contrib/groff-1.19/src/devices/grolbp/charset.h rename to contrib/groff/src/devices/grolbp/charset.h diff --git a/contrib/groff-1.19/src/devices/grolbp/grolbp.man b/contrib/groff/src/devices/grolbp/grolbp.man similarity index 100% rename from contrib/groff-1.19/src/devices/grolbp/grolbp.man rename to contrib/groff/src/devices/grolbp/grolbp.man diff --git a/contrib/groff-1.19/src/devices/grolbp/lbp.cpp b/contrib/groff/src/devices/grolbp/lbp.cpp similarity index 100% rename from contrib/groff-1.19/src/devices/grolbp/lbp.cpp rename to contrib/groff/src/devices/grolbp/lbp.cpp diff --git a/contrib/groff-1.19/src/devices/grolbp/lbp.h b/contrib/groff/src/devices/grolbp/lbp.h similarity index 100% rename from contrib/groff-1.19/src/devices/grolbp/lbp.h rename to contrib/groff/src/devices/grolbp/lbp.h diff --git a/contrib/groff-1.19/src/devices/grolj4/grolj4.man b/contrib/groff/src/devices/grolj4/grolj4.man similarity index 100% rename from contrib/groff-1.19/src/devices/grolj4/grolj4.man rename to contrib/groff/src/devices/grolj4/grolj4.man diff --git a/contrib/groff-1.19/src/devices/grolj4/lj4.cpp b/contrib/groff/src/devices/grolj4/lj4.cpp similarity index 100% rename from contrib/groff-1.19/src/devices/grolj4/lj4.cpp rename to contrib/groff/src/devices/grolj4/lj4.cpp diff --git a/contrib/groff-1.19/src/devices/grolj4/lj4_font.man b/contrib/groff/src/devices/grolj4/lj4_font.man similarity index 100% rename from contrib/groff-1.19/src/devices/grolj4/lj4_font.man rename to contrib/groff/src/devices/grolj4/lj4_font.man diff --git a/contrib/groff-1.19/src/devices/grops/grops.man b/contrib/groff/src/devices/grops/grops.man similarity index 100% rename from contrib/groff-1.19/src/devices/grops/grops.man rename to contrib/groff/src/devices/grops/grops.man diff --git a/contrib/groff-1.19/src/devices/grops/ps.cpp b/contrib/groff/src/devices/grops/ps.cpp similarity index 100% rename from contrib/groff-1.19/src/devices/grops/ps.cpp rename to contrib/groff/src/devices/grops/ps.cpp diff --git a/contrib/groff-1.19/src/devices/grops/ps.h b/contrib/groff/src/devices/grops/ps.h similarity index 100% rename from contrib/groff-1.19/src/devices/grops/ps.h rename to contrib/groff/src/devices/grops/ps.h diff --git a/contrib/groff-1.19/src/devices/grops/psfig.diff b/contrib/groff/src/devices/grops/psfig.diff similarity index 100% rename from contrib/groff-1.19/src/devices/grops/psfig.diff rename to contrib/groff/src/devices/grops/psfig.diff diff --git a/contrib/groff-1.19/src/devices/grops/psrm.cpp b/contrib/groff/src/devices/grops/psrm.cpp similarity index 100% rename from contrib/groff-1.19/src/devices/grops/psrm.cpp rename to contrib/groff/src/devices/grops/psrm.cpp diff --git a/contrib/groff-1.19/src/devices/grotty/grotty.man b/contrib/groff/src/devices/grotty/grotty.man similarity index 100% rename from contrib/groff-1.19/src/devices/grotty/grotty.man rename to contrib/groff/src/devices/grotty/grotty.man diff --git a/contrib/groff-1.19/src/devices/grotty/tty.cpp b/contrib/groff/src/devices/grotty/tty.cpp similarity index 100% rename from contrib/groff-1.19/src/devices/grotty/tty.cpp rename to contrib/groff/src/devices/grotty/tty.cpp diff --git a/contrib/groff-1.19/src/include/assert.h b/contrib/groff/src/include/assert.h similarity index 100% rename from contrib/groff-1.19/src/include/assert.h rename to contrib/groff/src/include/assert.h diff --git a/contrib/groff-1.19/src/include/cmap.h b/contrib/groff/src/include/cmap.h similarity index 100% rename from contrib/groff-1.19/src/include/cmap.h rename to contrib/groff/src/include/cmap.h diff --git a/contrib/groff-1.19/src/include/color.h b/contrib/groff/src/include/color.h similarity index 100% rename from contrib/groff-1.19/src/include/color.h rename to contrib/groff/src/include/color.h diff --git a/contrib/groff-1.19/src/include/config.hin b/contrib/groff/src/include/config.hin similarity index 100% rename from contrib/groff-1.19/src/include/config.hin rename to contrib/groff/src/include/config.hin diff --git a/contrib/groff-1.19/src/include/cset.h b/contrib/groff/src/include/cset.h similarity index 100% rename from contrib/groff-1.19/src/include/cset.h rename to contrib/groff/src/include/cset.h diff --git a/contrib/groff-1.19/src/include/device.h b/contrib/groff/src/include/device.h similarity index 100% rename from contrib/groff-1.19/src/include/device.h rename to contrib/groff/src/include/device.h diff --git a/contrib/groff-1.19/src/include/driver.h b/contrib/groff/src/include/driver.h similarity index 100% rename from contrib/groff-1.19/src/include/driver.h rename to contrib/groff/src/include/driver.h diff --git a/contrib/groff-1.19/src/include/errarg.h b/contrib/groff/src/include/errarg.h similarity index 100% rename from contrib/groff-1.19/src/include/errarg.h rename to contrib/groff/src/include/errarg.h diff --git a/contrib/groff-1.19/src/include/error.h b/contrib/groff/src/include/error.h similarity index 100% rename from contrib/groff-1.19/src/include/error.h rename to contrib/groff/src/include/error.h diff --git a/contrib/groff-1.19/src/include/font.h b/contrib/groff/src/include/font.h similarity index 100% rename from contrib/groff-1.19/src/include/font.h rename to contrib/groff/src/include/font.h diff --git a/contrib/groff-1.19/src/include/geometry.h b/contrib/groff/src/include/geometry.h similarity index 100% rename from contrib/groff-1.19/src/include/geometry.h rename to contrib/groff/src/include/geometry.h diff --git a/contrib/groff-1.19/src/include/html-strings.h b/contrib/groff/src/include/html-strings.h similarity index 100% rename from contrib/groff-1.19/src/include/html-strings.h rename to contrib/groff/src/include/html-strings.h diff --git a/contrib/groff-1.19/src/include/htmlhint.h b/contrib/groff/src/include/htmlhint.h similarity index 100% rename from contrib/groff-1.19/src/include/htmlhint.h rename to contrib/groff/src/include/htmlhint.h diff --git a/contrib/groff-1.19/src/include/index.h b/contrib/groff/src/include/index.h similarity index 100% rename from contrib/groff-1.19/src/include/index.h rename to contrib/groff/src/include/index.h diff --git a/contrib/groff-1.19/src/include/lib.h b/contrib/groff/src/include/lib.h similarity index 100% rename from contrib/groff-1.19/src/include/lib.h rename to contrib/groff/src/include/lib.h diff --git a/contrib/groff-1.19/src/include/macropath.h b/contrib/groff/src/include/macropath.h similarity index 100% rename from contrib/groff-1.19/src/include/macropath.h rename to contrib/groff/src/include/macropath.h diff --git a/contrib/groff-1.19/src/include/nonposix.h b/contrib/groff/src/include/nonposix.h similarity index 100% rename from contrib/groff-1.19/src/include/nonposix.h rename to contrib/groff/src/include/nonposix.h diff --git a/contrib/groff-1.19/src/include/paper.h b/contrib/groff/src/include/paper.h similarity index 100% rename from contrib/groff-1.19/src/include/paper.h rename to contrib/groff/src/include/paper.h diff --git a/contrib/groff-1.19/src/include/posix.h b/contrib/groff/src/include/posix.h similarity index 100% rename from contrib/groff-1.19/src/include/posix.h rename to contrib/groff/src/include/posix.h diff --git a/contrib/groff-1.19/src/include/printer.h b/contrib/groff/src/include/printer.h similarity index 100% rename from contrib/groff-1.19/src/include/printer.h rename to contrib/groff/src/include/printer.h diff --git a/contrib/groff-1.19/src/include/ptable.h b/contrib/groff/src/include/ptable.h similarity index 100% rename from contrib/groff-1.19/src/include/ptable.h rename to contrib/groff/src/include/ptable.h diff --git a/contrib/groff-1.19/src/include/refid.h b/contrib/groff/src/include/refid.h similarity index 100% rename from contrib/groff-1.19/src/include/refid.h rename to contrib/groff/src/include/refid.h diff --git a/contrib/groff-1.19/src/include/search.h b/contrib/groff/src/include/search.h similarity index 100% rename from contrib/groff-1.19/src/include/search.h rename to contrib/groff/src/include/search.h diff --git a/contrib/groff-1.19/src/include/searchpath.h b/contrib/groff/src/include/searchpath.h similarity index 100% rename from contrib/groff-1.19/src/include/searchpath.h rename to contrib/groff/src/include/searchpath.h diff --git a/contrib/groff-1.19/src/include/stringclass.h b/contrib/groff/src/include/stringclass.h similarity index 100% rename from contrib/groff-1.19/src/include/stringclass.h rename to contrib/groff/src/include/stringclass.h diff --git a/contrib/groff-1.19/src/include/symbol.h b/contrib/groff/src/include/symbol.h similarity index 100% rename from contrib/groff-1.19/src/include/symbol.h rename to contrib/groff/src/include/symbol.h diff --git a/contrib/groff-1.19/src/include/unicode.h b/contrib/groff/src/include/unicode.h similarity index 100% rename from contrib/groff-1.19/src/include/unicode.h rename to contrib/groff/src/include/unicode.h diff --git a/contrib/groff-1.19/src/libs/libbib/common.cpp b/contrib/groff/src/libs/libbib/common.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libbib/common.cpp rename to contrib/groff/src/libs/libbib/common.cpp diff --git a/contrib/groff-1.19/src/libs/libbib/index.cpp b/contrib/groff/src/libs/libbib/index.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libbib/index.cpp rename to contrib/groff/src/libs/libbib/index.cpp diff --git a/contrib/groff-1.19/src/libs/libbib/linear.cpp b/contrib/groff/src/libs/libbib/linear.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libbib/linear.cpp rename to contrib/groff/src/libs/libbib/linear.cpp diff --git a/contrib/groff-1.19/src/libs/libbib/map.c b/contrib/groff/src/libs/libbib/map.c similarity index 100% rename from contrib/groff-1.19/src/libs/libbib/map.c rename to contrib/groff/src/libs/libbib/map.c diff --git a/contrib/groff-1.19/src/libs/libbib/search.cpp b/contrib/groff/src/libs/libbib/search.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libbib/search.cpp rename to contrib/groff/src/libs/libbib/search.cpp diff --git a/contrib/groff-1.19/src/libs/libdriver/input.cpp b/contrib/groff/src/libs/libdriver/input.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libdriver/input.cpp rename to contrib/groff/src/libs/libdriver/input.cpp diff --git a/contrib/groff-1.19/src/libs/libdriver/printer.cpp b/contrib/groff/src/libs/libdriver/printer.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libdriver/printer.cpp rename to contrib/groff/src/libs/libdriver/printer.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/assert.cpp b/contrib/groff/src/libs/libgroff/assert.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/assert.cpp rename to contrib/groff/src/libs/libgroff/assert.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/change_lf.cpp b/contrib/groff/src/libs/libgroff/change_lf.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/change_lf.cpp rename to contrib/groff/src/libs/libgroff/change_lf.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/cmap.cpp b/contrib/groff/src/libs/libgroff/cmap.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/cmap.cpp rename to contrib/groff/src/libs/libgroff/cmap.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/color.cpp b/contrib/groff/src/libs/libgroff/color.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/color.cpp rename to contrib/groff/src/libs/libgroff/color.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/cset.cpp b/contrib/groff/src/libs/libgroff/cset.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/cset.cpp rename to contrib/groff/src/libs/libgroff/cset.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/device.cpp b/contrib/groff/src/libs/libgroff/device.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/device.cpp rename to contrib/groff/src/libs/libgroff/device.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/errarg.cpp b/contrib/groff/src/libs/libgroff/errarg.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/errarg.cpp rename to contrib/groff/src/libs/libgroff/errarg.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/error.cpp b/contrib/groff/src/libs/libgroff/error.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/error.cpp rename to contrib/groff/src/libs/libgroff/error.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/fatal.cpp b/contrib/groff/src/libs/libgroff/fatal.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/fatal.cpp rename to contrib/groff/src/libs/libgroff/fatal.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/filename.cpp b/contrib/groff/src/libs/libgroff/filename.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/filename.cpp rename to contrib/groff/src/libs/libgroff/filename.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/font.cpp b/contrib/groff/src/libs/libgroff/font.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/font.cpp rename to contrib/groff/src/libs/libgroff/font.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/fontfile.cpp b/contrib/groff/src/libs/libgroff/fontfile.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/fontfile.cpp rename to contrib/groff/src/libs/libgroff/fontfile.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/geometry.cpp b/contrib/groff/src/libs/libgroff/geometry.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/geometry.cpp rename to contrib/groff/src/libs/libgroff/geometry.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/glyphuni.cpp b/contrib/groff/src/libs/libgroff/glyphuni.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/glyphuni.cpp rename to contrib/groff/src/libs/libgroff/glyphuni.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/htmlhint.cpp b/contrib/groff/src/libs/libgroff/htmlhint.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/htmlhint.cpp rename to contrib/groff/src/libs/libgroff/htmlhint.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/hypot.cpp b/contrib/groff/src/libs/libgroff/hypot.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/hypot.cpp rename to contrib/groff/src/libs/libgroff/hypot.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/iftoa.c b/contrib/groff/src/libs/libgroff/iftoa.c similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/iftoa.c rename to contrib/groff/src/libs/libgroff/iftoa.c diff --git a/contrib/groff-1.19/src/libs/libgroff/invalid.cpp b/contrib/groff/src/libs/libgroff/invalid.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/invalid.cpp rename to contrib/groff/src/libs/libgroff/invalid.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/itoa.c b/contrib/groff/src/libs/libgroff/itoa.c similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/itoa.c rename to contrib/groff/src/libs/libgroff/itoa.c diff --git a/contrib/groff-1.19/src/libs/libgroff/lf.cpp b/contrib/groff/src/libs/libgroff/lf.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/lf.cpp rename to contrib/groff/src/libs/libgroff/lf.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/lineno.cpp b/contrib/groff/src/libs/libgroff/lineno.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/lineno.cpp rename to contrib/groff/src/libs/libgroff/lineno.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/macropath.cpp b/contrib/groff/src/libs/libgroff/macropath.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/macropath.cpp rename to contrib/groff/src/libs/libgroff/macropath.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/matherr.c b/contrib/groff/src/libs/libgroff/matherr.c similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/matherr.c rename to contrib/groff/src/libs/libgroff/matherr.c diff --git a/contrib/groff-1.19/src/libs/libgroff/maxfilename.cpp b/contrib/groff/src/libs/libgroff/maxfilename.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/maxfilename.cpp rename to contrib/groff/src/libs/libgroff/maxfilename.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/mksdir.cpp b/contrib/groff/src/libs/libgroff/mksdir.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/mksdir.cpp rename to contrib/groff/src/libs/libgroff/mksdir.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/nametoindex.cpp b/contrib/groff/src/libs/libgroff/nametoindex.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/nametoindex.cpp rename to contrib/groff/src/libs/libgroff/nametoindex.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/new.cpp b/contrib/groff/src/libs/libgroff/new.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/new.cpp rename to contrib/groff/src/libs/libgroff/new.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/paper.cpp b/contrib/groff/src/libs/libgroff/paper.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/paper.cpp rename to contrib/groff/src/libs/libgroff/paper.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/prime.cpp b/contrib/groff/src/libs/libgroff/prime.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/prime.cpp rename to contrib/groff/src/libs/libgroff/prime.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/progname.c b/contrib/groff/src/libs/libgroff/progname.c similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/progname.c rename to contrib/groff/src/libs/libgroff/progname.c diff --git a/contrib/groff-1.19/src/libs/libgroff/ptable.cpp b/contrib/groff/src/libs/libgroff/ptable.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/ptable.cpp rename to contrib/groff/src/libs/libgroff/ptable.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/quotearg.c b/contrib/groff/src/libs/libgroff/quotearg.c similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/quotearg.c rename to contrib/groff/src/libs/libgroff/quotearg.c diff --git a/contrib/groff-1.19/src/libs/libgroff/searchpath.cpp b/contrib/groff/src/libs/libgroff/searchpath.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/searchpath.cpp rename to contrib/groff/src/libs/libgroff/searchpath.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/spawnvp.c b/contrib/groff/src/libs/libgroff/spawnvp.c similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/spawnvp.c rename to contrib/groff/src/libs/libgroff/spawnvp.c diff --git a/contrib/groff-1.19/src/libs/libgroff/string.cpp b/contrib/groff/src/libs/libgroff/string.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/string.cpp rename to contrib/groff/src/libs/libgroff/string.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/strsave.cpp b/contrib/groff/src/libs/libgroff/strsave.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/strsave.cpp rename to contrib/groff/src/libs/libgroff/strsave.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/symbol.cpp b/contrib/groff/src/libs/libgroff/symbol.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/symbol.cpp rename to contrib/groff/src/libs/libgroff/symbol.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/tmpfile.cpp b/contrib/groff/src/libs/libgroff/tmpfile.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/tmpfile.cpp rename to contrib/groff/src/libs/libgroff/tmpfile.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/tmpname.cpp b/contrib/groff/src/libs/libgroff/tmpname.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/tmpname.cpp rename to contrib/groff/src/libs/libgroff/tmpname.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/unicode.cpp b/contrib/groff/src/libs/libgroff/unicode.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/unicode.cpp rename to contrib/groff/src/libs/libgroff/unicode.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/uniglyph.cpp b/contrib/groff/src/libs/libgroff/uniglyph.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/uniglyph.cpp rename to contrib/groff/src/libs/libgroff/uniglyph.cpp diff --git a/contrib/groff-1.19/src/libs/libgroff/uniuni.cpp b/contrib/groff/src/libs/libgroff/uniuni.cpp similarity index 100% rename from contrib/groff-1.19/src/libs/libgroff/uniuni.cpp rename to contrib/groff/src/libs/libgroff/uniuni.cpp diff --git a/contrib/groff-1.19/src/preproc/eqn/box.cpp b/contrib/groff/src/preproc/eqn/box.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/box.cpp rename to contrib/groff/src/preproc/eqn/box.cpp diff --git a/contrib/groff-1.19/src/preproc/eqn/box.h b/contrib/groff/src/preproc/eqn/box.h similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/box.h rename to contrib/groff/src/preproc/eqn/box.h diff --git a/contrib/groff-1.19/src/preproc/eqn/delim.cpp b/contrib/groff/src/preproc/eqn/delim.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/delim.cpp rename to contrib/groff/src/preproc/eqn/delim.cpp diff --git a/contrib/groff-1.19/src/preproc/eqn/eqn.cpp b/contrib/groff/src/preproc/eqn/eqn.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/eqn.cpp rename to contrib/groff/src/preproc/eqn/eqn.cpp diff --git a/contrib/groff-1.19/src/preproc/eqn/eqn.h b/contrib/groff/src/preproc/eqn/eqn.h similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/eqn.h rename to contrib/groff/src/preproc/eqn/eqn.h diff --git a/contrib/groff-1.19/src/preproc/eqn/eqn.man b/contrib/groff/src/preproc/eqn/eqn.man similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/eqn.man rename to contrib/groff/src/preproc/eqn/eqn.man diff --git a/contrib/groff-1.19/src/preproc/eqn/eqn.y b/contrib/groff/src/preproc/eqn/eqn.y similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/eqn.y rename to contrib/groff/src/preproc/eqn/eqn.y diff --git a/contrib/groff-1.19/src/preproc/eqn/eqn_tab.h b/contrib/groff/src/preproc/eqn/eqn_tab.h similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/eqn_tab.h rename to contrib/groff/src/preproc/eqn/eqn_tab.h diff --git a/contrib/groff-1.19/src/preproc/eqn/lex.cpp b/contrib/groff/src/preproc/eqn/lex.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/lex.cpp rename to contrib/groff/src/preproc/eqn/lex.cpp diff --git a/contrib/groff-1.19/src/preproc/eqn/limit.cpp b/contrib/groff/src/preproc/eqn/limit.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/limit.cpp rename to contrib/groff/src/preproc/eqn/limit.cpp diff --git a/contrib/groff-1.19/src/preproc/eqn/list.cpp b/contrib/groff/src/preproc/eqn/list.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/list.cpp rename to contrib/groff/src/preproc/eqn/list.cpp diff --git a/contrib/groff-1.19/src/preproc/eqn/main.cpp b/contrib/groff/src/preproc/eqn/main.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/main.cpp rename to contrib/groff/src/preproc/eqn/main.cpp diff --git a/contrib/groff-1.19/src/preproc/eqn/mark.cpp b/contrib/groff/src/preproc/eqn/mark.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/mark.cpp rename to contrib/groff/src/preproc/eqn/mark.cpp diff --git a/contrib/groff-1.19/src/preproc/eqn/neqn.man b/contrib/groff/src/preproc/eqn/neqn.man similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/neqn.man rename to contrib/groff/src/preproc/eqn/neqn.man diff --git a/contrib/groff-1.19/src/preproc/eqn/neqn.sh b/contrib/groff/src/preproc/eqn/neqn.sh similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/neqn.sh rename to contrib/groff/src/preproc/eqn/neqn.sh diff --git a/contrib/groff-1.19/src/preproc/eqn/other.cpp b/contrib/groff/src/preproc/eqn/other.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/other.cpp rename to contrib/groff/src/preproc/eqn/other.cpp diff --git a/contrib/groff-1.19/src/preproc/eqn/over.cpp b/contrib/groff/src/preproc/eqn/over.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/over.cpp rename to contrib/groff/src/preproc/eqn/over.cpp diff --git a/contrib/groff-1.19/src/preproc/eqn/pbox.h b/contrib/groff/src/preproc/eqn/pbox.h similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/pbox.h rename to contrib/groff/src/preproc/eqn/pbox.h diff --git a/contrib/groff-1.19/src/preproc/eqn/pile.cpp b/contrib/groff/src/preproc/eqn/pile.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/pile.cpp rename to contrib/groff/src/preproc/eqn/pile.cpp diff --git a/contrib/groff-1.19/src/preproc/eqn/script.cpp b/contrib/groff/src/preproc/eqn/script.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/script.cpp rename to contrib/groff/src/preproc/eqn/script.cpp diff --git a/contrib/groff-1.19/src/preproc/eqn/special.cpp b/contrib/groff/src/preproc/eqn/special.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/special.cpp rename to contrib/groff/src/preproc/eqn/special.cpp diff --git a/contrib/groff-1.19/src/preproc/eqn/sqrt.cpp b/contrib/groff/src/preproc/eqn/sqrt.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/sqrt.cpp rename to contrib/groff/src/preproc/eqn/sqrt.cpp diff --git a/contrib/groff-1.19/src/preproc/eqn/text.cpp b/contrib/groff/src/preproc/eqn/text.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/eqn/text.cpp rename to contrib/groff/src/preproc/eqn/text.cpp diff --git a/contrib/groff-1.19/src/preproc/grn/gprint.h b/contrib/groff/src/preproc/grn/gprint.h similarity index 100% rename from contrib/groff-1.19/src/preproc/grn/gprint.h rename to contrib/groff/src/preproc/grn/gprint.h diff --git a/contrib/groff-1.19/src/preproc/grn/grn.man b/contrib/groff/src/preproc/grn/grn.man similarity index 100% rename from contrib/groff-1.19/src/preproc/grn/grn.man rename to contrib/groff/src/preproc/grn/grn.man diff --git a/contrib/groff-1.19/src/preproc/grn/hdb.cpp b/contrib/groff/src/preproc/grn/hdb.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/grn/hdb.cpp rename to contrib/groff/src/preproc/grn/hdb.cpp diff --git a/contrib/groff-1.19/src/preproc/grn/hgraph.cpp b/contrib/groff/src/preproc/grn/hgraph.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/grn/hgraph.cpp rename to contrib/groff/src/preproc/grn/hgraph.cpp diff --git a/contrib/groff-1.19/src/preproc/grn/hpoint.cpp b/contrib/groff/src/preproc/grn/hpoint.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/grn/hpoint.cpp rename to contrib/groff/src/preproc/grn/hpoint.cpp diff --git a/contrib/groff-1.19/src/preproc/grn/main.cpp b/contrib/groff/src/preproc/grn/main.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/grn/main.cpp rename to contrib/groff/src/preproc/grn/main.cpp diff --git a/contrib/groff-1.19/src/preproc/html/pre-html.cpp b/contrib/groff/src/preproc/html/pre-html.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/html/pre-html.cpp rename to contrib/groff/src/preproc/html/pre-html.cpp diff --git a/contrib/groff-1.19/src/preproc/html/pre-html.h b/contrib/groff/src/preproc/html/pre-html.h similarity index 100% rename from contrib/groff-1.19/src/preproc/html/pre-html.h rename to contrib/groff/src/preproc/html/pre-html.h diff --git a/contrib/groff-1.19/src/preproc/html/pushback.cpp b/contrib/groff/src/preproc/html/pushback.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/html/pushback.cpp rename to contrib/groff/src/preproc/html/pushback.cpp diff --git a/contrib/groff-1.19/src/preproc/html/pushback.h b/contrib/groff/src/preproc/html/pushback.h similarity index 100% rename from contrib/groff-1.19/src/preproc/html/pushback.h rename to contrib/groff/src/preproc/html/pushback.h diff --git a/contrib/groff-1.19/src/preproc/pic/common.cpp b/contrib/groff/src/preproc/pic/common.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/pic/common.cpp rename to contrib/groff/src/preproc/pic/common.cpp diff --git a/contrib/groff-1.19/src/preproc/pic/common.h b/contrib/groff/src/preproc/pic/common.h similarity index 100% rename from contrib/groff-1.19/src/preproc/pic/common.h rename to contrib/groff/src/preproc/pic/common.h diff --git a/contrib/groff-1.19/src/preproc/pic/lex.cpp b/contrib/groff/src/preproc/pic/lex.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/pic/lex.cpp rename to contrib/groff/src/preproc/pic/lex.cpp diff --git a/contrib/groff-1.19/src/preproc/pic/main.cpp b/contrib/groff/src/preproc/pic/main.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/pic/main.cpp rename to contrib/groff/src/preproc/pic/main.cpp diff --git a/contrib/groff-1.19/src/preproc/pic/object.cpp b/contrib/groff/src/preproc/pic/object.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/pic/object.cpp rename to contrib/groff/src/preproc/pic/object.cpp diff --git a/contrib/groff-1.19/src/preproc/pic/object.h b/contrib/groff/src/preproc/pic/object.h similarity index 100% rename from contrib/groff-1.19/src/preproc/pic/object.h rename to contrib/groff/src/preproc/pic/object.h diff --git a/contrib/groff-1.19/src/preproc/pic/output.h b/contrib/groff/src/preproc/pic/output.h similarity index 100% rename from contrib/groff-1.19/src/preproc/pic/output.h rename to contrib/groff/src/preproc/pic/output.h diff --git a/contrib/groff-1.19/src/preproc/pic/pic.cpp b/contrib/groff/src/preproc/pic/pic.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/pic/pic.cpp rename to contrib/groff/src/preproc/pic/pic.cpp diff --git a/contrib/groff-1.19/src/preproc/pic/pic.h b/contrib/groff/src/preproc/pic/pic.h similarity index 100% rename from contrib/groff-1.19/src/preproc/pic/pic.h rename to contrib/groff/src/preproc/pic/pic.h diff --git a/contrib/groff-1.19/src/preproc/pic/pic.man b/contrib/groff/src/preproc/pic/pic.man similarity index 100% rename from contrib/groff-1.19/src/preproc/pic/pic.man rename to contrib/groff/src/preproc/pic/pic.man diff --git a/contrib/groff-1.19/src/preproc/pic/pic.y b/contrib/groff/src/preproc/pic/pic.y similarity index 100% rename from contrib/groff-1.19/src/preproc/pic/pic.y rename to contrib/groff/src/preproc/pic/pic.y diff --git a/contrib/groff-1.19/src/preproc/pic/pic_tab.h b/contrib/groff/src/preproc/pic/pic_tab.h similarity index 100% rename from contrib/groff-1.19/src/preproc/pic/pic_tab.h rename to contrib/groff/src/preproc/pic/pic_tab.h diff --git a/contrib/groff-1.19/src/preproc/pic/position.h b/contrib/groff/src/preproc/pic/position.h similarity index 100% rename from contrib/groff-1.19/src/preproc/pic/position.h rename to contrib/groff/src/preproc/pic/position.h diff --git a/contrib/groff-1.19/src/preproc/pic/tex.cpp b/contrib/groff/src/preproc/pic/tex.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/pic/tex.cpp rename to contrib/groff/src/preproc/pic/tex.cpp diff --git a/contrib/groff-1.19/src/preproc/pic/text.h b/contrib/groff/src/preproc/pic/text.h similarity index 100% rename from contrib/groff-1.19/src/preproc/pic/text.h rename to contrib/groff/src/preproc/pic/text.h diff --git a/contrib/groff-1.19/src/preproc/pic/troff.cpp b/contrib/groff/src/preproc/pic/troff.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/pic/troff.cpp rename to contrib/groff/src/preproc/pic/troff.cpp diff --git a/contrib/groff-1.19/src/preproc/refer/command.cpp b/contrib/groff/src/preproc/refer/command.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/refer/command.cpp rename to contrib/groff/src/preproc/refer/command.cpp diff --git a/contrib/groff-1.19/src/preproc/refer/command.h b/contrib/groff/src/preproc/refer/command.h similarity index 100% rename from contrib/groff-1.19/src/preproc/refer/command.h rename to contrib/groff/src/preproc/refer/command.h diff --git a/contrib/groff-1.19/src/preproc/refer/label.cpp b/contrib/groff/src/preproc/refer/label.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/refer/label.cpp rename to contrib/groff/src/preproc/refer/label.cpp diff --git a/contrib/groff-1.19/src/preproc/refer/label.y b/contrib/groff/src/preproc/refer/label.y similarity index 100% rename from contrib/groff-1.19/src/preproc/refer/label.y rename to contrib/groff/src/preproc/refer/label.y diff --git a/contrib/groff-1.19/src/preproc/refer/ref.cpp b/contrib/groff/src/preproc/refer/ref.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/refer/ref.cpp rename to contrib/groff/src/preproc/refer/ref.cpp diff --git a/contrib/groff-1.19/src/preproc/refer/ref.h b/contrib/groff/src/preproc/refer/ref.h similarity index 100% rename from contrib/groff-1.19/src/preproc/refer/ref.h rename to contrib/groff/src/preproc/refer/ref.h diff --git a/contrib/groff-1.19/src/preproc/refer/refer.cpp b/contrib/groff/src/preproc/refer/refer.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/refer/refer.cpp rename to contrib/groff/src/preproc/refer/refer.cpp diff --git a/contrib/groff-1.19/src/preproc/refer/refer.h b/contrib/groff/src/preproc/refer/refer.h similarity index 100% rename from contrib/groff-1.19/src/preproc/refer/refer.h rename to contrib/groff/src/preproc/refer/refer.h diff --git a/contrib/groff-1.19/src/preproc/refer/refer.man b/contrib/groff/src/preproc/refer/refer.man similarity index 100% rename from contrib/groff-1.19/src/preproc/refer/refer.man rename to contrib/groff/src/preproc/refer/refer.man diff --git a/contrib/groff-1.19/src/preproc/refer/token.cpp b/contrib/groff/src/preproc/refer/token.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/refer/token.cpp rename to contrib/groff/src/preproc/refer/token.cpp diff --git a/contrib/groff-1.19/src/preproc/refer/token.h b/contrib/groff/src/preproc/refer/token.h similarity index 100% rename from contrib/groff-1.19/src/preproc/refer/token.h rename to contrib/groff/src/preproc/refer/token.h diff --git a/contrib/groff-1.19/src/preproc/soelim/soelim.cpp b/contrib/groff/src/preproc/soelim/soelim.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/soelim/soelim.cpp rename to contrib/groff/src/preproc/soelim/soelim.cpp diff --git a/contrib/groff-1.19/src/preproc/soelim/soelim.man b/contrib/groff/src/preproc/soelim/soelim.man similarity index 100% rename from contrib/groff-1.19/src/preproc/soelim/soelim.man rename to contrib/groff/src/preproc/soelim/soelim.man diff --git a/contrib/groff-1.19/src/preproc/tbl/main.cpp b/contrib/groff/src/preproc/tbl/main.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/tbl/main.cpp rename to contrib/groff/src/preproc/tbl/main.cpp diff --git a/contrib/groff-1.19/src/preproc/tbl/table.cpp b/contrib/groff/src/preproc/tbl/table.cpp similarity index 100% rename from contrib/groff-1.19/src/preproc/tbl/table.cpp rename to contrib/groff/src/preproc/tbl/table.cpp diff --git a/contrib/groff-1.19/src/preproc/tbl/table.h b/contrib/groff/src/preproc/tbl/table.h similarity index 100% rename from contrib/groff-1.19/src/preproc/tbl/table.h rename to contrib/groff/src/preproc/tbl/table.h diff --git a/contrib/groff-1.19/src/preproc/tbl/tbl.man b/contrib/groff/src/preproc/tbl/tbl.man similarity index 100% rename from contrib/groff-1.19/src/preproc/tbl/tbl.man rename to contrib/groff/src/preproc/tbl/tbl.man diff --git a/contrib/groff-1.19/src/roff/groff/groff.cpp b/contrib/groff/src/roff/groff/groff.cpp similarity index 100% rename from contrib/groff-1.19/src/roff/groff/groff.cpp rename to contrib/groff/src/roff/groff/groff.cpp diff --git a/contrib/groff-1.19/src/roff/groff/groff.man b/contrib/groff/src/roff/groff/groff.man similarity index 100% rename from contrib/groff-1.19/src/roff/groff/groff.man rename to contrib/groff/src/roff/groff/groff.man diff --git a/contrib/groff-1.19/src/roff/groff/pipeline.c b/contrib/groff/src/roff/groff/pipeline.c similarity index 100% rename from contrib/groff-1.19/src/roff/groff/pipeline.c rename to contrib/groff/src/roff/groff/pipeline.c diff --git a/contrib/groff-1.19/src/roff/groff/pipeline.h b/contrib/groff/src/roff/groff/pipeline.h similarity index 100% rename from contrib/groff-1.19/src/roff/groff/pipeline.h rename to contrib/groff/src/roff/groff/pipeline.h diff --git a/contrib/groff-1.19/src/roff/grog/grog.man b/contrib/groff/src/roff/grog/grog.man similarity index 100% rename from contrib/groff-1.19/src/roff/grog/grog.man rename to contrib/groff/src/roff/grog/grog.man diff --git a/contrib/groff-1.19/src/roff/grog/grog.pl b/contrib/groff/src/roff/grog/grog.pl similarity index 100% rename from contrib/groff-1.19/src/roff/grog/grog.pl rename to contrib/groff/src/roff/grog/grog.pl diff --git a/contrib/groff-1.19/src/roff/grog/grog.sh b/contrib/groff/src/roff/grog/grog.sh similarity index 100% rename from contrib/groff-1.19/src/roff/grog/grog.sh rename to contrib/groff/src/roff/grog/grog.sh diff --git a/contrib/groff-1.19/src/roff/nroff/nroff.man b/contrib/groff/src/roff/nroff/nroff.man similarity index 100% rename from contrib/groff-1.19/src/roff/nroff/nroff.man rename to contrib/groff/src/roff/nroff/nroff.man diff --git a/contrib/groff-1.19/src/roff/nroff/nroff.sh b/contrib/groff/src/roff/nroff/nroff.sh similarity index 100% rename from contrib/groff-1.19/src/roff/nroff/nroff.sh rename to contrib/groff/src/roff/nroff/nroff.sh diff --git a/contrib/groff-1.19/src/roff/troff/charinfo.h b/contrib/groff/src/roff/troff/charinfo.h similarity index 100% rename from contrib/groff-1.19/src/roff/troff/charinfo.h rename to contrib/groff/src/roff/troff/charinfo.h diff --git a/contrib/groff-1.19/src/roff/troff/column.cpp b/contrib/groff/src/roff/troff/column.cpp similarity index 100% rename from contrib/groff-1.19/src/roff/troff/column.cpp rename to contrib/groff/src/roff/troff/column.cpp diff --git a/contrib/groff-1.19/src/roff/troff/dictionary.cpp b/contrib/groff/src/roff/troff/dictionary.cpp similarity index 100% rename from contrib/groff-1.19/src/roff/troff/dictionary.cpp rename to contrib/groff/src/roff/troff/dictionary.cpp diff --git a/contrib/groff-1.19/src/roff/troff/dictionary.h b/contrib/groff/src/roff/troff/dictionary.h similarity index 100% rename from contrib/groff-1.19/src/roff/troff/dictionary.h rename to contrib/groff/src/roff/troff/dictionary.h diff --git a/contrib/groff-1.19/src/roff/troff/div.cpp b/contrib/groff/src/roff/troff/div.cpp similarity index 100% rename from contrib/groff-1.19/src/roff/troff/div.cpp rename to contrib/groff/src/roff/troff/div.cpp diff --git a/contrib/groff-1.19/src/roff/troff/div.h b/contrib/groff/src/roff/troff/div.h similarity index 100% rename from contrib/groff-1.19/src/roff/troff/div.h rename to contrib/groff/src/roff/troff/div.h diff --git a/contrib/groff-1.19/src/roff/troff/env.cpp b/contrib/groff/src/roff/troff/env.cpp similarity index 100% rename from contrib/groff-1.19/src/roff/troff/env.cpp rename to contrib/groff/src/roff/troff/env.cpp diff --git a/contrib/groff-1.19/src/roff/troff/env.h b/contrib/groff/src/roff/troff/env.h similarity index 100% rename from contrib/groff-1.19/src/roff/troff/env.h rename to contrib/groff/src/roff/troff/env.h diff --git a/contrib/groff-1.19/src/roff/troff/hvunits.h b/contrib/groff/src/roff/troff/hvunits.h similarity index 100% rename from contrib/groff-1.19/src/roff/troff/hvunits.h rename to contrib/groff/src/roff/troff/hvunits.h diff --git a/contrib/groff-1.19/src/roff/troff/input.cpp b/contrib/groff/src/roff/troff/input.cpp similarity index 100% rename from contrib/groff-1.19/src/roff/troff/input.cpp rename to contrib/groff/src/roff/troff/input.cpp diff --git a/contrib/groff-1.19/src/roff/troff/input.h b/contrib/groff/src/roff/troff/input.h similarity index 100% rename from contrib/groff-1.19/src/roff/troff/input.h rename to contrib/groff/src/roff/troff/input.h diff --git a/contrib/groff-1.19/src/roff/troff/mtsm.cpp b/contrib/groff/src/roff/troff/mtsm.cpp similarity index 100% rename from contrib/groff-1.19/src/roff/troff/mtsm.cpp rename to contrib/groff/src/roff/troff/mtsm.cpp diff --git a/contrib/groff-1.19/src/roff/troff/mtsm.h b/contrib/groff/src/roff/troff/mtsm.h similarity index 100% rename from contrib/groff-1.19/src/roff/troff/mtsm.h rename to contrib/groff/src/roff/troff/mtsm.h diff --git a/contrib/groff-1.19/src/roff/troff/node.cpp b/contrib/groff/src/roff/troff/node.cpp similarity index 100% rename from contrib/groff-1.19/src/roff/troff/node.cpp rename to contrib/groff/src/roff/troff/node.cpp diff --git a/contrib/groff-1.19/src/roff/troff/node.h b/contrib/groff/src/roff/troff/node.h similarity index 100% rename from contrib/groff-1.19/src/roff/troff/node.h rename to contrib/groff/src/roff/troff/node.h diff --git a/contrib/groff-1.19/src/roff/troff/number.cpp b/contrib/groff/src/roff/troff/number.cpp similarity index 100% rename from contrib/groff-1.19/src/roff/troff/number.cpp rename to contrib/groff/src/roff/troff/number.cpp diff --git a/contrib/groff-1.19/src/roff/troff/reg.cpp b/contrib/groff/src/roff/troff/reg.cpp similarity index 100% rename from contrib/groff-1.19/src/roff/troff/reg.cpp rename to contrib/groff/src/roff/troff/reg.cpp diff --git a/contrib/groff-1.19/src/roff/troff/reg.h b/contrib/groff/src/roff/troff/reg.h similarity index 100% rename from contrib/groff-1.19/src/roff/troff/reg.h rename to contrib/groff/src/roff/troff/reg.h diff --git a/contrib/groff-1.19/src/roff/troff/request.h b/contrib/groff/src/roff/troff/request.h similarity index 100% rename from contrib/groff-1.19/src/roff/troff/request.h rename to contrib/groff/src/roff/troff/request.h diff --git a/contrib/groff-1.19/src/roff/troff/token.h b/contrib/groff/src/roff/troff/token.h similarity index 100% rename from contrib/groff-1.19/src/roff/troff/token.h rename to contrib/groff/src/roff/troff/token.h diff --git a/contrib/groff-1.19/src/roff/troff/troff.h b/contrib/groff/src/roff/troff/troff.h similarity index 100% rename from contrib/groff-1.19/src/roff/troff/troff.h rename to contrib/groff/src/roff/troff/troff.h diff --git a/contrib/groff-1.19/src/roff/troff/troff.man b/contrib/groff/src/roff/troff/troff.man similarity index 100% rename from contrib/groff-1.19/src/roff/troff/troff.man rename to contrib/groff/src/roff/troff/troff.man diff --git a/contrib/groff-1.19/src/utils/addftinfo/addftinfo.cpp b/contrib/groff/src/utils/addftinfo/addftinfo.cpp similarity index 100% rename from contrib/groff-1.19/src/utils/addftinfo/addftinfo.cpp rename to contrib/groff/src/utils/addftinfo/addftinfo.cpp diff --git a/contrib/groff-1.19/src/utils/addftinfo/addftinfo.man b/contrib/groff/src/utils/addftinfo/addftinfo.man similarity index 100% rename from contrib/groff-1.19/src/utils/addftinfo/addftinfo.man rename to contrib/groff/src/utils/addftinfo/addftinfo.man diff --git a/contrib/groff-1.19/src/utils/addftinfo/guess.cpp b/contrib/groff/src/utils/addftinfo/guess.cpp similarity index 100% rename from contrib/groff-1.19/src/utils/addftinfo/guess.cpp rename to contrib/groff/src/utils/addftinfo/guess.cpp diff --git a/contrib/groff-1.19/src/utils/addftinfo/guess.h b/contrib/groff/src/utils/addftinfo/guess.h similarity index 100% rename from contrib/groff-1.19/src/utils/addftinfo/guess.h rename to contrib/groff/src/utils/addftinfo/guess.h diff --git a/contrib/groff-1.19/src/utils/afmtodit/afmtodit.man b/contrib/groff/src/utils/afmtodit/afmtodit.man similarity index 100% rename from contrib/groff-1.19/src/utils/afmtodit/afmtodit.man rename to contrib/groff/src/utils/afmtodit/afmtodit.man diff --git a/contrib/groff-1.19/src/utils/afmtodit/afmtodit.pl b/contrib/groff/src/utils/afmtodit/afmtodit.pl similarity index 100% rename from contrib/groff-1.19/src/utils/afmtodit/afmtodit.pl rename to contrib/groff/src/utils/afmtodit/afmtodit.pl diff --git a/contrib/groff-1.19/src/utils/hpftodit/hpftodit.cpp b/contrib/groff/src/utils/hpftodit/hpftodit.cpp similarity index 100% rename from contrib/groff-1.19/src/utils/hpftodit/hpftodit.cpp rename to contrib/groff/src/utils/hpftodit/hpftodit.cpp diff --git a/contrib/groff-1.19/src/utils/hpftodit/hpftodit.man b/contrib/groff/src/utils/hpftodit/hpftodit.man similarity index 100% rename from contrib/groff-1.19/src/utils/hpftodit/hpftodit.man rename to contrib/groff/src/utils/hpftodit/hpftodit.man diff --git a/contrib/groff-1.19/src/utils/hpftodit/hpuni.cpp b/contrib/groff/src/utils/hpftodit/hpuni.cpp similarity index 100% rename from contrib/groff-1.19/src/utils/hpftodit/hpuni.cpp rename to contrib/groff/src/utils/hpftodit/hpuni.cpp diff --git a/contrib/groff-1.19/src/utils/indxbib/eign b/contrib/groff/src/utils/indxbib/eign similarity index 100% rename from contrib/groff-1.19/src/utils/indxbib/eign rename to contrib/groff/src/utils/indxbib/eign diff --git a/contrib/groff-1.19/src/utils/indxbib/indxbib.cpp b/contrib/groff/src/utils/indxbib/indxbib.cpp similarity index 100% rename from contrib/groff-1.19/src/utils/indxbib/indxbib.cpp rename to contrib/groff/src/utils/indxbib/indxbib.cpp diff --git a/contrib/groff-1.19/src/utils/indxbib/indxbib.man b/contrib/groff/src/utils/indxbib/indxbib.man similarity index 100% rename from contrib/groff-1.19/src/utils/indxbib/indxbib.man rename to contrib/groff/src/utils/indxbib/indxbib.man diff --git a/contrib/groff-1.19/src/utils/indxbib/signal.c b/contrib/groff/src/utils/indxbib/signal.c similarity index 100% rename from contrib/groff-1.19/src/utils/indxbib/signal.c rename to contrib/groff/src/utils/indxbib/signal.c diff --git a/contrib/groff-1.19/src/utils/lkbib/lkbib.cpp b/contrib/groff/src/utils/lkbib/lkbib.cpp similarity index 100% rename from contrib/groff-1.19/src/utils/lkbib/lkbib.cpp rename to contrib/groff/src/utils/lkbib/lkbib.cpp diff --git a/contrib/groff-1.19/src/utils/lkbib/lkbib.man b/contrib/groff/src/utils/lkbib/lkbib.man similarity index 100% rename from contrib/groff-1.19/src/utils/lkbib/lkbib.man rename to contrib/groff/src/utils/lkbib/lkbib.man diff --git a/contrib/groff-1.19/src/utils/lookbib/lookbib.cpp b/contrib/groff/src/utils/lookbib/lookbib.cpp similarity index 100% rename from contrib/groff-1.19/src/utils/lookbib/lookbib.cpp rename to contrib/groff/src/utils/lookbib/lookbib.cpp diff --git a/contrib/groff-1.19/src/utils/lookbib/lookbib.man b/contrib/groff/src/utils/lookbib/lookbib.man similarity index 100% rename from contrib/groff-1.19/src/utils/lookbib/lookbib.man rename to contrib/groff/src/utils/lookbib/lookbib.man diff --git a/contrib/groff-1.19/src/utils/pfbtops/pfbtops.c b/contrib/groff/src/utils/pfbtops/pfbtops.c similarity index 100% rename from contrib/groff-1.19/src/utils/pfbtops/pfbtops.c rename to contrib/groff/src/utils/pfbtops/pfbtops.c diff --git a/contrib/groff-1.19/src/utils/pfbtops/pfbtops.man b/contrib/groff/src/utils/pfbtops/pfbtops.man similarity index 100% rename from contrib/groff-1.19/src/utils/pfbtops/pfbtops.man rename to contrib/groff/src/utils/pfbtops/pfbtops.man diff --git a/contrib/groff-1.19/src/utils/tfmtodit/tfmtodit.cpp b/contrib/groff/src/utils/tfmtodit/tfmtodit.cpp similarity index 100% rename from contrib/groff-1.19/src/utils/tfmtodit/tfmtodit.cpp rename to contrib/groff/src/utils/tfmtodit/tfmtodit.cpp diff --git a/contrib/groff-1.19/src/utils/tfmtodit/tfmtodit.man b/contrib/groff/src/utils/tfmtodit/tfmtodit.man similarity index 100% rename from contrib/groff-1.19/src/utils/tfmtodit/tfmtodit.man rename to contrib/groff/src/utils/tfmtodit/tfmtodit.man diff --git a/contrib/groff-1.19/tmac/README b/contrib/groff/tmac/README similarity index 100% rename from contrib/groff-1.19/tmac/README rename to contrib/groff/tmac/README diff --git a/contrib/groff-1.19/tmac/X.tmac b/contrib/groff/tmac/X.tmac similarity index 100% rename from contrib/groff-1.19/tmac/X.tmac rename to contrib/groff/tmac/X.tmac diff --git a/contrib/groff-1.19/tmac/Xps.tmac b/contrib/groff/tmac/Xps.tmac similarity index 100% rename from contrib/groff-1.19/tmac/Xps.tmac rename to contrib/groff/tmac/Xps.tmac diff --git a/contrib/groff-1.19/tmac/a4.tmac b/contrib/groff/tmac/a4.tmac similarity index 100% rename from contrib/groff-1.19/tmac/a4.tmac rename to contrib/groff/tmac/a4.tmac diff --git a/contrib/groff-1.19/tmac/an-old.tmac b/contrib/groff/tmac/an-old.tmac similarity index 100% rename from contrib/groff-1.19/tmac/an-old.tmac rename to contrib/groff/tmac/an-old.tmac diff --git a/contrib/groff-1.19/tmac/an.tmac b/contrib/groff/tmac/an.tmac similarity index 100% rename from contrib/groff-1.19/tmac/an.tmac rename to contrib/groff/tmac/an.tmac diff --git a/contrib/groff-1.19/tmac/andoc.tmac b/contrib/groff/tmac/andoc.tmac similarity index 100% rename from contrib/groff-1.19/tmac/andoc.tmac rename to contrib/groff/tmac/andoc.tmac diff --git a/contrib/groff-1.19/tmac/composite.tmac b/contrib/groff/tmac/composite.tmac similarity index 100% rename from contrib/groff-1.19/tmac/composite.tmac rename to contrib/groff/tmac/composite.tmac diff --git a/contrib/groff-1.19/tmac/cp1047.tmac b/contrib/groff/tmac/cp1047.tmac similarity index 100% rename from contrib/groff-1.19/tmac/cp1047.tmac rename to contrib/groff/tmac/cp1047.tmac diff --git a/contrib/groff-1.19/tmac/devtag.tmac b/contrib/groff/tmac/devtag.tmac similarity index 100% rename from contrib/groff-1.19/tmac/devtag.tmac rename to contrib/groff/tmac/devtag.tmac diff --git a/contrib/groff-1.19/tmac/doc-common b/contrib/groff/tmac/doc-common similarity index 100% rename from contrib/groff-1.19/tmac/doc-common rename to contrib/groff/tmac/doc-common diff --git a/contrib/groff-1.19/tmac/doc-ditroff b/contrib/groff/tmac/doc-ditroff similarity index 100% rename from contrib/groff-1.19/tmac/doc-ditroff rename to contrib/groff/tmac/doc-ditroff diff --git a/contrib/groff-1.19/tmac/doc-nroff b/contrib/groff/tmac/doc-nroff similarity index 100% rename from contrib/groff-1.19/tmac/doc-nroff rename to contrib/groff/tmac/doc-nroff diff --git a/contrib/groff-1.19/tmac/doc-old.tmac b/contrib/groff/tmac/doc-old.tmac similarity index 100% rename from contrib/groff-1.19/tmac/doc-old.tmac rename to contrib/groff/tmac/doc-old.tmac diff --git a/contrib/groff-1.19/tmac/doc-syms b/contrib/groff/tmac/doc-syms similarity index 100% rename from contrib/groff-1.19/tmac/doc-syms rename to contrib/groff/tmac/doc-syms diff --git a/contrib/groff-1.19/tmac/doc.tmac b/contrib/groff/tmac/doc.tmac similarity index 100% rename from contrib/groff-1.19/tmac/doc.tmac rename to contrib/groff/tmac/doc.tmac diff --git a/contrib/groff-1.19/tmac/dvi.tmac b/contrib/groff/tmac/dvi.tmac similarity index 100% rename from contrib/groff-1.19/tmac/dvi.tmac rename to contrib/groff/tmac/dvi.tmac diff --git a/contrib/groff-1.19/tmac/e.tmac b/contrib/groff/tmac/e.tmac similarity index 100% rename from contrib/groff-1.19/tmac/e.tmac rename to contrib/groff/tmac/e.tmac diff --git a/contrib/groff-1.19/tmac/ec.tmac b/contrib/groff/tmac/ec.tmac similarity index 100% rename from contrib/groff-1.19/tmac/ec.tmac rename to contrib/groff/tmac/ec.tmac diff --git a/contrib/groff-1.19/tmac/eqnrc b/contrib/groff/tmac/eqnrc similarity index 100% rename from contrib/groff-1.19/tmac/eqnrc rename to contrib/groff/tmac/eqnrc diff --git a/contrib/groff-1.19/tmac/europs.tmac b/contrib/groff/tmac/europs.tmac similarity index 100% rename from contrib/groff-1.19/tmac/europs.tmac rename to contrib/groff/tmac/europs.tmac diff --git a/contrib/groff-1.19/tmac/fixmacros.sed b/contrib/groff/tmac/fixmacros.sed similarity index 100% rename from contrib/groff-1.19/tmac/fixmacros.sed rename to contrib/groff/tmac/fixmacros.sed diff --git a/contrib/groff-1.19/tmac/groff_man.man b/contrib/groff/tmac/groff_man.man similarity index 100% rename from contrib/groff-1.19/tmac/groff_man.man rename to contrib/groff/tmac/groff_man.man diff --git a/contrib/groff-1.19/tmac/groff_mdoc.man b/contrib/groff/tmac/groff_mdoc.man similarity index 100% rename from contrib/groff-1.19/tmac/groff_mdoc.man rename to contrib/groff/tmac/groff_mdoc.man diff --git a/contrib/groff-1.19/tmac/groff_me.man b/contrib/groff/tmac/groff_me.man similarity index 100% rename from contrib/groff-1.19/tmac/groff_me.man rename to contrib/groff/tmac/groff_me.man diff --git a/contrib/groff-1.19/tmac/groff_ms.man b/contrib/groff/tmac/groff_ms.man similarity index 100% rename from contrib/groff-1.19/tmac/groff_ms.man rename to contrib/groff/tmac/groff_ms.man diff --git a/contrib/groff-1.19/tmac/groff_trace.man b/contrib/groff/tmac/groff_trace.man similarity index 100% rename from contrib/groff-1.19/tmac/groff_trace.man rename to contrib/groff/tmac/groff_trace.man diff --git a/contrib/groff-1.19/tmac/groff_www.man b/contrib/groff/tmac/groff_www.man similarity index 100% rename from contrib/groff-1.19/tmac/groff_www.man rename to contrib/groff/tmac/groff_www.man diff --git a/contrib/groff-1.19/tmac/html-end.tmac b/contrib/groff/tmac/html-end.tmac similarity index 100% rename from contrib/groff-1.19/tmac/html-end.tmac rename to contrib/groff/tmac/html-end.tmac diff --git a/contrib/groff-1.19/tmac/html.tmac b/contrib/groff/tmac/html.tmac similarity index 100% rename from contrib/groff-1.19/tmac/html.tmac rename to contrib/groff/tmac/html.tmac diff --git a/contrib/groff-1.19/tmac/hyphen.us b/contrib/groff/tmac/hyphen.us similarity index 100% rename from contrib/groff-1.19/tmac/hyphen.us rename to contrib/groff/tmac/hyphen.us diff --git a/contrib/groff-1.19/tmac/hyphenex.pl b/contrib/groff/tmac/hyphenex.pl similarity index 100% rename from contrib/groff-1.19/tmac/hyphenex.pl rename to contrib/groff/tmac/hyphenex.pl diff --git a/contrib/groff-1.19/tmac/hyphenex.us b/contrib/groff/tmac/hyphenex.us similarity index 100% rename from contrib/groff-1.19/tmac/hyphenex.us rename to contrib/groff/tmac/hyphenex.us diff --git a/contrib/groff-1.19/tmac/latin1.tmac b/contrib/groff/tmac/latin1.tmac similarity index 100% rename from contrib/groff-1.19/tmac/latin1.tmac rename to contrib/groff/tmac/latin1.tmac diff --git a/contrib/groff-1.19/tmac/latin2.tmac b/contrib/groff/tmac/latin2.tmac similarity index 100% rename from contrib/groff-1.19/tmac/latin2.tmac rename to contrib/groff/tmac/latin2.tmac diff --git a/contrib/groff-1.19/tmac/latin5.tmac b/contrib/groff/tmac/latin5.tmac similarity index 100% rename from contrib/groff-1.19/tmac/latin5.tmac rename to contrib/groff/tmac/latin5.tmac diff --git a/contrib/groff-1.19/tmac/latin9.tmac b/contrib/groff/tmac/latin9.tmac similarity index 100% rename from contrib/groff-1.19/tmac/latin9.tmac rename to contrib/groff/tmac/latin9.tmac diff --git a/contrib/groff-1.19/tmac/lbp.tmac b/contrib/groff/tmac/lbp.tmac similarity index 100% rename from contrib/groff-1.19/tmac/lbp.tmac rename to contrib/groff/tmac/lbp.tmac diff --git a/contrib/groff-1.19/tmac/lj4.tmac b/contrib/groff/tmac/lj4.tmac similarity index 100% rename from contrib/groff-1.19/tmac/lj4.tmac rename to contrib/groff/tmac/lj4.tmac diff --git a/contrib/groff-1.19/tmac/man.local b/contrib/groff/tmac/man.local similarity index 100% rename from contrib/groff-1.19/tmac/man.local rename to contrib/groff/tmac/man.local diff --git a/contrib/groff-1.19/tmac/man.tmac b/contrib/groff/tmac/man.tmac similarity index 100% rename from contrib/groff-1.19/tmac/man.tmac rename to contrib/groff/tmac/man.tmac diff --git a/contrib/groff-1.19/tmac/man.ultrix b/contrib/groff/tmac/man.ultrix similarity index 100% rename from contrib/groff-1.19/tmac/man.ultrix rename to contrib/groff/tmac/man.ultrix diff --git a/contrib/groff-1.19/tmac/mandoc.tmac b/contrib/groff/tmac/mandoc.tmac similarity index 100% rename from contrib/groff-1.19/tmac/mandoc.tmac rename to contrib/groff/tmac/mandoc.tmac diff --git a/contrib/groff-1.19/tmac/mdoc.tmac b/contrib/groff/tmac/mdoc.tmac similarity index 100% rename from contrib/groff-1.19/tmac/mdoc.tmac rename to contrib/groff/tmac/mdoc.tmac diff --git a/contrib/groff-1.19/tmac/me.tmac b/contrib/groff/tmac/me.tmac similarity index 100% rename from contrib/groff-1.19/tmac/me.tmac rename to contrib/groff/tmac/me.tmac diff --git a/contrib/groff-1.19/tmac/ms.tmac b/contrib/groff/tmac/ms.tmac similarity index 100% rename from contrib/groff-1.19/tmac/ms.tmac rename to contrib/groff/tmac/ms.tmac diff --git a/contrib/groff-1.19/tmac/papersize.tmac b/contrib/groff/tmac/papersize.tmac similarity index 100% rename from contrib/groff-1.19/tmac/papersize.tmac rename to contrib/groff/tmac/papersize.tmac diff --git a/contrib/groff-1.19/tmac/pic.tmac b/contrib/groff/tmac/pic.tmac similarity index 100% rename from contrib/groff-1.19/tmac/pic.tmac rename to contrib/groff/tmac/pic.tmac diff --git a/contrib/groff-1.19/tmac/ps.tmac b/contrib/groff/tmac/ps.tmac similarity index 100% rename from contrib/groff-1.19/tmac/ps.tmac rename to contrib/groff/tmac/ps.tmac diff --git a/contrib/groff-1.19/tmac/psatk.tmac b/contrib/groff/tmac/psatk.tmac similarity index 100% rename from contrib/groff-1.19/tmac/psatk.tmac rename to contrib/groff/tmac/psatk.tmac diff --git a/contrib/groff-1.19/tmac/psfig.tmac b/contrib/groff/tmac/psfig.tmac similarity index 100% rename from contrib/groff-1.19/tmac/psfig.tmac rename to contrib/groff/tmac/psfig.tmac diff --git a/contrib/groff-1.19/tmac/psold.tmac b/contrib/groff/tmac/psold.tmac similarity index 100% rename from contrib/groff-1.19/tmac/psold.tmac rename to contrib/groff/tmac/psold.tmac diff --git a/contrib/groff-1.19/tmac/pspic.tmac b/contrib/groff/tmac/pspic.tmac similarity index 100% rename from contrib/groff-1.19/tmac/pspic.tmac rename to contrib/groff/tmac/pspic.tmac diff --git a/contrib/groff-1.19/tmac/s.tmac b/contrib/groff/tmac/s.tmac similarity index 100% rename from contrib/groff-1.19/tmac/s.tmac rename to contrib/groff/tmac/s.tmac diff --git a/contrib/groff-1.19/tmac/safer.tmac b/contrib/groff/tmac/safer.tmac similarity index 100% rename from contrib/groff-1.19/tmac/safer.tmac rename to contrib/groff/tmac/safer.tmac diff --git a/contrib/groff-1.19/tmac/strip.sed b/contrib/groff/tmac/strip.sed similarity index 100% rename from contrib/groff-1.19/tmac/strip.sed rename to contrib/groff/tmac/strip.sed diff --git a/contrib/groff-1.19/tmac/trace.tmac b/contrib/groff/tmac/trace.tmac similarity index 100% rename from contrib/groff-1.19/tmac/trace.tmac rename to contrib/groff/tmac/trace.tmac diff --git a/contrib/groff-1.19/tmac/troffrc b/contrib/groff/tmac/troffrc similarity index 100% rename from contrib/groff-1.19/tmac/troffrc rename to contrib/groff/tmac/troffrc diff --git a/contrib/groff-1.19/tmac/troffrc-end b/contrib/groff/tmac/troffrc-end similarity index 100% rename from contrib/groff-1.19/tmac/troffrc-end rename to contrib/groff/tmac/troffrc-end diff --git a/contrib/groff-1.19/tmac/tty-char.tmac b/contrib/groff/tmac/tty-char.tmac similarity index 100% rename from contrib/groff-1.19/tmac/tty-char.tmac rename to contrib/groff/tmac/tty-char.tmac diff --git a/contrib/groff-1.19/tmac/tty.tmac b/contrib/groff/tmac/tty.tmac similarity index 100% rename from contrib/groff-1.19/tmac/tty.tmac rename to contrib/groff/tmac/tty.tmac diff --git a/contrib/groff-1.19/tmac/unicode.tmac b/contrib/groff/tmac/unicode.tmac similarity index 100% rename from contrib/groff-1.19/tmac/unicode.tmac rename to contrib/groff/tmac/unicode.tmac diff --git a/contrib/groff-1.19/tmac/www.tmac b/contrib/groff/tmac/www.tmac similarity index 100% rename from contrib/groff-1.19/tmac/www.tmac rename to contrib/groff/tmac/www.tmac -- 2.41.0 From f54bfcf136fdd264f20e37e7c50dfa18d67cc0b6 Mon Sep 17 00:00:00 2001 From: Jan Lentfer Date: Mon, 25 Jan 2010 22:45:51 +0100 Subject: [PATCH 07/16] groff: Update master to work without version tag --- gnu/usr.bin/groff/Makefile.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnu/usr.bin/groff/Makefile.inc b/gnu/usr.bin/groff/Makefile.inc index 393bea23c4..9099fc9f85 100644 --- a/gnu/usr.bin/groff/Makefile.inc +++ b/gnu/usr.bin/groff/Makefile.inc @@ -143,7 +143,7 @@ revision=`sed -e 's/^0$$//' -e 's/^[1-9].*$$/.&/' $(GROFF_DIST)/REVISION` ${.IMPSRC} >${.TARGET} TOPREL?= .. -GROFF_DIST= ${.CURDIR}/${TOPREL}/../../../contrib/groff-1.19 +GROFF_DIST= ${.CURDIR}/${TOPREL}/../../../contrib/groff DIST_SUBDIR?= ${.CURDIR:T} DIST_DIR= ${GROFF_DIST}/${DIST_SUBDIR} .PATH: ${DIST_DIR} -- 2.41.0 From 5e5cc80373e6952ad240a02f5fd894ba0a41008e Mon Sep 17 00:00:00 2001 From: Jan Lentfer Date: Mon, 25 Jan 2010 23:04:24 +0100 Subject: [PATCH 08/16] groff: update vendor branch to v1.20.1 --- contrib/groff/COPYING | 912 ++- contrib/groff/LICENSES | 181 + contrib/groff/README | 41 +- contrib/groff/README.DRAGONFLY | 16 +- contrib/groff/REVISION | 2 +- contrib/groff/VERSION | 2 +- contrib/groff/config.guess | 1552 ++++ contrib/groff/config.rpath | 672 ++ contrib/groff/config.sub | 1679 +++++ contrib/groff/contrib/chem/ChangeLog | 212 + contrib/groff/contrib/chem/Makefile.sub | 98 + contrib/groff/contrib/chem/README.txt | 52 + contrib/groff/contrib/chem/chem.man | 1017 +++ contrib/groff/contrib/chem/chem.pic | 94 + contrib/groff/contrib/chem/chem.pl | 1274 ++++ .../groff/contrib/chem/examples/122/README | 74 + .../contrib/chem/examples/122/ch2a_ethyl.chem | 43 + .../chem/examples/122/ch2b_benzene.chem | 40 + .../chem/examples/122/ch2c_benzene_right.chem | 40 + .../contrib/chem/examples/122/ch4a_stick.chem | 45 + .../examples/122/ch4b_methyl_acetate.chem | 49 + .../contrib/chem/examples/122/ch4c_colon.chem | 44 + .../chem/examples/122/ch4d_HCl.H2O.chem | 40 + .../chem/examples/122/ch4e_CaSO4.2H2O.chem | 40 + .../contrib/chem/examples/122/ch4f_C.chem | 50 + .../contrib/chem/examples/122/ch4g_BP.chem | 50 + .../chem/examples/122/ch4h_methacrylate.chem | 67 + .../contrib/chem/examples/122/ch4i_cyclo.chem | 47 + .../contrib/chem/examples/122/ch4j_ring4.chem | 40 + .../contrib/chem/examples/122/ch4k_ring3.chem | 42 + .../chem/examples/122/ch4l_vertex.chem | 47 + .../chem/examples/122/ch4m_double.chem | 40 + .../chem/examples/122/ch4n_triple.chem | 40 + .../chem/examples/122/ch4o_aromatic.chem | 41 + .../chem/examples/122/ch4p_cholestanol.chem | 62 + .../contrib/chem/examples/122/ch4q_rings.chem | 48 + .../contrib/chem/examples/122/ch4r_spiro.chem | 44 + .../chem/examples/122/ch4s_heteroatoms.chem | 40 + .../chem/examples/122/ch4t_polycyclic.chem | 51 + .../chem/examples/122/ch4u_nicotine.chem | 44 + .../chem/examples/122/ch4v_histidine.chem | 46 + .../contrib/chem/examples/122/ch4w_lsd.chem | 52 + .../chem/examples/122/ch4x_anisole.chem | 44 + .../chem/examples/122/ch4y_reserpine.chem | 64 + .../chem/examples/122/ch4z1_eqn_glutamic.chem | 80 + .../contrib/chem/examples/122/ch4z2_text.chem | 55 + .../contrib/chem/examples/122/ch5a_size.chem | 47 + .../contrib/chem/examples/122/ch6a_pic.chem | 45 + .../contrib/chem/examples/122/ch6b_dna.chem | 61 + .../chem/examples/122/chAa_polymer.chem | 74 + .../chem/examples/122/chAb_vinyl_chloro.chem | 64 + .../chem/examples/122/chAc_morphine.chem | 54 + .../chem/examples/122/chAd_chlorophyll.chem | 71 + .../contrib/chem/examples/122/chAe_chair.chem | 51 + .../contrib/chem/examples/122/chAf_arrow.chem | 70 + .../chem/examples/122/chAg_circle.chem | 56 + .../chem/examples/122/chAh_brackets.chem | 62 + .../122/chAi_poly_vinyl_chloride.chem | 143 + .../contrib/chem/examples/122/chBa_jump.chem | 43 + .../contrib/chem/examples/122/chBb_bonds.chem | 44 + .../contrib/chem/examples/122/chBc_rings.chem | 45 + .../groff/contrib/chem/examples/README.txt | 65 + contrib/groff/contrib/chem/examples/atp.chem | 63 + .../contrib/chem/examples/cholesterin.chem | 52 + .../contrib/chem/examples/ethamivan.chem | 48 + contrib/groff/contrib/chem/examples/lsd.chem | 51 + .../groff/contrib/chem/examples/morphine.chem | 55 + .../contrib/chem/examples/penicillin.chem | 56 + .../contrib/chem/examples/reserpine.chem | 65 + contrib/groff/contrib/eqn2graph/eqn2graph.man | 42 +- contrib/groff/contrib/eqn2graph/eqn2graph.sh | 4 +- contrib/groff/contrib/hdtbl/ChangeLog | 213 + contrib/groff/contrib/hdtbl/Makefile.sub | 153 + contrib/groff/contrib/hdtbl/TODO | 21 + .../contrib/hdtbl/examples/chess_board.roff | 61 + .../hdtbl/examples/col_rowspan_colors.roff | 79 + .../contrib/hdtbl/examples/color_boxes.roff | 47 + .../hdtbl/examples/color_nested_tables.roff | 51 + .../hdtbl/examples/color_table_cells.roff | 47 + .../hdtbl/examples/color_transitions.roff | 54 + .../groff/contrib/hdtbl/examples/fonts_n.in | 145 + .../groff/contrib/hdtbl/examples/fonts_x.in | 156 + .../contrib/hdtbl/examples/mixed_pickles.roff | 99 + .../groff/contrib/hdtbl/examples/rainbow.roff | 89 + .../hdtbl/examples/short_reference.roff | 78 + contrib/groff/contrib/hdtbl/groff_hdtbl.man | 950 +++ contrib/groff/contrib/hdtbl/hdmisc.tmac | 618 ++ contrib/groff/contrib/hdtbl/hdtbl.tmac | 1006 +++ contrib/groff/contrib/mm/groff_mm.man | 4536 ++++++++---- contrib/groff/contrib/mm/groff_mmse.man | 118 +- contrib/groff/contrib/mm/m.tmac | 90 +- contrib/groff/contrib/mm/mm/0.MT | 23 +- contrib/groff/contrib/mm/mm/4.MT | 23 +- contrib/groff/contrib/mm/mm/5.MT | 23 +- contrib/groff/contrib/mm/mm/ms.cov | 25 +- contrib/groff/contrib/mm/mmroff.man | 25 +- contrib/groff/contrib/mm/mmroff.pl | 18 + contrib/groff/contrib/mm/mse.tmac | 86 +- contrib/groff/contrib/mom/copyright | 12 +- contrib/groff/contrib/mom/groff_mom.man | 22 +- contrib/groff/contrib/mom/om.tmac | 4730 ++++++++---- contrib/groff/contrib/pdfmark/cover.ms | 7 + contrib/groff/contrib/pdfmark/pdfmark.ms | 31 +- contrib/groff/contrib/pdfmark/pdfmark.tmac | 477 +- contrib/groff/contrib/pdfmark/pdfroff.man | 542 +- contrib/groff/contrib/pdfmark/pdfroff.sh | 100 +- contrib/groff/contrib/pdfmark/spdf.tmac | 11 +- contrib/groff/contrib/pic2graph/pic2graph.man | 77 +- contrib/groff/contrib/pic2graph/pic2graph.sh | 4 +- contrib/groff/doc/fdl.texi | 90 +- contrib/groff/doc/groff.texinfo | 5397 +++++++------- contrib/groff/font/devcp1047/R.proto | 2 +- contrib/groff/font/devdvi/CWITC | 2 +- contrib/groff/font/devdvi/CWTC | 2 +- contrib/groff/font/devdvi/HBITC | 2 +- contrib/groff/font/devdvi/HBTC | 2 +- contrib/groff/font/devdvi/HITC | 2 +- contrib/groff/font/devdvi/HRTC | 2 +- contrib/groff/font/devdvi/TBITC | 2 +- contrib/groff/font/devdvi/TBTC | 2 +- contrib/groff/font/devdvi/TITC | 2 +- contrib/groff/font/devdvi/TRTC | 2 +- contrib/groff/font/devdvi/generate/Makefile | 11 +- contrib/groff/font/devdvi/generate/tc.map | 1 + contrib/groff/font/devhtml/DESC.proto | 1 + contrib/groff/font/devhtml/R.in | 8 + contrib/groff/font/devhtml/R.proto | 1762 +++-- contrib/groff/font/devlatin1/R.proto | 2 +- contrib/groff/font/devlj4/generate/Makefile | 11 +- contrib/groff/font/devps/AB | 16 + contrib/groff/font/devps/ABI | 16 + contrib/groff/font/devps/AI | 16 + contrib/groff/font/devps/AR | 16 + contrib/groff/font/devps/BMB | 16 + contrib/groff/font/devps/BMBI | 16 + contrib/groff/font/devps/BMI | 16 + contrib/groff/font/devps/BMR | 16 + contrib/groff/font/devps/CB | 500 +- contrib/groff/font/devps/CBI | 504 +- contrib/groff/font/devps/CI | 504 +- contrib/groff/font/devps/CR | 502 +- contrib/groff/font/devps/EURO | 13 + contrib/groff/font/devps/HB | 1336 +++- contrib/groff/font/devps/HBI | 1662 ++++- contrib/groff/font/devps/HI | 1793 ++++- contrib/groff/font/devps/HNB | 1500 +++- contrib/groff/font/devps/HNBI | 1662 ++++- contrib/groff/font/devps/HNI | 1845 ++++- contrib/groff/font/devps/HNR | 1639 ++++- contrib/groff/font/devps/HR | 1491 +++- contrib/groff/font/devps/NB | 739 +- contrib/groff/font/devps/NBI | 1462 +++- contrib/groff/font/devps/NI | 1003 ++- contrib/groff/font/devps/NR | 943 ++- contrib/groff/font/devps/PB | 559 +- contrib/groff/font/devps/PBI | 623 +- contrib/groff/font/devps/PI | 603 +- contrib/groff/font/devps/PR | 589 +- contrib/groff/font/devps/S | 46 +- contrib/groff/font/devps/SS | 178 +- contrib/groff/font/devps/TB | 424 +- contrib/groff/font/devps/TBI | 414 +- contrib/groff/font/devps/TI | 417 +- contrib/groff/font/devps/TR | 383 +- contrib/groff/font/devps/ZCMI | 16 + contrib/groff/font/devps/ZD | 43 +- contrib/groff/font/devps/ZDR | 43 +- contrib/groff/font/devps/freeeuro.afm | 6 +- contrib/groff/font/devps/freeeuro.pfa | 537 +- contrib/groff/font/devps/generate/Makefile | 122 +- .../groff/font/devps/generate/freeeuro.sfd | 161 +- contrib/groff/font/devps/generate/make-zapfdr | 90 + contrib/groff/font/devps/generate/symbol.sed | 2 +- .../groff/font/devps/generate/symbolsl.afm | 185 +- .../groff/font/devps/generate/symbolsl.awk | 19 + contrib/groff/font/devps/generate/textmap | 62 +- contrib/groff/font/devps/generate/zapfdr.sed | 2 + contrib/groff/font/devps/{ => old}/CB | 0 contrib/groff/font/devps/{ => old}/CBI | 0 contrib/groff/font/devps/{ => old}/CI | 0 contrib/groff/font/devps/{ => old}/CR | 0 contrib/groff/font/devps/{ => old}/HB | 0 contrib/groff/font/devps/{ => old}/HBI | 0 contrib/groff/font/devps/{ => old}/HI | 0 contrib/groff/font/devps/{ => old}/HNB | 0 contrib/groff/font/devps/{ => old}/HNBI | 0 contrib/groff/font/devps/{ => old}/HNI | 0 contrib/groff/font/devps/{ => old}/HNR | 0 contrib/groff/font/devps/{ => old}/HR | 0 contrib/groff/font/devps/{ => old}/NB | 0 contrib/groff/font/devps/{ => old}/NBI | 0 contrib/groff/font/devps/{ => old}/NI | 0 contrib/groff/font/devps/{ => old}/NR | 0 contrib/groff/font/devps/{ => old}/PB | 0 contrib/groff/font/devps/{ => old}/PBI | 0 contrib/groff/font/devps/{ => old}/PI | 0 contrib/groff/font/devps/{ => old}/PR | 0 contrib/groff/font/devps/{ => old}/S | 0 contrib/groff/font/devps/{ => old}/SS | 0 contrib/groff/font/devps/{ => old}/TB | 0 contrib/groff/font/devps/{ => old}/TBI | 0 contrib/groff/font/devps/{ => old}/TI | 0 contrib/groff/font/devps/{ => old}/TR | 0 contrib/groff/font/devps/{ => old}/symbol.afm | 0 .../font/devps/{generate => old}/symbolsl.afm | 0 contrib/groff/font/devps/{ => old}/zapfdr.afm | 0 contrib/groff/font/devps/{ => old}/zapfdr.ps | 2 +- contrib/groff/font/devps/prologue.ps | 8 +- contrib/groff/font/devps/symbol.afm | 93 +- contrib/groff/font/devps/symbolsl.ps | 1 + contrib/groff/font/devps/zapfdr.afm | 54 +- contrib/groff/font/devps/zapfdr.ps | 252 +- contrib/groff/font/devutf8/DESC.proto | 1 + contrib/groff/font/devutf8/R.in | 4 + contrib/groff/font/devutf8/R.proto | 1643 +++-- contrib/groff/font/util/make-Rproto | 48 + contrib/groff/m4/codeset.m4 | 21 + contrib/groff/m4/glibc21.m4 | 30 + contrib/groff/m4/groff.m4 | 1195 +++ contrib/groff/m4/iconv.m4 | 180 + contrib/groff/m4/lib-ld.m4 | 110 + contrib/groff/m4/lib-link.m4 | 758 ++ contrib/groff/m4/lib-prefix.m4 | 221 + contrib/groff/man/ditroff.man | 62 +- contrib/groff/man/groff.man | 1796 +++-- contrib/groff/man/groff_char.man | 119 +- contrib/groff/man/groff_diff.man | 1082 +-- contrib/groff/man/groff_font.man | 225 +- contrib/groff/man/groff_out.man | 619 +- contrib/groff/man/groff_tmac.man | 871 ++- contrib/groff/man/roff.man | 1071 ++- contrib/groff/mdate.sh | 20 +- contrib/groff/src/devices/grodvi/dvi.cpp | 28 +- contrib/groff/src/devices/grodvi/grodvi.man | 18 +- contrib/groff/src/devices/grohtml/grohtml.man | 70 +- .../groff/src/devices/grohtml/html-table.cpp | 138 +- .../groff/src/devices/grohtml/html-table.h | 16 +- .../groff/src/devices/grohtml/html-text.cpp | 52 +- contrib/groff/src/devices/grohtml/html-text.h | 20 +- contrib/groff/src/devices/grohtml/html.h | 12 +- contrib/groff/src/devices/grohtml/output.cpp | 12 +- .../groff/src/devices/grohtml/post-html.cpp | 789 +- contrib/groff/src/devices/grolbp/charset.h | 22 + contrib/groff/src/devices/grolbp/grolbp.man | 78 +- contrib/groff/src/devices/grolbp/lbp.cpp | 17 +- contrib/groff/src/devices/grolbp/lbp.h | 11 +- contrib/groff/src/devices/grolj4/grolj4.man | 67 +- contrib/groff/src/devices/grolj4/lj4.cpp | 17 +- contrib/groff/src/devices/grolj4/lj4_font.man | 2 +- contrib/groff/src/devices/grops/grops.man | 889 ++- contrib/groff/src/devices/grops/ps.cpp | 73 +- contrib/groff/src/devices/grops/ps.h | 11 +- contrib/groff/src/devices/grops/psrm.cpp | 12 +- contrib/groff/src/devices/grotty/grotty.man | 74 +- contrib/groff/src/devices/grotty/tty.cpp | 181 +- contrib/groff/src/include/assert.h | 12 +- contrib/groff/src/include/cmap.h | 12 +- contrib/groff/src/include/color.h | 13 +- contrib/groff/src/include/config.hin | 20 + contrib/groff/src/include/cset.h | 12 +- contrib/groff/src/include/device.h | 17 +- contrib/groff/src/include/driver.h | 11 +- contrib/groff/src/include/errarg.h | 12 +- contrib/groff/src/include/error.h | 11 +- contrib/groff/src/include/font.h | 391 +- contrib/groff/src/include/geometry.h | 11 +- contrib/groff/src/include/html-strings.h | 12 +- contrib/groff/src/include/htmlhint.h | 12 +- contrib/groff/src/include/index.h | 12 +- contrib/groff/src/include/itable.h | 199 + contrib/groff/src/include/lib.h | 41 +- contrib/groff/src/include/localcharset.h | 40 + contrib/groff/src/include/macropath.h | 12 +- contrib/groff/src/include/nonposix.h | 11 +- contrib/groff/src/include/paper.h | 11 +- contrib/groff/src/include/posix.h | 12 +- contrib/groff/src/include/printer.h | 50 +- contrib/groff/src/include/ptable.h | 105 +- contrib/groff/src/include/refid.h | 12 +- contrib/groff/src/include/search.h | 12 +- contrib/groff/src/include/searchpath.h | 11 +- contrib/groff/src/include/stringclass.h | 12 +- contrib/groff/src/include/symbol.h | 11 +- contrib/groff/src/include/unicode.h | 50 +- contrib/groff/src/libs/libbib/common.cpp | 12 +- contrib/groff/src/libs/libbib/index.cpp | 11 +- contrib/groff/src/libs/libbib/linear.cpp | 11 +- contrib/groff/src/libs/libbib/map.c | 11 +- contrib/groff/src/libs/libbib/search.cpp | 11 +- contrib/groff/src/libs/libdriver/input.cpp | 19 +- contrib/groff/src/libs/libdriver/printer.cpp | 49 +- contrib/groff/src/libs/libgroff/assert.cpp | 12 +- contrib/groff/src/libs/libgroff/change_lf.cpp | 12 +- contrib/groff/src/libs/libgroff/cmap.cpp | 12 +- contrib/groff/src/libs/libgroff/color.cpp | 14 +- .../groff/src/libs/libgroff/config.charset | 648 ++ contrib/groff/src/libs/libgroff/cset.cpp | 12 +- contrib/groff/src/libs/libgroff/device.cpp | 12 +- contrib/groff/src/libs/libgroff/errarg.cpp | 11 +- contrib/groff/src/libs/libgroff/error.cpp | 12 +- contrib/groff/src/libs/libgroff/fatal.cpp | 12 +- contrib/groff/src/libs/libgroff/font.cpp | 677 +- contrib/groff/src/libs/libgroff/fontfile.cpp | 13 +- contrib/groff/src/libs/libgroff/geometry.cpp | 12 +- contrib/groff/src/libs/libgroff/glyphuni.cpp | 55 +- contrib/groff/src/libs/libgroff/htmlhint.cpp | 24 +- contrib/groff/src/libs/libgroff/hypot.cpp | 12 +- contrib/groff/src/libs/libgroff/iftoa.c | 11 +- contrib/groff/src/libs/libgroff/invalid.cpp | 11 +- contrib/groff/src/libs/libgroff/itoa.c | 11 +- contrib/groff/src/libs/libgroff/lf.cpp | 12 +- .../groff/src/libs/libgroff/localcharset.c | 461 ++ contrib/groff/src/libs/libgroff/macropath.cpp | 12 +- contrib/groff/src/libs/libgroff/make-uniuni | 164 + contrib/groff/src/libs/libgroff/matherr.c | 12 +- .../groff/src/libs/libgroff/maxfilename.cpp | 12 +- contrib/groff/src/libs/libgroff/mksdir.cpp | 11 +- .../groff/src/libs/libgroff/nametoindex.cpp | 146 +- contrib/groff/src/libs/libgroff/new.cpp | 11 +- contrib/groff/src/libs/libgroff/paper.cpp | 11 +- contrib/groff/src/libs/libgroff/ptable.cpp | 22 +- contrib/groff/src/libs/libgroff/quotearg.c | 11 +- contrib/groff/src/libs/libgroff/ref-add.sin | 29 + contrib/groff/src/libs/libgroff/ref-del.sin | 24 + contrib/groff/src/libs/libgroff/relocatable.h | 2 + contrib/groff/src/libs/libgroff/spawnvp.c | 11 +- contrib/groff/src/libs/libgroff/string.cpp | 13 +- contrib/groff/src/libs/libgroff/strsave.cpp | 12 +- contrib/groff/src/libs/libgroff/symbol.cpp | 11 +- contrib/groff/src/libs/libgroff/tmpfile.cpp | 11 +- contrib/groff/src/libs/libgroff/tmpname.cpp | 11 +- contrib/groff/src/libs/libgroff/unicode.cpp | 11 +- contrib/groff/src/libs/libgroff/uniglyph.cpp | 19 +- contrib/groff/src/libs/libgroff/uniuni.cpp | 133 +- contrib/groff/src/preproc/eqn/box.cpp | 189 +- contrib/groff/src/preproc/eqn/box.h | 11 +- contrib/groff/src/preproc/eqn/delim.cpp | 29 +- contrib/groff/src/preproc/eqn/eqn.cpp | 339 +- contrib/groff/src/preproc/eqn/eqn.h | 16 +- contrib/groff/src/preproc/eqn/eqn.man | 286 +- contrib/groff/src/preproc/eqn/eqn.y | 12 +- contrib/groff/src/preproc/eqn/lex.cpp | 100 +- contrib/groff/src/preproc/eqn/limit.cpp | 79 +- contrib/groff/src/preproc/eqn/list.cpp | 18 +- contrib/groff/src/preproc/eqn/main.cpp | 95 +- contrib/groff/src/preproc/eqn/mark.cpp | 12 +- contrib/groff/src/preproc/eqn/neqn.man | 2 +- contrib/groff/src/preproc/eqn/other.cpp | 280 +- contrib/groff/src/preproc/eqn/over.cpp | 136 +- contrib/groff/src/preproc/eqn/pbox.h | 12 +- contrib/groff/src/preproc/eqn/pile.cpp | 205 +- contrib/groff/src/preproc/eqn/script.cpp | 70 +- contrib/groff/src/preproc/eqn/special.cpp | 17 +- contrib/groff/src/preproc/eqn/sqrt.cpp | 51 +- contrib/groff/src/preproc/eqn/text.cpp | 515 +- contrib/groff/src/preproc/grn/grn.man | 11 +- contrib/groff/src/preproc/grn/hdb.cpp | 2 +- contrib/groff/src/preproc/grn/main.cpp | 22 +- contrib/groff/src/preproc/html/pre-html.cpp | 227 +- contrib/groff/src/preproc/html/pre-html.h | 39 +- contrib/groff/src/preproc/html/pushback.cpp | 11 +- contrib/groff/src/preproc/html/pushback.h | 12 +- contrib/groff/src/preproc/pic/common.cpp | 17 +- contrib/groff/src/preproc/pic/common.h | 16 +- contrib/groff/src/preproc/pic/lex.cpp | 93 +- contrib/groff/src/preproc/pic/main.cpp | 17 +- contrib/groff/src/preproc/pic/object.cpp | 86 +- contrib/groff/src/preproc/pic/object.h | 61 +- contrib/groff/src/preproc/pic/output.h | 14 +- contrib/groff/src/preproc/pic/pic.cpp | 6395 +++++++++-------- contrib/groff/src/preproc/pic/pic.h | 11 +- contrib/groff/src/preproc/pic/pic.man | 16 +- contrib/groff/src/preproc/pic/pic.y | 62 +- contrib/groff/src/preproc/pic/pic_tab.h | 46 +- contrib/groff/src/preproc/pic/position.h | 12 +- contrib/groff/src/preproc/pic/tex.cpp | 12 +- contrib/groff/src/preproc/pic/text.h | 18 + contrib/groff/src/preproc/pic/troff.cpp | 12 +- .../groff/src/preproc/preconv/Makefile.sub | 7 + contrib/groff/src/preproc/preconv/preconv.cpp | 1196 +++ contrib/groff/src/preproc/preconv/preconv.man | 299 + contrib/groff/src/preproc/refer/command.cpp | 12 +- contrib/groff/src/preproc/refer/command.h | 13 +- contrib/groff/src/preproc/refer/label.cpp | 333 +- contrib/groff/src/preproc/refer/label.y | 11 +- contrib/groff/src/preproc/refer/ref.cpp | 16 +- contrib/groff/src/preproc/refer/ref.h | 12 +- contrib/groff/src/preproc/refer/refer.cpp | 15 +- contrib/groff/src/preproc/refer/refer.h | 11 +- contrib/groff/src/preproc/refer/refer.man | 6 +- contrib/groff/src/preproc/refer/token.cpp | 12 +- contrib/groff/src/preproc/refer/token.h | 12 +- contrib/groff/src/preproc/soelim/soelim.cpp | 27 +- contrib/groff/src/preproc/soelim/soelim.man | 89 +- contrib/groff/src/preproc/tbl/main.cpp | 187 +- contrib/groff/src/preproc/tbl/table.cpp | 459 +- contrib/groff/src/preproc/tbl/table.h | 38 +- contrib/groff/src/preproc/tbl/tbl.man | 616 +- contrib/groff/src/roff/groff/groff.cpp | 120 +- contrib/groff/src/roff/groff/groff.man | 1211 ++-- contrib/groff/src/roff/groff/pipeline.c | 14 +- contrib/groff/src/roff/groff/pipeline.h | 13 +- contrib/groff/src/roff/grog/grog.man | 560 +- contrib/groff/src/roff/grog/grog.pl | 543 +- contrib/groff/src/roff/grog/grog.sh | 319 +- contrib/groff/src/roff/nroff/nroff.man | 77 +- contrib/groff/src/roff/nroff/nroff.sh | 85 +- contrib/groff/src/roff/troff/charinfo.h | 36 +- contrib/groff/src/roff/troff/column.cpp | 12 +- contrib/groff/src/roff/troff/dictionary.cpp | 11 +- contrib/groff/src/roff/troff/dictionary.h | 12 +- contrib/groff/src/roff/troff/div.cpp | 21 +- contrib/groff/src/roff/troff/div.h | 11 +- contrib/groff/src/roff/troff/env.cpp | 195 +- contrib/groff/src/roff/troff/env.h | 17 +- contrib/groff/src/roff/troff/hvunits.h | 12 +- contrib/groff/src/roff/troff/input.cpp | 421 +- contrib/groff/src/roff/troff/input.h | 13 +- contrib/groff/src/roff/troff/mtsm.cpp | 11 +- contrib/groff/src/roff/troff/mtsm.h | 11 +- contrib/groff/src/roff/troff/node.cpp | 168 +- contrib/groff/src/roff/troff/node.h | 14 +- contrib/groff/src/roff/troff/number.cpp | 11 +- contrib/groff/src/roff/troff/reg.cpp | 11 +- contrib/groff/src/roff/troff/reg.h | 11 +- contrib/groff/src/roff/troff/request.h | 27 +- contrib/groff/src/roff/troff/token.h | 11 +- contrib/groff/src/roff/troff/troff.h | 11 +- contrib/groff/src/roff/troff/troff.man | 100 +- .../groff/src/utils/addftinfo/addftinfo.cpp | 12 +- .../groff/src/utils/addftinfo/addftinfo.man | 2 +- contrib/groff/src/utils/addftinfo/guess.cpp | 12 +- contrib/groff/src/utils/addftinfo/guess.h | 12 +- contrib/groff/src/utils/afmtodit/afmtodit.man | 31 +- contrib/groff/src/utils/afmtodit/afmtodit.pl | 6107 +--------------- .../afmtodit/{afmtodit.pl => afmtodit.tables} | 675 +- .../src/utils/afmtodit/make-afmtodit-tables | 127 + contrib/groff/src/utils/hpftodit/hpftodit.cpp | 12 +- contrib/groff/src/utils/hpftodit/hpftodit.man | 3 +- contrib/groff/src/utils/hpftodit/hpuni.cpp | 11 +- contrib/groff/src/utils/indxbib/indxbib.cpp | 11 +- contrib/groff/src/utils/indxbib/indxbib.man | 2 +- contrib/groff/src/utils/indxbib/signal.c | 12 +- contrib/groff/src/utils/lkbib/lkbib.cpp | 12 +- contrib/groff/src/utils/lkbib/lkbib.man | 3 +- contrib/groff/src/utils/lookbib/lookbib.cpp | 11 +- contrib/groff/src/utils/lookbib/lookbib.man | 3 +- contrib/groff/src/utils/pfbtops/pfbtops.c | 15 +- contrib/groff/src/utils/pfbtops/pfbtops.man | 3 +- contrib/groff/src/utils/tfmtodit/tfmtodit.cpp | 12 +- contrib/groff/src/utils/tfmtodit/tfmtodit.man | 3 +- contrib/groff/tmac/62bit.tmac | 192 + contrib/groff/tmac/LOCALIZATION | 54 + contrib/groff/tmac/README | 9 - contrib/groff/tmac/TESTING-HINTS | 19 + contrib/groff/tmac/an-ext.tmac | 211 + contrib/groff/tmac/an-old.tmac | 169 +- contrib/groff/tmac/andoc.tmac | 81 +- contrib/groff/tmac/composite.tmac | 1 + contrib/groff/tmac/cs.tmac | 175 + contrib/groff/tmac/de.tmac | 168 + contrib/groff/tmac/den.tmac | 28 + contrib/groff/tmac/devtag.tmac | 10 +- contrib/groff/tmac/doc-common | 76 +- contrib/groff/tmac/doc-old.tmac | 2 +- contrib/groff/tmac/doc-syms | 82 +- contrib/groff/tmac/doc.tmac | 33 +- contrib/groff/tmac/dvi.tmac | 3 - contrib/groff/tmac/e.tmac | 417 +- contrib/groff/tmac/ec.tmac | 20 +- contrib/groff/tmac/eqnrc | 2 + contrib/groff/tmac/fr.tmac | 195 + contrib/groff/tmac/groff_man.man | 567 +- contrib/groff/tmac/groff_mdoc.man | 207 +- contrib/groff/tmac/groff_ms.man | 204 +- contrib/groff/tmac/groff_trace.man | 476 +- contrib/groff/tmac/groff_www.man | 158 +- contrib/groff/tmac/html.tmac | 8 +- contrib/groff/tmac/hyphen.cs | 3670 ++++++++++ contrib/groff/tmac/hyphen.den | 811 +++ contrib/groff/tmac/hyphen.det | 628 ++ contrib/groff/tmac/hyphen.fr | 1324 ++++ contrib/groff/tmac/hyphen.sv | 4757 ++++++++++++ contrib/groff/tmac/hyphenex.cs | 16 + contrib/groff/tmac/hyphenex.det | 3838 ++++++++++ contrib/groff/tmac/hyphenex.pl | 11 +- contrib/groff/tmac/hyphenex.us | 186 +- contrib/groff/tmac/papersize.tmac | 9 +- contrib/groff/tmac/ps.tmac | 3 - contrib/groff/tmac/pspic.tmac | 72 +- contrib/groff/tmac/ptx.tmac | 40 + contrib/groff/tmac/s.tmac | 229 +- contrib/groff/tmac/strip.sed | 4 +- contrib/groff/tmac/sv.tmac | 145 + contrib/groff/tmac/trace.tmac | 348 +- contrib/groff/tmac/trans.tmac | 141 + contrib/groff/tmac/troffrc | 8 +- contrib/groff/tmac/troffrc-end | 21 +- contrib/groff/tmac/unicode.tmac | 3 + contrib/groff/tmac/www.tmac | 751 +- 500 files changed, 88003 insertions(+), 31583 deletions(-) create mode 100644 contrib/groff/LICENSES create mode 100644 contrib/groff/config.guess create mode 100644 contrib/groff/config.rpath create mode 100644 contrib/groff/config.sub create mode 100644 contrib/groff/contrib/chem/ChangeLog create mode 100644 contrib/groff/contrib/chem/Makefile.sub create mode 100644 contrib/groff/contrib/chem/README.txt create mode 100644 contrib/groff/contrib/chem/chem.man create mode 100644 contrib/groff/contrib/chem/chem.pic create mode 100644 contrib/groff/contrib/chem/chem.pl create mode 100644 contrib/groff/contrib/chem/examples/122/README create mode 100644 contrib/groff/contrib/chem/examples/122/ch2a_ethyl.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch2b_benzene.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch2c_benzene_right.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4a_stick.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4b_methyl_acetate.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4c_colon.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4d_HCl.H2O.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4e_CaSO4.2H2O.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4f_C.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4g_BP.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4h_methacrylate.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4i_cyclo.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4j_ring4.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4k_ring3.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4l_vertex.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4m_double.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4n_triple.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4o_aromatic.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4p_cholestanol.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4q_rings.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4r_spiro.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4s_heteroatoms.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4t_polycyclic.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4u_nicotine.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4v_histidine.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4w_lsd.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4x_anisole.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4y_reserpine.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4z1_eqn_glutamic.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch4z2_text.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch5a_size.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch6a_pic.chem create mode 100644 contrib/groff/contrib/chem/examples/122/ch6b_dna.chem create mode 100644 contrib/groff/contrib/chem/examples/122/chAa_polymer.chem create mode 100644 contrib/groff/contrib/chem/examples/122/chAb_vinyl_chloro.chem create mode 100644 contrib/groff/contrib/chem/examples/122/chAc_morphine.chem create mode 100644 contrib/groff/contrib/chem/examples/122/chAd_chlorophyll.chem create mode 100644 contrib/groff/contrib/chem/examples/122/chAe_chair.chem create mode 100644 contrib/groff/contrib/chem/examples/122/chAf_arrow.chem create mode 100644 contrib/groff/contrib/chem/examples/122/chAg_circle.chem create mode 100644 contrib/groff/contrib/chem/examples/122/chAh_brackets.chem create mode 100644 contrib/groff/contrib/chem/examples/122/chAi_poly_vinyl_chloride.chem create mode 100644 contrib/groff/contrib/chem/examples/122/chBa_jump.chem create mode 100644 contrib/groff/contrib/chem/examples/122/chBb_bonds.chem create mode 100644 contrib/groff/contrib/chem/examples/122/chBc_rings.chem create mode 100644 contrib/groff/contrib/chem/examples/README.txt create mode 100644 contrib/groff/contrib/chem/examples/atp.chem create mode 100644 contrib/groff/contrib/chem/examples/cholesterin.chem create mode 100644 contrib/groff/contrib/chem/examples/ethamivan.chem create mode 100644 contrib/groff/contrib/chem/examples/lsd.chem create mode 100644 contrib/groff/contrib/chem/examples/morphine.chem create mode 100644 contrib/groff/contrib/chem/examples/penicillin.chem create mode 100644 contrib/groff/contrib/chem/examples/reserpine.chem create mode 100644 contrib/groff/contrib/hdtbl/ChangeLog create mode 100644 contrib/groff/contrib/hdtbl/Makefile.sub create mode 100644 contrib/groff/contrib/hdtbl/TODO create mode 100644 contrib/groff/contrib/hdtbl/examples/chess_board.roff create mode 100644 contrib/groff/contrib/hdtbl/examples/col_rowspan_colors.roff create mode 100644 contrib/groff/contrib/hdtbl/examples/color_boxes.roff create mode 100644 contrib/groff/contrib/hdtbl/examples/color_nested_tables.roff create mode 100644 contrib/groff/contrib/hdtbl/examples/color_table_cells.roff create mode 100644 contrib/groff/contrib/hdtbl/examples/color_transitions.roff create mode 100644 contrib/groff/contrib/hdtbl/examples/fonts_n.in create mode 100644 contrib/groff/contrib/hdtbl/examples/fonts_x.in create mode 100644 contrib/groff/contrib/hdtbl/examples/mixed_pickles.roff create mode 100644 contrib/groff/contrib/hdtbl/examples/rainbow.roff create mode 100644 contrib/groff/contrib/hdtbl/examples/short_reference.roff create mode 100644 contrib/groff/contrib/hdtbl/groff_hdtbl.man create mode 100644 contrib/groff/contrib/hdtbl/hdmisc.tmac create mode 100644 contrib/groff/contrib/hdtbl/hdtbl.tmac create mode 100644 contrib/groff/font/devhtml/R.in create mode 100644 contrib/groff/font/devps/generate/make-zapfdr create mode 100644 contrib/groff/font/devps/generate/symbolsl.awk create mode 100644 contrib/groff/font/devps/generate/zapfdr.sed copy contrib/groff/font/devps/{ => old}/CB (100%) copy contrib/groff/font/devps/{ => old}/CBI (100%) copy contrib/groff/font/devps/{ => old}/CI (100%) copy contrib/groff/font/devps/{ => old}/CR (100%) copy contrib/groff/font/devps/{ => old}/HB (100%) copy contrib/groff/font/devps/{ => old}/HBI (100%) copy contrib/groff/font/devps/{ => old}/HI (100%) copy contrib/groff/font/devps/{ => old}/HNB (100%) copy contrib/groff/font/devps/{ => old}/HNBI (100%) copy contrib/groff/font/devps/{ => old}/HNI (100%) copy contrib/groff/font/devps/{ => old}/HNR (100%) copy contrib/groff/font/devps/{ => old}/HR (100%) copy contrib/groff/font/devps/{ => old}/NB (100%) copy contrib/groff/font/devps/{ => old}/NBI (100%) copy contrib/groff/font/devps/{ => old}/NI (100%) copy contrib/groff/font/devps/{ => old}/NR (100%) copy contrib/groff/font/devps/{ => old}/PB (100%) copy contrib/groff/font/devps/{ => old}/PBI (100%) copy contrib/groff/font/devps/{ => old}/PI (100%) copy contrib/groff/font/devps/{ => old}/PR (100%) copy contrib/groff/font/devps/{ => old}/S (100%) copy contrib/groff/font/devps/{ => old}/SS (100%) copy contrib/groff/font/devps/{ => old}/TB (100%) copy contrib/groff/font/devps/{ => old}/TBI (100%) copy contrib/groff/font/devps/{ => old}/TI (100%) copy contrib/groff/font/devps/{ => old}/TR (100%) copy contrib/groff/font/devps/{ => old}/symbol.afm (100%) copy contrib/groff/font/devps/{generate => old}/symbolsl.afm (100%) copy contrib/groff/font/devps/{ => old}/zapfdr.afm (100%) copy contrib/groff/font/devps/{ => old}/zapfdr.ps (99%) create mode 100644 contrib/groff/font/devutf8/R.in create mode 100644 contrib/groff/font/util/make-Rproto create mode 100644 contrib/groff/m4/codeset.m4 create mode 100644 contrib/groff/m4/glibc21.m4 create mode 100644 contrib/groff/m4/groff.m4 create mode 100644 contrib/groff/m4/iconv.m4 create mode 100644 contrib/groff/m4/lib-ld.m4 create mode 100644 contrib/groff/m4/lib-link.m4 create mode 100644 contrib/groff/m4/lib-prefix.m4 create mode 100644 contrib/groff/src/include/itable.h create mode 100644 contrib/groff/src/include/localcharset.h create mode 100644 contrib/groff/src/libs/libgroff/config.charset create mode 100644 contrib/groff/src/libs/libgroff/localcharset.c create mode 100644 contrib/groff/src/libs/libgroff/make-uniuni create mode 100644 contrib/groff/src/libs/libgroff/ref-add.sin create mode 100644 contrib/groff/src/libs/libgroff/ref-del.sin create mode 100644 contrib/groff/src/libs/libgroff/relocatable.h create mode 100644 contrib/groff/src/preproc/preconv/Makefile.sub create mode 100644 contrib/groff/src/preproc/preconv/preconv.cpp create mode 100644 contrib/groff/src/preproc/preconv/preconv.man copy contrib/groff/src/utils/afmtodit/{afmtodit.pl => afmtodit.tables} (90%) create mode 100644 contrib/groff/src/utils/afmtodit/make-afmtodit-tables create mode 100644 contrib/groff/tmac/62bit.tmac create mode 100644 contrib/groff/tmac/LOCALIZATION create mode 100644 contrib/groff/tmac/TESTING-HINTS create mode 100644 contrib/groff/tmac/an-ext.tmac create mode 100644 contrib/groff/tmac/cs.tmac create mode 100644 contrib/groff/tmac/de.tmac create mode 100644 contrib/groff/tmac/den.tmac create mode 100644 contrib/groff/tmac/fr.tmac create mode 100644 contrib/groff/tmac/hyphen.cs create mode 100644 contrib/groff/tmac/hyphen.den create mode 100644 contrib/groff/tmac/hyphen.det create mode 100644 contrib/groff/tmac/hyphen.fr create mode 100644 contrib/groff/tmac/hyphen.sv create mode 100644 contrib/groff/tmac/hyphenex.cs create mode 100644 contrib/groff/tmac/hyphenex.det create mode 100644 contrib/groff/tmac/ptx.tmac create mode 100644 contrib/groff/tmac/sv.tmac create mode 100644 contrib/groff/tmac/trans.tmac diff --git a/contrib/groff/COPYING b/contrib/groff/COPYING index b2fe7b6af3..94a9ed024d 100644 --- a/contrib/groff/COPYING +++ b/contrib/groff/COPYING @@ -1,285 +1,626 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - Preamble + Preamble - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of this License. - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it @@ -287,15 +628,15 @@ free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least +state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) - This program is free software; you can redistribute it and/or modify + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -304,37 +645,30 @@ the "copyright" line and a pointer to where the full notice is found. GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/contrib/groff/LICENSES b/contrib/groff/LICENSES new file mode 100644 index 0000000000..f67c1eeead --- /dev/null +++ b/contrib/groff/LICENSES @@ -0,0 +1,181 @@ + Copyright 2003, 2006, 2007, 2009 + Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + +LICENSES +-------- + +The groff program is a free software project. It is licensed under the GNU +General Public License (GNU GPL), version 3 or later. + +The file COPYING in the top directory of the groff source package contains a +copy of the GPL that was downloaded from the GNU web site +http://www.gnu.org/copyleft/gpl.txt at 3 jan 2009. + +All files part of groff are licensed under this version of the GPL (or +licenses which are compatible with the GPL). You are free to choose +version 3 or any subsequent version of the GPL. + +The GPL names an address where you can get the actual version by normal +post. Further information is found in the internet at +http://www.gnu.org/copyleft. + +The groff program is a GNU package, and the copyright of all files of the +groff source package which are under the GPL has been assigned to the Free +Sofware Foundation (FSF). Information on GNU and FSF is found at +http://www.fsf.org/. + + +Here a list of files which are distributed with groff but which aren't +part of it (this is, they either have a non-GPL license, or the copyright +hasn't been assigned to the FSF). + + + Source Files + ------------ + + . The file `src/libs/snprintf/snprintf.c', written by Mark Martinec + . + + Please look into snprintf.c for the copyright message. + + The complete snprintf package together with documentation is available + from + + http://www.ijs.si/software/snprintf/ . + + . The `grn' preprocessor, written by Barry Roitblat + and David Slattengren . These files have been part + of the original Berkeley ditroff distribution, without AT&T code, and + are in the public domain. + + The original package can be found at + http://ftp.cs.wisc.edu/pub/misc/grn.tar.Z . + + src/preproc/grn/gprint.h + src/preproc/grn/hdb.cpp + src/preproc/grn/hgraph.cpp + src/preproc/grn/hpoint.cpp + src/preproc/grn/main.cpp + + . The `gxditview' output device. It is based on X11's `xditview' program + and thus has the X license. + + src/devices/xditview/DESC.in + src/devices/xditview/Dvi.c + src/devices/xditview/Dvi.h + src/devices/xditview/DviP.h + src/devices/xditview/FontMap + src/devices/xditview/GXditview.ad + src/devices/xditview/Menu.h + src/devices/xditview/ad2c + src/devices/xditview/device.c + src/devices/xditview/device.h + src/devices/xditview/draw.c + src/devices/xditview/font.c + src/devices/xditview/gray1.bm + src/devices/xditview/gray2.bm + src/devices/xditview/gray3.bm + src/devices/xditview/gray4.bm + src/devices/xditview/gray5.bm + src/devices/xditview/gray6.bm + src/devices/xditview/gray7.bm + src/devices/xditview/gray8.bm + src/devices/xditview/gxditview.man + src/devices/xditview/lex.c + src/devices/xditview/page.c + src/devices/xditview/parse.c + src/devices/xditview/xdit.bm + src/devices/xditview/xdit_mask.bm + src/devices/xditview/xditview.c + + src/include/DviChar.h + src/include/XFontName.h + + src/libs/libxutil/DviChar.c + src/libs/libxutil/XFontName.c + + + Macro Packages + -------------- + + . The -mdoc macro set, using the BSD license. + + tmac/doc.tmac + tmac/doc-old.tmac + tmac/doc-common + tmac/doc-ditroff + tmac/doc-nroff + tmac/doc-syms + tmac/groff_mdoc.man + + . The -me macro set, using the BSD license. + + tmac/e.tmac + tmac/groff_me.man + doc/meintro.me + doc/meref.me + + + Hyphenation Patterns + -------------------- + + . The file `tmac/hyphen.us' is identical to the file `hyphen.tex', part of + the TeX system written by Donald E. Knuth; the master file can be found + at + + ftp://labrea.stanford.edu/pub/tex/dist/lib/hyphen.tex . + + It has been renamed for consistency, i.e., to make patterns available + under the filenames `hyphen.', e.g. `hyphen.de' or + `hyphen.uk'. + + See the file itself for a copyright notice. + + . The file `tmac/hyphen.fr' contains the same patterns as the file + `frhyph.tex' (for TeX), which can be found at + + http://dante.ctan.org/CTAN/language/hyphenation/frhyph.tex . + + The patterns have been converted to a format groff can understand. + + See the file itself for a copyright notice. + + . The file `tmac/hyphen.sv' is identical to the file `svhyph.tex', which + can be found at + + http://dante.ctan.org/CTAN/language/hyphenation/svhyph.tex . + + See the file itself for a copyright notice. + + . The files `tmac/hyphen.det' and `tmac/hyphen.den' contain the same + patterns as the files `dehyphn.tex' and `dehypht.tex' (for TeX), which + can be found at + + http://dante.ctan.org/CTAN/language/hyphenation/dehyphn.tex + http://dante.ctan.org/CTAN/language/hyphenation/dehypht.tex . + + The patterns have been converted to a format groff can understand. + + See the files themselves for a copyright notice. + + . The file `tmac/hyphenex.det' is identical to the file `dehyphtex.tex', + which can be found at + + http://dante.ctan.org/CTAN/language/hyphenation/dehyphtex.tex . + + See the file itself for a copyright notice. + + . The file `tmac/hyphen.cs' contains the same patterns as the file + `czhyphen.tex' (for TeX), which can be found in the archive + + http://dante.ctan.org/CTAN/macros/cstex/base/csplain.tar.gz . + + The patterns have been converted to a format groff can understand. + + See the file itself for a copyright notice. + +EOF diff --git a/contrib/groff/README b/contrib/groff/README index 5f80eaf589..a2bae6149d 100644 --- a/contrib/groff/README +++ b/contrib/groff/README @@ -1,17 +1,25 @@ + Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, + 2009 + Free Software Foundation, Inc. + + Copying and distribution of this file, with or without modification, + are permitted in any medium without royalty provided the copyright + notice and this notice are preserved. + This is the GNU `groff' document formatting system. The version number is given in the file VERSION. Included in this release are implementations of `troff', `pic', `eqn', `tbl', `grn', `refer', `-man', `-mdoc', `-mom', and `-ms' macros, and drivers for `PostScript', `TeX dvi' format, `HP LaserJet 4' printers, -`Canon CAPSL' printers, `HTML' format (beta status), and +`Canon CAPSL' printers, `HTML' and `XHTML' formats (beta status), and typewriter-like devices. Also included is a modified version of the Berkeley `-me' macros, the enhanced version `gxditview' of the X11 `xditview' previewer, and an implementation of the `-mm' macros contributed by Joergen Haegg (jh@axis.se). -See the file `INSTALL' for installation instructions. You will -require a C++ compiler. +See the file `INSTALL' for installation instructions. You require +a C++ compiler. The file `NEWS' describes recent user-visible changes to `groff'. @@ -21,6 +29,9 @@ permission. The file `PROBLEMS' describes various problems that have been encountered in compiling, installing, and running `groff'. +The file `MORE.STUFF' contains information about add-on packages +useful for groff. + The most recent released version of `groff' is always available by anonymous ftp from `ftp.gnu.org' in the directory `gnu/groff'. @@ -30,17 +41,14 @@ in which to create a working copy (call it, say, `~/cvswork'), and then executing the commands cd ~/cvswork - CVS_RSH=ssh; export CVS_RSH - cvs -d:ext:anoncvs@savannah.gnu.org/cvsroot/groff -z5 co groff + cvs -d:pserver:anonymous@cvs.savannah.gnu.org/sources/groff -z5 co groff -(Note that you need an `ssh' client for security reasons.) - -This will create a subdirectory, `~/cvswork/groff', with a "checked -out" copy of the `CVS' repository. An update of this working copy may +This creates a subdirectory, `~/cvswork/groff', with a `checked +out' copy of the `CVS' repository. An update of this working copy may be achieved, at any later time by invoking the commands cd ~/cvswork/groff - CVS_RSH=ssh cvs -z5 update -dP + cvs -z5 update -dP Please read the `CVS' info pages for further details. @@ -80,9 +88,9 @@ Note that `texinfo' and `bison' or `byacc' are required only for building from `CVS' sources (either a checked out working copy, or a daily snapshot). They are not required for building from a stable release tarball. Also note that the version numbers stated are the -minimum supported. No version of `texinfo' < 4.8 will work, and the +minimum supported. No version of `texinfo' < 4.8 works, and the original release of `bison' 1.875 is known not to work; you *may* find -that `bison' releases < 1.875 will work, but in case of difficulty, +that `bison' releases < 1.875 work, but in case of difficulty, please update to a later version *before* posting a bug report. For *all* sources, you need ghostscript for creation of either `PDF' or @@ -91,7 +99,7 @@ For *all* sources, you need ghostscript for creation of either `PDF' or formats, then these packages are unnecessary. In Linux Debian, the installation of `texinfo' is dangerous. For it -creates a file `install-info' that will block the system installation. +creates a file `install-info' that blocks the system installation. So the created `/usr/local/bin/install-info' must be renamed. The `groff' configure script searches for the X11 headers and @@ -104,8 +112,8 @@ Please report bugs using the form in the file `BUG-REPORT'; the idea of this is to make sure that FSF has all the information it needs to fix the bug. At the very least, read the `BUG-REPORT' form and make sure that you supply all the information that it asks for. Even if you are -not sure that something is a bug, report it using `BUG-REPORT': this will -enable us to determine whether it really is a bug or not. +not sure that something is a bug, report it using `BUG-REPORT': this +enables us to determine whether it really is a bug or not. Three mailing lists are available: @@ -114,9 +122,6 @@ Three mailing lists are available: groff-commit@gnu.org a read-only list showing commitments to the CVS repository -You can post mails directly to the `bug-groff' list, without subscribing; -to post mails to the `groff' list you must subscribe to it. - To subscribe, send a mail to -request@ (example: groff-request@gnu.org for the `groff' list) with the word `subscribe' in either the subject or body of the email (don't include the quotes). diff --git a/contrib/groff/README.DRAGONFLY b/contrib/groff/README.DRAGONFLY index d80f4c7956..48d96e17a7 100644 --- a/contrib/groff/README.DRAGONFLY +++ b/contrib/groff/README.DRAGONFLY @@ -1,5 +1,5 @@ - GROFF-1.19.1 AS USED BY DRAGONFLY + GROFF-1.20.1 AS USED BY DRAGONFLY This directory contains a selected set of files from the gnu groff-1.19.1.tar.gz distribution. No files have been moved @@ -9,6 +9,9 @@ http://groff.ffii.org/groff/ + MD5 (groff-1.20.1.tar.gz) = 48fa768dd6fdeb7968041dd5ae8e2b02 + SHA1 (groff-1.20.1.tar.gz) = 3066587d73df73c2bda235034f4515cf52d22549 + DO NOT CREATE OR EDIT ANY FILES IN THIS DIRECTORY HIERARCHY! THIS HIERARCHY REPRESENTS AN EXACT COPY, MINUS UNNEEDED FILES, OF THE ORIGINAL ARCHIVE. All modifications are made in the @@ -18,16 +21,7 @@ are README.DRAGONFLY and README.DELETED. UPGRADE PROCEDURE: - - * download a new groff-1.19.X dist greater then 1.19.1 - - * extract the archive into this directory, overlaying the - existing files. - - * A 'cvs update' will show you what has changed ('M') relative - to what we had before. There will be hundreds of files marked - '?' which, if not needed, should be deleted and NOT COMMITTED. - If any new files are needed you can cvs add and commit them. + * get a new distribution and follow development(7). * Check overrides and patches in src/gnu/usr.bin/groff and modify as appropriate. diff --git a/contrib/groff/REVISION b/contrib/groff/REVISION index 0cfbf08886..d00491fd7e 100644 --- a/contrib/groff/REVISION +++ b/contrib/groff/REVISION @@ -1 +1 @@ -2 +1 diff --git a/contrib/groff/VERSION b/contrib/groff/VERSION index bc4493477a..5fb5a6b4f5 100644 --- a/contrib/groff/VERSION +++ b/contrib/groff/VERSION @@ -1 +1 @@ -1.19 +1.20 diff --git a/contrib/groff/config.guess b/contrib/groff/config.guess new file mode 100644 index 0000000000..3f51f4ea90 --- /dev/null +++ b/contrib/groff/config.guess @@ -0,0 +1,1552 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# Free Software Foundation, Inc. + +timestamp='2008-12-19' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:[3456]*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + EM64T | authenticamd | genuineintel) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^CPU/{ + s: ::g + p + }'`" + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' + /^LIBC/{ + s: ::g + p + }'`" + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/contrib/groff/config.rpath b/contrib/groff/config.rpath new file mode 100644 index 0000000000..85c2f209be --- /dev/null +++ b/contrib/groff/config.rpath @@ -0,0 +1,672 @@ +#! /bin/sh +# Output a system dependent set of variables, describing how to set the +# run time search path of shared libraries in an executable. +# +# Copyright 1996-2008 Free Software Foundation, Inc. +# Taken from GNU libtool, 2001 +# Originally by Gordon Matzigkeit , 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld +# should be set by the caller. +# +# The set of defined variables is at the end of this script. + +# Known limitations: +# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer +# than 256 bytes, otherwise the compiler driver will dump core. The only +# known workaround is to choose shorter directory names for the build +# directory and/or the installation directory. + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a +shrext=.so + +host="$1" +host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +# Code taken from libtool.m4's _LT_CC_BASENAME. + +for cc_temp in $CC""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` + +# Code taken from libtool.m4's _LT_COMPILER_PIC. + +wl= +if test "$GCC" = yes; then + wl='-Wl,' +else + case "$host_os" in + aix*) + wl='-Wl,' + ;; + darwin*) + case $cc_basename in + xlc*) + wl='-Wl,' + ;; + esac + ;; + mingw* | cygwin* | pw32* | os2* | cegcc*) + ;; + hpux9* | hpux10* | hpux11*) + wl='-Wl,' + ;; + irix5* | irix6* | nonstopux*) + wl='-Wl,' + ;; + newsos6) + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + ecc*) + wl='-Wl,' + ;; + icc* | ifort*) + wl='-Wl,' + ;; + lf95*) + wl='-Wl,' + ;; + pgcc | pgf77 | pgf90) + wl='-Wl,' + ;; + ccc*) + wl='-Wl,' + ;; + como) + wl='-lopt=' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + wl='-Wl,' + ;; + esac + ;; + esac + ;; + osf3* | osf4* | osf5*) + wl='-Wl,' + ;; + rdos*) + ;; + solaris*) + wl='-Wl,' + ;; + sunos4*) + wl='-Qoption ld ' + ;; + sysv4 | sysv4.2uw2* | sysv4.3*) + wl='-Wl,' + ;; + sysv4*MP*) + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + wl='-Wl,' + ;; + unicos*) + wl='-Wl,' + ;; + uts4*) + ;; + esac +fi + +# Code taken from libtool.m4's _LT_LINKER_SHLIBS. + +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no + +case "$host_os" in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + # Unlike libtool, we use -rpath here, not --rpath, since the documented + # option of GNU ld is called -rpath, not --rpath. + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + case "$host_os" in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + fi + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we cannot use + # them. + ld_shlibs=no + ;; + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + cygwin* | mingw* | pw32* | cegcc*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + interix[3-9]*) + hardcode_direct=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + gnu* | linux* | k*bsd*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + netbsd*) + ;; + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + else + ld_shlibs=no + fi + ;; + esac + ;; + sunos4*) + hardcode_direct=yes + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + esac + if test "$ld_shlibs" = no; then + hardcode_libdir_flag_spec= + fi +else + case "$host_os" in + aix3*) + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + else + aix_use_runtimelinking=no + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + fi + hardcode_direct=yes + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + fi + # Begin _LT_AC_SYS_LIBPATH_AIX. + echo 'int main () { return 0; }' > conftest.c + ${CC} ${LDFLAGS} conftest.c -o conftest + aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + fi + if test -z "$aix_libpath"; then + aix_libpath="/usr/lib:/lib" + fi + rm -f conftest.c conftest + # End _LT_AC_SYS_LIBPATH_AIX. + if test "$aix_use_runtimelinking" = yes; then + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + else + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + fi + fi + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + bsdi[45]*) + ;; + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + libext=lib + ;; + darwin* | rhapsody*) + hardcode_direct=no + if test "$GCC" = yes ; then + : + else + case $cc_basename in + xlc*) + ;; + *) + ld_shlibs=no + ;; + esac + fi + ;; + dgux*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + freebsd1*) + ld_shlibs=no + ;; + freebsd2.2*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + freebsd2*) + hardcode_direct=yes + hardcode_minus_L=yes + ;; + freebsd* | dragonfly*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + hpux9*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + hpux10*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + hpux11*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + ;; + *) + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + irix5* | irix6* | nonstopux*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + netbsd*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + newsos6) + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + else + case "$host_os" in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + osf3*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + osf4* | osf5*) + if test "$GCC" = yes; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + # Both cc and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + solaris*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + sunos4*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + sysv4) + case $host_vendor in + sni) + hardcode_direct=yes # is this really true??? + ;; + siemens) + hardcode_direct=no + ;; + motorola) + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + ;; + sysv4.3*) + ;; + sysv4*MP*) + if test -d /usr/nec; then + ld_shlibs=yes + fi + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + ;; + sysv5* | sco3.2v5* | sco5v6*) + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator=':' + ;; + uts4*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + *) + ld_shlibs=no + ;; + esac +fi + +# Check dynamic linker characteristics +# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. +# Unlike libtool.m4, here we don't care about _all_ names of the library, but +# only about the one the linker finds when passed -lNAME. This is the last +# element of library_names_spec in libtool.m4, or possibly two of them if the +# linker has special search rules. +library_names_spec= # the last element of library_names_spec in libtool.m4 +libname_spec='lib$name' +case "$host_os" in + aix3*) + library_names_spec='$libname.a' + ;; + aix[4-9]*) + library_names_spec='$libname$shrext' + ;; + amigaos*) + library_names_spec='$libname.a' + ;; + beos*) + library_names_spec='$libname$shrext' + ;; + bsdi[45]*) + library_names_spec='$libname$shrext' + ;; + cygwin* | mingw* | pw32* | cegcc*) + shrext=.dll + library_names_spec='$libname.dll.a $libname.lib' + ;; + darwin* | rhapsody*) + shrext=.dylib + library_names_spec='$libname$shrext' + ;; + dgux*) + library_names_spec='$libname$shrext' + ;; + freebsd1*) + ;; + freebsd* | dragonfly*) + case "$host_os" in + freebsd[123]*) + library_names_spec='$libname$shrext$versuffix' ;; + *) + library_names_spec='$libname$shrext' ;; + esac + ;; + gnu*) + library_names_spec='$libname$shrext' + ;; + hpux9* | hpux10* | hpux11*) + case $host_cpu in + ia64*) + shrext=.so + ;; + hppa*64*) + shrext=.sl + ;; + *) + shrext=.sl + ;; + esac + library_names_spec='$libname$shrext' + ;; + interix[3-9]*) + library_names_spec='$libname$shrext' + ;; + irix5* | irix6* | nonstopux*) + library_names_spec='$libname$shrext' + case "$host_os" in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; + *) libsuff= shlibsuff= ;; + esac + ;; + esac + ;; + linux*oldld* | linux*aout* | linux*coff*) + ;; + linux* | k*bsd*-gnu) + library_names_spec='$libname$shrext' + ;; + knetbsd*-gnu) + library_names_spec='$libname$shrext' + ;; + netbsd*) + library_names_spec='$libname$shrext' + ;; + newsos6) + library_names_spec='$libname$shrext' + ;; + nto-qnx*) + library_names_spec='$libname$shrext' + ;; + openbsd*) + library_names_spec='$libname$shrext$versuffix' + ;; + os2*) + libname_spec='$name' + shrext=.dll + library_names_spec='$libname.a' + ;; + osf3* | osf4* | osf5*) + library_names_spec='$libname$shrext' + ;; + rdos*) + ;; + solaris*) + library_names_spec='$libname$shrext' + ;; + sunos4*) + library_names_spec='$libname$shrext$versuffix' + ;; + sysv4 | sysv4.3*) + library_names_spec='$libname$shrext' + ;; + sysv4*MP*) + library_names_spec='$libname$shrext' + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + library_names_spec='$libname$shrext' + ;; + uts4*) + library_names_spec='$libname$shrext' + ;; +esac + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` +shlibext=`echo "$shrext" | sed -e 's,^\.,,'` +escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` + +LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/contrib/groff/contrib/chem/ChangeLog b/contrib/groff/contrib/chem/ChangeLog new file mode 100644 index 0000000000..aee1fffc48 --- /dev/null +++ b/contrib/groff/contrib/chem/ChangeLog @@ -0,0 +1,212 @@ +2009-01-03 Werner LEMBERG + + * chem.pl: Prepare for groff version 1.20. + +2008-01-04 Werner LEMBERG + + * chem.man: Insert `\:' in URLs where appropriate. + +2007-02-06 Eric S. Raymond + + * chem.man: Change .UR/.UE and .MT/.ME so the start macro no longer + takes a second argument that is pasted to the end of the generated + text. Instead, the end macro takes an argument that does the same + thing. + +2007-02-02 Werner LEMBERG + + * chem.man: Further refinements and normalizations. + +2007-02-02 Eric S. Raymond + + * chem.man: Converted to use .SY/.OP/.YS and for cross-viewer + portability. Conversion checked using the protocol described in + tmac/TESTING-HINTS. + +2006-11-10 Bernd Warken + ________________________________________________________________ + * release of chem 0.3.1 + + * chem.man: Add information about example files. + +2006-11-10 Werner LEMBERG + + * chem.man1: Rename back to... + * chem.man: This. + Use @G@, @MACRODIR@, and @DATASUBDIR@. + + * Makefile.sub (CLEANADD, all): Don't handle chem.man. + (chem.man): Remove rule. + (chem): s/tmacdir/MACRODIR/, s/picdir/PICDIR/. + + * chem.pl: s/tmacdir/MACRODIR/, s/picdir/PICDIR/. + +2006-11-10 Bernd Warken + ________________________________________________________________ + * release of chem 0.3.0 + + * chem.man1: Rename `chem.man' to translate some `@...@' + constructs. Some minor corrections. Remove some unused macros. + + * examples/README.txt, examples/122/README: Add information on + `roff2*' programs. + + * chem.pic: Rename `macros.pic'. + + * Makefile.sub, chem.pl: Replace `macros.pic' by `chem.pic'. + +2006-11-09 Werner LEMBERG + + * chem.man: Revised. + +2006-11-08 Bernd Warken + ________________________________________________________________ + * release of chem 0.2.0 + + * pic.tmac: Remove this file. Use instead the installed pic.tmac + in $(tmacdir). + + * Makefile.sub, chem.pl: + - Install macros.pic to $(tmacdir)/pic/chem.pic. + - Remove parts with `libdir'. + +2006-11-07 Werner LEMBERG + + * Makefile.sub: Add and fix $(srcdir) where necessary to make it + compile with srcdir != builddir. Other minor fixes improvements. + +2006-11-07 Bernd Warken + ________________________________________________________________ + * release of chem 0.1.2 + + ### `chem' works now with all example files (examples/*.chem and + examples/122/*.chem). + + * examples/122/README: Add some information on the example files. + + * examples/122/chAi_poly_vinyl_chloride.chem: Use .ps with + argument `-2' and recall `.ps +2' at the end of the file. This + stops the size shift in the following files. + + * examples/122/ch6b_dna.chem: Make the file runnable, it works + now. + + * examples/reserpine.chem: Change access to `begin chem'. + + * chem.man: + - Fix the BUGS section. + - Correct the name of the macro file to `macros.pic'. + - Extent section DESCRIPTION and LANGUAGE. + - Moieties and Strings: Rewritten section about moieties and + double quoted strings. + + * chem.pl: + - parameter check: Add filespecs only when non-empty file. + - Set $Last_Type to $OTHER for the `pic' command. + - joinring(), label(), labsave(), reduce(): Remove these functions. + - `[', `]', `{', `}', `define': Make these and the defined + functions commands for `chem' without using the `pic' word. + - @Words: Fix it such that all double quoted strings are + completely in an element. + - `Last: ': Remove this prefix from all commands that are related + to `pic'. + + ### global variables + + * chem.pl: + - $Line: Add this variable to store the unchanged input line. + - %Params: Add the variables from setparams() to this hash. + - %Types: Add BOND, MOL, RING, OTHER from init() to this hash. + - %Put: Move %put to this. + - %Dbl: Move %dbl to this. + - %Labtype: Move %labtype to this. + - %Aromatic: Move $aromatic to this. + - %Dc: Move %dc to this. + - %Nput: Move $nput to this. + - %Define: New hash for storing the names of the `define' + constructs during `chem'. Use the elements in `%Define' as `chem' + commands. + +2006-10-27 Bernd Warken + ________________________________________________________________ + * release of chem 0.1.1 + + * chem.pl: + - Add handling of `[' and `]' (extension of chem awk). + - Restrict line break after labels. + + * ChangeLog: Correct the former entry. + +2006-10-26 Bernd Warken + ________________________________________________________________ + * release of chem 0.1.0 + + ### Extensions to the chem awk version. + + * chem.pl: + - parameters: -h, --help, -v, --version, -- are added as options. + The minus character - is added as filespec for standard input, it + may be used several times. + - remove the functions `inline', `shiftfields', and `set'. + - Fix the handling of the initialization commands .PS, .cstart, + `begin chem', and `end'. + - Add error massages. + - error(): Add file name. + - Add concatenation of lines with final backslash `\'. + - Add pic.tmac to guarantee that each pic display is centered. + - Warnings and strict are active. + + ### Source files of the chem Perl version + + * chem.pl: Source file for the Perl version of chem. + + * macros.pic: Pic macro file that is loaded by each run of chem. + + * pic.tmac: Macro file for .PS and .PE; taken over from the groff + source file /tmac/pic.tmac. + + * Makefile.sub: Make file for the groff system. + + * ChangeLog: This file. + + * chem.man: Manual page for the Perl version of chem. + + * README.txt: File for information on this chem version. + + * examples/*.chem: Self-constructed example files for chem. + + * examples/README.txt: Information on the example files. + + * examples/122/*.chem: Example files from the classical chem book + 122.ps at . + + * examples/122/README: Information on the example files in this + directory. + +2006-10-16 Bernd Warken + + * awk version of chem + chem is a roff preprocessor that generates chemical structure + diagrams suitable for the pic preprocessor. The original version + of chem is an awk script written by Brian Kernighan. This project + is a rewrite of chem in Perl. + +2006-10-15 Bernd Warken + ________________________________________________________________ + License + + Copyright (C) 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Written by Bernd Warken + + Copying and distribution of this file, with or without + modification, are permitted provided the copyright notice and this + notice are preserved. + + This file is part of `chem', which is part of the `groff' project. + + ####### Emacs settings + + Local Variables: + mode: change-log + End: diff --git a/contrib/groff/contrib/chem/Makefile.sub b/contrib/groff/contrib/chem/Makefile.sub new file mode 100644 index 0000000000..1da996ec16 --- /dev/null +++ b/contrib/groff/contrib/chem/Makefile.sub @@ -0,0 +1,98 @@ +# Makefile.sub for `chem' (integration into the `groff' source tree) + +# File position: /contrib/chem/Makefile.sub + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. +# Written by Bernd Warken. + +# Last update: 5 Jan 2009 + +# This file is part of `chem' which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +MAN1=chem.n +MOSTLYCLEANADD=chem chem.n README examples/README + +# not all make programs have $(RM) predefined. +RM=rm -f + +all: README examples/README chem $(MAN1) + +README: $(srcdir)/README.txt + sed -e "s|@g@|$(g)|g" $? >$@ + +examples/README: $(srcdir)/examples/README.txt + -test -d examples || $(mkinstalldirs) examples + sed -e "s|@g@|$(g)|g" $? >$@ + +chem: $(srcdir)/chem.pl $(SH_DEPS_SED_SCRIPT) + sed -f "$(SH_DEPS_SED_SCRIPT)" \ + -e "s|@g@|$(g)|g" \ + -e "s|@BINDIR@|$(DESTDIR)$(bindir)|g" \ + -e "s|@MACRODIR@|$(DESTDIR)$(tmacdir)|g" \ + -e "s|@PICDIR@|$(DESTDIR)$(datasubdir)/pic|g" \ + -e "s|@VERSION@|$(version)$(revision)|g" \ + -e "$(SH_SCRIPT_SED_CMD)" \ + $(srcdir)/chem.pl >$@ + chmod +x $@ + +install_data: chem \ + README examples/README \ + $(srcdir)/chem.pic \ + $(srcdir)/examples/*.chem $(srcdir)/examples/122/* + -test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir) + $(RM) $(DESTDIR)$(bindir)/$(g)chem + $(INSTALL_SCRIPT) chem $(DESTDIR)$(bindir)/$(g)chem + -test -d $(DESTDIR)$(datasubdir)/pic \ + || $(mkinstalldirs) $(DESTDIR)$(datasubdir)/pic + $(RM) $(DESTDIR)$(datasubdir)/pic/chem.pic + $(INSTALL_DATA) $(srcdir)/chem.pic \ + $(DESTDIR)$(datasubdir)/pic/chem.pic + -test -d $(DESTDIR)$(exampledir)/chem \ + || $(mkinstalldirs) $(DESTDIR)$(exampledir)/chem/122 + -test -d $(DESTDIR)$(exampledir)/chem/122 \ + || $(mkinstalldirs) $(DESTDIR)$(exampledir)/chem/122 + -$(RM) $(DESTDIR)$(exampledir)/chem/* + $(INSTALL_DATA) examples/README \ + $(DESTDIR)$(exampledir)/chem/README + for i in $(srcdir)/examples/*.chem; do \ + n=`echo $$i | sed 's|$(srcdir)/examples/||g'`; \ + $(INSTALL_DATA) $$i $(DESTDIR)$(exampledir)/chem/$$n; \ + done + -$(RM) $(DESTDIR)$(exampledir)/chem/122/* + for i in $(srcdir)/examples/122/*; do \ + n=`echo $$i | sed 's|$(srcdir)/examples/122/||g'`; \ + $(INSTALL_DATA) $$i $(DESTDIR)$(exampledir)/chem/122/$$n; \ + done + +uninstall_sub: + $(RM) $(DESTDIR)$(bindir)/chem + $(RM) $(DESTDIR)$(datasubdir)/pic/chem.pic + -rmdir $(DESTDIR)$(datasubdir)/pic + $(RM) $(DESTDIR)$(exampledir)/chem/122/* + -rmdir $(DESTDIR)$(exampledir)/chem/122 + $(RM) $(DESTDIR)$(exampledir)/chem/* + -rmdir $(DESTDIR)$(exampledir)/chem + -rmdir $(DESTDIR)$(exampledir) + +######################################################################## +# Emacs settings +######################################################################## +# +# Local Variables: +# mode: makefile +# End: diff --git a/contrib/groff/contrib/chem/README.txt b/contrib/groff/contrib/chem/README.txt new file mode 100644 index 0000000000..35ff995be3 --- /dev/null +++ b/contrib/groff/contrib/chem/README.txt @@ -0,0 +1,52 @@ +`chem' is a `roff' language to generate chemical structure diagrams. +`@g@chem' is a `groff' preprocessor that produces output suitable for +the `@g@pic' preprocessor. + +The original version of `chem' is an `awk' script written by Brian +Kernighan . The +source files of the `awk' version of `chem' are available at +. + +This project is a rewrite of `chem' in Perl for the GNU `roff' project +`groff'. It was written under Perl v5.8.8, but at least Perl v5.6 is +needed to run the Perl version of `chem'. + +In comparison to the original `awk' version of `chem', the Perl +version does the following changements: +- the options -h, --help, -v, --version to output usage and version +information are added. +- remove some functions `inline', `shiftfields', and `set' and some +variables that are used only once. + +The subdirectory `examples/' contains example files for chem. They +are written in the `chem' language. The file names end with .chem. + + +####### License + +Last update: 5 Jan 2009 + +Copyright (C) 2006, 2009 Free Software Foundation, Inc. +Written by Bernd Warken. + +This file is part of `chem', which is part of `groff'. + +`groff' is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +`groff' is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +####### Emacs settings + +Local Variables: +mode: text +End: diff --git a/contrib/groff/contrib/chem/chem.man b/contrib/groff/contrib/chem/chem.man new file mode 100644 index 0000000000..66f6e9caec --- /dev/null +++ b/contrib/groff/contrib/chem/chem.man @@ -0,0 +1,1017 @@ +.ig +@g@chem.1 - man page for @g@chem (section 1). + +Source file position: /contrib/chem/chem.man +Installed position: $prefix/share/man/man1/@g@chem.1 + +Last update: 05 Jan 2009 +.. +. +. +.de au +This file was written by Bernd Warken. +It is based on the documentation of +.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:who/\:bwk/\:index.html +Brian Kernighan +.UE 's +original +.I awk +version of +.IR chem . +.. +. +. +.de co +Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation, Inc. +. +. +.P +This file is part of +.IR chem , +which is part of +.IR groff , +a free software project. +. +You can redistribute it and/or modify it under the terms of the +.nh +.B "GNU General Public License" +.hy +as published by the +.nh +.BR "Free Software Foundation" , +.hy +either version\~2, or (at your option) any later version. +. +. +.P +You should have received a copy of the \f(CRGNU General Public +License\fP along with +.IR groff , +see the files \%\f(CBCOPYING\fP and \%\f(CBLICENSE\fP in the top +directory of the +.I groff +source package. +. +Or read the +.I man page +.BR gpl (1). +You can also write to the +.nh +.B "Free Software Foundation, 51 Franklin St - Fifth Floor, Boston," +.BR "MA 02110-1301, USA" . +.hy +.. +. +. +.\" -------------------------------------------------------------------- +.\" Local macro definitions +. +.ds El \&.\|.\|.\& +. +.\" .File_name () +.\" +.\" Display a file or directory name in CB font. +.\" +.de FN +. CB \\$@ +.. +. +.\" .CB () +.\" +.\" Display a line in CB font, for example after .TP +.\" +.de CB +.nh +\\&\\f(CB\\$1\\fP\\$2 +.hy +.. +. +.\" End of macro definitions +. +. +.TH @G@CHEM @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@" +.SH NAME +@g@chem \- groff preprocessor for producing chemical structure diagrams +. +. +.SH "SYNOPSIS" +.\" -------------------------------------------------------------------- +.\" SH "SYNOPSIS" +.\" -------------------------------------------------------------------- +. +.SY @g@chem +.RI [ "\%option" \*(El] +.OP \-\- +.RI [ "\%filespec" \*(El] +. +.SY @g@chem +.B \-h +| +.B \-\-help +. +.SY @g@chem +.B \-v +| +.B \-\-version +.YS +. +. +.\" -------------------------------------------------------------------- +.SH OPTION USAGE +.\" -------------------------------------------------------------------- +. +.P +There are no other options than +.BR \-h , +.BR \-\-help , +.BR \-v , +and +.BR \%\-\-version ; +these options provoke the printing of a version or usage information, +respectively, and all +.I filespec +arguments are ignored. +. +A +.I filespec +argument is either a file name of an existing file or a minus +character +.BR \- , +meaning standard input. +. +If no argument is specified then standard input is taken +automatically. +. +. +.\" -------------------------------------------------------------------- +.SH DESCRIPTION +.\" -------------------------------------------------------------------- +. +.I chem +produces chemical structure diagrams. +. +Today's version is best suited for organic chemistry (bonds, rings). +. +The +.B @g@chem +program is a +.B groff +preprocessor like +.BR @g@eqn , +.BR @g@pic , +.BR @g@tbl , +etc. +. +It generates +.I pic +output such that all +.I chem +parts are translated into diagrams of the +.I pic +language. +. +. +.P +The program +.B @g@chem +originates from the Perl source file +.FN chem.pl . +It tells +.B @g@pic +to include a copy of the macro file +.FN chem.pic . +. +Moreover the +.I groff +source file +.FN pic.tmac +is loaded. +. +. +.P +In a style reminiscent of +.I eqn +and +.IR pic , +the +.I chem +diagrams are written in a special language. +. +. +.P +A set of +.I chem +lines looks like this +. +. +.IP +.nf +.ft B +\&.cstart +\fIchem data\fP +\&.cend +.ft +.fi +. +. +.P +Lines containing the keywords +.B .cstart +and +.B .cend +start and end the input for +.BR @g@chem , +respectively. +. +In +.I pic +context, i.e., after the call of +.BR .PS , +.I chem +input can optionally be started by the line +.B \%begin\~chem +and ended by the line with the single word +.B end +instead. +. +. +.P +Anything outside these initialization lines is copied through +without modification; +all data between the initialization lines is converted into +.I pic +commands to draw the diagram. +. +. +.P +As an example, +. +.IP +.nf +.ft B +\&.cstart +CH3 +bond +CH3 +\&.cend +.ft +.fi +. +. +.P +prints two +.B CH3 +groups with a bond between them. +. +. +.P +To actually view this, you must run +.B @g@chem +followed by +.BR groffer : +. +.IP +.B "@g@chem [file\*(El] | groffer" +. +.P +If you want to create just +.B groff +output, you must run +.B @g@chem +followed by +.B groff +with the option +.B \-p +for the activation of +.BR @g@pic : +.IP +.B "@g@chem [file\*(El] | groff -p \*(El" +. +. +.\" -------------------------------------------------------------------- +.SH THE LANGUAGE +.\" -------------------------------------------------------------------- +. +The +.I chem +input language is rather small. It provides rings of several styles +and a way to glue them together as desired, bonds of several styles, +moieties (e.g., +.BR C , +.BR NH3 , +\*(El), and strings. +. +. +.\" -------------------------------------------------------------------- +.SS Setting Variables +.\" -------------------------------------------------------------------- +. +There are some variables that can be set by commands. +. +Such commands have two possible forms, either +. +.RS +.P +.I "variable value" +.RE +. +.P +or +. +.RS +.P +.IB "variable " = " value" +.RE +. +.P +This sets the given +.I variable +to the argument +.IR value . +If more arguments are given only the last argument is taken, all other +arguments are ignored. +. +. +.P +There are only a few variables to be set by these commands: +. +.TP +.BI textht " arg" +Set the height of the text to +.IR arg ; +default is 0.16. +. +.TP +.BI cwid " arg" +Set the character width to +.IR arg ; +default is 0.12. +. +.TP +.BI db " arg" +Set the bond length to +.IR arg ; +default is 0.2. +. +.TP +.BI size " arg" +Scale the diagram to make it look plausible at point size +.IR arg ; +default is 10 point. +. +. +.\" -------------------------------------------------------------------- +.SS Bonds +.\" -------------------------------------------------------------------- +. +This +. +.RS +.SY bond +.RI [ direction ] +.RI [ length\ n ] +.RB [ from\ \c +.IR Name | picstuff ] +.YS +.RE +. +.P +draws a single bond in direction from nearest corner of +.IR Name . +.B bond +can also be +.BR "double bond" , +.BR "front bond" , +.BR "back bond" , +etc. +. +(We will get back to +.I Name +soon.) +. +. +.P +.I direction +is the angle in degrees (0\~up, positive clockwise) +or a direction word like +.BR up , +.BR down , +.B sw +(=\~southwest), etc. +. +If no direction is specified, the bond goes in the current direction +(usually that of the last bond). +. +. +.P +Normally the bond begins at the last object placed; this +can be changed by naming a +.B from +place. +. +For instance, to make a simple alkyl chain: +. +.RS +.TS +tab (@); +lb l. +CH3 +bond@(this one goes right from the CH3) +C@(at the right end of the bond) +double bond up@(from the C) +O@(at the end of the double bond) +bond right from C +CH3 +.TE +.RE +. +. +.P +A length in inches may be specified to override the default length. +. +Other +.I pic +commands can be tacked on to the end of a bond command, to created +dotted or dashed bonds or to specify a +.B to +place. +. +. +.\" -------------------------------------------------------------------- +.SS Rings +.\" -------------------------------------------------------------------- +. +There are lots of rings, but only 5 and 6-sided rings get +much support. +. +.B ring +by itself is a 6-sided ring; +.B benzene +is the benzene ring with a circle inside. +.B aromatic +puts a circle into any kind of ring. +. +.RS +.SY ring +.RB [ \%pointing\ ( up | right | left | down )] +.RB [ \%aromatic ] +.RB [ put\ Mol\ at\ \fIn\fP ] +.RB [ \%double\ \c +.IR i , j\ \c +.IR k , l\ \c +\*(El] +.RI [ picstuff ] +.YS +.RE +. +. +.P +The vertices of a ring are numbered 1, 2, \*(El from the +vertex that points in the natural compass direction. +. +So for a hexagonal ring with the point at the top, the top vertex +is\~1, while if the ring has a point at the east side, that is +vertex\~1. +. +This is expressed as +. +.IP +.ft B +.nf +R1: ring pointing up +R2: ring pointing right +.fi +.ft +. +. +.P +The ring vertices are named +.BR .V1 , +\*(El, +.BI .V n\fR,\fP +with +.B .V1 +in the pointing direction. +. +So the corners of +.B R1 +are +.B R1.V1 +(the +.IR top ), +.BR R1.V2 , +.BR R1.V3 , +.B R1.V4 +(the +.IR bottom ), +etc., whereas for +.BR R2 , +.B R2.V1 +is the rightmost vertex and +.B R2.V4 +the leftmost. +. +These vertex names are used for connecting bonds or other rings. For +example, +. +.IP +.ft B +.nf +R1: benzene pointing right +R2: benzene pointing right with .V6 at R1.V2 +.fi +.ft +.P +creates two benzene rings connected along a side. +. +. +.P +Interior double bonds are specified as +.BI \%double\ n1 , n2\ n3 , n4\ \fR\*(El;\fP +each number pair adds an interior bond. +. +So the alternate form of a benzene ring is +. +.IP +.B "ring double 1,2 3,4 5,6" +. +. +.P +Heterocycles (rings with something other than carbon at a vertex) are +written as +.BI put\ X\ at\ V\fR,\fP +as in +. +.IP +.B "R: ring put N at 1 put O at 2" +. +. +.P +In this heterocycle, +.B R.N +and +.B R.O +become synonyms for +.B R.V1 +and +.BR R.V2 . +. +. +.P +There are two 5-sided rings. +. +.B ring5 +is pentagonal with a side that matches the 6-sided ring; it has four +natural directions. +. +A +.B \%flatring +is a 5-sided ring created by chopping one corner of a 6-sided ring so +that it exactly matches the 6-sided rings. +. +. +.P +The description of a ring has to fit on a single line. +. +. +.\" -------------------------------------------------------------------- +.SS Moieties and Strings +.\" -------------------------------------------------------------------- +. +A moiety is a string of characters beginning with a capital letter, +such as N(C2H5)2. +. +Numbers are converted to subscripts (unless they appear to be +fractional values, as in N2.5H). +. +The name of a moiety is determined from the moiety after special +characters have been stripped out: e.g., N(C2H5)2) has the name NC2H52. +. +. +.P +Moieties can be specified in two kinds. +. +Normally a moiety is placed right after the last thing mentioned, +separated by a semicolon surrounded by spaces, e.g., +. +.IP +.B "B1: bond ; OH" +. +.P +Here the moiety is +.BR OH ; +it is set after a bond. +. +. +.P +As the second kind a moiety can be positioned as the first word in a +.IR pic -like +command, e.g., +. +.IP +.B "CH3 at C + (0.5,0.5)" +. +.P +Here the moiety is +.BR CH3 . +It is placed at a position relative to +.BR C , +a moiety used earlier in the chemical structure. +. +. +.P +So moiety names can be specified as +.I chem +positions everywhere in the +.I chem +code. +. +Beneath their printing moieties are names for places. +. +. +.P +The moiety +.B BP +is special. +. +It is not printed but just serves as a mark to be referred to in later +.I chem +commands. +. +For example, +. +.IP +.B "bond ; BP" +. +.P +sets a mark at the end of the bond. +. +This can be used then for specifying a place. +. +The name +.B BP +is derived from +.I branch point +(i.e., line crossing). +. +. +.P +A string within double quotes +.B \(dq +is interpreted as a part of a +.I chem +command. +. +It represents a string that should be printed (without the quotes). +. +Text within quotes \(dq\*(El\(dq is treated more or less +like a moiety except that no changes are made to the quoted part. +. +. +.\" -------------------------------------------------------------------- +.SS Names +.\" -------------------------------------------------------------------- +. +In the alkyl chain above, notice that the carbon atom +.B C +was used both to draw something and as the name for a place. +. +A moiety always defines a name for a place; you can use +your own names for places instead, and indeed, for rings +you will have to. +. +A name is just +. +.IP +.IB Name : +\*(El +. +. +.P +.I Name +is often the name of a moiety like +.BR CH3 , +but it need not to be. +. +Any name that begins with a capital letter and which contains +only letters and numbers is valid: +. +.RS +.TP +.B First: +.B bond +.TQ +\& +.B "bond 30 from First" +.RE +. +. +.\" -------------------------------------------------------------------- +.SS Miscellaneous +.\" -------------------------------------------------------------------- +. +The specific construction +.RS +.TP +.BR bond\ \*(El " ; moiety" +.RE +.P +is equivalent to +.IP +.ft B +.nf +bond +moiety +.fi +.ft +. +. +.P +Otherwise, each item has to be on a separate line (and only one line). +Note that there must be whitespace after the semicolon which separates +the commands. +. +. +.P +A period character +.B .\& +or a single quote +.B ' +in the first column of a line signals a +.I troff +command, which is copied through as-is. +. +. +.P +A line whose first non-blank character is a hash character +.RB ( # ) +is treated as a comment and thus ignored. +. +However, hash characters within a word are kept. +. +. +.P +A line whose first word is +.B pic +is copied through as-is after the word +.B pic +has been removed. +. +. +.P +The command +.IP +.B size +.I n +.P +scales the diagram to make it look plausible at point size\~\c +.I n +(default is 10\~point). +. +. +.P +Anything else is assumed to be +.I pic +code, which is copied through with a label. +. +. +.P +Since +.B @g@chem +is a +.B @g@pic +preprocessor, it is possible to include +.I pic +statements in the middle of a diagram to draw things not provided for +by +.I chem +itself. +. +Such +.I pic +statements should be included in +.I chem +code by adding +.B pic +as the first word of this line for clarity. +. +. +.P +The following +.I pic +commands are accepted as +.I chem +commands, so no +.B pic +command word is needed: +. +.IP +.B define +Start the definition of +.I pic +macro within +.IR chem . +. +.RS +.TP +.B [ +Start a block composite. +. +.TP +.B ] +End a block composite. +. +.TP +.B { +Start a macro definition block. +. +.TP +.B } +End a macro definition block. +.RE +. +.P +The macro names from +.B define +statements are stored and their call is accepted as a +.I chem +command as well. +. +. +.\" -------------------------------------------------------------------- +.SS WISH LIST +.\" -------------------------------------------------------------------- +. +.P +This TODO list was collected by Brian Kernighan. +. +. +.P +Error checking is minimal; errors are usually detected and reported in +an oblique fashion by +.IR pic . +. +. +.P +There is no library or file inclusion mechanism, and there is no +shorthand for repetitive structures. +. +. +.P +The extension mechanism is to create +.I pic +macros, but these are tricky to get right and don't have all the +properties of built-in objects. +. +. +.P +There is no in-line chemistry yet (e.g., analogous to the $\*(El$ +construct of eqn). +. +. +.P +There is no way to control entry point for bonds on groups. +. +Normally a bond connects to the carbon atom if entering from +the top or bottom and otherwise to the nearest corner. +. +. +.P +Bonds from substituted atoms on heterocycles do not join at the proper +place without adding a bit of +.IR pic . +. +. +.P +There is no decent primitive for brackets. +. +. +.P +Text (quoted strings) doesn't work very well. +. +. +.P +A squiggle bond is needed. +. +. +.\" -------------------------------------------------------------------- +.SH "FILES" +.\" -------------------------------------------------------------------- +. +.TP +.FN @DATASUBDIR@/pic/chem.pic +A collection of +.I pic +macros needed by +.BR @g@chem . +. +.TP +.FN @MACRODIR@/pic.tmac +A macro file which redefines +.B .PS +and +.BR .PE +to center +.I pic +diagrams. +. +.TP +.FN @DOCDIR@/examples/chem/*.chem +Example files for +.IR chem . +. +.TP +.FN @DOCDIR@/examples/chem/122/*.chem +Example files from the classical +.I chem +book +.BR 122.ps . +. +. +.\" -------------------------------------------------------------------- +.SH "BUGS" +.\" -------------------------------------------------------------------- +. +Report bugs to the +.MT bug-groff@\:gnu.org +bug-groff mailing list +.ME . +. +Include a complete, self-contained example that will allow the bug to +be reproduced, and say which version of +.I groff +and +.I chem +you are using. +. +You can get both version numbers by calling +.BR "@g@chem --version" . +. +. +.P +You can also use the +.MT groff@\:gnu.org +groff mailing list +.ME , +but you must first subscribe to this list. +. +You can do that by visiting the +.UR http://\:lists.gnu.org/\:mailman/\:listinfo/\:groff +groff mailing list web page +.UE . +. +. +.P +See +.BR \%groff (@MAN1EXT@) +for information on availability. +. +. +.\" -------------------------------------------------------------------- +.SH "SEE ALSO" +.\" -------------------------------------------------------------------- +. +.BR \%groff (@MAN1EXT@), +.BR \%@g@pic (@MAN1EXT@), +.BR \%groffer (@MAN1EXT@). +. +. +.P +You can still get the original +.UR http://\:cm.bell-labs.com/\:netlib/\:typesetting/\:chem.gz +chem awk source +.UE . +. +Its +.FN README +file was used for this manual page. +. +. +.P +The other classical document on +.I chem +is +.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:122.ps.gz +122.ps +.UE . +. +. +.\" -------------------------------------------------------------------- +.SH "AUTHOR" +.\" -------------------------------------------------------------------- +.au +. +. +.\" -------------------------------------------------------------------- +.SH "COPYING" +.\" -------------------------------------------------------------------- +.co +. +. +.\" -------------------------------------------------------------------- +.\" Emacs settings +.\" -------------------------------------------------------------------- +. +.\" Local Variables: +.\" mode: nroff +.\" End: diff --git a/contrib/groff/contrib/chem/chem.pic b/contrib/groff/contrib/chem/chem.pic new file mode 100644 index 0000000000..888517b518 --- /dev/null +++ b/contrib/groff/contrib/chem/chem.pic @@ -0,0 +1,94 @@ +# macros for chem + +# Source file position: /contrib/chem/chem.pic +# Installed position: /share/groff//pic + +# Copyright (C) 2006, 2008, 2009 Free Software Foundation, Inc. +# Written by Brian Kernighan , +# modified by Bernd Warken. + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +pi = 3.141592654 +deg = 57.29578 +# cr = 0.08 # radius of invis circle at ring vertices (see cr[vh]) +# crh = 0.16; crw = 0.12 # ht & wid of invis ellipse around atoms at ring vertices +# dav = 0.015 # vertical shift up for atoms in atom macro + +# atom(text, wid, ht, carbon position, crh, crw, dav) +define atom { [ + T: $1 wid $2 ht $3-2*$7 + C: ellipse invis ht $5 wid $6 at T.w + ($4,$7) + L: ellipse invis ht $5 wid $6 at T.w + (cwid/2,$7) + R: ellipse invis ht $5 wid $6 at T.e + (-cwid/2,$7) +] } + +# bond(length, angle in degrees, whatever) +define bond { + line $3 by ($1) * sin(($2)/deg), ($1) * cos(($2)/deg) +} + +# fancy bonds: r, theta, from/at +define doublebond { + line $3 invis by ($1) * sin(($2)/deg), ($1) * cos(($2)/deg) + V1: last line.start; V2: last line.end; dx = V2.x-V1.x; dy = V2.y-V1.y + norm = sqrt(dx*dx + dy*dy) + ny = dx * .02 / norm + nx = -dy * .02 / norm + line from V1 + (nx,ny) to V2 + (nx,ny) + line from V1 - (nx,ny) to V2 - (nx,ny) + move to V2 +} +define triplebond { + line $3 invis by ($1) * sin(($2)/deg), ($1) * cos(($2)/deg) + V1: last line.start; V2: last line.end; dx = V2.x-V1.x; dy = V2.y-V1.y + norm = sqrt(dx*dx + dy*dy) + ny = dx * .025 / norm + nx = -dy * .025 / norm + line from V1 + (nx,ny) to V2 + (nx,ny) + line from V1 - (nx,ny) to V2 - (nx,ny) + line from V1 to V2 + move to V2 +} +define backbond { + line $3 invis by ($1) * sin(($2)/deg), ($1) * cos(($2)/deg) + V1: last line.start; V2: last line.end; dx = V2.x-V1.x; dy = V2.y-V1.y + norm = sqrt(dx*dx + dy*dy) + n = norm / .025 + ny = dx * .02 / norm + nx = -dy * .02 / norm + for i = 1 to n-1 do { + XZ: i/n + line from XZ + (nx,ny) to XZ - (nx,ny) + } + move to V2 +} +define frontbond { + line $3 invis by ($1) * sin(($2)/deg), ($1) * cos(($2)/deg) + V1: last line.start; V2: last line.end; dx = V2.x-V1.x; dy = V2.y-V1.y + ah = arrowht; aw = arrowwid; ahead = arrowhead + arrowht = sqrt(dx*dx + dy*dy) + arrowwid = 0.05 + arrowhead = 7 + line <- from V1 to V2 + arrowht = ah; arrowwid = aw; arrowhead = ahead +} +### Emacs settings +# Local Variables: +# mode: Nroff +# End: diff --git a/contrib/groff/contrib/chem/chem.pl b/contrib/groff/contrib/chem/chem.pl new file mode 100644 index 0000000000..4ac99abca5 --- /dev/null +++ b/contrib/groff/contrib/chem/chem.pl @@ -0,0 +1,1274 @@ +#! /usr/bin/env perl + +# chem - a groff preprocessor for producing chemical structure diagrams + +# Source file position: /contrib/chem/chem.pl +# Installed position: /bin/chem + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. +# Written by Bernd Warken. + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## +# settings +######################################################################## + +my $Program_Version = '0.3.1'; +my $Last_Update = '03 Jan 2009'; + +# this setting of the groff version is only used before make is run, +# otherwise @VERSION@ will set it. +my $Groff_Version_Preset='1.20preset'; + +# test on Perl version +require v5.6; + + +######################################################################## +# begin +######################################################################## + +use warnings; +use strict; +use Math::Trig; + +# for catfile() +use File::Spec; + +# $Bin is the directory where this script is located +use FindBin; + +my $Chem_Name; +my $Groff_Version; +my $File_chem_pic; +my $File_pic_tmac; + +BEGIN { + { + my $before_make; # script before run of `make' + { + my $at = '@'; + $before_make = 1 if '@VERSION@' eq "${at}VERSION${at}"; + } + + my %at_at; + + if ($before_make) { + my $chem_dir = $FindBin::Bin; + $at_at{'BINDIR'} = $chem_dir; + $at_at{'G'} = ''; + $File_chem_pic = File::Spec->catfile($chem_dir, 'chem.pic'); + $File_pic_tmac = File::Spec->catfile($chem_dir, '..', 'pic.tmac'); + $Groff_Version = ''; + $Chem_Name = 'chem'; + } else { + $Groff_Version = '@VERSION@'; + $at_at{'BINDIR'} = '@BINDIR@'; + $at_at{'G'} = '@g@'; + $at_at{'PICDIR'} = '@PICDIR@'; + $at_at{'TMACDIR'} = '@MACRODIR@'; + $File_chem_pic = + File::Spec->catfile($at_at{'PICDIR'}, 'chem.pic'); + $File_pic_tmac = File::Spec->catfile($at_at{'TMACDIR'}, 'pic.tmac'); + $Chem_Name = $at_at{'G'} . 'chem'; + } + } +} + + +######################################################################## +# check the parameters +######################################################################## + +if (@ARGV) { + # process any FOO=bar switches + # eval '$'.$1.'$2;' while $ARGV[0] =~ /^([A-Za-z_0-9]+=)(.*)/ && shift; + my @filespec = (); + my $dbl_minus; + my $wrong; + foreach (@ARGV) { + next unless $_; + if (/=/) { + # ignore FOO=bar switches + push @filespec, $_ if -f; + next; + } + if ($dbl_minus) { + if (-f $_) { + push @filespec, $_ if -s $_; + } else { + warn "chem: argument $_ is not an existing file.\n"; + $wrong = 1; + } + next; + } + if (/^--$/) { + $dbl_minus = 1; + next; + } + if (/^-$/) { + push @filespec, $_; + next; + } + if (/^-h$/ or '--help' =~ /^$_/) { + &usage(); + exit 0; + } + if (/^-v$/ or '--version' =~ /^$_/) { + &version(); + exit 0; + } + if (-f $_) { + push @filespec, $_ if -s $_; + } else { + $wrong = 1; + if (/^-/) { + warn "chem: wrong option ${_}.\n"; + } else { + warn "chem: argument $_ is not an existing file.\n"; + } + } + } + if (@filespec) { + @ARGV = @filespec; + } else { + exit 0 if $wrong; + @ARGV = ('-'); + } +} else { # @ARGV is empty + @ARGV = ('-') unless @ARGV; +} + + +######################################################################## +# main process +######################################################################## + +my %Dc = ( 'up' => 0, 'right' => 90, 'down' => 180, 'left' => 270, + 'ne' => 45, 'se' => 135, 'sw' => 225, 'nw' => 315, + 0 => 'n', 90 => 'e', 180 => 's', 270 => 'w', + 30 => 'ne', 45 => 'ne', 60 => 'ne', + 120 => 'se', 135 => 'se', 150 => 'se', + 210 => 'sw', 225 => 'sw', 240 => 'sw', + 300 => 'nw', 315 => 'nw', 330 => 'nw', + ); + +my $Word_Count; +my @Words; + +my $Line_No; +my $Last_Name = ''; + +# from init() +my $First_Time = 1; +my $Last_Type; +my $Dir; # direction +my %Types = ( + 'RING' => 'R', + 'MOL' => 'M', + 'BOND' => 'B', + 'OTHER' => 'O' # manifests + ); + +# from setparams() +my %Params; + +# from ring() +my $Nput; +my $Aromatic; +my %Put; +my %Dbl; + +my %Labtype; +my %Define = (); + +my $File_Name = ''; +my $Line = ''; + +&main(); + +{ + my $is_pic = ''; + my $is_chem = ''; + my $former_line = ''; + + ########## + # main() + # + sub main { + my $count_minus = 0; + my @stdin = (); + my $stdin = 0; + + # for centralizing the pic code + open TMAC, "<$File_pic_tmac" and print ; + close TMAC; + + foreach (@ARGV) { + $count_minus++ if /^-$/; + } + + foreach my $arg (@ARGV) { + &setparams(1.0); + next unless $arg; + $Line_No = 0; + $is_pic = ''; + $is_chem = ''; + if ($arg eq '-') { + $File_Name = 'standard input'; + if ($stdin) { + &main_line($_) foreach @stdin; + } else { + $stdin = 1; + if ($count_minus <= 1) { + while () { + &main_line($_); + } + } else { + @stdin = (); + while () { + push @stdin, $_; + &main_line($_); + } + } + } +### main() + } else { # $arg is not - + $File_Name = $arg; + open FILE, "<$arg"; + &main_line($_) while ; + close FILE; + } # if $arg + if ($is_pic) { + printf ".PE\n"; + } + } + } # main() + + + ########## + # main_line() + # + sub main_line { + my $line = $_[0]; +# $Last_Type = $Types{'OTHER'}; +# $Last_Type = ''; + my $stack; + $Line_No++; + chomp $line; + + $line = $former_line . $line if $former_line; + if ($line =~ /^(.*)\\$/) { + $former_line = $1; + return 1; + } else { + $former_line = ''; + } + $Line = $line; + + { + @Words = (); + my $s = $line; + $s =~ s/^\s*//; + $s =~ s/\s+$//; + return 1 unless $s; + $s = " $s"; + $s =~ s/\s+#.*$// if $is_pic; + return 1 unless $s; + $line = $s; + $line =~ s/^\s*|\s*$//g; + my $bool = 1; + while ($bool) { + $s =~ /^([^"]*)\s("[^"]*"?\S*)(.*)$/; + if (defined $1) { + my $s1 = $1; + my $s2 = $2; + $s = $3; + $s1 =~ s/^\s*|\s*$//g; + push @Words, split(/\s+/, $s1) if $s1; + push @Words, $s2; + } + if ($s !~ /\s"/) { + $s =~ s/^\s*|\s*$//g; + push @Words, split(/\s+/, $s) if $s; + $bool = 0; + } + } + +# @Words = split(/\s+/, $s); + return 1 unless @Words; +# foreach my $i (0..$#Words) { +# if ($Words[$i] =~ /^\s*#/) { +# $#Words = $i - 1; +# last; +# } +# } +# return 1 unless @Words; + } + + if ($line =~ /^([\.']\s*PS\s*)|([\.']\s*PS\s.+)$/) { + # .PS + unless ($is_pic) { + $is_pic = 'running'; + print "$line\n"; + } + return 1; + } +### main_line() + if ( $line =~ /^([\.']\s*PE\s*)|([\.']\s*PE\s.+)$/ ) { + # .PE + $is_chem = ''; + if ($is_pic) { + $is_pic = ''; + print "$line\n"; + } + return 1; + } + if ($line =~ /^[\.']\s*cstart\s*$/) { + # line: `.cstart' + if ($is_chem) { + &error("additional `.cstart'; chem is already active."); + return 1; + } + unless ($is_pic) { + &print_ps(); + $is_pic = 'by chem'; + } + $is_chem = '.cstart'; + &init(); + return 1; + } +### main_line() + if ($line =~ /^\s*begin\s+chem\s*$/) { + # line: `begin chem' + if ($is_pic) { + if ($is_chem) { + &error("additional `begin chem'; chem is already active."); + return 1; + } + $is_chem = 'begin chem'; + &init(); + } else { + print "$line\n"; + } + return 1; + } + if ($line =~ /^[\.']\s*cend\s*/) { + # line `.cend' + if ($is_chem) { + &error("you end chem with `.cend', but started it with `begin chem'.") + if $is_chem eq 'begin chem'; + if ($is_pic eq 'by chem') { + &print_pe(); + $is_pic = ''; + } + $is_chem = ''; + } else { + print "$line\n"; + } + return 1; + } + if ($line =~ /^\s*end\s*$/) { + # line: `end' + if ($is_chem) { + &error("you end chem with `end', but started it with `.cstart'.") + if $is_chem eq '.cstart'; + if ($is_pic eq 'by chem') { + &print_pe(); + $is_pic = ''; + } + $is_chem = ''; + } else { + print "$line\n"; + } + return 1; + } + +### main_line() + if (! $is_chem) { + print "$line\n"; + return 1; + } + if ($line =~ /^[.']/) { + # groff request line + print "$line\n"; + return 1; + } + + if ($Words[0] eq 'pic') { + # pic pass-thru + return 1 if $#Words == 0; + my $s = $line; + $s =~ /^\s*pic\s*(.*)$/; + $s = $1; + print "$s\n" if $s; + $Last_Type = $Types{'OTHER'}; + $Define{ $Words[2] } = 1 if $#Words >= 2 && $Words[1] eq 'define'; + return 1; + } + + if ($Words[0] eq 'textht') { + if ($#Words == 0) { + &error("`textht' needs a single argument."); + return 0; + } + &error("only the last argument is taken for `textht', " . + "all others are ignored.") + unless $#Words <= 1 or ($#Words == 2 && $Words[1] =~ /^=/); + $Params{'textht'} = $Words[$#Words]; + return 1; + } +### main_line() + if ($Words[0] eq 'cwid') { # character width + if ($#Words == 0) { + &error("`cwid' needs a single argument."); + return 0; + } + &error("only the last argument is taken for `cwid', " . + "all others are ignored.") + unless $#Words <= 1 or ($#Words == 2 && $Words[1] =~ /^=/); + $Params{'cwid'} = $Words[$#Words]; + return 1; + } + if ($Words[0] eq 'db') { # bond length + if ($#Words == 0) { + &error("`db' needs a single argument."); + return 0; + } + &error("only the last argument is taken for `db', " . + "all others are ignored.") + unless $#Words <= 1 or ($#Words == 2 && $Words[1] =~ /^=/); + $Params{'db'} = $Words[$#Words]; + return 1; + } + if ($Words[0] eq 'size') { # size for all parts of the whole diagram + my $size; + if ($#Words == 0) { + &error("`size' needs a single argument."); + return 0; + } + &error("only the last argument is taken for `size', " . + "all others are ignored.") + unless $#Words <= 1 or ($#Words == 2 && $Words[1] =~ /^=/); + if ($Words[$#Words] <= 4) { + $size = $Words[$#Words]; + } else { + $size = $Words[$#Words] / 10; + } + &setparams($size); + return 1; + } + +### main_line() + print "\n#", $Line, "\n"; # debugging, etc. + $Last_Name = ''; +# $Last_Type = $Types{'OTHER'}; +# $Last_Type = ''; + + if ($Words[0] =~ /^[A-Z].*:$/) { + # label; falls thru after shifting left + my $w = $Words[0]; + $Last_Name = $w; + $Last_Name =~ s/:$//; + print "$w"; + shift @Words; + if (@Words) { + print " "; + $line =~ s/^\s*$w\s*//; + } else { + print "\n"; + return 1; + } + } + + if ($Words[0] eq 'define') { + print "$line\n"; + $Define{ $Words[1] } = 1 if $#Words >= 1; + $Last_Type = $Types{'OTHER'}; + return 1; + } + if ($Words[0] =~ /^[\[\]{}]/) { + print "$line\n"; + $Last_Type = $Types{'OTHER'}; + return 1; + } + + if ($Words[0] =~ /^"/) { + print 'Last: ', $line, "\n"; + $Last_Type = $Types{'OTHER'}; + return 1; + } + + if ($Words[0] =~ /bond/) { + &bond($Words[0]); + return 1; + } + + if ($#Words >= 1) { + if ($Words[0] =~ /^(double|triple|front|back)$/ && + $Words[1] eq 'bond') { + my $w = shift @Words; + $Words[0] = $w . $Words[0]; + &bond($Words[0]); + return 1; + } + if ($Words[0] eq 'aromatic') { + my $temp = $Words[0]; + $Words[0] = $Words[1] ? $Words[1] : ''; + $Words[1] = $temp; + } + } + + if ($Words[0] =~ /ring|benz/) { + &ring($Words[0]); + return 1; + } + if ($Words[0] eq 'methyl') { + # left here as an example + $Words[0] = 'CH3'; + } +### main_line() + if ($Words[0] =~ /^[A-Z]/) { + &molecule(); + return 1; + } + if ($Words[0] eq 'left') { + my %left; # not used + $left{++$stack} = &fields(1, $#Words); + printf (("Last: [\n")); + return 1; + } + if ($Words[0] eq 'right') { + &bracket(); + $stack--; + return 1; + } + if ($Words[0] eq 'label') { # prints the vertex numbers in a ring + if ( exists $Labtype{$Words[1]} and + $Labtype{$Words[1]} =~ /^$Types{'RING'}/ ) { + my $v = substr($Labtype{$Words[1]}, 1, 1); + $Words[1] = '' unless $Words[1]; + foreach my $i ( 1..$v ) { + printf "\"\\s-3%d\\s0\" at 0.%d<%s.C,%s.V%d>\n", $i, $v + 2, + $Words[1], $Words[1], $i; + } + } else { + &error("$Words[1] is not a ring."); + } + return 1; + } + + if ( exists $Define{ $Words[0] } ) { + print $line, "\n"; + $Last_Type = $Types{'OTHER'}; + return 1; + } + return 1 unless $line; +# print STDERR "# $Line\n"; +# &error('This is not a chem command. To include a command for pic, ' . +# "add `pic' as the first word to the command."); + print $line, "\n"; + $Last_Type = $Types{'OTHER'}; + 1; + } # main_line() + +} + +######################################################################## +# functions +######################################################################## + +########## +# atom() +# +sub atom { + # convert CH3 to atom(...) + my ($s) = @_; + my ($i, $n, $nsub, $cloc, $nsubc, @s); + if ($s eq "\"\"") { + return $s; + } + $n = length($s); + $nsub = $nsubc = 0; + $cloc = index($s, 'C'); + if (! defined($cloc) || $cloc < 0) { + $cloc = 0; + } + @s = split('', $s); + $i = 0; + foreach (@s) { + unless (/[A-Z]/) { + $nsub++; + $nsubc++ if $i < $cloc; + $i++; + } + } + $s =~ s/([0-9]+\.[0-9]+)|([0-9]+)/\\s-3\\d$&\\u\\s+3/g; + if ($s =~ /([^0-9]\.)|(\.[^0-9])/) { # centered dot + $s =~ s/\./\\v#-.3m#.\\v#.3m#/g; + } + sprintf( "atom(\"%s\", %g, %g, %g, %g, %g, %g)", + $s, ($n - $nsub / 2) * $Params{'cwid'}, $Params{'textht'}, + ($cloc - $nsubc / 2 + 0.5) * $Params{'cwid'}, $Params{'crh'}, + $Params{'crw'}, $Params{'dav'} + ); +} # atom() + + +########## +# bond() +# +sub bond { + my ($type) = @_; + my ($i, $moiety, $from, $leng); + $moiety = ''; + for ($i = 1; $i <= $#Words; $i++) { + if ($Words[$i] eq ';') { + &error("a colon `;' must be followed by a space and a single word.") + if $i != $#Words - 1; + $moiety = $Words[$i + 1] if $#Words > $i; + $#Words = $i - 1; + last; + } + } + $leng = $Params{'db'}; # bond length + $from = ''; + for ($Word_Count = 1; $Word_Count <= $#Words; ) { + if ($Words[$Word_Count] =~ + /(\+|-)?\d+|up|down|right|left|ne|se|nw|sw/) { + $Dir = &cvtdir($Dir); + } elsif ($Words[$Word_Count] =~ /^leng/) { + $leng = $Words[$Word_Count + 1] if $#Words > $Word_Count; + $Word_Count += 2; + } elsif ($Words[$Word_Count] eq 'to') { + $leng = 0; + $from = &fields($Word_Count, $#Words); + last; + } elsif ($Words[$Word_Count] eq 'from') { + $from = &dofrom(); + last; + } elsif ($Words[$Word_Count] =~ /^#/) { + $Word_Count = $#Words + 1; + last; + } else { + $from = &fields($Word_Count, $#Words); + last; + } + } +### bond() + if ($from =~ /( to )|^to/) { # said "from ... to ...", so zap length + $leng = 0; + } elsif (! $from) { # no from given at all + $from = 'from Last.' . &leave($Last_Type, $Dir) . ' ' . + &fields($Word_Count, $#Words); + } + printf "Last: %s(%g, %g, %s)\n", $type, $leng, $Dir, $from; + $Last_Type = $Types{'BOND'}; + $Labtype{$Last_Name} = $Last_Type if $Last_Name; + if ($moiety) { + @Words = ($moiety); + &molecule(); + } +} # bond() + + +########## +# bracket() +# +sub bracket { + my $t; + printf (("]\n")); + if ($Words[1] && $Words[1] eq ')') { + $t = 'spline'; + } else { + $t = 'line'; + } + printf "%s from last [].sw+(%g,0) to last [].sw to last [].nw to last " . + "[].nw+(%g,0)\n", $t, $Params{'dbrack'}, $Params{'dbrack'}; + printf "%s from last [].se-(%g,0) to last [].se to last [].ne to last " . + "[].ne-(%g,0)\n", $t, $Params{'dbrack'}, $Params{'dbrack'}; + if ($Words[2] && $Words[2] eq 'sub') { + printf "\" %s\" ljust at last [].se\n", &fields(3, $#Words); + } +} # bracket() + + +########## +# corner() +# +# Return the corner name next to the given angle. +# +sub corner { + my ($d) = @_; + $Dc{ (45 * int(($d + 22.5) / 45)) % 360 }; +} # corner() + + +########## +# cvtdir() +# +# Maps "[pointing] somewhere" to degrees. +# +sub cvtdir { + my ($d) = @_; + if ($Words[$Word_Count] eq 'pointing') { + $Word_Count++; + } + if ($Words[$Word_Count] =~ /^[+\\-]?\d+/) { + return ( $Words[$Word_Count++] % 360 ); + } elsif ($Words[$Word_Count] =~ /left|right|up|down|ne|nw|se|sw/) { + return ( $Dc{$Words[$Word_Count++]} % 360 ); + } else { + $Word_Count++; + return $d; + } +} # cvtdir() + + +########## +# dblring() +# +sub dblring { + my ($v) = @_; + my ($d, $v1, $v2); + # should canonicalize to i,i+1 mod v + $d = $Words[$Word_Count]; + for ($Word_Count++; $Word_Count <= $#Words && + $Words[$Word_Count] =~ /^[1-9]/; $Word_Count++) { + $v1 = substr($Words[$Word_Count], 0, 1); + $v2 = substr($Words[$Word_Count], 2, 1); + if ($v2 == $v1 + 1 || $v1 == $v && $v2 == 1) { # e.g., 2,3 or 5,1 + $Dbl{$v1} = $d; + } elsif ($v1 == $v2 + 1 || $v2 == $v && $v1 == 1) { # e.g., 3,2 or 1,5 + $Dbl{$v2} = $d; + } else { + &error(sprintf("weird %s bond in\n\t%s", $d, $_)); + } + } +} # dblring() + + +########## +# dofrom() +# +sub dofrom { + my $n; + $Word_Count++; # skip "from" + $n = $Words[$Word_Count]; + if (defined $Labtype{$n}) { # "from Thing" => "from Thing.V.s" + return 'from ' . $n . '.' . &leave($Labtype{$n}, $Dir); + } + if ($n =~ /^\.[A-Z]/) { # "from .V" => "from Last.V.s" + return 'from Last' . $n . '.' . &corner($Dir); + } + if ($n =~ /^[A-Z][^.]*\.[A-Z][^.]*$/) { # "from X.V" => "from X.V.s" + return 'from ' . $n . '.' . &corner($Dir); + } + &fields($Word_Count - 1, $#Words); +} # dofrom() + + +########## +# error() +# +sub error { + my ($s) = @_; + printf STDERR "chem: error in %s on line %d: %s\n", + $File_Name, $Line_No, $s; +} # error() + + +########## +# fields(, ) +# +sub fields { + my ($n1, $n2) = @_; + if ($n1 > $n2) { + return ''; + } + my $s = ''; + foreach my $i ($n1..$n2) { + if ($Words[$i] =~ /^#/) { + last; + } + $s = $s . $Words[$i] . ' '; + } + $s; +} # fields() + + +########## +# init() +# +sub init { + if ($First_Time) { + printf "copy \"%s\"\n", $File_chem_pic; + printf "\ttextht = %g; textwid = .1; cwid = %g\n", + $Params{'textht'}, $Params{'cwid'}; + printf "\tlineht = %g; linewid = %g\n", + $Params{'lineht'}, $Params{'linewid'}; + $First_Time = 0; + } + printf "Last: 0,0\n"; + $Last_Type = $Types{'OTHER'}; + $Dir = 90; +} # init() + + +########## +# leave(, ) +# +sub leave { + my ($last, $d) = @_; + my ($c, $c1); + # return vertex of $last in direction $d + if ( $last eq $Types{'BOND'} ) { + return 'end'; + } + $d %= 360; + if ( $last =~ /^$Types{'RING'}/ ) { + return &ringleave($last, $d); + } + if ( $last eq $Types{'MOL'} ) { + if ($d == 0 || $d == 180) { + $c = 'C'; + } elsif ($d > 0 && $d < 180) { + $c = 'R'; + } else { + $c = 'L'; + } + if (defined $Dc{$d}) { + $c1 = $Dc{$d}; + } else { + $c1 = &corner($d); + } + return sprintf('%s.%s', $c, $c1); + } + if ( $last eq $Types{'OTHER'} ) { + return &corner($d); + } + 'c'; +} # leave() + + +########## +# makering(, , ) +# +sub makering { + my ($type, $pt, $v) = @_; + my ($i, $j, $a, $r, $rat, $fix, $c1, $c2); + if ($type =~ /flat/) { + $v = 6; + # vertices + ; + } + $r = $Params{'ringside'} / (2 * sin(pi / $v)); + printf "\tC: 0,0\n"; + for ($i = 0; $i <= $v + 1; $i++) { + $a = (($i - 1) / $v * 360 + $pt) / 57.29578; # 57. is $deg + printf "\tV%d: (%g,%g)\n", $i, $r * sin($a), $r * cos($a); + } + if ($type =~ /flat/) { + printf "\tV4: V5; V5: V6\n"; + $v = 5; + } + # sides + if ($Nput > 0) { + # hetero ... + for ($i = 1; $i <= $v; $i++) { + $c1 = $c2 = 0; + if ($Put{$i} ne '') { + printf "\tV%d: ellipse invis ht %g wid %g at V%d\n", + $i, $Params{'crh'}, $Params{'crw'}, $i; + printf "\t%s at V%d\n", $Put{$i}, $i; + $c1 = $Params{'cr'}; + } + $j = $i + 1; + if ($j > $v) { + $j = 1; + } +### makering() + if ($Put{$j} ne '') { + $c2 = $Params{'cr'}; + } + printf "\tline from V%d to V%d chop %g chop %g\n", $i, $j, $c1, $c2; + if ($Dbl{$i} ne '') { + # should check i to %g chop %g chop %g\n", + $rat, $i, $rat, $j, $c1, $c2; + if ($Dbl{$i} eq 'triple') { + printf "\tline from %g to %g chop %g chop %g\n", + 2 - $rat, $i, 2 - $rat, $j, $c1, $c2; + } + } + } +### makering() + } else { + # regular + for ($i = 1; $i <= $v; $i++) { + $j = $i + 1; + if ($j > $v) { + $j = 1; + } + printf "\tline from V%d to V%d\n", $i, $j; + if ($Dbl{$i} ne '') { + # should check i to %g\n", + $rat, $i, $rat, $j; + if ($Dbl{$i} eq 'triple') { + printf "\tline from %g to %g\n", + 2 - $rat, $i, 2 - $rat, $j; + } + } + } + } +### makering() + # punt on triple temporarily + # circle + if ($type =~ /benz/ || $Aromatic > 0) { + if ($type =~ /flat/) { + $r *= .4; + } else { + $r *= .5; + } + printf "\tcircle rad %g at 0,0\n", $r; + } +} # makering() + + +########## +# molecule() +# +sub molecule { + my ($n, $type); + if ($#Words >= 0) { + $n = $Words[0]; + if ($n eq 'BP') { + $Words[0] = "\"\" ht 0 wid 0"; + $type = $Types{'OTHER'}; + } else { + $Words[0] = &atom($n); + $type = $Types{'MOL'}; + } + } + $n =~ s/[^A-Za-z0-9]//g; # for stuff like C(OH3): zap non-alnum + if ($#Words < 1) { + printf "Last: %s: %s with .%s at Last.%s\n", + $n, join(' ', @Words), &leave($type, $Dir + 180), + &leave($Last_Type, $Dir); +### molecule() + } else { + if (! $Words[1]) { + printf "Last: %s: %s with .%s at Last.%s\n", + $n, join(' ', @Words), &leave($type, $Dir + 180), + &leave($Last_Type, $Dir); + } elsif ($#Words >= 1 and $Words[1] eq 'below') { + $Words[2] = '' if ! $Words[2]; + printf "Last: %s: %s with .n at %s.s\n", $n, $Words[0], $Words[2]; + } elsif ($#Words >= 1 and $Words[1] eq 'above') { + $Words[2] = '' if ! $Words[2]; + printf "Last: %s: %s with .s at %s.n\n", $n, $Words[0], $Words[2]; + } elsif ($#Words >= 2 and $Words[1] eq 'left' && $Words[2] eq 'of') { + $Words[3] = '' if ! $Words[3]; + printf "Last: %s: %s with .e at %s.w+(%g,0)\n", + $n, $Words[0], $Words[3], $Params{'dew'}; + } elsif ($#Words >= 2 and $Words[1] eq 'right' && $Words[2] eq 'of') { + $Words[3] = '' if ! $Words[3]; + printf "Last: %s: %s with .w at %s.e-(%g,0)\n", + $n, $Words[0], $Words[3], $Params{'dew'}; + } else { + printf "Last: %s: %s\n", $n, join(' ', @Words); + } + } + + $Last_Type = $type; + if ($Last_Name) { + # $Last_Type = ''; + $Labtype{$Last_Name} = $Last_Type; + } + $Labtype{$n} = $Last_Type; +} # molecule() + + +########## +# print_hash() +# +# print the elements of a hash or hash reference +# +sub print_hash { + my $hr; + my $n = scalar @_; + if ($n == 0) { + print STDERR "empty hash\n;"; + return 1; + } elsif ($n == 1) { + if (ref($_[0]) eq 'HASH') { + $hr = $_[0]; + } else { + warn 'print_hash(): the argument is not a hash or hash reference;'; + return 0; + } + } else { + if ($n % 2) { + warn 'print_hash(): the arguments are not a hash;'; + return 0; + } else { + my %h = @_; + $hr = \%h; + } + } + +### print_hash() + unless (%$hr) { + print STDERR "empty hash\n"; + return 1; + } + print STDERR "hash (ignore the ^ characters):\n"; + for my $k (sort keys %$hr) { + my $hk = $hr->{$k}; + print STDERR " $k => "; + if (defined $hk) { + print STDERR "^$hk^"; + } else { + print STDERR "undef"; + } + print STDERR "\n"; + } + + 1; +} # print_hash() + + +########## +# print_pe() +# +sub print_pe { + print ".PE\n"; +} # print_pe() + + +########## +# print_ps() +# +sub print_ps { + print ".PS\n"; +} # print_ps() + +########## +# putring() +# +sub putring { + # collect "put Mol at n" + my ($v) = @_; + my ($m, $mol, $n); + $Word_Count++; + $mol = $Words[$Word_Count++]; + if ($Words[$Word_Count] eq 'at') { + $Word_Count++; + } + $n = $Words[$Word_Count]; + if ($n !~ /^\d+$/) { + $n =~ s/(\d)+$/$1/; + $n = 0 if $n !~ /^\d+$/; + error('use single digit as argument for "put at"'); + } + if ($n >= 1 && $n <= $v) { + $m = $mol; + $m =~ s/[^A-Za-z0-9]//g; + $Put{$n} = $m . ':' . &atom($mol); + } elsif ($n == 0) { + error('argument of "put at" must be a single digit'); + } else { + error('argument of "put at" is too large'); + } + $Word_Count++; +} # putring() + + +########## +# ring() +# +sub ring { + my ($type) = @_; + my ($typeint, $pt, $verts, $i, $other, $fused, $withat); + $pt = 0; # points up by default + if ($type =~ /([1-8])$/) { + $verts = $1; + } elsif ($type =~ /flat/) { + $verts = 5; + } else { + $verts = 6; + } + $fused = $other = ''; + for ($i = 1; $i <= $verts; $i++) { + $Put{$i} = $Dbl{$i} = ''; + } + $Nput = $Aromatic = $withat = 0; + for ($Word_Count = 1; $Word_Count <= $#Words; ) { + if ($Words[$Word_Count] eq 'pointing') { + $pt = &cvtdir(0); + } elsif ($Words[$Word_Count] eq 'double' || + $Words[$Word_Count] eq 'triple') { + &dblring($verts); + } elsif ($Words[$Word_Count] =~ /arom/) { + $Aromatic++; + $Word_Count++; # handled later +### ring() + } elsif ($Words[$Word_Count] eq 'put') { + &putring($verts); + $Nput++; + } elsif ($Words[$Word_Count] =~ /^#/) { + $Word_Count = $#Words + 1; + last; + } else { + if ($Words[$Word_Count] eq 'with' || $Words[$Word_Count] eq 'at') { + $withat = 1; + } + $other = $other . ' ' . $Words[$Word_Count]; + $Word_Count++; + } + } + $typeint = $Types{'RING'} . $verts . $pt; # RING | verts | dir + if ($withat == 0) { + # join a ring to something + if ( $Last_Type =~ /^$Types{'RING'}/ ) { + # ring to ring + if (substr($typeint, 2) eq substr($Last_Type, 2)) { + # fails if not 6-sided + $fused = 'with .V6 at Last.V2'; + } + } + # if all else fails + $fused = sprintf('with .%s at Last.%s', + &leave($typeint, $Dir + 180), &leave($Last_Type, $Dir)); + } + printf "Last: [\n"; + &makering($type, $pt, $verts); + printf "] %s %s\n", $fused, $other; + $Last_Type = $typeint; + $Labtype{$Last_Name} = $Last_Type if $Last_Name; +} # ring() + + +########## +# ringleave(, ) +# +sub ringleave { + my ($last, $d) = @_; + my ($rd, $verts); + # return vertex of ring in direction d + $verts = substr($last, 1, 1); + $rd = substr($last, 2); + sprintf('V%d.%s', int( (($d - $rd) % 360) / (360 / $verts)) + 1, + &corner($d)); +} # ringleave() + + +########## +# setparams() +# +sub setparams { + my ($scale) = @_; + $Params{'lineht'} = $scale * 0.2; + $Params{'linewid'} = $scale * 0.2; + $Params{'textht'} = $scale * 0.16; + $Params{'db'} = $scale * 0.2; # bond length + $Params{'cwid'} = $scale * 0.12; # character width + $Params{'cr'} = $scale * 0.08; # rad of invis circles at ring vertices + $Params{'crh'} = $scale * 0.16; # ht of invis ellipse at ring vertices + $Params{'crw'} = $scale * 0.12; # wid + $Params{'dav'} = $scale * 0.015; # vertical shift up for atoms in atom macro + $Params{'dew'} = $scale * 0.02; # east-west shift for left of/right of + $Params{'ringside'} = $scale * 0.3; # side of all rings + $Params{'dbrack'} = $scale * 0.1; # length of bottom of bracket +} # setparams() + + +########## +# usage() +# +# Print usage information for --help. +# +sub usage { + print "\n"; + &version(); + print <. + +Many of the examples had to be fixed. Unfortunately, the `chem' akw +version does not run on many of these programs. But the Perl version +of `chem' works on all examples. + +Most examples do not use the modern chemical display. They have C +atoms added, whereas the modern method omits all C atoms and their +directly appended H atoms. + +The examples are named and sorted by the chapter where they are found +in the book. For example, the file `ch4c_colon.chem' means a `chem' +example in chapter 4; according to `c', it is the third example in +this chapter; the name `colon' is used to describe the context of the +example. + +You can view the graphical display of the examples by calling + + groffer + +`groffer' calls `chem' automatically. + +If you want to transform example files to a different format use the +`roff2*' programs: + +`roff2dvi' prints dvi format to standard output, +`roff2html' generates html output, +`roff2pdf' outputs pdf mode, +`roff2ps' produces PostScript output, +`roff2text' generates text output in the groff device `latin1', +`roff2x' prints the output in the groff device X that is + suitable for programs like `gxditview' or `xditview'. + +To get a suitable `groff' output run + + @g@chem | groff -p ... + + +####### License + +Last update: 5 Jan 2009 + +Copyright (C) 2006, 2009 Free Software Foundation, Inc. +Written by Bernd Warken. + +This file is part of `chem', which is part of `groff'. + +`groff' is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +`groff' is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +####### Emacs settings + +Local Variables: +mode: text +End: diff --git a/contrib/groff/contrib/chem/examples/122/ch2a_ethyl.chem b/contrib/groff/contrib/chem/examples/122/ch2a_ethyl.chem new file mode 100644 index 0000000000..0f1ca6137e --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch2a_ethyl.chem @@ -0,0 +1,43 @@ +ch2a_ethyl.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + + CH3 + bond + CH2 + bond + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch2b_benzene.chem b/contrib/groff/contrib/chem/examples/122/ch2b_benzene.chem new file mode 100644 index 0000000000..d9e492daac --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch2b_benzene.chem @@ -0,0 +1,40 @@ +ch2b_benzene.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + + benzene + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch2c_benzene_right.chem b/contrib/groff/contrib/chem/examples/122/ch2c_benzene_right.chem new file mode 100644 index 0000000000..ab4c956d4c --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch2c_benzene_right.chem @@ -0,0 +1,40 @@ +ch2c_benzene_right.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + + benzene pointing right # a rotated benzene ring + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4a_stick.chem b/contrib/groff/contrib/chem/examples/122/ch4a_stick.chem new file mode 100644 index 0000000000..f561f2a9a0 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4a_stick.chem @@ -0,0 +1,45 @@ +ch4a_stick.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + + bond right + bond 60 + bond 120 + bond 60 + bond 120 + bond down + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4b_methyl_acetate.chem b/contrib/groff/contrib/chem/examples/122/ch4b_methyl_acetate.chem new file mode 100644 index 0000000000..a519289fdd --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4b_methyl_acetate.chem @@ -0,0 +1,49 @@ +ch4b_methyl_acetate.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +CH3 # the 3 is automatically turned into a subscript +bond # the implicit direction is right + # implicit connection is to right side of CH3 +C +double bond 30 # by default, from the substituent C +O +bond 120 from C # must be "from C"; otherwise would leave from O +O +bond right +CH3 + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4c_colon.chem b/contrib/groff/contrib/chem/examples/122/ch4c_colon.chem new file mode 100644 index 0000000000..19d156f745 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4c_colon.chem @@ -0,0 +1,44 @@ +ch4c_colon.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + + CH3 + bond ; C + double bond 30 ; O + bond 120 from C ; O + bond right ; CH3 + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4d_HCl.H2O.chem b/contrib/groff/contrib/chem/examples/122/ch4d_HCl.H2O.chem new file mode 100644 index 0000000000..9f57edc532 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4d_HCl.H2O.chem @@ -0,0 +1,40 @@ +ch4d_HCl.H2O.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + + HCl.H2O + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4e_CaSO4.2H2O.chem b/contrib/groff/contrib/chem/examples/122/ch4e_CaSO4.2H2O.chem new file mode 100644 index 0000000000..06d308bfc6 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4e_CaSO4.2H2O.chem @@ -0,0 +1,40 @@ +ch4e_CaSO4.2H2O.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + + CaSO4.2H2O + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4f_C.chem b/contrib/groff/contrib/chem/examples/122/ch4f_C.chem new file mode 100644 index 0000000000..496db1cc50 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4f_C.chem @@ -0,0 +1,50 @@ +ch4f_C.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + + bond ; C # 1st definition of C + bond up from C + bond down from C + bond right from C ; C # 2nd definition of C + bond up from C + bond down from C + bond right from C ; C # 3rd definition of C + bond up from C + bond down from C + bond right from C + + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4g_BP.chem b/contrib/groff/contrib/chem/examples/122/ch4g_BP.chem new file mode 100644 index 0000000000..1f7783c160 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4g_BP.chem @@ -0,0 +1,50 @@ +ch4g_BP.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +# this is the isopropyl group + bond 120 ; BP # BP is right end of this bond + bond -120 from BP + bond right from BP ; C + front bond up ; CH3 + back bond down from C ; D + bond right from C ; BP +# redefine BP to mean the center carbon of this t-butyl group + bond up from BP + bond right from BP + bond down from BP + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4h_methacrylate.chem b/contrib/groff/contrib/chem/examples/122/ch4h_methacrylate.chem new file mode 100644 index 0000000000..ba8e9c1d60 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4h_methacrylate.chem @@ -0,0 +1,67 @@ +ch4h_methacrylate.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + + bond dotted + bond right ; BP + bond up from BP ; C + double bond -60 from C ; O + bond 60 length .1 from C ; OCH3 + bond down from BP ; CH3 +# begin second segment of polymer + bond right length .5 from BP ; BP + bond up length .1 from BP ; H + bond down length .1 from BP ; H +# begin third segment of polymer + bond right length .5 from BP ; BP + bond up from BP ; C + double bond -60 from C ; O + bond 60 length .1 from C ; OCH3 + bond down from BP ; CH3 +# begin fourth segment of polymer + bond right length .5 from BP ; BP + bond up length .1 from BP ; H + bond down length .1 from BP ; H +# begin fifth segment of polymer + bond right length .5 from BP ; BP + bond up from BP ; C + double bond -60 from C ; O + bond 60 length .1 from C ; OCH3 + bond down from BP ; CH3 + bond right from BP + bond dotted + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4i_cyclo.chem b/contrib/groff/contrib/chem/examples/122/ch4i_cyclo.chem new file mode 100644 index 0000000000..70416c2fec --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4i_cyclo.chem @@ -0,0 +1,47 @@ +ch4i_cyclo.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +R3: ring3 +R4: ring4 at R3 + (.75,0) +R5: ring5 at R4 + (.75,0) +R6: ring6 at R5 + (.75,0) +B: benzene at R6 + (.75,0) +R7: ring7 at B + (.75,0) +R8: ring8 at R7 + (.75,0) + + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4j_ring4.chem b/contrib/groff/contrib/chem/examples/122/ch4j_ring4.chem new file mode 100644 index 0000000000..9769873299 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4j_ring4.chem @@ -0,0 +1,40 @@ +ch4j_ring4.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + + ring4 pointing 45 + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4k_ring3.chem b/contrib/groff/contrib/chem/examples/122/ch4k_ring3.chem new file mode 100644 index 0000000000..792984400a --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4k_ring3.chem @@ -0,0 +1,42 @@ +ch4k_ring3.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +R: ring3 + back bond 120 from R.V2 ; C2H5 + front bond -120 from R.V3 ; HO + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4l_vertex.chem b/contrib/groff/contrib/chem/examples/122/ch4l_vertex.chem new file mode 100644 index 0000000000..75d2930f01 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4l_vertex.chem @@ -0,0 +1,47 @@ +ch4l_vertex.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +R: benzene pointing right + bond left from R.V4 ; HO + bond -150 from R.V3 ; CH3O + bond right from R.V1 ; C + double bond up from C ; O + bond right from C ; N + bond 45 ; C2H5 + bond 135 from N ; C2H5 + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4m_double.chem b/contrib/groff/contrib/chem/examples/122/ch4m_double.chem new file mode 100644 index 0000000000..0efdfc4d3b --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4m_double.chem @@ -0,0 +1,40 @@ +ch4m_double.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + + ring double 1,2 3,4 5,6 + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4n_triple.chem b/contrib/groff/contrib/chem/examples/122/ch4n_triple.chem new file mode 100644 index 0000000000..d8bdb1bd93 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4n_triple.chem @@ -0,0 +1,40 @@ +ch4n_triple.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + + ring8 triple 3,4 + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4o_aromatic.chem b/contrib/groff/contrib/chem/examples/122/ch4o_aromatic.chem new file mode 100644 index 0000000000..797ab38387 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4o_aromatic.chem @@ -0,0 +1,41 @@ +ch4o_aromatic.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +R: aromatic ring7 + "+" at R + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4p_cholestanol.chem b/contrib/groff/contrib/chem/examples/122/ch4p_cholestanol.chem new file mode 100644 index 0000000000..3e02b9e6dd --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4p_cholestanol.chem @@ -0,0 +1,62 @@ +ch4p_cholestanol.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +R1: ring6 + "R1" at R1 # this puts a label at R1 + front bond -120 from R1.V5 ; HO + # the following line says "fuse the next six- + # membered ring with its 6th vertex joining + # the second vertex of R1" +R2: ring6 with .V6 at R1.V2 + front bond up from R2.V6 ; CH3 + back bond down from R2.V4 ; H + back bond down from R2.V1 ; H + front bond up from R2.V2 ; H +R3: ring6 with .V4 at R2.V2 +R4: flatring with .V5 at R3.V2 + front bond up from R4.V5 ; CH3 + back bond down from R4.V4 ; H # this is the alkyl chain + bond up from R4.V1 ; BP + bond -60 from BP + bond 60 from BP + bond 120 + bond 60 + bond 120 ; BP + bond down from BP + bond 60 from BP + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4q_rings.chem b/contrib/groff/contrib/chem/examples/122/ch4q_rings.chem new file mode 100644 index 0000000000..21abd84f03 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4q_rings.chem @@ -0,0 +1,48 @@ +ch4q_rings.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +R3: ring3 +R4: ring4 pointing 45 with .V1 at R3.V2 +R5: ring5 pointing down with .V4 at R4.V2 +R6: ring6 pointing 54 with .V6 at R5.V5 + # the following lines specify the labels inside the rings + "3" at R3 + "4" at R4 + "5" at R5 + "6" at R6 + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4r_spiro.chem b/contrib/groff/contrib/chem/examples/122/ch4r_spiro.chem new file mode 100644 index 0000000000..3440c38476 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4r_spiro.chem @@ -0,0 +1,44 @@ +ch4r_spiro.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +R1: ring6 +R2: ring6 with .V1 at R1.V4 +R3: ring5 with .V5 at R2.V3 + back bond 60 from R3.V2 ; OH + front bond 150 from R3.V3 ; OH + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4s_heteroatoms.chem b/contrib/groff/contrib/chem/examples/122/ch4s_heteroatoms.chem new file mode 100644 index 0000000000..8d944924aa --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4s_heteroatoms.chem @@ -0,0 +1,40 @@ +ch4s_heteroatoms.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + + ring put N at 2 put S at 4 double 2,3 4,5 6,1 + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4t_polycyclic.chem b/contrib/groff/contrib/chem/examples/122/ch4t_polycyclic.chem new file mode 100644 index 0000000000..5044dc40d8 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4t_polycyclic.chem @@ -0,0 +1,51 @@ +ch4t_polycyclic.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +R1: benzene pointing right + bond 30 from R1.V6 ; Br +R2: benzene pointing right with .V5 at R1.V1 +R3: benzene pointing right with .V1 at R2.V3 + bond 150 from R3.V2 ; CO2H +R4: benzene pointing right with .V1 at R1.V3 +# next line names bond B1 so we can refer to its end +B1: bond left from R4.V4 + ring6 put N at 4 double 2,3 4,5 6,1 with .V3 at B1.end +B2: bond right from R2.V1 +R5: benzene with .V5 at B2.end + ring6 put N at 4 double 1,2 3,4 with .V5 at R5.V3 + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4u_nicotine.chem b/contrib/groff/contrib/chem/examples/122/ch4u_nicotine.chem new file mode 100644 index 0000000000..5f0e024584 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4u_nicotine.chem @@ -0,0 +1,44 @@ +ch4u_nicotine.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + + benzene put N at 4 + bond right + ring5 pointing down put N at 1 + bond down from .N ; CH3 # or .V1 + + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4v_histidine.chem b/contrib/groff/contrib/chem/examples/122/ch4v_histidine.chem new file mode 100644 index 0000000000..819da05ca1 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4v_histidine.chem @@ -0,0 +1,46 @@ +ch4v_histidine.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +R1: flatring pointing down put N at 2 put N at 5 double 1,2 3,4 + H right of R1.V5 + bond right from R1.V4 ; CH2 + bond right ; C + bond up from C ; H + bond down from C ; NH2 + bond right from C ; CO2H + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4w_lsd.chem b/contrib/groff/contrib/chem/examples/122/ch4w_lsd.chem new file mode 100644 index 0000000000..5325687184 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4w_lsd.chem @@ -0,0 +1,52 @@ +ch4w_lsd.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +B: benzene pointing right +F: flatring pointing left put N at 5 double 3,4 with .V1 at B.V2 + H below F.N +R: ring pointing right with .V4 at B.V6 + front bond right from R.V6 ; H +W: ring pointing right with .V2 at R.V6 put N at 1 double 3,4 + bond right from W.N ; CH3 + back bond -60 from W.V5 ; H + bond up from W.V5 ; C + double bond up from C ; O + bond right from C ; N + bond 45 from N ; C2H5 + bond 135 from N ; C2H5 + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4x_anisole.chem b/contrib/groff/contrib/chem/examples/122/ch4x_anisole.chem new file mode 100644 index 0000000000..48727c5214 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4x_anisole.chem @@ -0,0 +1,44 @@ +ch4x_anisole.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +R1: benzene + bond down from R1.V4 ; OCH3 +R2: benzene at R1 + (1.5,0) + bond down from R2.V4 ; O + CH3 right of O + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4y_reserpine.chem b/contrib/groff/contrib/chem/examples/122/ch4y_reserpine.chem new file mode 100644 index 0000000000..d637a56e00 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4y_reserpine.chem @@ -0,0 +1,64 @@ +ch4y_reserpine.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . +# Some corrections were added. + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + + CH3O + bond 60 +R1: benzene +R2: aromatic flatring5 pointing down put N at 1 with .V3 at R1.V2 + H below R2.V1 +R3: ring put N at 3 with .V5 at R2.V5 +R4: ring put N at 1 with .V1 at R3.V3 + back bond -120 from R4.V4 ; H + back bond 60 from R4.V3 ; H +R5: ring with .V1 at R4.V3 + bond -120 ; C + double bond down from C ; O + CH3O left of C + back bond 60 from R5.V3 ; H + back bond down from R5.V4 ; O + CH3 right of O + bond 120 from R5.V3 ; O + bond right lenght .1 from O ; C + double bond down ; O + bond right length .1 from C +B: benzene pointing right + bond 30 from B.V6 ; OCH3 + bond right from B.V1 ; OCH3 + bond 150 from B.V2 ; OCH3 + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch4z1_eqn_glutamic.chem b/contrib/groff/contrib/chem/examples/122/ch4z1_eqn_glutamic.chem new file mode 100644 index 0000000000..0ad7bb1a28 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4z1_eqn_glutamic.chem @@ -0,0 +1,80 @@ +ch4z1_eqn_glutamic.chem: +.br +.EQ +delim $$ +.EN +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . +# Some corrections were added. + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +# a left bracket + bond right length .1 ; BP + bond up length .3 + bond right length .1 + bond down length .3 from BP + bond right length .1 +# this is the mainchain amide structure + bond right length .1 from BP ; NH + bond right ; CH +# label the CH with an alpha, intended for eqn. +# this line says "put the north edge of the alpha at the +# south edge of the CH" + "$alpha$" with .n at CH.s + bond right from CH ; C + double bond up from C ; O + bond right length .1 from C ; BP +# a right bracket + bond up length .3 + bond left length .1 + bond right length .1 from BP + bond down length .3 from BP ; BP + bond left length .1 +# label the degree of polymerization + "$n$" with .w at BP.se +# this is the sidechain + bond up from CH ; CH2 + "$beta$" with .e at CH2.w + bond up from CH2 ; CH2 + "$gamma$" with .e at CH2.w + bond up from CH2 ; C +# this is the benzyl ester part + double bond -60 from C ; O + bond 60 from C ; O + bond right ; CH2C6H5 + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend +.EQ +delim off +.EN diff --git a/contrib/groff/contrib/chem/examples/122/ch4z2_text.chem b/contrib/groff/contrib/chem/examples/122/ch4z2_text.chem new file mode 100644 index 0000000000..47064ef10e --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch4z2_text.chem @@ -0,0 +1,55 @@ +ch4z2_text.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + + bond 120 dotted + bond 120 length .3 ; BP + back bond -120 length .25 from BP ; H + front bond 120 length .25 from BP ; CH3 + bond 60 length .5 from BP ; BP + bond -60 length .25 from BP ; H +# note the pic move command to position the text + move left .35 ; "(ANTI)" + front bond 60 length .25 from BP ; H +# another positioning of text + move right .35 ; "(SYN)" + bond 120 length .4 from BP ; BP + back bond -120 length .25 from BP ; H + front bond 120 length .25 from BP ; CH3 + bond 60 length .5 from BP + bond 60 dotted + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch5a_size.chem b/contrib/groff/contrib/chem/examples/122/ch5a_size.chem new file mode 100644 index 0000000000..d945db318a --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch5a_size.chem @@ -0,0 +1,47 @@ +ch5a_size.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +.ps 14 +size 16 +R: ring6 put O at 1 put C at 2 put O at 3 put C at 4 put O at 5 put C at 6 + double bond 60 from R.V2 ; NH + double bond down from R.V4 ; NH + double bond -60 from R.V6 ; HN +size 10 # if you are doing more than one +.ps 10 + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch6a_pic.chem b/contrib/groff/contrib/chem/examples/122/ch6a_pic.chem new file mode 100644 index 0000000000..f444591ff0 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch6a_pic.chem @@ -0,0 +1,45 @@ +ch6a_pic.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +R: ring double 2,3 + line from R.V6 to R.C + line from R.C to R.V4 + X1: 1/2 + X2: 1/2 + bond from X1 to X2 + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/ch6b_dna.chem b/contrib/groff/contrib/chem/examples/122/ch6b_dna.chem new file mode 100644 index 0000000000..38577db7ab --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/ch6b_dna.chem @@ -0,0 +1,61 @@ +ch6b_dna.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +P: [ +R1: flatring pointing up put N at 1 put N at 4 double 5,1 + bond -135 from R1.V4 ; BP + "deoxyribose" rjust with .e at BP.w +R2: ring6 put N at 2 put N at 4 double 1,2 3,4 5,6 with .V6 at R1.V2 + pic Conn: R2.V2.ne #because naming is too restricted in pic + bond up from R2.V1 ; N + bond -60 from N ; H + bond 60 from N ; H +] + # thymine +Q: [ +R3: ring6 put N at 3 put N at 5 double 1,2 + bond up from R3.V1 ; CH3 + bond 120 from R3.V3 ; BP + "deoxyribose" ljust with .w at BP.e + double bond down from R3.V4 ; O + double bond -60 from R3.V6 ; O + bond -120 from R3.V5 ; H +] with .O at P.H + (.3,.3) + bond from Q.O.sw to P.H.ne dotted + bond from Q.H.sw to P.Conn dotted + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/chAa_polymer.chem b/contrib/groff/contrib/chem/examples/122/chAa_polymer.chem new file mode 100644 index 0000000000..5dc8838bcb --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/chAa_polymer.chem @@ -0,0 +1,74 @@ +chAa_polymer.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +# epoxy based on the m-phenyldiamine cured bisphenol-A + size 8 + bond dotted + bond ; N + bond ; CH2 + bond down from N +R1: benzene + bond 120 length .1 from R1.V3 ; N + bond right length .1 from N + bond down length .1 from N +# back to the CH2 + bond right from CH2 ; CH + bond down from CH ; OH + bond right from CH ; CH2 + bond right ; O + bond right + benzene pointing right + bond right ; C + bond up from C ; CH3 + bond down from C ; CH3 + bond right from C + benzene pointing right + bond right ; O + bond right from O ; CH2 + bond right ; CH + bond down from CH ; OH + bond right from CH ; CH2 + bond right ; N + bond right from N + bond dotted + bond down from N +R2: benzene + bond 120 length .1 from R2.V3 ; N + bond right length .1 from N + bond down length .1 from N + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/chAb_vinyl_chloro.chem b/contrib/groff/contrib/chem/examples/122/chAb_vinyl_chloro.chem new file mode 100644 index 0000000000..5f9d197cb2 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/chAb_vinyl_chloro.chem @@ -0,0 +1,64 @@ +chAb_vinyl_chloro.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + + Cl + bond 120 length .25 ; BP + bond 60 length .25 from BP ; Cl +B1: double bond down length .3 from BP + bond 120 length .35 ; BP +# now comes the ring +R1: ring6 double 1,2 3,4 5,6 with .V6 at BP + bond up length .1 from R1.V1 ; H + bond 60 length .1 from R1.V2 ; H + bond 120 from R1.V3 ; O + bond 60 from O ; C + double bond up from C ; O + bond 120 from C +# continue decorating the ring + bond down length .1 from R1.V4 ; H + bond -120 length .1 from R1.V5 ; H +# now go back and do the left hand ring + bond -120 length .35 from B1.end ; BP +R2: ring6 double 1,2 3,4 5,6 with .V2 at BP + bond up length .1 from R2.V1 ; H + bond -60 length .1 from R2.V6 ; H + bond -120 from R2.V5 ; O + bond -60 from O + bond down length .1 from R2.V4 ; H + bond 120 length .1 from R2.V3 ; H + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/chAc_morphine.chem b/contrib/groff/contrib/chem/examples/122/chAc_morphine.chem new file mode 100644 index 0000000000..bd37cde9db --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/chAc_morphine.chem @@ -0,0 +1,54 @@ +chAc_morphine.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +R1: ring6 double 1,2 + bond -60 from R1.V6 ; HO +R2: ring6 with .V1 at R1.V3 + bond 60 from R2.V2 ; N + bond right from N ; CH3 +R3: benzene with .V1 at R2.V5 + bond -120 from R3.V5 ; HO +# this is the furan ring + bond -135 length .33 from R1.V5 ; O + bond -45 length .33 from R3.V6 +# this is the odd ring + bond up length .1 from N ; BP +B1: bond up length .33 from R1.V4 + bond to BP + + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/chAd_chlorophyll.chem b/contrib/groff/contrib/chem/examples/122/chAd_chlorophyll.chem new file mode 100644 index 0000000000..99495e385b --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/chAd_chlorophyll.chem @@ -0,0 +1,71 @@ +chAd_chlorophyll.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + + Mg + bond 45 ; N +R1: ring5 pointing up put N at 4 double 1,2 4,5 with .V4 at N + bond up from R1.V1 ; CH3 + bond right from R1.V2 ; CH2CH3 + bond 135 from Mg ; N +R2: ring5 pointing down put N at 3 double 1,2 4,5 with .V3 at N + bond right from R2.V5 ; CH3 + bond 225 from Mg ; N +R3: ring5 pointing down put N at 4 double 3,4 with .V4 at N + bond -45 from Mg ; N +R4: ring5 pointing up put N at 3 double 1,5 with .V3 at N + bond left from R4.V5 ; H3C + bond up from R4.V1 ; CH + double bond right length .1 from CH ; CH2 + double bond 150 length .3 from R1.V3 + bond to R2.V4 +R5: ring5 pointing 72 with .V5 at R2.V2 + double bond 135 from R5.V2 ; O + bond down from R5.V3 ; C + double bond left length .1 from C ; O + bond down from C ; O + CH3 left of O + double bond -25 from R5.V4 + bond down from R3.V1 ; CH2 + CH2 left of CH2 + bond left ; C + double bond -45 ; O + bond -135 from C ; C20H39O + bond left from R3.V2 ; H3C + double bond -150 length .3 from R4.V4 + bond to R3.V3 + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/chAe_chair.chem b/contrib/groff/contrib/chem/examples/122/chAe_chair.chem new file mode 100644 index 0000000000..23de7729b0 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/chAe_chair.chem @@ -0,0 +1,51 @@ +chAe_chair.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +pic define chair { [ + V1: bond 120 length .25 + V2: bond right length .35 + V3: bond 150 length .35 + V4: bond -60 length .25 + V5: bond left length .35 + V6: bond to V1.start +pic ] } +R1: chair +R2: chair with .V1 at R1.V4.start +bond 60 from R2.V4.start ; CH3 +bond down from R2.V4.start ; OH + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/chAf_arrow.chem b/contrib/groff/contrib/chem/examples/122/chAf_arrow.chem new file mode 100644 index 0000000000..e7566b5043 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/chAf_arrow.chem @@ -0,0 +1,70 @@ +chAf_arrow.chem: +.br +.EQ +delim $$ +.EN +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + + bond length .1 ; BP + bond up length .5 + bond right + bond down length .5 from BP + bond right + bond right from BP ; C + double bond up ; O + bond right from C + benzene pointing right + bond right ; C + double bond up from C ; O + bond right from C ; O + bond right ; CH2 +# this is the statement to make the arrow + line <- from CH2.s down + move down .1 ; "0.085" + CH2CH2CH2 right of CH2 + bond right ; O + bond right length .1 ; BP + bond up length .5 from BP + bond left + bond right length .1 from BP + bond down length .5 from BP ; BP + bond left + "$n$" with .w at BP.se + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend +.EQ +delim off +.EN diff --git a/contrib/groff/contrib/chem/examples/122/chAg_circle.chem b/contrib/groff/contrib/chem/examples/122/chAg_circle.chem new file mode 100644 index 0000000000..b51c9d987b --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/chAg_circle.chem @@ -0,0 +1,56 @@ +chAg_circle.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +bond 120 ; C +bond 60 ; C +bond up ; Cl +double bond 120 from C ; C +bond 60 ; C +bond 120 ; C +bond 60 ; C +bond up ; Cl +double bond 120 from C ; C +circle at C rad .08 +bond 60 from C ; C +bond 120 ; C +bond 60 ; C +double bond 120 ; C +bond down ; Cl +bond 60 from C ; C +bond 120 + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/chAh_brackets.chem b/contrib/groff/contrib/chem/examples/122/chAh_brackets.chem new file mode 100644 index 0000000000..c45df5d6fd --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/chAh_brackets.chem @@ -0,0 +1,62 @@ +chAh_brackets.chem: +.br +.EQ +delim $$ +.EN +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +[ + bond right ; CH2 + bond 120 ; (CH2) + "$nothing sub n$" + bond 60 ; .CH2 +] +# now put the arrow in + move right .3 + arrow .5 + move right .3 +# begin second structure +[ + bond right ; CH. + bond 120 ; (CH2) + "$nothing sub n$" + bond 60 ; CH3 +] + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend +.EQ +delim $$ +.EN diff --git a/contrib/groff/contrib/chem/examples/122/chAi_poly_vinyl_chloride.chem b/contrib/groff/contrib/chem/examples/122/chAi_poly_vinyl_chloride.chem new file mode 100644 index 0000000000..ea0be896e7 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/chAi_poly_vinyl_chloride.chem @@ -0,0 +1,143 @@ +chAi_poly_vinyl_chloride.chem: +.br +.ps -2 +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +db = .12 +cwid = .095 +A: [ + bond dotted + bond right ; CH + bond down ; Cl + bond right from CH ; CH2 + bond ; CH + bond down ; Cl + bond right from CH ; CH2 + bond ; C. + bond down ; Cl + bond right from C ; CH2 + bond ; CH2 + bond down ; Cl +] +" (6.13a)" ljust at A.e +arrow down .5 from A.s +[ + CH2 + double bond right ; CHCl +] with .w at last arrow.c +B: [ + bond dotted + bond right ; CH + bond down ; Cl + bond right from CH ; CH2 + bond ; CH + bond down ; Cl + bond right from CH ; CH2 + bond ; C + bond up ; Cl + bond down from C ; CH2 + bond ; CH2Cl + bond right from C ; CH2 + bond ; CH + bond down ; Cl + bond right from CH + bond dotted +] with .n at end of last arrow +" (6.13b)" ljust at B.e +C: [ + bond dotted + bond right ; CH + bond down ; Cl + bond right from CH ; CH2 + bond ; C. + bond down ; Cl + bond right from C ; CH2 + bond ; CH + bond down ; Cl + bond right from CH ; CH2 + bond ; CH2 + bond down ; Cl +] with .n at B.s - (0,.5) +" (6.14a)" ljust at C.e +arrow down .3 from C.s +[ + CH2 + double bond right + CHCl +] with .w at last arrow.s +arrow down .3 from last arrow.s + +D: [ + bond dotted + bond right ; CH + bond down ; Cl + bond right from CH ; CH2 + bond ; C + bond up ; Cl + bond down from C ; CH2 + bond ; CHCl + bond ; CH2 + bond ; CH2Cl + bond right from C ; CH2 + bond ; CH + bond down ; Cl + bond right from CH ; CH2 + bond ; CH + bond down ; Cl + bond right from CH + bond dotted +] with .n at last arrow.s +" (6.14b)" ljust at D.e +E: [ + bond dotted + bond ; CH + bond down ; Cl + bond right from CH ; CH2 + bond ; CH + bond down ; Cl + bond right from CH ; CH2 + bond ; CH + bond down ; Cl + bond right from CH ; CH2 + bond ; CH + bond down ; Cl +] with .e at B.w - (.5,0) + +arrow from E.ne to A.sw +arrow from E.se to C.nw + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend +.ps +2 diff --git a/contrib/groff/contrib/chem/examples/122/chBa_jump.chem b/contrib/groff/contrib/chem/examples/122/chBa_jump.chem new file mode 100644 index 0000000000..9e60a28e49 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/chBa_jump.chem @@ -0,0 +1,43 @@ +chBa_jump.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +SiO2 # name = SiO2 +move right 1 +CH3CH2NH2.HCl # name = CH3CH2NH2HCl + + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/chBb_bonds.chem b/contrib/groff/contrib/chem/examples/122/chBb_bonds.chem new file mode 100644 index 0000000000..22fdf95121 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/chBb_bonds.chem @@ -0,0 +1,44 @@ +chBb_bonds.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +C +frontbond -170 from C ; H +backbond 10 from C ; CO2H +bond left length .15 from C ; H2N +bond right from C ; CH3 + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/122/chBc_rings.chem b/contrib/groff/contrib/chem/examples/122/chBc_rings.chem new file mode 100644 index 0000000000..a6fff4363a --- /dev/null +++ b/contrib/groff/contrib/chem/examples/122/chBc_rings.chem @@ -0,0 +1,45 @@ +chBc_rings.chem: +.br +.cstart + +# Example file for `chem': + +# This originates from Computing Science Technical Report No. 122 +# CHEM - A Program for Typesetting Chemical Diagrams: User Manual +# by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan +# . + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## + +R1: benzene + bond -120 from R1.V5 ; CH3O +R2: ring4 pointing 45 with .V4 at R1.V2 +R3: aromatic ring6 put N at 4 put S at 2 at R2 + (.75,0) +R4: ring5 pointing left at R3 + (.75,0) + label R4 + +######################################################################## +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/README.txt b/contrib/groff/contrib/chem/examples/README.txt new file mode 100644 index 0000000000..8fff7120af --- /dev/null +++ b/contrib/groff/contrib/chem/examples/README.txt @@ -0,0 +1,65 @@ +This directory contains examples for the `chem' language. + +You can view the graphical display of the examples by calling + + groffer + +`groffer' calls `chem' automatically. + +If you want to transform example files to a different format use the +`roff2*' programs: + +`roff2dvi' prints dvi format to standard output, +`roff2html' generates html output, +`roff2pdf' outputs pdf mode, +`roff2ps' produces PostScript output, +`roff2text' generates text output in the groff device `latin1', +`roff2x' prints the output in the groff device X that is + suitable for programs like `gxditview' or `xditview'. + +To get a suitable `groff' output run + + @g@chem | groff -p ... + +On the displays, you can see rings consisting of several lines and +bonds (lines). All points on rings and bonds that do not have a +notation mean a C atom (carbon) filled with H atoms (hydrogen) such +that the valence of 4 is satisfied. + +For example, suppose you have just a single line without any +characters. That means a bond. It has two points, one at each end of +the line. So each of these points stands for a C atom, the bond +itself connects these 2 C atoms. To fulfill the valence of 4, each +points has to carry additionally 3 H atoms. So the single empty bond +stands for CH3-CH3, though this combination doesn't make much sense +chemically. + + +####### License + +Last update: 5 Jan 2009 + +Copyright (C) 2006, 2009 Free Software Foundation, Inc. +Written by Bernd Warken. + +This file is part of `chem', which is part of `groff'. + +`groff' is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +`groff' is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +####### Emacs settings + +Local Variables: +mode: text +End: diff --git a/contrib/groff/contrib/chem/examples/atp.chem b/contrib/groff/contrib/chem/examples/atp.chem new file mode 100644 index 0000000000..ca1055921c --- /dev/null +++ b/contrib/groff/contrib/chem/examples/atp.chem @@ -0,0 +1,63 @@ +atp.chem: +.cstart + +# Example file for `chem': +# ATP or C10_H16_N5_O13_P3 or +# [[[5-(6-aminopurin-9-yl)-3,4-dihydroxy-oxolan-2-yl]methoxy-hydroxy- +# phosphoryl]oxy-hydroxy-phosphoryl]oxyphosphonic acid + +# Found at http://www.chemindustry.com/apps/chemicals. + +# Source file position: /contrib/chem/example/atp.chem +# Installed position: /share/doc/groff/example/chem/atp.chem + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. +# Written by Bernd Warken. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +R1: ring5 pointing left double 1,2 3,4 put N at 2 put N at 5 +B: benzene put N at 2 with .V6 at R1.V3 with .V5 at R1.V4 + bond up ; NH2 + backbond 170 length .7 from R1.V5 +R2: ring5 pointing down with .V2 put O at 1 + bond down at R2.V2 ; H + bond down length .1 at R2.V3 ; H + bond up length .1 at R2.V3 ; OH + bond down length .1 at R2.V4 ; H + bond up length .1 at R2.V4 ; OH + frontbond 70 at R2.V5 + bond 110 ; O + bond right ; P + doublebond up ; O + bond down from P ; OH + bond right from P ; O + bond right ; P + doublebond up ; O + bond down from P ; OH + bond right from P ; O + bond right ; P + doublebond up ; O + bond down from P ; OH + bond right from P ; OH + +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/cholesterin.chem b/contrib/groff/contrib/chem/examples/cholesterin.chem new file mode 100644 index 0000000000..0dd1c29fce --- /dev/null +++ b/contrib/groff/contrib/chem/examples/cholesterin.chem @@ -0,0 +1,52 @@ +cholesterin.chem: +.cstart + +# Example file for `chem': +# Cholesterin or C27_H46O or +# 10,13-dimethyl-17-(6-methylheptan-2-yl)-2,3,4,5,6,9,11,12,14,15,16,17- +# dodecahydro-1H-cyclopenta[a]phenanthren-3-ol + +# Source file position: /contrib/chem/example/cholesterin.p +# Installed position: /share/doc/groff/example/chem/cholesterin.p + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. +# Written by Bernd Warken. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +R1: ring6 + bond -120 ; HO +R2: ring6 with .V5 at R1.V3 with .V6 at R1.V2 double 4,5 + bond up at R2.V6 +R3: ring6 with .V5 at R2.V1 with .V4 at R2.V2 +R4: flatring5 pointing up with .V4 at R3.V3 with .V5 at R3.V2 + bond up at R4.V5 + bond up at R4.V1 +B1: bond -60 + bond 60 at B1.start + bond 120 + bond 60 + bond 120 +B2: bond 60 + bond down at B2.start + +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/ethamivan.chem b/contrib/groff/contrib/chem/examples/ethamivan.chem new file mode 100644 index 0000000000..9534b30764 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/ethamivan.chem @@ -0,0 +1,48 @@ +ethamivan.chem: +.cstart + +# Example file for `chem': +# Ethamivan or Analepticon or C12_H17_N_O3 or +# N,N-diethyl-4-hydroxy-3-methoxy-benzamide + +# Source file position: /contrib/chem/example/ethamivan.chem +# Installed position: /share/doc/groff/example/chem/ethamivan.chem + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. +# Written by Bernd Warken. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +R: ring pointing left double 2,3 4,5 6,1 + bond left from R.V1 ; O + bond left ; H + bond -150 from R.V6 ; O + bond left + bond 60 from R.V4 +B1: double bond up ; O + bond 120 from B1.start ; N + bond 45 + bond right + bond 135 from N + bond right + +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/lsd.chem b/contrib/groff/contrib/chem/examples/lsd.chem new file mode 100644 index 0000000000..77cd3973e4 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/lsd.chem @@ -0,0 +1,51 @@ +lsd.chem: +.cstart + +# Example file for `chem': +# LSD or Lysergic acid dethylamide or C20_H25_N3O or +# 9,10-Didehydro-N,N-diethyl-6-methyl-ergoline-8-beta-carboxamide + +# Source file position: /contrib/chem/example/lsd.p +# Installed position: /share/doc/groff/example/chem/lsd.p + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. +# Written by Bernd Warken. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +F: flatring5 pointing left put N at 5 double 3,4 + H below F.N +B: benzene pointing right with .V1 at F.V2 +R1: ring pointing right with .V4 at B.V6 + front bond right from R1.V6 ; H +R2: ring pointing right with .V2 at R1.V6 put N at 1 double 3,4 + bond right from R2.N + back bond -60 from R2.V5 ; H + bond up from R2.V5 +B1: double bond up ; O + bond right from B1.start ; N + bond 45 + bond right + bond 135 from N + bond right + +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/morphine.chem b/contrib/groff/contrib/chem/examples/morphine.chem new file mode 100644 index 0000000000..55de84d353 --- /dev/null +++ b/contrib/groff/contrib/chem/examples/morphine.chem @@ -0,0 +1,55 @@ +morphine.chem: +.cstart + +# Example file for `chem': +# Morphine or C23_H31_N3O or +# N,N-diethyl-N'-(2-methoxyacridin-9-yl)-pentane-1,4-diamine + +# Found at http://www.chemindustry.com/apps/chemicals. + +# Source file position: /contrib/chem/example/morphine.chem +# Installed position: /share/doc/groff/example/chem/morphine.chem + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. +# Written by Bernd Warken. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +R1: benzene +R2: benzene with .V6 at R1.V2 with .V5 at R1.V3 put N at 4 +R3: benzene with .V6 at R2.V2 with .V5 at R2.V3 + bond 60 at R3.V2 ; O + bond 120 + bond up at R2.V1 ; N + bond 60 ; H + bond -60 at N +B1: backbond -120 + bond up at B1.start + bond -60 + bond up + bond -60 ; N + bond up + bond -60 + bond -120 at N + bond -60 + +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/penicillin.chem b/contrib/groff/contrib/chem/examples/penicillin.chem new file mode 100644 index 0000000000..067ea2a92b --- /dev/null +++ b/contrib/groff/contrib/chem/examples/penicillin.chem @@ -0,0 +1,56 @@ +penicillin.chem: +.cstart + +# Example file for `chem': +# Penicillin or C16_H18_N2_O4_S or +# 3,3-dimethyl-6-oxo-7-(2-phenylacetyl)amino-2-thia-5- +# azabicyclo[3.2.0]heptane-4-carboxylic acid + +# Found at http://www.chemindustry.com/apps/chemicals. + +# Source file position: /contrib/chem/example/morphine.chem +# Installed position: /share/doc/groff/example/chem/morphine.chem + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. +# Written by Bernd Warken. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +R1: flatring5 pointing up put S at 1 put N at 4 + bond 45 at R1.V2 + bond 135 at R1.V2 + bond 120 at R1.V3 +D1: doublebond 45 ; O + bond 135 at D1.start ; OH + bond left at R1.N + doublebond -135 ; O + bond left at R1.V5 +B1: bond down length .3 + bond -60 at B1.start ; N + bond up ; H + bond -120 at N +D2: doublebond down ; O + bond -60 at D2.start + bond -120 + benzene + +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +.cend diff --git a/contrib/groff/contrib/chem/examples/reserpine.chem b/contrib/groff/contrib/chem/examples/reserpine.chem new file mode 100644 index 0000000000..8b23bf33ff --- /dev/null +++ b/contrib/groff/contrib/chem/examples/reserpine.chem @@ -0,0 +1,65 @@ +reserpine.chem: +.PS +begin chem + +# Example file for `chem': +# Reserpine or C33H40N2O9 + +# Source file position: /contrib/chem/example/reserpine.chem +# Installed position: /share/doc/groff/example/chem/reserpine.chem + +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. +# Written by Bernd Warken. + +# Last update: 5 Jan 2009 + +# This file is part of `chem', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +R1: benzene pointing up + bond -120 from R1.V5 ; O + bond left +R2: flatring5 pointing down double 4,5 with .V2 at R1.V3 with .V3 at R1.V2 put N at 1 + H below R2.V1 +R3: ring put N at 3 with .V5 at R2.V5 +R4: ring put N at 1 with .V1 at R3.V3 + back bond -120 from R4.V4 ; H + back bond 60 from R4.V3 ; H +R5: ring with .V1 at R4.V3 + bond -120 +D1: double bond down ; O + bond left from D1.start ; O + bond left + back bond 60 from R5.V3 ; H + back bond down from R5.V4 ; O + bond down from O + bond 120 from R5.V3 ; O + bond 50 from O +D2: double bond up ; O + bond right length .1 from D2.start +B: benzene pointing right + bond 45 from B.V6 ; O + bond right + bond right from B.V1 ; O + bond right + bond 135 from B.V2 ; O + bond right + +### Emacs settings +# Local Variables: +# mode: Nroff +# End: +end +.PE diff --git a/contrib/groff/contrib/eqn2graph/eqn2graph.man b/contrib/groff/contrib/eqn2graph/eqn2graph.man index 3f34cc5e2a..9ea5b2eafa 100644 --- a/contrib/groff/contrib/eqn2graph/eqn2graph.man +++ b/contrib/groff/contrib/eqn2graph/eqn2graph.man @@ -1,4 +1,4 @@ -.\" $Id: eqn2graph.man,v 1.4 2003/10/28 07:46:23 wlemb Exp $ +.\" $Id: eqn2graph.man,v 1.6 2008/09/29 21:55:07 wl Exp $ .\" This documentation is released to the public domain. . . @@ -31,17 +31,23 @@ Reads an EQN equation (one line) as input; produces an image file (by default in Portable Network Graphics format) suitable for the Web as output. .P -Your input EQN code should \fInot\fR have the \&.EQ/.EN preamble that +Your input EQN code should +.I not +have the \&.EQ/.EN preamble that that normally precedes it within .BR groff (@MAN1EXT@) macros; nor do you need to have dollar-sign or other delimiters around the equation. .P -The output image will be a black-on-white graphic clipped to the -smallest possible bounding box that contains all the black pixels. +The output image will be clipped to the smallest possible bounding box +that contains all the black pixels. +Older versions of +.BR convert (1) +will produce a black-on-white graphic; newer ones may produce a +black-on-transparent graphic. By specifying command-line options to be passed to .BR convert (1) -you can give it a border, set the background transparent, set the +you can give it a border, force the background transparent, set the image's pixel density, or perform other useful transformations. .P This program uses @@ -51,7 +57,9 @@ and the ImageMagick .BR convert (1) program. These programs must be installed on your system and accessible on your -$PATH for \fBeqn2graph\fR to work. +$PATH for +.B eqn2graph +to work. . . .SH OPTIONS @@ -98,6 +106,28 @@ Otherwise, temporary files will be created in .BR /tmp . . . +.SH BUGS +Due to changes in the behavior of ImageMagick +.BR convert (1) +that are both forward and backward-incompatible, +mismatches between your +.B eqn2graph +and +.BR convert (1) +versions may produce zero-sized or untrimmed output images. +For this version of +.B eqn2graph +you will need a version of +.BR convert (1) +that supports the +.B \-trim +option; older versions of +.B eqn2graph +used +.BR \-crop\~0x0 , +which no longer has trimming behavior. +. +. .SH "SEE ALSO" .BR pic2graph (@MAN1EXT@), .BR grap2graph (@MAN1EXT@), diff --git a/contrib/groff/contrib/eqn2graph/eqn2graph.sh b/contrib/groff/contrib/eqn2graph/eqn2graph.sh index 98713a854a..6919683105 100644 --- a/contrib/groff/contrib/eqn2graph/eqn2graph.sh +++ b/contrib/groff/contrib/eqn2graph/eqn2graph.sh @@ -32,7 +32,7 @@ # # Thus, we pass -U to groff(1), and everything else to convert(1). # -# $Id: eqn2graph.sh,v 1.5 2005/05/18 07:03:06 wl Exp $ +# $Id: eqn2graph.sh,v 1.6 2008/09/29 00:53:29 esr Exp $ # groff_opts="" convert_opts="" @@ -85,7 +85,7 @@ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 2 15 read equation (echo ".EQ"; echo 'delim $$'; echo ".EN"; echo '$'"$equation"'$') | \ groff -e $groff_opts -Tps -P-pletter > $tmp/eqn2graph.ps \ - && convert -trim -crop 0x0 $convert_opts $tmp/eqn2graph.ps $tmp/eqn2graph.$format \ + && convert -trim $convert_opts $tmp/eqn2graph.ps $tmp/eqn2graph.$format \ && cat $tmp/eqn2graph.$format # End diff --git a/contrib/groff/contrib/hdtbl/ChangeLog b/contrib/groff/contrib/hdtbl/ChangeLog new file mode 100644 index 0000000000..1980b86f76 --- /dev/null +++ b/contrib/groff/contrib/hdtbl/ChangeLog @@ -0,0 +1,213 @@ +2009-01-04 Werner LEMBERG + + * Makefile.sub (CLEANADD): Add hdmisc.tmac-s and hdtbl.tmac-s. + +2009-01-03 Werner LEMBERG + + * README: Renamed to... + * TODO: This, removing most of its contents. + + * groff_hdtbl.man: Add customization info which was in file README. + +2008-01-04 Werner LEMBERG + + * groff_hdtbl.man: Replace .MTO with .MT/.ME. + Don't include www.tmac. + +2006-11-17 Werner LEMBERG + + * Makefile.sub (install_data): Depend on gnu.eps also. + (uninstall_sub): Remove gnu.eps also. + +2006-11-17 Werner LEMBERG + + * hdmisc.tmac: Avoid loading itself more than once. + Load hdtbl.tmac unconditionally. + (\n[?], \n[*miscs]): Remove. + (random-s1): Use only 9 digits. + + * hdtbl.tmac: Avoid loading itself more than once. + Load hdmisc.tmac unconditionally. + Load 62bit.tmac + (\n[*hdtbl]): Removed. + (t*cl): Prevent scaling overflow by using routines from 62bit.tmac. + +2006-11-15 Werner LEMBERG + + * hdmisc.tmac (d2x): Use string array instead of `dzx' macro. + Improve error handling. + (dzx): Removed. + (random#): Rewrite to generate random numbers by itself instead of + using an external command. + +2006-11-06 Joachim Walsdorff + + * hdmisc.tmac (\*[g]): Move definition back to... + * hdtbl.tmac: This file. + (TD, t*divs): Fix a bug with consecutive groups of spanned rows by + introducing string *rsp*\\*[#trc]. Reported by Barry Nisly. + (TH): Add arguments `hal', `val', and `fst'. + +2006-11-01 Werner LEMBERG + + * hdtbl.tmac (t*divs): Fix a bug which causes incorrect table cell + heights if the `rowspan' keyword is used. This problem has been + introduced during the beautification process by introducing + incorrect parentheses. + Other minor modifications. + (\n[rsp...]): Array renamed to... + (\n[rspan...]): This. + (\n[csp...]): Array renamed to... + (\n[cspan...]): This. + (\n[vl...]): Array renamed to... + (\n[vline...]): This. + +2006-10-27 Werner LEMBERG + + * hdmisc.tmac (EM): Improve warning messages. + + * hdtbl.tmac (TD): Move constant comparison out of while loop. + +2006-10-26 Werner LEMBERG + + * hdmisc.tmac: Add `\"' at various places to protect against + trailing spaces. + (getarg): Don't use a different escape character but + `\?' escapes to protect against incomplete input. + Improve documentation. + + * hdtbl.tmac: Improve various warning messages. + (TR): Add validity check for `height' keyword. + (TD): Don't use `\\\\' but `\E'. + (\*[*#trc*]): Initialize. + (t*dntr): Avoid undefined register warning. + +2006-10-23 Werner LEMBERG + + * hdtbl.tmac (\n[t*#]): Initialize. + (TBL): Don't inialize `\*[width]'. + Add validity checks for all keywords. + (TD): Add validity checks for `rowspan' and `colspan' keywords. + (t*cl): Add validity checks for cell widths. + +2006-09-13 Werner LEMBERG + + * examples/fontdumps_n.in, examples/fontdumps_x.in: Renamed to... + * examples/fonts_n.in, examples/fonts_x.in: This. + + * examples/colored_boxes.roff, examples/colored_nested_tables.roff, + examples/colored_table_cells.roff: Renamed to... + * examples/color_boxes.roff, examples/color_nested_tables.roff, + examples/color_table_cells.roff: This. + + * Makefile.sub: Updated. + +2006-06-21 Werner LEMBERG + + * examples/fontdumps_n.roff, examples/fontdumps_x.roff: Renamed + to... + * example/fontdumps_n.in, example/fontdumps_x_in: This. + Rename `*fontpath' to `fontpath' and define it conditionally (using + `@fontdir@') so that it can be overridden on the command line. + + * Makefile.sub (GENFILES, GENFILES_): New variables for + fontdumps*.roff. + (EXAMPLEFILES): Remove fontdumps.roff. + (CLEANADD): Add GENFILES. + (.in.roff): New rule. + (.SUFFIXES): Add `.in'. + (install_data, uninstall_sub): Updated. + +2006-06-14 Werner LEMBERG + + * hdmisc.tmac: Fix test for \n[?] to avoid warning message. + s/\n[.s]p/\n[.ps]/. + (pv): Use `z' scaling indicator. + + * hdtbl.tmac: Fix test for \n[?] and \n[*miscs] to avoid warning + messages. + +2006-06-11 Werner LEMBERG + + * groff_hdtbl.man: Use `.ig' block after NAME section to make mandb + happy. + +2006-06-05 Werner LEMBERG + + * hdmisc.tmac (index): Use `\?' to emulate string comparison. + +2006-06-04 Werner LEMBERG + + * hdbtl.tmac: Improve error messages. In particular, handle + singular and plural correctly by using a pseudo array `nth-{1,2,3}'. + + * examples/rainbow.roff: Add copyright notice. Formatting. + +2006-05-31 Werner LEMBERG + + * examples/fontdumps_x.roff, examples/fontdumps_n.roff: Protect + argument of `tr' command in `.pso' call. + +2006-05-30 Werner LEMBERG + + * examples/fontdumps_x.roff: Remove warnings about + non-existent glyphs. + Add copyright notice. + Formatting. + + * hdtbl.tmac: Replace character >= 0x80. + +2006-05-29 Werner LEMBERG + + * Makefile.sub: New file. + * examples/*: Replace characters >= 0x80. + Add final newlines. + Use UNIX line end convention only. + * examples/mixed-pickles.roff: Use gnu.eps. + Add copyright notice. + Adjust pic image. + Other minor fixes. + Formatting. + * examples/fontdumps_n.roff: Remove warnings about + non-existent glyphs. + Add copyright notice. + Formatting. + +2006-05-25 Werner LEMBERG + + * examples/*: Rename to... + * examples/*.roff: This. + +2006-05-24 Werner LEMBERG + + * groff_hdtbl.man: Simplify macros for switching from and to the `C' + font family, as suggested by Tadziu Hoffmann. + +2006-05-22 Werner LEMBERG + + * groff_hdtbl.man: Completely revised again. + `Normalize' font usage: Add macros similar to `.B' and `.BI' for + switching from and to the `C' font family, instead of using \f. + Fix appearance of macro syntax descriptions. + Add more quotation characters. + +2006-05-21 Werner LEMBERG + + * groff_hdtbl.man: Completely revised. + +2006-05-20 Werner LEMBERG + + * Import of hdtbl 0.91 (with some further modifications). Still + many rough edges. + +Copyright 2006, 2008, 2009 + Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + +Local Variables: +version-control: never +coding: latin-1 +End: diff --git a/contrib/groff/contrib/hdtbl/Makefile.sub b/contrib/groff/contrib/hdtbl/Makefile.sub new file mode 100644 index 0000000000..314552c802 --- /dev/null +++ b/contrib/groff/contrib/hdtbl/Makefile.sub @@ -0,0 +1,153 @@ +# Copyright (C) 2006, 2009 Free Software Foundation, Inc. +# Written by Werner Lemberg (wl@gnu.org) +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# These may be overridden if cross-compiling. +GROFFBIN=$(top_builddir)/src/roff/groff/groff +GROFF_BIN_PATH=`echo $(groff_bin_dirs) | sed -e 's| *|$(SH_SEP)|g'` + +groff_bin_dirs=\ + $(top_builddir)/src/roff/groff \ + $(top_builddir)/src/roff/troff \ + $(top_builddir)/src/preproc/eqn \ + $(top_builddir)/src/preproc/pic \ + $(top_builddir)/src/preproc/tbl \ + $(top_builddir)/src/devices/grops + +FFLAG=-F$(top_builddir)/font -F$(top_srcdir)/font +TFLAG=-M$(top_builddir)/tmac -M$(top_srcdir)/tmac -M$(srcdir) +PFLAG=-t -p -e -U + +GROFF=GROFF_COMMAND_PREFIX=''; \ + export GROFF_COMMAND_PREFIX; \ + GROFF_BIN_PATH=$(GROFF_BIN_PATH); \ + export GROFF_BIN_PATH; \ + $(GROFFBIN) $(FFLAG) $(TFLAG) $(PFLAG) + +MAN7=\ + groff_hdtbl.n + +# These files are processed with `strip.sed'. +STRIPFILES=\ + hdtbl.tmac \ + hdmisc.tmac + +# These files are handled by the `.in.roff' rule. +GENFILES=\ + examples/fonts_n.roff \ + examples/fonts_x.roff + +EXAMPLEFILES=\ + examples/chess_board.roff \ + examples/color_boxes.roff \ + examples/color_nested_tables.roff \ + examples/color_table_cells.roff \ + examples/color_transitions.roff \ + examples/col_rowspan_colors.roff \ + examples/mixed_pickles.roff \ + examples/rainbow.roff \ + examples/short_reference.roff + +PROCESSEDEXAMPLEFILES=\ + examples/chess_board.ps \ + examples/color_boxes.ps \ + examples/color_nested_tables.ps \ + examples/color_table_cells.ps \ + examples/color_transitions.ps \ + examples/col_rowspan_colors.ps \ + examples/fonts_n.ps \ + examples/fonts_x.ps \ + examples/mixed_pickles.ps \ + examples/rainbow.ps \ + examples/short_reference.ps + +EXAMPLEFILES_=`echo $(EXAMPLEFILES) | sed 's|examples/||g'` +GENFILES_=`echo $(GENFILES) | sed 's|examples/||g'` +PROCESSEDEXAMPLEFILES_=`echo $(PROCESSEDEXAMPLEFILES) | sed 's|examples/||g'` + +MOSTLYCLEANADD=\ + gnu.eps \ + $(PROCESSEDEXAMPLEFILES) \ + $(GENFILES) \ + examples/stamp \ + stamp-strip \ + hdmisc.tmac-s hdtbl.tmac-s + +.SUFFIXES: .roff .in .ps + +.roff.ps: + $(GROFF) -Tps -dfontpath=$(top_srcdir)/font -mhdtbl $< >$@ + +.in.roff: + sed -e "s|@fontdir@|$(fontdir)|" $< >$@ + + +all: $(PROCESSEDEXAMPLEFILES) stamp-strip + +$(PROCESSEDEXAMPLEFILES): gnu.eps examples/stamp + +gnu.eps: + if test -f $(top_srcdir)/doc/gnu.eps; then \ + cp $(top_srcdir)/doc/gnu.eps . ; \ + elif test -f $(top_builddir)/doc/gnu.eps; then \ + cp $(top_builddir)/doc/gnu.eps . ; \ + else \ + xpmtoppm $(top_srcdir)/doc/gnu.xpm | pnmdepth 15 | \ + $(pnmtops_nosetpage) -noturn -rle >$@ ; \ + fi + +examples/stamp: + test -d examples || $(mkinstalldirs) examples + touch $@ + +stamp-strip: $(STRIPFILES) + for f in $(STRIPFILES); do \ + rm -f $$f-s; \ + sed -f $(top_srcdir)/tmac/strip.sed $(srcdir)/$$f >$$f-s; \ + done + touch $@ + +install_data: $(STRIPFILES) $(EXAMPLEFILES) $(GENFILES) \ + $(PROCESSEDEXAMPLEFILES) gnu.eps stamp-strip + -test -d $(DESTDIR)$(tmacdir) || $(mkinstalldirs) $(DESTDIR)$(tmacdir) + for f in $(STRIPFILES); do \ + rm -f $(DESTDIR)$(tmacdir)/$$f; \ + $(INSTALL_DATA) $$f-s $(DESTDIR)$(tmacdir)/$$f; \ + done + -test -d $(DESTDIR)$(exampledir)/hdtbl \ + || $(mkinstalldirs) $(DESTDIR)$(exampledir)/hdtbl + for f in $(EXAMPLEFILES_); do \ + rm -f $(DESTDIR)$(exampledir)/hdtbl/$$f; \ + $(INSTALL_DATA) $(srcdir)/examples/$$f \ + $(DESTDIR)$(exampledir)/hdtbl/$$f; \ + done + for f in $(PROCESSEDEXAMPLEFILES_) $(GENFILES_); do \ + rm -f $(DESTDIR)$(exampledir)/hdtbl/$$f; \ + $(INSTALL_DATA) examples/$$f $(DESTDIR)$(exampledir)/hdtbl/$$f; \ + done + $(INSTALL_DATA) gnu.eps $(DESTDIR)$(exampledir)/hdtbl/gnu.eps + +uninstall_sub: + -for f in $(STRIPFILES); do \ + rm -f $(DESTDIR)$(tmacdir)/$$f; \ + done + -for f in $(EXAMPLEFILES_) $(PROCESSEDEXAMPLEFILES_) \ + $(GENFILES_); do \ + rm -f $(DESTDIR)$(exampledir)/hdtbl/$$f; \ + done + -rm $(DESTDIR)$(exampledir)/hdtbl/gnu.eps + -rmdir $(DESTDIR)$(exampledir)/hdtbl diff --git a/contrib/groff/contrib/hdtbl/TODO b/contrib/groff/contrib/hdtbl/TODO new file mode 100644 index 0000000000..a3684e54fb --- /dev/null +++ b/contrib/groff/contrib/hdtbl/TODO @@ -0,0 +1,21 @@ +TODO +---- + +* Macro TOTC (Table Of Table Captions). + +* Automatic recognition of the number of columns. + +* Optional automatic calculation of the cell widths from the widths of the + first line of the cell content instead of the explicit specification with + the width argument. This seems to be non-trivial without a preprocessor + or additional external calls via .sy or .pso. + +* Handling of pagebreaks in tables. + +* Floating text left and/or right from tables. + +* Converter hdtbl2html (awk, elisp, perl?); should be easy to write. + +* Support for nroff. + +* Support for -Thtml. diff --git a/contrib/groff/contrib/hdtbl/examples/chess_board.roff b/contrib/groff/contrib/hdtbl/examples/chess_board.roff new file mode 100644 index 0000000000..9274f17f30 --- /dev/null +++ b/contrib/groff/contrib/hdtbl/examples/chess_board.roff @@ -0,0 +1,61 @@ +.\" -*- mode: roff -*- +.ig + +chess_board.roff + +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +written by Joachim Walsdorff . + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +groff is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +.. +. +.time start +.nr *x 8 +.de r1 +.TR height=1.6c +.TD hl= val=m hal=r \\\\n(*x +.PN 4 ".TD bgc=wheat" ".TD bgc=tan3" +.TD hl= val=m hal=l \\\\n(*x +.nr *x -1 +.. +.de r2 +.TR height=1.6c +.TD hl= val=m hal=r \\\\n(*x +.PN 4 ".TD bgc=tan3" ".TD bgc=wheat" +.TD hl= val=m hal=l \\\\n(*x +.nr *x -1 +.. +.af *y a +.H Chessboard +.TBL border=0 csp=.05n bgc= cols=10 width=1.6c tal=c +.TR vl= hal=c\" height=1c +.TD hl= +.nr *y 0 +.PN 8 .TD ".nr *y +1" \\\\n(*y +.TD hl= +.PN 4 .r1 .r2 +.TR vl= hal=c +.TD +.nr *y 0 +.PN 8 .TD ".nr *y +1" \\\\n(*y +.TD +.ETB +.time +.\" 466MHz Celeron CPU, 384MB RAM +.\" WindowsXP/cygwin groff18.1: 1s +.\" WindowsXP/cygwin groff19.2: 4s +.\" Suse Linux 9.3 groff19.2: 1s diff --git a/contrib/groff/contrib/hdtbl/examples/col_rowspan_colors.roff b/contrib/groff/contrib/hdtbl/examples/col_rowspan_colors.roff new file mode 100644 index 0000000000..43aa40ce33 --- /dev/null +++ b/contrib/groff/contrib/hdtbl/examples/col_rowspan_colors.roff @@ -0,0 +1,79 @@ +.\" -*- mode: roff -*- +.ig + +col_rowspan_colors.roff + +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +written by Joachim Walsdorff . + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +groff is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +.. +. +.time start +.de color# +.nr # +1 +.random# +.defcolor c\\n# rgb \\*[#random] +.. +. +.de brt +.nr # 0 +.color# +.if \\n[t*cols\\n[t*#]]/2*2=\\n[t*cols\\n[t*#]] \{ . +. tmc \\n(.F:\\n(.c: cols was even (\\n[t*cols\\n[t*#]]), +. nr t*cols\\n[t*#] +1 +. tm increased by one col to \\n[t*cols\\n[t*#]]. +. t*cl \\*[width] +. ie "\\*[tal]"r" .nr in\\n[t*#] -\\*[width]\" recalculate cell widths etc. +. el .if "\\*[tal]"c" .nr in\\n[t*#] -\\*[width]/2 +.\} +.nr N \\n[t*cols\\n[t*#]]-1 \" N must be even +.nr W 1c\"\\*[width] +.ds html "".TR height=\\nW" ".TD bgc=c\\n#" +.nr I 0 2 +.while \\nN>=\\n+I \{ . +. ds help "\\*[html] +. pops * help +. color# +. ds html "".TR height=\\nW" ".TD colspan=\\nI bgc=c\\n#" +. color# +. as html " ".TD rowspan=\\nI bgc=c\\n#" +. color# +. as html " ".TR height=\\nW" ".TD rowspan=\\nI bgc=c\\n#" +. color# +. as html " \\*[help] ".TR height=\\nW" ".TD colspan=\\nI bgc=c\\n#" +.\} +.P1 \\*[html] +.. +. +.pv 1.2 1.2 "" x +.PN 10 Text before table. +.in 1c +.PN 8 Indented text before table. +*** *** *** +.TBL width=90% border=1n csp=1n cpd=1n bgc=wheat tal=c .TR .TD +.TBL border= cols=10 width=1c tal=c csp=0 cpd=0 \"cols must be odd +.CPTN val=b Randomly Colored Table Cells with Colspan/\%Rowspan +.brt +.ETB .ETB +.PN 15 Text after table. +.time +.date +.\" 466MHz Celeron CPU, 384MB RAM +.\" WindowsXP/cygwin groff18.1: 4s +.\" WindowsXP/cygwin groff19.2: 7s +.\" Suse Linux 9.3 groff19.2: 1s diff --git a/contrib/groff/contrib/hdtbl/examples/color_boxes.roff b/contrib/groff/contrib/hdtbl/examples/color_boxes.roff new file mode 100644 index 0000000000..77a158e792 --- /dev/null +++ b/contrib/groff/contrib/hdtbl/examples/color_boxes.roff @@ -0,0 +1,47 @@ +.\" -*- mode: roff -*- +.ig + +color_boxes.roff + +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +written by Joachim Walsdorff . + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +groff is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +.. +. +.time start +.H Horizontal Rules and Boxes .br with Randomly Colored Border and Background +.PN 25 Text before horizontal rule. +.TBL border=.5n bc=green bgc=red width=7c tal=c csp=.2n cpd=.3n .TR .TD .ETB +.PN 10 Text after horizontal rule and before table. +.de ctab +.nr ? 0 1 +.PN 5 .random# ".defcolor color\En+? rgb \E*[#random]" +.TD ".TBL border=1c bc=color1 csp=0 cpd=0 height=3c bgc=color2" .TR .TD .ETB +.. +. +.TBL tal=c border= csp=0 cpd=0 cols=5 width=3c +.PN 2 .TR ".PN 5 .ctab" +.ETB +.PN 15 Text after table. +.TBL border=.5n bc=color1 bgc=color2 width=15c tal=c csp=.2n cpd=.3n .TR .TD .ETB +.PN 25 Text after horizontal rule. +.time +.\" 466MHz Celeron CPU, 384MB RAM +.\" WindowsXP/cygwin groff18.1: 10s +.\" WindowsXP/cygwin groff19.2: 14s +.\" Suse Linux 9.3 groff19.2: 1s diff --git a/contrib/groff/contrib/hdtbl/examples/color_nested_tables.roff b/contrib/groff/contrib/hdtbl/examples/color_nested_tables.roff new file mode 100644 index 0000000000..db2f8b5428 --- /dev/null +++ b/contrib/groff/contrib/hdtbl/examples/color_nested_tables.roff @@ -0,0 +1,51 @@ +.\" -*- mode: roff -*- +.ig + +color_nested_tables.roff + +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +written by Joachim Walsdorff . + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +groff is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +.. +. +.time start +.PN 15 Text before first table. +.nr # 0 1 +***** +.PN 39 .random# ".defcolor c\\n[#] rgb \\\\*[#random] " \ +".TBL csp=0 cpd=0 border=1n bc=c\\n[#]" \ +".if \\\\n+#=1 .CPTN val=b Nested Tables with Randomly Colored Border" \ +.TR .TD +.PN 39 .ETB +.PN 15 Text after first table. +.time +.time start +.PN 15 Text before second table. +***** +.nr # 0 1 +.PN 39 .random# ".defcolor c\\n[#] rgb \\\\*[#random] " \ +".TBL csp=0 cpd=1n border= bgc=c\\n[#]" \ +".if \\\\n+#=1 .CPTN val=b Nested Tables with Randomly Colored Background" \ +.TR .TD +.PN 39 .ETB +.PN 25 Text after second table. +.time +.\" 466MHz Celeron CPU, 384MB RAM +.\" WindowsXP/cygwin groff18.1: 9/9s +.\" WindowsXP/cygwin groff19.2: 14/14s +.\" Suse Linux 9.3 groff19.2: 1/1s diff --git a/contrib/groff/contrib/hdtbl/examples/color_table_cells.roff b/contrib/groff/contrib/hdtbl/examples/color_table_cells.roff new file mode 100644 index 0000000000..03c4d70e3f --- /dev/null +++ b/contrib/groff/contrib/hdtbl/examples/color_table_cells.roff @@ -0,0 +1,47 @@ +.\" -*- mode: roff -*- +.ig + +color_table_cells.roff + +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +written by Joachim Walsdorff . + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +groff is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +.. +. +.time start +.H Horizontal Rules and Randomly Colored Table Cells +.PN 15 Text before HR. +.TBL border=.5n bc=green bgc=red width=7c tal=c csp=.2n cpd=.3n .TR .TD .ETB +.PN 10 Text after HR and before Table. +. +.nr ? 0 1 +.de ctab +.TR height=\nl/10 +.PN 8 .random# ".defcolor c\\\\n+? rgb \E*[#random]" ".TD bgc=c\\\\n?" +.. +.TBL tal=c border= csp=0 cpd=0 cols=8 width=\nl/10 +.PN 8 .ctab +.ETB +.PN 10 Text after table. +.TBL border=.5n bc=c1 bgc=c2 width=15c tal=c csp=.2n cpd=.3n .TR .TD .ETB +.PN 15 Text after HR. +.time +.\" 466MHz Celeron CPU, 384MB RAM +.\" WindowsXP/cygwin groff18.1: 14s +.\" WindowsXP/cygwin groff19.2: 18s +.\" Suse Linux 9.3 groff19.2: 1s diff --git a/contrib/groff/contrib/hdtbl/examples/color_transitions.roff b/contrib/groff/contrib/hdtbl/examples/color_transitions.roff new file mode 100644 index 0000000000..9bad16139e --- /dev/null +++ b/contrib/groff/contrib/hdtbl/examples/color_transitions.roff @@ -0,0 +1,54 @@ +.\" -*- mode: roff -*- +.ig + +color_transitions.roff + +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +written by Joachim Walsdorff . + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +groff is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +.. +. +.time start +.de ctab +.nr #cc 0 +.PN 21 ".nr #cc +.05f" ".defcolor \En[t*#] rgb \\$1 \\$2 \\$3" ".TBL border= csp=0 cpd=.5n bgc=\\\\n[t*#] bc=" .TR .TD +.PN 21 .ETB +.. +.PN 30 Before table. +.TBL cols=3 width=33% border= csp=0 cpd=0 bgc= +.CPTN val=b Color Transitions +.TR +.TD ".ctab 0+\En[#cc]u \En[#cc]u \En[#cc]u" \" black -> white +.TD ".ctab 1f-\En[#cc]u 1f-\En[#cc]u 1f-\En[#cc]u"\" white -> black +.TD ".ctab 1f \En[#cc]u \En[#cc]u" \" red -> white +.TR +.TD ".ctab 0 1f-\En[#cc]u \En[#cc]u" \" green -> blue +.TD ".ctab 1f 1f-\En[#cc]u 1f" \" white -> magenta +.TD ".ctab 1f \En[#cc]u 1f" \" magenta -> white +.TR +.TD ".ctab 0+\En[#cc]u \En[#cc]u 1f-\En[#cc]u" \" blue -> yellow +.TD ".ctab 1f-\En[#cc]u 1f-\En[#cc]u \En[#cc]u" \" yellow -> blue +.TD ".ctab 1f 0+\En[#cc]u 0" \" red -> yellow +.xTD ".ctab 0+\En[#cc]u 1f-\En[#cc]u 1f-\En[#cc]u"\" cyan -> red +.ETB +.PN 30 After table. +.time +.\" 466MHz Celeron CPU, 384MB RAM +.\" WindowsXP/cygwin groff18.1: 3s +.\" WindowsXP/cygwin groff19.2: 20s +.\" Suse Linux 9.3 groff19.2 3s diff --git a/contrib/groff/contrib/hdtbl/examples/fonts_n.in b/contrib/groff/contrib/hdtbl/examples/fonts_n.in new file mode 100644 index 0000000000..d11a84bb99 --- /dev/null +++ b/contrib/groff/contrib/hdtbl/examples/fonts_n.in @@ -0,0 +1,145 @@ +.\" -*- mode: roff -*- +.ig + +font_n.roff + +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +written by Joachim Walsdorff . + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +groff is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +.. +. +. +.\" ****************************************************************** +.\" ** groff glyphs vs. character codes: ** +.\" ** .fontdump [font1 font2 ...] ** +.\" ** Print glyphs of font1, font2, ..., versus ** +.\" ** character code. ** +.\" ** `all' as fontname prints all fonts in the ** +.\" ** specified string `fontpath'. ** +.\" ** without arg: glyphs and codes of active font. ** +.\" ****************************************************************** +. +.time start +. +.if !d fontpath \ +. ds fontpath @fontdir@ +. +.de fontdump +. ie \\n[.$] \ +. ds *args \\$* +. el \ +. ds *args \\n[.fn] +. +. pso bash -c \ + "echo -n .ds *f\ ; \ + ls \\*[fontpath]/dev\*[.T] \ + | tr '[:cntrl:]' ' '" +. \" This dummy line is necessary; the preceding line eats it. +. +. while !"\\*[*args]"" \{\ +. pops *$1 *args +. +. if "\\*[*$1]"all" \{\ +. ds *args \\*[*f] \\*[*args] +. pops *$1 *args +. nr *all 1 +. \} +. +. if \\n[*all] \{\ +. if "\\*[*$1]"." \ +. nr *all 0 +. if !F \\*[*$1] \ +. continue +. \} +. +. index "\\*[*f]" \\*[*$1] +. +. ie (\\n[.y] > 18) \ +. if !F \\*[*$1] \{\ +. tm \\n[.F]:\\n[.c]: Font \\*[*$1] not found. +. continue +. \} +. el \{\ +. if !\\n[index] \{\ +. tm \\n[.F]:\\n[.c]: Font \\*[*$1] not found. +. continue +. \} +. +. nr * \\n[.f] +. ft \\*[*$1] +. nr ** \\n[.f] +. ft +. +. if (\\n[**] == \\n[*]) \ +. continue +. \} +. +. if \\n[t*cptn] \ +. bp +. +. tm listing font `\\*[*$1]'... +. +. TBL border=.1n bc=red cpd=0 csp=.1n bgc= +. CPTN groff font \\*[*$1] \ + .br \ + val=b ".pso grep -e internalname \\*[fontpath]/dev\*[.T]/\\*[*$1]" +. TR +. TD +. TBL cols=12 border=.1n bc=red csp=.1n cpd=.2n fgc=red4 bgc=beige \ + hal=c fsz='1.2 1.2' fst=\\*[*$1] +. nr c# 0-1 1 +. nr y# 0-1 1 +. TR fst=HB fgc=blue +. TD +. nr x# 0-1 1 +. \" following 4 `PN's instead of 4 while-loops as in +. \" font_x.roff; short and easy to write, but a little +. \" bit slower. +. PN 10 .TD \ + \&..\\\\n+[x#] +. TD +. +. PN 27 .TR \ + ".TD fgc=blue fst=HB" \ + \\\\n+[y#]. \ + ".PN 10 .TD \ + "".if c \N'\En+[c#]' \ + \N'\En[c#]'""" \ + ".TD fgc=blue fst=HB" \ + \\\\n[y#]. +. +. TR fst=HB fgc=blue +. TD +. nr x# 0-1 1 +. PN 10 .TD \ + \&..\\\\n+[x#] +. TD +. ETB +. ETB +. \} +.. +. +.fontdump all +. +.time +.date +. +.\" 466MHz Celeron CPU, 384MB RAM +.\" WindowsXP/cygwin groff18.1: 115s +.\" WindowsXP/cygwin groff19.2: 450s +.\" Suse Linux 9.3 groff19.2: 76s diff --git a/contrib/groff/contrib/hdtbl/examples/fonts_x.in b/contrib/groff/contrib/hdtbl/examples/fonts_x.in new file mode 100644 index 0000000000..fa5345755d --- /dev/null +++ b/contrib/groff/contrib/hdtbl/examples/fonts_x.in @@ -0,0 +1,156 @@ +.\" -*- mode: roff -*- +.ig + +font_x.roff + +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +written by Joachim Walsdorff . + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +groff is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +.. +. +. +.\" ****************************************************************** +.\" ** groff glyphs vs. character codes: ** +.\" ** .fontdump [font1 font2 ...] ** +.\" ** Print glyphs of font1, font2, ..., versus ** +.\" ** character code. ** +.\" ** `all' as fontname prints all fonts in the ** +.\" ** specified string `fontpath'. ** +.\" ** without arg: glyphs and codes of active font. ** +.\" ****************************************************************** +. +.time start +. +.if !d fontpath \ +. ds fontpath @fontdir@ +. +.de fontdump +. ie \\n[.$] \ +. ds *args \\$* +. el \ +. ds *args \\n[.fn] +. +. pso bash -c \ + "echo -n .ds *f\ ; \ + ls \\*[fontpath]/dev\*[.T] \ + | tr '[:cntrl:]' ' '" +. \" This dummy line is necessary; the preceding line eats it. +. +. while !"\\*[*args]"" \{\ +. pops *$1 *args +. +. if "\\*[*$1]"all" \{\ +. ds *args \\*[*f] \\*[*args] +. pops *$1 *args +. nr *all 1 +. \} +. +. if \\n[*all] \{\ +. if "\\*[*$1]"." \ +. nr *all 0 +. if !F \\*[*$1] \ +. continue +. \} +. +. index "\\*[*f]" \\*[*$1] +. +. ie (\\n[.y] > 18) \ +. if !F \\*[*$1] \{\ +. tm \\n[.F]:\\n[.c]: Font \\*[*$1] not found. +. continue +. \} +. el \{\ +. if !\\n[index] \{\ +. tm \\n[.F]:\\n[.c]: Font \\*[*$1] not found. +. continue +. \} +. +. nr * \\n[.f] +. ft \\*[*$1] +. nr ** \\n[.f] +. ft +. +. if (\\n[**] == \\n[*]) \ +. continue +. \} +. +. if \\n[t*cptn] \ +. bp +. +. tm listing font `\\*[*$1]'... +. +. TBL border=.1n bc=red cpd=0 csp=.1n bgc= +. CPTN groff font \\*[*$1] \ + .br \ + val=b ".pso grep -e internalname \\*[fontpath]/dev\*[.T]/\\*[*$1]" +. TR +. TD +. TBL cols=18 border=.1n bc=red csp=.1n cpd=.2n fgc=red4 bgc=beige \ + hal=c fsz='1.2 1.7' fst=\\*[*$1] +. nr c# 0-1 1 +. nr y# 0 1 +. TR fst=HB fgc=blue +. TD +. nr x# 0-1 1 +. while (\\n+[x#] < 16) \{\ +. d2x \\n[x#] +. TD +. nop \&.\\*[hex#] +. \} +. TD +. +. nr y# -1 +. while (\\n+[y#] < 17) \{\ +. TR +. TD fgc=blue fst=HB +. d2x \\n[y#] +. nop \\*[hex#]. +. nr x# 0-1 1 +. while (\\n+[x#] < 16) \{\ +. TD +. if c \N'\\n+[c#]' \ +. nop \N'\\n[c#]' +. \} +. TD fgc=blue fst=HB +. d2x \\n[y#] +. nop \\*[hex#]. +. \} +. +. TR fst=HB fgc=blue +. TD +. nr x# 0-1 1 +. while (\\n+[x#] < 16) \{\ +. d2x \\n[x#] +. TD +. nop \&..\\*[hex#] +. \} +. TD +. ETB +. ETB +. \} +.. +. +.fontdump all +. +.time +.date +. +.\" 466MHz Celeron CPU, 384MB RAM +.\" WindowsXP/cygwin groff18.1: 107s +.\" WindowsXP/cygwin groff19.2: 390s +.\" Suse Linux 9.3 groff19.2: 66s diff --git a/contrib/groff/contrib/hdtbl/examples/mixed_pickles.roff b/contrib/groff/contrib/hdtbl/examples/mixed_pickles.roff new file mode 100644 index 0000000000..df3d776c43 --- /dev/null +++ b/contrib/groff/contrib/hdtbl/examples/mixed_pickles.roff @@ -0,0 +1,99 @@ +.\" -*- mode: roff -*- +.ig + +mixed_pickles.roff + +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +written by Joachim Walsdorff . + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +groff is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +.. +. +.time start +. +.H Table with Mixed Content: \ + .br \ + EPS Image, eqn Equation, tbl Table, and pic Picture +. +Call groff with options \-t, \-e, and \-p! +. +.TBL width=90% tal=c csp=.2n cpd=0 +. TR +. TD +. TBL width='25% 75%' csp=.5n cpd=.5n hal=c +. TR +. TD hl=d vl=d rowspan=2 bgc=red4 fgc=linen fsz=1.2 fst=HB val=m +. PSPIC -I -\\n[.l]u gnu.eps +. sp .5 +. nop eps image with \fI.PSPIC\fP +. TD bgc=linen +. +.EQ +int from 0 to 1 {( ln x ) sup 2} over {sqrt {1 - x sup 2}} dx approx 0.245 +.EN +. +. nop \0\0\0\0\0equation with \fIeqn\fP +. +. TR +. TD hl=d +. +.TS +tab(@), center, doublebox, nospaces; +c c c | c c c +r rI lB | r rI lB. +Bit @ Code @ Warning @ Bit @ Code @ Warning += +0 @ 1 @ char @ 10 @ 1024 @ reg +1 @ 2 @ number @ 11 @ 2048 @ tab +2 @ 4 @ break @ 12 @ 4096 @ right-brace +3 @ 8 @ delim @ 13 @ 8192 @ missing +4 @ 16 @ el @ 14 @ 16384 @ input +5 @ 32 @ scale @ 15 @ 32768 @ escape +6 @ 64 @ range @ 16 @ 65536 @ space +7 @ 128 @ syntax @ 17 @ 131072 @ font +8 @ 256 @ di @ 18 @ 262144 @ ig +9 @ 512 @ mac @ 19 @ 524288 @ color +.TE +. +. sp .5 +. nop table with \fItbl\fP +. TR +. TD colspan=2 bgc=azure2 fgc=blue4 +. +.PS +ellipse "document"; +arrow 0.42; +box width 0.6 "\fIgpic\/\fP(1)" +arrow 0.42; +box width 1.25 "\fIgtbl\/\fP(1) or \fIgeqn\/\fP(1)" "(optional)" dashed; +arrow 0.42; +box width 0.65 "\fIgtroff\/\fP(1)"; +arrow 0.42; +ellipse "PostScript" +.PE +. +. sp .5 +. nop picture with \fIpic\fP +. ETB +.ETB +. +.time +. +.\" 466MHz Celeron CPU, 384MB RAM +.\" WindowsXP/cygwin groff18.1: 1s +.\" WindowsXP/cygwin groff19.2: 2s +.\" Suse Linux 9.3 groff19.2: 1s diff --git a/contrib/groff/contrib/hdtbl/examples/rainbow.roff b/contrib/groff/contrib/hdtbl/examples/rainbow.roff new file mode 100644 index 0000000000..451efe827c --- /dev/null +++ b/contrib/groff/contrib/hdtbl/examples/rainbow.roff @@ -0,0 +1,89 @@ +.\" -*- mode: roff -*- +.ig + +rainbow.roff + +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +written by Joachim Walsdorff . + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +groff is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +.. +. +.time start +. +.nr *n 25 +.nr *# 0 1 +. +.de ctab +. nr #cc 0 +. PN \\$1 \ + ".nr #cc +(1f / \\$1)" \ + ".defcolor \En[t*#] rgb \\$2 \\$3 \\$4" \ + ".TBL csp=\n[l]/(12*\\$1+2) border= cpd=0 bgc=\\\\n[t*#] bc=" \ + ".if (\\\\n+[*#] == 1) \ + .CPTN Rainbow Colors \[em] Nested Tables with Colored Backgrounds \ + val=b" \ + .TR \ + .TD +.. +. +.ctab \n[*n] 1 0 \En[#cc]u \" rot -> magenta +.ctab \n[*n] 1-\En[#cc]u 0 1 \" magenta -> blue +.ctab \n[*n] 0 \En[#cc]u 1 \" blue -> cyan +.ctab \n[*n] 0 1 1-\En[#cc]u \" cyan -> green +.ctab \n[*n] \En[#cc]u 1 0 \" green -> yellow +.ctab \n[*n] 1 1-\En[#cc]u 0 \" yellow -> red +. +.PN 6*\n[*n] .ETB +. +.time end +. +.bp +. +.time start +. +.nr *n 25 +.nr *# 0 1 +. +.de ctab +. nr #cc 0 +. PN \\$1 \ + ".nr #cc +(1f / \\$1)" \ + ".defcolor \En[t*#] rgb \\$2 \\$3 \\$4" \ + ".TBL border=\n[l]/(12*\\$1+2) csp=0 cpd=0 bc=\\\\n[t*#] bgc=" \ + ".if (\\\\n+[*#] == 1) \ + .CPTN Rainbow Colors \[em] Nested Tables with Colored Borders \ + val=b" \ + .TR \ + .TD +.. +. +.ctab \n[*n] 1 \En[#cc]u 0 \" red -> yellow +.ctab \n[*n] 1-\En[#cc]u 1 0 \" yellow -> green +.ctab \n[*n] 0 1 \En[#cc]u \" green -> cyan +.ctab \n[*n] 0 1-\En[#cc]u 1 \" cyan -> blue +.ctab \n[*n] \En[#cc]u 0 1 \" blue -> magenta +.ctab \n[*n] 1 0 1-\En[#cc]u \" magenta -> red +. +.PN 6*\n[*n] .ETB +. +.time end +. +.\" 466MHz Celeron CPU, 384MB RAM +.\" WindowsXP/cygwin groff18.1: 11/10s +.\" WindowsXP/cygwin groff19.2: 57/55s +.\" Suse Linux 9.3 groff19.2: 8/8s diff --git a/contrib/groff/contrib/hdtbl/examples/short_reference.roff b/contrib/groff/contrib/hdtbl/examples/short_reference.roff new file mode 100644 index 0000000000..7e18db9dc3 --- /dev/null +++ b/contrib/groff/contrib/hdtbl/examples/short_reference.roff @@ -0,0 +1,78 @@ +.\" -*- mode: roff -*- +.ig + +short_reference.roff + +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +written by Joachim Walsdorff . + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +groff is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +.. +. +.time start +.pv 1.2 1.2 "" x +.H Short Reference for the HDtbl-Macros +This Short Reference describes the Heidelberger Table Macros +using the macros themselves. +.br +.nr t*csp .3n +.nr t*cpd .3n +.ds t*ff HN +.ds t*val m +.ds t*hal l +.xig +.TBL "width=10% 40% 25% 25%" border= "fsz=1 .8" +.CPTN Base- Optional- and Utility-Macros val=b +.TR +.TH Macro .TH Description .TH Predecessors .TH Successors +.TR +.TD \&.TBL .TD Begin a new table .TD \&.TD \&.TH \%.ETB cell content +.TD \&.CPTN \&.TR +.TR +.TD \&.CPTN .TD Optional numbered or unnumbered table caption +.TD \&.TBL .TD \&.TR +.TR +.TD \&.TR .TD Begin a new table row .TD \&.TBL \&.CPTN cell content +.TD \&.TD \&.TR +.TR +.TD \&.TH .TD Optional begin table header cell +.TD \&.TR \&.TD \&.TH \%.ETB cell content +.TD \&.TD \&.TH \&.TR \%.ETB cell content +.TR +.TD \&.TH .TD Begin table data cell .TD \&.TR \&.TD \&.TH \%.ETB cell content +.TD \&.TD \&.TH \&.TR \%.ETB cell content +.TR +.TD \&.ETB .TD Finish and print table .TD \&.TD \&.TH \%.ETB cell content +.TD \&.TBL \&.TR \&.TD \&.TH \%.ETB cell content +.TR +.TD \&.t*free +.TD colspan=3 val=t Utility macro to free held tables. Use it outside any table. +.ETB +.bp +.x. +.TBL "fsz=1 .8" "width=20% 32% 8% 8% 8% 8% 8% 8%" border= +.TR +.TH Argument .TH Value .TH \&.TBL .TH \&.CPT .TH \&.TR .TH \&.TH .TH \&.TD .TH \&.ETB +.TR +.TD border=\fI[n]\fP +.TD border thickness .TD .ce X .TD .TD .TD .TD .TD +.TR +.TD bc=\fI[c]\fP +.TD color of border and cellseperatorlines .TD .ce X .TD .TD .ce X .TD .ce X .TD .ce X .TD +.ETB +.H ------ incomplete ------- +.time end diff --git a/contrib/groff/contrib/hdtbl/groff_hdtbl.man b/contrib/groff/contrib/hdtbl/groff_hdtbl.man new file mode 100644 index 0000000000..6cc67d2fa8 --- /dev/null +++ b/contrib/groff/contrib/hdtbl/groff_hdtbl.man @@ -0,0 +1,950 @@ +.ig +Copyright (C) 2005, 2006, 2008, 2009 + Free Software Foundation, Inc. + +Written by Joachim Walsdorff + +This file is part of groff, the groff. + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with the +Invariant Sections being this .ig-section and AUTHORS, with no +Front-Cover Texts, and with no Back-Cover Texts. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +.. +. +. +. +.TH GROFF_HDTBL @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@" +. +. +.SH NAME +groff_hdtbl \- groff `hdtbl' macros for generation of tables +. +. +.ig + Some simple formatting macros. Note that we use `.ig' here and not a + comment to make `mandb' 2.4.1 (and probably more recent versions also) + happy; otherwise the `.char' lines and the stuff which follows is included + in the `whatis' database. +.. +. +. +.char \[lB] \F[\n[.fam]]\f[R][ +.char \[rB] \F[\n[.fam]]\f[R]] +. +.char \[or] \F[\n[.fam]]\f[R]\||\| +.char \[ell] \F[\n[.fam]]\f[R].\|.\|. +. +.char \[oq] \F[\n[.fam]]\f[R]\[oq] +.char \[cq] \F[\n[.fam]]\f[R]\[cq] +. +. +.ie F CR \{\ +. +. \" We have to solve the following problem. In this code +. \" +. \" foo +. \" .CR bar +. \" foo +. \" +. \" the space immediately after `bar' should not be taken from the `C' +. \" family. At the same time, this +. \" +. \" foo +. \" .CR bar\c +. \" foo +. \" +. \" should work also. To fulfill both constraints we emit the +. \" family changing commands both as escapes and macro calls. +. +. de make-C-macro +. de C\\$1 +. ds old-fam \\\\n[.fam] +. fam C +. \\$2 \&\\\\$*\F[]\F[\\\\*[old-fam]] +. fam +\\.. +. . +. +. make-C-macro R nop +. make-C-macro B B +. make-C-macro I I +. +. de make-C-macro +. de C\\$1 +. ds old-fam \\\\n[.fam] +. fam C +. \\$1 \\\\$@ \F[]\F[\\\\*[old-fam]] +. fam +\\.. +. . +. +. make-C-macro BI +. make-C-macro IB +. make-C-macro RI +. make-C-macro IR +. make-C-macro BR +. make-C-macro RB +.\} +.el \{\ +. ftr CR R +. ftr CI I +. ftr CB B +. ftr CBI BI +. +. de CR +. nop \&\\$* +. . +. als CB B +. als CI I +. +. als CBI BI +. als CIB IB +. als CRI RI +. als CIR IR +. als CBR BR +. als CRB RB +.\} +. +. +.de TQ +. br +. ns +. TP +.. +. +. +.de XB +. B "\\$1" +. shift +. CR "\\$1\c" +. shift +. while \\n[.$] \{\ +. nop , +. CR "\\$1\c" +. shift +. \} +. br +.. +. +. +.de XAA +. TQ +. CRI \\$@ +.. +. +. +.de XDEF +. br +. B Default: +. if !\\n[.$] \ +. return +. CRI "\\$1" "\\$2" +.. +. +. +.de XDEFR +. br +. B Default: +. CR "\[oq]\\$1\[cq]" +. nop (register +. CR "\[oq]\\$2\[cq]\c" +. nop ). +.. +. +. +.de XDEFS +. br +. B Default: +. CR "\[oq]\\$1\[cq]" +. nop (string +. CR "\[oq]\\$2\[cq]\c" +. nop ). +.. +. +. +. +.SH DESCRIPTION +. +The +.B hdtbl +macros consist of four base and three optional macros, controlled by about +twenty arguments. +. +The syntax is simple and similar to the +.B HTML +table model and nearly as flexible: You can write sequences of tokens (macro +calls with their arguments and content data), separated by blanks and +beginning with a macro call, into the same line to get compact and cleanly +arrranged input. +. +An advantage of +.B hdtbl +is that the tables are constructed without calling a preprocessor; this +means that +.BR groff 's +full macro capabilities are available. +. +On the other hand, table processing with +.B hdtbl +is much slower than using the +.BR tbl (@MAN1EXT) +preprocessor. +. +A further advantage is that the HTML-like syntax of +.B hdtbl +will be easily converted to HTML; this is not implemented yet. +. +. +.SH USAGE +. +The simplest well-formed table consists of just single calls to the four +base table macros in the right order. +. +Here we construct a table with only one cell. +. +.PP +.RS +.nf +.CR .TBL +.CR .TR +.CR .TD +.CI contents of the table cell +.CR .ETB +.fi +.RE +. +.PP +Equivalent to the above is the following notation. +. +.PP +.RS +.CRI ".TBL .TR .TD " "contents of the table cell" " .ETB" +.RE +. +.PP +By default, the formatted table is inserted into the surrounding text at the +place of its definition. +. +If the vertical space isn't sufficient, it is placed at the top of the next +page. +. +Tables can also be stored for later insertion. +. +.PP +Using +.CIR \[oq]row-number * column-number\[cq] +as the data for the table cells, a table with two rows and two columns can +be written as +. +.PP +.RS +.nf +.CR ".TBL cols=2" +.CR ". TR .TD 1*1 .TD 1*2" +.CR ". TR .TD 2*1 .TD 2*2" +.CR ".ETB" +.fi +.RE +. +.PP +Here we see a difference to HTML tables: The number of columns must be +explicitly specified using the +.CRI \[oq]cols= m\[cq] +argument (or indirectly via the +.CR \[oq]width\[cq] +argument, see below). +. +.PP +The contents of a table cell is arbitrary; for example, it can be another +table, without restriction to the nesting depth. +. +A given table layout can be either constructed with suitably nested tables +or with proper arguments to +.CR .TD +and +.CR .TH\c +, controlling column and row spanning. +. +Note, however, that this table +. +.PP +.RS +.nf +.CR ".TBL" +.CR ". TR" +.CR ". TD" +.CR ". nop 1*1 1*2" +.CR ". TR" +.CR ". TD" +.CR ". TBL cols=2 border=" +.CR ". TR" +.CR ". TD" +.CR ". nop 2*1" +.CR ". TD" +.CR ". nop 2*2" +.CR ". ETB" +.CR ".ETB" +.fi +.RE +. +.PP +and this table +. +.PP +.RS +.nf +.CR ".TBL cols=2" +.CR ". TR" +.CR ". TD colspan=2" +.CR ". nop 1*1 1*2" +.CR ". TR" +.CR ". TD" +.CR ". nop 2*1" +.CR ". TD" +.CR ". nop 2*2" +.CR ".ETB" +.fi +.RE +. +.PP +are similar but not identical. +. +.PP +Here the latter table in a more compact form. +. +.PP +.RS +.nf +.CR ".TBL cols=2 .TR \[dq].TD colspan=2\[dq] 1*1 1*2" +.CR ". TR .TD 2*1 .TD 2*2 .ETB" +.fi +.RE +. +.PP +If a macro has one or more arguments, and it is not starting a line, it must +be enclosed in double quotes. +. +. +.SH MACROS AND ARGUMENTS +. +The order of macro calls and other tokens follows the HTML model. +. +In the following list, valid predecessors and successors of all +.B hdtbl +macros are given, together with the possible arguments. +. +.PP +Macro arguments are separated by blanks. +. +The order of arguments is arbitrary; they are of the form +. +.PP +.RS +.CRI key= value +.RE +. +.PP +or +. +.PP +.RS +.CRI key=\[aq] "value1 \[lB]value2 \[lB]\[ell]\[rB]\[rB]" \[aq] +.RE +. +.PP +with the only exception of the optional argument of the macro +.CR .ETB\c +, which is the string +.CR \[oq]hold\[cq]\c +\&. +. +Another possible form is +. +.PP +.RS +.CRI \[dq]key= "value1 \[lB]value2 \[lB]\[ell]\[rB]\[rB]" \[dq] +.RE +. +.PP +However, this is limited to the case where the macro is the first one in the +line and not already enclosed in double quotes. +. +.PP +Argument values specified below as\~\c +.CI c +are colors predefined by +.B groff +or colors defined by the user with the +.CR .defcolor +request. +. +Argument values\~\c +.CI d +are decimal numbers with or without decimal point. +. +Argument values\~\c +.CI m +are natural numbers. +. +Argument values\~\c +.CI n +are numerical values with the usual +.B groff +scaling indicators. +. +Some of the arguments are specific to one or two macros, but most of them +can be specified with +.CR .TBL\c +, +.CR .TR\c +, +.CR .TD\c +, and +.CR .TH\ +\&. +. +These common arguments are explained in the next subsection. +. +.PP +Most of the argument default values can be changed by the user by setting +corresponding default registers or strings, as listed below. +. +.\"------------------------------------------------------------------ +. +.TP +.CBI ".TBL " \[lB]args\[rB] +Begin a new table. +. +.IP +.RS +.XB predecessor: .TD .TH .ETB "cell contents" +.XB successor: .CPTN .TR +.XB arguments: +. +.RS +.XAA border= \[lB]n\[rB] +Thickness of the surrounding box border. +. +.CR \%\[oq]border=\[cq] +(no value) means neither a surrounding box border nor any horizontal or +vertical separator lines between the table rows and cells. +. +.CR \%\[oq]border=0\[cq] +suppresses the surrounding box border, but still allows separator lines +between cells and rows. +. +.XDEFR border=.1n t*b +. +.XAA bc= c +Border color. +. +.XDEFS bc=red4 t*bc +. +.XAA cols= m +Number of table columns. +. +This argument is necessary if more than one column is in the table and no +.CR \[oq]width\[cq] +arguments are present. +. +.XDEFR cols=1 t*cols +. +.XAA cpd= n +Cell padding, i.e., the extra space between the cell space border and +the cell contents. +. +.XDEFR cpd=.5n t*cpd +. +.XAA csp= n +Cell spacing, i.e., the extra space between the table border or +vertical or horizontal lines between cells and the cellspace. +. +.XDEFR csp=.5n t*csp +. +.XAA tal=l\[or]c\[or]r +Horizontal alignment of the table, if it is smaller than the line width. +. +.CR \[oq]tal=l\[cq]\c +: left alignment. +. +.CR \[oq]tal=c\[cq]\c +: centered alignment. +. +.CR \[oq]tal=r\[cq]\c +: right alignment. +. +.XDEFR tal=l t*tal +. +.XAA "width=\[aq]" "w1 \[lB]w2 \[lB]\[ell]\[rB]\[rB]" \[aq] +Widths of table cells. +. +.CI w1\c +, +.CI w2\c +, \[ell] are either numbers of type\~\c +.CI n +or natural numbers with the pseudo-scaling indicator +.CR \[oq]%\[cq]\c +, with the meaning \[lq]percent of the actual line length (or column length +for inner tables, respectively)\[rq]. +. +If there are less width values than table columns, the last width value is +used for the remaining cells. +. +The argument +. +.RS +.IP +.CR width=\[aq]1.5i 10%\[aq] +.RE +. +.IP +for example indicates that the first column is 1.5\|inches wide; the +remaining columns take 1/10 of the column length each. +. +.XDEF +The table width equals the outer line length or column length; the columns +have equal widths. +. +.XAA height= n +Height of the table. +. +If the table with its contents is lower than\~\c +.CI n\c +, the last row is stretched to this value. +.RE +.RE +. +.\"------------------------------------------------------------------ +. +.TP +.CBI ".CPTN " \[lB]args\[rB] +Text of caption. +. +.IP +The (optionally numbered) table caption. +. +.CR .CPTN +is optional. +. +.IP +.RS +.XB predecessor: .TBL +.XB successor: .TR +.XB arguments: +. +.RS +.XAA val=t\[or]b +Vertical alignment of the table caption. +. +.CR \[oq]val=t\[cq]\c +: The caption is placed above the table. +. +.CR \[oq]val=b\[cq]\c +: The caption is placed below the table. +. +.XDEFS val=t t*cptn +.RE +.RE +. +.\"------------------------------------------------------------------ +. +.TP +.CBI ".TR " \[lB]args\[rB] +Begin a new table row. +. +.IP +.RS +.XB predecessor: .TBL .CPTN .TD .TH .ETB "cell contents" +.XB successor: .TD .TH +.XB arguments: +. +.RS +.XAA height= n +The height of the row. +. +If a cell in the row is higher than\~\c +.CI n +this value is ignored; otherwise the row height is stretched to\~\c +.CI n\c +\&. +.RE +.RE +. +.\"------------------------------------------------------------------ +. +.TP +.CBI ".TD " "\[lB]args \[lB]cell contents\[rB]\[rB]" +Begin a table data cell. +.TQ +.CBI ".TH " "\[lB]args \[lB]cell contents\[rB]\[rB]" +Begin a table header cell. +. +.IP +Arguments and cell contents can be mixed. +. +The macro +.CR .TH +is not really necessary and differs from +.CR .TD +only in three default settings, similar to the +.CR +and +.CR +HTML tags: The contents of +.CR .TH +is horizontally and vertically centered and typeset in boldface. +. +.IP +.RS +.XB predecessor: .TR .TD .TH .ETB "cell contents" +.XB successor: .TD .TH .TR .ETB "cell contents" +.XB arguments: +. +.RS +.XAA colspan= m +The width of this cell is the sum of the widths of the\~\c +.CI m +cells above and below this row. +. +.XAA rowspan= m +The height of this cell is the sum of the heights of the +.CI m +cells left and right of this column. +. +.IP +.B Remark: +Overlapping of column and row spanning, as in the following table fragment +(the overlapping happens in the second cell in the second row), is invalid +and causes incorrect results. +. +.RS +.IP +.nf +.CR ".TR .TD 1*1 \[dq].TD 1*2 rowspan=2\[dq] .TD 1*3" +.CR ".TR \[dq].TD 2*1 colspan=2\[dq] .TD 2*3" +.fi +.RE +.RE +.RE +. +.\"------------------------------------------------------------------ +. +.TP +.CB ".ETB \[lB]hold\[rB]" +End of the table. +. +.IP +This macro finishes a table. +. +It causes one of the following actions. +. +.RS +.IP \[bu] 3 +If the argument +.CR \[oq]hold\[cq] +is given, the table is held until it is freed by calling the macro +.CR .t*free\c +, which in turn prints the table immediately, either at the current position +or at the top of the next page if its height is larger than the remaining +space on the page. +. +.IP \[bu] 3 +Otherwise, if the table is higher than the remaining space on the page, +it is printed at the top of the next page. +. +.IP \[bu] 3 +If none of the two above constraints hold, the table is printed immediately +at the place of its definition. +.RE +. +.IP +.RS +.XB predecessor: .TD .TH .ETB "cell contents" +.XB successor: .TBL .TR .TD .TH .ETB "cell contents" +.XB arguments: +. +.RS +.XAA hold +Prevent the table from being printed until it is freed by calling the +macro +.CR .t*free\c +\&. +. +This argument is ignored for inner (nested) tables. +.RE +.RE +. +.\"------------------------------------------------------------------ +. +.TP +.CBI ".t*free " \[lB]n\[rB] +Free the next held table or +.CI n\c +\~held tables. +. +Call this utility macro to print tables which are held by using the +.CR \[oq]hold\[cq] +argument of the +.CR .ETB +macro. +. +. +.SS Arguments common to \f[CB].TBL\f[], \f[CB].TR\f[], \f[CB].TD\f[], and \f[CB].TH\f[] +. +The arguments described in this section can be specified with the +.CR .TBL +and +.CR .TR +macros, but they are eventually passed on to the table cells. +. +If omitted, the defaults take place, which the user can change by setting +the corresponding default registers or strings, as documented below. +. +Setting an argument with the +.CR .TBL +macro has the same effect as setting it for all rows in the table. +. +Setting an argument with a +.CR .TR +macro has the same effect as setting it for all the +.CR .TH +or +.CR .TD +macro in this row. +. +.IP +.XAA bgc= \[lB]c\[rB] +The background color of the table cells. +. +This includes the area specified with the +.CR \[oq]csp\[cq] +argument. +. +The argument +.CR \[oq]bgc=\[cq] +(no value) suppresses a background color; this makes the background +transparent. +. +.XDEFS bgc=bisque t*bgc +. +.XAA fgc= c +The foreground color of the cell contents. +. +.XDEFS fgc=red4 t*fgc +. +.XAA ff= name +The font family for the table. +. +.CI name +is one of the groff font families, for example +.CR A +for the AvantGarde fonts or +.CR HN +for Helvetica-Narrow. +. +.XDEF +The font family found before the table (string +.CR \[oq]t*ff\[cq]\c +). +. +.XAA fst= style +The font style for the table. +. +One of +.CR R\c +, +.CR I\c +, +.CR B\c +, or +.CR BI +for roman, +.BR bold , +.IR italic , +or \f[BI]bold italic\f[], respectively. +. +As with +.BR roff 's +.CR .ft +request the +.CR \[oq]fst\[cq] +argument can be used to specify the font family and font style together, for +example +.CR \[oq]fst=HNBI\[cq] +instead of +.CR \[oq]ff=HN\[cq] +and +.CR \[oq]fst=BI\[cq]\c +\&. +. +.XDEF +The font style in use right before the table (string +.CR \[oq]t*fst\[cq]\c +). +. +.XAA "fsz=\[aq]" "d1 \[lB]d2\[rB]" \[aq] +A decimal or fractional factor +.CI d1\c +, by which the point size for the table is changed, and +.CI d2\c +, by which the vertical line spacing is changed. +. +If +.CI d2 +is omitted, value +.CI d1 +is taken for both. +. +.XDEFS "fsz=\[aq]1.0 1.0\[aq]" t*fsz +. +.XAA hal=l\[or]c\[or]b\[or]r +Horizontal alignment of the cell contents in the table. +. +.CR \[oq]hal=l\[cq]\c +: left alignment. +. +.CR \[oq]hal=c\[cq]\c +: centered alignment. +. +.CR \[oq]hal=b\[cq]\c +: both (left and right) alignment. +. +.CR \[oq]hal=r\[cq]\c +: right alignment. +. +.XDEFS hal=b t*hal +. +.XAA val=t\[or]m\[or]b +Vertical alignment of the cell contents in the table for cells lower +than the current row. +. +.CR \[oq]val=t\[cq]\c +: alignment below the top of the cell. +. +.CR \[oq]val=m\[cq]\c +: alignment in the middle of the cell. +. +.CR \[oq]val=b\[cq]\c +: alignment above the cell bottom. +. +.XDEFS val=t t*val +. +.XAA hl=\[lB]s\[or]d\[rB] +Horizontal line between the rows. +. +If specified with +.CR .TD +or +.CR .TH +this is a separator line to the cell below. +. +.CR \[oq]hl=\[cq] +(no value): no separator line. +. +.CR \[oq]hl=s\[cq]\c +: a single separator line between the rows. +. +.CR \[oq]hl=d\[cq]\c +: a double separator line. +. +.IP +The thickness of the separator lines is the half of the border thickness, +but at least 0.1\|inches. +. +The distance between the double lines is equal to the line thickness. +. +.IP +.B Remark: +Together with +.CR \[oq]border=0\[cq] +for proper formatting the value of +.CR \[oq]csp\[cq] +must be at least .05\|inches for single separator lines and .15\|inches for +double separator lines. +. +.XDEFS hl=s t*hl +. +.XAA vl=\[lB]s\[or]d\[rB] +Vertical separator line between the cells. +. +If specified with +.CR .TD +or +.CR .TH +this is a separator line to the cell on the right. +. +.CR \[oq]vl=s\[cq]\c +: a single separator line between the cells. +. +.CR \[oq]vl=d\[cq]\c +: a double separator line. +. +.CR \[oq]vl=\[cq] +(no value): no vertical cell separator lines. +. +For more information see the documentation of the +.CR \[oq]hl\[cq] +argument above. +. +.XDEFS vl=s t*vl +. +. +.SH HDTBL CUSTOMIZATION +. +A table which does not fit on a partially filled page is printed +automatically on the top of the next page if you append the little +utility macro +.CR t*hm +to the page header macro of your document's main macro package. +For example, say +. +.PP +.RS +.nf +.CR ".am pg@top" +.CR ". t*hm" +.CR ".." +.fi +.RE +. +.PP +if you use the +.B ms +macro package. +. +.PP +.B hdtbl +has built-in page header and page footer macros, +.B HM +and +.BR BM . +If they interfere with your own header and footer macros, simply +say +.CR ".rm\ HM" +and +.CR ".rm\ BM" +to remove them. +. +. +.SH AUTHOR +. +.MT Joachim.Walsdorff@urz.uni-heidelberg.de +Joachim Walsdorff +.ME +. +. +.SH BUGS AND SUGGESTIONS +. +Please send your commments to the +.MT groff@gnu.org +groff mailing list +.ME +or directly to the author. +. +.\" EOF diff --git a/contrib/groff/contrib/hdtbl/hdmisc.tmac b/contrib/groff/contrib/hdtbl/hdmisc.tmac new file mode 100644 index 0000000000..7fe5f08e49 --- /dev/null +++ b/contrib/groff/contrib/hdtbl/hdmisc.tmac @@ -0,0 +1,618 @@ +.\" -*- mode: roff -*- +.ig + +hdmisc.tmac + +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +written by Joachim Walsdorff . + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +groff is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +.. +. +. +.\" %beginstrip% +. +.if d getarg \ +. nx +. +. +.\" ****************************************************************** +.\" ** Some macros and default settings needed by hdtbl ** +.\" ****************************************************************** +. +. +.\" Utility macro: .getarg ... +.\" +.\" Get macro argument. This macro searches in the +.\" remaining arguments and assigns its value to a string +.\" register named . The following syntax forms are +.\" recognized. +.\" +.\" = Assign to string . +.\" must not contain spaces. +.\" ='' Assign to string . +.\" can contain spaces. +.\" = Assign `=' to string . +.\" Assign `key' to string . +.\" +.\" After return, the string `args' contains the remaining +.\" arguments. +.\" +.\" Example: With the definition of string `foo' as +.\" +.\" .ds foo aaa=xxx bbb ccc='yyy zzz' ddd= eee +.\" +.\" a call to `getarg' with +.\" +.\" .getarg ccc \*[foo] +.\" +.\" sets string `ccc' to value `yyy zzz'. The string `args' +.\" now contains `aaa=xxx bbb ddd= eee'. An additional call +.\" like +.\" +.\" .getarg ddd \*[args] +.\" +.\" sets string `ddd' to value `=', and `args' contains +.\" `aaa=xxx bbb eee'. +.de getarg +. ds \\$1 +. ds args +. +. if (\\n[.$] < 2) \ +. return +. +. ds $1 \\$1\" +. shift +. +. length * \\*[$1] +. while \\n[.$] \{\ +. ds * "\\$1\" +. ds ** "\\$1\" +. length ** \\*[**] +. shift +. if (\\n[*] > \\n[**]) \{\ +. as args " "\\*[**]"\" value too short, repeat +. continue +. \} +. substring * 0 (\\n[*] - 1) +. \" The surrounding \? escapes emulate string comparison. +. ie !"\?\\*[$1]\?"\?\\*[*]\?" \{\ +. as args " "\\*[**]"\" key not found, repeat +. continue +. \} +. el \{\ +. ie "\?\\*[**]\?"\?\\*[$1]\?" \ +. ds \\*[$1] \\*[$1]\" return key as string +. el \{\ +. ie "\?\\*[**]\?"\?\\*[$1]=\?" \ +. ds \\*[$1] =\" return `=' +. el \{\ +. substring ** (\\n[*] + 1) -1 +. ds * \\*[**]\" +. substring * 0 0 +. +. \" check whether value starts with quote +. if "\?\\*[*]\?"\?'\?" \{\ +. substring ** 1 -1 +. ds * \\*[**]\" +. substring * -1 -1 +. +. \" search final quote +. ie "\?\\*[*]\?"\?'\?" \ +. substring ** 0 -2 +. el \{\ +. as \\*[$1] \\*[**] \" not found, append argument +. +. while 1 \{\ +. ds ** \\$1\" get next argument +. ds * \\$1\" +. shift +. substring * -1 -1 +. +. if "\?\\*[*]\?"\?'\?" \{\ +. substring ** 0 -2 +. break \" break if no final quote +. \} +. +. as \\*[$1] \\*[**] \" otherwise append and repeat +. \} +. \}\} +. +. as \\*[$1] \\*[**]\" +. \} +. +. as args " \\$@\" +. \}\} +. +. return +. \} +.. +. +. +.\" Utility macro: .index +.\" +.\" Check whether is a substring of and +.\" return its position in number register `index', starting +.\" with 1. If not found, return 0. If is empty, +.\" set `index' to -999. +.de index +. if "\\$2"" \{\ +. nr index -999 +. return +. \} +. +. length ** \\$1 +. length $2 \\$2 +. nr * 0-1 1 +. +. while (\\n+[*] < \\n[**]) \{\ +. ds * \\$1\" +. substring * \\n[*] (\\n[*] + \\n[$2] - 1) +. \" The surrounding \? escapes emulate string comparison. +. if "\?\\*[*]\?"\?\\$2\?" \ +. break +. \} +. +. ie (\\n[*] == \\n[**]) \ +. nr index 0 +. el \ +. nr index (\\n[*] + 1) +.. +. +. +.\" ****************************************************************** +.\" ******** non-accumulating space .SP [v] ********** +.\" ** ** +.\" ** nl vor erster Seite -1, oben auf Seite 0 resp. tH ** +.\" ** .k nach .sp oder .br 0, ** +.\" ** sonst Laenge der angefangenen Zeile ** +.\" ** Der Merker M# fuer vorangegangenes .SP wird in .HM am ** +.\" ** Seitenanfang zurueckgesetzt. ** +.\" ** ganz richtig ist .sp + .br = .br + .sp = .sp ** +.\" ****************************************************************** +.de SP +. if (\\n[nl] < 0) \ +. br \" start very first page +. nr * \\n[.p] \" save current page length +. +. ie "\\$1"" \ +. pl +1 \" without arg increase page length by 1v +. el \ +. pl +\\$1 \" otherwise use \\$1 +. +. nr ** (\\n[.p] - \\n[*]) \" ** now holds arg for .SP in base units +. pl \\n[*]u \" restore page length +. +. \" we do nothing at start of new page or column +. if ((\\n[nl] - \\n[tH]) & (\\n[nl] - \\n[<<]) : \\n[.k]) \{\ +. ie ((\\n[.d] - \\n[M#]) : \\n[.k]) \{\ +. sp \\n[**]u \" execute .sp +. nr S# \\n[**] \" store ** in S# +. \} +. el \{\ +. if (\\n[**] - \\n[S#]) \{\ +. sp (\\n[**]u - \\n[S#]u)\" emit difference to previous .SP +. nr S# \\n[**] \" store ** in S# +. \}\} +. +. nr M# \\n[.d] \" store vertical position .d in M# +. \} +.. +. +. +.\" ****************************************************************** +.\" ** Perform all arguments once ** +.\" ** P1 is nestable ** +.\" ****************************************************************** +.de P1 +. \" `while' command is about five times faster than recursion! +. while \\n[.$] \{\ +. nop \\$1 +. shift +. \} +.. +. +. +.\" ****************************************************************** +.\" ** Hilfsmakro zum Einstellen von Schriftgroesse und ** +.\" ** Zeilenabstand, bezogen auf Anfangswerte \n[s] und \n[v] ** +.\" ** sowie fuer Hyphenation: ** +.\" ** .pv s v hy# hart; macht .br ** +.\" ** Bei 4. Argument setzen der Register s und v und hy. ** +.\" ** Fuer angefangene Zeile die vorgefundenen Einstellungen ** +.\" ****************************************************************** +.de pv +. br +. +. if \\n[.$] \ +. ps (\\n[s]u * \\$1z / 1z) +. +. ie (\\n[.$] - 1) \ +. vs (\\n[v]u * \\$2p / 1p) +. el \{\ +. vs (\\n[v]u * \\$1p / 1p) +. return +. \} +. +. if !""\\$3" \ +. hy \\$3 +. +. if !""\\$4" \{\ +. nr v \\n[.v] +. nr s \\n[.ps] +. nr hy \\n[.hy] +. \} +.. +. +. +.\" ****************************************************************** +.\" ** Hilfsmakros pop/pops/popr (pop stackelement): ** +.\" ** pop or popr: pop register ** +.\" ** pops: pop string ** +.\" ** .pop[s|r] reg|string stackname ** +.\" ** reg|string: name of reg/string to get the ** +.\" ** popped element ** +.\" ** stack: name of stack ** +.\" ****************************************************************** +.de *pop +. ie "\\$1"pops" \ +. ds \\$2 \\$4\" pop first stackelement +. el \ +. nr \\$2 \\$4 +. +. ds $3 \\$3\" remember stackname +. shift 4 \" shift four args +. +. ds \\*[$3] "\\$@\" fill stack with remaining elements +.. +. +.de pop +. *pop \\$0 \\$1 \\$2 \\*[\\$2] +.. +. +.als popr pop +.als pops pop +. +. +.\" ****************************************************************** +.\" ** processs diversion ** +.\" ****************************************************************** +.de DI +. nr * \\n[.u] +. nf \" diversion is already formatted - output it unchanged +. \\$1 \" output the diversion ... +. rm \\$1 \" ... and remove it +. if \\n[*] \ +. fi \" reactivate formatting +.. +. +. +.\" ****************************************************************** +.\" ** Some macros and the page setup used by the examples ** +.\" ****************************************************************** +. +.\" ****************************************************************** +.\" ** some of the following macros use system commands ** +.\" ** and are therefore `unsafe': they need the `-U' argument ** +.\" ** when calling groff/troff ** +.\" ****************************************************************** +. +.\" ****************************************************************** +.\" ** Header macro for the examples ** +.\" ****************************************************************** +.de H +. nr *w* (17 * \w\\$* / 10 + 4n) +. TBL border=1n \ + bc=yellow \ + bgc=red4 \ + fgc=yellow \ + csp=0 \ + fst=TB \ + "fsz=1.7 1.5" \ + hal=c \ + tal=c \ + "width=(\\n[*w*]+4n) 16)) \ +. tm \\n[.F]:\\n[.c]: invalid base `\\$2' +. el \ +. nr b# \\$2 +. \}\} +. el \ +. nr b# 16 +. +. nr xb# 1 +. +. ie (\\n[b#] == 1) \{\ +. nr dec# +1 +. while \\n-[dec#] \ +. as hex# |\" +. \} +. el \{\ +. while (\\n[dec#] - \\n[xb#]) \{\ +. nr xb# (\\n[xb#] * \\n[b#]) +. nr j# +1 +. \} +. +. while (\\n+[i#] < \\n[j#]) \{\ +. nr ** (\\n[dec#] / \\n[xb#]) +. as hex# \\*[d2x-\\n[**]]\" +. nr dec# (\\n[dec#] - (\\n[xb#] * \\n[**])) +. nr xb# (\\n[xb#] / \\n[b#]) +. \} +. \} +. +. \" strip leading zero, if any +. ds * \\*[hex#]\" +. substring * 0 0 +. if "\\*[*]"0" \ +. substring hex# 1 -1 +. +. if (\\$1 < 0) \ +. ds hex# -\\*[hex#]\" +. +. if !"\\$3"" \{\ +. ie !\A\\$3 \ +. tm \\n[.F]:\\n[.c]: invalid string name `\\$3' +. el \ +. ds \\$3 \\*[hex#]\" +. \} +.. +. +. +.\" Utility macro: .random# +.\" .random-seed seed1 seed2 +.\" +.\" Return pseudo-random numbers in the range 0..0xFFFFFF, +.\" represented as the concatenation of `#' and six +.\" hexadecimal digits, in the string `#random'. The +.\" macro `random-seed' can be used to set seed values, +.\" which should be integers in the range 1..2147483562 and +.\" 1..2147483398 for `seed1' and `seed2', respectively +.\" (the macro applies a modulo operation to assure this +.\" range). If `random-seed' isn't called the registers +.\" `seconds', `minutes', `hours', `dy', `mo', `year', and +.\" `$$' are used to compute it. +.\" +.\" The used generator is presented in L'Ecuyer's 1988 paper +.\" `Efficient and Portable Combined Random Number +.\" Generators', which combines two Multiplicative Linear +.\" Congruential Generators (MLCGs) to achieve a period of +.\" 2.3*10^18. +.af hours 00 +.af minutes 00 +.af seconds 00 +.af year 0000 +.af mo 00 +.af dy 00 +. +.ds random-s1 \n[minutes]\n[seconds]\n[$$]\n[hours]\" +.\" prevent overflow +.substring random-s1 0 8 +. +.nr random-s1 (\*[random-s1] % 2147483562) +.nr random-s2 \n[dy]\n[year]\n[mo] +. +. +.de random-seed +. if !(\\n[.$] == 2) \{\ +. tm1 "random-seed: Invalid number of arguments. +. tm1 " usage: `.random-seed seed1 seed2' +. return +. \} +. +. nr random-s1 (\\$1 % 2147483562) +. nr random-s2 (\\$2 % 2147483398) +.. +. +. +.de random# +. nr * (\\n[random-s1] / 53668) +. nr random-s1 (40014 * (\\n[random-s1] - (\\n[*] * 53668)) \ + - (\\n[*] * 12211)) +. if !\\n[random-s1] \ +. nr random-s1 +2147483563 +. +. nr * (\\n[random-s2] / 52774) +. nr random-s2 (40692 * (\\n[random-s2] - (\\n[*] * 52774)) \ + - (\\n[*] * 3791)) +. if !\\n[random-s2] \ +. nr random-s2 +2147483399 +. +. nr * (\\n[random-s1] - \\n[random-s2]) +. if (\\n[*] < 1) \ +. nr * +2147483562 +. +. \" reduce the result to the leftmost 24 bits +. nr * (\\n[*] / 128) +. +. d2x \\n[*] +. ds hex# 000000\\*[hex#]\" +. substring hex# -6 +. ds #random #\\*[hex#]\" +.. +. +. +.\" ****************************************************************** +.\" ** minimal Page setup ** +.\" ****************************************************************** +. +.nr s \n[.ps] +.nr v \n[.v] +.pv 1.2 1.2 "" X +.nr l 6.6i \" set text width +.ll \n[l]u +.nr o 2c \" set offset +.po \n[o]u +.nr p 29.7c \" set paper length (A4) +.pl \n[p]u +.nr tH 1i \" set top margin +.sp |\n[tH]u +. +.ev 99 +.lt \n[l]u +.ev +. +. +.de HM +. sp |.5i \" print header in top margin +. tl \\*[t*HM] +. sp |\\n[tH]u +. ev +.. +. +. +.de BM +. ev 99 +. sp |(\\n[p]u - .5i) \" print footer in bottom margin +. tl \\*[t*BM] +. bp +.. +. +. +.de EM +. rm BM \" no page number at bottom of last page +. +. if !"\\*[t*kept]"" \{\ +. tm1 "hdtbl: Not all tables have been printed. +. tm1 " Add `.bp' at the end of your document. +. \} +. if !"\\*[t*held]"" \{\ +. tm1 "hdtbl: There are held tables which haven't been printed. +. tm1 " Add `.t*free' at the end of your document. +. \} +. if \\n[t*#] \ +. tm hdtbl: Missing `.ETB' macro at end of document. +.. +. +. +.em EM +. +.if "\n[.m]"" \ +. gcolor black +.if "\n[.M]"" \ +. fcolor white +. +.mso hdtbl.tmac\" load table macros +. +.\" EOF diff --git a/contrib/groff/contrib/hdtbl/hdtbl.tmac b/contrib/groff/contrib/hdtbl/hdtbl.tmac new file mode 100644 index 0000000000..5182ba6a1d --- /dev/null +++ b/contrib/groff/contrib/hdtbl/hdtbl.tmac @@ -0,0 +1,1006 @@ +.\" -*- roff -*- +.ig + +hdtbl.tmac + +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. +written by Joachim Walsdorff . + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +groff is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +.. +. +. +.\" ***************************************************************** +.\" * hdtbl - Heidelberger table macros * +.\" * Vers. 0.91 December 2005 * +.\" ***************************************************************** +. +.if d TBL \ +. nx +. +.mso hdmisc.tmac +.mso 62bit.tmac +. +.wh 0 HM \" comment this out if a page header macro exists +.wh -1i BM \" comment this out if a bottom margin macro exists +. +.\" replace `HM' with the name of your pageheader macro, e.g., `pg@top' for MS +.am HM +. t*hm +.. +. +. +.\" ***************************************************************** +.\" * default values for some arguments * +.\" ***************************************************************** +. +.ds t*hl s\" +.ds t*vl s\" +.ds t*tal l\" +.ds t*hal b\" +.ds t*val t\" +.ds t*ff \\n[.fam]\" +.ds t*fst \\n[.f]\" +.ds t*fsz 1 1\" +.ds t*fgc red4\" +.ds t*bgc bisque\" +.ds t*bc red4\" +.nr t*cpd .5n +.nr t*csp .5n +.nr t*b .1n +.nr t*cols 1 +. +. +.\" defaults for table captions +.nr t*cptn 0 1 +.ds t*cptn "".sp .4" \ + ".pv 1.4 1.4" \ + ".ad l" \ + "\m[\\*[t*fgc]]Table \\n+[t*cptn]:\0\c\k*"\" +. +. +.\" Running title, running footer +.ds t*HM //arbitrary text for pageheader, except on the first page//\" +.ds t*BM //arbitrary text for pagefooter, except on the last page/\\n[%]/\" +. +. +.\" %beginstrip% +. +.\" for better error messages +.ds nth-1 st\" +.ds nth-2 nd\" +.ds nth-3 rd\" +. +.\" initialization of various registers +.nr t*# 0 \" table nesting level +.nr t*numb 0 1 \" held table diversion # +. +.ds *#trc* +. +. +.\" ***************************************************************** +.\" * The four base macros and the two optional macros * +.\" ***************************************************************** +. +.ie n \ +. ds g tty:\" +.el \ +. ds g ps: exec\" +. +.\" TBL: table start +.\" predecessor: text, TD or ETB +.\" successor: CPTN or TR +.de TBL +. ds t*m\\n[t*#] \\n[.m]\" +. ie \\n[t*#] \ +. br +. el \{\ +. ds * \\n[.ev]\" +. ev t*tbl +. evc \\*[*] +. di t*tbl0 +. sp .4 \" XXX: hard-coded value +. nr t*i \\n[.i] +. ll -\\n[.i]u +. in 0 +. \} +. nr t*# +1 +. +. getarg cols \\$@\" from here string `args' contains the rest of \\$@ +. ie "\\*[cols]"" \ +. nr t*cols\\n[t*#] \\n[t*cols] +. el \{\ +. ie \B\\*[cols] \ +. nr t*cols\\n[t*#] \\*[cols] +. el \ +. tm \\n[.F]:\\n[.c]: Invalid number of columns value `\\*[cols]'. +. \} +. +. getarg cpd \\*[args] \" cell padding +. ie "\\*[cpd]"" \ +. nr t*cpd\\n[t*#] \\n[t*cpd] +. el \{\ +. ie \B\\*[cpd] \ +. nr t*cpd\\n[t*#] \\*[cpd] +. el \ +. tm \\n[.F]:\\n[.c]: Invalid cell padding value `\\*[cpd]'. +. \} +. +. getarg csp \\*[args] \" cell spacing +. ie "\\*[csp]"" \ +. nr t*csp\\n[t*#] \\n[t*csp] +. el \{\ +. ie \B\\*[csp] \ +. nr t*csp\\n[t*#] \\*[csp] +. el \ +. tm \\n[.F]:\\n[.c]: Invalid cell spacing value `\\*[csp]'. +. \} +. +. getarg border \\*[args] \" border thickness +. ie "\\*[border]"=" \ +. nr t*b\\n[t*#] 0-1 +. el \{\ +. ie "\\*[border]"" \ +. nr t*b\\n[t*#] \\n[t*b] +. el \{\ +. ie \B\\*[border] \ +. nr t*b\\n[t*#] \\*[border] +. el \ +. tm \\n[.F]:\\n[.c]: Invalid border thickness value `\\*[border]'. +. \}\} +. +. getarg bc \\*[args] \" border color +. ds t*bc\\n[t*#] \\*[t*bc]\" +. if !"\\*[bc]"" \{\ +. ie m\\*[bc] \ +. ds t*bc\\n[t*#] \\*[bc]\" +. el \{\ +. ie "\\*[bc]"=" \ +. ds t*bc\\n[t*#] =\" +. el \ +. tm \\n[.F]:\\n[.c]: Invalid border color `\\*[bc]'. +. \}\} +. ie "\\*[bc]"=" \ +. ds t*bc\\n[t*#] +. el \{\ +. ie "\\*[bc]"" \ +. ds t*bc\\n[t*#] \\*[t*bc]\" +. el \ +. ds t*bc\\n[t*#] \\*[bc]\" +. \} +. +. getarg width \\*[args] \" table/col widths +. if "\\*[width]"=" \ +. ds width +. +. nr b/2\\n[t*#] (\\n[t*b\\n[t*#]] / 2)\" shortcut +. nr cscp\\n[t*#] (\\n[t*csp\\n[t*#]] + \\n[t*cpd\\n[t*#]])\" aux. register +. +. getarg height \\*[args] \" table outline height +. ie "\\*[height]"" \ +. nr t*height\\n[t*#] 0 +. el \{\ +. ie \B\\*[height] \ +. nr t*height\\n[t*#] (\\*[height] \ + - ((2 * \\n[cscp\\n[t*#]]) \ + + (3 * \\n[b/2\\n[t*#]]))) +. el \ +. tm \\n[.F]:\\n[.c]: Invalid height value `\\*[height]'. +. \} +. +. t*cl \\*[width] \" get cell widths and offsets +. t*args \\n[t*#] \" look for common arguments +. +. getarg tal \\*[args] \" table horizontal alignment +. if "\\*[tal]"" \ +. ds tal \\*[t*tal]\" +. ie "\\*[tal]"l" \ +. nr in\\n[t*#] \\n[.i] +. el \{\ +. ie "\\*[tal]"c" \ +. nr in\\n[t*#] (\\n[.l] - \\n[ll\\n[t*#]]/2 + \\n[.i]) +. el \{\ +. ie "\\*[tal]"r" \ +. nr in\\n[t*#] (\\n[.l] - \\n[ll\\n[t*#]] + \\n[.i]) +. el \{\ +. tmc \\n[.F]:\\n[.c]: Invalid horizontal table alignment `\\*[tal]': +. tm1 " must be `l', `c' or `r'. +. \}\}\} +. +. nr t*r#\\n[t*#] 0 \" initialize row index +. mk toptbl\\n[t*#] +. +. P1 \\*[args] +.. +. +. +.\" CPTN: optional table caption +.\" predecessor: TBL +.\" successor: TR +.de CPTN +. ft 1 +. +. if "\\$0"CPTN" \ +. if \\n[t*r#\\n[t*#]] \{\ +. tmc \\n[.F]:\\n[.c]: Invalid placement of `.CPTN'; +. tm1 " must be called immediately after `.TBL'. +. return +. \} +. +. getarg val \\$@ +. ds args\\n[t*#] "\\*[args]\" +. +. index "\\*[args]" .TR +. ie \\n[index] \{\ +. ds *a\\n[t*#] "\\*[args]\" +. substring args\\n[t*#] 0 \\n[index] +. substring *a\\n[t*#] \\n[index]-2 -1 +. \} +. el \ +. ds *a\\n[t*#] +. +. ie "\\*[val]"b" \{\ +. de t*cptn\\n[t*#] +. *CPTN \\*[args\\n[t*#]] +. rm t*cptn\\n[t*#] +\\.. +. \} +. el \{\ +. ll (\\n[ll\\n[t*#]]u + \\n[in\\n[t*#]]u) +. in \\n[in\\n[t*#]]u +. P1 \\*[t*cptn] +' in +\\n[*]u +. P1 \\*[args\\n[t*#]] +. pv 1 1 +. in +. mk toptbl\\n[t*#] +. \} +. +. P1 \\*[*a\\n[t*#]] +.. +. +.als *CPTN CPTN +. +. +.\" TR: table row +.\" predecessor: TBL, CPTN, text, TD or ETB +.\" successor: TD +.de TR +. ft 1 +. if !\\n[t*#] \{\ +. tm \\n[.F]:\\n[.c]: Table row (.TR) without preceding table start (.TBL). +. return +. \} +. +. \" finish previous data cell, if any +. if \\n[t*r#\\n[t*#]] \ +. t*dntr 1 \\n[c#\\*[#t#r]] \\n[t*cols\\n[t*#]] \\*[*#trc*] +. +. nr t*r#\\n[t*#] +1 \" row number in this table +. ds #t#r \\n[t*#]*\\n[t*r#\\n[t*#]]\" table row identifier +. \" (*) +. nr c#\\*[#t#r] 0 1 \" clear cell counter +. nr dntr\\*[#t#r] 0 1 \" clear accumulated row height +. +. getarg height \\$@ +. ie "\\*[height]"" \ +. nr t*height\\*[#t#r] 0 +. el \{\ +. ie \B\\*[height] \ +. nr t*height\\*[#t#r] \\*[height] +. el \ +. tm \\n[.F]:\\n[.c]: Invalid table row height `\\*[height]'. +. \} +. +. \" If there is a TR with height `height', the total height of the table +. \" is too high by 3/2 b, independent of the number of TR with `height'. +. t*args \\*[#t#r] \\n[t*#] \" look for common arguments +. +. P1 \\*[args] +.. +. +. +.\" TH: optional table header cell +.\" predecessor: text, TD or TR +.\" successor: text, TD, TR, TBL or ETB +.\" +.\" cell content bolded and horizontally and vertically centered, +.\" else like .TD +.de TH +. ft 1 +. getarg hal \\$@ +. if "\\*[hal]"" \ +. ds hal c\" +. +. getarg val \\*[args] +. if "\\*[val]"" \ +. ds val m\" +. +. getarg fst \\*[args] +. if "\\*[fst]"" \ +. ds fst B\" +. +. TD hal=\\*[hal] val=\\*[val] fst=\\*[fst] \\*[args] +.. +. +. +.\" TD: table data cell +.\" predecessor: text, TD or TR +.\" successor: text, TD, TR, TBL or ETB +.de TD +. ft 1 +. \" finish previous data cell -- note the use of \E +. t*dntr 0 \\n[c#\\*[#t#r]]-1 \En[c#\\*[#t#r]] \\*[*#trc*] +. +. ds *#trc* \\*[#t#r]*\\n[c#\\*[#t#r]]\" table cell identifier +. \" (**) +. +. getarg rowspan \\$@ +. nr rowspan 1 +. if !"\\*[rowspan]"" \{\ +. ie \B\\*[rowspan] \{\ +. nr rowspan (\\*[rowspan] >? 1) +. nr *rsp*\\*[*#trc*] (\\n[rowspan] - 1) +. \} +. el \ +. tm \\n[.F]:\\n[.c]: Invalid value of `rowspan' keyword. +. \} +. +. getarg colspan \\*[args] +. nr colspan 1 +. if !"\\*[colspan]"" \{\ +. ie \B\\*[colspan] \ +. nr colspan (\\*[colspan] >? 1) +. el \ +. tm \\n[.F]:\\n[.c]: Invalid value of `colspan' keyword. +. \} +. +. t*args \\*[#trc] \\*[#t#r] \" look for common arguments +. +. nr in\\*[#trc] \\n[in\\n[t*#]*\\n[c#\\*[#t#r]]] +. nr *cl \\n[cll\\n[t*#]*\\n[c#\\*[#t#r]]] +. nr * 0 1 +. nr *r \\n[t*r#\\n[t*#]] +. +. if (\\n[rowspan] - 1) \ +. while (\\n+[*] <= \\n[rowspan]) \{\ +. nr rspan\\n[t*#]*\\n[*r]*\\n[c#\\*[#t#r]] \\n[colspan] +. if (\\n[*] > 1) \ +. nr cspan\\n[t*#]*\\n[*r]*\\n[c#\\*[#t#r]] \\n[colspan] +. nr *r +1 +. \} +. +. nr * 1 1 +. nr *c \\n[c#\\*[#t#r]] +. +. if (\\n[colspan] - 1) \{\ +. nr vline\\*[*#trc*] 0-1 \" set `no vl' flag +. +. while (\\n+[*] <= \\n[colspan]) \{\ +. nr *c +1 +. nr *cl +(2 * \\n[cscp\\n[t*#]] \ + + \\n[b/2\\n[t*#]] \ + + \\n[cll\\n[t*#]*\\n[*c]]) +. nr c#\\*[#t#r] +1 +. \} +. \} +. +. if (\\n[c#\\n[t*#]*\\n[t*r#\\n[t*#]]] > \\n[t*cols\\n[t*#]]) \{\ +. ds * are\" +. ds ** columns\" +. if (\\n[c#\\*[#t#r]] == 1) \{\ +. ds * is\" +. ds ** column\" +. \} +. tmc \\n[.F]:\\n[.c]: There \\*[*] \\n[c#\\*[#t#r]] table \\*[**] (.TD) +. +. ds * are\" +. if (\\n[t*cols\\n[t*#]] == 1) \ +. ds * is\" +. tm1 " but only \\n[t*cols\\n[t*#]] \\*[*] expected. +. +. ds * +. length * \\n[.F]:\\n[.c]: +. +. while \\n-[*] \ +. ds * " \\*[*]\" +. +. tm1 "\\*[*] Remaining .TDs and its contents are ignored. +. +. di *t*dummy* \" bypass superfluous input +. return +. \} +. +. di t*\\*[#trc] \" open cell diversion and set locals +. in 0 +. nr cll\\*[#trc] \\n[*cl] +. ll \\n[*cl]u +. nr *cl\\n[t*#] \\n[.l] +. gcolor \\*[t*fgc\\*[#trc]] +. ad \\*[t*hal\\*[#trc]] +. fam \\*[t*ff\\*[#trc]] +. ft \\*[t*fst\\*[#trc]] +. pv \\*[t*fsz\\*[#trc]] +. +. P1 \\*[args] +.. +. +. +.\" ETB: end of table +.\" predecessor: text, TD or ETB +.\" successor: text, TD, TR or TBL +.de ETB +. ie \\n[t*#] \ +. if !\\n[t*r#\\n[t*#]] \{\ +. tmc \\n[.F]:\\n[.c]: Each table (.TBL) +. tm1 " should contain at least one table row (.TR)! +. \} +. el \{\ +. tmc \\n[.F]:\\n[.c]: Table end (.ETB) +. tm1 " without corresponding table start (.TBL)! +. \} +. +. ds #t#r \\n[t*#]*\\n[t*r#\\n[t*#]]\" refresh table row identifier +. t*dntr 2 \\n[c#\\*[#t#r]] \\n[t*cols\\n[t*#]] \\*[*#trc*] +. +. t*divs \" print this table +. +. sp \\n[b/2\\n[t*#]]u +. t*cptn\\n[t*#] +. nr t*# -1 +. +. ll \\n[*cl\\n[t*#]]u \" restore ll outside this table +. in 0 \" reset indent +. gcolor \\*[t*m\\n[t*#]] \" reset previous fgc +. +. getarg hold \\$@ +. if !\\n[t*#] \{\ +. sp .5 +. di +. in \\n[t*i]u +. ie "\\*[hold]"" \{\ +. ie (\\n[.t] - \\n[dn]) \ +. DI t*tbl0 +. el \{\ +. rn t*tbl0 t*tbl\\n[t*numb] +. ds t*kept \\*[t*kept] t*tbl\\n[t*numb] \\n[dn]\" +. \} +. \} +. el \{\ +. rn t*tbl0 t*hold\\n+[t*numb] +. tm \\n[.F]:\\n[.c]: Table t*hold\\n[t*numb] held. +. ds t*held \\*[t*held] t*hold\\n[t*numb] \\n[dn]\" +. \} +. +. ev \" restore previous environment +. \} +. +. P1 \\*[args] +.. +. +. +.\" ***************************************************************** +.\" * Following the definition of five utility macros * +.\" * special to hdtbl. * +.\" * Other utility macros common to hdtbl and hdgroff * +.\" * are defined in the file hdmisc.tmac. * +.\" ***************************************************************** +. +. +.\" .t*free [n] +.\" print the next [n] held table[s]. +.\" Don't call it within a table! +.\" If the table is higher than the remaining space +.\" on the page, the table is printed on the next page. +.de t*free +. if "\\$0"CPTN" \ +. if \\n[t*r#\\n[t*#]] \{\ +. tmc \\n[.F]:\\n[.c]: Invalid placement of `.t*free' within a table; +. tm1 " it must be called outside of any table. +. return +. \} +. +. if "\\*[t*held]"" \{\ +. tm \\n[.F]:\\n[.c]: No held tables. +. return +. \} +. +. nr ** (\\$1 >? 1) +. while !""\\*[t*held]" \{\ +. pops * t*held +. popr * t*held +. +. ie (\\n[.t] - \\n[*]) \{\ +. ev t*tbl +. DI \\*[*] +. ev +. \} +. el \{\ +. rn \\*[*] t*tbl\\n+[t*numb] +. ds t*kept \\*[t*kept] t*tbl\\n[t*numb] \\n[*]\" +. \} +. +. if !(\\n-[**] - 1) \ +. return +. \} +.. +. +. +.\" The main utility macro for tables: +.\" If a table is closed by ETB, this macro is called. It +.\" processes one complete table, i.e., all the table cell +.\" diversions, paints the cell backgrounds, draws +.\" horizontal and vertical table lines and the table border. +.\" +.\" Nested tables are processed from inside to outside. +. +.de t*divs +. ll (\\n[l]u + 1c) \" avoid warning `can't break line' +. nf +. +. nr b/2 \\n[b/2\\n[t*#]] \" some abbreviations +. nr cscp \\n[cscp\\n[t*#]] +. nr cscpb (\\n[b/2] + \\n[cscp]) +. +. nr topdiv (\\n[.d] + \\n[b/2] - \\n[cscp])\" top of cell diversion +. nr cscpb2 (\\n[b/2] / 2 + \\n[cscp]) +. +. nr #r 0 1 +. \" outer loop for rows +. while (\\n+[#r] <= \\n[t*r#\\n[t*#]]) \{\ +. \" TODO: insert code here for multipage tables +. nr * (\\n[#r] - 1) +. nr topdiv +(\\n[dntr\\n[t*#]*\\n[*]] + \\n[cscp] + \\n[cscpb]) +. +. \" if table still smaller than specified table height, increase it +. if ((\\n[#r] == \\n[t*r#\\n[t*#]]) & \\n[t*height\\n[t*#]]) \ +. nr dntr\\n[t*#]*\\n[#r] (\\n[cscpb] \ + + \\n[toptbl\\n[t*#]] \ + + \\n[t*height\\n[t*#]] \ + - (\\n[topdiv] >? \\n[dntr\\n[t*#]*\\n[#r]])) +. +. nr #c 0 1 +. \" inner loop for cells +. while (\\n+[#c] <= \\n[t*cols\\n[t*#]]) \{\ +. ds #trc \\n[t*#]*\\n[#r]*\\n[#c]\" +. \" continue if the diversion is empty +. if !d t*\\*[#trc] \ +. continue +. +. sp |\\n[topdiv]u +. in (\\n[in\\n[t*#]]u + \\n[in\\*[#trc]]u)\" cell offset +. nr $1 \\n[dntr\\n[t*#]*\\n[#r]] \" cell height +. +. \" if we have spanned rows, calculate resulting row height +. \" and position of lower horizontal line +. if \\n[*rsp*\\*[#trc]] \{\ +. nr * \\n[#r] 1 +. nr rspan\\*[#trc] 0-1 \" set `no hl' flag +. nr corr (\\n[dn\\*[#trc]] - \\n[dntr\\n[t*#]*\\n[#r]]) +. +. \" clear row span flags in following rows and update row height +. while \\n[*rsp*\\*[#trc]] \{\ +. nr *rsp*\\*[#trc] -1 +. nr rspan\\n[t*#]*\\n+[*]*\\n[#c] 0 +. nr ** (\\n[dntr\\n[t*#]*\\n[*]] + \\n[cscp] + \\n[cscpb]) +. nr corr -\\n[**] +. nr $1 +\\n[**] +. \} +. +. if (\\n-[*] == \\n[t*r#\\n[t*#]]) \ +. nr $1 ((\\n[t*height\\n[t*#]] \ + - \\n[.d] \ + + \\n[toptbl\\n[t*#]] \ + + \\n[cscpb]) \ + >? \\n[$1]) +. nr dntr\\n[t*#]*\\n[*] +(\\n[corr] >? 0) +. \} +. +. \" paint cell background +. nr * (2 * \\n[t*cpd\\n[t*#]] + \\n[cll\\*[#trc]])\" background width +. nr $1 (\\n[$1] >? \\n[dn\\*[#trc]])\" cell height +. +. if !"\\*[t*bgc\\*[#trc]]"=" \{\ +. nop \h'\\n[t*csp\\n[t*#]]u'\ +\M[\\*[t*bgc\\*[#trc]]]\ +\v'(-.67v - \\n[t*cpd\\n[t*#]]u)'\ +\D'P \\n[*]u 0 \ + 0 (2u * \\n[t*cpd\\n[t*#]]u + \\n[$1]u) \ + -\\n[*]u 0'\ +\M[] +. sp -1 +. \} +. +. \" *** horizontal and vertical single or double lines *** +. \" double and single lines have the same thickness; +. \" the double lines' distance is the line thickness. +. \" +. \" `border=x': horizontal/vertical lines x/2 thick, minimum .1n +. \" `border=0': no border; horizontal/vertical lines .1n thick +. \" `border=': neither border nor horizontal/vertical lines +. +. nr *t (.1n >? \\n[b/2]) \" thickness of hl/vl; min. .1n +. in +\\n[cscp]u +. +. \" check for vertical and horizontal lines +. if (1 + \\n[t*b\\n[t*#]]) \{\ +. if !"\\*[t*bc\\n[t*#]]"=" \{\ +. \" draw horizontal line between this cell and the one below +. if (\\n[t*r#\\n[t*#]] - \\n[#r] + \\n[rspan\\*[#trc]]) \{\ +. if !"\\*[t*hl\\*[#trc]]"=" \{\ +. sp \\n[$1]u +. nr * (\\n[cscp] + \\n[cscpb] + \\n[cll\\*[#trc]]) +. nop \X'\*[g] 1 setlinecap'\ +\h'(-\\n[cscpb2]u - \\n[*t]u)'\ +\v'(\\n[cscpb2]u - .67v)'\ +\m[\\*[t*bc\\n[t*#]]]\ +\D't \\n[*t]u'\c +. +. ie "\\*[t*hl\\*[#trc]]"d" \ +. nop \v'-\\n[*t]u'\ +\D'l \\n[*]u 0'\ +\v'(2u * \\n[*t]u)'\ +\D'l -\\n[*]u 0'\ +\D't 0' +. el \ +. nop \D'l \\n[*]u 0'\ +\D't 0' +. +. sp (-\\n[$1]u - 1v) +. \}\} +. +. nr rspan\\*[#trc] 0 +. +. \" draw vertical line between this cell and the one to the right +. if (\\n[t*cols\\n[t*#]] - \\n[#c] + \\n[vline\\*[#trc]]) \{\ +. if !"\\*[t*vl\\*[#trc]]"=" \{\ +. nop \X'\*[g] 1 setlinecap'\ +\v'(-\\n[cscpb2]u - .67v)'\ +\m[\\*[t*bc\\n[t*#]]]\ +\h'(\\n[cscpb2]u - \\n[*t]u + \\n[cll\\*[#trc]]u)'\c +. +. ie "\\*[t*vl\\*[#trc]]"d" \ +. nop \h'-\\n[*t]u'\ +\D't \\n[*t]u'\ +\D'l 0 (2u * \\n[cscp]u + \\n[$1]u + (\\n[*t]u / 2u))'\ +\h'(2u * \\n[*t]u)'\ +\D'l 0 -(2u * \\n[cscp]u + \\n[$1]u + (\\n[*t]u / 2u))'\ +\D't 0' +. el \ +. nop \D't \\n[*t]u'\ +\D'l 0 (2u * \\n[cscp]u + \\n[$1]u + (\\n[*t]u / 2u))'\ +\D't 0' +. sp -1 +. \}\}\}\} +. +. nr vline\\*[#trc] 0 +. +. \" vert. cell content alignment +. nr ** 0 +. +. ie "\\*[t*val\\*[#trc]]"m" \ +. nr ** ((\\n[$1] - \\n[dn\\*[#trc]]) / 2)\" val=m +. el \ +. if "\\*[t*val\\*[#trc]]"b" \ +. nr ** (\\n[$1] - \\n[dn\\*[#trc]])\" val=b +. +. sp \\n[**]u \" vertical content position +. +. \" finally output the diversion +. t*\\*[#trc] +. rm t*\\*[#trc] +. \} +. \} +. +. \" draw the box border +. in \\n[in\\n[t*#]]u +. nr ** (\\n[topdiv] + \\n[dntr\\n[t*#]*\\n-[#r]]) +. +. if \\n[t*b\\n[t*#]] \{\ +. sp |(\\n[toptbl\\n[t*#]]u + \\n[b/2]u) +. nr $1 (\\n[toptbl\\n[t*#]] - \\n[**] - \\n[cscp]) +. nr * (\\n[ll\\n[t*#]] - \\n[t*b\\n[t*#]]) +. +. if !"\\*[t*bc\\n[t*#]]"=" \ +. nop \X'\*[g] 0 setlinejoin 2 setlinecap'\ +\v'-.67v'\ +\h'-\\n[b/2]u'\ +\m[\\*[t*bc\\n[t*#]]]\ +\D't \\n[t*b\\n[t*#]]u'\ +\D'l \\n[*]u 0'\ +\D'l 0 -\\n[$1]u'\ +\D'l -\\n[*]u 0'\ +\D'l 0 \\n[$1]u'\ +\D't 0' +. \} +. +. sp |(\\n[**]u + \\n[cscpb]u) +. fi +.. +. +. +.\" Utility macro: .t*cl [width1 [width2 [...]]] +.\" +.\" Calculate cell widths, table width, and cell offsets. +.de t*cl +. nr t*cols\\n[t*#] (\\n[.$] >? \\n[t*cols\\n[t*#]]) +. nr ll\\n[t*#] 0 \" accumulated cell widths +. nr ** (\\n[.l] / \\n[t*cols\\n[t*#]])\" width for remaining cells +. nr * 0 1 \" counter +. +. \" while-loop: Parse user arguments to get each cell's width. +. while (\\n[t*cols\\n[t*#]] >= \\n+[*]) \{\ +. nr $\\n[*] \\n[**] +. if !"\\$[\\n[*]]"" \{\ +. \" check for `%' pseudo scaling indicator +. ds * \\$\\n[*]\" +. substring * -1 -1 +. ie "\\*[*]"%" \{\ +. ds ** \\$[\\n[*]]\" +. substring ** 0 -2 +. ie \B\\*[**] \ +. nr $\\n[*] (\\*[**] * \\n[.l] / 100) +. el \ +. tm \\n[.F]:\\n[.c]: Invalid relative cell width `\\*[**]%'. +. \} +. el \{\ +. ie \B\\$[\\n[*]] \ +. nr $\\n[*] \\$[\\n[*]] +. el \ +. tm \\n[.F]:\\n[.c]: Invalid cell width `\\$[\\n[*]]'. +. \}\} +. +. nr ll\\n[t*#] +\\n[$\\n[*]] +. nr ** \\n[$\\n[*]] +. \} +. +. if (\\n[ll\\n[t*#]] > \\n[.l]) \ +. tm \\n[.F]:\\n[.c]: Table width larger than column width. +. +. nr ** (0 >? \\n[t*b\\n[t*#]]) +. nr * 0 1 +. +. \" second while loop: Compute final cell widths. +. while (\\n[t*cols\\n[t*#]] >= \\n+[*]) \{\ +. \" Remove border width, if any. +. if \\n[t*b\\n[t*#]] \{\ +. \" cell_width := cell_width * (length - 1.5*border) / length +. nr #* (\\n[ll\\n[t*#]] - (3 * \\n[t*b\\n[t*#]] / 2)) +. nr *** (\\n[ll\\n[t*#]] / 2) +. \" avoid multiplication overflow +. mult31by31 $\\n[*] #* **** +. add31to62 *** **** **** +. div62by31 **** ll\\n[t*#] $\\n[*] +. \} +. +. \" Get cell widths without padding, spacing, and separator line. +. nr cll\\n[t*#]*\\n[*] (\\n[$\\n[*]] \ + - (2 * \\n[cscp\\n[t*#]]) \ + - \\n[b/2\\n[t*#]]) +. +. \" Check whether value is non-positive. +. if !\\n[cll\\n[t*#]*\\n[*]] \{\ +. nr #* (\\n[ll\\n[t*#]] - (3 * \\n[t*b\\n[t*#]] / 2)) +. nr *** (\\n[#*] / 2) +. nr *h (2 * \\n[cscp\\n[t*#]] + \\n[b/2\\n[t*#]]) +. mult31by31 *h ll\\n[t*#] **** +. add31to62 *** **** **** +. div62by31 **** #* *h +. ds * \\n[*]th\" +. nr *** (\\n[*] % 10) +. if d nth-\\n[***] \ +. ds * \\n[*]\\*[nth-\\n[***]]\" +. tmc \\n[.F]:\\n[.c]: The \\*[*] width value (\\$\\n[*]) is too small. +. tm1 " It should be greater than \\n[*h]. +. \} +. +. nr in\\n[t*#]*\\n[*] \\n[**] \" cell offset +. nr ** +\\n[$\\n[*]] +. \} +.. +. +. +.\" Utility macro: .t*dntr ? +.\" +.\" Close TD diversion, make some calculations, and set +.\" some help strings and registers. is 0, 1, +.\" or 2 if the call of .t*dntr occurs in .TD, .TR, or +.\" .ETB, respectively. +.de t*dntr +. nr dn 0 \" reset diversion height +. br \" finish cell data +. +. if "\\n[.z]"*t*dummy*" \ +. return +. +. ds #t#r \\n[t*#]*\\n[t*r#\\n[t*#]]\" refresh table row identifier +. +. if \\n[c#\\*[#t#r]] \{\ +. di \" close diversion +. nr dn\\$4 \\n[dn] \" save height of this cell +. if !\\n[rspan\\*[#trc]] \{\ +. \" update row height if not in a row span +. nr dntr\\*[#t#r] (\\n[dntr\\*[#t#r]] >? \\n[dn]) +. if \\$2 \ +. nr dntr\\*[#t#r] ((\\n[t*height\\*[#t#r]] \ + - (2 * \\n[cscp\\n[t*#]] + \\n[b/2\\n[t*#]])) \ + >? \\n[dntr\\*[#t#r]]) +. \}\} +. +. nr c#\\*[#t#r] +1 +. nr * \\$2 +. +. \" update column span registers +. while (\\n+[*] <= \\$3) \{\ +. if r cspan\\*[#t#r]*\\n[*] \ +. nr c#\\*[#t#r] +\\n[cspan\\*[#t#r]*\\n[*]] +. nr cspan\\*[#t#r]*\\n[*] 0 +. \} +. +. ds #trc \\*[#t#r]*\\n[c#\\*[#t#r]]\" +. +. \" only check for cell underflow if called by .TR or .ETB +. if (\\$1 & (\\n[c#\\*[#t#r]] <= \\n[t*cols\\n[t*#]])) \{\ +. ds * are\" +. ds ** columns\" +. if (\\n-[c#\\*[#t#r]] == 1) \{\ +. ds * is\" +. ds ** column\" +. \} +. tmc \\n[.F]:\\n[.c]: There \\*[*] only \\n[c#\\*[#t#r]] \\*[**] +. +. nr * \\n[t*r#\\n[t*#]] +. ds * \\n[*]th\" +. nr *** (\\n[*] % 10) +. if d nth-\\n[***] \ +. ds * \\n[*]\\*[nth-\\n[***]]\" +. tmc " in the \\*[*] row +. +. ds * are\" +. if (\\n[t*cols\\n[t*#]] == 1) \ +. ds * is\" +. tm1 " but \\n[t*cols\\n[t*#]] \\*[*] expected. +. \} +.. +. +. +.\" Utility-macro: .t*args level_1 [level_2] +.\" +.\" Get the arguments common to TBL, TR, and TD for the level +.\" in argument 1, using default values from the level in +.\" argument 2. If argument 2 is missing, use the global +.\" default values. +.\" +.de t*args +. ds t*bgc\\$1 \\*[t*bgc\\$2]\" +. ds t*fgc\\$1 \\*[t*fgc\\$2]\" +. ds t*hl\\$1 \\*[t*hl\\$2]\" +. ds t*vl\\$1 \\*[t*vl\\$2]\" +. ds t*hal\\$1 \\*[t*hal\\$2]\" +. ds t*val\\$1 \\*[t*val\\$2]\" +. ds t*ff\\$1 \\*[t*ff\\$2]\" +. ds t*fst\\$1 \\*[t*fst\\$2]\" +. ds t*fsz\\$1 \\*[t*fsz\\$2]\" +. +. if "\\*[args]"" \ +. return +. +. getarg bgc \\*[args] \" background color +. if !"\\*[bgc]"" \{\ +. ie m\\*[bgc] \ +. ds t*bgc\\$1 \\*[bgc]\" +. el \{\ +. ie "\\*[bgc]"=" \ +. ds t*bgc\\$1 =\" +. el \ +. tm \\n[.F]:\\n[.c]: Invalid background color `\\*[bgc]'. +. \}\} +. if "\\*[args]"" \ +. return +. +. getarg fgc \\*[args] \" foreground color +. if !"\\*[fgc]"" \{\ +. ie m\\*[fgc] \ +. ds t*fgc\\$1 \\*[fgc]\" +. el \{\ +. ie "\\*[fgc]"=" \ +. ds t*fgc\\$1 =\" +. el \ +. tm \\n[.F]:\\n[.c]: Invalid foreground color `\\*[fgc]'. +. \}\} +. if "\\*[args]"" \ +. return +. +. getarg hl \\*[args] \" horizontal line between cells +. if !"\\*[hl]"" \ +. ds t*hl\\$1 \\*[hl]\" +. if "\\*[args]"" \ +. return +. +. getarg vl \\*[args] \" vertical line between cells +. if !"\\*[vl]"" \ +. ds t*vl\\$1 \\*[vl]\" +. if "\\*[args]"" \ +. return +. +. getarg hal \\*[args] \" horizontal table cell alignment +. if !"\\*[hal]"" \{\ +. index bcrl \\*[hal] +. ie \\n[index] \ +. ds t*hal\\$1 \\*[hal]\" +. el \{\ +. tmc \\n[.F]:\\n[.c]: Invalid horizontal alignment `\\*[hal]': +. tm1 " must be `b', `c', `l' or `r'. +. \}\} +. if "\\*[args]"" \ +. return +. +. getarg val \\*[args] \" vertical table cell alignment +. if !"\\*[val]"" \{\ +. index tmb \\*[val] +. ie \\n[index] \ +. ds t*val\\$1 \\*[val]\" +. el \{\ +. tmc \\n[.F]:\\n[.c]: Invalid vertical alignment `\\*[val]': +. tm1 " must be `t', `m' or `b'. +. \}\} +. if "\\*[args]"" \ +. return +. +. getarg ff \\*[args] \" font family +. if !"\\*[ff]"" \ +. ds t*ff\\$1 \\*[ff]\" +. if "\\*[args]"" \ +. return +. +. getarg fst \\*[args] \" font style +. if !"\\*[fst]"" \ +. ds t*fst\\$1 \\*[fst]\" +. if "\\*[args]"" \ +. return +. +. getarg fsz \\*[args] \" font size and spacing factor +. if !"\\*[fsz]"" \ +. ds t*fsz\\$1 \\*[fsz]\" +.. +. +. +.de t*hm +. ev t*tbl +. nr ** \\n[.t] +. while !""\\*[t*kept]" \{\ +. pops * t*kept +. popr * t*kept +. if (\\n[*] - \\n[**]) \{\ +. tm \\n[.F]:\\n[.c]: Table \\*[*] higher than page -- ignored! +. break +. \} +. +. if (\\n[*] - \\n[.t]) \{\ +. ds t*kept \\n[*] \\*[t*kept]\" +. ds t*kept \\*[*] \\*[t*kept]\" +. tmc \\n[.F]:\\n[.c]: Remaining table(s), +. tm1 " because not all fit onto this page. +. break +. \} +. +. DI \\*[*] +. \} +. ev +.. +. +.\" EOF diff --git a/contrib/groff/contrib/mm/groff_mm.man b/contrib/groff/contrib/mm/groff_mm.man index bd5223d477..863735b7c4 100644 --- a/contrib/groff/contrib/mm/groff_mm.man +++ b/contrib/groff/contrib/mm/groff_mm.man @@ -1,291 +1,482 @@ -.\" -.\" $Id: groff_mm.man,v 2.13 2004/07/03 12:46:56 wlemb Exp $ -.\" -.de T2 -.if t .ne 2v -.ti -.5i -\\$1 -.sp -1 -.. -. -.de T3 -.if t .ne 2v -.ti -.5i -\fB\\$1\fP -.br +'\" t +.ig +Copyright (C) 1989, 2000, 2001, 2002, 2003, 2006, 2007, 2009 + Free Software Foundation, Inc. + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the +entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + +Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be included in +translations approved by the Free Software Foundation instead of in +the original English. .. . .TH GROFF_MM @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@" +. +. .SH NAME +. groff_mm \- groff mm macros +. +. .SH SYNOPSIS +. .B groff .B \-m@TMAC_M_PREFIX@m [ -.IR options .\|.\|. +.IR options .\|.\|.\& ] [ -.IR files .\|.\|. +.IR files .\|.\|.\& ] +. +. .SH DESCRIPTION +. The groff mm macros are intended to be compatible with the DWB mm macros with the following limitations: +. .TP .B \(bu -no Bell Labs localisms implemented. +No Bell Labs localisms are implemented. +. .TP .B \(bu -the macros OK and PM are not implemented. +The macros OK and PM are not implemented. +. .TP .B \(bu -groff mm does not support cut marks +groff mm does not support cut marks. +. .LP -\fBm@TMAC_M_PREFIX@m\fP is intended to be international. -Therefore it is -possible to write short national macrofiles which change all -english text to the preferred language. -Use \fBm@TMAC_M_PREFIX@mse\fP as an example. +.B m@TMAC_M_PREFIX@m +is intended to support easy localization. +Use +.B m@TMAC_M_PREFIX@mse +as an example how to adapt the output format to a national standard. +Localized strings are collected in the file +.RI `@MACRODIR@/ xx .tmac', +where +.I xx +denotes the two-letter code for the +.IR language , +as defined in the ISO 639 standard. +For Swedish, +this is `sv.tmac' \[en] +not `se', +which is the ISO 3166 two-letter code for the +.I country +(as used for the output format localization). +. .\"######################################################################## .LP -A file called \fBlocale\fP or \fIlang\fP\fB_locale\fP is read -after the initiation of the global variables. -It is therefore -possible to localize the macros with companyname and so on. -.sp -In this manual square brackets is used to show optional arguments. -.sp 3 -\fBNumber registers and strings\fP -.br +A file called +.B locale +or +.IB country _locale +is read after the initialization of the global variables. +It is therefore possible to localize the macros with a different company +name and so on. +. +.LP +In this manual, +square brackets are used to show optional arguments. +. +. +.SS "Number registers and strings" +. Many macros can be controlled by number registers and strings. -A number register is assigned with the \fBnr\fP command: -.br -\fB\&.nr\fP \fIXXX\fP \fI[+-]n [i]\fP -.br -\fBXXX\fP is the name of the register, \fBn\fP is the value to -be assigned, and \fBi\fP is increment value for auto-increment. -\fBn\fP can have a plus or minus sign as prefix if an increment +A number register is assigned with the +.B nr +command: +. +.RS +.LP +.BI .nr\ "XXX \fR[\fP\fB\[+-]\fP\fR]\fPn \fR[\fPi\fR]\fP +.RE +. +.LP +.I XXX +is the name of the register, +.I n\c +\~is the value to be assigned, and +.I i\c +\~is the increment value for auto-increment. +.I n\c +\~can have a plus or minus sign as a prefix if an increment or decrement of the current value is wanted. -(Auto-increment or decrement -occurs if the number register is used with a plus or minus sign, -\fB\en+[XXX]\fP or \fB\en-[XXX]\fP.) -.sp -Strings is defined with \fBds\fP. -.br +(Auto-increment or auto-decrement occurs if the number register is +used with a plus or minus sign, +.BI \[rs]n+[ XXX ] +or +.BI \[rs]n-[ XXX ]\fR.)\fP +. +.LP +Strings are defined with +.BR ds . +. +.RS +.LP \fB\&.ds\fP \fIYYY string\fP -.br -The string is assigned everything to the end of the line, even blanks. -Initial blanks in \fIstring\fP should be prefixed with -a double-quote. -(Strings are used in the text as \fB\e*[YYY]\fP.) -.sp -\fBSpecial formatting of number registers\fP -.br +.RE +. +.LP +The string is assigned everything to the end of the line, +even blanks. +Initial blanks in +.I string +should be prefixed with a double-quote. +(Strings are used in the text as +.BI \[rs]*[ YYY ]\fR.)\fP +. +. +.SS "Special formatting of number registers" +. A number register is printed with normal digits if no format has been given. -Set the format with \fBaf\fP: -.br -\fB\&.af\fP \fIR c\fP -.br -\fIR\fP is the name of the register, \fIc\fP is the format. -.in +.5i -.T2 \fBForm\fP -\fBSequence\fP -.T2 1 -0, 1, 2, 3, ... -.T2 001 -000, 001, 002, 003, ... -.T2 i -0, i, ii, iii, iv, ... -.T2 I -0, I, II, III, IV, ... -.T2 a -0, a, b, c, ..., z, aa, ab, ... -.T2 A -0, A, B, C, ..., Z, AA, AB, ... -.in - +Set the format with +.BR af : +. +.RS .LP -\fBMacros:\fP -.TP -.B ")E level text" -Adds \fBtext\fP (heading-text) to the table of contents -with \fBlevel\fP either 0 -or between 1-7. -See also \fB.H\fP. -This macro is used for customized -table of contents. +.BI .af\ "R c" +.RE +. +.LP +.I R\c +\~is the name of the register, +.I c\c +\~is the format. +. +.RS +.LP +.TS +tab(@); +lb lb +l l. +Form@Sequence +1@0, 1, 2, 3, .\|.\|. +001@000, 001, 002, 003, .\|.\|. +i@0, i, ii, iii, iv, .\|.\|. +I@0, I, II, III, IV, .\|.\|. +a@0, a, b, c, .\|.\|., z, aa, ab, .\|.\|. +A@0, A, B, C, .\|.\|., Z, AA, AB, .\|.\|. +.TE +.RE +. +. +.SS Fonts +. +In +.BR m@TMAC_M_PREFIX@m , +the fonts (or rather, font styles) +.B R\c +\~(normal), +.B I\c +\~(italic), and +.B B\c +\~(bold) are hardwired to font positions +.BR 1 , +.BR 2 , +and\~\c +.BR 3 , +respectively. +Internally, font positions are used for backwards compatibility. +From a practical point of view it doesn't make a big difference \[en] +a different font family can still be selected with a call to the +.B .fam +request or using +.BR groff 's +.B \-f +command line option. +On the other hand, if you want to replace just, say, font +.BR B , +you have to replace the font at position\~2 (with a call to +`.fp\~2\~.\|.\|.'). +. +. +.SS Macros +. .TP -.B "1C [1]" -Begin one column processing. -An \fB1\fP as argument disables the page-break. -Use wide footnotes, small footnotes may be overprinted. +.BI )E\ "level text" +Add heading text +.I text +to the table of contents with +.IR level , +which is either\~0 or in the range 1 to\~7. +See also +.BR .H . +This macro is used for customized tables of contents. +. +.TP +.BR 1C\ [ 1 ] +Begin one-column processing. +A\~\c +.B 1 +as an argument disables the page break. +Use wide footnotes, +small footnotes may be overprinted. +. .TP .B 2C -Begin two column processing. +Begin two-column processing. Splits the page in two columns. -It is -a special case of \fBMC\fP. -See also \fB1C\fP. +It is a special case of +.BR MC . +See also +.BR 1C . +. .TP .B AE -Abstract end, see \fBAS\fP. -.TP -.B "AF [name of firm]" -Authors firm, should be called before \fBAU\fP, see also \fBCOVER\fP. -.TP -.B "AL [type [text-indent [1]]]" -Start autoincrement list. -Items are numbered beginning on one. -The \fItype\fP argument controls the type of numbers. -.in +.5i -.T2 Arg -Description -.T2 1 -Arabic (the default) -.T2 A -Upper-case letters (A-Z) -.T2 a -Lower-case letters (a-z) -.T2 I -Upper-case roman -.T2 i -Lower-case roman -.in -\fIText-indent\fP sets the indent and overrides \fBLi\fP. -A third argument will prohibit printing of a blank line before each -item. -.TP -.B "APP name text" -Begin an appendix with name \fIname\fP. +Abstract end, +see +.BR AS . +. +.TP +.BI AF\ \fR[\fP name-of-firm \fR]\fP +Author's firm, should be called before +.BR AU , +see also +.BR COVER . +. +.TP +.BI AL\ \fR[\fPtype\ \fR[\fPtext-indent\ \fR[\fP1\fR]]]\fP +Start auto-increment list. +Items are numbered beginning with one. +The +.I type +argument controls the format of numbers. +. +.RS +.IP +.TS +tab(@); +lb lb +l l. +Arg@Description +1@Arabic (the default) +A@Upper-case letters (A-Z) +a@Lower-case letters (a-z) +I@Upper-case roman +i@Lower-case roman +.TE +.RE +. +.IP +.I text-indent +sets the indentation and overrides +.BR Li . +A third argument prohibits printing of a blank line before each item. +. +.TP +.BI APP\ "name text" +Begin an appendix with name +.IR name . Automatic naming occurs if -\fIname\fP is "". -The appendixes starts with \fBA\fP if auto is used. -An new page is ejected, and a header is also produced if the number -variable \fBAph\fP is non-zero. +.I name +is +.BR \[dq]\[dq] . +The appendices start with\~\c +.B A +if automatic naming is used. +A new page is ejected, +and a header is also produced if the number variable +.B Aph +is non-zero. This is the default. -The appendix always appear in the 'List of contents' with correct -pagenumber. -The name \fIAPPENDIX\fP can be changed by setting -the string \fBApp\fP to the desired text. -The string \fBApptxt\fP contains the current appendix text. -.TP -.B "APPSK name pages text" -Same as \fB.APP\fP, but the pagenr is incremented with \fIpages\fP. +The appendix always appears in the `List of contents' with correct +page numbers. +The name `APPENDIX' can be changed by setting the string +.B App +to the desired text. +The string +.B Apptxt +contains the current appendix text. +. +.TP +.BI APPSK\ "name pages text" +Same as +.BR .APP , +but the page number is incremented with +.IR pages . This is used when diagrams or other non-formatted documents are -included as appendixes. +included as appendices. +. .TP -.B "AS [arg [indent]]" +.BI AS\ "\fR[\fParg \fR[\fPindent\fR]]\fP" Abstract start. -Indent is specified in 'ens', but scaling is allowed. -Argument \fIarg\fP controls where the abstract is printed. -.in +.5i -.T2 Arg -Placement -.T2 0 -Abstract will be printed on page 1 and on the cover sheet if -used in the released-paper style (\fBMT 4\fP), otherwise -it will be printed on page 1 without a cover sheet. -.T2 1 -Abstract will only be printed on the cover sheet (\fBMT 4\fP only). -.T2 2 -Abstract will be printed only on the cover sheet (other than \fBMT 4\fP only). -The cover sheet is printed without need for \fBCS\fP. -.in -Abstract is not printed at all in external letters (\fBMT 5\fP). -The \fIindent\fP controls the indentation of both margins, otherwise -will normal text indent be used. -.TP -.B "AST [title]" +Indentation is specified in `ens', +but scaling is allowed. +Argument +.I arg +controls where the abstract is printed. +. +.RS +.TS +tab(@); +lb lb +l lx. +\fBArg@Placement\fP +0@T{ +Abstract is printed on page\~1 and on the cover sheet if used in the +released-paper style (\fBMT 4\fP), +otherwise it is printed on page\~1 without a cover sheet. +T} +1@Abstract is only printed on the cover sheet (\fBMT 4\fP only). +2@T{ +Abstract is printed only on the cover sheet (other than \fBMT 4\fP only). +The cover sheet is printed without a need for \fBCS\fP. +T} +.TE +.RE +. +.IP +An abstract is not printed at all in external letters (\fBMT 5\fP). +The +.I indent +parameter controls the indentation of both margins, +otherwise normal text indentation is used. +. +.TP +.BI AST\ \fR[\fPtitle\fR]\fP Abstract title. -Default is \fBABSTRACT\fP. +Default is `ABSTRACT'. Sets the text above the abstract text. +. .TP -.B "AT title1 [title2 ...]" -Authors title. -\fBAT\fP must appear just after each \fBAU\fP. -The title will show up after the name in the signature block. +.BI AT\ "title1 \fR[\fPtitle2 \fR[.\|.\|.]]\fP" +Author's title. +.B AT +must appear just after each +.BR AU . +The title shows up after the name in the signature block. +. .TP -.B "AU [name [initials [loc [dept [ext [room [arg [arg [arg]]]]]]]]]" -Author information, specifies the author of the memo or paper, and -will be printed on the cover sheet and on other similar places. -\fBAU\fP must not appear before \fBTL\fP. +.BI AU\ "\fR[\fPname \fR[\fPinitials \fR[\fPloc \fR[\fPdept \fR[\fPext \fR[\fProom \fR[\fParg \fR[\fParg \fR[\fParg\fR]]]]]]]]]\fP" +Author information. +Specifies the author of the memo or paper, +and is printed on the cover sheet and on other similar places. +.B AU +must not appear before +.BR TL . The author information can contain initials, location, department, telephone extension, room number or name and up to three extra arguments. +. .TP -.B "AV [name [1]]" -Approval signature, generates an approval line with place for -signature and date. -The string \fBAPPROVED:\fP can be changed -with variable \fBLetapp\fP, and the string \fBDate\fP in \fBLetdate\fP. +.BI AV\ \fR[\fPname\ \fR[\fP1\fR]]\fP +Approval signature. +Generates an approval line with place for signature and date. +The string `APPROVED:' can be changed with variable +.BR Letapp ; +it is replaced with an empty lin if there is a second argument. +The string `Date' can be changed with variable +.BR Letdate . +. .TP -.B "AVL [name]" -Letter signature, generates a line with place for signature. +.BI AVL\ \fR[\fPname\fR]\fP +Letter signature. +Generates a line with place for signature. +. .TP -.B "B [bold-text [prev-font-text [bold...]]]" +.BI B\ "\fR[\fPbold-text \fR[\fPprev-font-text \fR[\fPbold \fR[.\|.\|.]]]]\fP" Begin boldface. No limit on the number of arguments. -All arguments will be concatenated to one word, the first, third and so -on will be printed in boldface. +All arguments are concatenated to one word; +the first, third and so on is printed in boldface. +. .TP .B B1 Begin box (as the ms macro). Draws a box around the text. -The text will be indented one character, -and the right margin will be one character shorter. +The text is indented one character, +and the right margin is one character shorter. +. .TP .B B2 End box. -Finish the box started by \fBB1\fP. +Finishes the box started with +.BR B1 . +. .TP .B BE -End bottom block, see \fBBS\fP. +End bottom block, +see +.BR BS . +. .TP -.B "BI [bold-text [italic-text [bold-text [...]]]]" +.BI BI\ "\fR[\fPbold-text \fR[\fPitalic-text \fR[\fPbold-text \fR[.\|.\|.]]]]\fP" Bold-italic. -No limit on the number of arguments, see \fBB\fP. -.TP -.B "BL [text-indent [1]]" -Start bullet list, initialize a list with a bullet and a space -in the beginning of each list item (see \fBLI\fP). -\fIText-indent\fP -overrides the default indentation of the list items set by -number register \fBPi\fP. -A third argument will prohibit printing of a blank line before each -item. -.TP -.B "BR [bold-text [roman-text [bold-text [...]]]]" +No limit on the number of arguments, +see\~\c +.BR B . +. +.TP +.BI BL\ \fR[\fPtext-indent\ \fR[\fP1\fR]]\fP +Start bullet list. +Initializes a list with a bullet and a space in the beginning of each +list item (see +.BR LI ). +.I text-indent +overrides the default indentation of the list items set by number register +.BR Pi . +A third argument prohibits printing of a blank line before each item. +. +.TP +.BI BR\ "\fR[\fPbold-text \fR[\fProman-text \fR[\fPbold-text \fR[.\|.\|.]]]]\fP" Bold-roman. No limit on the number of arguments. +. .TP .B BS Bottom block start. -Begins the definition of a text block which is -printed at the bottom of each page. -Block ends with \fBBE\fP. -.TP -.B "BVL text-indent [mark-indent [1]]" -Start of -broken variable-item list. -Broken variable-item list has no fixed mark, it assumes that -every \fBLI\fP has a mark instead. -The text will always begin at the next line after the mark. -\fIText-indent\fP sets the indent to the text, and \fImark-indent\fP -the distance from the current indent to the mark. -A third argument will prohibit printing of a blank line before each -item. -.TP -.B "COVER [arg]" -\&\fBCOVER\fP begins a coversheet definition. -It is important -that \fB.COVER\fP appears before any normal text. -\&\fB.COVER\fP uses \fIarg\fP to build the filename -@TMAC_MDIR@/\fIarg\fP.cov. -Therefore it is possible to create unlimited -types of coversheets. -\fIms.cov\fP is supposed to look like the \fBms\fP coversheet. -\&\fB.COVER\fP requires a \fB.COVEND\fP at the end of the coverdefinition. -Always use this order of the covermacros: +Begins the definition of a text block which is printed at the bottom +of each page. +The block ends with +.BR BE . +. +.TP +.BI BVL\ "text-indent \fR[\fPmark-indent\ " \fR[\fP1\fR]]\fP +Start of broken variable-item list. +Broken variable-item list has no fixed mark, +it assumes that every +.B LI +has a mark instead. +The text always begins at the next line after the mark. +.I text-indent +sets the indentation to the text, and +.I mark-indent +the distance from the current indentation to the mark. +A third argument prohibits printing of a blank line before each item. +. +.TP +.BI COVER\ \fR[\fParg\fR]\fP +Begin a coversheet definition. +It is important that +.B .COVER +appears before any normal text. +This macro uses +.I arg +to build the filename +`@TMAC_MDIR@/\fIarg\fP.cov'. +Therefore it is possible to create unlimited types of cover sheets. +`ms.cov' is supposed to look like the ms cover sheet. +.B .COVER +requires a +.B .COVEND +at the end of the cover definition. +Always use this order of the cover macros: +. +.RS +.IP .nf \&.COVER \&.TL @@ -296,1800 +487,2991 @@ Always use this order of the covermacros: \&.AE \&.COVEND .fi -However, only \fB.TL\fP and \fB.AU\fP are required. +.RE +. +.IP +However, only +.B .TL +and +.B .AU +are required. +. .TP .B COVEND -This finish the cover description and prints the cover-page. +Finish the cover description and print the cover page. It is defined in the cover file. +. .TP .B DE Display end. -Ends a block of text, display, that begins -with \fBDS\fP or \fBDF\fP. +Ends a block of text or display that begins +with +.B DS +or +.BR DF . +. .TP -.B "DF [format [fill [rindent]]]" +.BI DF\ "\fR[\fPformat \fR[\fPfill \fR[\fPrindent\fR]]]\fP" Begin floating display (no nesting allowed). -A floating display is saved in a queue and is printed in the -order entered. -\fIFormat\fP, \fIfill\fP and \fIrindent\fP is the same -as in \fBDS\fP. -Floating displays are controlled by the two number registers \fBDe\fP -and \fBDf\fP. -.sp -\fBDe register\fP -.in +.5i -.T2 0 +A floating display is saved in a queue and is printed in the order entered. +.IR Format , +.IR fill , +and +.I rindent +are the same as in +.BR DS . +Floating displays are controlled by the two number registers +.B De +and +.BR Df . +. +.IP +.B De register +. +.RS +.IP +.TS +tab(@); +l lx. +0@T{ Nothing special, this is the default. -.T2 1 -A page eject will occur after each printed display, giving only -one display per page and no text following it. -.in -.sp -\fBDf register\fP -.in +.5i -.T2 0 +T} +1@T{ +A page eject occurs after each printed display, +giving only one display per page and no text following it. +T} +.TE +.RE +. +.IP +.B Df register +. +.RS +.IP +.TS +tab(@); +l lx. +0@T{ Displays are printed at the end of each section (when section-page numbering is active) or at the end of the document. -.T2 1 -A new display will be printed on the current page if there is enough -space, otherwise it will be printed at the end of the document. -.T2 2 -One display will be printed at the top of each page or column +T} +1@T{ +A new display is printed on the current page if there is enough space, +otherwise it is printed at the end of the document. +T} +2@T{ +One display is printed at the top of each page or column (in multi-column mode). -.T2 3 -Print one display if there is enough space for it, otherwise it will -be printed at the top of the next page or column. -.T2 4 -Print as many displays that will fit in a new page or column. -A page break will occur between each display if \fBDe\fP is not zero. -.T2 5 +T} +3@T{ +Print one display if there is enough space for it, +otherwise it is printed at the top of the next page or column. +T} +4@T{ +Print as many displays as possible in a new page or column. +A page break occurs between each display if +.B De +is not zero. +T} +5@T{ Fill the current page with displays and the rest beginning at a new page or column. (This is the default.) -A page break will occur between each display +A page break occurs between each display if \fBDe\fP is not zero. -.in +T} +.TE +.RE +.RE +. .TP -.B "DL [text-indent [1 [1]]]" +.BI DL\ \fR[\fPtext-indent\ "\fR[\fP\fB1\fP \fR[\fP\fB1\fP\fR]]]\fP" Dash list start. -Begins a list where each item is printed -after a dash. -\fIText-indent\fP changes the default indentation -of the list items set by -number register \fBPi\fP. -A second argument prevents the empty line between each list item -to be printed. -See \fBLI\fP. -A third argument will prohibit printing of a blank line before each -item. -.TP -.B "DS [format [fill [rindent]]]" +Begins a list where each item is printed after a dash. +.I text-indent +changes the default indentation of the list items set by +number register +.BR Pi . +A second argument prevents an empty line between each list item. +See +.BR LI . +A third argument prohibits printing of a blank line before each item. +. +.TP +.BI DS\ "\fR[\fPformat \fR[\fPfill \fR[\fPrindent\fR]]]\fP" Static display start. -Begins collection of text until \fBDE\fP. -The text is printed together on the same page, unless it is longer -than the height of the page. -\fBDS\fP can be nested to a unlimited depth (reasonably :-). -.sp -\fBformat\fP -.in +.5i -.ds x " -.T2 """""" -No indentation. -.T2 none -No indentation. -.T2 L -No indentation. -.T2 I -Indent text with the value of number register \fBSi\fP. -.T2 C -Center each line -.T2 CB -Center the whole display as a block. -.T2 R -Right adjust the lines. -.T2 RB -Right adjust the whole display as a block -.in -.sp -L, I, C and CB can also be specified as 0, 1, 2 or 3 for compatibility -reasons. -(Don't use it.\ :-) -.sp -\fBfill\fP -.in +.5i -.T2 """""" -Line-filling turned off. -.T2 none -Line-filling turned off. -.T2 N -Line-filling turned off. -.T2 F -Line-filling turned on. -.in -.sp -N and F can also be specified as 0 or 1. -An empty line will normally be printed before and after the -display. -Setting number register \fBDs\fP to 0 will prevent this. -\fIRindent\fP shortens the line length by that amount. +Begins collection of text until +.BR DE . +The text is printed together on the same page, +unless it is longer than the height of the page. +.B DS +can be nested arbitrarily. +. +.IP +.B format +. +.RS +.IP +.TS +tab(@); +l lx. +\[dq]\[dq]@No indentation. +none@No indentation. +L@No indentation. +I@T{ +Indent text with the value of number register +.BR Si . +T} +C@Center each line. +CB@Center the whole display as a block. +R@Right-adjust the lines. +RB@Right-adjust the whole display as a block. +.TE +.RE +. +.IP +The values `L', `I', `C', and `CB' can also be specified as +`0', `1', `2', and `3', respectively, +for compatibility reasons. +. +.IP +.B fill +. +.RS +.IP +.TS +tab(@); +l l. +\[dq]\[dq]@Line-filling turned off. +none@Line-filling turned off. +N@Line-filling turned off. +F@Line-filling turned on. +.TE +.RE +. +.IP +`N' and `F' can also be specified as `0' and `1', respectively. +. +.IP +By default, an empty line is printed before and after the display. +Setting number register +.B Ds +to\~0 prevents this. +.I rindent +shortens the line length by that amount. +. .TP -.B "EC [title [override [flag [refname]]]]" +.BI EC\ "\fR[\fPtitle \fR[\fPoverride \fR[\fPflag \fR[\fPrefname\fR]]]]\fP" Equation title. Sets a title for an equation. -The \fIoverride\fP argument -change the numbering. -.sp -\fBflag\fP -.in +.5i -.T2 none -\fIoverride\fP is a prefix to the number. -.T2 0 -\fIoverride\fP is a prefix to the number. -.T2 1 -\fIoverride\fP is a suffix to the number. -.T2 2 -\fIoverride\fP replaces the number. -.in -\fBEC\fP uses the number register \fBEc\fP as counter. -It is possible to use \fB.af\fP to change the format of the number. -If number register \fBOf\fP is 1, then the format of title -will use a dash instead of a dot after the number. -.br -The string \fBLe\fP controls the title of the -List of Equations, default is \fILIST OF EQUATIONS\fP. -The List of Equations will only be printed if number register \fBLe\fP -is 1, default 0. -The string \fBLiec\fP contains the word \fIEquation\fP, wich -is printed before the number. -If \fIrefname\fP is used, then the equation number is saved with -\&\fB.SETR\fP, and can be retrieved with \fB.GETST\fP \fIrefname\fP. -.br -Special handling of the title will occur if -\fBEC\fP is used inside \fBDS\fP/\fBDE\fP, it will not be -affected by the format of \fBDS\fP. +The +.I override +argument changes the numbering. +. +.IP +.B flag +. +.RS +.IP +.TS +tab(@); +l lx. +none@T{ +.I override +is a prefix to the number. +T} +0@T{ +.I override +is a prefix to the number. +T} +1@T{ +.I override +is a suffix to the number. +T} +2@T{ +.I override +replaces the number. +T} +.TE +.RE +. +.IP +.B EC +uses the number register +.B Ec +as a counter. +It is possible to use +.B .af +to change the format of the number. +If number register +.B Of +is\~1, +the format of title uses a dash instead of a dot after the number. +. +.IP +The string +.B Le +controls the title of the List of Equations; +default is `LIST OF EQUATIONS'. +The List of Equations is only printed if number register +.B Le +is\~1. +The default is\~0. +The string +.B Liec +contains the word `Equation', +which is printed before the number. +If +.I refname +is used, +then the equation number is saved with +.BR .SETR , +and can be retrieved with `\fB.GETST\fP \fIrefname\fP'. +. +.IP +Special handling of the title occurs if +.B EC +is used inside +.BR DS / DE ; +it is not affected by the format of +.BR DS . +. .TP -.B "EF [arg]" -Even-page footer, printed just above the normal page footer -on even pages, see \fBPF\fP. +.BI EF\ \fR[\fParg\fR]\fP +Even-page footer, +printed just above the normal page footer on even pages. +See +.BR PF . +. +.IP +This macro defines string +.BR EOPef . +. .TP -.B "EH [arg]" -Even-page header, printed just below the normal page header -on even pages, see \fBPH\fP. +.BI EH\ \fR[\fParg\fR]\fP +Even-page header, +printed just below the normal page header on even pages. +See +.BR PH . +. +.IP +This macro defines string +.BR TPeh . +. .TP .B EN -Equation end, see \fBEQ\fP. +Equation end, see +.BR EQ . +. .TP .B EOP -End of page user-defined macro. -This macro will be called -instead of the normal printing of the footer. -The macro -will be executed in a separate environment, without any -trap active. -See \fBTP\fP. -.sp -\fBStrings available to EOP\fP -.in +.5i -.T2 EOPf -Argument from \fBPF\fP. -.T2 EOPef -Argument from \fBEF\fP. -.T2 EOPof -Argument from \fBOF\fP. -.in -.TP -.B "EPIC [-L] width height [name]" -\fBEPIC\fP draws a box with the given \fIwidth\fP and \fIheight\fP, it will -also print the text \fIname\fP or a default string if -\fIname\fP is not specified.. -This is used to include external pictures, just give the size -of the picture. -\fB-L\fP will leftadjust the picture, the default is to center adjust. -See \fBPIC\fP -.TP -.B "EQ [label]" +End-of-page user-defined macro. +This macro is called instead of the normal printing of the footer. +The macro is executed in a separate environment, +without any trap active. +See +.BR TP . +. +.IP +.B strings available to EOP +.RS +.TS +tab(@); +l l. +EOPf@argument of \fBPF\fP +EOPef@argument of \fBEF\fP +EOPof@argument of \fBOF\fP +.TE +.RE +. +.TP +.BI EPIC\ "\fR[\fP\fB\-L\fP\fR]\fP width height \fR[\fPname\fR]\fP" +Draw a box with the given +.I width +and +.IR height . +It also prints the text +.I name +or a default string if +.I name +is not specified. +This is used to include external pictures; +just give the size of the picture. +.B \-L +left-adjusts the picture; +the default is to center. +See +.BR PIC . +. +.TP +.BI EQ\ \fR[\fPlabel\fR]\fP Equation start. -\fBEQ\fP/\fBEN\fP are the delimiters for equations written for \fBeqn\fP. -\fBEQ\fP/\fBEN\fP must be inside a \fBDS\fP/\fBDE\fP-pair, except -when \fBEQ\fP is only used to set options in \fBeqn\fP. -The \fIlabel\fP will appear at the right margin of the equation, unless -number register \fBEq\fP is\ 1. -Then the label will appear at the -left margin. -.TP -.B "EX [title [override [flag [refname]]]]" -Exhibit title, arguments are the same as for \fBEC\fP. -\fBEX\fP uses the number register \fBEx\fP as counter. -The string \fBLx\fP controls the title of the -List of Exhibits, default is \fILIST OF EXHIBITS\fP. -The List of Exhibits will only be printed if number register \fBLx\fP -is 1, default 1. -The string \fBLiex\fP contains the word \fIExhibit\fP, which -is printed before the number. -If \fIrefname\fP is used, then the exhibit number is saved with -\&\fB.SETR\fP, and can be retrieved with \fB.GETST\fP \fIrefname\fP. -.br -Special handling of the title will occur if -\fBEX\fP is used inside \fBDS\fP/\fBDE\fP, it will not be -affected by the format of \fBDS\fP. +.BR EQ / EN +are the delimiters for equations written for +.BR @g@eqn (@MAN1EXT@). +.BR EQ / EN +must be inside of a +.BR DS / DE +pair, +except if +.B EQ +is used to set options for +.B @g@eqn +only. +The +.I label +argument appears at the right margin of the equation, +centered vertically within the +.BR DS / DE +block, +unless number register +.B Eq +is\~1. +Then the label appears at the left margin. +.IP +If there are multiple +.BR EQ / EN +blocks within a single +.BR DS / DE +pair, +only the last equation label (if any) is printed. +. .TP -.B "FC [closing]" -Prints \fIYours\ very\ truly,\fP as a formal closing of a letter or -memorandum. -The argument replaces the defualt string. -The default is stored in string variable \fBLetfc\fP. +.BI EX\ "\fR[\fPtitle \fR[\fPoverride \fR[\fPflag \fR[\fPrefname\fR]]]]\fP" +Exhibit title. +The arguments are the same as for +.BR EC . +.B EX +uses the number register +.B Ex +as a counter. +The string +.B Lx +controls the title of the List of Exhibits; +default is `LIST OF EXHIBITS'. +The List of Exhibits is only printed if number register +.B Lx +is\~1, +which is the default. +The string +.B Liex +contains the word `Exhibit', +which is printed before the number. +If +.I refname +is used, the exhibit number is saved with +.BR .SETR , +and can be retrieved with `\fB.GETST\fP \fIrefname\fP'. +. +.IP +Special handling of the title occurs if +.B EX +is used inside +.BR DS / DE ; +it is not affected by the format of +.BR DS . +. +.TP +.BI FC\ \fR[\fPclosing\fR]\fP +Print `Yours\~very\~truly,' as a formal closing of a letter or memorandum. +The argument replaces the default string. +The default is stored in string variable +.BR Letfc . +. .TP -.B "FD [arg [1]]" +.BI FD\ \fR[\fParg\ \fR[\fP1\fR]]\fP Footnote default format. -Controls the hyphenation (hyphen), right margin justification (adjust), -indentation of footnote text (indent). -It can also change the label -justification (ljust). -.sp -.if t .ne 14v -.nf -.ta .5i +.8i +.8i +.8i +.8i -\fBarg hyphen adjust indent ljust\fP -0 no yes yes left -1 yes yes yes left -2 no no yes left -3 yes no yes left -4 no yes no left -5 yes yes no left -6 no no no left -7 yes no no left -8 no yes yes right -9 yes yes yes right -10 no no yes right -11 yes no yes right -.sp -.fi -.DT -Argument greater than or equal to 11 is considered as arg 0. -Default for m@TMAC_M_PREFIX@m is 10. +Controls the hyphenation (hyphen), +right margin justification (adjust), +and indentation of footnote text (indent). +It can also change the label justification (ljust). +. +.RS +.IP +.TS +tab(@); +lb lb lb lb lb +l l l l l. +arg@hyphen@adjust@indent@ljust +0@no@yes@yes@left +1@yes@yes@yes@left +2@no@no@yes@left +3@yes@no@yes@left +4@no@yes@no@left +5@yes@yes@no@left +6@no@no@no@left +7@yes@no@no@left +8@no@yes@yes@right +9@yes@yes@yes@right +10@no@no@yes@right +11@yes@no@yes@right +.TE +.RE +. +.IP +An argument greater than or equal to 11 is considered as value\~0. +Default for +.B m@TMAC_M_PREFIX@m +is 10. +. .TP .B FE Footnote end. +. .TP -.B "FG [title [override [flag [refname]]]]" -Figure title, arguments are the same as for \fBEC\fP. -\fBFG\fP uses the number register \fBFg\fP as counter. -The string \fBLf\fP controls the title of the -List of Figures, default is \fILIST OF FIGURES\fP. -The List of Figures will only be printed if number register \fBLf\fP -is 1, default 1. -The string \fBLifg\fP contains the word \fIFigure\fP, wich -is printed before the number. -If \fIrefname\fP is used, then the figure number is saved with -\&\fB.SETR\fP, and can be retrieved with \fB.GETST\fP \fIrefname\fP. -.br -Special handling of the title will occur if -\fBFG\fP is used inside \fBDS\fP/\fBDE\fP, it will not be -affected by the format of \fBDS\fP. +.BI FG\ "\fR[\fPtitle \fR[\fPoverride \fR[\fPflag \fR[\fPrefname\fR]]]]\fP" +Figure title. +The arguments are the same as for +.BR EC . +.B FG +uses the number register +.B Fg +as a counter. +The string +.B Lf +controls the title of the List of Figures; +default is `LIST OF FIGURES'. +The List of Figures is only printed if number register +.B Lf +is\~1, which is the default. +The string +.B Lifg +contains the word `Figure', +which is printed before the number. +If +.I refname +is used, then the figure number is saved with +.BR .SETR , +and can be retrieved with `\fB.GETST\fP \fIrefname\fP'. +. +.IP +Special handling of the title occurs if +.B FG +is used inside +.BR DS / DE , +it is not affected by the format of +.BR DS . +. .TP -.B "FS [label]" +.BI FS\ \fR[\fPlabel\fR]\fP Footnote start. -The footnote is ended by \fBFE\fP. -Footnotes is normally automatically -numbered, the number is available in string \fBF\fP. -Just add \fB\e*F\fP in the text. -By adding \fIlabel\fP, it is possible -to have other number or names on the footnotes. -Footnotes in displays is now possible. -An empty line separates footnotes, the height of the line -is controlled by number register \fBFs\fP, default value is 1. -.TP -.B "GETHN refname [varname]" -Includes the headernumber where the corresponding \fBSETR\fP \fIrefname\fP +The footnote is ended by +.BR FE . +By default, footnotes are automatically numbered; +the number is available in string\~\c +.BR F . +Just add +.B \[rs]*F +in the text. +By adding +.IR label , +it is possible to have other number or names on the footnotes. +Footnotes in displays are now possible. +An empty line separates footnotes; +the height of the line is controlled by number register +.BR Fs , +default value is\~1. +. +.TP +.BI GETHN\ "refname \fR[\fPvarname\fR]\fP" +Include the header number where the corresponding `\fBSETR\fP \fIrefname\fP' was placed. -Will be X.X.X. in pass\ 1. -See \fBINITR\fP. -If \fIvarname\fP is used, \fBGETHN\fP sets the stringvariable \fIvarname\fP to the -headernumber. +This is displayed as `X.X.X.' in pass\~1. +See +.BR INITR . +If +.I varname +is used, +.B GETHN +sets the string variable +.I varname +to the header number. +. .TP -.B "GETPN refname [varname]" -Includes the pagenumber where the corresponding \fBSETR\fP \fIrefname\fP +.BI GETPN\ "refname \fR[\fPvarname\fR]\fP" +Include the page number where the corresponding `\fBSETR\fP \fIrefname\fP' was placed. -Will be 9999 in pass\ 1. -See \fBINITR\fP. -If \fIvarname\fP is used, \fBGETPN\fP sets the stringvariable \fIvarname\fP -to the pagenumber. -.TP -.B "GETR refname" -Combines \fBGETHN\fP and \fBGETPN\fP with the text 'chapter' and ', page'. -The string \fIQrf\fP contains the text for reference: -.ti +.5i -\&.ds Qrf See chapter \e\e*[Qrfh], page \e\e*[Qrfp]. -.br -\fIQrf\fP may be changed to support other languages. -Strings \fIQrfh\fP and \fIQrfp\fP are set by \fBGETR\fP -and contains the page and headernumber. -.TP -.B "GETST refname [varname]" -Includes the string saved with the second argument to \fB.SETR\fP. -Will be dummystring in pass 1. -If varname is used, \fBGETST\fP sets the stringvariable \fIvarname\fP to the -saved string. -See \fBINITR\fP. -.TP -.B "H level [heading-text [heading-suffix]]" +This is displayed as `9999' in pass\~1. +See +.BR INITR . +If +.I varname +is used, +.B GETPN +sets the stringvariable +.I varname +to the page number. +. +.TP +.BI GETR\ refname +Combine +.B GETHN +and +.B GETPN +with the text `chapter' and `,\~page'. +The string +.B Qrf +contains the text for the reference: +. +.RS +.IP +\&.ds Qrf See chapter \[rs]\[rs]*[Qrfh], page \[rs]\[rs]*[Qrfp]. +.RE +. +.IP +.B Qrf +may be changed to support other languages. +Strings +.B Qrfh +and +.B Qrfp +are set by +.B GETR +and contain the page and header number, respectively. +. +.TP +.BI GETST\ "refname \fR[\fPvarname\fR]\fP" +Include the string saved with the second argument to +.BR .SETR . +This is a dummy string in pass\~1. +If +.I varname +is used, +.B GETST +sets it to the saved string. +See +.BR INITR . +. +.TP +.BI H\ "level \fR[\fPheading-text \fR[\fPheading-suffix\fR]]\fP" Numbered section heading. -Section headers can have a level between 1 and 14, level 1 is the -top level. -The text is given in \fIheading-text\fP, and must be -surrounded by double quotes if it contains spaces. -\fBHeading-suffix\fP is added to the header in the text but not in -the table of contents. -This is normally used for footnote marks -and similar things. -Don't use \fB\e*F\fP in \fIheading-suffix\fP, it won't -work. -A manual label must be used, see \fBFS\fP. +Section headers can have a level between 1 and 14; +level\~1 is the top level. +The text is given in +.IR heading-text , +and must be surrounded by double quotes if it contains spaces. +.I heading-suffix +is added to the header in the text but not in the table of contents. +This is normally used for footnote marks and similar things. +Don't use +.B \[rs]*F +in +.IR heading-suffix , +it doesn't work. +A manual label must be used, see +.BR FS . .sp -An eventual paragraph, \fBP\fP, directly after \fBH\fP will be -ignored, \fBH\fP is taking care of spacing and indentation. -.sp -\fBPage ejection before heading\fP -.br -Number register \fBEj\fP controls page ejection before the heading. -Normally, a level one heading gets two blank lines before it, higher levels -gets only one. -A new page is ejected before each -first-level heading if number register \fBEj\fP is 1. -All levels below or equal the value of \fBEj\fP gets a new page. -Default value for \fBEj\fP is 0. -.sp -\fBHeading break level\fP -.br +A call to the paragraph macro\~\c +.B P +directly after\~\c +.B H +is ignored. +.B H\c +\~takes care of spacing and indentation. +. +.IP +.B Page ejection before heading +. +.RS +.IP +Number register +.B Ej +controls page ejection before the heading. +By default, a level-one heading gets two blank lines before it; +higher levels only get one. +A new page is ejected before each first-level heading if number register +.B Ej +is\~1. +All levels below or equal the value of +.B Ej +get a new page. +Default value for +.B Ej +is\~0. +.RE +. +.IP +.B Heading break level +. +.RS +.IP A line break occurs after the heading if the heading level is less -or equal to number register \fBHb\fP. -Default value 2. -.sp -\fBHeading space level\fP -.br +or equal to number register +.BR Hb . +Default value is\~2. +.RE +. +.IP +.B Heading space level +. +.RS +.IP A blank line is inserted after the heading if the heading level is less -or equal to number register \fBHs\fP. -Default value 2. -.sp -Text will follow the heading on the same line if the level is greater -than both \fBHb\fP and \fBHs\fP. -.sp -\fBPost-heading indent\fP -.br +or equal to number register +.BR Hs . +Default value is\~2. +. +.IP +Text follows the heading on the same line if the level is greater +than both +.B Hb +and +.BR Hs . +.RE +. +.IP +.B Post-heading indent +. +.RS +.IP Indentation of the text after the heading is controlled by number -register \fBHi\fP, default value 0. -.sp -\fBHi\fP -.in +.5i -.T2 0 -The text will be left-justified. -.T2 1 -Indentation of the text will follow the value of number register \fBPt\fP, -see \fBP\fP. -.T2 2 -The text will be lined up with the first word of the heading. -.in -.sp -\fBCentered section headings\fP -.br -All headings whose level is equal or below number register \fBHc\fP -and also less than or equal to \fBHb\fP or \fBHs\fP -is centerered. -.sp -\fBFont control of the heading\fP -.br -The font of each heading level is controlled by string \fBHF\fP. -It contains a fontnumber or fontname for each level. -Default -is \fB2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\ 2\fP (all headings in italic). -Could also be written as \fBI\ I\ I\ I\ I\ I\ I\ I\ I\ I\ I\ I\ I\ I\fP. -Note that some other implementations use \fB3\ 3\ 2\ 2\ 2\ 2\ 2\fP as the -default value. -All omitted values are presumed to be a 1. -.sp -\fBPoint size control\fP. -.br -String \fBHP\fP controls the pointsize of each heading, in the -same way as \fBHF\fP controls the font. -A value of 0 selects the default point size. -Default value is \fB0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\fP. -Beware that only the -point size changes, not the vertical size. -That can be controlled by the user specified macro \fBHX\fP and/or -\fBHZ\fP. -.sp -\fBHeading counters\fP -.br -Fourteen number registers, named \fBH1\fP thru \fBH14\fP contains -the counter for each heading level. -The values are printed using arabic numerals, this can be changed -with the macro \fBHM\fP (see below). +register +.BR Hi . +Default value is\~0. +. +.IP +.B Hi +.TS +tab(@); +l lx. +0@The text is left-justified. +1@T{ +Indentation of the text follows the value of number +register +.B Pt , +see +.BR P . +T} +2@T{ +The text is lined up with the first word of the heading. +T} +.TE +. +.IP +.B Centered section headings +. +.RS +.IP +All headings whose level is equal or below number register +.B Hc +and also less than or equal to +.B Hb +or +.B Hs +are centerered. +.RE +. +.IP +.B Font control of the heading +. +.RS +.IP +The font of each heading level is controlled by string +.BR HF . +It contains a font number or font name for each level. +Default value is +. +.RS +.IP +.B 2 2 2 2 2 2 2 2 2 2 2 2 2 2 +.RE +. +.IP +(all headings in italic). +This could also be written as +. +.RS +.IP +.B I I I I I I I I I I I I I I +.RE +. +.IP +Note that some other implementations use +.B 3\~3\~2\~2\~2\~2\~2 +as the default value. +All omitted values are presumed to have value\~1. +.RE +. +.IP +.B Point size control +. +.RS +.IP +String +.B HP +controls the point size of each heading, +in the same way as +.B HF +controls the font. +A value of\~0 selects the default point size. +Default value is +. +.RS +.IP +.B 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +.RE +. +.IP +Beware that only the point size changes, not the vertical size. +The latter can be controlled by the user-specified macros +.B HX +and/or +.BR HZ . +.RE +. +.IP +.B Heading counters +. +.RS +.IP +Fourteen number registers named +.B H1 +up to +.B H14 +contain the counter for each heading level. +The values are printed using arabic numerals; +this can be changed with the macro +.B HM +(see below). All marks are concatenated before printing. -To avoid this, set -number register \fBHt\fP to\ 1. -That will only print the current -heading counter at each heading. -.sp -\fBAutomatic table of contents\fP -.br -All headings whose level is equal or below number register \fBCl\fP -is saved to be printed in the table of contents. -Default value is\ 2. -.sp -\fBSpecial control of the heading, user-defined macros\fP. -.br -These macros can be defined by the user to get a finer control -of vertical spacing, fonts or other features. -Argument \fIlevel\fP is the level-argument to \fBH\fP, but -0 for unnumbered headings (see \fBHU\fP). -Argument \fIrlevel\fP is the real level, it is -set to number register \fBHu\fP for unnumbered headings. -Argument \fIheading-text\fP is the text argument to \fBH\fP and \fBHU\fP. -.sp -\fBHX\ \fP\fIlevel\ rlevel\ heading-text\fP -.br -\fBHX\fP is called just before the printing of the heading. -The following register is available for \fBHX\fP. -\fBHX\fP may alter \fB}0\fP, \fB}2\fP and \fB;3\fP. -.in +.5i -.T3 "string }0" -Contains the heading mark plus two spaces if \fIrlevel\fP is non-zero, +To avoid this, +set number register +.B Ht +to\~1. +This only prints the current heading counter at each heading. +.RE +. +.IP +.B Automatic table of contents +. +.RS +.IP +All headings whose level is equal or below number register +.B Cl +are saved to be printed in the table of contents. +Default value is\~2. +.RE +. +.IP +.B Special control of the heading, user-defined macros +. +.RS +.IP +The following macros can be defined by the user to get a finer control +of vertical spacing, fonts, or other features. +Argument +.I level +is the level-argument to\~\c +.BR H , +but\~0 for unnumbered headings (see +.BR HU ). +Argument +.I rlevel +is the real level; +it is set to number register +.B Hu +for unnumbered headings. +Argument +.I heading-text +is the text argument to +.B H +and +.BR HU . +. +.RS +.TP +.BI HX\ "level rlevel heading-text" +This macro is called just before the printing of the heading. +The following registers are available for +.BR HX . +Note that +.B HX +may alter +.BR }0 , +.BR }2 , +and +.BR ;3 . +. +.RS +.TP +.BR }0\ (string) +Contains the heading mark plus two spaces if +.I rlevel +is non-zero, otherwise empty. -.T3 "register ;0" +. +.TP +.BR ;0\ (register) Contains the position of the text after the heading. -0 means that the text should follow the heading on the same line, 1 -means that a line break should occur before the text and -2 means that a blank line should separate the heading and the text. -.T3 "string }2" -Contains two spaces if register \fB;0\fP is\ 0. -It is used to -separate the heading from the text. -The string -is empty if \fB;0\fP is non-zero. -.T3 "register ;3" +0\~means that the text should follow the heading on the same line, +1\~means that a line break should occur before the text, +and 2\~means that a blank line should separate the heading and the text. +. +.TP +.BR }2\ (string) +Contains two spaces if register +.B ;0 +is\~0. +It is used to separate the heading from the text. +The string is empty if +.B ;0 +is non-zero. +. +.TP +.BR ;3\ (register) Contains the needed space in units after the heading. Default is 2v. - -Can be used to change things like numbering (\fB}0\fP), -vertical spacing (\fB}2\fP) +Can be used to change things like numbering +.RB ( }0 ), +vertical spacing +.RB ( }2 ), and the needed space after the heading. -.in -.sp -\fBHY\ \fP\fIdlevel\ rlevel\ heading-text\fP -.br -\fBHY\fP is called after size and font calculations and +.RE +. +.TP +.BI HY\ "dlevel rlevel heading-text" +This macro is called after size and font calculations and might be used to change indentation. -.sp -\fBHZ\ \fP\fIdlevel\ rlevel\ heading-text\fP -.br -\fBHZ\fP is called after the printing of the heading, just before -\fBH\fP or \fBHU\fP exits. -Could be used to change the page header according to the section heading. +. .TP -.B "HC [hyphenation-character]" +.BI HZ\ "dlevel rlevel heading-text" +This macro is called after the printing of the heading, +just before +.B H +or +.B HU +exits. +Can be used to change the page header according to the section heading. +.RE +.RE +. +.TP +.BI HC\ \fR[\fPhyphenation-character\fR]\fP Set hyphenation character. -Default value is \e%. +Default value is `\[rs]%'. Resets to the default if called without argument. Hyphenation can be turned off by setting number -register \fBHy\fP to 0 in the beginning of the file. +register +.B Hy +to\~0 at the beginning of the file. +. .TP -.B "HM [arg1 [arg2 [... [arg14]]]]" +.BI HM\ "\fR[\fParg1 \fR[\fParg2 \fR[.\|.\|.\& [\fParg14\fR]]]]\fP" Heading mark style. Controls the type of marking for printing of the heading counters. -Default is 1 for all levels. -.sp -\fBArgument\fP -.in +.5i -.T2 1 -Arabic numerals. -.T2 0001 -Arabic numerals with leading zeroes, one or more. -.T2 A -Upper-case alphabetic -.T2 a -Lower-case alphabetic -.T2 I -Upper-case roman numerals -.T2 i -lower-case roman numerals -.T2 \fIempty\fP -Arabic numerals. -.in -.TP -.B "HU heading-text" +Default is\~1 for all levels. +. +.IP +.B Argument +. +.TS +tab(@); +l l. +1@Arabic numerals. +0001@Arabic numerals with leading zeroes, one or more. +A@upper-case alphabetic +a@lower-case alphabetic +I@upper-case roman numerals +i@lower-case roman numerals +\[dq]\[dq]@Arabic numerals. +.TE +. +.TP +.BI HU\ heading-text Unnumbered section header. -\fBHU\fP behavies like \fBH\fP at the level in number register \fBHu\fP. -See \fBH\fP. +.B HU +behaves like +.B H +at the level in number register +.BR Hu . +See\~\c +.BR H . +. .TP -.B "HX dlevel rlevel heading-text" -Userdefined heading exit. +.BI HX\ "dlevel rlevel heading-text" +User-defined heading exit. Called just before printing the header. -See \fBH\fP. +See\~\c +.BR H . +. .TP -.B "HY dlevel rlevel heading-text" -Userdefined heading exit. +.BI HY\ "dlevel rlevel heading-text" +User-defined heading exit. Called just before printing the header. -See \fBH\fP. +See\~\c +.BR H . +. .TP -.B "HZ dlevel rlevel heading-text" -Userdefined heading exit. +.BI HZ\ "dlevel rlevel heading-text" +User-defined heading exit. Called just after printing the header. -See \fBH\fP. +See\~\c +.BR H . +. .TP -.B "I [italic-text [prev-font-text [italic-text [...]]]]" +.BI I\ "\fR[\fPitalic-text \fR[\fPprev-font-text \fR[\fPitalic-text \fR[.\|.\|.]]]]\fP" Italic. Changes the font to italic if called without arguments. -With one argument it will set the word in italic. -With two argument it will concatenate them and set the first +With one argument it sets the word in italic. +With two arguments it concatenates them and sets the first word in italic and the second in the previous font. -There is no limit on the number of argument, all will be concatenated. +There is no limit on the number of argument; +all are concatenated. +. .TP -.B "IA [addressee-name [title]]" -Begins specification of the addressee and addressee's address in +.BI IA\ "\fR[\fPaddressee-name \fR[\fPtitle\fR]]\fP" +Begin specification of the addressee and addressee's address in letter style. -Several names can be specified with empty \fBIA\fP/\fBIE\fP-pairs, but -only one address. -See \fBLT\fP. +Several names can be specified with empty +.BR IA / IE -pairs, +but only one address. +See +.BR LT . +. .TP -.B "IB [italic-text [bold-text [italic-text [...]]]]" +.BI IB\ "\fR[\fPitalic-text \fR[\fPbold-text \fR[\fPitalic-text \fR[.\|.\|.]]]]\fP" Italic-bold. -Even arguments is printed in italic, odd in boldface. -See \fBI\fP. +Even arguments are printed in italic, odd in boldface. +See\~\c +.BR I . +. .TP .B IE -Ends the address-specification after \fPIA\fP. -.TP -.B "INITI type filename [macro]" -Initialize the new index system, sets the filename to collect -index lines in with \fBIND\fP. -Argument \fItype\fP selects -the type of index, page number, header marks or both. -The default is \fIN\fP. - +End the address specification after +.BR IA . +. +.TP +.BI INITI\ "type filename \fR[\fPmacro\fR]\fP" +Initialize the new index system and set the filename to collect +index lines in with +.BR IND . +Argument +.I type +selects the type of index: +page number, header marks or both. +The default is page numbers. +. +.IP It is also possible to create a macro that is responsible -for formatting each row. -Add the name of the macro as argument\ 3. -The macro will be called with the index as argument(s). -.sp -\fBtype\fP -.in +.5i -.T2 N -Page numbers -.T2 H -Header marks -.T2 B -Both page numbers and header marks, tab separated -.in -.TP -.B "INITR filename" -Initialize the refencemacros. -References will be written to stderr and is supposed to -be written to \fIfilename.qrf\fP. -Requires two passes with groff, this is handled by a -separate program called \fBmmroff\fP, the reason is that -groff is often installed without the unsafe operations that -\fBINITR\fP requiered. -The first pass looks for references and the second one includes them. -\fBINITR\fP can be used several times, but it is only the first -occurrence of \fBINITR\fP that is active. - -See also \fBSETR\fP, \fBGETPN\fP and \fBGETHN\fP. +for formatting each row; +just add the name of the macro as a third argument. +The macro is then called with the index as argument(s). +. +.IP +.B type +. +.IP +.TS +tab(@); +l lx. +N@Page numbers +H@Header marks +B@T{ +Both page numbers and header marks, +separated with a tab character. +T} +.TE +. +.TP +.BI INITR\ filename +Initialize the refence macros. +References are written to stderr and are supposed to +be written to `\fIfilename\fR.qrf'. +Requires two passes with groff; +this is handled by a separate program called +.BR mmroff (@MAN1EXT@). +This program exists because +.BR groff (@MAN1EXT@) +by default deactivates the unsafe operations that are required by +.BR INITR . +The first pass looks for references, +and the second one includes them. +.B INITR +can be used several times, +but it is only the first occurrence of +.B INITR +that is active. +. +.IP +See also +.BR SETR , +.BR GETPN , +and +.BR GETHN . +. .TP -.B "IND arg1 [arg2 [...]]" -\fBIND\fP writes a line in the index file selected by \fBINITI\fP +.BI IND\ "arg1 \fR[\fParg2 \fR[.\|.\|.]]\fP" +Write a line in the index file selected by +.B INITI with all arguments and the page number or header mark separated by tabs. -.in +.5i -\fBExamples\fP -.br -arg1\etpage number +. +.RS +.IP +.B Examples +. +.IP +arg1\[rs]tpage number .br -arg1\etarg2\etpage number +arg1\[rs]targ2\[rs]tpage number .br -arg1\etheader mark +arg1\[rs]theader mark .br -arg1\etpage number\etheader mark -.in -.TP -.B "INDP" -\fBINDP\fP prints the index by running the command specified -by string variable \fBIndcmd\fP, normally \fIsort\ -t\et\fP. -\fBINDP\fP reads the output from the command to form -the index, normally in two columns (can be changed by defining \fBTYIND\fP). -The index is printed with string variable \fBIndex\fP as header, -default is \fBINDEX\fP. -One-column processing is -returned after the list. -\fBINDP\fP will call the -user-defined macros \fBTXIND\fP, \fBTYIND\fP and \fBTZIND\fP if defined. -\fBTXIND\fP is called before printing \fBINDEX\fP, \fBTYIND\fP -is called instead of printing \fBINDEX\fP. -\fBTZIND\fP is called -after the printing and should take care of restoring to normal +arg1\[rs]tpage number\[rs]theader mark +.RE +. +.TP +.B INDP +Print the index by running the command specified +by string variable +.BR Indcmd , +which has `sort\ \-t\[rs]t' as the default value. +.B INDP +reads the output from the command to form the index, +by default in two columns (this can be changed by defining +.BR TYIND ). +The index is printed with string variable +.B Index +as header, +default is `INDEX'. +One-column processing is reactivated after the list. +.B INDP +calls the user-defined macros +.BR TXIND , +.BR TYIND , +and +.B TZIND +if defined. +.B TXIND +is called before printing the string `INDEX', +.B TYIND +is called instead of printing `INDEX', and +.B TZIND +is called after the printing and should take care of restoring to normal operation again. +. .TP -.B "ISODATE [0]" -\fBISODATE\fP changes the predefined date string in \fBDT\fP to -ISO-format, ie YYYY-MM-DD. -This can also be done by -adding \fB-rIso=1\fP on the command line. -Reverts to old date format if argument is \fB0\fP. +.B ISODATE \fR[\fP0\fR]\fP +Change the predefined date string in +.B DT +to ISO-format, this is, `YYYY-MM-DD'. +This can also be done by adding +.B \-rIso=1 +on the command line. +Reverts to old date format if argument is\~\c +.BR 0 . +. .TP -.B "IR [italic-text [roman-text [italic-text [...]]]]" +.BI IR\ "\fR[\fPitalic-text \fR[\fProman-text \fR[\fPitalic-text \fR[.\|.\|.]]]]\fP" Italic-roman. -Even arguments is printed in italic, odd in roman. -See \fBI\fP. +Even arguments are printed in italic, odd in roman. +See\~\c +.BR I . +. .TP -.B "LB text-indent mark-indent pad type [mark [LI-space [LB-space]]]" -List begin macro. +.BI LB\ "text-indent mark-indent pad type \fR[\fPmark \fR[\fPLI-space \fR[\fPLB-space\fR]]]\fP" +List-begin macro. This is the common macro used for all lists. -\fIText-indent\fP is the number of spaces to indent the text from the -current indent. -.sp -\fIPad\fP and \fImark-indent\fP controls where to put the mark. -The mark is placed within the mark area, and \fImark-indent\fP +.I text-indent +is the number of spaces to indent the text from the current indentation. +. +.IP +.I pad +and +.I mark-indent +control where to put the mark. +The mark is placed within the mark area, +and +.I mark-indent sets the number of spaces before this area. -It is normally\ 0. +By default it is\~0. The mark area ends where the text begins. The start of the text -is still controlled by \fItext-indent\fP. -.sp -The mark is left justified whitin the mark area if \fIpad\fP is 0. -If \fIpad\fP is greater than 0, then \fImark-indent\fP is ignored, and -the mark is placed \fIpad\fP spaces before the text. -This will right justify the mark. -.sp -If \fItype\fP is 0 the list will have either a hanging indent or, if -argument \fImark\fP is given, the string \fImark\fP as mark. -.sp -If \fItype\fP is greater than 0 automatic numbering will occur, arabic -if \fImark\fP is empty. -\fIMark\fP can then be any of \fB1\fP, \fBA\fP, -\fBa\fP, \fBI\fP or \fBi\fP. -.sp -\fIType\fP selects one of six possible ways to display the mark. +is still controlled by +.IR text-indent . +. +.IP +The mark is left-justified whitin the mark area if +.I pad +is\~0. +If +.I pad +is greater than\~0, +.I mark-indent +is ignored, +and the mark is placed +.I pad +spaces before the text. +This right-justifies the mark. +. +.IP +If +.I type +is\~0 the list either has a hanging indentation or, +if argument +.I mark +is given, +the string +.I mark +as a mark. +. +.IP +If +.I type +is greater than\~0 automatic numbering occurs, +using arabic numbers if +.I mark +is empty. +.I mark +can then be any of `1', `A', `a', `I', or `i'. +. +.IP +.I type +selects one of six possible ways to display the mark. +. +.IP +.B type +. +.RS +.IP .br -\fBtype\fP -.in +.6i -.T2 1 -x. -.T2 2 -x) -.T2 3 -(x) -.T2 4 -[x] -.T2 5 - -.T2 6 -{x} -.in -.sp -Every item in the list will get \fILI-space\fP number of blank lines -before them. -Default is\ 1. -.sp -\fBLB\fP itself will print \fILB-space\fP blank lines. -Default is\ 0. +.TS +tab(@); +l l. +1@x. +2@x) +3@(x) +4@[x] +5@ +6@{x} +.TE +.RE +. +.IP +Every item in the list gets +.I LI-space +number of blank lines before them. +Default is\~1. +. +.IP +.B LB +itself prints +.I LB-space +blank lines. +Default is\~0. +. .TP -.B "LC [list-level]" +.BI LC\ \fR[\fPlist-level\fR]\fP List-status clear. -Terminates all current active lists down to \fIlist-level\fP, or 0 -if no argmuent is given. -This is used by \fBH\fP to clear any -active list. +Terminates all current active lists down to +.IR list-level , +or\~0 if no argmuent is given. +This is used by\~\c +.B H +to clear any active list. +. .TP -.B "LE [1]" +.B LE \fR[\fP1\fR]\fP List end. -Terminate the current list. -\fBLE\fP outputs a blank line -if an argument is given. -.TP -.B "LI [mark [1]]" -List item precedes every item in a list. -Without argument \fBLI\fP -will print the mark determined by the current list type. +Terminates the current list. +.B LE +outputs a blank line if an argument is given. +. +.TP +.BI LI\ \fR[\fPmark\ \fR[\fP1\fR|\fP2\fR]]\fP +List item preceding every item in a list. +Without argument, +.B LI +prints the mark determined by the current list type. By giving -\fBLI\fP one argument, it will use that as the mark instead. -Two arguments to \fBLI\fP will make \fImark\fP a prefix to -the current mark. -There will be no separating space between the prefix -and the mark if the second argument is \fB2\fP instead of \fB1\fP. +.B LI +one argument, it uses that as the mark instead. +Two arguments to +.B LI +makes +.I mark +a prefix to the current mark. +There is no separating space between the prefix +and the mark if the second argument is `2' instead of `1'. This behaviour can also be achieved by setting number register -\fBLimsp\fP to zero. -A zero length \fImark\fP will make a hanging -indent instead. -.sp -A blank line is normally printed before the list item. -This behaviour -can be controlled by number register \fBLs\fP. -Pre-spacing -will occur for each list-level less than or equal to \fBLs\fP. -Default value is\ 99. -(Nesting of lists is unlimited.\ :-) -.sp -The indentation can be changed thru number register \fBLi\fP. -Default is 6. -.sp -All lists begins with a list initialization macro, \fBLB\fP. -There are, however, seven predefined listtypes to -make lists easier to use. -They all call \fBLB\fP with different -default values. -.in +.5i -.T2 \fBAL\fP -Automatically Incremented List -.T2 \fBML\fP -Marked List -.T2 \fBVL\fP -Variable-Item List -.T2 \fBBL\fP -Bullet List -.T2 \fBDL\fP -Dash List -.T2 \fBRL\fP -Reference List -.T2 \fBBVL\fP -Broken Varable List. -.in +.B Limsp +to zero. +A zero length +.I mark +makes a hanging indentation instead. +. +.IP +A blank line is printed before the list item by default. +This behaviour can be controlled by number register +.BR Ls . +Pre-spacing occurs for each list level less than or equal to +.BR Ls . +Default value is 99. +There is no nesting limit. +. +.IP +The indentation can be changed through number register +.BR Li . +Default is\~6. +. +.IP +All lists begin with a list initialization macro, +.BR LB . +There are, however, seven predefined list types to make lists easier to use. +They all call +.B LB +with different default values. +. +.RS +.IP +.TS +tab(@); +l l. +\fBAL\fP@Automatically Incremented List +\fBML\fP@Marked List +\fBVL\fP@Variable-Item List +\fBBL\fP@Bullet List +\fBDL\fP@Dash List +\fBRL\fP@Reference List +\fBBVL\fP@Broken Variable List. +.TE +.RE +. +.IP These lists are described at other places in this manual. -See also \fBLB\fP. +See also +.BR LB . +. .TP -.B "LT [arg]" -Formats a letter in one of four different styles depending +.BI LT\ \fR[\fIarg\fR]\fI +Format a letter in one of four different styles depending on the argument. -See also \fBINTERNALS\fP. -.in +.5i -.T2 \fBArg -Style\fP -.T2 BL +See also section +.BR INTERNALS . +. +.RS +.IP +.TS +tab(@); +lb lb +l lx. +Arg@Style +BL@T{ Blocked. Date line, return address, writer's address and closing begins at the center of the line. All other lines begin at the left margin. -.T2 SB +T} +SB@T{ Semi-blocked. -Same as blocked, except that the first line in every -paragraph is indented five spaces. -.T2 FB +Same as blocked, +except that the first line in every paragraph is indented five spaces. +T} +FB@T{ Full-blocked. All lines begin at the left margin. -.T2 SP +T} +SP@T{ Simplified. Almost the same as the full-blocked style. -Subject and -the writer's identification are printed in all-capital. -.in +Subject and the writer's identification are printed in all-capital. +T} +.TE +.RE +. .TP -.B "LO type [arg]" -Specify options in letter (see \fB.LT\fP). +.BI LO\ "type \fR[\fParg\fR]\fP" +Specify options in letter (see +.BR .LT ). This is a list of the standard options: -.in +.5i -.T2 CN +. +.RS +.IP +.TS +tab(@); +l lx. +CN@T{ Confidential notation. -Prints \fBCONFIDENTIAL\fP on the second line -below the date line. -Any argument replaces \fBCONFIDENTIAL\fP. -See also string variable \fBLetCN\fP. -.T2 RN +Prints `CONFIDENTIAL' on the second line below the date line. +Any argument replaces `CONFIDENTIAL'. +See also string variable +.BR LetCN . +T} +RN@T{ Reference notation. -Prints \fBIn reference to:\fP and the argument -two lines below the date line. -See also string variable \fBLetRN\fP. -.T2 AT +Prints `In reference to:' and the argument two lines below the date line. +See also string variable +.BR LetRN . +T} +AT@T{ Attention. -Prints \fBATTENTION:\fP and the argument below the inside address. -See also string variable \fBLetAT\fP. -.T2 SA +Prints `ATTENTION:' and the argument below the inside address. +See also string variable +.BR LetAT . +T} +SA@T{ Salutation. -Prints \fBTo Whom It May Concern:\fP or the argument if -it was present. +Prints `To Whom It May Concern:' or the argument if it was present. The salutation is printed two lines below the inside address. -See also string variable \fBLetSA\fP. -.T2 SJ +See also string variable +.BR LetSA . +T} +SJ@T{ Subject line. -Prints the argument as subject prefixed with \fBSUBJECT:\fP -two lines below the inside address, except in letter type \fBSP\fP. -Then the subject is printed in all-captial without any prefix. -See also string variable \fBLetSJ\fP. -.in +Prints the argument as subject prefixed with `SUBJECT:' +two lines below the inside address, +except in letter type `SP', +where the subject is printed in all-capital without any prefix. +See also string variable +.BR LetSJ . +T} +.TE +.RE +. .TP -.B "MC column-size [column-separation] " +.BI MC\ "column-size \fR[\fPcolumn-separation\fR]\fP" Begin multiple columns. -Return to normal with \fB1C\fP. -\fBMC\fP will create as many columns as the current line length permits. -\fIColumn-size\fP is the width of each column, and \fIcolumn-separation\fP +Return to normal with +.BR 1C . +.B MC +creates as many columns as the current line length permits. +.I column-size +is the width of each column, +and +.I column-separation is the space between two columns. -Default separation is the -column-size/15. -See also \fB1C\fP. +Default separation is +.IR column-size /15. +See also +.BR 1C . +. .TP -.B "ML mark [text-indent [1]]" +.BI ML\ "mark \fR[\fPtext-indent\ " \fR[\fP1\fR]]\fP Marked list start. -The \fImark\fP argument will be printed before -each list item. -\fIText-indent\fP sets the indent and overrides \fBLi\fP. -A third argument will prohibit printing of a blank line before each -item. +The +.I mark +argument is printed before each list item. +.I text-indent +sets the indent and overrides +.BR Li . +A third argument prohibits printing of a blank line before each item. +. .TP -.B "MT [arg [addressee]]" +.BI MT\ "\fR[\fParg \fR[\fPaddressee\fR]]\fP" Memorandum type. -The \fIarg\fP is part of a filename in \fI@TMAC_MDIR@/*.MT\fP. -Memorandum type 0 thru 5 are supported, including \fI"string"\fP. -\fIAddressee\fP just sets a variable, used in the AT&T macros. -.br -\fBarg\fP -.in +.5i -.T2 0 -Normal memorandum, no type printed -.T2 1 -Memorandum with \fIMEMORANDUM FOR FILE\fP printed -.T2 2 -Memorandum with \fIPROGRAMMER'S NOTES\fP printed -.T2 3 -Memorandum with \fIENGINEER'S NOTES\fP printed -.T2 4 -Released paper style -.T2 5 -External letter style -.in -See also \fBCOVER\fP/\fBCOVEND\fP, a more flexible type of front page. -.TP -.B "MOVE y-pos [x-pos [line-length]]" -Move to a position, pageoffset set to \fIx-pos\fP. -If \fIline-length\fP is not given, the difference between -current and new pageoffset is used. -Use \fBPGFORM\fP without arguments to return to normal. -.TP -.B "MULB cw1 space1 [cw2 space2 [cw3 ...]]" +The argument +.I arg +is part of a filename in `@TMAC_MDIR@/*.MT'. +Memorandum types 0 to\~5 are supported, +including type `string' (which gets internally mapped to type\~6). +.I addressee +just sets a variable, used in the AT&T macros. +. +.IP +.B arg +. +.RS +.IP +.TS +tab(@); +l l. +0@Normal memorandum, no type printed. +1@Memorandum with `MEMORANDUM FOR FILE' printed. +2@Memorandum with `PROGRAMMER'S NOTES' printed. +3@Memorandum with `ENGINEER'S NOTES' printed. +4@Released paper style. +5@External letter style. +.TE +.RE +. +.IP +See also +.BR COVER / COVEND , +a more flexible type of front page. +. +.TP +.BI MOVE\ "y-pos \fR[\fPx-pos \fR[\fPline-length\fR]]\fP" +Move to a position, setting page offset to +.IR x-pos . +If +.I line-length +is not given, the difference between current and new page offset is used. +Use +.B PGFORM +without arguments to return to normal. +. +.TP +.BI MULB\ "cw1 space1 \fR[\fPcw2 space2 \fR[\fPcw3 \fR.\|.\|.]]\fP" Begin a special multi-column mode. -Every columns width must be specified. -Also the space between the columns must be specified. -The last column -does not need any space-definition. -\fBMULB\fP starts a diversion and \fBMULE\fP +All columns widths must be specified. +The space between the columns must be specified also. +The last column does not need any space definition. +.B MULB +starts a diversion, +and +.B MULE ends the diversion and prints the columns. -The unit for width and space is 'n', but \fBMULB\fP accepts all -normal unitspecifications like 'c' and 'i'. -\fBMULB\fP operates in a separate environment. +The unit for the width and space arguments is `n', +but +.B MULB +accepts all normal unit specifications like `c' and `i'. +.B MULB +operates in a separate environment. +. .TP -.B "MULN" +.B MULN Begin the next column. -This is the only way to switch column. +This is the only way to switch the column. +. .TP -.B "MULE" +.B MULE End the multi-column mode and print the columns. +. .TP -.B "nP [type]" +.BI nP\ \fR[\fPtype\fR]\fP Print numbered paragraph with header level two. -See \fB.P\fP. +See +.BR .P . +. .TP -.B "NCOL" -Force printing to the next column, don't use this together with -the \fBMUL*\fP macros, see \fB2C\fP. +.B NCOL +Force printing to the next column. +Don't use this together with the +.B MUL* +macros, see +.BR 2C . +. .TP -.B "NS [arg [1]]" -Prints different types of notations. -The argument selects between -the predefined type of notations. +.BI NS\ \fR[\fParg\ \fR[\fP1\fR]]\fP +Print different types of notations. +The argument selects between the predefined type of notations. If the second argument is available, then the argument becomes the entire notation. -If the argument doesn't exist in the predefined, it will be -printed as \fBCopy (\fP\fIarg\fP\fB) to\fP. -It is possible to add more standard notations, see the string variable -\fBLetns\fP and \fBLetnsdef\fP. -.nf -.in +.5i -.T2 \fBArg -Notation\fP -.T2 \fInone\fP -Copy To -.T2 """"" -Copy To -.T2 1 -Copy To (with att.) to -.T2 2 -Copy To (without att.) to -.T2 3 -Att. -.T2 4 -Atts. -.T2 5 -Enc. -.T2 6 -Encs. -.T2 7 -Under separate cover -.T2 8 -Letter to -.T2 9 -Memorandum to -.T2 10 -Copy (with atts.) to -.T2 11 -Copy (without atts.) to -.T2 12 -Abstract Only to -.T2 13 -Complete Memorandum to -.T2 14 -CC -.in -.fi +If the argument doesn't select a predefined type, +it is printed as `Copy (\fIarg\fP) to'. +It is possible to add more standard notations, +see the string variables +.B Letns +and +.BR Letnsdef . +. +.RS +.IP +.TS +tab(@); +l l. +\fBArg@Notation\fP +\fInone\fP@Copy To +\[dq]\[dq]@Copy To +1@Copy To (with att.\&) to +2@Copy To (without att.\&) to +3@Att. +4@Atts. +5@Enc. +6@Encs. +7@Under separate cover +8@Letter to +9@Memorandum to +10@Copy (with atts.\&) to +11@Copy (without atts.\&) to +12@Abstract Only to +13@Complete Memorandum to +14@CC +.TE +.RE +. .TP -.B "ND new-date" +.BI ND\ new-date New date. -Override the current date. -Date is not -printed if \fInew-date\fP is an empty string. +Overrides the current date. +Date is not printed if +.I new-date +is an empty string. +. .TP -.B "OF [arg]" +.BI OF\ \fR[\fParg\fR]\fP Odd-page footer, a line printed just above the normal footer. -See \fBEF\fP and \fBPF\fP. +See +.B EF +and +.BR PF . +. +.IP +This macro defines string +.BR EOPof . +. .TP -.B "OH [arg]" +.BI OH\ \fR[\fParg\fR]\fP Odd-page header, a line printed just below the normal header. -See \fBEH\fP and \fBPH\fP. +See +.B EH +and +.BR PH . +. +.IP +This macro defines string +.BR TPoh . +. .TP .B OP Make sure that the following text is printed at the top of an odd-numbered page. -Will not output an empty page -if currently at the top of an odd page. +Does not output an empty page if currently at the top of an odd page. +. .TP -.B "P [type]" +.BI P\ \fR[\fPtype\fR]\fP Begin new paragraph. -\fBP\fP without argument will produce left justified text, even -the first line of the paragraph. +.B P\c +\~without argument produces left-justified text, +even the first line of the paragraph. This is the same as setting -\fItype\fP to 0. -If the argument is\ 1, then the first line -of text following \fBP\fP will be indented by the number of -spaces in number register \fBPi\fP, normally 5. -.sp -Instead of giving 1 as argument to \fBP\fP it is possible to set the -paragraph type in number register \fBPt\fP. -Using 0 and\ 1 -will be the same as adding that value to \fBP\fP. -A value of 2 will indent all paragraphs, except after -headings, lists and displays. -.sp -The space between two paragraphs is controlled by number register \fBPs\fP, -and is 1 by default (one blank line). -.TP -.B "PGFORM [linelength [pagelength [pageoffset [1]]]]" -Sets linelength, pagelength and/or pageoffset. -This macro can be used for special formatting, like letterheads -and other. -It is normally the first command in a file, though it's not necessary. -\fBPGFORM\fP can be used without arguments -to reset everything after a \fBMOVE\fP. -A line-break is done unless the fourth argument is given. -This can be used to avoid the pagenumber on the first page while setting -new width and length. +.I type +to\~0. +If the argument is\~1, +the first line of text following\~\c +.B P +is indented by the number of spaces in number register +.BR Pi , +by default\~5. +. +.IP +Instead of giving an argument to\~\c +.B P +it is possible to set the paragraph type in number register +.BR Pt . +Using 0 and\~1 is the same as adding that value to +.BR P . +A value of\~2 indents all paragraphs, +except after headings, lists, and displays +(this value can't be used as an argument to +.B P +itself). +. +.IP +The space between two paragraphs is controlled by number register +.BR Ps , +and is\~1 by default (one blank line). +. +.TP +.BI PGFORM\ "\fR[\fPlinelength \fR[\fPpagelength \fR[\fPpageoffset\ " \fR[\fP1\fR]]]]\fP +Set line length, page length, and/or page offset. +This macro can be used for special formatting, +like letter heads and other. +It is normally the first command in a file, +though it is not necessary. +.B PGFORM +can be used without arguments to reset everything after a +.B MOVE +call. +A line break is done unless the fourth argument is given. +This can be used to avoid the page number on the first page +while setting new width and length. (It seems as if this macro sometimes doesn't work too well. -Use the command line arguments -to change linelength, pagelength and pageoffset instead. -Sorry.) +Use the command line arguments to change +line length, page length, and page offset instead.) +. .TP .B PGNH No header is printed on the next page. -Used to get rid of -the header in letters or other special texts. -This macro must be used before any text to inhibit the pageheader +Used to get rid of the header in letters or other special texts. +This macro must be used before any text to inhibit the page header on the first page. +. .TP -.B "PIC [-L] [-C] [-R] [-I n] filename [width [height]]" -\fBPIC\fP includes a Postscript file in the document. -The macro depends on \fBmmroff\fP and \fBINITR\fP. -\fB-L\fP, \fB-C\fP, \fB-R\fP and \fB-I n\fP adjusts the picture -or indents it. -The optionally \fIwidth\fP and \fIheight\fP +.BI "PIC \fR[\fP\-L\fR] [\fP\-C\fR] [\fP\-R\fR] [\fP\-I\ " "n\fR]\fP filename \fR[\fPwidth \fR[\fPheight\fR]]\fP" +Include a PostScript file in the document. +The macro depends on +.BR mmroff (@MAN1EXT@) +and +.BR INITR . +The arguments +.BR \-L , +.BR \-C , +.BR \-R , +and +.BI \-I\ n +adjust the picture or indent it. +The optional +.I width +and +.I height can also be given to resize the picture. +. .TP .B PE Picture end. -Ends a picture for \fB@TMAC_M_PREFIX@pic\fP, see the manual for \fB@TMAC_M_PREFIX@pic\fP. +Ends a picture for +.BR @g@pic (@MAN1EXT). +. +.TP +.BI PF\ \fR[\fParg\fR]\fP +Page footer. +.B PF +sets the line to be printed at the bottom of each page. +Empty by default. +See +.B PH +for the argument specification. +. +.IP +This macro defines string +.BR EOPf . +. .TP -.B "PF [arg]" -Page footer. -\fBPF\fP sets the line to be printed at the bottom of each page. -Normally empty. -See \fBPH\fP for the argument specification. -.TP -.B "PH [arg]" -Page header, a line printed at the top of each page. -The argument should be specified as "'left-part'center-part'right-part'", -where left-, center- and right-part is printed left-justified, centered -and right justified. -The character \fB%\fP is changed to the current -page number. -The default page-header is "''- % -''", the page -number between two dashes. +.BI PH\ \fR[\fParg\fR]\fP +Page header, +a line printed at the top of each page. +The argument should be specified as +. +.RS +.IP +.RI \[dq]' left-part ' center-part ' right-part '\[dq] +.RE +. +.IP +where +.IR left-part , +.IR center-part, +and +.I right-part +are printed left-justified, centered, and right justified, respectively. +Within the argument to +.BR PH , +the character `%' is changed to the current page number. +The default argument is +. +.RS +.IP +\[dq]''- % -''\[dq] +.RE +. +.IP +which gives the page number between two dashes. +. +.IP +This macro defines string +.BR TPh . +. .TP .B PS Picture start (from pic). -Begins a picture for \fB@g@pic\fP, see -the manual. +Begins a picture for +.BR @g@pic (@MAN1EXT@). +. .TP .B PX -Page-header user-defined exit. -\fBPX\fP is called just after the printing of the page header -in \fIno-space\fP mode. +Page header user-defined exit. +This macro is called just after the printing of the page header in +.I no-space +mode. +. .TP .B R Roman. -Return to roman font, see also \fBI\fP. +Return to roman font, see also\~\c +.BR I . +. .TP -.B "RB [roman-text [bold-text [roman-text [...]]]]" +.BI RB\ "\fR[\fProman-text \fR[\fPbold-text \fR[\fProman-text \fR[.\|.\|.]]]]\fP" Roman-bold. -Even arguments is printed in roman, odd in boldface. -See \fBI\fP. +Even arguments are printed in roman, +odd in boldface. +See\~\c +.BR I . +. .TP -.B "RD [prompt [diversion [string]]]" +.BI RD\ "\fR[\fPprompt \fR[\fPdiversion \fR[\fPstring\fR]]]\fP" Read from standard input to diversion and/or string. -The text will be saved in a diversion named \fIdiversion\fP. +The text is saved in a diversion named +.IR diversion . Recall the text by writing the name of the diversion after a dot on an empty line. -A string will also be defined if -\fIstring\fP is given. -\fIDiversion\fP and/or \fIprompt\fP can -be empty (""). +A string is also defined if +.I string +is given. +.I Diversion +and/or +.I prompt +can be empty (\[dq]\[dq]). +. .TP .B RF Reference end. -Ends a reference definition and returns to normal -processing. -See \fBRS\fP. +Ends a reference definition and returns to normal processing. +See +.BR RS . +. .TP -.B "RI [roman-text [italic-text [roman-text [...]]]]" -Even arguments are printed in roman, odd in italic. -See \fBI\fP. +.BI RI\ "\fR[\fProman-text \fR[\fPitalic-text \fR[\fProman-text \fR[.\|.\|.]]]]\fP" +Print even arguments in roman, odd in italic. +See\~\c +.BR I . +. .TP -.B "RL [text-indent [1]]" +.BI RL\ \fR[\fPtext-indent \fR[\fP1\fR]]\fP Reference list start. -Begins a list where each item is preceded with a automatically -incremented number between -square brackets. -\fIText-indent\fP changes the default indentation. +Begins a list where each item is preceded with an automatically +incremented number between square brackets. +.I text-indent +changes the default indentation. +. .TP -.B "RP [arg1 [arg2]]" +.BI RP\ "\fR[\fParg1 \fR[\fParg2\fR]]\fP" Produce reference page. -\fBRP\fP can be used if a reference page is wanted somewhere in the +This macro can be used if a reference page is wanted somewhere in the document. -It is not needed if \fBTC\fP is used to produce -a table of content. -The reference page will then be printed automatically. -.sp -The reference counter will not be reset if \fIarg1\fP is 1. -.sp -\fIArg2\fP tells \fBRP\fP whether to eject a page or not. -.br -\fBArg2\fP -.in +.5i -.T2 0 -The reference page will be printed on a separate page. -This is -the default. -.T2 1 -Do not eject page after the list. -.T2 2 -Do not eject page before the list. -.T2 3 -Do not eject page before and after the list. -.in -The reference items will be separated by a blank line. -Setting number register \fBLs\fP to 0 will suppress the line. -.sp -The string \fBRp\fP contains the reference page title and -is normally set to \fIREFERENCES\fP. +It is not needed if +.B TC +is used to produce a table of contents. +The reference page is then printed automatically. +. +.IP +The reference counter is not reset if +.I arg1 +is\~1. +. +.IP +.I arg2 +tells +.B RP +whether to eject a page or not. +. +.IP +.B arg2 +. +.RS +.IP +.TS +tab(@); +l lx. +0@T{ +The reference page is printed on a separate page. +This is the default. +T} +1@Do not eject page after the list. +2@Do not eject page before the list. +3@Do not eject page before and after the list. +.TE +.RE +. +.IP +The reference items are separated by a blank line. +Setting number register +.B Ls +to\~0 suppresses the line. +. +.IP +The string +.B Rp +contains the reference page title and is set to `REFERENCES' by default. +. .TP -.B "RS [string-name]" -\fBRS\fP begins an automatically numbered reference definition. -Put the string \fB\e*(Rf\fP where the reference mark -should be and write the reference between \fBRS\fP/\fBRF\fP +.BI RS\ \fR[\fPstring-name\fR]\fP +Begin an automatically numbered reference definition. +Put the string +.B \[rs]*(Rf +where the reference mark should be and write the reference between +.BR RS / RF at next new line after the reference mark. -The reference number -is stored in number register \fB:R\fP. -If \fIstring-name\fP is given, a string with that name -will be defined and contain the current reference mark. -The string can be referenced as \fB\e*[\fIstring-name\fP]\fP later in -the text. -.TP -.B "S [size [spacing]]" +The reference number is stored in number register +.BR :R . +If +.I string-name +is given, +a string with that name is defined and contains the current reference mark. +The string can be referenced as +.BI \[rs]*[ string-name ] +later in the text. +. +.TP +.BI S\ "\fR[\fPsize \fR[\fPspacing\fR]]\fP" Set point size and vertical spacing. -If any argument is equal 'P', then +If any argument is equal to `P', the previous value is used. -A 'C' means current value, and 'D' default value. -If '+' or '-' is used before the value, then increment or decrement of -the current value will be done. +A `C' means current value, +and `D' the default value. +If `+' or `\-' is used before the value, +the current value is incremented or decremented, respectively. +. .TP -.B "SA [arg]" +.BI SA\ \fR[\fParg\fR]\fP Set right-margin justification. -Justification is normally turned on. -No argumenent or \fB0\fP turns off justification, a \fB1\fP turns on -justification. -.TP -.B "SETR refname [string]" -Remember the current header and page-number as \fIrefname\fP. -Saves \fIstring\fP if \fIstring\fP is defined. -\fIstring\fP is retrieved -with \fB.GETST\fP. -See \fBINITR\fP. -.TP -.B "SG [arg [1]]" +Justification is turned on by default. +No argument or value `0' turns off justification, +and `1' turns on justification. +. +.TP +.BI SETR\ "refname \fR[\fPstring\fR]\fP" +Remember the current header and page number as +.IR refname . +Saves +.I string +if +.I string +is defined. +.I string +is retrieved with +.BR .GETST . +See +.BR INITR . +. +.TP +.BI SG\ \fR[\fParg\ \fR[\fP1\fR]]\fP Signature line. Prints the authors name(s) after the formal closing. -The argument will be appended to the reference data, printed -at either the first or last author. +The argument is appended to the reference data, +printed at either the first or last author. The reference data is the location, -department and initials specified with \fB.AU\fP. -It will be printed at the first author if the second argument is given, +department, and initials specified with +.BR .AU . +It is printed at the first author if the second argument is given, otherwise at the last. -No reference data will be printed if the author(s) is specifed -thru \fB.WA\fP/\fB.WE\fP. -See \fBINTERNALS\fP. +No reference data is printed if the author(s) is specified through +.BR .WA / .WE . +See section +.BR INTERNALS . +. .TP -.B "SK [pages]" +.BI SK\ \fR[\fPpages\fR]\fP Skip pages. -If \fIpages\fP is \fB0\fP or omitted, a skip to the next page -will occur unless it is already at the top of a page. -Otherwise it will skip \fIpages\fP pages. +If +.I pages +is\~0 or omitted, +a skip to the next page occurs unless it is already at the top of a page. +Otherwise it skips +.I pages +pages. +. .TP -.B "SM string1 [string2 [string3]]" +.BI SM\ "string1 \fR[\fPstring2 \fR[\fPstring3\fR]]\fP" Make a string smaller. -If \fIstring2\fP is given, \fIstring1\fP will be smaller and \fIstring2\fP -normal, concatenated with \fIstring1\fP. -With three argument, all is -concatenated, but only \fIstring2\fP is made smaller. +If +.I string2 +is given, +.I string1 +is made smaller and +.I string2 +stays at normal size, +concatenated with +.IR string1 . +With three arguments, +everything is concatenated, +but only +.I string2 +is made smaller. +. .TP -.B "SP [lines]" +.BI SP\ \fR[\fPlines\fR]\fP Space vertically. -\fIlines\fP can have any scalingfactor, like \fI3i\fP or -\fI8v\fP. -Several \fBSP\fP in a line will only produce the -maximum number of lines, not the sum. -\fBSP\fP will also be ignored -until the first textline in a page. -Add a \fB\e&\fP before \fBSP\fP +.I lines +can have any scaling factor, +like `3i' or `8v'. +Several +.B SP +calls in a line only produces the maximum number of lines, not the sum. +.B SP +is ignored also until the first text line in a page. +Add +.B \[rs]& +before a call to +.B SP to avoid this. +. .TP .B TAB -reset tabs to every\ 5n. -Normally used to reset any previous tabpositions. -.TP -.B "TB [title [override [flag [refname]]]]" -Table title, arguments are the same as for \fBEC\fP. -\fBTB\fP uses the number register \fBTb\fP as counter. -The string \fBLt\fP controls the title of the -List of Tables, default is \fILIST OF TABLES\fP. -The List of Tables will only be printed if number register \fBLt\fP -is 1, default 1. -The string \fBLitb\fP contains the word \fITABLE\fP, wich -is printed before the number. -.br -Special handling of the title will occur if -\fBTB\fP is used inside \fBDS\fP/\fBDE\fP, it will not be -affected by the format of \fBDS\fP. +Reset tabs to every\ 5n. +Normally used to reset any previous tab positions. +. +.TP +.BI TB\ "\fR[\fPtitle \fR[\fPoverride \fR[\fPflag \fR[\fPrefname\fR]]]]\fP" +Table title. +The arguments are the same as for +.BR EC . +.B TB +uses the number register +.B Tb +as a counter. +The string +.B Lt +controls the title of the List of Tables; +default value is `LIST OF TABLES'. +The List of Tables is only printed if number register +.B Lt +is\~1, which is the default. +The string +.B Litb +contains the word `TABLE', +which is printed before the number. +. +.IP +Special handling of the title occurs if +.B TB +is used inside +.BR DS / DE , +it is not affected by the format of +.BR DS . +. .TP -.B "TC [slevel [spacing [tlevel [tab [h1 [h2 [h3 [h4 [h5]]]]]]]]]" +.BI TC\ "\fR[\fPslevel \fR[\fPspacing \fR[\fPtlevel \fR[\fPtab \fR[\fPh1 \fR[\fPh2 \fR[\fPh3 \fR[\fPh4 \fR[\fPh5\fR]]]]]]]]]\fP" Table of contents. -This macro is normally used at the last line of the document. +This macro is normally used as the last line of the document. It generates a table of contents with headings up to the level -controlled by number register \fBCl\fP. -Note that \fBCl\fP controls -the saving of headings, it has nothing to do with \fBTC\fP. -Headings with level less than or equal to \fIslevel\fP will get -\fIspacing\fP number of lines before them. -Headings with level less than or equal to \fItlevel\fP will have -their page numbers right justified with dots or spaces separating +controlled by number register +.BR Cl . +Note that +.B Cl +controls the saving of headings, +it has nothing to do with +.BR TC . +Headings with a level less than or equal to +.I slevel +get +.I spacing +number of lines before them. +Headings with a level less than or equal to +.I tlevel +have their page numbers right-justified with dots or spaces separating the text and the page number. -Spaces is used if \fItab\fP -is greater than zero, otherwise dots. -Other headings will have the -page number directly at the end of the heading text (\fIragged right\fP). -.sp -The rest of the arguments will be printed, centered, before the +Spaces are used if +.I tab +is greater than zero, +dots otherwise. +Other headings have the page number directly at the end +of the heading text +.RI ( ragged-right ). +. +.IP +The rest of the arguments is printed, centered, before the table of contents. -.sp -The user-defined macros \fBTX\fP and \fBTY\fP are used if \fBTC\fP is called -with at most four arguments. -\fBTX\fP is called before the printing -of \fICONTENTS\fP, and \fBTY\fP is called instead of printing \fICONTENTS\fP. -.sp +. +.IP +The user-defined macros +.B TX +and +.B TY +are used if +.B TC +is called with at most four arguments. +.B TX +is called before the printing of the string `CONTENTS', +and +.B TY +is called instead of printing `CONTENTS'. +. +.IP Equivalent macros can be defined for list of figures, tables, equations -and excibits by defining \fBTXxx\fP or \fBTYxx\fP, where \fBxx\fP -is \fBFg\fP, \fBTB\fP, \fBEC\fP or \fBEX\fP. -.sp -String \fBCi\fP can be set to control the indentations for each heading-level. -It must be scaled, like \fB.ds\ Ci\ .25i\ .5i\ .75i\ 1i\ 1i\fP. -The indentation is normally controlled by the maxlength of headings -in each level. -.sp -All texts can be redefined, new stringvariables -\fILifg\fP, \fILitb\fP, \fILiex\fP, \fILiec\fP and \fILicon\fP contain -"Figure", "TABLE", "Exhibit", "Equation" and "CONTENTS". +and exhibits by defining +.BI TX xx +or +.BI TY xx\fR,\fP +where +.I xx +is `Fg', `TB', `EC', or `EX', respectively. +. +.IP +String +.B Ci +can be set to control the indentations for each heading-level. +It must be scaled, like +. +.RS +.IP +\&.ds Ci .25i .5i .75i 1i 1i +.RE +. +.IP +By default, +the indentation is controlled by the maximum length of headings in each +level. +. +.IP +The string variables +.BR Lifg , +.BR Litb , +.BR Liex , +.BR Liec , +and +.B Licon +contain `Figure', `TABLE', `Exhibit', `Equation', +and `CONTENTS', respectively. These can be redefined to other languages. +. .TP .B TE Table end. -See \fBTS\fP. +See +.BR TS . +. .TP -.B "TH [N]" +.B TH \fR[\fPN\fR]\fP Table header. -See \fBTS\fP. -\fBTH\fP ends the header of the table. -This header will -be printed again if a page-break occurs. -Argument \fIN\fP isn't implemented yet. +See +.BR TS . +.B TH +ends the header of the table. +This header is printed again if a page break occurs. +Argument `N' isn't implemented yet. +. .TP -.B TL [charging-case number(s) [filing-case number(s)]] +.BI TL\ "\fR[\fPcharging-case-number \fR[\fPfiling-case-number\fR]]\fP" Begin title of memorandum. -All text up to the next \fBAU\fP is included in the title. -\fICharging-case number\fP and \fIfiling-case\fP are saved -for use in the front page processing. +All text up to the next +.B AU +is included in the title. +.I charging-case-number +and +.I filing-case-number +are saved for use in the front page processing. +. .TP -.B TM [num1 [num2 [...]]] -Technical memorandumnumbers used in \fB.MT\fP. -Unlimited number -of arguments may be given. +.BI TM\ "\fR[\fPnum1 \fR[\fPnum2 \fR[.\|.\|.]]]\fP" +Technical memorandum numbers used in +.BR .MT . +An unlimited number of arguments may be given. +. .TP .B TP -Top of page user-defined macro. +Top-of-page user-defined macro. This macro is called instead of the normal page header. -It is -possible to get complete control over the header. -Note that header and footer is printed in a separate environment. -Linelength is preserved though. +It is possible to get complete control over the header. +Note that the header and the footer are printed in a separate environment. +Line length is preserved, though. +See +.BR EOP . +. +.IP +.B strings available to TP +.RS +.TS +tab(@); +l l. +TPh@argument of \fBPH\fP +TPeh@argument of \fBEH\fP +TPoh@argument of \fBOH\fP +.TE +.RE +. .TP -.B "TS [H]" +.B TS \fR[\fPH\fR]\fP Table start. -This is the start of a table specification -to \fB@g@tbl\fP. -See separate manual for \fB@g@tbl\fP. -\fBTS\fP ends with \fBTE\fP. -Argument \fIH\fP tells \fBm@TMAC_M_PREFIX@m\fP that the table -has a header. -See \fBTH\fP. +This is the start of a table specification to +.BR @g@tbl (@MAN1EXT@). +.B TS +ends with +.BR TE . +Argument `H' tells +.B m@TMAC_M_PREFIX@m +that the table has a header. +See +.BR TH . +. .TP .B TX -Userdefined table of contents exit. -This macro is called just before \fBTC\fP prints the word \fICONTENTS\fP. -See \fBTC\fP. +User-defined table of contents exit. +This macro is called just before +.B TC +prints the word `CONTENTS'. +See +.BR TC . +. .TP .B TY -Userdefined table of contents exit (no "CONTENTS"). -This macro is called instead of printing \fICONTENTS\fP. -See \fBTC\fP. +User-defined table of contents exit. +This macro is called instead of printing `CONTENTS'. +See +.BR TC . +. .TP -.B VERBON [flag [pointsize [font]]] -Begin verbatim output using courier font. +.BI VERBON\ "\fR[\fPflag \fR[\fPpoint-size \fR[\fPfont\fR]]]\fP" +Begin verbatim output using Courier font. Usually for printing programs. -All character has equal width. -The pointsize can be changed with -the second argument. -By specifying the font-argument -it is possible to use another font instead of courier. -\fIflag\fP controls several special features. -It contains the sum of all wanted features. -.in +.5i -.T2 Value -Description -.T2 1 -Disable the escape-character (\e). -This is normally turned on during -verbose output. -.T2 2 -Add an empty line before the verbose text. -.T2 4 -Add an empty line after the verbose text. -.T2 8 +All characters have equal width. +The point size can be changed with the second argument. +By specifying a third argument it is possible to use another +font instead of Courier. +.I flag +controls several special features. +Its value is the sum of all wanted features. +. +.RS +.IP +.TS +tab(@); +lb lb +l lx. +Arg@Description +1@T{ +Disable the escape character (\[rs]). +This is normally turned on during verbose output. +T} +2@Add an empty line before the verbose text. +4@Add an empty line after the verbose text. +8@T{ Print the verbose text with numbered lines. -This adds four digitsized -spaces in the beginning of each line. -Finer control is available with -the string-variable \fBVerbnm\fP. +This adds four digit-sized spaces in the beginning of each line. +Finer control is available with the string variable +.BR Verbnm . It contains all arguments to the -\fBtroff\fP-command \fB.nm\fP, normally '1'. -.T2 16 -Indent the verbose text with five 'n':s. -This is controlled by the -number-variable \fBVerbin\fP (in units). -.in +.BR troff (@MAN1EXT@) +command +.BR .nm , +normally `1'. +T} +16@T{ +Indent the verbose text by `5n'. +This is controlled by the number-variable +.B Verbin +(in units). +T} +.TE +.RE +. .TP .B VERBOFF End verbatim output. +. +.TP +.BI VL\ "text-indent \fR[\fPmark-indent\ " \fR[\fP1\fR]]\fP +Variable-item list. +It has no fixed mark, +it assumes that every +.B LI +has a mark instead. +.I text-indent +sets the indent to the text, +and +.I mark-indent +the distance from the current indentation to the mark. +A third argument prohibits printing of a blank line before each item. +. +.TP +.BI "VM \fR[\fP\-T\fR] [\fP" "top \fR[\fPbottom\fR]]\fP" +Vertical margin. +Adds extra vertical top and margin space. +Option +.B \-T +sets the total space instead. +If no argument is given, reset the margin to zero, +or the default (`7v 5v') if +.B \-T +has been used. +It is higly recommended that macros +.B TP +and/or +.B EOP +are defined if using +.B \-T +and setting top and/or bottom margin to less than the default. +. .TP -.B "VL text-indent [mark-indent [1]]" -Variable-item list has no fixed mark, it assumes that -every \fBLI\fP have a mark instead. -\fIText-indent\fP sets the indent to the text, and \fImark-indent\fP -the distance from the current indent to the mark. -A third argument will prohibit printing of a blank line before each -item. -.TP -.B "VM [-T] [top [bottom]]" -Vertical margin. Adds extra vertical top and margin space. -Option \fB-T\fP set the total space instead. -No argument resets the margin to zero or the default -\fI(7v 5v)\fP if \fB-T\fP -was used. It is higly recommended that macro \fBTP\fP and/or -\fBEOP\fP are defined -if using \fB-T\fP and setting top and/or bottom margin to less than the default. -.TP -.B "WA [writer-name [title]]" -Begins specification of the writer and writer's address. -Several names can be specified with empty \fBWA\fP/\fBWE\fP-pairs, but -only one address. +.BI WA\ "\fR[\fPwriter-name \fR[\fPtitle\fR]]\fP" +Begin specification of the writer and writer's address. +Several names can be specified with empty +.BR WA / WE +pairs, +but only one address. +. .TP .B WE -Ends the address-specification after \fP.WA\fP. +End the address specification after +.BR .WA . +. .TP -.B "WC [format]" +.BI WC\ "\fR[\fPformat1\fR] [\fPformat2\fR] [.\|.\|.]\fP" Footnote and display width control. -.in +.5i -.T2 N -Set default mode, \fB-WF\fP, \fB-FF\fP, \fB-WD\fP and \fBFB\fP. -.T2 WF +. +.RS +.TS +tab(@); +l lx. +N@T{ +Set default mode which is equal to using the options +.BR \-WF , +.BR \-FF , +.BR \-WD , +and +.BR FB . +T} +WF@T{ Wide footnotes, wide also in two-column mode. -.T2 -WF -Normal footnote width, follow column mode. -.T2 FF +T} +-WF@Normal footnote width, follow column mode. +FF@T{ All footnotes gets the same width as the first footnote encountered. -.T2 -FF +T} +-FF@T{ Normal footnotes, width follows \fBWF\fP and \fB-WF\fP. -.T2 WD +T} +WD@T{ Wide displays, wide also in two-column mode. -.T2 -WD +T} +-WD@T{ Normal display width, follow column mode. -.T2 FB -Floating displays generates a line break when printed on the current page. -.T2 -FB +T} +FB@T{ +Floating displays generates a line break when printed on the current +page. +T} +-FB@T{ Floating displays does not generate line break. -.in -.sp 3 -.LP -.\"######################################################################## -.LP -.B "Strings used in m@TMAC_M_PREFIX@m:" +T} +.TE +.RE +. +. +.SS "Strings used in m@TMAC_M_PREFIX@m" +. .TP .B App -A string containing the word "APPENDIX". +A string containing the word `APPENDIX'. +. .TP .B Apptxt The current appendix text. +. .TP -.B "EM" +.B EM Em dash string +. .TP .B H1txt -Will be updated by \fB.H\fP and \fB.HU\fP to the current heading text. +Updated by +.B .H +and +.B .HU +to the current heading text. Also updated in table of contents & friends. +. .TP .B HF -Fontlist for headings, normally "2 2 2 2 2 2 2". -Nonnumeric fontnames may also be used. +Font list for headings, `2 2 2 2 2 2 2' by default. +Non-numeric font names may also be used. +. .TP .B HP -Pointsize list for headings. -Normally "0 0 0 0 0 0 0" which is the same as -"10 10 10 10 10 10 10". +Point size list for headings. +By default, this is `0 0 0 0 0 0 0' which is the same as +`10 10 10 10 10 10 10'. +. .TP .B Index -Contains \fIINDEX\fP. +Contains the string `INDEX'. +. .TP .B Indcmd -Contains the index command, \fIsort\ -t\et\fP. +Contains the index command. +Default value is `sort\ \-t\[rs]t'. +. .TP .B Lifg -String containing \fIFigure\fP. +String containing `Figure'. +. .TP .B Litb -String containing \fITABLE\fP. +String containing `TABLE'. +. .TP .B Liex -String containing \fIExhibit\fP. +String containing `Exhibit'. +. .TP .B Liec -String containing \fIEquation\fP. +String containing `Equation'. +. .TP .B Licon -String containing \fICONTENTS\fP. +String containing `CONTENTS'. +. .TP .B Lf -Contains "LIST OF FIGURES". +Contains the string `LIST OF FIGURES'. +. .TP .B Lt -Contains "LIST OF TABLES". +Contains the string `LIST OF TABLES'. +. .TP .B Lx -Contains "LIST OF EXHIBITS". +Contains the string `LIST OF EXHIBITS'. +. .TP .B Le -Contains "LIST OF EQUATIONS". +Contains the string `LIST OF EQUATIONS'. +. .TP .B Letfc -Contains "Yours very truly,", used in \fB.FC\fP. +Contains the string `Yours very truly,', +used in +.BR .FC . +. .TP .B Letapp -Contains "APPROVED:", used in \fB.AV\fP. +Contains the string `APPROVED:', +used in +.BR .AV . +. .TP .B Letdate -Contains "Date", used in \fB.AV\fP. +Contains the string `Date', +used in +.BR .AV . +. .TP .B LetCN -Contains "CONFIDENTIAL", used in \fB.LO CN\fP. +Contains the string `CONFIDENTIAL', +used in +.BR ".LO CN" . +. .TP .B LetSA -Contains "To Whom It May Concern:", used in \fB.LO SA\fP. +Contains the string `To Whom It May Concern:', +used in +.BR ".LO SA" . +. .TP .B LetAT -Contains "ATTENTION:", used in \fB.LO AT\fP. +Contains the string `ATTENTION:', +used in +.BR ".LO AT" . +. .TP .B LetSJ -Contains "SUBJECT:", used in \fB.LO SJ\fP. +Contains the string `SUBJECT:', +used in +.BR ".LO SJ" . +. .TP .B LetRN -Contains "In reference to:", used in \fB.LO RN\fP. +Contains the string `In reference to:', +used in +.BR ".LO RN" . +. .TP .B Letns -is an array containing the different strings used in \fB.NS\fP. -It is really a number of stringvariables prefixed with \fBLetns!\fP. -If the argument doesn't exist, it will be included -between \fB()\fP with \fBLetns!copy\fP as prefix and \fBLetns!to\fP as suffix. -Observe the space after \fBcopy\fP and before \fBto\fP. -.nf -.ta 1.5i -\fBName Value\fP -Letns!0 Copy to -Letns!1 Copy (with att.) to -Letns!2 Copy (without att.) to -Letns!3 Att. -Letns!4 Atts. -Letns!5 Enc. -Letns!6 Encs. -Letns!7 Under separate cover -Letns!8 Letter to -Letns!9 Memorandum to -Letns!10 Copy (with atts.) to -Letns!11 Copy (without atts.) to -Letns!12 Abstract Only to -Letns!13 Complete Memorandum to -Letns!14 CC -Letns!copy Copy " -Letns!to " to -.fi +is an array containing the different strings used in +.BR .NS . +It is really a number of string variables prefixed with +.BR Letns! . +If the argument doesn't exist, +it is included between +.B () +with +.B Letns!copy +as a prefix and +.B Letns!to +as a suffix. +Observe the space after `Copy' and before `to'. +. +.RS +.IP +.TS +tab(@); +lb lb +l l. +Name@Value +Letns!0@Copy to +Letns!1@Copy (with att.\&) to +Letns!2@Copy (without att.\&) to +Letns!3@Att. +Letns!4@Atts. +Letns!5@Enc. +Letns!6@Encs. +Letns!7@Under separate cover +Letns!8@Letter to +Letns!9@Memorandum to +Letns!10@Copy (with atts.\&) to +Letns!11@Copy (without atts.\&) to +Letns!12@Abstract Only to +Letns!13@Complete Memorandum to +Letns!14@CC +Letns!copy@Copy \[rs]" +Letns!to@" to +.TE +.RE +. .TP .B Letnsdef -Defines the standard-notation used when no argument is given -to \fB.NS\fP. -Default is \fB0\fP. +Define the standard notation used when no argument is given to +.BR .NS . +Default is\~0. +. .TP .B "MO1 - MO12" -Strings containing \fIJanuary\fP thru \fIDecember\fP. +Strings containing the month names `January' through `December'. +. .TP .B Qrf -String containing "See chapter \e\e*[Qrfh], page \e\en[Qrfp].". +String containing `See chapter \[rs]\[rs]*[Qrfh], page \[rs]\[rs]n[Qrfp].'. +. .TP .B Rp -Contains "REFERENCES". +Contains the string `REFERENCES'. +. .TP .B Tcst -Contains current status of table of contents and list of XXXX. -Empty outside \fB.TC\fP. -Useful in user-defined macros like \fB.TP\fP. -.nf -.ta 1.5i -\fBValue Meaning\fP -co Table of contents -fg List of figures -tb List of tables -ec List of equations -ex List of exhibits -ap Appendix -.fi -.ta +Contains the current status of the table of contents and list of figures, +etc. +Empty outside of +.BR .TC . +Useful in user-defined macros like +.BR .TP . +. +.RS +.IP +.TS +tab(@); +lb lb +l l. +Value@Meaning +co@Table of contents +fg@List of figures +tb@List of tables +ec@List of equations +ex@List of exhibits +ap@Appendix +.TE +.RE +. .TP .B Tm -Contains \e(tm, trade mark. +Contains the string `\[rs](tm', the trade mark symbol. +. .TP .B Verbnm -Argument to \fB.nm\fP in \fB.VERBON\fP, default: \fB1\fP. -.\"----------------------------------- -.LP -.B "Number variables used in m@TMAC_M_PREFIX@m:" +Argument to +.B .nm +in the +.B .VERBON +command. +Default is\~1. +. +. +.SS "Number variables used in m@TMAC_M_PREFIX@m" +. .TP .B Aph -Print an appendix-page for every new appendix -if this numbervariable is non-zero. -No output will occur if \fBAph\fP is zero, but there will always -be an appendix-entry in the 'List of contents'. +Print an appendix page for every new appendix if this number variable +is non-zero. +No output occurs if +.B Aph +is zero, but there is always an appendix entry in the `List of contents'. +. .TP .B Cl -Contents level [0:14], contents saved if heading level <= Cl, default 2. +Contents level (in the range 0 to 14). +The contents is saved if a heading level is lower than or equal to the +value of +.BR Cl . +Default is\~2. +. .TP .B Cp -Eject page between LIST OF XXXX if Cp == 0, default 0. +Eject page between list of table, list of figure, etc., if the value of +.B Cp +is zero. +Default is\~0. +. .TP .B D -Debugflag, values >0 produces varying degree of debug. -A value of\ 1 -gives information about the progress of formatting, default\ 0. +Debug flag. +Values greater than zero produce debug information of increasing verbosity. +A value of\~1 gives information about the progress of formatting. +Default is\~0. +. .TP .B De -Eject after floating display is output [0:1], default\ 0. +If set to\~1, eject after floating display is output. +Default is\~0. +. .TP .B Dsp -Controls the space output before and after static displays -if defined. -Otherwise is the value of Lsp used. +If defined, it controls the space output before and after static displays. +Otherwise the value of +.B Lsp +is used. +. .TP .B Df -Floating keep output [0:5], default 5. +Control floating keep output. +This is a number in the range 0 to 5, with a default value of\~5. +See +.BR .DF . +. .TP .B Ds -\fBLsp\fP space before and after display if == 1 [0:1], default 1. +If set to\~1, use the amount of space stored in register +.B Lsp +before and after display. +Default is\~1. +. .TP .B Ej -Eject page, default 0. +If set to\~1, eject page before each first-level heading. +Default is\~0. +. .TP .B Eq -Equation lable adjust 0=left, 1=right. -Default\ 0. +Equation labels are left-adjusted if set to\~0 +and right-adjusted if set to\~1. +Default is\~0. +. .TP .B Fs -Footnote spacing, default 1. +Footnote spacing. +Default is\~1. +. .TP -.B "H1-H7" +.B "H1 - H7" Heading counters +. .TP .B H1dot -Append a dot after the level one heading number if >\ 0. -Default is\ 1. +Append a dot after the level-one heading number if value is greater than +zero. +Default is\~1. +. .TP .B H1h -Copy of number register \fBH1\fP, but it is incremented -just before the page break. -Useful in user defined header macros. +A copy of number register +.BR H1 , +but it is incremented just before the page break. +Useful in user-defined header macros. +. .TP .B Hb -Heading break level [0:14], default\ 2. +Heading break level. +A number in the range 0 to 14, +with a default value of\~2. +See\~\c +.BR .H . +. .TP .B Hc -Heading centering level, [0:14]. -Default\ 0. +Heading centering level. +A number in the range 0 to 14, +with a default value value of\~0. +See\~\c +.BR .H . +. .TP .B Hi -Heading temporary indent [0:2], default\ 1. -.br -0\ ->\ 0 indent, left margin -.br -1\ ->\ indent to right , like .P 1 -.br -2\ ->\ indent to line up with text part of preceding heading +Heading temporary indent. +A number in the range 0 to 2, +with a default value of\~1. +. +.RS +.IP +.TS +tab(@); +l lx. +0@no indentation, left margin +1@T{ +indent to the right, similar to +.RB ` ".P 1" ' +T} +2@T{ +indent to line up with text part of preceding heading +T} +.TE +.RE +. .TP .B Hps -Number variable with the heading pre-space level. -If the heading-level -is less than or equal to \fBHps\fP, then two lines will precede the -section heading instead of one. +Heading pre-space level. +If the heading level is less than or equal to +.BR Hps , +two lines precede the section heading instead of one. Default is first level only. -The real amount of lines is controlled by the variables \fBHps1\fP and -\fBHps2\fP. +The real amount of lines is controlled by the variables +.B Hps1 +and +.BR Hps2 . +. .TP .B Hps1 -This is the number of lines preceding \fB.H\fP when the heading-level -is greater than \fBHps\fP. -Value is in units, normally 0.5. +Number of lines preceding +.B .H +if the heading level is greater than +.BR Hps . +Value is in units, default is 0.5. +. .TP .B Hps2 -This is the number of lines preceding \fB.H\fP when the heading-level -is less than or equal to \fBHps\fP. -Value is in units, normally\ 1. +Number of lines preceding +.B .H +if the heading level is less than or equal to +.BR Hps . +Value is in units, default is\~1. +. .TP .B Hs -Heading space level [0:14], default\ 2. +Heading space level. +A number in the range 0 to 14, +with a default value of\~2. +See\~\c +.BR .H . +. .TP .B Hss -This is the number of lines that follows \fB.H\fP when the heading-level -is less than or equal to \fBHs\fP. -Value is in units, normally\ 1. +Number of lines following +.B .H +if the heading level is less than or equal to +.BR Hs . +Value is in units, default is\~1. +. .TP .B Ht -Heading numbering type, default 0. -0 -> multiple (1.1.1 ...) -.br -1 -> single +Heading numbering type. +. +.RS +.IP +.TS +tab(@); +l l. +0@multiple levels (1.1.1, 1.1.2, etc.) +1@single level +.TE +.RE +.IP +Default is\~0. +. .TP .B Hu -Unnumbered heading level, default 2. +Unnumbered heading level. +Default is\~2. +. .TP .B Hy -Hyphenation in body, default 0. -.br -0\ ->\ no hyphenation -.br -1\ ->\ hyphenation 14 on +Hyphenation status of text body. +. +.RS +.IP +.TS +tab(@); +l l. +0@no hyphenation +1@hyphenation on, set to value\~14 +.TE +.RE +. +.IP +Default is\~0. +. .TP .B Iso -Set this variable to 1 on the command line to get ISO-formatted date string. -(\fB-rIso=1\fP) -Useless inside a document. +Set this variable to\~1 on the command line to get an +ISO-formatted date string (\fB\-rIso=1\fP). +Useless inside of a document. +. .TP .B L Page length, only for command line settings. +. .TP .B Letwam -Max lines in return-address, used in \fB.WA\fP/\fB.WE\fP. -Default\ 14. +Maximum lines in return-address, used in +.BR .WA / .WE . +Default is\~14. +. .TP -.B "Lf, Lt, Lx, Le" -Enables (1) or disables (0) the printing of List of figures, -List of tables, List of exhibits and List of equations. -Default: Lf=1, Lt=1, Lx=1, Le=0. +.BR Lf ,\ Lt ,\ Lx ,\ Le +Enable (1) or disable (0) the printing of List of figures, +List of tables, List of exhibits and List of equations, respectively. +Default values are Lf=1, Lt=1, Lx=1, and Le=0. +. .TP .B Li -List indent, used by .AL, default 6. +List indentation, used by +.BR .AL . +Default is\~6. +. .TP .B Limsp -Flag for space between prefix and mark in automatic lists (.AL). -.br -0\ ==\ no space -.br -1\ ==\ space +A flag controlling the insertion of space between prefix and mark in +automatic lists +.RB ( .AL ). +. +.RS +.IP +.TS +tab(@); +l l. +0@no space +1@emit space +.TE +.RE +. .TP .B Ls -List space, if current listlevel > Ls then no spacing will occur around lists. -Default 99. +List space threshold. +If current list level is greater than +.B Ls +no spacing occurs around lists. +Default is\~99. +. .TP .B Lsp -The size of an empty line. -Normally 0.5v, but it is 1v -if \fBn\fP is set (\fB.nroff\fP). +The vertical space used by an empty line. +The default is 0.5v in troff mode and 1v in nroff mode. +. .TP .B N -Numbering style [0:5], default 0. -.br -0\ ==\ (default) normal header for all pages. -.br -1\ ==\ header replaces footer on first page, header is empty. -.br -2\ ==\ page header is removed on the first page. -.br -3\ ==\ "section-page" numbering enabled. -.br -4\ ==\ page header is removed on the first page. -.br -5\ ==\ "section-page" and "section-figure" numbering enabled. -See also the number-register Sectf and Sectp. +Page numbering style. +. +.RS +.IP +.TS +tab(@); +l lx. +0@normal header for all pages. +1@T{ +header replaces footer on first page, header is empty. +T} +2@page header is removed on the first page. +3@`section-page' numbering style enabled. +4@page header is removed on the first page. +5@T{ +`section-page' and `section-figure' numbering style enabled. +T} +.TE +.RE +. +.IP +Default is\~0. +See also the number registers +.B Sectf +and +.BR Sectp . +. .TP .B Np -Numbered paragraphs, default 0. -.br -0\ ==\ not numbered -.br -1\ ==\ numbered in first level headings. +A flag to control whether paragraphs are numbered. +. +.RS +.IP +.TS +tab(@); +l l. +0@not numbered +1@numbered in first-level headings. +.TE +.RE +. +.IP +Default is\~0. +. .TP .B O Page offset, only for command line settings. +. .TP .B Of -Format of figure,table,exhibit,equation titles, default 0. -.br -0\ =\ ". " -.br -1\ =\ " - " +Format of figure, table, exhibit, and equation titles. +. +.RS +.IP +.TS +tab(@); +l l. +0@\[dq]. \[dq] +1@\[dq] - \[dq] +.TE +.RE +. +.IP +Default is\~0. +. .TP .B P -Current page-number, normally the same as % unless "section-page" numbering -is enabled. +Current page-number, normally the same as `%' unless +`section-page' numbering style is enabled. +. .TP .B Pi -paragraph indent, default 5. +Paragraph indentation. +Default is\~5. +. .TP .B Pgps -Controls whether header and footer pointsize should follow the current -setting or just change when the header and footer is defined. -.in +.5i -.ti -.5i -.T2 Value -Description -.T2 0 -Pointsize will only change to the current setting when \fB.PH\fP, \fB.PF\fP, -\&\fB.OH\fP, \fP.EH\fP, \fB.OF\fP or \fB.OE\fP is executed. -.T2 1 -Pointsize will change after every \fB.S\fP. +A flag to control whether header and footer point size should follow +the current settings or just change when the header and footer are defined. +. +.RS +.IP +.TS +tab(@); +l lx. +0@T{ +Point size only changes to the current setting when +.BR .PH , +.BR .PF , +.BR .OH , +.BR .EH , +.BR .OF , +or +.B .OE +is executed. +T} +1@T{ +Point size changes after every +.BR .S . This is the default. -.in +T} +.TE +.RE +. .TP .B Ps -paragraph spacing, default 1. +Paragraph spacing. +Default is\~1. +. .TP .B Pt -Paragraph type, default 0. -.br -0\ ==\ left-justified -.br -1\ ==\ indented .P -.br -2\ ==\ indented .P except after .H, .DE or .LE. +Paragraph type. +. +.RS +.IP +.TS +tab(@); +l lx. +0@left-justified +1@indented paragraphs +2@T{ +indented paragraphs except after +.BR .H , +.BR .DE , +or +.BR .LE . +T} +.TE +.RE +. +.IP +Default is\~0. +. .TP .B Sectf -Flag controlling "section-figures". +A flag controlling `section-figures' numbering style. A non-zero value enables this. -See also register N. +See also register\~\c +.BR N . +. .TP .B Sectp -Flag controlling "section-page-numbers". +A flag controlling `section-page' numbering style. A non-zero value enables this. -See also register N. +See also register\~\c +.BR N . +. .TP .B Si -Display indent, default 5. +Display indentation. +Default is\~5. +. .TP .B Verbin -Indent for \fB.VERBON\fP, default 5n. +Indentation for +.BR .VERBON . +Default is 5n. +. .TP .B W Line length, only for command line settings. +. .TP .B .mgm -Always 1. -.LP +Always\~1. +. +. .SH INTERNALS -The letter macros is using different submacros depending on +. +The letter macros are using different submacros depending on the letter type. The name of the submacro has the letter type as suffix. -It is therefore possible to define other letter types, either -in the national macro-file, or as local additions. -\&\fB.LT\fP will set the number variables \fBPt\fP and \fBPi\fP to 0 and 5. -The following strings and macros must be defined for a new letter type: -.TP -\fBlet@init_\fP\fItype\fP -This macro is called directly by \fB.LT\fP. -It is supposed to initialize -variables and other stuff. -.TP -\fBlet@head_\fP\fItype\fP -This macro prints the letter head, and is called instead of the -normal page header. -It is supposed to remove the alias \fBlet@header\fP, -otherwise it will be called for all pages. -.TP -\fBlet@sg_\fP\fItype\ name\ title\ n\ flag\ [arg1\ [arg2\ [...]]]\fP -\&\fB.SG\fP is calling this macro only for letters, memorandums has -its own processing. -\fIname\fP and \fItitle\fP is specified -thru \fB.WA\fP/\fB.WB\fP. -\fIn\fP is the counter, 1-max, and -\fIflag\fP is true for the last name. -Any other argument to \fB.SG\fP +It is therefore possible to define other letter types, +either in the national macro-file, or as local additions. +.B .LT +sets the number variables +.B Pt +and +.B Pi +to 0 and\~5, respectively. +The following strings and macros must be defined for a new letter type. +. +.TP +.BI let@init_ type +This macro is called directly by +.BR .LT . +It is supposed to initialize variables and other stuff. +. +.TP +.BI let@head_ type +This macro prints the letter head, +and is called instead of the normal page header. +It is supposed to remove the alias +.BR let@header , +otherwise it is called for all pages. +. +.TP +.BI let@sg_ "type name title n flag \fR[\fParg1 \fR[\fParg2 \fR[.\|.\|.]]]\fP" +.B .SG +is calling this macro only for letters; +memorandums have its own processing. +.I name +and +.I title +are specified through +.BR .WA / .WB . +.I n\c +\~is the counter, 1-max, +and +.I flag +is true for the last name. +Any other argument to +.B .SG is appended. +. .TP -\fBlet@fc_\fP\fItype\ closing\fP -This macro is called by \fB.FC\fP, and has the -formal closing as argument. +.BI let@fc_ "type closing" +This macro is called by +.BR .FC , +and has the formal closing as the argument. +. .LP -\&\fB.LO\fP is implemented as a general option-macro. -\fB.LO\fP demands -that a string named \fBLet\fP\fItype\fP is defined, where \fItype\fP +.B .LO +is implemented as a general option-macro. +It demands that a string named +.BI Let type +is defined, where +.I type is the letter type. -\&\fB.LO\fP will then assign the argument to the string -variable \fBlet*lo-\fP\fItype\fP. -.LP +.B .LO +then assigns the argument to the string variable +.BI let*lo- type\fR.\fP +. +. .\".SH BUGS +. +. .SH AUTHOR +. Jörgen Hägg, Lund, Sweden . +. +. .SH FILES +. .TP -.B @MACRODIR@/tmac.@TMAC_M_PREFIX@m +.B @MACRODIR@/@TMAC_M_PREFIX@m.tmac .TP .B @TMAC_MDIR@/*.cov .TP .B @TMAC_MDIR@/*.MT .TP .B @TMAC_MDIR@/locale +. +. .SH "SEE ALSO" +. .BR groff (@MAN1EXT@), .BR @g@troff (@MAN1EXT@), .BR @g@tbl (@MAN1EXT@), diff --git a/contrib/groff/contrib/mm/groff_mmse.man b/contrib/groff/contrib/mm/groff_mmse.man index 511eac5898..812a6af505 100644 --- a/contrib/groff/contrib/mm/groff_mmse.man +++ b/contrib/groff/contrib/mm/groff_mmse.man @@ -1,78 +1,143 @@ +.ig +Copyright (C) 1989, 1990, 2000, 2001, 2006, 2009 + Free Software Foundation, Inc. + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the +entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + +Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be included in +translations approved by the Free Software Foundation instead of in +the original English. +.. +. .\" -.\" $Id: groff_mmse.man,v 2.2 2001/12/09 12:15:09 wlemb Exp $ .\" Skrivet av Jörgen Hägg, Lund, Sverige .\" +. +.mso sv.tmac +. .TH GROFF_MMSE @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@" +. +. .SH NAMN +. groff_mmse \- svenska mm makro för groff +. +. .SH SYNTAX +. .B groff .B \-m@TMAC_M_PREFIX@mse [ -.IR flaggor .\|.\|. +.IR flaggor .\|.\|.\& ] [ -.IR filer .\|.\|. +.IR filer .\|.\|.\& ] +. +. .SH BESKRIVNING -\fBm@TMAC_M_PREFIX@mse\fP är en svensk variant av \fBm@TMAC_M_PREFIX@m\fP. Alla texter -är översatta. En A4 sida får text som är 13 cm bred, 3.5 cm indragning -samt är 28.5 cm hög. +. +.B m@TMAC_M_PREFIX@mse +är en svensk variant av +.BR m@TMAC_M_PREFIX@m . +Alla texter är översatta. +En A4 sida får text som är 13\~cm bred, +3.5\~cm indragning samt är 28.5\~cm hög. Det finns stöd för brevuppställning enligt svensk standard för vänster och högerjusterad text. +. .LP -\fBCOVER\fP kan använda \fIse_ms\fP som argument. Detta ger ett -svenskt försättsblad. -Se \fBgroff_mm(@MAN7EXT@)\fP för övriga detaljer. +.B COVER +kan använda +.I se_ms +som argument. +Detta ger ett svenskt försättsblad. +Se +.BR groff_mm (@MAN7EXT@) +för övriga detaljer. +. +. .SH BREV +. Tillgängliga brevtyper: +. .TP .B ".LT SVV" Vänsterställd löptext med adressat i position T0 (vänsterställt). +. .TP .B ".LT SVH" Högerställd löptext med adressat i position T4 (passar fönsterkuvert). +. .LP Följande extra LO-variabler används. +. .TP -.B ".LO DNAMN\fI namn\fP" +.BI ".LO DNAMN\ " namn Anger dokumentets namn. +. .TP -.br -.B ".LO MDAT\fI datum\fP" -Mottagarens datum, anges under \fBErt datum:\fP (\fBLetMDAT\fP). +.BI ".LO MDAT\ " datum +Mottagarens datum, anges under +.B Ert datum: +.RB ( LetMDAT ). +. .TP -.br -.B ".LO BIL\fI sträng\fP" -Anger bilaga, nummer eller sträng med \fBBilaga\fP (\fBLetBIL\fP) +.BI ".LO BIL\ " sträng +Anger bilaga, nummer eller sträng med +.B Bilaga +.RB ( LetBIL ) som prefix. +. .TP -.br -.B ".LO KOMP\fI text\fP" +.BI ".LO KOMP\ " text Anger kompletteringsuppgift. +. .TP -.br -.B ".LO DBET\fI beteckning\fP" +.BI ".LO DBET\ " beteckning Anger dokumentbeteckning eller dokumentnummer. +. .TP -.br -.B ".LO BET\fI beteckning\fP" +.BI ".LO BET\ " beteckning Anger beteckning (ärendebeteckning i form av diarienummer eller liknande). +. .TP -.br -.B ".LO SIDOR\fI antal\fP" +.BI ".LO SIDOR\ " antal Anger totala antalet sidor och skrivs ut efter sidnumret inom parenteser. +. .LP -Om makrot \fB.TP\fP är definierat anropas det efter utskrift av brevhuvudet. +Om makrot +.B .TP +är definierat anropas det efter utskrift av brevhuvudet. Där lägger man lämpligen in postadress och annat som brevfot. +. +. .SH "SKRIVET AV" +. Jörgen Hägg, Lund, Sweden +. +. .SH FILER -.B @MACRODIR@/tmac.@TMAC_M_PREFIX@mse +. +.TP +.B @MACRODIR@/@TMAC_M_PREFIX@mse.tmac +.TP .B @TMAC_MDIR@/se_*.cov +. +. .SH "SE OCKSÅ" +. .BR groff (@MAN1EXT@), .BR @g@troff (@MAN1EXT@), .BR @g@tbl (@MAN1EXT@), @@ -82,5 +147,6 @@ J .BR groff_mm (@MAN7EXT@) . .\" Local Variables: +.\" coding: latin-1 .\" mode: nroff .\" End: diff --git a/contrib/groff/contrib/mm/m.tmac b/contrib/groff/contrib/mm/m.tmac index db52e93deb..86ae3ca696 100644 --- a/contrib/groff/contrib/mm/m.tmac +++ b/contrib/groff/contrib/mm/m.tmac @@ -3,27 +3,26 @@ .ds RE \\$2 .. .\" -.\" $Id: m.tmac,v 2.26 2005/05/26 06:28:38 wl Exp $ -.@revision $Revision: 2.26 $ +.\" $Id: m.tmac,v 2.36 2009/01/05 20:10:43 wl Exp $ +.@revision $Revision: 2.36 $ .ig -Copyright (C) 1991-2000, 2001, 2002, 2003, 2004, 2005 +Copyright (C) 1991-2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 Free Software Foundation, Inc. mgm is written by Jörgen Hägg mgm is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. mgm is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +You should have received a copy of the GNU General Public License +along with this program. If not, see . Please send bugreports with examples to jh@axis.com. @@ -150,7 +149,7 @@ Index array!index .\" Internal global variables .\" .\" This is for cover macro .MT -.\" .ds @language +.\" .ds @country .\" .nr @copy_type 0 .if r C .nr @copy_type \n[C] @@ -361,7 +360,7 @@ Index array!index .\" .\"--------------------------------------------- .\" set local variables. -.ie d @language .mso mm/\*[@language]_locale +.ie d @country .mso mm/\*[@country]_locale .el .mso mm/locale .\"--------------------------------------------- .if \n[D] .tm Groff mm, version \*[RE]. @@ -434,9 +433,9 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] .if !((\\n[nl]=\\n[hd*last-pos]):(\\n[hd*last-hsize]=\\n[.k])) \{\ . if \\n[D]>2 .tm Paragraph set ind-flag=1 . nr par@ind-flag 1 +. \" any collected unprinted text? +. par@doit \\$* .\} -.\" any collected unprinted text? -.par@doit \\$* .if \\n[Np] \\n[H1].\\n+[par*number]\ \ \c .. .\"------------ @@ -829,7 +828,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] . \" . ne \\n[pict*h]u-1v . \" -. \" these lines are copied and modified from tmac.pspic. +. \" these lines are copied and modified from pspic.tmac. . \" Originally written by James Clark . br . ie \\n[pict*box]>0 \{\ @@ -1233,7 +1232,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] . ie d TP .TP . el \{\ ' sp 3 -. ie ((\\n[%]=1)&((\\n[N]=1):(\\n[N]=2))) .sp +. ie ((\\n[P]=1)&((\\n[N]=1):(\\n[N]=2))) .sp . el .tl \\*[pg*header] . ie o .tl \\*[pg*odd-header] . el .tl \\*[pg*even-header] @@ -1305,11 +1304,13 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] .\" user defined end-of-page macro .ie d EOP .EOP .el \{\ +. vpt 0 . ie o .tl \\*[pg*odd-footer] . el .tl \\*[pg*even-footer] -. ie (\\n[%]=1)&(\\n[N]=1) .tl \\*[pg*header] +. ie (\\n[P]=1)&(\\n[N]=1) .tl \\*[pg*header] . el .tl \\*[pg*footer] . tl ''\\*[Pg_type!\\n[@copy_type]]'' +. vpt 1 .\} .ev .\" be sure that floating displays and footnotes will be @@ -1792,7 +1793,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] .nr ds*snr 0 1\" static display counter .nr ds*lvl 0 1\" display level .nr ds*float-busy 0\" >0 if printing float -.nr df*float 0 >0 if previous display was floating +.nr df*float 0\" >0 if previous display was floating .\"-------------------------------------------- .de DE .ie \\n[df*float] .df@end \\$@ @@ -2076,6 +2077,11 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] .\" there are less than half of the page left. .if \\n[ds*need] .ne \\n[ds*need]u .\" +.\" Print static display +.nr ds*i \\n[Lsp] +.if r Dsp .nr ds*i \\n[Dsp] +.\" +.if \\n[Ds] .sp \\n[ds*i]u .\" check if pending equation label .eq@check \\n[ds*need] 'in \\n[ds*old-in]u @@ -2087,11 +2093,6 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] .if \\n[ds*format]=5 'in (u;\\n[.l]-\\n[ds*width]) .\" ********** .\" -.\" Print static display -.nr ds*i \\n[Lsp] -.if r Dsp .nr ds*i \\n[Dsp] -.\" -.if \\n[Ds] .sp \\n[ds*i]u .ds*div!\\n[ds*snr] .if \\n[Ds] .sp \\n[ds*i]u .\" @@ -2168,7 +2169,6 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] .\" .\" determine where the text begins .nr li*text-begin \\n[li*tind]>?\w@\\*[li*c-mark]\ @ -.nr x \w@\\*[li*c-mark]\ @ .\" .\" determine where the mark begin .ie !\\n[li*pad] .nr li*in \\n[li*mind] @@ -2370,14 +2370,14 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] .if !'\\*[eq*label]'' \{\ . mk . \" space down to middle of equation -' sp (u;\\$1/2) +' sp (u;(\\$1-1v)/2) . ie (\\n[Eq]%2) \{\ . \" label to the left \h'|0'\\*[eq*label] . \} . el \{\ . \" label to the right -\h'|\\n[.l]u'\\*[eq*label] +\h'|\\n[.l]u-\w'\\*[eq*label]'u'\\*[eq*label] . \} . rt .\} @@ -2571,7 +2571,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] . if 0\\$6=2 .ds lix*label \\*[Li\\$1]\ \\$5\\*[lix*ds-form] .\} .\" print line if not between DS/DE -.ie \\n[ds*lvl]<1&\\n[df*float]=0 \{\ +.ie (\\n[ds*lvl]<1)&(\\n[df*float]=0) \{\ . lix@print-text "\\*[lix*label]" "\\*[lix*text]" \\$1 \\$2 \\$7 .\} .el \{\ @@ -2593,7 +2593,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] . ti 0 .\} .el .ce 1 -\fB\\$1\fP\\$2 +\f3\\$1\fP\\$2 .br .ev .\" save line for LIST OF XXX, wth is the width of the label @@ -2616,11 +2616,11 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] \!.ie (\w@\\$1\\$2@)>(\\\\n[.l]-\\\\n[.i]) \{\ . in +\w@\\$1@u \!. ti 0 -\!\fB\\$1\fP\\$2 +\!\f3\\$1\fP\\$2 \!.\} \!.el \{\ . ce 1 -\!\fB\\$1\fP\\$2 +\!\f3\\$1\fP\\$2 \!.\} \!.br \!.ev @@ -2680,7 +2680,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] .\"########################### module fnt ############################ .\" some font macros. .de R -.ft R +.ft 1 .ul 0 .. .\"----------- @@ -2699,30 +2699,30 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] .. .\"----------- .de B -.ie \\n[.$] .fnt@switch \fB \f[\\n[.f]] \\$@ -.el .ft B +.ie \\n[.$] .fnt@switch \f3 \f[\\n[.f]] \\$@ +.el .ft 3 .. .de I -.ie \\n[.$] .fnt@switch \fI \f[\\n[.f]] \\$@ -.el .ft I +.ie \\n[.$] .fnt@switch \f2 \f[\\n[.f]] \\$@ +.el .ft 2 .. .de IB -.if \\n[.$] .fnt@switch \fI \fB \\$@ +.if \\n[.$] .fnt@switch \f2 \f3 \\$@ .. .de BI -.if \\n[.$] .fnt@switch \fB \fI \\$@ +.if \\n[.$] .fnt@switch \f3 \f2 \\$@ .. .de IR -.if \\n[.$] .fnt@switch \fI \fR \\$@ +.if \\n[.$] .fnt@switch \f2 \f1 \\$@ .. .de RI -.if \\n[.$] .fnt@switch \fR \fI \\$@ +.if \\n[.$] .fnt@switch \f1 \f2 \\$@ .. .de RB -.if \\n[.$] .fnt@switch \fR \fB \\$@ +.if \\n[.$] .fnt@switch \f1 \f3 \\$@ .. .de BR -.if \\n[.$] .fnt@switch \fB \fR \\$@ +.if \\n[.$] .fnt@switch \f3 \f1 \\$@ .. .\"########################### module box ############################ .\" draw a box around some text. Text will be kept on the same page. @@ -2846,7 +2846,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] .de ref@print-refs .toc@save 1 "" "\\*[Rp]" \\n[%] .ce -\fI\\*[Rp]\fP +\f2\\*[Rp]\fP .sp .nr ref*ll \\n[.l] .misc@ev-keep ref*ev @@ -2916,15 +2916,15 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] .toc@save 1 "" "\\*[App] \\$1: \\$2" \\n[%] .. .\"------------ -.\" app@heaer name text +.\" app@header name text .de app@header .bp .SP (u;\\n[Lsp]*4) .ce 1 -\s+4\fB\\*[App]\ \\$1\fP\s0 +\s+4\f3\\*[App]\ \\$1\fP\s0 .SP (u;\\n[Lsp]*2) .if \w@\\$2@<\\n[.l] .ce 1 -\fB\s+2\\$2\s0\fP +\f3\s+2\\$2\s0\fP .SP (u;\\n[Lsp]*4) .. .als APPX app@header @@ -3052,7 +3052,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] .el .ds cov*mt-type 1 .ds cov*mt-addresse "\\$2 .ds cov*mt-type-text "\\$1 -.ie d @language .ds cov*str mm/\\*[@language]_ +.ie d @country .ds cov*str mm/\\*[@country]_ .el .ds cov*str mm/ .mso \\*[cov*str]\\*[cov*mt-file!\\*[cov*mt-type]] .. @@ -3060,7 +3060,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%] .ie !\\n[.$] .ds cov*cov-type ms .el .ds cov*cov-type \\$1 .pg@disable-top-trap -.ie d @language .ds cov*str mm/\\*[@language]_\\*[cov*cov-type].cov +.ie d @country .ds cov*str mm/\\*[@country]_\\*[cov*cov-type].cov .el .ds cov*str mm/\\*[cov*cov-type].cov .mso \\*[cov*str] .. diff --git a/contrib/groff/contrib/mm/mm/0.MT b/contrib/groff/contrib/mm/mm/0.MT index 61f1a969c0..64fce36f43 100644 --- a/contrib/groff/contrib/mm/mm/0.MT +++ b/contrib/groff/contrib/mm/mm/0.MT @@ -1,5 +1,26 @@ +.ig + +Copyright (C) 1991-2000, 2009 + Free Software Foundation, Inc. +mgm is written by Jörgen Hägg + +mgm is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +mgm is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +Please send bugreports with examples to jh@axis.com. +.. +. .\"------------ -.\" $Id: 0.MT,v 2.0 2000/09/14 03:40:25 jhaegg Exp $ .\" Cover sheet. Memorandum type 0-3 and "string". .\"------------ .if !r Au .nr Au 1 diff --git a/contrib/groff/contrib/mm/mm/4.MT b/contrib/groff/contrib/mm/mm/4.MT index 78c77661d7..cc0668db34 100644 --- a/contrib/groff/contrib/mm/mm/4.MT +++ b/contrib/groff/contrib/mm/mm/4.MT @@ -1,5 +1,26 @@ +.ig + +Copyright (C) 1991-2000, 2009 + Free Software Foundation, Inc. +mgm is written by Jörgen Hägg + +mgm is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +mgm is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +Please send bugreports with examples to jh@axis.com. +.. +. .\"------------ -.\" $Id: 4.MT,v 2.2 2003/04/02 04:06:40 jhaegg Exp $ .\" Cover sheet. Memorandum type 4 .\"------------ .de cov@print-title diff --git a/contrib/groff/contrib/mm/mm/5.MT b/contrib/groff/contrib/mm/mm/5.MT index a274d234bd..d0c6f1b9d8 100644 --- a/contrib/groff/contrib/mm/mm/5.MT +++ b/contrib/groff/contrib/mm/mm/5.MT @@ -1,5 +1,26 @@ +.ig + +Copyright (C) 1991-2000, 2009 + Free Software Foundation, Inc. +mgm is written by Jörgen Hägg + +mgm is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +mgm is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +Please send bugreports with examples to jh@axis.com. +.. +. .\"------------ -.\" $Id: 5.MT,v 2.0 2000/09/14 03:40:25 jhaegg Exp $ .\" Cover sheet. Memorandum type 5 .\"------------ .nr cov*mt0-ind 1.1c diff --git a/contrib/groff/contrib/mm/mm/ms.cov b/contrib/groff/contrib/mm/mm/ms.cov index 25d4579e2f..1acc3239d4 100644 --- a/contrib/groff/contrib/mm/mm/ms.cov +++ b/contrib/groff/contrib/mm/mm/ms.cov @@ -1,5 +1,26 @@ +.ig + +Copyright (C) 1991-2000, 2005, 2009 + Free Software Foundation, Inc. +mgm is written by Jörgen Hägg + +mgm is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +mgm is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +Please send bugreports with examples to jh@axis.com. +.. +. .\"------------ -.\" $Id: ms.cov,v 2.0 2000/09/14 03:40:25 jhaegg Exp $ .\" Cover sheet. Mostly like ms cover. .\"------------ .de cov@print-title @@ -72,7 +93,7 @@ .cov@print-title .cov@print-authors .cov@print-firm -.cov@print-abstract \\*[cov*abs-name] +.cov@print-abstract "\\*[cov*abs-name]" .cov@print-date .pg@enable-top-trap .bp 1 diff --git a/contrib/groff/contrib/mm/mmroff.man b/contrib/groff/contrib/mm/mmroff.man index a891ff5e82..80b88409b8 100644 --- a/contrib/groff/contrib/mm/mmroff.man +++ b/contrib/groff/contrib/mm/mmroff.man @@ -1,6 +1,23 @@ -.\" -.\" $Id: mmroff.man,v 2.2 2001/12/09 12:15:09 wlemb Exp $ -.\" +.ig +Copyright (C) 1989, 2001, 2009 + Free Software Foundation, Inc. + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the +entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + +Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be included in +translations approved by the Free Software Foundation instead of in +the original English. +.. +. .TH MMROFF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@" .SH NAME mmroff \- reference preprocessor @@ -28,7 +45,7 @@ be run once. Jörgen Hägg, Lund, Sweden . .SH FILES .TP -.B @MACRODIR@/tmac.@TMAC_M_PREFIX@m +.B @MACRODIR@/@TMAC_M_PREFIX@m.tmac .TP .B @TMAC_MDIR@/*.cov .TP diff --git a/contrib/groff/contrib/mm/mmroff.pl b/contrib/groff/contrib/mm/mmroff.pl index f61daa102b..da279b1da9 100644 --- a/contrib/groff/contrib/mm/mmroff.pl +++ b/contrib/groff/contrib/mm/mmroff.pl @@ -1,4 +1,22 @@ #! /usr/bin/perl +# -*- Perl -*- +# Copyright (C) 1989, 2005, 2009 +# Free Software Foundation, Inc. +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . use strict; # runs groff in safe mode, that seems to be the default diff --git a/contrib/groff/contrib/mm/mse.tmac b/contrib/groff/contrib/mm/mse.tmac index de78cb84c4..e90b3465e8 100644 --- a/contrib/groff/contrib/mm/mse.tmac +++ b/contrib/groff/contrib/mm/mse.tmac @@ -1,16 +1,37 @@ -.\" $Id: mse.tmac,v 2.1 2000/11/17 04:26:02 jhaegg Exp $ +.ig + +Copyright (C) 1991, 2006, 2009 + Free Software Foundation, Inc. +mgm is written by Jörgen Hägg + +mgm is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +mgm is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + +Please send bugreports with examples to jh@axis.com. +.. +. +.\" +.\" Swedish version of mm .\" -.\" swedish version of mm .\" See m.tmac for version-information. -.ds @language se +.ds @country se +. .mso m.tmac +.\" The two-letter code for Swedish is `sv', not `se' (this is Northern Sami) +.mso sv.tmac +. .ISODATE -.\" -.ds App Bilaga -.ds Lf Figurer -.ds Lt Tabeller -.ds Lx Uppställningar -.ds Le Ekvationer +. .\" Page length .if !r L .nr @pl 28.5c .\" page width @@ -21,52 +42,7 @@ .ll \n[@ll]u .po \n[@po]u .pl \n[@pl]u -.ds Lifg Figur -.ds Litb Tabell -.ds Liex Uppställning -.ds Liec Ekvation -.ds Licon Innehållsförteckning -.ds Qrf Se kapitel \\*[Qrfh], sidan \\*[Qrfp]. -.ds Rp Referenser -.ds Letfc Vänliga hälsningar -.ds Letapp Godkänd av: -.ds Letdate datum -.ds Letconf KONFIDENTIELLT -.ds Letsal Till vederbörande: -.ds Letatt ATTENTION: -.ds Letsubj Innehåll: -.ds Letref Refererande till: -.\" -.ds Letns!copy Kopia \" space! -.ds Letns!to " till -.ds Letns!0 Kopia till -.ds Letns!1 Kopia (med att.) till -.ds Letns!2 Kopia (utan att.) till -.ds Letns!3 Att. -.ds Letns!4 Atts. -.ds Letns!5 Enc. -.ds Letns!6 Encs. -.ds Letns!7 Annat försättsblad -.ds Letns!8 Brev till -.ds Letns!9 Dokument till -.ds Letns!10 Kopia (med atts.) till -.ds Letns!11 Kopia (utan atts.) till -.ds Letns!12 Endast abstract till -.ds Letns!13 Hela dokumentet till -.ds Letns!14 CC: -.\" -.ds MO1 januari -.ds MO2 februari -.ds MO3 mars -.ds MO4 april -.ds MO5 maj -.ds MO6 juni -.ds MO7 juli -.ds MO8 augusti -.ds MO9 september -.ds MO10 oktober -.ds MO11 november -.ds MO12 december +. .nr pg*footer-size 4\" 1v+footer+even/odd footer+1v .\"------------------------------------------------ .\" Dokumentnamn diff --git a/contrib/groff/contrib/mom/copyright b/contrib/groff/contrib/mom/copyright index 51756d0009..7cefab16e0 100644 --- a/contrib/groff/contrib/mom/copyright +++ b/contrib/groff/contrib/mom/copyright @@ -1,15 +1,15 @@ AUTHOR ------ -Peter Schaffter (peter@faustus.dyn.ca) (ptpi@golden.net) -320 Gordon St. -Fergus, Ontario -CANADA -N1M 2W3 +Peter Schaffter (pschaffter@magma.ca) +3-281, rue de Cannes +Gatineau (QC) +J8T 8B9 ======================================================================== The groff macro file om.tmac and the html documentation pertaining -to it are copyright (c) 2004, 2005 Peter Schaffter. +to it are copyright (c) 2004, 2005, 2006, 2007, 2008, 2009 + Peter Schaffter. om.tmac is issued under the GNU General Public License, a full copy of which can be had at diff --git a/contrib/groff/contrib/mom/groff_mom.man b/contrib/groff/contrib/mom/groff_mom.man index b82fcad718..43d457b486 100644 --- a/contrib/groff/contrib/mom/groff_mom.man +++ b/contrib/groff/contrib/mom/groff_mom.man @@ -1,11 +1,12 @@ .ig This file is part of groff, the GNU roff type-setting system. -Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +Copyright (C) 2002, 2003, 2005, 2008, 2009 + Free Software Foundation, Inc. written by Werner Lemberg Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being this .ig-section and AUTHORS, with no Front-Cover Texts, and with no Back-Cover Texts. @@ -17,8 +18,6 @@ FDL in the main directory of the groff source package. .do nr groff_mom_C \n[.C] .cp 0 . -.mso www.tmac -. .de TQ .br .ns @@ -76,7 +75,9 @@ mom comes with her own (very) complete documentation in HTML format. \[en] a wrapper file that calls om.tmac directly. . .TP -.URL @HTMLDOCDIR@/momdoc/toc.html @HTMLDOCDIR@/momdoc/toc.html +.UR @HTMLDOCDIR@/\:momdoc/\:toc.html +@HTMLDOCDIR@/\:momdoc/\:toc.html +.UE \[en] entry point to the HTML documentation . .TP @@ -88,11 +89,14 @@ mom comes with her own (very) complete documentation in HTML format. . .B mom was written by -.MTO peter@faustus.dyn.ca "Peter Schaffter" . +.MT pschaffter@magma.ca +Peter Schaffter +.ME . Please send bug reports to the -.MTO bug-groff@gnu.org "groff bug mailing list" -or directly to the author, either at the address above or to -.MTO ptpi@golden.net "" . +.MT bug-groff@gnu.org +groff bug mailing list +.ME +or directly to the author at the address, above. . .cp \n[groff_mom_C] . diff --git a/contrib/groff/contrib/mom/om.tmac b/contrib/groff/contrib/mom/om.tmac index 37e9161fd8..211f476524 100644 --- a/contrib/groff/contrib/mom/om.tmac +++ b/contrib/groff/contrib/mom/om.tmac @@ -2,26 +2,26 @@ .ig Mom -- a typesetting/document-processing macro set for groff. -Copyright (C) 2002, 2003 Free Software Foundation, Inc. - Written by Peter Schaffter (peter@faustus.dyn.ca) +Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + Written by Peter Schaffter (pschaffter@magma.ca) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +You should have received a copy of the GNU General Public License +along with this program. If not, see . -Version 1.3-a +Version 1.5-c ------------- Antoine de St-Exupéry asserted that elegance in engineering is achieved not when there is nothing left to add, but when there is @@ -42,17 +42,18 @@ may find other conventions preferable (e.g. NO, X, END, QUIT, etc.). "" in the description of arguments that can be passed to a macro means that any argument turns the feature off. .. +.\" %beginstrip% \# \# ==================================================================== \# \# Check which version of groff is being run .if (\n[.x]\n[.y] < 118) \ -. ab You need GNU troff version 1.18 or higher to run this version of mom. +. ab [mom]: You need GNU troff version 1.18 or higher to run this version of mom. \# Check that GNU troff is being run .if !\n[.g]=1 \ -. ab The mom macros require that you be running GNU troff. +. ab [mom]: The mom macros require that you be running GNU troff. .if \n(.C \ -. ab The groff mom macros do not work in compatibility mode. +. ab [mom]: The groff mom macros do not work in compatibility mode. \# Add supplementary styles .sty \n[.fp] L \" Light Roman .sty \n[.fp] LI \" Light Italic @@ -85,6 +86,11 @@ to a macro means that any argument turns the feature off. .sty \n[.fp] UBL \" Ultra-Black Roman .sty \n[.fp] UBLI \" Ultra-Black Italic \# +\# Instruct grops to use square linecaps and joins. +\# This instruction is also executed in DO_B_MARGIN, NEWPAGE, and HEADER +\# +\X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap' +\# \# ==================================================================== \# \# TYPESETTING MACROS, STRINGS, AND ALIASES @@ -108,6 +114,7 @@ to a macro means that any argument turns the feature off. .ALIAS SPREAD brp .ALIAS ESC_CHAR ec .ALIAS STRING ds +.ALIAS INCLUDE so \# \# ALIASES FOR NUMBER REGISTERS \# ---------------------------- @@ -129,30 +136,28 @@ to a macro means that any argument turns the feature off. .cflags 4 /\(en \" So slash and en-dashes get broken .warn 8192 \# -.ig -About the warn level --------------------- - -There's a lot of testing for the presence of number registers and -strings in this macro file. Many of the registers and strings -pop into and out of existence on the fly. For convenience, I -often use - - .if \\n[whatever] and .if !\\n[whatever] - -to test "if the register exists and is (not) empty." Groff, -encountering such tests when called with the -ww options, emits - - warning: number register whatever not defined. - -Groff also warns about strings similarly tested for. - -The warn level, above, is high in order to shut off those -warnings. If you're futzing in this file and need more verbose -warnings, either comment out ".warn 8192" or set the warnlevel -to the one you need (but be ready for lots of what I've just -described). -.. +\# About the warn level +\# -------------------- +\# +\# There's a lot of testing for the presence of number registers and +\# strings in this macro file. Many of the registers and strings +\# pop into and out of existence on the fly. For convenience, I +\# often use +\# +\# .if \\n[whatever] and .if !\\n[whatever] +\# +\# to test "if the register exists and is (not) empty." Groff, +\# encountering such tests when called with the -ww options, emits +\# +\# warning: number register whatever not defined. +\# +\# Groff also warns about strings similarly tested for. +\# +\# The warn level, above, is high in order to shut off those +\# warnings. If you're futzing in this file and need more verbose +\# warnings, either comment out ".warn 8192" or set the warnlevel +\# to the one you need (but be ready for lots of what I've just +\# described). \# \# ==================================================================== \# @@ -321,6 +326,7 @@ described). . nr #T_MARGIN_LEAD_ADJ \\n[#LEAD]-12000 . ev B_MARGIN . bp +. nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap' . ev .END \# @@ -336,12 +342,19 @@ described). \# breaks to a new page. \# .MAC NEWPAGE END -. br +. ie \\n[#NO_BREAK] \{\ +' br +. rr #NO_BREAK +. \} +. el \{\ +. br +. \} . nr #NEWPAGE 1 . ie \\n[#B_MARGIN_SET]=1 \{\ . ie !\\n[#DOCS]=1 \{\ . ev NP . bp +. nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap' . ev . \} . el \{\ @@ -436,6 +449,7 @@ described). \# to $FAMILY. \# .MAC FAMILY END +. ds $FAMILY \\$1 . if \\n[#PRINT_STYLE]=1 \{\ . fam C . return @@ -447,7 +461,6 @@ described). . if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) \{\ . ds $SAVED_STYLE \\n[.sty] . \} -. ds $FAMILY \\$1 . ft 0 . fam \\*[$FAMILY] . if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) \{\ @@ -456,8 +469,11 @@ described). . ft 0 . \} . \} -. if \\n[#COLLATE]=1 \{\ -. if !r#START \{ .DOC_FAM \\*[$FAMILY] \} +. ie \\n[#PRE_COLLATE]=1 \{ . \} +. el \{\ +. if \\n[#COLLATE]=1 \{\ +. if !r#START \{ .DOC_FAM \\*[$FAMILY] \} +. \} . \} .END \# @@ -470,6 +486,7 @@ described). \# Stores user supplied font in $FONT and sets .ft to $FONT. \# .MAC FT END +. ds $FONT \\$1 . if \\n[#PRINT_STYLE]=1 \{\ . ie '\\$1'I' \{\ . if \\n[#UNDERLINE_ITALIC]=1 \{\ @@ -485,10 +502,9 @@ described). . el \{ .UNDERLINE OFF \} . return . \} -. ds $FONT \\$1 . ft 0 . ft \\*[$FONT] -. if if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) \{\ +. if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) \{\ . if '\\n[.sty]'' \{\ . if !F\\n[.fn] \{\ . if !S\\*[$FONT] \{\ @@ -629,7 +645,7 @@ described). .ds IT \EfI .ds BD \EfB .ds BDI \Ef(BI -.ds PREV \EfP +.ds PREV \Ef[] .ds S \Es \# \# ===================================================================== @@ -655,35 +671,33 @@ described). .END \# \# -.ig -INLINE KERNING AND HORIZONTAL MOVEMENT --------------------------------------- -Kerning - -Inline kerning provides a simple method for users to adjust the -amount of space between any two letters. It's predicated on a -unit of measure "U", which is 1/36 of the current point size as -returned by \n[.ps]. E.g., if the current point size is 18, -\n[.ps] returns 18000u, therefore U=500u. Since U remains -proportional relative to the current point size, the amount -of kerning between two letters as expressed in Us remains -visually similar regardless of changes in point size. - -N.B.--the amount of inline kerning supplied by \*[BU] or -\*[FU] is added to or subtracted from any kerning that already -takes place between two characters when automatic kerning is -turned on. - -In groff v. 1.17.2, it was not possible to pass arguments to macros that -were called with inline escapes, nor thence to evaluate conditional -expressions. Consequently, each pseudo-escape \[BU] had to be defined -separately with ".char". - -As of v. 1.18, one can pass arguments to inline strings/macros, -hence it is now possible to do \*[BU n] where n, inline, is the desired -number of kern units. The original .char definitions have been left in -for backward compatibility with documents created prior to mom-1.1.3c. -.. +\# INLINE KERNING AND HORIZONTAL MOVEMENT +\# -------------------------------------- +\# Kerning +\# +\# Inline kerning provides a simple method for users to adjust the +\# amount of space between any two letters. It's predicated on a +\# unit of measure "U", which is 1/36 of the current point size as +\# returned by \n[.ps]. E.g., if the current point size is 18, +\# \n[.ps] returns 18000u, therefore U=500u. Since U remains +\# proportional relative to the current point size, the amount +\# of kerning between two letters as expressed in Us remains +\# visually similar regardless of changes in point size. +\# +\# N.B.--the amount of inline kerning supplied by \*[BU] or +\# \*[FU] is added to or subtracted from any kerning that already +\# takes place between two characters when automatic kerning is +\# turned on. +\# +\# In groff v. 1.17.2, it was not possible to pass arguments to macros that +\# were called with inline escapes, nor thence to evaluate conditional +\# expressions. Consequently, each pseudo-escape \[BU] had to be defined +\# separately with ".char". +\# +\# As of v. 1.18, one can pass arguments to inline strings/macros, +\# hence it is now possible to do \*[BU n] where n, inline, is the desired +\# number of kern units. The original .char definitions have been left in +\# for backward compatibility with documents created prior to mom-1.1.3c. \# .nr #KERN_UNIT 36 .ds BU \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\\$1u)' @@ -702,15 +716,14 @@ for backward compatibility with documents created prior to mom-1.1.3c. .\} .rr #LOOP \# -.ig -Horizontal movements - -BP1...12.75 and FP1...12.75 move backwards or forwards inline by the -specified number of points. -Left in for backward compatibility with mom-1.1.3c, the -preferred methods for inline horizontal movements are now -\*[BCK ] and \*[FWD ]. -.. +\# Horizontal movements +\# -------------------- +\# BP1...12.75 and FP1...12.75 move backwards or forwards inline by the +\# specified number of points. +\# +\# Left in for backward compatibility with mom-1.1.3c, the +\# preferred methods for inline horizontal movements are now +\# \*[BCK ] and \*[FWD ]. \# .ds BCK \h'-\\$1' .ds FWD \h'\\$1' @@ -822,13 +835,10 @@ preferred methods for inline horizontal movements are now \# \# WHOLE LINE KERNING (RW and EW) \# ----------------------------- -\# -.ig -The line kerning macros are special instances of track kerning, -used where a complete line needs to be tightened (or relaxed) in -order to accomodate or remove one or two more characters -than the default justification permits. -.. +\# The line kerning macros are special instances of track kerning, +\# used where a complete line needs to be tightened (or relaxed) in +\# order to accomodate or remove one or two more characters +\# than the default justification permits. \# \# *Argument: \# @@ -842,24 +852,22 @@ than the default justification permits. \# *Notes: \# Decimal values are acceptable. \# -.ig -The groff documentation is a tad confusing about what unit of -measure is used in track kerning, only that the width of each -character is increased or decreased by the amount(s) passed as -arguments to .tkf, and something about linear function of point -size. In fact, with the way I've put this macro together, it -doesn't matter. All the user needs to know is that a value of -one will produce an unacceptably tight or loose line at most text -point sizes; therefore, effective use of RW and EW is in the -fractional range below 1 (e.g. .25, .5). Given that RW and EW -are for massaging type, a certain amount of experimentation and -previewing is expected and necessary. - -\n(.f holds the current font number, which is acceptable to .tkf. - -RW and EW must be reset to 0 to cancel their effect on subsequent -output lines. -.. +\# The groff documentation is a tad confusing about what unit of +\# measure is used in track kerning, only that the width of each +\# character is increased or decreased by the amount(s) passed as +\# arguments to .tkf, and something about linear function of point +\# size. In fact, with the way I've put this macro together, it +\# doesn't matter. All the user needs to know is that a value of +\# one will produce an unacceptably tight or loose line at most text +\# point sizes; therefore, effective use of RW and EW is in the +\# fractional range below 1 (e.g. .25, .5). Given that RW and EW +\# are for massaging type, a certain amount of experimentation and +\# previewing is expected and necessary. +\# +\# \n(.f holds the current font number, which is acceptable to .tkf. +\# +\# RW and EW must be reset to 0 to cancel their effect on subsequent +\# output lines. \# .MAC RW END . if \\n[#BR_AT_LINE_KERN] \{\ @@ -1002,10 +1010,10 @@ output lines. . sp \\n[#ALD]u . \} . if '\\$0'SPACE' \{\ -. sp \\$1u +. sp \\$1 . \} . if '\\$0'SP' \{\ -. sp \\$1u +. sp \\$1 . \} .END \# @@ -1027,13 +1035,11 @@ output lines. \# \# ALD/RLD STRINGS \# --------------- -.ig -The strings \*[ALD.25]...\*[ALD12.75] and their corresponding -\*[RLD] forms have been left in for backward compatibility with -documents created using mom-1.1.3c or earlier. The prefered methods -of advancing and reversing on the page inline are \*[UP ] -and \*[DOWN ]. -.. +\# The strings \*[ALD.25]...\*[ALD12.75] and their corresponding +\# \*[RLD] forms have been left in for backward compatibility with +\# documents created using mom-1.1.3c or earlier. The prefered methods +\# of advancing and reversing on the page inline are \*[UP ] +\# and \*[DOWN ]. \# .ds DOWN \v'\\$1' .ds UP \v'-\\$1' @@ -1187,75 +1193,100 @@ and \*[DOWN ]. \# .MAC SMARTQUOTES END . rr #ARGS_TO_SQ +. if \\n[#RESTORE_SQ]=1 \{\ +. rr #RESTORE_SQ +. ie '\\*[$RESTORE_SQ]'' \{\ +. ds $QUOTE0 \[dq] +. ds $QUOTE1 \[dq] +. \} +. el \{\ +. SMARTQUOTES \\*[$RESTORE_SQ] +. return +. \} +. \} . ie '\\$1'' \{\ . nr #OPEN_CLOSE 0 . ds $QUOTE0 \\[lq] . ds $QUOTE1 \\[rq] +. ds $RESTORE_SQ \\$1 . \} . el \{\ . if '\\$1',,' \{\ . nr #ARGS_TO_SQ 1 . ds $QUOTE0 \\[Bq] . ds $QUOTE1 \\[lq] +. ds $RESTORE_SQ \\$1 . \} . if '\\$1'<<' \{\ . nr #ARGS_TO_SQ 1 . ds $QUOTE0 \\[Fo] . ds $QUOTE1 \\[Fc] +. ds $RESTORE_SQ \\$1 . \} . if '\\$1'>>' \{\ . nr #ARGS_TO_SQ 1 . ds $QUOTE0 \\[Fc] . ds $QUOTE1 \\[Fo] +. ds $RESTORE_SQ \\$1 . \} . if '\\$1'DA' \{\ . nr #ARGS_TO_SQ 1 . ds $QUOTE0 \\[Fc] . ds $QUOTE1 \\[Fo] +. ds $RESTORE_SQ \\$1 . \} . if '\\$1'DE' \{\ . nr #ARGS_TO_SQ 1 . ds $QUOTE0 \\[Bq] . ds $QUOTE1 \\[lq] +. ds $RESTORE_SQ \\$1 . \} . if '\\$1'ES' \{\ . nr #ARGS_TO_SQ 1 . ds $QUOTE0 \\[lq] . ds $QUOTE1 \\[rq] +. ds $RESTORE_SQ \\$1 . \} . if '\\$1'FR' \{\ . nr #ARGS_TO_SQ 1 . ds $QUOTE0 \\[Fo]\\| . ds $QUOTE1 \\|\\[Fc] +. ds $RESTORE_SQ \\$1 . \} . if '\\$1'IT' \{\ . nr #ARGS_TO_SQ 1 . ds $QUOTE0 \\[Fo]\\| . ds $QUOTE1 \\|\\[Fc] +. ds $RESTORE_SQ \\$1 . \} . if '\\$1'NL' \{\ . nr #ARGS_TO_SQ 1 . ds $QUOTE0 \\[rq] . ds $QUOTE1 \\[rq] +. ds $RESTORE_SQ \\$1 . \} . if '\\$1'NO' \{\ . nr #ARGS_TO_SQ 1 . ds $QUOTE0 \\[Fo] . ds $QUOTE1 \\[Fc] +. ds $RESTORE_SQ \\$1 . \} . if '\\$1'PT' \{\ . nr #ARGS_TO_SQ 1 . ds $QUOTE0 \\[Fo] . ds $QUOTE1 \\[Fc] +. ds $RESTORE_SQ \\$1 . \} . if '\\$1'SV' \{\ . nr #ARGS_TO_SQ 1 . ds $QUOTE0 \\[Fc] . ds $QUOTE1 \\[Fc] +. ds $RESTORE_SQ \\$1 . \} . if !r#ARGS_TO_SQ \{\ . ds $QUOTE0 \\[dq] . ds $QUOTE1 \\[dq] +. nr #RESTORE_SQ 1 . \} . \} .END @@ -1298,7 +1329,7 @@ and \*[DOWN ]. \# preferable, since it works with filled and non-filled copy and \# doesn't require the user to remember to use (or not use) the \c. \# -.ds B \h'|0'\c +.ds B \h'|0'\R'#NO_ADVANCE 1'\c \# \# ===================================================================== \# @@ -1388,16 +1419,13 @@ and \*[DOWN ]. \# \# LEFT, RIGHT, AND CENTER \# ----------------------- -\# -.ig -The purpose of these macros is to allow the user to enter lines of -text that will be quadded LRC *without* the user having to enter .BR -or .br between lines. For the sake of consistency, all three appear -to behave similarly (from the point of view of the user), although -the underlying primitives don't. For this reason, LEFT, RIGHT, and -CENTER must be followed by .QUAD [L R C J] or .JUSTIFY to restore -text to groff fill mode. -.. +\# The purpose of these macros is to allow the user to enter lines of +\# text that will be quadded LRC *without* the user having to enter .BR +\# or .br between lines. For the sake of consistency, all three appear +\# to behave similarly (from the point of view of the user), although +\# the underlying primitives don't. For this reason, LEFT, RIGHT, and +\# CENTER must be followed by .QUAD [L R C J] or .JUSTIFY to restore +\# text to groff fill mode. \# \# LEFT \# ---- @@ -1420,7 +1448,7 @@ text to groff fill mode. . ce 0 . nf . nr #PSEUDO_FILL 1 -.\" Fix for a little conflict with DOCTYPE LETTER +.\" Fix for a little conflict with DOCTYPE LETTER . if '\\n(.z'LETTERHEAD1' \{ .rr #DATE_FIRST \} .END \# @@ -1441,7 +1469,7 @@ text to groff fill mode. . rr #QUAD . ds $RESTORE_QUAD_VALUE RIGHT . \} -. fi +. nf . rj 100000 . nr #PSEUDO_FILL 1 .END @@ -1463,7 +1491,7 @@ text to groff fill mode. . rr #QUAD . ds $RESTORE_QUAD_VALUE CENTER . \} -. fi +. nf . ce 100000 . nr #PSEUDO_FILL 1 .END @@ -1472,39 +1500,36 @@ text to groff fill mode. \# \# +++TABS+++ \# -.ig -There are two different kinds of tabs available: typesetting tabs -and string tabs. - -Typesetting tabs are set with TAB_SET, which requires a tab number, -an indent (offset) from the left margin and a length (optionally -with a quad direction and an instruction to fill lines). After tabs -are set with TAB_SET, they are called with .TAB n, where "n" -corresponds to the number passed to TAB_SET as a valid tab number. - -String tabs allow the user to mark off tab positions inline. Tab -indents and lengths are calculated from the beginning and end -positions of the marks. Up to 19 string tabs may be created, -numbered 1-19. Once created, they are called with .TAB n, -just like typesetting tabs. - -Setting up string tabs is a two-step procedure. First, the user -enters an input line in which s/he wants to mark off string tabs. -The beginning of a tab is marked with \*[STn], where "n" is -the desired number of the tab. The end of the the tab is marked -with \*[STnX]. All ST's must have a matching STX. String tabs -may be nested. - -Next, the user invokes .ST n for every string tab defined, and -optionally passes quad information to it. That done, string tabs -can be called just like typesetting tabs. - -String tabs don't preview properly with gxditview. Use gv instead. -.. +\# There are two different kinds of tabs available: typesetting tabs +\# and string tabs. +\# +\# Typesetting tabs are set with TAB_SET, which requires a tab number, +\# an indent (offset) from the left margin and a length (optionally +\# with a quad direction and an instruction to fill lines). After tabs +\# are set with TAB_SET, they are called with .TAB n, where "n" +\# corresponds to the number passed to TAB_SET as a valid tab number. +\# +\# String tabs allow the user to mark off tab positions inline. Tab +\# indents and lengths are calculated from the beginning and end +\# positions of the marks. Up to 19 string tabs may be created, +\# numbered 1-19. Once created, they are called with .TAB n, +\# just like typesetting tabs. +\# +\# Setting up string tabs is a two-step procedure. First, the user +\# enters an input line in which s/he wants to mark off string tabs. +\# The beginning of a tab is marked with \*[STn], where "n" is +\# the desired number of the tab. The end of the the tab is marked +\# with \*[STnX]. All ST's must have a matching STX. String tabs +\# may be nested. +\# +\# Next, the user invokes .ST n for every string tab defined, and +\# optionally passes quad information to it. That done, string tabs +\# can be called just like typesetting tabs. +\# +\# String tabs don't preview properly with gxditview. Use gv instead. \# \# Strings for string tab inlines \# ------------------------------ -\# \# Initialize string tab markers numbered 1 to 19. \# .nr #LOOP 0 1 @@ -1577,43 +1602,41 @@ String tabs don't preview properly with gxditview. Use gv instead. \# \# N.B. -- indents *must* be turned off before setting tabs \# -.ig -Examples: --------- - -.TAB_SET 1 2P+6p 12P C - -means "create a tab numbered 1 that starts 2 picas and 6 points from -the left margin, is 12 picas long, and centre each input line." - -.TAB_SET 1 2P+6P 12P C QUAD - -means exactly the same thing, except that input lines are joined and -the area delimted by the tab filled with centered text. - -TAB n can be called at any time after being set. - -Tabs are NOT columnar in behaviour. If the text inside a -tab runs to several lines, when you call the next tab a break -occurs, meaning that the new tab starts one line below the last -line in the previous tab. For columnar behaviour, you must -use the multi-column macros in addition to tabs. - -If you want tabs to line up bottom-line to bottom-line (most likely -single line tabs), use .TN (provided the tabs are numbered sequentially). -Otherwise, you must use .EL then .TAB if you want them to align. - -If you want to reset tabs, you must use .TQ before .TAB_SET. - -Note that indents are turned off automatically whenever a new -tab is called with TAB . - -Tabs themselves are user-invoked using the TAB macro with a numeric -argument, e.g. TAB 1. - -Generally, in order not to get confused, it's a good idea -to make sure all indents are off before setting tabs. -.. +\# Examples: +\# -------- +\# +\# .TAB_SET 1 2P+6p 12P C +\# +\# means "create a tab numbered 1 that starts 2 picas and 6 points from +\# the left margin, is 12 picas long, and centre each input line." +\# +\# .TAB_SET 1 2P+6P 12P C QUAD +\# +\# means exactly the same thing, except that input lines are joined and +\# the area delimted by the tab filled with centered text. +\# +\# TAB n can be called at any time after being set. +\# +\# Tabs are NOT columnar in behaviour. If the text inside a +\# tab runs to several lines, when you call the next tab a break +\# occurs, meaning that the new tab starts one line below the last +\# line in the previous tab. For columnar behaviour, you must +\# use the multi-column macros in addition to tabs. +\# +\# If you want tabs to line up bottom-line to bottom-line (most likely +\# single line tabs), use .TN (provided the tabs are numbered sequentially). +\# Otherwise, you must use .EL then .TAB if you want them to align. +\# +\# If you want to reset tabs, you must use .TQ before .TAB_SET. +\# +\# Note that indents are turned off automatically whenever a new +\# tab is called with TAB . +\# +\# Tabs themselves are user-invoked using the TAB macro with a numeric +\# argument, e.g. TAB 1. +\# +\# Generally, in order not to get confused, it's a good idea +\# to make sure all indents are off before setting tabs. \# .MAC TAB_SET END . br @@ -1798,12 +1821,15 @@ to make sure all indents are off before setting tabs. \# color). If is given, creates a string of \# that references the x color name of the first argument. \# *Notes: -\# The color name must be a legal color name from rgb.txt, and +\# The color name must be a valid color name from rgb.txt, and \# must be given entirely in lower case, all one word. \# .MAC XCOLOR END . ds \\$1 \m[\\$1] -. if \\n[#NUM_ARGS]=2 .ds \\$2 \m[\\$1] +. if \\n[#NUM_ARGS]=2 \{\ +. ds \\$2 \m[\\$1] +. ds $\\$2_FILL \\$1 +. \} .END \# \# Pre-define xcolors black and white @@ -1983,7 +2009,7 @@ to make sure all indents are off before setting tabs. \# *Notes: \# Intended to be called with inline escapes \*[UL] (underline \# on) and \*[ULX] (underline off). Only works when the font family -\# is COURIER, to simulate typewriter-style underlining of italic +\# is fixed width, to simulate typewriter-style underlining of italic \# passages. \# .MAC UL END @@ -2134,7 +2160,7 @@ to make sure all indents are off before setting tabs. \# UNDERSCORE \# ---------- \# *Arguments: -\# [points below baseline] "text" +\# [] "text" \# *Function: \# Places an underscore 2 points under the string if no lead given, \# otherwise places underscore under string by user specified amount. @@ -2148,8 +2174,9 @@ to make sure all indents are off before setting tabs. \# .UNDERSCORE 2p "Text to be underscored \# \# All text is underscored (including punctuation and spaces). -\# This is the primary difference between UNDERLINE and UNDERSCORE, -\# aside from the fact the UNDERLINE only works with Courier. +\# This is the primary difference between UNDERLINE and +\# UNDERSCORE, aside from the fact the UNDERLINE only works with +\# fixed width fonts. \# \# UNDERSCORE does not work across line breaks. Each line of \# text must be entered separately with UNDERSCORE. If the @@ -2158,10 +2185,72 @@ to make sure all indents are off before setting tabs. \# UNDERSCORE, as must the portion that comes after the break. \# .MAC UNDERSCORE END -. nr #RESTORE_PT_SIZE \\n[#PT_SIZE] -. ie \\n[#NUM_ARGS]=1 \{ \\$1\\s(12\\v'+2p'\\l'|0'\\v'-2p'\\s[\\n[#RESTORE_PT_SIZE]u] \} -. el \{ \\$2\\s(12\\v'+(\\$1)'\\l'|0'\\v'-(\\$1)'\\s[\\n[#RESTORE_PT_SIZE]u] \} -. rr #RESTORE_PT_SIZE +. nr #SAVED_UNDERSCORE_WEIGHT \\n[#UNDERSCORE_WEIGHT] +. nr #SAVED_UNDERSCORE_WEIGHT_ADJ \\n[#UNDERSCORE_WEIGHT_ADJ] +. ds $SAVED_UNDERSCORE_GAP \\*[$UNDERSCORE_GAP] +. if \\n[#FROM_BIB_STRING]=1 \{\ +. nr #UNDERSCORE_WEIGHT \\n[#BIB_STRING_UNDERLINE_WEIGHT] +. nr #UNDERSCORE_WEIGHT_ADJ \\n[#BIB_STRING_UNDERLINE_WEIGHT_ADJ] +. ds $UNDERSCORE_GAP \\*[$BIB_STRING_UNDERLINE_GAP] +. \} +. if \\n[#FROM_COVER]=1 \{\ +. nr #UNDERSCORE_WEIGHT \\n[#COVER_UNDERLINE_WEIGHT] +. nr #UNDERSCORE_WEIGHT_ADJ \\n[#COVER_UNDERLINE_WEIGHT_ADJ] +. ds $UNDERSCORE_GAP \\*[$COVER_UNDERLINE_GAP] +. \} +. if \\n[#FROM_DOC_COVER]=1 \{\ +. nr #UNDERSCORE_WEIGHT \\n[#DOCCOVER_UNDERLINE_WEIGHT] +. nr #UNDERSCORE_WEIGHT_ADJ \\n[#DOCCOVER_UNDERLINE_WEIGHT_ADJ] +. ds $UNDERSCORE_GAP \\*[$DOCCOVER_UNDERLINE_GAP] +. \} +. if \\n[#FROM_DOCTYPE]=1 \{\ +. nr #UNDERSCORE_WEIGHT \\n[#DOCTYPE_UNDERLINE_WEIGHT] +. nr #UNDERSCORE_WEIGHT_ADJ \\n[#DOCTYPE_UNDERLINE_WEIGHT_ADJ] +. ds $UNDERSCORE_GAP \\*[$DOCTYPE_UNDERLINE_GAP] +. \} +. if \\n[#FROM_HEAD]=1 \{\ +. nr #UNDERSCORE_WEIGHT \\n[#HEAD_UNDERLINE_WEIGHT] +. nr #UNDERSCORE_WEIGHT_ADJ \\n[#HEAD_UNDERLINE_WEIGHT_ADJ] +. ds $UNDERSCORE_GAP \\*[$HEAD_UNDERLINE_GAP] +. \} +. if \\n[#FROM_EN_STRING]=1 \{\ +. nr #UNDERSCORE_WEIGHT \\n[#EN_STRING_UNDERLINE_WEIGHT] +. nr #UNDERSCORE_WEIGHT_ADJ \\n[#EN_STRING_UNDERLINE_WEIGHT_ADJ] +. ds $UNDERSCORE_GAP \\*[$EN_STRING_UNDERLINE_GAP] +. \} +. if \\n[#FROM_EN_TITLE]=1 \{\ +. nr #UNDERSCORE_WEIGHT \\n[#EN_TITLE_UNDERLINE_WEIGHT] +. nr #UNDERSCORE_WEIGHT_ADJ \\n[#EN_TITLE_UNDERLINE_WEIGHT_ADJ] +. ds $UNDERSCORE_GAP \\*[$EN_TITLE_UNDERLINE_GAP] +. \} +. ie \\n[#NUM_ARGS]=1 \{\ +. nr #TEXT_WIDTH \w'\\$1' +\\$1\ +\D't \\n[#UNDERSCORE_WEIGHT]'\ +\h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\ +\v'+(\\*[$UNDERSCORE_GAP])+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\ +\D'l \\n[#TEXT_WIDTH]u 0'\ +\D't \\n[#RULE_WEIGHT]'\ +\h'-\\n[#RULE_WEIGHT]u'\ +\v'-(\\*[$UNDERSCORE_GAP])-\\n[#UNDERSCORE_WEIGHT_ADJ]u' +. \} +. el \{\ +. nr #TEXT_WIDTH \w'\\$2' +\\$2\ +\h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\ +\v'+(\\$1)+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\ +\D't \\n[#UNDERSCORE_WEIGHT]'\ +\D'l \\n[#TEXT_WIDTH]u 0'\ +\D't \\n[#RULE_WEIGHT]'\ +\h'-\\n[#RULE_WEIGHT]u'\ +\v'-(\\$1)-\\n[#UNDERSCORE_WEIGHT_ADJ]u' +. \} +. nr #UNDERSCORE_WEIGHT \\n[#SAVED_UNDERSCORE_WEIGHT] +. nr #UNDERSCORE_WEIGHT_ADJ \\n[#SAVED_UNDERSCORE_WEIGHT_ADJ] +. ds $UNDERSCORE_GAP \\*[$SAVED_UNDERSCORE_GAP] +. rr #SAVED_UNDERSCORE_WEIGHT +. rr #SAVED_UNDERSCORE_WEIGHT_ADJ +. rm $SAVED_UNDERSCORE_GAP .END \# \# @@ -2175,19 +2264,95 @@ to make sure all indents are off before setting tabs. \# *Notes: \# The same double-quote requirement as UNDERSCORE. \# +\# .MAC UNDERSCORE2 END -. nr #RESTORE_PT_SIZE \\n[#PT_SIZE] +. nr #SAVED_UNDERSCORE_WEIGHT \\n[#UNDERSCORE_WEIGHT] +. nr #SAVED_UNDERSCORE_WEIGHT_ADJ \\n[#UNDERSCORE_WEIGHT_ADJ] +. ds $SAVED_UNDERSCORE_GAP \\*[$UNDERSCORE_GAP] +. ds $SAVED_RULE_GAP \\*[$RULE_GAP] +. if \\n[#NUM_ARGS]=2 \{\ +. ds $UNDERSCORE_GAP \\$1 +. \} +. if \\n[#NUM_ARGS]=3 \{\ +. ds $UNDERSCORE_GAP \\$1 +. ds $RULE_GAP \\$2 +. \} +. if \\n[#FROM_BIB_STRING] \{\ +. nr #UNDERSCORE_WEIGHT \\n[#BIB_STRING_UNDERLINE_WEIGHT] +. nr #UNDERSCORE_WEIGHT_ADJ \\n[#BIB_STRING_UNDERLINE_WEIGHT_ADJ] +. ds $UNDERSCORE_GAP \\*[$BIB_STRING_UNDERLINE_GAP] +. ds $RULE_GAP \\*[$BIB_STRING_RULE_GAP] +. \} +. if \\n[#FROM_EN_STRING] \{\ +. nr #UNDERSCORE_WEIGHT \\n[#EN_STRING_UNDERLINE_WEIGHT] +. nr #UNDERSCORE_WEIGHT_ADJ \\n[#EN_STRING_UNDERLINE_WEIGHT_ADJ] +. ds $UNDERSCORE_GAP \\*[$EN_STRING_UNDERLINE_GAP] +. ds $RULE_GAP \\*[$EN_STRING_RULE_GAP] +. \} . if \\n[#NUM_ARGS]=1 \{\ -. PRINT \\$1\\s(12\\v'+2p'\\l'|0'\\v'+2p'\\l'|0'\\v'-4p'\\s[\\n[#RESTORE_PT_SIZE]u] +. nr #TEXT_WIDTH \w'\\$1' +\\$1\ +\D't \\n[#UNDERSCORE_WEIGHT]'\ +\v'+\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\ +\h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\ +\D'l \\n[#TEXT_WIDTH]u 0'\ +\v'+\\*[$RULE_GAP]+\\n[#UNDERSCORE_WEIGHT]u'\ +\h'-\\n[#TEXT_WIDTH]u'\ +\D'l \\n[#TEXT_WIDTH]u 0'\ +\D't \\n[#RULE_WEIGHT]'\ +\h'-\\n[#RULE_WEIGHT]u'\ +\v'-(\\*[$UNDERSCORE_GAP]+\\*[$RULE_GAP])-(\\n[#UNDERSCORE_WEIGHT]u*2u)' . \} . if \\n[#NUM_ARGS]=2 \{\ -. PRINT \\$2\\s(12\\v'+\\$1'\\l'|0'\\v'+2p'\\l'|0'\\v'-(2p+\\$1)'\\s[\\n[#RESTORE_PT_SIZE]u] +. nr #TEXT_WIDTH \w'\\$2' +\\$2\ +\D't \\n[#UNDERSCORE_WEIGHT]'\ +\v'+\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\ +\h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\ +\D'l \\n[#TEXT_WIDTH]u 0'\ +\v'+(\\*[$RULE_GAP])+\\n[#UNDERSCORE_WEIGHT]u'\ +\h'-\\n[#TEXT_WIDTH]u'\ +\D'l \\n[#TEXT_WIDTH]u 0'\ +\D't \\n[#RULE_WEIGHT]'\ +\h'-\\n[#RULE_WEIGHT]u'\ +\v'-(\\*[$UNDERSCORE_GAP]+\\*[$RULE_GAP])+(\\n[#UNDERSCORE_WEIGHT]u*2u)' . \} . if \\n[#NUM_ARGS]=3 \{\ -. PRINT \\$3\\s(12\\v'+\\$1'\\l'|0'\\v'+\\$2'\\l'|0'\\v'-(\\$2+\\$1)'\\s[\\n[#RESTORE_PT_SIZE]u] -. \} -. rr #RESTORE_PT_SIZE -.END +. nr #TEXT_WIDTH \w'\\$3' +\\$3\ +\D't \\n[#UNDERSCORE_WEIGHT]'\ +\v'+\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\ +\h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\ +\D'l \\n[#TEXT_WIDTH]u 0'\ +\v'+\\*[$RULE_GAP]+\\n[#UNDERSCORE_WEIGHT]u'\ +\h'-\\n[#TEXT_WIDTH]u'\ +\D'l \\n[#TEXT_WIDTH]u 0'\ +\D't \\n[#RULE_WEIGHT]'\ +\h'-\\n[#RULE_WEIGHT]u'\ +\v'-(\\*[$UNDERSCORE_GAP]+\\*[$RULE_GAP])-(\\n[#UNDERSCORE_WEIGHT]u*2u)' +. \} +. nr #UNDERSCORE_WEIGHT \\n[#SAVED_UNDERSCORE_WEIGHT] +. nr #UNDERSCORE_WEIGHT_ADJ \\n[#SAVED_UNDERSCORE_WEIGHT_ADJ] +. ds $UNDERSCORE_GAP \\*[$SAVED_UNDERSCORE_GAP] +. rr #SAVED_UNDERSCORE_WEIGHT +. rr #SAVED_UNDERSCORE_WEIGHT_ADJ +. rm $SAVED_UNDERSCORE_GAP +. rm $SAVED_RULE_GAP +.END +\# +\# Default underscoring rule gaps +\# +.ds $BIB_STRING_UNDERLINE_GAP 2p +.ds $BIB_STRING_RULE_GAP 2p +.ds $COVER_UNDERLINE_GAP 2p +.ds $DOCCOVER_UNDERLINE_GAP 2p +.ds $DOCTYPE_UNDERLINE_GAP 2p +.ds $EN_STRING_UNDERLINE_GAP 2p +.ds $EN_STRING_RULE_GAP 2p +.ds $EN_TITLE_UNDERLINE_GAP 2p +.ds $HEAD_UNDERLINE_GAP 2p +.ds $RULE_GAP 2p +.ds $UNDERSCORE_GAP 2p \# \# \# SUPERSCRIPT INLINES @@ -2405,7 +2570,6 @@ to make sure all indents are off before setting tabs. . if !d$PAD_MARKER .ds $PAD_MARKER # . char \\*[$PAD_MARKER] \R'#PAD_COUNT \En[#PAD_COUNT]+1' . ds $FAMILY_FOR_PAD \\n[.fam] -\#. fp \\n[.fp] \\*[$FONT] . fp \\n[.fp] \\n[.sty] . ds $FONT_FOR_PAD \\*[$FONT] . nr #SIZE_FOR_PAD \\n[.ps] @@ -2455,15 +2619,13 @@ to make sure all indents are off before setting tabs. \# \# +++LEADERS+++ \# -.ig -The leader mechanism is primitive, but it works. Basically, every -macro in this set that includes a line length also sets a single -groff tab stop at the right hand end of the line. That way, -whenever Ctrl-A is invoked (always at the end of an input line), -leader of the correct length gets deposited. Ctrl-A is accessed by -the string LEADER (i.e. inline, as \*[LEADER]). Leaders within tabs -get their length from the tab line length. -.. +\# The leader mechanism is primitive, but it works. Basically, every +\# macro in this set that includes a line length also sets a single +\# groff tab stop at the right hand end of the line. That way, +\# whenever Ctrl-A is invoked (always at the end of an input line), +\# leader of the correct length gets deposited. Ctrl-A is accessed by +\# the string LEADER (i.e. inline, as \*[LEADER]). Leaders within tabs +\# get their length from the tab line length. \# \# SET LEADER CHARACTER \# -------------------- @@ -2578,13 +2740,29 @@ get their length from the tab line length. \# EXT has no effect on running type. \# .MAC DROPCAP END -. if #IGNORE \{ .return \} +. if \\n[#IGNORE]=1 \{\ +. PRINT \\$1\c +. return +. \} . br +. if n \{\ +. PRINT \\$1\c +. return +. \} . if \\n[#DOCS] \{\ -. if \\n[#PRINT_STYLE]=1 \{ .return \} +. if \\n[#PRINT_STYLE]=1 \{\ +. PRINT \\$1\c +. return +. \} . if \\n[#PRINT_STYLE]=2 \{\ -. if \\n[#PP_STYLE]=2 \{ .return \} -. if \\n[#PP]>1 \{ .return \} +. if \\n[#PP_STYLE]=2 \{\ +. PRINT \\$1\c +. return +. \} +. if \\n[#PP]>1 \{\ +. PRINT \\$1\c +. return +. \} . ti 0 . \} . \} @@ -2621,6 +2799,7 @@ get their length from the tab line length. . if d$DC_ADJUST \{ .ps \\*[$DC_ADJUST]p \} . mk x . sp \\n[#DC_LINES]v +. if \\n[#DOCS]=1 \{ .SHIM \} . ie \\n[#DC_COLOR]=1 \{\ . ie !'\\$3'' \{\ . ie '\\$3'COND' \{ .PRINT \m[\\*[$DC_COLOR]]\\*[COND]\\*[$DROPCAP]\\*[CONDX]\m[] \} @@ -2674,6 +2853,115 @@ get their length from the tab line length. ' in \\n[#RESTORE_INDENT]u .END \# +\# ===================================================================== +\# +\# +++GRAPHICAL OBJECTS+++ +\# +\# HORIZONTAL RULE - DRH +\# --------------------- +\# *Arguments: +\# | [ ] +\# *Function: +\# With no arg, draws a full measure rule. With args, draws +\# described horizontal rule. +\# *Notes: +\# Rules are drawn left-to-right, from the baseline down, and +\# return to their point of origin. Color must be set in the +\# macro; otherwise the color will be black, regardless of current +\# .gcolor. If no arg given, the rule weight is the one set by +\# RULE_WEIGHT. +\# +.MAC DRH END +. if \\n[.vpt]=1 \{\ +. vpt 0 +. nr #RESTORE_TRAP 1 +. \} +. ie !\\n[#NO_ADVANCE]=1 \{ .br \} +. el \{\ +. sp -1v +. rr #NO_ADVANCE +. \} +. ie \\n(.u=1 \{\ +. nr #FILLED 1 +. nr #FILL_MODE \\n(.j +. \} +. el \{\ +. nr #NOFILL 1 +. if \\n[.ce]>0 \{ .nr #NOFILL_MODE 3 \} +. if \\n[.rj]>0 \{ .nr #NOFILL_MODE 5 \} +. ce 0 +. rj 0 +. \} +. nf +. ds $RL_WEIGHT \\$1 +. ds $RL_INDENT \\$2 +. ds $RL_LENGTH \\$3 +. ie !'\\$4'' \{\ +. ds $RL_COLOR \\$4 +. \} +. el \{\ +. ds $RL_COLOR default +. \} +. nr #SAVED_WEIGHT \\n[#RULE_WEIGHT] +. nr #SAVED_WEIGHT_ADJ \\n[#RULE_WEIGHT_ADJ] +. di NULL +. if \\n[#NUM_ARGS]>=1 \{ .RULE_WEIGHT \\*[$RL_WEIGHT] \} +. di +. gcolor \\*[$RL_COLOR] +. ie \\n[#NUM_ARGS]=0 \{\ +. ie \\n[#INDENT_ACTIVE] \{\ +. nr #RESTORE_L_LENGTH \\n(.l +. if \\n[#INDENT_BOTH_ACTIVE] \{ .ll \\n(.lu-\\n[#BL_INDENT]u \} +. if \\n[#INDENT_LEFT_ACTIVE] \{ .ll \\n(.lu-\\n[#L_INDENT]u \} +\D't \\n[#RULE_WEIGHT]'\ +\h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT]u'\ +\v'\\n[#RULE_WEIGHT_ADJ]u'\ +\D'l \En(.lu 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\ +\v'-\\n[#RULE_WEIGHT_ADJ]u'\ +\D't \\n[#SAVED_RULE_WEIGHT]' +. ll \\n[#RESTORE_L_LENGTH]u +. rr #RESTORE_L_LENGTH +. \} +. el \{\ +\D't \\n[#RULE_WEIGHT]'\ +\h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT]u'\ +\v'\\n[#RULE_WEIGHT_ADJ]u'\ +\D'l \En(.lu 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\ +\v'-\\n[#RULE_WEIGHT_ADJ]u'\ +\D't \\n[#SAVED_RULE_WEIGHT]' +. \} +. \} +. el \{\ +\D't \\n[#RULE_WEIGHT]'\ +\h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT]u'\ +\v'\\n[#RULE_WEIGHT_ADJ]u'\ +\D'l \\*[$RL_LENGTH] 0'\ +\v'-\\n[#RULE_WEIGHT_ADJ]u'\ +\D't \\n[#SAVED_RULE_WEIGHT]' +. \} +. if \\n[#FILLED]=1 \{\ +. if \\n[#FILL_MODE]=0 \{ .QUAD LEFT \} +. if \\n[#FILL_MODE]=1 \{ .JUSTIFY \} +. if \\n[#FILL_MODE]=3 \{ .QUAD CENTER \} +. if \\n[#FILL_MODE]=5 \{ .QUAD RIGHT \} +. rr #FILLED +. \} +. sp -1v +. if \\n[#NOFILL]=1 \{\ +. if \\n[#NOFILL_MODE]=3 \{ .CENTER \} +. if \\n[#NOFILL_MODE]=5 \{ .RIGHT \} +. \} +. gcolor +. nr #RULE_WEIGHT \\n[#SAVED_WEIGHT] +. nr #RULE_WEIGHT_ADJ \\n[#SAVED_WEIGHT_ADJ] +. rr #SAVED_WEIGHT +. rr #SAVED_WEIGHT_ADJ +. if \\n[#RESTORE_TRAP]=1 \{\ +. vpt 1 +. rr #RESTORE_TRAP +. \} +.END +\# \# \# RULE \# ---- @@ -2682,187 +2970,642 @@ get their length from the tab line length. \# *Function: \# Draws a rule the length of the current measure. \# *Notes: +\# A convenience macro. DRV does the same thing. Kept in for +\# backward compatibility. \# .MAC RULE END -\c -. EL . if \\n(.u=1 \{\ -. nr #FILL_WAS_ON 1 +. nr #FILLED 1 . ds $CURRENT_QUAD \\*[$QUAD_VALUE] . nf . \} . ie \\n[#INDENT_ACTIVE] \{\ -. nr #RESTORE_L_LENGTH \\n(.l . if \\n[#INDENT_BOTH_ACTIVE] \{ .ll \\n(.lu-\\n[#BL_INDENT]u \} . if \\n[#INDENT_LEFT_ACTIVE] \{ .ll \\n(.lu-\\n[#L_INDENT]u \} -. PRINT \El'\En(.lu'\c -. ll \\n[#RESTORE_L_LENGTH]u +. PRINT \D't \\n[#RULE_WEIGHT]'\v'\\n[#RULE_WEIGHT_ADJ]u'\D'l \En(.lu 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\h'|0'\c +. ll . rr #RESTORE_L_LENGTH . \} . el \{\ -. PRINT \El'\En(.lu'\c +. PRINT \D't \\n[#RULE_WEIGHT]'\v'\\n[#RULE_WEIGHT_ADJ]u'\D'l \En(.lu 0'\v'-\\n[#RULE_WEIGHT_ADJ]u'\h'|0'\c . \} -. if r#FILL_WAS_ON \{\ +. if r#FILLED \{\ . fi -. rr #FILL_WAS_ON +. rr #FILLED . QUAD \\*[$CURRENT_QUAD] . rm $CURRENT_QUAD . \} -. EL +. EOL .END \# -\# ===================================================================== -\# -\# +++WORD AND SENTENCE SPACING+++ \# -\# WORD SPACE CONTROL -\# ------------------ -\# *Argument: -\# <+|->wordspace | DEFAULT +\# VERTICAL RULE - DRV +\# ------------------- +\# *Arguments: +\# [ ] \# *Function: -\# Increases or decreases interword space by user supplied amount. -\# If DEFAULT, value is set to 12 (groff default). +\# Draws described vertical rule. \# *Notes: -\# $WS_CONSTANT is the groff default word space. -\# $WS_VAR is the user supplied amount by which to in/decrease word space. -\# $WS is a concatenation of WS_CONSTANT and WS_VAR. +\# Rules are drawn left-to-right, from the baseline down, and +\# return to their point of origin. Color must be set in the +\# macro; otherwise the color will be black, regardless of current +\# .gcolor. \# -\# Because the user supplied value requires a literal + or - sign, -\# the macro argument is stored in a string. -\# -\# \n[.sss] holds the current sentence space value. -\# -.MAC WS END -. ds $WS_CONSTANT 12 -. ds $WS_VAR \\$1 -. ie '\\$1'DEFAULT' .ds $WS_VAR +0 -. el .ds $WS (\\*[$WS_CONSTANT]\\*[$WS_VAR]) -. ie \\n[.sss]=12 \{ .ss \\*[$WS] 12 \} +.MAC DRV END +. if \\n[.vpt]=1 \{\ +. vpt 0 +. nr #RESTORE_TRAP 1 +. \} +. ie !\\n[#NO_ADVANCE]=1 \{ .br \} . el \{\ -. ss \\*[$WS] (\\*[$WS]\\*[$SS_VAR]) -. SS \\*[$SS_VAR] +. sp -1v +. rr #NO_ADVANCE +. \} +. ie \\n(.u=1 \{\ +. nr #FILLED 1 +. nr #FILL_MODE \\n(.j +. \} +. el \{\ +. nr #NOFILL 1 +. if \\n[.ce]>0 \{ .nr #NOFILL_MODE 3 \} +. if \\n[.rj]>0 \{ .nr #NOFILL_MODE 5 \} +. ce 0 +. rj 0 +. \} +. nf +. ds $RL_WEIGHT \\$1 +. ds $RL_INDENT \\$2 +. ds $RL_DEPTH \\$3 +. ie !'\\$4'' \{\ +. ds $RL_COLOR \\$4 +. \} +. el \{\ +. ds $RL_COLOR default +. \} +. nr #SAVED_WEIGHT \\n[#RULE_WEIGHT] +. nr #SAVED_WEIGHT_ADJ \\n[#RULE_WEIGHT_ADJ] +. di NULL +. RULE_WEIGHT \\*[$RL_WEIGHT] +. di +. gcolor \\*[$RL_COLOR] +\D't \\n[#RULE_WEIGHT]'\ +\h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT_ADJ]u'\ +\D'l 0 \\*[$RL_DEPTH]'\ +\D't \\n[#SAVED_RULE_WEIGHT]' +. if \\n[#FILLED]=1 \{\ +. if \\n[#FILL_MODE]=0 \{ .QUAD LEFT \} +. if \\n[#FILL_MODE]=1 \{ .JUSTIFY \} +. if \\n[#FILL_MODE]=3 \{ .QUAD CENTER \} +. if \\n[#FILL_MODE]=5 \{ .QUAD RIGHT \} +. rr #FILLED +. \} +. sp -1v +. if \\n[#NOFILL]=1 \{\ +. if \\n[#NOFILL_MODE]=3 \{ .CENTER \} +. if \\n[#NOFILL_MODE]=5 \{ .RIGHT \} +. \} +. gcolor +. nr #RULE_WEIGHT \\n[#SAVED_WEIGHT] +. nr #RULE_WEIGHT_ADJ \\n[#SAVED_WEIGHT_ADJ] +. if \\n[#RESTORE_TRAP]=1 \{\ +. vpt 1 +. rr #RESTORE_TRAP . \} .END \# -\# -\# SENTENCE SPACE CONTROL -\# ---------------------- -\# *Argument: -\# <+-sentencespace> | 0 | DEFAULT +\# BOXES - DBX +\# ----------- +\# *Arguments: +\# [ ] \# *Function: -\# Increases or decreases sentence space by user supplied amount. -\# If 0, sentence spaces are ignored. If DEFAULT, value is -\# set to 12 (groff default). +\# Draws described box. \# *Notes: -\# Because the user supplied value requires a literal + or - sign, -\# the macro argument is stored in a string. -\# -\# Sentence space applies only to input where sentences are separated -\# by two spaces (and/or, in fill mode [FLUSH L|R|C or JUSTIFY], an EOL). -\# Changing .SS when sentences are separated by only one space has -\# no effect on the space between sentences. -\# -\# \n[.ss] holds the current wordspace value. -\# \n[.sss] holds the current sentence space value. -\# -.MAC SS END -. ie '\\$1'0' \{ .ss \\n[.ss] (\\n[.ss]-\\n[.ss]) \} +\# Boxes are drawn left-to-right, from the baseline down, and +\# return to their point of origin. Box rules are drawn from the +\# perimeter inwards. Color must be set in the macro; otherwise +\# the color will be black, regardless of current .gcolor. If no +\# arg given, the rule weight is the one set by RULE_WEIGHT. +\# +.MAC DBX END +. if \\n[.vpt]=1 \{\ +. vpt 0 +. nr #RESTORE_TRAP 1 +. \} +. ie !\\n[#NO_ADVANCE]=1 \{ .br \} . el \{\ -. ie '\\$1'DEFAULT' \{ .ss \\n[.ss] \} +. sp -1v +. rr #NO_ADVANCE +. \} +. ie \\n(.u=1 \{\ +. nr #FILLED 1 +. nr #FILL_MODE \\n(.j +. \} +. el \{\ +. nr #NOFILL 1 +. if \\n[.ce]>0 \{ .nr #NOFILL_MODE 3 \} +. if \\n[.rj]>0 \{ .nr #NOFILL_MODE 5 \} +. ce 0 +. rj 0 +. \} +. nf +. ie '\\$1'SOLID' \{\ +. nr #BX_SOLID 1 +. \} +. el \{\ +. ds $BX_WEIGHT \\$1 +. \} +. ds $BX_INDENT \\$2 +. ds $BX_WIDTH \\$3 +. ds $BX_DEPTH \\$4 +. ie !'\\$5'' \{\ +. ie d$\\$5_FILL \{\ +. ds $BX_COLOR \\*[$\\$5_FILL] +. \} . el \{\ -. ds $SS_VAR \\$1 -. ss \\n[.ss] (0\\*[$SS_VAR]) +. ds $BX_COLOR \\$5 . \} . \} -.END -\# -\# -\# ===================================================================== -\# -\# +++INDENTS+++ -\# -.ig -There are five styles of indents: left, right, both, temporary, -and hanging. Each is set/invoked with a different macro. -Indent macros begin with the letter "I", hence .IL means "indent left," -.IR means "indent right," and so on. - -The first time any of the indent macros is used, it requires an -argument--the size of the indent (with a unit of measure). The -size may also be entered using the \w escape--very useful -for numbered lists using HI. The unit of measure is required. -Subsequent invocations don't require the argument; the indent -measure remains the same until it's changed by invoking the macro -with an argument again. - -If no indents are in effect, the arguments passed to indent macros are -measured from the left and right margins of the page. If a left indent -or a right indent is already in effect, the arguments passed to -the indent macros are calculated from the current values; in other words, -the arguments are additive. If you quit an indent and later return -to it, its value will be the value last in effect, unless you pass -it an argument. If you do pass an argument, it is added to the last -value in effect, unless you cleared the indent with one of -.IX/Q macros. - -Example -------- - -.IL 2P -...some text... -.IL 2P -...some text... -.IQ -...some text... -.IL -...some text... - -The first .IL 2P indents text 2P from the left margin. The second -.IL 2P indents text by an additional 2P, i.e. 4P from the left margin. -.IQ turns the indent off. The last .IL (which has no argument) -takes its value from the total of all arguments passed to .IL (in -this case, 2P and 2P), therefore it indents 2P+2P from the left -margin, i.e. 4P. If you wanted the last .IL to indent just 2P, -you'd either have to reset the .IL prior to .IQ (.IL -2P), or pass -the last .IL the argument 2P. - -To reverse the sense of an indent added to an indent, you may use -negative values. - -Indents can be turned off individually with ILX, IRX, and IBX. -LEFT and RIGHT indents may be combined and manipulated -separately, (e.g. you can have an IL of 2P and an IR of 4P -operative at the same time, and then change, say, the IL to -4P--thereby left indenting 6P--while the IR remains at 4P. - -IB automatically turns off IL and IR. They have to be reinvoked -again when needed. IL and IR automatically turn IB off; it, too, -has to be reinvoked with needed. - -All indents can be turned off at once with IQ. The ILX, IRX, IBX, -and IQ macros simply turn the indents off; the values stored in -the respective indent macros (IL, IR, IB) remain in effect. If -the user wishes to clear the values, the IX macros should be -invoked with the single argument CLEAR. IQ CLEAR clears out -the values stored for all indent styles. - -Indents *must* be turned off before settting string tabs -inside PAD. Generally, in order not to get confused, it's a -good idea to turn all indents off before setting any tabs. - -TI and HI are special cases. There's no need to turn them off, -since they affect only one line--the first after their -invocation. Like the other indent styles, the first time -they're invoked, they require a value in iPpcm; each subsequent -invocation without an argument will use the same value. To -change the value, simply pass a new value. Values for TI and HI -are *not* additive. - -HI presupposes that you already have a left or both indent on. -HI will never hang a line outside the left margin of a document -or column. In other words, you must have IL or IB on before you -can use HI. -.. +. el \{\ +. ds $BX_COLOR default +. \} +. nr #SAVED_WEIGHT \\n[#RULE_WEIGHT] +. nr #SAVED_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. if !'\\$1'SOLID' \{\ +. di NULL +. RULE_WEIGHT \\*[$BX_WEIGHT] +. di +. \} +. ds $BX_INDENT \\*[$BX_INDENT]-\\n[#WEIGHT_ADJ]u +. ie \\n[#BX_SOLID]=1 \{\ +. fcolor \\*[$BX_COLOR] +\h'\\*[$BX_INDENT]'\ +\D'P \\*[$BX_WIDTH] 0 0 \\*[$BX_DEPTH] -\\*[$BX_WIDTH] 0 0 -\\*[$BX_DEPTH]' +. fcolor +. rr #BX_SOLID +. \} +. el \{\ +. gcolor \\*[$BX_COLOR] +\D't \\n[#RULE_WEIGHT]'\ +\h'\\*[$BX_INDENT]'\ +\v'\\n[#WEIGHT_ADJ]u'\ +\D'p \\*[$BX_WIDTH]-\\n[#RULE_WEIGHT]u 0 0 \\*[$BX_DEPTH]-\\n[#RULE_WEIGHT]u -\\*[$BX_WIDTH]+\\n[#RULE_WEIGHT]u 0 0 -\\*[$BX_DEPTH]+\\n[#RULE_WEIGHT]u'\ +\v'-\\n[#WEIGHT_ADJ]u'\ +\D't \\n[#SAVED_RULE_WEIGHT]' +. gcolor +. \} +. sp -1v +. if \\n[#FILLED]=1 \{\ +. if \\n[#FILL_MODE]=0 \{ .QUAD LEFT \} +. if \\n[#FILL_MODE]=1 \{ .JUSTIFY \} +. if \\n[#FILL_MODE]=3 \{ .QUAD CENTER \} +. if \\n[#FILL_MODE]=5 \{ .QUAD RIGHT \} +. rr #FILLED +. \} +. if \\n[#NOFILL]=1 \{\ +. if \\n[#NOFILL_MODE]=3 \{ .CENTER \} +. if \\n[#NOFILL_MODE]=5 \{ .RIGHT \} +. \} +. nr #RULE_WEIGHT \\n[#SAVED_WEIGHT] +. nr #WEIGHT_ADJ \\n[#SAVED_WEIGHT_ADJ] +. rr #SAVED_WEIGHT +. rr #SAVED_WEIGHT_ADJ +. if \\n[#RESTORE_TRAP]=1 \{\ +. vpt 1 +. rr #RESTORE_TRAP +. \} +.END +\# +\# +\# ELLIPSES - DCL +\# -------------- +\# *Arguments: +\# [ ] +\# *Function: +\# Draws described ellipses. +\# *Notes: +\# Ellipses (circles) are drawn left-to-right, from the baseline +\# down, and return to their point of origin. Ellipse rules are +\# drawn from the perimeter inwards. Color must be set in the +\# macro; otherwise the color will be black, regardless of current +\# .gcolor. If no arg given, the rule weight is the one set by +\# RULE_WEIGHT. +\# +.MAC DCL END +. if \\n[.vpt]=1 \{\ +. vpt 0 +. nr #RESTORE_TRAP 1 +. \} +. ie !\\n[#NO_ADVANCE]=1 \{ .br \} +. el \{\ +. sp -1v +. rr #NO_ADVANCE +. \} +. ie \\n(.u=1 \{\ +. nr #FILLED 1 +. nr #FILL_MODE \\n(.j +. \} +. el \{\ +. nr #NOFILL 1 +. if \\n[.ce]>0 \{ .nr #NOFILL_MODE 3 \} +. if \\n[.rj]>0 \{ .nr #NOFILL_MODE 5 \} +. ce 0 +. rj 0 +. \} +. nf +. ie '\\$1'SOLID' \{\ +. nr #CL_SOLID 1 +. \} +. el \{\ +. ds $CL_WEIGHT \\$1 +. \} +. ds $CL_INDENT \\$2 +. ds $CL_WIDTH \\$3 +. ds $CL_DEPTH \\$4 +. ie !'\\$5'' \{\ +. ie d$\\$5_FILL \{\ +. ds $CL_COLOR \\*[$\\$5_FILL] +. \} +. el \{\ +. ds $CL_COLOR \\$5 +. \} +. \} +. el \{\ +. ds $CL_COLOR default +. \} +. nr #SAVED_WEIGHT \\n[#RULE_WEIGHT] +. nr #SAVED_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. if !'\\$1'SOLID' \{\ +. di NULL +. RULE_WEIGHT \\*[$CL_WEIGHT] +. di +. \} +. ds $CL_INDENT \\*[$CL_INDENT]-\\n[#WEIGHT_ADJ]u +. ie \\n[#CL_SOLID]=1 \{\ +. fcolor \\*[$CL_COLOR] +\h'\\*[$CL_INDENT]'\ +\v'\\*[$CL_DEPTH]/2u'\ +\D'E \\*[$CL_WIDTH]-\\n[#RULE_WEIGHT]u \\*[$CL_DEPTH]-\\n[#RULE_WEIGHT]u'\ +\v'-\\*[$CL_DEPTH]/2u' +. fcolor +. rr #CL_SOLID +. \} +. el \{\ +. gcolor \\*[$CL_COLOR] +\D't \\n[#RULE_WEIGHT]'\ +\h'\\*[$CL_INDENT]'\ +\v'\\*[$CL_DEPTH]/2u'\ +\D'e \\*[$CL_WIDTH]-\\n[#RULE_WEIGHT]u \\*[$CL_DEPTH]-\\n[#RULE_WEIGHT]u'\ +\v'-(\\*[$CL_DEPTH]/2u)'\ +\D't \\n[#SAVED_RULE_WEIGHT]' +. gcolor +. \} +. sp -1v +. if \\n[#FILLED]=1 \{\ +. if \\n[#FILL_MODE]=0 \{ .QUAD LEFT \} +. if \\n[#FILL_MODE]=1 \{ .JUSTIFY \} +. if \\n[#FILL_MODE]=3 \{ .QUAD CENTER \} +. if \\n[#FILL_MODE]=5 \{ .QUAD RIGHT \} +. rr #FILLED +. \} +. if \\n[#NOFILL]=1 \{\ +. if \\n[#NOFILL_MODE]=3 \{ .CENTER \} +. if \\n[#NOFILL_MODE]=5 \{ .RIGHT \} +. \} +. nr #RULE_WEIGHT \\n[#SAVED_WEIGHT] +. nr #WEIGHT_ADJ \\n[#SAVED_WEIGHT_ADJ] +. rr #SAVED_WEIGHT +. rr #SAVED_WEIGHT_ADJ +. if \\n[#RESTORE_TRAP]=1 \{\ +. vpt 1 +. rr #RESTORE_TRAP +. \} +.END +\# +\# +\# RULE WEIGHT +\# ----------- +\# *Argument: +\# +\# *Function: +\# Sets \D't ' to the correct number of machine units for the +\# argument given in points. +\# *Notes: +\# Decimal fractions are allowed. Rule weight must be > 100. +\# +.MAC RULE_WEIGHT END +. di NULL \" Diverted so there's no problem with breaks, spacing, etc. +. ds $ARG \\$1 +. substring $ARG -1 +. if !\B'\\*[$ARG]' \{\ +. tm1 "[mom]: The argument to \\$0 must not have a unit of measure appended. +. ab Aborting at \\$0, line \\n[.c]. +. \} +. length #STR_LENGTH \\$1 +. ds $ARG \\$1 +. substring $ARG 0 0 +. ie '\\*[$ARG]'.' \{\ +. ds $ARG \\$1 +. substring $ARG 1 \\n[#STR_LENGTH]-1 +. nr #WEIGHT \\*[$ARG]*100 +. if (\\n[#WEIGHT]>=1000) \{\ +. while (\\n[#WEIGHT]>=1000) \{\ +. nr #WEIGHT \\n[#WEIGHT]/10 +. \} + \} +. \} +. el \{\ +. ds $ARG \\$1 +. substring $ARG 1 1 +. ie '\\*[$ARG]'.' \{\ +. ds $LHS \\$1 +. substring $LHS 0 0 +. ds $RHS \\$1 +. substring $RHS 2 +. nr #WEIGHT \\*[$LHS]\\*[$RHS]*100 +. if (\\n[#WEIGHT]>=10000) \{\ +. while (\\n[#WEIGHT]>=10000) \{\ +. nr #WEIGHT \\n[#WEIGHT]/10 +. \} +. \} +. \} +. el \{\ +. ie \\n[#STR_LENGTH]<=2 \{\ +. nr #WEIGHT \\$1*1000 +. \} +. el \{\ +. ds $ARG \\$1 +. substring $ARG 2 2 +. ie !'\\*[$ARG]'.' \{\ +. tm1 "[mom]: Invalid argument given to macro \\$0 at line \\n[.c]. +. tm1 " Rule weight must be > 100 points. +. tm1 " Falling back to default weight .5 points. +. nr #WEIGHT 500 +. \} +. el \{\ +. ds $LHS \\$1 +. substring $LHS 0 1 +. ds $RHS \\$1 +. substring $RHS 3 +. nr #WEIGHT \\*[$LHS]\\*[$RHS]*1000 +. if (\\n[#WEIGHT]>=100000) \{\ +. while (\\n[#WEIGHT]>=100000) \{\ +. nr #WEIGHT \\n[#WEIGHT]/10 +. \} +. \} +. \} +. \} +. \} +. \} +. nr #WEIGHT_ADJ \\n[#WEIGHT]/2 +. if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT' \{\ +. nr #BIB_STRING_UNDERLINE_WEIGHT \\n[#WEIGHT] +. nr #BIB_STRING_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. \} +. if '\\$0'COVER_UNDERLINE_WEIGHT' \{\ +. nr #COVER_UNDERLINE_WEIGHT \\n[#WEIGHT] +. nr #COVER_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. \} +. if '\\$0'DOCCOVER_UNDERLINE_WEIGHT' \{\ +. nr #DOCCOVER_UNDERLINE_WEIGHT \\n[#WEIGHT] +. nr #DOCCOVER_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. \} +. if '\\$0'DOCTYPE_UNDERLINE_WEIGHT' \{\ +. nr #DOCTYPE_UNDERLINE_WEIGHT \\n[#WEIGHT] +. nr #DOCTYPE_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. \} +. if '\\$0'ENDNOTE_STRING_UNDERLINE_WEIGHT' \{\ +. nr #EN_STRING_UNDERLINE_WEIGHT \\n[#WEIGHT] +. nr #EN_STRING_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. \} +. if '\\$0'ENDNOTE_TITLE_UNDERLINE_WEIGHT' \{\ +. nr #EN_TITLE_UNDERLINE_WEIGHT \\n[#WEIGHT] +. nr #EN_TITLE_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. \} +. if '\\$0'FOOTER_RULE_WEIGHT' \{\ +. nr #FOOTER_RULE_WEIGHT \\n[#WEIGHT] +. nr #FOOTER_RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. \} +. if '\\$0'FOOTNOTE_RULE_WEIGHT' \{\ +. nr #FN_RULE_WEIGHT \\n[#WEIGHT] +. nr #FN_RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. \} +. if '\\$0'HEAD_UNDERLINE_WEIGHT' \{\ +. nr #HEAD_UNDERLINE_WEIGHT \\n[#WEIGHT] +. nr #HEAD_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. \} +. if '\\$0'HEADER_RULE_WEIGHT' \{\ +. nr #HEADER_RULE_WEIGHT \\n[#WEIGHT] +. nr #HEADER_RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. \} +. if '\\$0'RULE_WEIGHT' \{\ +. nr #RULE_WEIGHT \\n[#WEIGHT] +. nr #RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. \} +. if '\\$0'UNDERSCORE_WEIGHT' \{\ +. nr #UNDERSCORE_WEIGHT \\n[#WEIGHT] +. nr #UNDERSCORE_WEIGHT_ADJ \\n[#WEIGHT_ADJ] +. \} +. di +.END +\# +\# Aliases +\# ~~~~~~~ +.ALIAS BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT RULE_WEIGHT +.ALIAS COVER_UNDERLINE_WEIGHT RULE_WEIGHT +.ALIAS DOCCOVER_UNDERLINE_WEIGHT RULE_WEIGHT +.ALIAS DOCTYPE_UNDERLINE_WEIGHT RULE_WEIGHT +.ALIAS ENDNOTE_STRING_UNDERLINE_WEIGHT RULE_WEIGHT +.ALIAS ENDNOTE_TITLE_UNDERLINE_WEIGHT RULE_WEIGHT +.ALIAS FOOTER_RULE_WEIGHT RULE_WEIGHT +.ALIAS FOOTNOTE_RULE_WEIGHT RULE_WEIGHT +.ALIAS HEAD_UNDERLINE_WEIGHT RULE_WEIGHT +.ALIAS HEADER_RULE_WEIGHT RULE_WEIGHT +.ALIAS UNDERSCORE_WEIGHT RULE_WEIGHT +\# +\# Default rule weights +\# ~~~~~~~~~~~~~~~~~~~~ +.nr #BIB_STRING_UNDERLINE_WEIGHT 500 +.nr #COVER_UNDERLINE_WEIGHT 500 +.nr #DOCCOVER_UNDERLINE_WEIGHT 500 +.nr #DOCTYPE_UNDERLINE_WEIGHT 500 +.nr #EN_STRING_UNDERLINE_WEIGHT 500 +.nr #EN_TITLE_UNDERLINE_WEIGHT 500 +.nr #FN_RULE_WEIGHT 500 +.nr #FOOTER_RULE_WEIGHT 500 +.nr #HEAD_UNDERLINE_WEIGHT 500 +.nr #HEADER_RULE_WEIGHT 500 +.nr #RULE_WEIGHT 500 +.nr #UNDERSCORE_WEIGHT 500 +\# +.nr #BIB_STRING_UNDERLINE_WEIGHT_ADJ \\n[#BIB_STRING_UNDERLINE_WEIGHT]/2 +.nr #COVER_UNDERLINE_WEIGHT_ADJ \\n[#DOCTYPE_UNDERLINE_WEIGHT]/2 +.nr #DOCCOVER_UNDERLINE_WEIGHT_ADJ \\n[#DOCTYPE_RULE_WEIGHT]/2 +.nr #DOCTYPE_UNDERLINE_WEIGHT_ADJ \\n[#DOCTYPE_RULE_WEIGHT]/2 +.nr #EN_STRING_UNDERLINE_WEIGHT_ADJ \\n[#EN_STRING_UNDERLINE_WEIGHT]/2 +.nr #EN_TITLE_UNDERLINE_WEIGHT_ADJ \\n[#EN_STRING_UNDERLINE_WEIGHT]/2 +.nr #FOOTER_RULE_WEIGHT_ADJ \\n[#FOOTER_RULE_WEIGHT]/2 +.nr #FN_RULE_WEIGHT_ADJ \\n[#FN_RULE_WEIGHT]/2 +.nr #HEAD_UNDERLINE_WEIGHT_ADJ \\n[#HEAD_UNDERLINE_WEIGHT]/2 +.nr #HEADER_RULE_WEIGHT_ADJ \\n[#HEADER_RULE_WEIGHT]/2 +.nr #RULE_WEIGHT_ADJ \\n[#RULE_WEIGHT]/2 +.nr #UNDERSCORE_WEIGHT_ADJ \\n[#UNDERSCORE_WEIGHT]/2 +\# +\# Set default rule weight +\# +.di NULL +\D't 500' +.di +\# +\# ===================================================================== +\# +\# +++WORD AND SENTENCE SPACING+++ +\# +\# WORD SPACE CONTROL +\# ------------------ +\# *Argument: +\# <+|->wordspace | DEFAULT +\# *Function: +\# Increases or decreases interword space by user supplied amount. +\# If DEFAULT, value is set to 12 (groff default). +\# *Notes: +\# $WS_CONSTANT is the groff default word space. +\# $WS_VAR is the user supplied amount by which to in/decrease word space. +\# $WS is a concatenation of WS_CONSTANT and WS_VAR. +\# +\# Because the user supplied value requires a literal + or - sign, +\# the macro argument is stored in a string. +\# +\# \n[.sss] holds the current sentence space value. +\# +.MAC WS END +. ds $WS_CONSTANT 12 +. ds $WS_VAR \\$1 +. ie '\\$1'DEFAULT' .ds $WS_VAR +0 +. el .ds $WS (\\*[$WS_CONSTANT]\\*[$WS_VAR]) +. ie \\n[.sss]=12 \{ .ss \\*[$WS] 12 \} +. el \{\ +. ss \\*[$WS] (\\*[$WS]\\*[$SS_VAR]) +. SS \\*[$SS_VAR] +. \} +.END +\# +\# +\# SENTENCE SPACE CONTROL +\# ---------------------- +\# *Argument: +\# <+-sentencespace> | 0 | DEFAULT +\# *Function: +\# Increases or decreases sentence space by user supplied amount. +\# If 0, sentence spaces are ignored. If DEFAULT, value is +\# set to 12 (groff default). +\# *Notes: +\# Because the user supplied value requires a literal + or - sign, +\# the macro argument is stored in a string. +\# +\# Sentence space applies only to input where sentences are separated +\# by two spaces (and/or, in fill mode [FLUSH L|R|C or JUSTIFY], an EOL). +\# Changing .SS when sentences are separated by only one space has +\# no effect on the space between sentences. +\# +\# \n[.ss] holds the current wordspace value. +\# \n[.sss] holds the current sentence space value. +\# +.MAC SS END +. ie '\\$1'0' \{ .ss \\n[.ss] (\\n[.ss]-\\n[.ss]) \} +. el \{\ +. ie '\\$1'DEFAULT' \{ .ss \\n[.ss] \} +. el \{\ +. ds $SS_VAR \\$1 +. ss \\n[.ss] (0\\*[$SS_VAR]) +. \} +. \} +.END +\# +\# +\# ===================================================================== +\# +\# +++INDENTS+++ +\# +\# There are five styles of indents: left, right, both, temporary, +\# and hanging. Each is set/invoked with a different macro. +\# Indent macros begin with the letter "I", hence .IL means "indent left," +\# .IR means "indent right," and so on. +\# +\# The first time any of the indent macros is used, it requires an +\# argument--the size of the indent (with a unit of measure). The +\# size may also be entered using the \w escape--very useful +\# for numbered lists using HI. The unit of measure is required. +\# Subsequent invocations don't require the argument; the indent +\# measure remains the same until it's changed by invoking the macro +\# with an argument again. +\# +\# If no indents are in effect, the arguments passed to indent macros are +\# measured from the left and right margins of the page. If a left indent +\# or a right indent is already in effect, the arguments passed to +\# the indent macros are calculated from the current values; in other words, +\# the arguments are additive. If you quit an indent and later return +\# to it, its value will be the value last in effect, unless you pass +\# it an argument. If you do pass an argument, it is added to the last +\# value in effect, unless you cleared the indent with one of +\# .IX/Q macros. +\# +\# Example +\# ------- +\# +\# .IL 2P +\# ...some text... +\# .IL 2P +\# ...some text... +\# .IQ +\# ...some text... +\# .IL +\# ...some text... +\# +\# The first .IL 2P indents text 2P from the left margin. The second +\# .IL 2P indents text by an additional 2P, i.e. 4P from the left margin. +\# .IQ turns the indent off. The last .IL (which has no argument) +\# takes its value from the total of all arguments passed to .IL (in +\# this case, 2P and 2P), therefore it indents 2P+2P from the left +\# margin, i.e. 4P. If you wanted the last .IL to indent just 2P, +\# you'd either have to reset the .IL prior to .IQ (.IL -2P), or pass +\# the last .IL the argument 2P. +\# +\# To reverse the sense of an indent added to an indent, you may use +\# negative values. +\# +\# Indents can be turned off individually with ILX, IRX, and IBX. +\# LEFT and RIGHT indents may be combined and manipulated +\# separately, (e.g. you can have an IL of 2P and an IR of 4P +\# operative at the same time, and then change, say, the IL to +\# 4P--thereby left indenting 6P--while the IR remains at 4P. +\# +\# IB automatically turns off IL and IR. They have to be reinvoked +\# again when needed. IL and IR automatically turn IB off; it, too, +\# has to be reinvoked with needed. +\# +\# All indents can be turned off at once with IQ. The ILX, IRX, IBX, +\# and IQ macros simply turn the indents off; the values stored in +\# the respective indent macros (IL, IR, IB) remain in effect. If +\# the user wishes to clear the values, the IX macros should be +\# invoked with the single argument CLEAR. IQ CLEAR clears out +\# the values stored for all indent styles. +\# +\# Indents *must* be turned off before settting string tabs +\# inside PAD. Generally, in order not to get confused, it's a +\# good idea to turn all indents off before setting any tabs. +\# +\# TI and HI are special cases. There's no need to turn them off, +\# since they affect only one line--the first after their +\# invocation. Like the other indent styles, the first time +\# they're invoked, they require a value in iPpcm; each subsequent +\# invocation without an argument will use the same value. To +\# change the value, simply pass a new value. Values for TI and HI +\# are *not* additive. +\# +\# HI presupposes that you already have a left or both indent on. +\# HI will never hang a line outside the left margin of a document +\# or column. In other words, you must have IL or IB on before you +\# can use HI. \# \# INDENT LEFT \# ----------- @@ -3168,6 +3911,7 @@ can use HI. \# is zero, advances to the baseline of the deepest column. \# .MAC MCX END +. TRAP OFF . ie '\\$1'' \{\ . TQ . sp |\\n(.hu @@ -3179,6 +3923,7 @@ can use HI. . el \{ .sp |\\n(.hu+\\n[#MCX_ALD]u \} . rr #MCX_ALD . \} +. TRAP .END \# \# ===================================================================== @@ -3246,6 +3991,9 @@ can use HI. \# | \# *Function: \# Converts text to caps, or, if OFF, reverts to normal caps/lc. +\# *Notes: +\# For inline control of capitalization style, use \*[UC] and +\# \*[LC]. \# .MAC CAPS END . ie '\\$1'' \{\ @@ -3320,6 +4068,80 @@ can use HI. . \} .END \# +.MAC UC END +\c +. tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ +. tr à\[`A] +. tr â\[^A] +. tr á\['A] +. tr ä\[:A] +. tr å\[oA] +. tr ã\[~A] +. tr æ\[AE] +. tr è\[`E] +. tr ê\[^E] +. tr é\['E] +. tr ë\[:E] +. tr ì\[`I] +. tr î\[^I] +. tr í\['I] +. tr ï\[:I] +. tr ò\[`O] +. tr ô\[^O] +. tr ó\['O] +. tr ö\[:O] +. tr õ\[~O] +. tr ø\[/O] +. tr ù\[`U] +. tr û\[^U] +. tr ú\['U] +. tr ü\[:U] +. tr ç\[,C] +. tr ð\[-D] +. tr ñ\[~N] +. tr þ\[TP] +. tr ý\['Y] +. tr ÿ\[:Y] +. nr #CAPS_ON 1 +.END +\# +.MAC LC END +\c +. tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz +. tr à\[`a] +. tr â\[^a] +. tr á\['a] +. tr ä\[:a] +. tr å\[oa] +. tr ã\[~a] +. tr æ\[ae] +. tr è\[`e] +. tr ê\[^e] +. tr é\['e] +. tr ë\[:e] +. tr ì\[`i] +. tr î\[^i] +. tr í\['i] +. tr ï\[:i] +. tr ò\[`o] +. tr ô\[^o] +. tr ó\['o] +. tr ö\[:o] +. tr õ\[~o] +. tr ø\[/o] +. tr ù\[`u] +. tr û\[^u] +. tr ú\['u] +. tr ü\[:u] +. tr ç\[,c] +. tr ð\[Sd] +. tr ñ\[~n] +. tr þ\[Tp] +. tr ý\['y] +. tr ÿ\[:y] +. rr #CAPS_ON +.END +\# \# SIZESPECS \# --------- \# Argument: @@ -3350,6 +4172,7 @@ y\\R'#DESCENDER \\n[.cdp]' .ALIAS CONDENSE CONDENSE_OR_EXTEND .ALIAS EXTEND CONDENSE_OR_EXTEND .ALIAS FAM FAMILY +.ALIAS FONT FT .ALIAS HYPHENATE HY .ALIAS HYPHENATION HY .ALIAS HYSET HY_SET @@ -3488,14 +4311,16 @@ y\\R'#DESCENDER \\n[.cdp]' . nr #BOLDER_UNITS 0 . nr #CONDENSE 0 . nr #EXTEND 0 -. rm IT +. if !\\n[#ITALIC_MEANS_ITALIC] \{ .rm IT \} . rm BD . rm BDI -. rm PREV -. UNDERLINE_SLANT -. UNDERLINE_ITALIC -. UNDERLINE_QUOTES +. if !\\n[#ITALIC_MEANS_ITALIC] \{ .rm PREV \} +. if !\\n[#SLANT_MEANS_SLANT] \{ .UNDERLINE_SLANT \} +. if !\\n[#ITALIC_MEANS_ITALIC] \{ .UNDERLINE_ITALIC \} +. if !\\n[#UNDERLINE_QUOTES] \{ .UNDERLINE_QUOTES \} . nr #IGNORE_COLUMNS 1 +. nr #RULE_WEIGHT 500 +. nr #HEAD_UNDERLINE_WEIGHT 500 . char \(em -- . tr `' . \} @@ -3701,13 +4526,13 @@ y\\R'#DESCENDER \\n[.cdp]' . if \\n[#USER_DEF_HDRFTR_CENTER]=0 \{\ . ie \\n[#DRAFT_WITH_PAGENUM] \{\ . ie '\\*[$CHAPTER]'' \{\ -. ie !'\\*[$CHAPTER_TITLE]'' \{\ +. ie !'\\*[$CHAPTER_TITLE_1]'' \{\ . ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE] . \} . el .ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] . \} . el \{\ -. ie !'\\*[$CHAPTER_TITLE]'' \{\ +. ie !'\\*[$CHAPTER_TITLE_1]'' \{\ . ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE] . \} . el .ds $HDRFTR_CENTER \\*[$CHAPTER_STRING] \\*[$CHAPTER] @@ -3716,7 +4541,7 @@ y\\R'#DESCENDER \\n[.cdp]' . el \{\ . ie '\\*[$REVISION]'' \{\ . ie '\\*[$CHAPTER]'' \{\ -. ie !'\\*[$CHAPTER_TITLE]'' \{\ +. ie !'\\*[$CHAPTER_TITLE_1]'' \{\ . ie '\\*[$DRAFT]'' \{\ . ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE] . \} @@ -3739,13 +4564,13 @@ y\\R'#DESCENDER \\n[.cdp]' . \} . \} . el \{\ -. ie !'\\*[$CHAPTER_TITLE]'' \{\ +. ie !'\\*[$CHAPTER_TITLE_1]'' \{\ . ie '\\*[$DRAFT]'' \{\ . ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE] . \} . el \{\ . ds $HDRFTR_CENTER \ - \\*[$CHAPTER_TITLE], \ + \\*[$CHAPTER_TITLE_1], \ \\*[$DRAFT_STRING]\\*[$DRAFT] . \} . \} @@ -3764,58 +4589,58 @@ y\\R'#DESCENDER \\n[.cdp]' . \} . el \{\ . ie '\\*[$CHAPTER]'' \{\ -. ie !'\\*[$CHAPTER_TITLE]'' \{\ +. ie !'\\*[$CHAPTER_TITLE_1]'' \{\ . ie '\\*[$DRAFT]'' \{\ . ds $HDRFTR_CENTER \ \\*[$CHAPTER_TITLE], \ - \\*[$REVISION_STRING] \\*[$REVISION] + \\*[$REVISION_STRING] \\*[$REVISION] . \} . el \{\ . ds $HDRFTR_CENTER \ \\*[$CHAPTER_TITLE], \ \\*[$DRAFT_STRING]\\*[$DRAFT], \ - \\*[$REVISION_STRING] \\*[$REVISION] + \\*[$REVISION_STRING] \\*[$REVISION] . \} . \} . el \{\ . ie '\\*[$DRAFT]'' \{\ . ds $HDRFTR_CENTER \ \\*[$CHAPTER_STRING], \ - \\*[$REVISION_STRING] \\*[$REVISION] + \\*[$REVISION_STRING] \\*[$REVISION] . \} . el \{\ . ds $HDRFTR_CENTER \ \\*[$CHAPTER_STRING], \ \\*[$DRAFT_STRING]\\*[$DRAFT], \ - \\*[$REVISION_STRING] \\*[$REVISION] + \\*[$REVISION_STRING] \\*[$REVISION] . \} . \} . \} . el \{\ -. ie !'\\*[$CHAPTER_TITLE]'' \{\ +. ie !'\\*[$CHAPTER_TITLE_1]'' \{\ . ie '\\*[$DRAFT]'' \{\ . ds $HDRFTR_CENTER \ \\*[$CHAPTER_TITLE], \ - \\*[$REVISION_STRING] \\*[$REVISION] + \\*[$REVISION_STRING] \\*[$REVISION] . \} . el \{\ . ds $HDRFTR_CENTER \ \\*[$CHAPTER_TITLE], \ \\*[$DRAFT_STRING]\\*[$DRAFT], \ - \\*[$REVISION_STRING] \\*[$REVISION] + \\*[$REVISION_STRING] \\*[$REVISION] . \} . \} . el \{\ . ie '\\*[$DRAFT]'' \{\ . ds $HDRFTR_CENTER \ \\*[$CHAPTER_STRING] \\*[$CHAPTER], \ - \\*[$REVISION_STRING] \\*[$REVISION] + \\*[$REVISION_STRING] \\*[$REVISION] . \} . el \{\ . ds $HDRFTR_CENTER \ \\*[$CHAPTER_STRING] \\*[$CHAPTER], \ \\*[$DRAFT_STRING]\\*[$DRAFT], \ - \\*[$REVISION_STRING] \\*[$REVISION] + \\*[$REVISION_STRING] \\*[$REVISION] . \} . \} . \} @@ -3830,7 +4655,7 @@ y\\R'#DESCENDER \\n[.cdp]' . ie \\n[#PAGENUM_STYLE_SET] \{ .PAGENUM_STYLE \\*[$PAGENUM_STYLE] \} . el \{ .PAGENUM_STYLE DIGIT \} . ie '\\*[$CHAPTER]'' \{\ -. ie !'\\*[$CHAPTER_TITLE]'' \{\ +. ie !'\\*[$CHAPTER_TITLE_1]'' \{\ . ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE] . \} . el \{\ @@ -3838,7 +4663,7 @@ y\\R'#DESCENDER \\n[.cdp]' . \} . \} . el \{\ -. ie !'\\*[$CHAPTER_TITLE]'' \{\ +. ie !'\\*[$CHAPTER_TITLE_1]'' \{\ . ds $HDRFTR_CENTER \\*[$CHAPTER_TITLE] . \} . el \{\ @@ -3906,26 +4731,101 @@ y\\R'#DESCENDER \\n[.cdp]' \# \# .MAC DOCTITLE END -. ds $DOC_TITLE \\$1 +. rr #DOCTITLE_NUM +. nr #DOCTITLE_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#DOCTITLE_NUM] \{\ +. ds $DOC_TITLE_\\n+[#DOCTITLE_NUM] \\$\\n[#DOCTITLE_NUM] +.\} +. ds $DOC_TITLE \\$* .END \# .MAC TITLE END \"Document title -. ds $TITLE \\$1 +. ie \\n[#NUM_ARGS]=0 \{\ +. if \\n[#TITLE_NUM] \{\ +. nr #ITEM 0 1 +. while \\n[#TITLE_NUM]>\\n[#ITEM] \{\ +. rm $TITLE_\\n+[#ITEM] +.\} +. rr #TITLE_NUM +. \} +. \} +. el \{\ +. nr #TITLE_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#TITLE_NUM] \{\ +. ds $TITLE_\\n+[#TITLE_NUM] \\$\\n[#TITLE_NUM] +.\} +. ds $TITLE \\$* +. \} .END \# \# .MAC SUBTITLE END \"Document sub-title -. ds $SUBTITLE \\$1 +. ie \\n[#NUM_ARGS]=0 \{\ +. if \\n[#SUBTITLE_NUM] \{\ +. nr #ITEM 0 1 +. while \\n[#SUBTITLE_NUM]>\\n[#ITEM] \{\ +. rm $SUBTITLE_\\n+[#ITEM] +.\} +. rr #SUBTITLE_NUM +. rm $SUBTITLE +. \} +. \} +. el \{\ +. if '\\$1'DOC_COVER' \{\ +. shift +. nr #SUBTITLE_DOCCOVER_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#SUBTITLE_DOCCOVER_NUM] \{\ +. ds $SUBTITLE_DOCCOVER_\\n+[#SUBTITLE_DOCCOVER_NUM] \\$\\n[#SUBTITLE_DOCCOVER_NUM] +.\} +. return +. \} +. if '\\$1'COVER' \{\ +. shift +. nr #SUBTITLE_COVER_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#SUBTITLE_COVER_NUM] \{\ +. ds $SUBTITLE_COVER_\\n+[#SUBTITLE_COVER_NUM] \\$\\n[#SUBTITLE_COVER_NUM] +.\} +. return +. \} +. nr #SUBTITLE_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#SUBTITLE_NUM] \{\ +. ds $SUBTITLE_\\n+[#SUBTITLE_NUM] \\$\\n[#SUBTITLE_NUM] +.\} +. ds $SUBTITLE \\$* +. \} .END \# \# .MAC CHAPTER END \"If document is a chapter, the chapter number +. nr #CHAPTER_CALLED 1 . ds $CHAPTER \\$1 +. if r#CH_NUM \{\ +. if \B'\\*[$CHAPTER]' \{\ +. nr #CH_NUM \\*[$CHAPTER] +. \} +. \} .END \# \# .MAC CHAPTER_TITLE END \" This defines what comes after Chapter # -. ds $CHAPTER_TITLE \\$1 +. ie \\n[#NUM_ARGS]=0 \{\ +. if \\n[#CHAPTER_TITLE_NUM] \{\ +. nr #ITEM 0 1 +. while \\n[#CHAPTER_TITLE_NUM]>\\n[#ITEM] \{\ +. rm $CHAPTER_TITLE_\\n+[#ITEM] +.\} +. rr #CHAPTER_TITLE_NUM +. rm $CHAPTER_TITLE +. \} +. \} +. el \{\ +. rr #CHAPTER_TITLE_NUM +. nr #CHAPTER_TITLE_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#CHAPTER_TITLE_NUM] \{\ +. ds $CHAPTER_TITLE_\\n+[#CHAPTER_TITLE_NUM] \\$\\n[#CHAPTER_TITLE_NUM] +.\} +. ds $CHAPTER_TITLE \\$* +. \} .END \# \# @@ -3946,27 +4846,110 @@ y\\R'#DESCENDER \\n[.cdp]' \# \# .MAC AUTHOR END \"Author. Enclose all args fully in double quotes. -. nr #AUTHOR_NUM -1 1 +. if '\\$1'DOC_COVER' \{\ +. shift +. nr #AUTHOR_DOCCOVER_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#AUTHOR_DOCCOVER_NUM] \{\ +. ds $AUTHOR_DOCCOVER_\\n+[#AUTHOR_DOCCOVER_NUM] \\$\\n[#AUTHOR_DOCCOVER_NUM] +.\} +. return +. \} +. if '\\$1'COVER' \{\ +. shift +. nr #AUTHOR_COVER_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#AUTHOR_COVER_NUM] \{\ +. ds $AUTHOR_COVER_\\n+[#AUTHOR_COVER_NUM] \\$\\n[#AUTHOR_COVER_NUM] +.\} +. return +. \} +. nr #AUTHOR_NUM 0 1 +. rm $AUTHORS . while \\n[#NUM_ARGS]>\\n[#AUTHOR_NUM] \{\ . ds $AUTHOR_\\n+[#AUTHOR_NUM] \\$\\n[#AUTHOR_NUM] +. as $AUTHORS \\*[$AUTHOR_\\n[#AUTHOR_NUM]], \" .\} -. nr #NUM_AUTHORS \\n[#NUM_ARGS]%2 \"Use mod 2 to test if odd or even # of authors -. ie \\n[#NUM_AUTHORS]=1 \{ .nr #AUTHOR_LINES 0 \} -. el \{ .nr #AUTHOR_LINES 1 \} +. substring $AUTHORS 0 -3 +. ds $AUTHOR \\*[$AUTHOR_1] .END \# +.ALIAS EDITOR AUTHOR \# -.MAC COPYRIGHT END \"For use on cover page only -. ds $COPYRIGHT \[co]\\$1 +.MAC COPYRIGHT END \"For use on cover pages only +. ie \\n[#NUM_ARGS]=1 \{\ +. ds $COPYRIGHT \[co]\\$1 +. rm $COPYRIGHT_DOCCOVER +. rm $COPYRIGHT_COVER +. \} +. el \{\ +. if '\\$1'DOC_COVER' \{\ +. ds $COPYRIGHT_DOCCOVER \[co]\\$2 +. \} +. if '\\$1'COVER' \{\ +. ds $COPYRIGHT_COVER \[co]\\$2 +. \} +. \} .END \# \# -.MAC MISC END \"For use on cover page only; enclose all args in double quotes -. nr #MISC_NUM -1 1 -. while \\n[#NUM_ARGS]>\\n[#MISC_NUM] \{\ -. ds $MISC_\\n+[#MISC_NUM] \\$\\n[#MISC_NUM] +.MAC MISC END \"For use on cover pages only; enclose all args in double quotes +. ie \\n[#NUM_ARGS]=0 \{\ +. if \\n[#MISC_NUM] \{\ +. nr #ITEM 0 1 +. while \\n[#MISC_NUM]>\\n[#ITEM] \{\ +. rm $MISC_\\n+[#ITEM] +.\} +. rr #MISC_NUM +. rr #NUM_MISCS +. \} +. if \\n[#MISC_DOCCOVER_NUM] \{\ +. nr #ITEM 0 1 +. while \\n[#MISC_DOCCOVER_NUM]>\\n[#ITEM] \{\ +. rm $MISC_DOCCOVER_\\n+[#ITEM] +.\} +. rr #MISC_DOCCOVER_NUM +. rr #NUM_MISCS +. \} +. if \\n[#MISC_COVER_NUM] \{\ +. nr #ITEM 0 1 +. while \\n[#MISC_COVER_NUM]>\\n[#ITEM] \{\ +. rm $MISC_COVER_\\n+[#ITEM] +.\} +. rr #MISC_COVER_NUM +. rr #NUM_MISCS +. \} +. \} +. el \{\ +. if !'\\$1'DOC_COVER' \{\ +. if !'\\$1'COVER' \{ .nr #NEITHER 1 \} +. \} +. if !'\\$1'COVER' \{\ +. if !'\\$1'DOC_COVER'\{ .nr #NEITHER 1 \} +. \} +. if '\\$1'DOC_COVER' \{\ +. shift +. nr #MISC_DOCCOVER_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#MISC_DOCCOVER_NUM] \{\ +. ds $MISC_DOCCOVER_\\n+[#MISC_DOCCOVER_NUM] \\$\\n[#MISC_DOCCOVER_NUM] +.\} +. nr #NUM_MISCS_DOCCOVER \\n[#NUM_ARGS] +. \} +. if '\\$1'COVER' \{\ +. shift +. nr #MISC_COVER_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#MISC_COVER_NUM] \{\ +. ds $MISC_COVER_\\n+[#MISC_COVER_NUM] \\$\\n[#MISC_COVER_NUM] .\} -. nr #NUM_MISCS \\n[#NUM_ARGS] +. nr #NUM_MISCS_COVER \\n[#NUM_ARGS] +. \} +. if \\n[#NEITHER]=1 \{\ +. nr #MISC_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#MISC_NUM] \{\ +. ds $MISC_\\n+[#MISC_NUM] \\$\\n[#MISC_NUM] +.\} +. nr #NUM_MISCS \\n[#NUM_ARGS] +. rr #NEITHER +. \} +. \} .END \# \# @@ -4131,18 +5114,15 @@ y\\R'#DESCENDER \\n[.cdp]' \# \# TYPE-STYLE CONTROL MACROS \# ------------------------- -\# -.ig -The control macros for family, font, size, quad and color are here -grouped together. Each (e.g. _FAMILY or _FONT) tests for a calling -alias before performing the action(s) appropriate to the calling -macro. Defaults for all these guys are set in DEFAULTS, and listed -in the "Control Macros" section of the documentation pertinent to -the macro whose style is to be changed. -.. +\# The control macros for family, font, size, quad and color are here +\# grouped together. Each (e.g. _FAMILY or _FONT) tests for a calling +\# alias before performing the action(s) appropriate to the calling +\# macro. Defaults for all these guys are set in DEFAULTS, and listed +\# in the "Control Macros" section of the documentation pertinent to +\# the macro whose style is to be changed. \# .MAC _FAMILY END -. if '\\$0'AUTHOR_FAMILY' .ds $AUTHOR_FAM \\$1 +. if '\\$0'AUTHOR_FAMILY' . if '\\$0'BIBLIOGRAPHY_FAMILY' .ds $BIB_FAM \\$1 . if '\\$0'BIBLIOGRAPHY_STRING_FAMILY' .ds $BIB_STRING_FAM \\$1 . if '\\$0'BLOCKQUOTE_FAMILY' .ds $BQUOTE_FAM \\$1 @@ -4182,6 +5162,7 @@ the macro whose style is to be changed. . if '\\$0'HDRFTR_LEFT_FAMILY' .ds $HDRFTR_LEFT_FAM \\$1 . if '\\$0'HDRFTR_RIGHT_FAMILY' .ds $HDRFTR_RIGHT_FAM \\$1 . if '\\$0'HEAD_FAMILY' .ds $HEAD_FAM \\$1 +. if '\\$0'LINENUMBER_FAMILY' .ds $LN_FAM \\$1 . if '\\$0'PAGENUM_FAMILY' .ds $PAGE_NUM_FAM \\$1 . if '\\$0'PARAHEAD_FAMILY' .ds $PH_FAM \\$1 . if '\\$0'QUOTE_FAMILY' .ds $QUOTE_FAM \\$1 @@ -4231,6 +5212,7 @@ the macro whose style is to be changed. . if '\\$0'HDRFTR_LEFT_FONT' .ds $HDRFTR_LEFT_FT \\$1 . if '\\$0'HDRFTR_RIGHT_FONT' .ds $HDRFTR_RIGHT_FT \\$1 . if '\\$0'HEAD_FONT' .ds $HEAD_FT \\$1 +. if '\\$0'LINENUMBER_FONT' .ds $LN_FT \\$1 . if '\\$0'PAGENUM_FONT' .ds $PAGE_NUM_FT \\$1 . if '\\$0'PARAHEAD_FONT' .ds $PH_FT \\$1 . if '\\$0'QUOTE_FONT' .ds $QUOTE_FT \\$1 @@ -4269,7 +5251,7 @@ the macro whose style is to be changed. . if '\\$0'ENDNOTE_NUMBER_SIZE' .ds $EN_NUMBER_SIZE_CHANGE \\$1 . if '\\$0'ENDNOTE_LINENUMBER_SIZE' .ds $EN_LN_SIZE_CHANGE \\$1 . if '\\$0'ENDNOTE_STRING_SIZE' .ds $EN_STRING_SIZE_CHANGE \\$1 -. if '\\$0'ENDNOTE_TITLE_SIZE' .ds $EN_TITLE_SIZE_CHANGE \\$1 +. if '\\$0'ENDNOTE_TITLE_SIZE' .ds $EN_TITLE_SIZE_CHANGE \\$1 . if '\\$0'EPIGRAPH_SIZE' .ds $EPI_SIZE_CHANGE \\$1 . if '\\$0'FOOTNOTE_SIZE' .ds $FN_SIZE_CHANGE \\$1 . if '\\$0'HDRFTR_CENTER_SIZE' .ds $HDRFTR_CENTER_SIZE_CHANGE \\$1 @@ -4277,6 +5259,7 @@ the macro whose style is to be changed. . if '\\$0'HDRFTR_RIGHT_SIZE' .ds $HDRFTR_RIGHT_SIZE_CHANGE \\$1 . if '\\$0'HDRFTR_SIZE' .ds $HDRFTR_SIZE_CHANGE \\$1 . if '\\$0'HEAD_SIZE' .ds $HEAD_SIZE_CHANGE \\$1 +. if '\\$0'LINENUMBER_SIZE' .ds $LN_SIZE_CHANGE \\$1 . if '\\$0'PAGENUM_SIZE' .ds $PAGE_NUM_SIZE_CHANGE \\$1 . if '\\$0'PARAHEAD_SIZE' .ds $PH_SIZE_CHANGE \\$1 . if '\\$0'QUOTE_SIZE' .ds $QUOTE_SIZE_CHANGE \\$1 @@ -4438,6 +5421,10 @@ the macro whose style is to be changed. . nr #LINEBREAK_COLOR 1 . ds $LINEBREAK_COLOR \\$1 . \} +. if '\\$0'LINENUMBER_COLOR' \{\ +. nr #LINENUMBER_COLOR 1 +. ds $LN_COLOR \\$1 +. \} . if '\\$0'PAGENUM_COLOR' \{\ . nr #PAGE_NUM_COLOR 1 . ds $PAGENUM_COLOR \\$1 @@ -4559,10 +5546,8 @@ the macro whose style is to be changed. . tm1 " If no footers or bottom-of-page page numbers are required, . tm1 " type in .FOOTER_MARGIN 0 before .START . \} -. if !r#HDRFTR_RULE_GAP \{\ -. if \\n[#HEADERS_ON] \{ .HDRFTR_RULE_GAP 4p \} -. if \\n[#FOOTERS_ON] \{ .HDRFTR_RULE_GAP 4p \} -. \} +. if !r#HEADER_RULE_GAP \{ .HEADER_RULE_GAP 4p \} +. if !r#FOOTER_RULE_GAP \{ .FOOTER_RULE_GAP 4p \} . if !r#HDRFTR_RULE \{ .HDRFTR_RULE \} . if !r#PAGE_NUM_SET \{ .PAGENUMBER 1 \} .\" Read in number registers and strings for type parameters @@ -4582,8 +5567,14 @@ the macro whose style is to be changed. . DOC_LEAD_ADJUST . \} . \} -. ds $DOC_QUAD \\*[$QUAD_VALUE] -. ds $PP_FT \\*[$FONT] +. ds $DOC_QUAD \\*[$QUAD_VALUE] +. if '\\*[$FONT]'' \{ .FT R \} +. if '\\*[$PP_FT]'' \{\ +. ds $PP_FT \\*[$FONT] +. \} +. if !'\\*[$PP_FT]'' \{\ +. ds $PP_FT \\*[$FONT] +. \} .\" Counters . nr #PP 0 . nr #FN_NUMBER 0 1 @@ -4620,7 +5611,9 @@ the macro whose style is to be changed. . if !d$FN_QUAD \{ .FOOTNOTE_QUAD \\*[$DOC_QUAD] \} . if !r#FN_RULE \{ .FOOTNOTE_RULE \} . if !r#FN_MARKERS \{ .FOOTNOTE_MARKERS \} -. if !\\n[#FN_MARKER_STYLE] \{ .FOOTNOTE_MARKER_STYLE STAR \} +. if \\n[#FN_MARKERS]=1 \{\ +. if !\\n[#FN_MARKER_STYLE] \{ .FOOTNOTE_MARKER_STYLE STAR \} +. \} . if !\\n[#EN_MARKER_STYLE] \{ .ENDNOTE_MARKER_STYLE NUMBER \} . if !d$EN_PN_STYLE \{ .ENDNOTES_PAGENUM_STYLE digit \} . if !d$EN_FAM \{ .ENDNOTE_FAMILY \\*[$DOC_FAM] \} @@ -4629,23 +5622,31 @@ the macro whose style is to be changed. . if !d$EN_STRING \{ .ENDNOTE_STRING "Endnotes" \} . if !d$EN_STRING_FAM \{ .ENDNOTE_STRING_FAMILY \\*[$EN_FAM] \} . if !d$EN_STRING_QUAD \{ .ENDNOTE_STRING_QUAD CENTER \} -. if !r#EN_STRING_UNDERSCORE \{ .ENDNOTE_STRING_UNDERSCORE 2 \} +. if !r#EN_STRING_UNDERLINE \{ .nr #EN_STRING_UNDERLINE 2 \} . if !r#EN_STRING_CAPS \{ .ENDNOTE_STRING_CAPS \} . if !d$EN_TITLE \{\ . ie \\n[#DOC_TYPE]=2 \{\ -. ie '\\*[$CHAPTER]'' \{ .ENDNOTE_TITLE "\\*[$CHAPTER_STRING]" \} -. el \{ .ENDNOTE_TITLE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]" \} -. \} -. el \{ .ENDNOTE_TITLE "\\*[$TITLE]" \} -. \} -. if !d$EN_TITLE_FAM \{ .ENDNOTE_TITLE_FAMILY \\*[$EN_FAM] \} -. if !d$EN_TITLE_QUAD \{ .ENDNOTE_TITLE_QUAD LEFT \} -. if !r#EN_TITLE_UNDERSCORE \{ .ENDNOTE_TITLE_UNDERSCORE \} -. if !d$EN_NUMBER_FAM \{ .ENDNOTE_NUMBER_FAMILY \\*[$EN_FAM] \} -. if !r#EN_NUMBERS_ALIGN_LEFT \{\ +. ie !'\\*[$CHAPTER_TITLE_1]'' \{\ +. ie '\\*[$CHAPTER]'' \{ .ENDNOTE_TITLE "\\*[$CHAPTER_TITLE]" \} +. el \{ .ENDNOTE_TITLE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]: \\*[$CHAPTER_TITLE]" \} +. \} +. el \{\ +. ie '\\*[$CHAPTER]'' \{ .ENDNOTE_TITLE "\\*[$CHAPTER_STRING]" \} +. el \{ .ENDNOTE_TITLE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]" \} +. \} +. \} +. el \{ .ENDNOTE_TITLE "\\*[$TITLE]" \} +. \} +. if !d$EN_TITLE_FAM \{ .ENDNOTE_TITLE_FAMILY \\*[$EN_FAM] \} +. if !d$EN_TITLE_QUAD \{ .ENDNOTE_TITLE_QUAD LEFT \} +. if !r#EN_TITLE_UNDERLINE \{ .nr #EN_TITLE_UNDERLINE 1 \} +. if !d$EN_NUMBER_FAM \{ .ENDNOTE_NUMBER_FAMILY \\*[$EN_FAM] \} +. if !d$EN_LN_FAM \{ .ENDNOTE_LINENUMBER_FAMILY \\*[$EN_FAM] \} +. if !r#EN_NUMBERS_ALIGN_LEFT \{\ . if !r#EN_NUMBERS_ALIGN_RIGHT \{ .ENDNOTE_NUMBERS_ALIGN_RIGHT 2 \} . \} -. if !d$EN_LN_GAP \{ .ENDNOTE_LINENUMBER_GAP 1.5n \} +. if !d$EN_LN_GAP \{ .ENDNOTE_LINENUMBER_GAP 1.5n \} +. if !r#EN_ALLOWS_HEADERS \{ .ENDNOTES_ALLOWS_HEADERS \} . if !d$BIB_PN_STYLE \{ .BIBLIOGRAPHY_PAGENUM_STYLE digit \} . if !d$BIB_FAM \{ .BIBLIOGRAPHY_FAMILY \\*[$DOC_FAM] \} . if !d$BIB_FT \{ .BIBLIOGRAPHY_FONT R \} @@ -4653,42 +5654,33 @@ the macro whose style is to be changed. . if !d$BIB_STRING \{ .BIBLIOGRAPHY_STRING "Bibliography" \} . if !d$BIB_STRING_FAM \{ .BIBLIOGRAPHY_STRING_FAMILY \\*[$BIB_FAM] \} . if !d$BIB_STRING_QUAD \{ .BIBLIOGRAPHY_STRING_QUAD CENTER \} -. if !r#BIB_STRING_UNDERSCORE \{ .BIBLIOGRAPHY_STRING_UNDERSCORE 2 \} +. if !r#BIB_STRING_UNDERLINE \{ .nr #BIB_STRING_UNDERLINE 2 \} . if !r#BIB_STRING_CAPS \{ .BIBLIOGRAPHY_STRING_CAPS \} . if !d$TOC_HEADER_STRING \{ .TOC_HEADER_STRING "Contents" \} . if !d$TOC_HEADER_QUAD \{ .TOC_HEADER_QUAD LEFT \} . if !d$TOC_PN_STYLE \{ .TOC_PAGENUM_STYLE roman \} . if !r#TOC_PN_PADDING \{ .TOC_PADDING 3 \} . if !r#TOC_TITLE_INDENT \{ .TOC_TITLE_INDENT 0 \} -. if !r#TOC_HEAD_INDENT \{ .TOC_HEAD_INDENT 18p \} -. if !r#TOC_SH_INDENT \{ .TOC_SUBHEAD_INDENT 30p \} -. if !r#TOC_PH_INDENT \{ .TOC_PARAHEAD_INDENT 42p \} .\" String defaults for both PRINTSTYLEs . ie \\n[#DOC_TYPE]=1 \{\ . ie '\\*[$DOC_TITLE]'' \{\ . if \\n[#USER_DEF_HDRFTR_LEFT]=0 .ds $HDRFTR_LEFT \\*[$AUTHOR_1] -. rr #USER_DEF_HDRFTR_LEFT . if \\n[#USER_DEF_HDRFTR_RIGHT]=0 .ds $HDRFTR_RIGHT \\*[$TITLE] -. rr #USER_DEF_HDRFTR_RIGHT . \} . el \{\ . if \\n[#COPY_STYLE]=1 \{ .DRAFT_WITH_PAGENUMBER \} . if \\n[#USER_DEF_HDRFTR_LEFT]=0 .ds $HDRFTR_LEFT \\*[$AUTHOR_1] -. rr #USER_DEF_HDRFTR_LEFT . if \\n[#USER_DEF_HDRFTR_CENTER]=0 .ds $HDRFTR_CENTER \\*[$TITLE] -. rr #USER_DEF_HDRFTR_CENTER . if \\n[#USER_DEF_HDRFTR_RIGHT]=0 .ds $HDRFTR_RIGHT \\*[$DOC_TITLE] -. rr #USER_DEF_HDRFTR_RIGHT . \} . \} . el \{\ . if \\n[#USER_DEF_HDRFTR_LEFT]=0 .ds $HDRFTR_LEFT \\*[$AUTHOR_1] -. rr #USER_DEF_HDRFTR_LEFT . if \\n[#USER_DEF_HDRFTR_RIGHT]=0 .ds $HDRFTR_RIGHT \\*[$TITLE] -. rr #USER_DEF_HDRFTR_RIGHT . \} -. if !d$ATTRIBUTE_STRING \{ .ATTRIBUTE_STRING "by" \} -. if !d$FINIS_STRING \{ .FINIS_STRING "END" \} +. if !d$ATTRIBUTE_STRING .ds $ATTRIBUTE_STRING by +. if !d$FINIS_STRING \{ .FINIS_STRING "End" \} +. if !r#FINIS_STRING_CAPS \{ .nr #FINIS_STRING_CAPS 1 \} .\" Covers . if !r#DOC_COVERS_OFF \{ .nr #DOC_COVERS 1 \} . if !r#COVERS_OFF \{ .nr #COVERS 1 \} @@ -4696,14 +5688,20 @@ the macro whose style is to be changed. . if !d$COVER_MISC_QUAD \{ .COVER_MISC_QUAD L \} . if !d$DOC_COVER_COPYRIGHT_QUAD \{ .DOC_COVER_COPYRIGHT_QUAD R \} . if !d$DOC_COVER_MISC_QUAD \{ .DOC_COVER_MISC_QUAD L \} +. if !r#DOCCOVER_UNDERLINE \{ .DOC_COVER_UNDERLINE \} +. if !r#COVER_UNDERLINE \{ .COVER_UNDERLINE \} .\" Defaults for printstyle TYPEWRITE . if \\n[#PRINT_STYLE]=1 \{\ . if \\n[#UNDERLINE_QUOTES]=1 \{ .UNDERLINE_QUOTES \} . if \\n[#UNDERLINE_QUOTES]=0 \{ .UNDERLINE_QUOTES OFF \} .\" +Quotes and blockquotes -. if !r#Q_OFFSET_VALUE \{ .QUOTE_INDENT 2 \} +. if !r#Q_OFFSET_VALUE \{\ +. if '\\*[$Q_OFFSET_VALUE]'' \{ .QUOTE_INDENT 2 \} +. \} .\" +Epigraphs -. if !r#EPI_OFFSET_VALUE \{ .EPIGRAPH_INDENT 2 \} +. if !r#EPI_OFFSET_VALUE \{\ +. if '\\*[$EPI_OFFSET_VALUE]'' \{ .EPIGRAPH_INDENT 2 \} +. \} .\" +Linebreaks . if !d$LINEBREAK_CHAR \{ .LINEBREAK_CHAR * 3 2p \} .\" +Footnotes @@ -4723,15 +5721,7 @@ the macro whose style is to be changed. . \} .\" Defaults for printstyle TYPESET . if \\n[#PRINT_STYLE]=2 \{\ -. if !d$DOCHEADER_LEAD_ADJ \{\ -. ie !'\\*[$CHAPTER_TITLE]'' \{\ -. ie !'\\*[$CHAPTER_STRING]'' \{\ -. DOCHEADER_LEAD +4 -. \} -. el \{ .DOCHEADER_LEAD +0 \} -. \} -. el \{ .DOCHEADER_LEAD +0 \} -. \} +. if !d$DOCHEADER_LEAD_ADJ \{ .DOCHEADER_LEAD +0 \} .\" +Cover . if !d$COVER_LEAD_ADJ \{ .COVER_LEAD +0 \} . if !d$COVER_FAM \{ .COVER_FAMILY \\*[$DOC_FAM] \} @@ -4855,8 +5845,9 @@ the macro whose style is to be changed. . ie !d$DOCHEADER_FAM \{ .DOCTYPE_FAMILY \\*[$DOC_FAM] \} . el \{ .DOCTYPE_FAMILY \\*[$DOCHEADER_FAM] \} . \} -. if !d$DOCTYPE_FT \{ .DOCTYPE_FONT BI \} -. if !d$DOCTYPE_SIZE_CHANGE \{ .DOCTYPE_SIZE +3 \} +. if !d$DOCTYPE_FT \{ .DOCTYPE_FONT BI \} +. if !d$DOCTYPE_SIZE_CHANGE \{ .DOCTYPE_SIZE +3 \} +. if !r#DOCTYPE_UNDERLINE \{ .DOCTYPE_UNDERLINE \} .\" +Headers and footers . if !d$HDRFTR_LEFT_FAM \{ .HDRFTR_LEFT_FAMILY \\*[$DOC_FAM] \} . if !d$HDRFTR_LEFT_FT \{ .HDRFTR_LEFT_FONT R \} @@ -4894,7 +5885,9 @@ the macro whose style is to be changed. . if !d$QUOTE_FAM \{ .QUOTE_FAMILY \\*[$DOC_FAM] \} . if !d$QUOTE_FT \{ .QUOTE_FONT I \} . if !d$QUOTE_SIZE_CHANGE \{ .QUOTE_SIZE +0 \} -. if !r#Q_OFFSET_VALUE \{ .QUOTE_INDENT 3 \} +. if !r#Q_OFFSET_VALUE \{\ +. if '\\*[$Q_OFFSET_VALUE]'' \{ .QUOTE_INDENT 3 \} +. \} .\" +Blockquotes .\" Note: the leading for quotes and blockquotes is set after .DEFAULTS in START . if !d$BQUOTE_FAM \{ .BLOCKQUOTE_FAMILY \\*[$DOC_FAM] \} @@ -4907,31 +5900,35 @@ the macro whose style is to be changed. . if !d$EPI_SIZE_CHANGE \{ .EPIGRAPH_SIZE -1.5 \} . if !r#EPI_AUTOLEAD \{ .EPIGRAPH_AUTOLEAD 2 \} . if !d$EPI_QUAD \{ .EPIGRAPH_QUAD \\*[$DOC_QUAD] \} -. if !r#EPI_OFFSET_VALUE \{ .EPIGRAPH_INDENT 3 \} +. if !r#EPI_OFFSET_VALUE \{\ +. if '\\*[$EPI_OFFSET_VALUE]'' \{ .EPIGRAPH_INDENT 3 \} +. \} .\" +Linebreaks -. if !d$LINEBREAK_CHAR \{ .LINEBREAK_CHAR * 3 3p \} +. if !d$LINEBREAK_CHAR \{ .LINEBREAK_CHAR * 3 3p \} +. if !d$LINEBREAK_COLOR \{ .LINEBREAK_COLOR black \} .\" +Footnotes . if !r#FN_RULE_LENGTH \{ .FOOTNOTE_RULE_LENGTH 4P \} . if !r#FN_RULE_ADJ \{ .FOOTNOTE_RULE_ADJ 3p \} . if !d$FN_SIZE_CHANGE \{ .FOOTNOTE_SIZE -2 \} . if !r#FN_AUTOLEAD \{ .FOOTNOTE_AUTOLEAD 2 \} .\" +Endnotes -. if !r#EN_PS \{ .ENDNOTE_PT_SIZE \\n[#DOC_PT_SIZE]u \} +. if !r#EN_PS \{ .ENDNOTE_PT_SIZE (\\n[#DOC_PT_SIZE]u)\} . if !d$EN_STRING_FT \{ .ENDNOTE_STRING_FONT B \} . if !d$EN_STRING_SIZE_CHANGE \{ .ENDNOTE_STRING_SIZE +1 \} . if !d$EN_TITLE_FT \{ .ENDNOTE_TITLE_FONT B \} . if !d$EN_TITLE_SIZE_CHANGE \{ .ENDNOTE_TITLE_SIZE +0 \} . if !d$EN_NUMBER_FT \{ .ENDNOTE_NUMBER_FONT B \} +. if !d$EN_LN_FT \{ .ENDNOTE_LINENUMBER_FONT R \} . if !d$EN_NUMBER_SIZE_CHANGE \{ .ENDNOTE_NUMBER_SIZE +0 \} . if !r#EN_PP_INDENT \{ .ENDNOTE_PARA_INDENT 1.5m \} .\" +Bibliography -. if !r#BIB_LIST \{ .BIBLIOGRAPHY_TYPE LIST . \} -. if !r#BIB_PS \{ .BIBLIOGRAPHY_PT_SIZE \\n[#DOC_PT_SIZE]u \} -. if !d$BIB_STRING_FT \{ .BIBLIOGRAPHY_STRING_FONT B \} -. if !d$BIB_STRING_SIZE_CHANGE \{ .BIBLIOGRAPHY_STRING_SIZE +1 \} +. if !r#BIB_LIST \{ .BIBLIOGRAPHY_TYPE LIST . \} +. if !r#BIB_PS \{ .BIBLIOGRAPHY_PT_SIZE (\\n[#DOC_PT_SIZE]u) \} +. if !d$BIB_STRING_FT \{ .BIBLIOGRAPHY_STRING_FONT B \} +. if !d$BIB_STRING_SIZE_CHANGE \{ .BIBLIOGRAPHY_STRING_SIZE +1 \} .\" +Table of contents . if !d$TOC_FAM \{ .TOC_FAMILY \\*[$DOC_FAM] \} -. if !r#TOC_PS \{ .TOC_PT_SIZE \\n[#DOC_PT_SIZE]u \} +. if !r#TOC_PS \{ .TOC_PT_SIZE (\\n[#DOC_PT_SIZE]u) \} . if !r#TOC_LEAD \{ .TOC_LEAD \\n[#DOC_LEAD]u ADJUST \} . if !d$TOC_HEADER_FAM \{ .TOC_HEADER_FAMILY \\*[$TOC_FAM] \} . if !d$TOC_HEADER_SIZE_CHANGE \{ .TOC_HEADER_SIZE +4 \} @@ -4951,9 +5948,18 @@ the macro whose style is to be changed. . if !d$TOC_HEAD_SIZE_CHANGE \{ .TOC_HEAD_SIZE +.5 \} . if !d$TOC_SH_SIZE_CHANGE \{ .TOC_SUBHEAD_SIZE +0 \} . if !d$TOC_PH_SIZE_CHANGE \{ .TOC_PARAHEAD_SIZE +0 \} +. ps \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE_CHANGE] +. if !r#TOC_HEAD_INDENT \{ .TOC_HEAD_INDENT \w'\0\0.' \} +. ps +. ps \\n[#TOC_PS]u\\*[$TOC_HEAD_SIZE_CHANGE] +. if !r#TOC_SH_INDENT \{ .TOC_SUBHEAD_INDENT \\n[#TOC_HEAD_INDENT]+\w'\0\0.' \} +. ps +. ps \\n[#TOC_PS]u\\*[$TOC_SH_SIZE_CHANGE] +. if !r#TOC_PH_INDENT \{ .TOC_PARAHEAD_INDENT \\n[#TOC_SH_INDENT]+\w'\0\0.' \} +. ps . \} .\" +Refer support -. if !r#ENDNOTE_REFS \{ .nr #FN_REFS 1 \} +. if !r#EN_REF \{ .nr #FN_REF 1 \} . if '\\*[$REF_FN_INDENT]'' \{\ . if \\n[#PRINT_STYLE]=1 \{ .INDENT_REFS FOOTNOTE 2m \} . if \\n[#PRINT_STYLE]=2 \{ .INDENT_REFS FOOTNOTE 1.5m \} @@ -4990,7 +5996,6 @@ the macro whose style is to be changed. . ie !\\n[#COLLATE] \{\ .\" DOC_LEAD adjusted (or not) here . TRAPS -. rr #DOC_LEAD_ADJUST_OFF .\" Endnote, bibliography and toc leading . nr #OK_PROCESS_LEAD 1 . nr #RESTORE_DOC_LEAD \\n(.v @@ -5086,28 +6091,75 @@ the macro whose style is to be changed. \# \# Next, some utility macros for various routines to prevent repetition \# +. if '\\$1'DOC_COVER' \{\ +. shift +. nr #AUTHOR_DOCCOVER_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#AUTHOR_DOCCOVER_NUM] \{\ +. ds $AUTHOR_DOCCOVER_\\n+[#AUTHOR_DOCCOVER_NUM] \\$\\n[#AUTHOR_DOCCOVER_NUM] +.\} +. return +. \} +. if '\\$1'COVER' \{\ +. shift +. nr #AUTHOR_COVER_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#AUTHOR_COVER_NUM] \{\ +. ds $AUTHOR_COVER_\\n+[#AUTHOR_COVER_NUM] \\$\\n[#AUTHOR_COVER_NUM] +.\} +. return +. \} +\# .MAC PRINT_AUTHORS END -. nr #AUTHORS \\n[#AUTHOR_NUM] -. nr #NEXT_AUTHOR 0 1 . ie r#DOING_COVER \{\ -. if \\n[#COVER]=1 \{\ -. while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\ -. ie \\n[#COVER_AUTHOR_COLOR]=1 \{\ -. PRINT \m[\\*[$COVER_AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[] -. \} -. el \{ .PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]] \} +. if \\n[#DOC_COVER]=1 \{\ +. ie !'\\*[$AUTHOR_DOCCOVER_1]'' \{\ +. nr #AUTHORS \\n[#AUTHOR_DOCCOVER_NUM] +. nr #NEXT_AUTHOR 0 1 +. while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\ +. ie \\n[#DOC_COVER_AUTHOR_COLOR]=1 \{\ +. PRINT \m[\\*[$DOC_COVER_AUTHOR_COLOR]]\\*[$AUTHOR_DOCCOVER_\\n+[#NEXT_AUTHOR]]\m[] +. \} +. el \{ .PRINT \\*[$AUTHOR_DOCCOVER_\\n+[#NEXT_AUTHOR]] \} .\} +. \} +. el \{\ +. nr #AUTHORS \\n[#AUTHOR_NUM] +. nr #NEXT_AUTHOR 0 1 +. while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\ +. ie \\n[#DOC_COVER_AUTHOR_COLOR]=1 \{\ +. PRINT \m[\\*[$DOC_COVER_AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[] +. \} +. el \{ .PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]] \} +.\} +. \} +. return . \} -. if \\n[#DOC_COVER]=1 \{\ -. while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\ -. ie \\n[#DOC_COVER_AUTHOR_COLOR]=1 \{\ -. PRINT \m[\\*[$DOC_COVER_AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[] -. \} -. el \{ .PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]] \} +. if \\n[#COVER]=1 \{\ +. ie !'\\*[$AUTHOR_COVER_1]'' \{\ +. nr #AUTHORS \\n[#AUTHOR_COVER_NUM] +. nr #NEXT_AUTHOR 0 1 +. while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\ +. ie \\n[#COVER_AUTHOR_COLOR]=1 \{\ +. PRINT \m[\\*[$COVER_AUTHOR_COLOR]]\\*[$AUTHOR_COVER_\\n+[#NEXT_AUTHOR]]\m[] +. \} +. el \{ .PRINT \\*[$AUTHOR_COVER_\\n+[#NEXT_AUTHOR]] \} .\} +. \} +. el \{\ +. nr #AUTHORS \\n[#AUTHOR_NUM] +. nr #NEXT_AUTHOR 0 1 +. while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\ +. ie \\n[#COVER_AUTHOR_COLOR]=1 \{\ +. PRINT \m[\\*[$COVER_AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[] +. \} +. el \{ .PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]] \} +.\} +. \} +. return . \} . \} . el \{\ +. nr #AUTHORS \\n[#AUTHOR_NUM] +. nr #NEXT_AUTHOR 0 1 . while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\ . ie \\n[#AUTHOR_COLOR]=1 \{\ . PRINT \m[\\*[$AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[] @@ -5118,36 +6170,48 @@ the macro whose style is to be changed. .END \# .MAC DEFAULT_DOCHEADER END -. CENTER -. FAMILY \\*[$TITLE_FAM] -. FT \\*[$TITLE_FT] -. PT_SIZE \\*[$TITLE_PT_SIZE] -. LS \\n[#DOCHEADER_LEAD]u -. ie \\n[#TITLE_COLOR]=1 \{\ -. PRINT \m[\\*[$TITLE_COLOR]]\\*[$TITLE]\m[] +. if !'\\*[$TITLE_1]'' \{\ +. CENTER +. FAMILY \\*[$TITLE_FAM] +. FT \\*[$TITLE_FT] +. PT_SIZE \\*[$TITLE_PT_SIZE] +. LS \\n[#DOCHEADER_LEAD]u +. nr #ARG_NUM 0 1 +. while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. ie \\n[#TITLE_COLOR]=1 \{\ +. PRINT "\m[\\*[$TITLE_COLOR]]\\*[$TITLE_\\n[#ARG_NUM]]\m[] +. \} +. el \{\ +. PRINT "\\*[$TITLE_\\n[#ARG_NUM]] +. \} +.\} . \} -. el \{ .PRINT \\*[$TITLE] \} -. if !'\\*[$SUBTITLE]'' \{\ +. if !'\\*[$SUBTITLE_1]'' \{\ . FAMILY \\*[$SUBTITLE_FAM] . FT \\*[$SUBTITLE_FT] . PT_SIZE \\*[$SUBTITLE_PT_SIZE] -. ie \\n[#SUBTITLE_COLOR]=1 \{\ -. PRINT \m[\\*[$SUBTITLE_COLOR]]\\*[$TITLE]\m[] -. \} -. el \{ .PRINT \\*[$SUBTITLE] \} +. nr #ARG_NUM 0 1 +. while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. ie \\n[#SUBTITLE_COLOR]=1 \{\ +. PRINT "\m[\\*[$SUBTITLE_COLOR]]\\*[$SUBTITLE_\\n[#ARG_NUM]]\m[] +. \} +. el \{\ +. PRINT "\\*[$SUBTITLE_\\n[#ARG_NUM]] +. \} +.\} . \} . if !'\\*[$AUTHOR_1]'' \{\ . FAMILY \\*[$AUTHOR_FAM] . FT \\*[$AUTHOR_FT] . PT_SIZE \\*[$AUTHOR_PT_SIZE] -. if !'\\*[$ATTRIBUTE_STRING]'' \{\ -. ie \\n[#ATTRIBUTE_COLOR]=1 \{\ -. PRINT \m[\\*[$ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[] -. \} -. el \{ .PRINT \\*[$ATTRIBUTE_STRING] \} +. ie \\n[#ATTRIBUTE_COLOR]=1 \{\ +. PRINT \&\m[\\*[$ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[] . \} +. el \{ .PRINT \&\\*[$ATTRIBUTE_STRING] \} . PRINT_AUTHORS . \} +. FAMILY \\*[$DOC_FAM] +. FT R .END \# \# @@ -5159,17 +6223,20 @@ the macro whose style is to be changed. . LS \\n[#DOCHEADER_LEAD]u .\" Chapter title only . ie '\\*[$CHAPTER]'' \{\ -. ie !'\\*[$CHAPTER_TITLE]'' \{\ +. ie !'\\*[$CHAPTER_TITLE_1]'' \{\ . if \\n[#PRINT_STYLE]=2 \{\ . FAMILY \\*[$CHAPTER_TITLE_FAM] . FT \\*[$CHAPTER_TITLE_FT] . PT_SIZE \\*[$CHAPTER_TITLE_PT_SIZE] . LS \\n[#DOCHEADER_LEAD]u . \} -. ie \\n[#TITLE_COLOR]=1 \{\ -. PRINT \m[\\*[$TITLE_COLOR]]\\*[$CHAPTER_TITLE]\m[] -. \} -. el \{ .PRINT \\*[$CHAPTER_TITLE] \} +. nr #ARG_NUM 0 1 +. while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. ie \\n[#TITLE_COLOR]=1 \{\ +. PRINT \m[\\*[$TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[] +. \} +. el \{ .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] \} +.\} . \} . el \{\ . ie \\n[#TITLE_COLOR]=1 \{\ @@ -5184,21 +6251,26 @@ the macro whose style is to be changed. . PRINT \m[\\*[$TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[] . \} . el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \} -. if !'\\*[$CHAPTER_TITLE]'' \{\ -. if \\n[#PRINT_STYLE]=1 \{ .PRINT \\*[$CHAPTER_TITLE] \} +. if !'\\*[$CHAPTER_TITLE_1]'' \{\ . if \\n[#PRINT_STYLE]=2 \{\ . FAMILY \\*[$CHAPTER_TITLE_FAM] . FT \\*[$CHAPTER_TITLE_FT] . PT_SIZE \\*[$CHAPTER_TITLE_PT_SIZE] . LS \\n[#DOCHEADER_LEAD]u +. ALD \\n[.v]u/4u \"Put a little space before the chapter title +. \} +. nr #ARG_NUM 0 1 +. while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\ . ie \\n[#CHAPTER_TITLE_COLOR]=1 \{\ -. PRINT \m[\\*[$CHAPTER_TITLE_COLOR]]\\*[$CHAPTER_TITLE]\m[] +. PRINT \m[\\*[$CHAPTER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[] . \} -. el \{ .PRINT \\*[$CHAPTER_TITLE] \} -. RLD \\n[#DOC_LEAD]u \" Just looks better this way -. \} +. el \{ .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] \} +.\} +. RLD \\n[#DOC_LEAD]u \" Just looks better this way . \} . \} +. FAMILY \\*[$DOC_FAM] +. FT R .END \# \# @@ -5208,29 +6280,39 @@ the macro whose style is to be changed. . FT \\*[$TITLE_FT] . PT_SIZE \\*[$TITLE_PT_SIZE] . LS \\n[#DOCHEADER_LEAD]u -. ie \\n[#TITLE_COLOR]=1 \{\ -. PRINT \m[\\*[$TITLE_COLOR]]\\*[$TITLE]\m[] +. if !'\\*[$TITLE_1]'' \{\ +. nr #ARG_NUM 0 1 +. while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. ie \\n[#TITLE_COLOR]=1 \{\ +. PRINT "\m[\\*[$TITLE_COLOR]]\\*[$TITLE_\\n[#ARG_NUM]]\m[] +. \} +. el \{\ +. PRINT "\\*[$TITLE_\\n[#ARG_NUM]] +. \} +.\} . \} -. el \{ .PRINT \\*[$TITLE] \} . if !'\\*[$SUBTITLE]'' \{\ . FAMILY \\*[$SUBTITLE_FAM] . FT \\*[$SUBTITLE_FT] . PT_SIZE \\*[$SUBTITLE_PT_SIZE] -. ie \\n[#SUBTITLE_COLOR]=1 \{\ -. PRINT \m[\\*[$SUBTITLE_COLOR]]\\*[$TITLE]\m[] -. \} -. el \{ .PRINT \\*[$SUBTITLE] \} +. nr #ARG_NUM 0 1 +. while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. ie \\n[#SUBTITLE_COLOR]=1 \{\ +. PRINT "\m[\\*[$SUBTITLE_COLOR]]\\*[$SUBTITLE_\\n[#ARG_NUM]]\m[] +. \} +. el \{\ +. PRINT "\\*[$SUBTITLE_\\n[#ARG_NUM]] +. \} +.\} . \} . if !'\\*[$AUTHOR_1]'' \{\ . FAMILY \\*[$AUTHOR_FAM] . FT \\*[$AUTHOR_FT] . PT_SIZE \\*[$AUTHOR_PT_SIZE] -. if !'\\*[$ATTRIBUTE_STRING]'' \{\ -. ie \\n[#ATTRIBUTE_COLOR]=1 \{\ -. PRINT \m[\\*[$ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[] -. \} -. el \{ .PRINT \\*[$ATTRIBUTE_STRING] \} +. ie \\n[#ATTRIBUTE_COLOR]=1 \{\ +. PRINT \&\m[\\*[$ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[] . \} +. el \{ .PRINT \&\\*[$ATTRIBUTE_STRING] \} . PRINT_AUTHORS . \} . FAMILY \\*[$DOCTYPE_FAM] @@ -5238,11 +6320,20 @@ the macro whose style is to be changed. . PT_SIZE \\*[$DOCTYPE_PT_SIZE] . LS \\n[#DOCHEADER_LEAD]u . ALD \\n[#DOCHEADER_LEAD]u -. ie \\n[#DOCTYPE_COLOR]=1 \{\ +. nr #FROM_DOCTYPE 1 +. if \\n[#DOCTYPE_COLOR]=1 \{\ . COLOR \\*[$DOCTYPE_COLOR] -. UNDERSCORE "\\*[$DOC_TYPE] . \} -. el .UNDERSCORE "\\*[$DOC_TYPE] +. ie \\n[#DOCTYPE_UNDERLINE]=1 \{\ +. UNDERSCORE \\*[$DOCTYPE_UNDERLINE_GAP] "\\*[$DOC_TYPE]" +. \} +. el \{\ +. PRINT "\\*[$DOC_TYPE]" +. \} +. COLOR black +. FAMILY \\*[$DOC_FAM] +. FT R +. rr #FROM_DOCTYPE .END \# \# @@ -5250,7 +6341,7 @@ the macro whose style is to be changed. \# ---------- \# *Arguments: \# TITLE | DOCTITLE | CHAPTER | CHAPTER_TITLE | CHAPTER+TITLE | COVERTITLE ... -\# ... [ SUBTITLE AUTHOR DOCTYPE COPYRIGHT MISC ] +\# ... [ SUBTITLE AUTHOR DOCTYPE COPYRIGHT MISC BLANKPAGE ] \# *Function: \# Toggles the number register for each cover page element \# passed as an argument. @@ -5258,13 +6349,15 @@ the macro whose style is to be changed. \# TITLE, DOCTITLE, CHAPTER, CHAPTER_TITLE or CHAPTER+TITLE must \# be supplied. After that, users may enter as many or as few of \# the arguments as they like; however, the arguments must appear -\# in the order given above. +\# in the order given above. BLANKPAGE, as the final argument, +\# inserts a blank page after the cover. \# \# If called as DOC_COVER, performs the same operations, but \# applies everything to a doc cover. \# .MAC COVER END . ie '\\$0'DOC_COVER' \{\ +. if '\\$\\n[#NUM_ARGS]'BLANKPAGE' \{ .nr #DOCCOVER_BLANKPAGE 1 \} . nr #DOC_COVER 1 . if '\\$1'TITLE' \{ .nr #DOC_COVER_TITLE 1 \} . if '\\$1'DOCTITLE' \{ .nr #DOC_COVER_TITLE 2 \} @@ -5289,6 +6382,7 @@ the macro whose style is to be changed. . if '\\$6'MISC' \{ .nr #DOC_COVER_MISC 1 \} . \} . el \{\ +. if '\\$\\n[#NUM_ARGS]'BLANKPAGE' \{ .nr #COVER_BLANKPAGE 1 \} . nr #COVER 1 . if '\\$1'TITLE' \{ .nr #COVER_TITLE 1 \} . if '\\$1'DOCTITLE' \{ .nr #COVER_TITLE 2 \} @@ -5316,8 +6410,44 @@ the macro whose style is to be changed. \# \# .MAC COVERTITLE END -. ie '\\$0'DOC_COVERTITLE' .ds $DOC_COVER_TITLE \\$1 -. el .ds $COVER_TITLE \\$1 +. ie '\\$0'DOC_COVERTITLE' \{\ +. ie \\n[#NUM_ARGS]=0 \{\ +. if \\n[#DOC_COVER_TITLE_NUM] \{\ +. nr #ITEM 0 1 +. while \\n[#DOC_COVER_TITLE_NUM]>\\n[#ITEM] \{\ +. rm $DOC_COVER_TITLE_\\n+[#ITEM] +.\} +. rr #DOC_COVER_TITLE_NUM +. rm $DOC_COVER_TITLE +. \} +. \} +. el \{\ +. nr #DOC_COVER_TITLE_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#DOC_COVER_TITLE_NUM] \{\ +. ds $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM] +.\} +. ds $DOC_COVER_TITLE \\$* +. \} +. \} +. el \{\ +. ie \\n[#NUM_ARGS]=0 \{\ +. if \\n[#COVER_TITLE_NUM] \{\ +. nr #ITEM 0 1 +. while \\n[#COVER_TITLE_NUM]>\\n[#ITEM] \{\ +. rm $COVER_TITLE_\\n+[#ITEM] +.\} +. rr #COVER_TITLE_NUM +. rm $COVER_TITLE +. \} +. \} +. el \{\ +. nr #COVER_TITLE_NUM 0 1 +. while \\n[#NUM_ARGS]>\\n[#COVER_TITLE_NUM] \{\ +. ds $COVER_TITLE_\\n+[#COVER_TITLE_NUM] \\$\\n[#COVER_TITLE_NUM] +.\} +. ds $COVER_TITLE \\$* +. \} +. \} .END \# \# @@ -5367,6 +6497,181 @@ the macro whose style is to be changed. .END \# \# +\# UNDERLINE CONTROL +\# ----------------- +\# *Arguments: +\# [ DOUBLE ] [ [] ] | | +\# *Function: +\# Toggles underlining of the element indicated by the calling alias +\# on or off. Uses #_UNDERLINE_WEIGHT to set the weight, +\# and defines string $_UNDERLINE_GAP. +\# *Notes: +\# Calling aliases COVER_ and DOCCOVER_ only apply if DOCTYPE is +\# NAMED and the DOCTYPE arg is passed to COVER or DOC_COVER. +\# +.MAC _UNDERLINE END +. ie '\\$1'' \{\ +. if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE' \{ .nr #BIB_STRING_UNDERLINE 1 \} +. if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \{ .nr #BIB_STRING_UNDERLINE 1 \} +. if '\\$0'COVER_UNDERLINE' \{ .nr #COVER_UNDERLINE 1 \} +. if '\\$0'DOC_COVER_UNDERLINE' \{ .nr #DOCCOVER_UNDERLINE 1 \} +. if '\\$0'DOCTYPE_UNDERLINE' \{ .nr #DOCTYPE_UNDERLINE 1 \} +. if '\\$0'HEAD_UNDERLINE' \{ .nr #HEAD_UNDERLINE 1 \} +. if '\\$0'ENDNOTE_STRING_UNDERLINE' \{ .nr #EN_STRING_UNDERLINE 1 \} +. if '\\$0'ENDNOTE_STRING_UNDERSCORE' \{ .nr #EN_STRING_UNDERLINE 1 \} +. if '\\$0'ENDNOTE_TITLE_UNDERLINE' \{ .nr #EN_TITLE_UNDERLINE 1 \} +. if '\\$0'ENDNOTE_TITLE_UNDERSCORE' \{ .nr #EN_TITLE_UNDERLINE 1 \} +. \} +. el \{\ +. ie \\n[#NUM_ARGS]=1 \{\ +. ds $ARG \\$1 +. substring $ARG -1 +. ie \B'\\*[$ARG]' \{\ +. if !\\n[#PRINT_STYLE]=1 \{\ +. if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE' \{ .BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1 \} +. if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \{ .BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1 \} +. if '\\$0'COVER_UNDERLINE' \{ .COVER_UNDERLINE_WEIGHT \\$1 \} +. if '\\$0'DOC_COVER_UNDERLINE' \{ .DOCCOVER_UNDERLINE_WEIGHT \\$1 \} +. if '\\$0'DOCTYPE_UNDERLINE' \{ .DOCTYPE_UNDERLINE_WEIGHT \\$1 \} +. if '\\$0'HEAD_UNDERLINE' \{ .HEAD_UNDERLINE_WEIGHT \\$1 \} +. if '\\$0'ENDNOTE_STRING_UNDERLINE' \{ .ENDNOTE_STRING_UNDERLINE_WEIGHT \\$1 \} +. if '\\$0'ENDNOTE_STRING_UNDERSCORE' \{ .ENDNOTE_STRING_UNDERLINE_WEIGHT \\$1 \} +. if '\\$0'ENDNOTE_TITLE_UNDERLINE' \{ .ENDNOTE_TITLE_UNDERLINE_WEIGHT \\$1 \} +. if '\\$0'ENDNOTE_TITLE_UNDERSCORE' \{ .ENDNOTE_TITLE_UNDERLINE_WEIGHT \\$1 \} +. \} +. \} +. el \{\ +. if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE' \{\ +. ie '\\$1'DOUBLE' \{ .nr #BIB_STRING_UNDERLINE 2 \} +. el \{ .nr #BIB_STRING_UNDERLINE 0 \} +. \} +. if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \{\ +. ie '\\$1'DOUBLE' \{ .nr #BIB_STRING_UNDERLINE 2 \} +. el \{ .nr #BIB_STRING_UNDERLINE 0 \} +. \} +. if '\\$0'COVER_UNDERLINE' \{ .nr #COVER_UNDERLINE 0 \} +. if '\\$0'DOC_COVER_UNDERLINE' \{ .nr #DOCCOVER_UNDERLINE 0 \} +. if '\\$0'DOCTYPE_UNDERLINE' \{ .nr #DOCTYPE_UNDERLINE 0 \} +. if '\\$0'HEAD_UNDERLINE' \{ .nr #HEAD_UNDERLINE 0 \} +. if '\\$0'ENDNOTE_STRING_UNDERLINE' \{\ +. ie '\\$1'DOUBLE' \{ .nr #EN_STRING_UNDERLINE 2 \} +. el \{ .nr #EN_STRING_UNDERLINE 0 \} +. \} +. if '\\$0'ENDNOTE_STRING_UNDERSCORE' \{\ +. ie '\\$1'DOUBLE' \{ .nr #EN_STRING_UNDERLINE 2 \} +. el \{ .nr #EN_STRING_UNDERLINE 0 \} +. \} +. \} +. \} +. el \{\ +. if !\\n[#PRINT_STYLE]=1 \{\ +. if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE' \{\ +. nr #BIB_STRING_UNDERLINE 1 +. if '\\$1'DOUBLE' \{\ +. nr #BIB_STRING_UNDERLINE 2 +. shift +. \} +. BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1 +. if !'\\$2'' \{\ +. ds $BIB_STRING_UNDERLINE_GAP \\$2 +. \} +. if !'\\$3'' \{\ +. ds $BIB_STRING_RULE_GAP \\$3 +. \} +. \} +. if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \{\ +. nr #BIB_STRING_UNDERLINE 1 +. if '\\$1'DOUBLE' \{\ +. nr #BIB_STRING_UNDERLINE 2 +. shift +. \} +. BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1 +. if !'\\$2'' \{\ +. ds $BIB_STRING_UNDERLINE_GAP \\$2 +. \} +. if !'\\$3'' \{\ +. ds $BIB_STRING_RULE_GAP \\$3 +. \} +. \} +. if '\\$0'COVER_UNDERLINE' \{\ +. nr #COVER_UNDERLINE 1 +. COVER_UNDERLINE_WEIGHT \\$1 +. ds $COVER_UNDERLINE_GAP \\$2 +. \} +. if '\\$0'DOC_COVER_UNDERLINE' \{\ +. nr #DOCCOVER_UNDERLINE 1 +. DOCCOVER_UNDERLINE_WEIGHT \\$1 +. ds $DOCCOVER_UNDERLINE_GAP \\$2 +. \} +. if '\\$0'DOCTYPE_UNDERLINE' \{\ +. nr #DOCTYPE_UNDERLINE 1 +. DOCTYPE_UNDERLINE_WEIGHT \\$1 +. ds $DOCTYPE_UNDERLINE_GAP \\$2 +. \} +. if '\\$0'HEAD_UNDERLINE' \{\ +. nr #HEAD_UNDERLINE 1 +. HEAD_UNDERLINE_WEIGHT \\$1 +. ds $HEAD_UNDERLINE_GAP \\$2 +. \} +\# ENDNOTE_STRING_UNDERLINE and ENDNOTE_STRING_UNDERSCORE are identical; +\# the _UNDERSCORE version is left in for backward compatibility. +. if '\\$0'ENDNOTE_STRING_UNDERLINE' \{\ +. nr #EN_STRING_UNDERLINE 1 +. if '\\$1'DOUBLE' \{\ +. nr #EN_STRING_UNDERLINE 2 +. shift +. \} +. ENDNOTE_STRING_UNDERLINE_WEIGHT \\$1 +. if !'\\$2'' \{\ +. ds $EN_STRING_UNDERLINE_GAP \\$2 +. \} +. if !'\\$3'' \{\ +. ds $EN_STRING_RULE_GAP \\$3 +. \} +. \} +. if '\\$0'ENDNOTE_STRING_UNDERSCORE' \{\ +. nr #EN_STRING_UNDERLINE 1 +. if '\\$1'DOUBLE' \{\ +. nr #EN_STRING_UNDERLINE 2 +. shift +. \} +. ENDNOTE_STRING_UNDERLINE_WEIGHT \\$1 +. if !'\\$2'' \{\ +. ds $EN_STRING_UNDERLINE_GAP \\$2 +. \} +. if !'\\$3'' \{\ +. ds $EN_STRING_RULE_GAP \\$3 +. \} +. \} +\# ENDNOTE_TITLE_UNDERLINE and ENDNOTE_TITLE_UNDERSCORE are identical; +\# the _UNDERSCORE version is left in for backward compatibility. +. if '\\$0'ENDNOTE_TITLE_UNDERLINE' \{\ +. nr #ENDNOTE_TITLE_UNDERLINE 1 +. ENDNOTE_TITLE_UNDERLINE_WEIGHT \\$1 +. ds $EN_TITLE_UNDERLINE_GAP \\$2 +. \} +. if '\\$0'ENDNOTE_TITLE_UNDERSCORE' \{\ +. nr #ENDNOTE_TITLE_UNDERLINE 1 +. ENDNOTE_TITLE_UNDERLINE_WEIGHT \\$1 +. ds $EN_TITLE_UNDERLINE_GAP \\$2 +. \} +. \} +. \} +. \} +.END +\# +.ALIAS BIBLIOGRAPHY_STRING_UNDERSCORE _UNDERLINE +.ALIAS BIBLIOGRAPHY_STRING_UNDERLINE _UNDERLINE +.ALIAS COVER_UNDERLINE _UNDERLINE +.ALIAS DOC_COVER_UNDERLINE _UNDERLINE +.ALIAS DOCTYPE_UNDERLINE _UNDERLINE +.ALIAS HEAD_UNDERLINE _UNDERLINE +.ALIAS ENDNOTE_STRING_UNDERLINE _UNDERLINE +.ALIAS ENDNOTE_STRING_UNDERSCORE _UNDERLINE +.ALIAS ENDNOTE_TITLE_UNDERLINE _UNDERLINE +.ALIAS ENDNOTE_TITLE_UNDERSCORE _UNDERLINE +\# +\# \# COVERS - WHETHER TO PRINT \# ------------------------- \# *Arguments: @@ -5399,6 +6704,29 @@ the macro whose style is to be changed. .END \# \# +\# COVER_COUNTS_PAGES +\# ------------------ +\# *Arguments: +\# | +\# *Function: +\# Creates or removes registers #COVERS_COUNT or #DOCCOVERS_COUNT, +\# used in END_COVER to determine whether to increment the page +\# number silently when doc covers or covers are output. +\# +.MAC COVER_COUNTS_PAGES END +. if '\\$0'DOC_COVER_COUNTS_PAGES' \{\ +. ie '\\$1'' \{ .nr #DOCCOVERS_COUNT 1 \} +. el \{ .rr #DOCCOVERS_COUNT \} +. return +. \} +. if '\\$0'COVER_COUNTS_PAGES' \{\ +. ie '\\$1'' \{ .nr #COVERS_COUNT 1 \} +. el \{ .rr #COVERS_COUNT \} +. return +. \} +.END +\# +\# .MAC DO_COVER END . nr #DOING_COVER 1 . ev COVER @@ -5449,27 +6777,41 @@ the macro whose style is to be changed. . if \\n[#DOC_COVER_TITLE]=1 \{\ . ie \\n[#PRINT_STYLE]=1 \{\ . CAPS -. UNDERSCORE "\\*[$TITLE]" +. nr #ARG_NUM 0 1 +. while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. UNDERSCORE "\\*[$TITLE_\\n[#ARG_NUM]]" +.\} . CAPS OFF . \} . el \{\ +. nr #ARG_NUM 0 1 +. while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\ . ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\ -. PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$TITLE]\m[] +. PRINT "\m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$TITLE_\\n[#ARG_NUM]]\m[] . \} -. el \{ .PRINT \\*[$TITLE] \} +. el \{\ +. PRINT "\\*[$TITLE_\\n[#ARG_NUM]] +. \} +.\} . \} . \} . if \\n[#DOC_COVER_TITLE]=2 \{\ . ie \\n[#PRINT_STYLE]=1 \{\ . CAPS -. UNDERSCORE "\\*[$DOC_TITLE]" +. nr #ARG_NUM 0 1 +. while \\n[#DOCTITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. UNDERSCORE "\\*[$DOC_TITLE_\\n[#ARG_NUM]]" +.\} . CAPS OFF . \} . el \{\ +. nr #ARG_NUM 0 1 +. while \\n[#DOCTITLE_NUM]>=\\n+[#ARG_NUM] \{\ . ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\ -. PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$DOC_TITLE]\m[] +. PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$DOC_TITLE_\\n[#ARG_NUM]]\m[] . \} -. el \{ .PRINT \\*[$DOC_TITLE] \} +. el \{ .PRINT \\*[$DOC_TITLE_\\n[#ARG_NUM]] \} +.\} . \} . \} . if \\n[#DOC_COVER_TITLE]=3 \{\ @@ -5488,14 +6830,28 @@ the macro whose style is to be changed. . if \\n[#DOC_COVER_TITLE]=4 \{\ . ie \\n[#PRINT_STYLE]=1 \{\ . CAPS -. UNDERSCORE "\\*[$CHAPTER_TITLE]" +. nr #ARG_NUM 0 1 +. ie \\n[#SINGLE_SPACE]=0 \{\ +. vs \\n[#DOC_LEAD]u/2u +. \} +. el \{\ +. vs \\n[#DOC_LEAD]u +. \} +. sp +. while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. UNDERSCORE "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]" +.\} . CAPS OFF +. if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u \} . \} . el \{\ +. nr #ARG_NUM 0 1 +. while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\ . ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\ -. PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE]\m[] +. PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[] . \} -. el \{ .PRINT \\*[$CHAPTER_TITLE] \} +. el \{ .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] \} +.\} . \} . \} . if \\n[#DOC_COVER_TITLE]=5 \{\ @@ -5510,46 +6866,95 @@ the macro whose style is to be changed. . \} . el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \} . \} -. if !'\\*[$CHAPTER_TITLE]'' \{\ +. if !'\\*[$CHAPTER_TITLE_1]'' \{\ . ie \\n[#PRINT_STYLE]=1 \{\ -. UNDERSCORE "\\*[$CHAPTER_TITLE]" +. ie \\n[#SINGLE_SPACE]=0 \{\ +. vs \\n[#DOC_LEAD]u/2u +. \} +. el \{\ +. vs \\n[#DOC_LEAD]u +. \} +. sp +. nr #ARG_NUM 0 1 +. while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. UNDERSCORE "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]" +.\} +. if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u \} . \} . el \{\ . FAMILY \\*[$DOC_COVER_CHAPTER_TITLE_FAM] . FT \\*[$DOC_COVER_CHAPTER_TITLE_FT] . PT_SIZE \\*[$DOC_COVER_CHAPTER_TITLE_PT_SIZE] -. ie \\n[#DOC_COVER_CHAPTER_TITLE_COLOR]=1 \{\ -. PRINT \m[\\*[$DOC_COVER_CHAPTER_TITLE_COLOR]]\\*[$CHAPTER_TITLE]\m[] -. \} -. el \{ .PRINT \\*[$CHAPTER_TITLE] \} +. nr #ARG_NUM 0 1 +. ALD \\n[.v]u/4u \"Put a little space before the chapter title +. while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\ +. PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[] +. \} +. el \{ .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] \} +.\} . \} . \} . \} . if \\n[#DOC_COVER_TITLE]=6 \{\ . ie \\n[#PRINT_STYLE]=1 \{\ . CAPS -. UNDERSCORE "\\*[$DOC_COVER_TITLE]" +. nr #ARG_NUM 0 1 +. while \\n[#DOC_COVER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. UNDERSCORE "\\*[$DOC_COVER_TITLE_\\n[#ARG_NUM]]" +.\} . CAPS OFF . \} . el \{\ +. nr #ARG_NUM 0 1 +. while \\n[#DOC_COVER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\ . ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\ -. PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$DOC_COVER_TITLE]\m[] +. PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$DOC_COVER_TITLE_\\n[#ARG_NUM]]\m[] . \} -. el \{ .PRINT \\*[$DOC_COVER_TITLE] \} +. el \{ .PRINT \\*[$DOC_COVER_TITLE_\\n[#ARG_NUM]] \} +.\} . \} . \} -. if \\n[#DOC_COVER_SUBTITLE]=1 \{\ -. FAMILY \\*[$DOC_COVER_SUBTITLE_FAM] -. FT \\*[$DOC_COVER_SUBTITLE_FT] -. PT_SIZE \\*[$DOC_COVER_SUBTITLE_PT_SIZE] -. if \\n[#PRINT_STYLE]=1 \{ .TYPEWRITER \} -. ie \\n[#DOC_COVER_SUBTITLE_COLOR]=1 \{\ -. PRINT \m[\\*[$DOC_COVER_SUBTITLE_COLOR]]\\*[$SUBTITLE]\m[] +. if !\\n[#DOC_TYPE]=2 \{\ +. if \\n[#DOC_COVER_SUBTITLE]=1 \{\ +. FAMILY \\*[$DOC_COVER_SUBTITLE_FAM] +. FT \\*[$DOC_COVER_SUBTITLE_FT] +. PT_SIZE \\*[$DOC_COVER_SUBTITLE_PT_SIZE] +. if \\n[#PRINT_STYLE]=1 \{\ +. TYPEWRITER +. ie \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u/2u \} +. el \{ .vs \\n[#DOC_LEAD]u \} +. sp +. \} +. if \\n[#DOC_COVER]=1 \{\ +. ie !'\\*[$SUBTITLE_DOCCOVER_1]'' \{\ +. nr #SUBTITLES \\n[#SUBTITLE_DOCCOVER_NUM] +. nr #NEXT_SUBTITLE 0 1 +. while \\n[#SUBTITLES]>\\n[#NEXT_SUBTITLE] \{\ +. ie \\n[#DOC_COVER_SUBTITLE_COLOR]=1 \{\ +. PRINT \m[\\*[$DOC_COVER_SUBTITLE_COLOR]]\\*[$SUBTITLE_DOCCOVER_\\n+[#NEXT_SUBTITLE]]\m[] +. \} +. el \{ .PRINT \\*[$SUBTITLE_DOCCOVER_\\n+[#NEXT_SUBTITLE]] \} +.\} +. \} +. el \{\ +. nr #SUBTITLES \\n[#SUBTITLE_NUM] +. nr #NEXT_SUBTITLE 0 1 +. while \\n[#SUBTITLES]>\\n[#NEXT_SUBTITLE] \{\ +. ie \\n[#DOC_COVER_SUBTITLE_COLOR]=1 \{\ +. PRINT \m[\\*[$DOC_COVER_SUBTITLE_COLOR]]\\*[$SUBTITLE_\\n+[#NEXT_SUBTITLE]]\m[] +. \} +. el \{ .PRINT \\*[$SUBTITLE_\\n+[#NEXT_SUBTITLE]] \} +.\} . \} -. el \{ .PRINT \\*[$SUBTITLE] \} . \} -. if \\n[#PRINT_STYLE]=1 \{\ -. if !r#DOC_COVER_SUBTITLE \{ .SP \} +. if \\n[#PRINT_STYLE]=1 \{\ +. if \\n[#SINGLE_SPACE]=0 \{ .vs \} +. \} +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. if !r#DOC_COVER_SUBTITLE \{ .sp \} +. \} . \} . if \\n[#DOC_COVER_AUTHOR]=1 \{\ . FAMILY \\*[$DOC_COVER_AUTHOR_FAM] @@ -5557,13 +6962,23 @@ the macro whose style is to be changed. . PT_SIZE \\*[$DOC_COVER_AUTHOR_PT_SIZE] . if \\n[#PRINT_STYLE]=1 \{\ . TYPEWRITER -. vs \\n[#DOC_LEAD]u/2u +. ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u \} +. el \{ .vs \\n[#DOC_LEAD]u/2u \} +. sp . \} -. if !'\\*[$ATTRIBUTE_STRING]'' \{\ +. ie d$ATTRIBUTE_STRING_DOCCOVER \{\ . ie \\n[#DOC_COVER_ATTRIBUTE_COLOR]=1 \{\ -. PRINT \m[\\*[$DOC_COVER_ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[] +. PRINT \&\m[\\*[$DOC_COVER_ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING_DOCCOVER]\m[] +. \} +. el \{ .PRINT \&\\*[$ATTRIBUTE_STRING_DOCCOVER] \} +. \} +. el \{\ +. if d$ATTRIBUTE_STRING \{\ +. ie \\n[#DOC_COVER_ATTRIBUTE_COLOR]=1 \{\ +. PRINT \&\m[\\*[$DOC_COVER_ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[] +. \} +. el \{ .PRINT \&\\*[$ATTRIBUTE_STRING] \} . \} -. el \{ .PRINT \\*[$ATTRIBUTE_STRING] \} . \} . PRINT_AUTHORS . \} @@ -5571,18 +6986,26 @@ the macro whose style is to be changed. . FT \\*[$DOC_COVER_DOCTYPE_FT] . PT_SIZE \\*[$DOC_COVER_DOCTYPE_PT_SIZE] . SP -. if \\n[#DOC_COVER_DOCTYPE]=1 \{\ -. ie \\n[#PRINT_STYLE]=1 \{\ -. TYPEWRITER -. vs \\n[#DOC_LEAD]u -. UNDERSCORE2 "\\*[$DOC_TYPE] -. \} -. el \{\ -. ie \\n[#DOC_COVER_DOCTYPE_COLOR]=1 \{\ -. COLOR \\*[$DOC_COVER_DOCTYPE_COLOR] -. UNDERSCORE "\\*[$DOC_TYPE] +. if \\n[#DOC_TYPE]=3 \{\ +. if \\n[#DOC_COVER_DOCTYPE]=1 \{\ +. ie \\n[#PRINT_STYLE]=1 \{\ +. TYPEWRITER +. vs \\n[#DOC_LEAD]u +. UNDERSCORE2 "\\*[$DOC_TYPE]" +. \} +. el \{\ +. nr #FROM_DOC_COVER 1 +. ie \\n[#DOC_COVER_DOCTYPE_COLOR]=1 \{\ +. COLOR \\*[$DOC_COVER_DOCTYPE_COLOR] +. ie \\n[#DOCCOVER_UNDERLINE]= 1 \{ .UNDERSCORE \\*[$DOCCOVER_UNDERLINE_GAP] "\\*[$DOC_TYPE]" \} +. el \{ .PRINT "\\*[$DOC_TYPE]" \} +. \} +. el \{\ +. ie \\n[#DOCCOVER_UNDERLINE]=1 \{ .UNDERSCORE \\*[$DOCCOVER_UNDERLINE_GAP] "\\*[$DOC_TYPE]" \} +. el \{ .PRINT "\\*[$DOC_TYPE]" \} +. \} +. rr #FROM_DOC_COVER . \} -. el .UNDERSCORE "\\*[$DOC_TYPE] . \} . \} . sp |\\n[#VISUAL_B_MARGIN]u+\\n[#DOC_LEAD]u @@ -5598,29 +7021,59 @@ the macro whose style is to be changed. . PT_SIZE \\*[$DOC_COVER_COPYRIGHT_PT_SIZE] . \} . if \\n[#DOC_COVER_COPYRIGHT]=1 \{\ +. if !'\\*[$COPYRIGHT_DOCCOVER]'' \{\ +. ds $SAVED_COPYRIGHT \\*[$COPYRIGHT] +. ds $COPYRIGHT \\*[$COPYRIGHT_DOCCOVER] +. \} . QUAD \\*[$DOC_COVER_COPYRIGHT_QUAD] . ie \\n[#DOC_COVER_COPYRIGHT_COLOR]=1 \{\ . PRINT \m[\\*[$DOC_COVER_COPYRIGHT_COLOR]]\\*[$COPYRIGHT]\m[] . \} . el \{ .PRINT \\*[$COPYRIGHT] \} +. ds $COPYRIGHT \\*[$SAVED_COPYRIGHT] . \} . sp |\\n[#VISUAL_B_MARGIN]u+\\n[#DOC_LEAD]u . if \\n[#DOC_COVER_MISC]=1 \{\ . QUAD \\*[$DOC_COVER_MISC_QUAD] -. nr #MISCS \\n[#MISC_NUM] -. sp -\\n[#MISCS]+1 -. nr #NEXT_MISC 0 1 -. while \\n[#MISCS]>\\n[#NEXT_MISC] \{\ -. ie \\n[#DOC_COVER_MISC_COLOR]=1 \{\ -. PRINT \m[\\*[$DOC_COVER_MISC_COLOR]]\\*[$MISC_\\n+[#NEXT_MISC]]\m[] -. br -. \} -. el \{\ -. PRINT \\*[$MISC_\\n+[#NEXT_MISC]] -. br -. \} +. ie !'\\*[$MISC_DOCCOVER_1]'' \{\ +. nr #MISCS \\n[#MISC_DOCCOVER_NUM] +. sp -\\n[#MISCS]+1 +. nr #NEXT_MISC 0 1 +. while \\n[#MISCS]>\\n[#NEXT_MISC] \{\ +. ie \\n[#DOC_COVER_MISC_COLOR]=1 \{\ +. PRINT \m[\\*[$DOC_COVER_MISC_COLOR]]\\*[$MISC_DOCCOVER_\\n+[#NEXT_MISC]]\m[] +. rm $MISC_DOCCOVER_\\n[#NEXT_MISC] +. rm $MISC_\\n[#NEXT_MISC] +. br +. \} +. el \{\ +. PRINT \\*[$MISC_DOCCOVER_\\n+[#NEXT_MISC]] +. rm $MISC_DOCCOVER_\\n[#NEXT_MISC] +. rm $MISC_\\n[#NEXT_MISC] +. br +. \} .\} +. rm $MISC_\\n+[#NEXT_MISC] +. \} +. el \{\ +. nr #MISCS \\n[#MISC_NUM] +. sp -\\n[#MISCS]+1 +. nr #NEXT_MISC 0 1 +. while \\n[#MISCS]>\\n[#NEXT_MISC] \{\ +. ie \\n[#DOC_COVER_MISC_COLOR]=1 \{\ +. PRINT \m[\\*[$DOC_COVER_MISC_COLOR]]\\*[$MISC_\\n+[#NEXT_MISC]]\m[] +. br +. \} +. el \{\ +. PRINT \\*[$MISC_\\n+[#NEXT_MISC]] +. br +. \} +.\} +. \} . \} +. if \\n[#DOCCOVERS_COUNT]=1 \{ .nr #PAGE_NUM_ADJ +1 \} +. nr #DOCCOVER_END 1 +. END_COVER . \} .\" Cover . el \{\ @@ -5651,27 +7104,41 @@ the macro whose style is to be changed. . if \\n[#COVER_TITLE]=1 \{\ . ie \\n[#PRINT_STYLE]=1 \{\ . CAPS -. UNDERSCORE "\\*[$TITLE]" +. nr #ARG_NUM 0 1 +. while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. UNDERSCORE "\\*[$TITLE_\\n[#ARG_NUM]]" +.\} . CAPS OFF . \} . el \{\ +. nr #ARG_NUM 0 1 +. while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\ . ie \\n[#COVER_TITLE_COLOR]=1 \{\ -. PRINT \m[\\*[$COVER_TITLE_COLOR]]\\*[$TITLE]\m[] +. PRINT "\m[\\*[$COVER_TITLE_COLOR]]\\*[$TITLE_\\n[#ARG_NUM]]\m[] +. \} +. el \{\ +. PRINT "\\*[$TITLE_\\n[#ARG_NUM]] . \} -. el \{ .PRINT \\*[$TITLE] \} +.\} . \} . \} . if \\n[#COVER_TITLE]=2 \{\ . ie \\n[#PRINT_STYLE]=1 \{\ . CAPS -. UNDERSCORE "\\*[$DOC_TITLE]" +. nr #ARG_NUM 0 1 +. while \\n[#DOCTITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. UNDERSCORE "\\*[$DOC_TITLE_\\n[#ARG_NUM]]" +.\} . CAPS OFF . \} . el \{\ -. ie \\n[#COVER_TITLE_COLOR]=1 \{\ -. PRINT \m[\\*[$COVER_TITLE_COLOR]]\\*[$DOC_TITLE]\m[] +. nr #ARG_NUM 0 1 +. while \\n[#DOCTITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\ +. PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$DOC_TITLE_\\n[#ARG_NUM]]\m[] . \} -. el \{ .PRINT \\*[$DOC_TITLE] \} +. el \{ .PRINT \\*[$DOC_TITLE_\\n[#ARG_NUM]] \} +.\} . \} . \} . if \\n[#COVER_TITLE]=3 \{\ @@ -5689,15 +7156,29 @@ the macro whose style is to be changed. . \} . if \\n[#COVER_TITLE]=4 \{\ . ie \\n[#PRINT_STYLE]=1 \{\ +. ie \\n[#SINGLE_SPACE]=0 \{\ +. vs \\n[#DOC_LEAD]u/2u +. \} +. el \{\ +. vs \\n[#DOC_LEAD]u +. \} +. sp . CAPS -. UNDERSCORE "\\*[$CHAPTER_TITLE]" +. nr #ARG_NUM 0 1 +. while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. UNDERSCORE "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]" +.\} . CAPS OFF +. if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u \} . \} . el \{\ -. ie \\n[#COVER_TITLE_COLOR]=1 \{\ -. PRINT \m[\\*[$COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE]\m[] +. nr #ARG_NUM 0 1 +. while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\ +. PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[] . \} -. el \{ .PRINT \\*[$CHAPTER_TITLE] \} +. el \{ .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] \} +.\} . \} . \} . if \\n[#COVER_TITLE]=5 \{\ @@ -5712,46 +7193,98 @@ the macro whose style is to be changed. . \} . el \{ .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] \} . \} -. if !'\\*[$CHAPTER_TITLE]'' \{\ +. if !'\\*[$CHAPTER_TITLE_1]'' \{\ . ie \\n[#PRINT_STYLE]=1 \{\ -. UNDERSCORE "\\*[$CHAPTER_TITLE]" +. ie \\n[#SINGLE_SPACE]=0 \{\ +. vs \\n[#DOC_LEAD]u/2u +. \} +. el \{\ +. vs \\n[#DOC_LEAD]u +. \} +. sp +. nr #ARG_NUM 0 1 +. while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. UNDERSCORE "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]" +.\} +. if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u \} . \} . el \{\ . FAMILY \\*[$COVER_CHAPTER_TITLE_FAM] . FT \\*[$COVER_CHAPTER_TITLE_FT] . PT_SIZE \\*[$COVER_CHAPTER_TITLE_PT_SIZE] -. ie \\n[#COVER_CHAPTER_TITLE_COLOR]=1 \{\ -. PRINT \m[\\*[$COVER_CHAPTER_TITLE_COLOR]]\\*[$CHAPTER_TITLE]\m[] -. \} -. el \{ .PRINT \\*[$CHAPTER_TITLE] \} +. ALD \\n[.v]u/4u \"Put a little space before the chapter title +. nr #ARG_NUM 0 1 +. while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. ie \\n[#DOC_COVER_TITLE_COLOR]=1 \{\ +. PRINT \m[\\*[$DOC_COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[] +. \} +. el \{ .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]] \} +.\} . \} . \} . \} . if \\n[#COVER_TITLE]=6 \{\ . ie \\n[#PRINT_STYLE]=1 \{\ . CAPS -. UNDERSCORE "\\*[$COVER_TITLE]" +. nr #ARG_NUM 0 1 +. while \\n[#COVER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. UNDERSCORE "\\*[$COVER_TITLE_\\n[#ARG_NUM]]" +.\} . CAPS OFF . \} . el \{\ +. nr #ARG_NUM 0 1 +. while \\n[#COVER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\ . ie \\n[#COVER_TITLE_COLOR]=1 \{\ -. PRINT \m[\\*[$COVER_TITLE_COLOR]]\\*[$COVER_TITLE]\m[] +. PRINT \m[\\*[$COVER_TITLE_COLOR]]\\*[$COVER_TITLE_\\n[#ARG_NUM]]\m[] . \} -. el \{ .PRINT \\*[$COVER_TITLE] \} +. el \{ .PRINT \\*[$COVER_TITLE_\\n[#ARG_NUM]] \} +.\} . \} . \} -. if \\n[#COVER_SUBTITLE]=1 \{\ -. FAMILY \\*[$COVER_SUBTITLE_FAM] -. FT \\*[$COVER_SUBTITLE_FT] -. PT_SIZE \\*[$COVER_SUBTITLE_PT_SIZE] -. if \\n[#PRINT_STYLE]=1 \{ .TYPEWRITER \} -. ie \\n[#COVER_SUBTITLE_COLOR]=1 \{\ -. PRINT \m[\\*[$COVER_SUBTITLE_COLOR]]\\*[$SUBTITLE]\m[] +. if !\\n[#DOC_TYPE]=2 \{\ +. if \\n[#COVER_SUBTITLE]=1 \{\ +. FAMILY \\*[$COVER_SUBTITLE_FAM] +. FT \\*[$COVER_SUBTITLE_FT] +. PT_SIZE \\*[$COVER_SUBTITLE_PT_SIZE] +. if \\n[#PRINT_STYLE]=1 \{\ +. TYPEWRITER +. if \\n[#PRINT_STYLE]=1 \{\ +. TYPEWRITER +. ie \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u/2u \} +. el \{ .vs \\n[#DOC_LEAD]u \} +. sp +. \} +. \} +. if \\n[#COVER]=1 \{\ +. ie !'\\*[$SUBTITLE_COVER_1]'' \{\ +. nr #SUBTITLES \\n[#SUBTITLE_COVER_NUM] +. nr #NEXT_SUBTITLE 0 1 +. while \\n[#SUBTITLES]>\\n[#NEXT_SUBTITLE] \{\ +. ie \\n[#COVER_SUBTITLE_COLOR]=1 \{\ +. PRINT \m[\\*[$COVER_SUBTITLE_COLOR]]\\*[$SUBTITLE_COVER_\\n+[#NEXT_SUBTITLE]]\m[] +. \} +. el \{ .PRINT \\*[$SUBTITLE_COVER_\\n+[#NEXT_SUBTITLE]] \} +.\} +. \} +. el \{\ +. nr #SUBTITLES \\n[#SUBTITLE_NUM] +. nr #NEXT_SUBTITLE 0 1 +. while \\n[#SUBTITLES]>\\n[#NEXT_SUBTITLE] \{\ +. ie \\n[#COVER_SUBTITLE_COLOR]=1 \{\ +. PRINT \m[\\*[$COVER_SUBTITLE_COLOR]]\\*[$SUBTITLE_\\n+[#NEXT_SUBTITLE]]\m[] +. \} +. el \{ .PRINT \\*[$SUBTITLE_\\n+[#NEXT_SUBTITLE]] \} +.\} . \} -. el \{ .PRINT \\*[$SUBTITLE] \} . \} -. if \\n[#PRINT_STYLE]=1 \{\ -. if !r#COVER_SUBTITLE \{ .SP \} +. if \\n[#PRINT_STYLE]=1 \{\ +. if \\n[#SINGLE_SPACE]=0 \{ .vs \} +. \} +. \} +. if \\n[#PRINT_STYLE]=1 \{\ +. if !r#COVER_SUBTITLE \{ .sp \} +. \} . \} . if \\n[#COVER_AUTHOR]=1 \{\ . FAMILY \\*[$COVER_AUTHOR_FAM] @@ -5759,13 +7292,23 @@ the macro whose style is to be changed. . PT_SIZE \\*[$COVER_AUTHOR_PT_SIZE] . if \\n[#PRINT_STYLE]=1 \{\ . TYPEWRITER -. vs \\n[#DOC_LEAD]u/2u +. ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u \} +. el \{ .vs \\n[#DOC_LEAD]u/2u \} +. sp . \} -. if !'\\*[$ATTRIBUTE_STRING]'' \{\ +. ie d$ATTRIBUTE_STRING_COVER \{\ . ie \\n[#COVER_ATTRIBUTE_COLOR]=1 \{\ -. PRINT \m[\\*[$COVER_ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[] +. PRINT \&\m[\\*[$COVER_ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING_COVER]\m[] +. \} +. el \{ .PRINT \&\\*[$ATTRIBUTE_STRING_COVER] \} +. \} +. el \{\ +. if d$ATTRIBUTE_STRING \{\ +. ie \\n[#COVER_ATTRIBUTE_COLOR]=1 \{\ +. PRINT \&\m[\\*[$COVER_ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[] +. \} +. el \{ .PRINT \&\\*[$ATTRIBUTE_STRING] \} . \} -. el \{ .PRINT \\*[$ATTRIBUTE_STRING] \} . \} . PRINT_AUTHORS . \} @@ -5773,18 +7316,26 @@ the macro whose style is to be changed. . FT \\*[$COVER_DOCTYPE_FT] . PT_SIZE \\*[$COVER_DOCTYPE_PT_SIZE] . SP -. if \\n[#COVER_DOCTYPE]=1 \{\ -. ie \\n[#PRINT_STYLE]=1 \{\ -. TYPEWRITER -. vs \\n[#DOC_LEAD]u -. UNDERSCORE2 "\\*[$DOC_TYPE] -. \} -. el \{\ -. ie \\n[#COVER_DOCTYPE_COLOR]=1 \{\ -. COLOR \\*[$COVER_DOCTYPE_COLOR] -. UNDERSCORE "\\*[$DOC_TYPE] +. if \\n[#DOC_TYPE]=3 \{\ +. if \\n[#COVER_DOCTYPE]=1 \{\ +. ie \\n[#PRINT_STYLE]=1 \{\ +. TYPEWRITER +. vs \\n[#DOC_LEAD]u +. UNDERSCORE2 "\\*[$DOC_TYPE]" +. \} +. el \{\ +. nr #FROM_COVER 1 +. ie \\n[#COVER_DOCTYPE_COLOR]=1 \{\ +. COLOR \\*[$COVER_DOCTYPE_COLOR] +. ie \\n[#COVER_UNDERLINE]= 1 \{ .UNDERSCORE \\*[$COVER_UNDERLINE_GAP] "\\*[$DOC_TYPE]" \} +. el \{ .PRINT "\\*[$DOC_TYPE] \} +. \} +. el \{\ +. ie \\n[#COVER_UNDERLINE]=1 \{ .UNDERSCORE \\*[$COVER_UNDERLINE_GAP] "\\*[$DOC_TYPE]" \} +. el \{ .PRINT "\\*[$DOC_TYPE]" \} +. \} +. rr #FROM_COVER . \} -. el .UNDERSCORE "\\*[$DOC_TYPE] . \} . \} . sp |\\n[#VISUAL_B_MARGIN]u+\\n[#DOC_LEAD]u @@ -5800,33 +7351,86 @@ the macro whose style is to be changed. . PT_SIZE \\*[$COVER_COPYRIGHT_PT_SIZE] . \} . if \\n[#COVER_COPYRIGHT]=1 \{\ +. if !'\\*[$COPYRIGHT_COVER]'' \{\ +. ds $SAVED_COPYRIGHT \\*[$COPYRIGHT] +. ds $COPYRIGHT \\*[$COPYRIGHT_COVER] +. \} . QUAD \\*[$COVER_COPYRIGHT_QUAD] . ie \\n[#COVER_COPYRIGHT_COLOR]=1 \{\ . PRINT \m[\\*[$COVER_COPYRIGHT_COLOR]]\\*[$COPYRIGHT]\m[] . \} . el \{ .PRINT \\*[$COPYRIGHT] \} +. ds $COPYRIGHT \\*[$SAVED_COPYRIGHT] . \} . sp |\\n[#VISUAL_B_MARGIN]u+\\n[#DOC_LEAD]u . if \\n[#COVER_MISC]=1 \{\ . QUAD \\*[$COVER_MISC_QUAD] -. nr #MISCS \\n[#MISC_NUM] -. sp -\\n[#MISCS]+1 -. nr #NEXT_MISC 0 1 -. while \\n[#MISCS]>\\n[#NEXT_MISC] \{\ -. ie \\n[#COVER_MISC_COLOR]=1 \{\ -. PRINT \m[\\*[$COVER_MISC_COLOR]]\\*[$MISC_\\n+[#NEXT_MISC]]\m[] -. br -. \} -. el \{\ -. PRINT \\*[$MISC_\\n+[#NEXT_MISC]] -. br -. \} +. ie !'\\*[$MISC_COVER_1]'' \{\ +. nr #MISCS \\n[#MISC_COVER_NUM] +. sp -\\n[#MISCS]+1 +. nr #NEXT_MISC 0 1 +. while \\n[#MISCS]>\\n[#NEXT_MISC] \{\ +. ie \\n[#COVER_MISC_COLOR]=1 \{\ +. PRINT \m[\\*[$COVER_MISC_COLOR]]\\*[$MISC_COVER_\\n+[#NEXT_MISC]]\m[] +. br +. \} +. el \{\ +. PRINT \\*[$MISC_COVER_\\n+[#NEXT_MISC]] +. br +. \} .\} +. \} +. el \{\ +. nr #MISCS \\n[#MISC_NUM] +. sp -\\n[#MISCS]+1 +. nr #NEXT_MISC 0 1 +. while \\n[#MISCS]>\\n[#NEXT_MISC] \{\ +. ie \\n[#COVER_MISC_COLOR]=1 \{\ +. PRINT \m[\\*[$COVER_MISC_COLOR]]\\*[$MISC_\\n+[#NEXT_MISC]]\m[] +. br +. \} +. el \{\ +. PRINT \\*[$MISC_\\n+[#NEXT_MISC]] +. br +. \} +.\} +. \} . \} +. if \\n[#COVERS_COUNT]=1 \{ .nr #PAGE_NUM_ADJ +1 \} +. nr #COVER_END 1 +. END_COVER . \} +.END +\# +\# Macro to terminate (doc)cover processing +\# +.MAC END_COVER END . EOL . TRAP . NEWPAGE +. if \\n[#PAGINATION_WAS_ON]=1 \{ .nr % +1 \} +. if \\n[#DOCCOVER_END]=1 \{\ +. ie \\n[#DOCCOVER_BLANKPAGE]=1 \{\ +. NEWPAGE +. rr #DOCCOVER_BLANKPAGE +. if !\\n[#DOCCOVERS_COUNT]=1 \{ .nr % -2 \} +. \} +. el \{\ +. if !\\n[#DOCCOVERS_COUNT]=1 \{ .nr #PAGE_NUM_ADJ -1 \} +. \} +. rr #DOCCOVER_END +. \} +. if \\n[#COVER_END]=1 \{\ +. ie \\n[#COVER_BLANKPAGE]=1 \{\ +. NEWPAGE +. rr #COVER_BLANKPAGE +. if !\\n[#COVERS_COUNT]=1 \{ .nr % -2 \} +. \} +. el \{\ +. if !\\n[#COVERS_COUNT]=1 \{ .nr #PAGE_NUM_ADJ -1 \} +. \} +. rr #COVER_END +. \} . ev . if \\n[#PAGINATION_WAS_ON] \{\ . rr #PAGINATION_WAS_ON @@ -5848,8 +7452,10 @@ the macro whose style is to be changed. . rr #DOING_COVER .END \# +\# Macro to begin document processing \# .MAC START END +. nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap' . if !\\n[#PRINT_STYLE] \{\ . PRINTSTYLE TYPEWRITE . PRINT \& @@ -5860,7 +7466,7 @@ the macro whose style is to be changed. . CENTER . PRINT "You neglected to enter a PRINTSTYLE" . fl -. ab PRINTSTYLE missing +. ab [mom]: PRINTSTYLE missing. Aborting. . \} . nr #DOCS 1 . if \\n[#LINENUMBERS]=1 \{\ @@ -5963,12 +7569,14 @@ the macro whose style is to be changed. \!. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE_CHANGE] . \} \!. TRAP OFF +\!. PAD_MARKER ^ . ie \\n[#PRINT_STYLE]=1 \{\ -\!. PAD "\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN_TYPEWRITE]" +\!. PAD "\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN_TYPEWRITE]" . \} . el \{\ \!. PAD "\\h'\\n[#TOC_TITLE_INDENT]u'\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN]" . \} +\!. PAD_MARKER # \!. EOL \!. ST 100 L \!. ST 101 R @@ -5983,7 +7591,7 @@ the macro whose style is to be changed. \!. TRAP \!. PRINT \\n[#TOC_ENTRY_PN] \!. TQ -. di +. di . ev . \} . el \{\ @@ -6022,8 +7630,6 @@ the macro whose style is to be changed. . ll \\n[#COL_L_LENGTH]u . \} . nr #PP 0 -. rr #DOC_HEADER -. if r#ADVANCE_FROM_TOP \{ .rr #ADVANCE_FROM_TOP \} . \} . el \{\ . if \\n[#PRINT_STYLE]=2 \{ .LS \\n[#DOC_LEAD]u\\*[$DOCHEADER_LEAD_ADJ] \} @@ -6044,58 +7650,34 @@ the macro whose style is to be changed. . if \\n[#PRINT_STYLE]=1 \{\ . CENTER . TYPEWRITER -. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u*2u \} -. el \{ .vs \\n[#DOC_LEAD]u \} -. CAPS -. if !'\\*[$TITLE]'' \{ .UNDERSCORE "\\*[$TITLE]\} -. CAPS OFF -. if !'\\*[$SUBTITLE]'' \{\ -. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u*2u \} -. el \{ .vs \\n[#DOC_LEAD]u \} -. PRINT \\*[$SUBTITLE] +. if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u/2u \} +. if !'\\*[$TITLE_1]'' \{\ +. CAPS +. nr #ARG_NUM 0 1 +. while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. UNDERSCORE 4p "\\*[$TITLE_\\n[#ARG_NUM]]" +.\} +. CAPS OFF . \} -. if '\\*[$SUBTITLE]'' \{\ -. ALD \\n[#DOC_LEAD]u +. if !'\\*[$SUBTITLE]'' \{\ +. sp +. nr #ARG_NUM 0 1 +. while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. UNDERSCORE 4p "\\*[$SUBTITLE_\\n[#ARG_NUM]]" +.\} . \} -. ie !'\\*[$AUTHOR_1]'' \{\ -. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u \} -. el \{ .vs \\n[#DOC_LEAD]u/2u \} -. if !d$SUBTITLE \{\ -. ie \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \} -. el \{ .ALD \\n[#DOC_LEAD]u*2u \} -. \} -. PRINT \\*[$ATTRIBUTE_STRING] +. if !'\\*[$AUTHOR_1]'' \{\ +. sp +. PRINT \&\\*[$ATTRIBUTE_STRING] . nr #AUTHORS \\n[#AUTHOR_NUM] . nr #NEXT_AUTHOR 0 1 . while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\ . PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]] .\} -. if \\n[#AUTHOR_LINES]=1 \{\ -. ie \\n[#SINGLE_SPACE] \{ .RLD \\n[#DOC_LEAD]u \} -. el \{ .ALD \\n[#DOC_LEAD]u/2u \} -. \} -. \} -. el \{\ -. ie !d$SUBTITLE \{\ -. ie \\n[#SINGLE_SPACE] \{ .RLD \\n[#DOC_LEAD]u*2u \} -. el \{ .RLD \\n[#DOC_LEAD]u \} -. \} -. el \{\ -. ie \\n[#SINGLE_SPACE] \{ .RLD \\n[#DOC_LEAD]u*2u \} -. el \{ .ALD \\n[#DOC_LEAD]u \} -. \} . \} . \} . if \\n[#PRINT_STYLE]=2 \{\ . DEFAULT_DOCHEADER -. di DOCHEADER_DIVERSION \" This diversion is only -. br \" necessary to find the depth of the -. DEFAULT_DOCHEADER \" docheader -. br -. di -. nr #DOCHEADER_DEPTH \\n(dn-\\n[#DOCHEADER_LEAD] \"Storing the depth (height) of the diversion -. \"in #DOCHEADER_DEPTH -. rm DOCHEADER_DIVERSION \" Removing the diversion macro . \} . ev . \} @@ -6116,27 +7698,36 @@ the macro whose style is to be changed. . CENTER . TYPEWRITER . vs \\n[#DOC_LEAD]u +. if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u/2u \} . ie '\\*[$CHAPTER]'' \{\ . CAPS . ie !'\\*[$CHAPTER_TITLE]'' \{\ -. PRINT \\*[$CHAPTER_TITLE] +. nr #ARG_NUM 0 1 +. while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. UNDERSCORE 4p "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]" +.\} . \} . el \{\ . CAPS -. PRINT \\*[$CHAPTER_STRING] +. UNDERSCORE 4p "\\*[$CHAPTER_STRING]" . \} . CAPS OFF +. RLD 1v . \} . el \{\ . CAPS . PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER] . CAPS OFF . if !'\\*[$CHAPTER_TITLE]'' \{\ -. if \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \} -. UNDERSCORE "\\*[$CHAPTER_TITLE] +. sp +. nr #ARG_NUM 0 1 +. while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. UNDERSCORE 4p "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]" +.\} . \} +. RLD 1v . \} -. if \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \} +. if \\n[#SINGLE_SPACE] \{ .ALD 2v \} . \} . if \\n[#PRINT_STYLE]=2 \{\ . CHAPTER_DOCHEADER @@ -6167,72 +7758,46 @@ the macro whose style is to be changed. . if \\n[#PRINT_STYLE]=1 \{\ . CENTER . TYPEWRITER -. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u*2u \} -. el \{ .vs \\n[#DOC_LEAD]u \} +. if \\n[#SINGLE_SPACE]=0 \{ .vs \\n[#DOC_LEAD]u/2u \} . CAPS -. if !'\\*[$TITLE]'' \{ .UNDERSCORE "\\*[$TITLE]\} +. if !'\\*[$TITLE]'' \{\ +. nr #ARG_NUM 0 1 +. while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. UNDERSCORE 4p "\\*[$TITLE_\\n[#ARG_NUM]]" +.\} +. \} . CAPS OFF . if !'\\*[$SUBTITLE]'' \{\ -. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u*2u \} -. el \{ .vs \\n[#DOC_LEAD]u \} -. PRINT \\*[$SUBTITLE] -. \} -. if '\\*[$SUBTITLE]'' \{\ -. ALD \\n[#DOC_LEAD]u +. sp +. nr #ARG_NUM 0 1 +. while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\ +. UNDERSCORE 4p "\\*[$SUBTITLE_\\n[#ARG_NUM]]" +.\} . \} -. ie !'\\*[$AUTHOR_1]'' \{\ -. ie \\n[#SINGLE_SPACE] \{ .vs \\n[#DOC_LEAD]u \} -. el \{ .vs \\n[#DOC_LEAD]u/2u \} -. if !d$SUBTITLE \{\ -. ie \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \} -. el \{ .ALD \\n[#DOC_LEAD]u*2u \} -. \} -. PRINT \\*[$ATTRIBUTE_STRING] +. if !'\\*[$AUTHOR_1]'' \{\ +. sp +. PRINT \&\\*[$ATTRIBUTE_STRING] . nr #AUTHORS \\n[#AUTHOR_NUM] . nr #NEXT_AUTHOR 0 1 . while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\ . PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]] .\} -. if \\n[#AUTHOR_LINES]=1 \{\ -. ie \\n[#SINGLE_SPACE] \{ .RLD \\n[#DOC_LEAD]u \} -. el \{ .ALD \\n[#DOC_LEAD]u/2u \} -. \} -. vs \\n[#DOC_LEAD]u -. \} -. el \{\ -. ie !d$SUBTITLE \{\ -. ie \\n[#SINGLE_SPACE] \{ .RLD \\n[#DOC_LEAD]u*2u \} -. el \{ .RLD \\n[#DOC_LEAD]u \} -. \} -. el \{\ -. ie \\n[#SINGLE_SPACE] \{ . \} -. el \{ .RLD \\n[#DOC_LEAD]u \} -. \} . \} -. ie \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u*2u \} -. el \{ .ALD \\n[#DOC_LEAD]u \} -. UNDERSCORE2 "\\*[$DOC_TYPE] -. if \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \} +. ie \\n[#SINGLE_SPACE]=0 \{ .sp 2 \} +. el \{ .sp \} +. UNDERSCORE2 4p "\\*[$DOC_TYPE]" +. if \\n[#SINGLE_SPACE]=1 \{ .sp \} . \} . if \\n[#PRINT_STYLE]=2 \{\ . NAMED_DOCHEADER -. di DOCHEADER_DIVERSION \" This diversion is only -. br \" necessary to find the depth of the -. NAMED_DOCHEADER \" docheader -. br -. di -. nr #DOCHEADER_DEPTH \\n(dn-\\n[#DOCHEADER_LEAD] \"Storing the depth (height) of the diversion -. \"in #DOCHEADER_DEPTH -. rm DOCHEADER_DIVERSION \" Removing the diversion macro . \} . ev . \} . if !\\n[#DOC_TYPE]=4 \{\ -. if \\n[#PRINT_STYLE]=1 \{ .ALD \\n[#DOC_LEAD]u \} -. nr #DOCHEADER_SPACE_ADJ \\n[#DOCHEADER_DEPTH]%\\n[#DOC_LEAD] -. ie !\\n[#DOCHEADER_SPACE_ADJ]=0 \{ .nr #DOCHEADER_EXTRA_SPACE \\n[#DOC_LEAD]-\\n[#DOCHEADER_SPACE_ADJ] \} -. el \{ .nr #DOCHEADER_EXTRA_SPACE 0 \} -. if \\n[#PRINT_STYLE]=2 \{ .ALD (\\n[#DOC_LEAD]u*2u)+\\n[#DOCHEADER_EXTRA_SPACE]u \} +. if \\n[#PRINT_STYLE]=1 \{\ +. sp +. \} +. if \\n[#PRINT_STYLE]=2 \{ .ALD \\n[#DOC_LEAD]u*2u \} . if \\n[#COLUMNS] \{\ . nr #COL_NUM 0 1 . nr #L_LENGTH_FOR_EPI \\n[#L_LENGTH] @@ -6245,7 +7810,12 @@ the macro whose style is to be changed. . \} . \} . LS \\n[#DOC_LEAD]u -. if \\n[#ADJ_DOC_LEAD]=1 \{ .SHIM \} +. if \\n[#ADJ_DOC_LEAD]=1 \{\ +. ie !r#ADVANCE_FROM_TOP \{\ +. if \\n[#DOC_HEADER]=1 \{ .SHIM \} +. \} +. el \{ .rr #ADVANCE_FROM_TOP \} +. \} . QUAD \\*[$DOC_QUAD] . CLEANUP_DEFAULTS . nr #START_FOR_FOOTERS 1 @@ -6306,12 +7876,11 @@ the macro whose style is to be changed. .\" Various registers . rr #ADJ_DOC_LEAD . rr #ADVANCE_FROM_TOP -. rr #AUTHOR_NUM -. rr #AUTHORS . rr #COVER_LEAD . rr #DEPTH_1 . rr #DEPTH_2 . rr #DOC_COVER_LEAD +. if \\n[#DOC_HEADER]=1 \{ .nr #DOC_HEADER 2 \} . rr #DOCHEADER_ADVANCE . rr #DOCHEADER_EXTRA_SPACE . rr #DOCHEADER_LEAD @@ -6320,7 +7889,6 @@ the macro whose style is to be changed. . rr #MISCS . rr #NEXT_AUTHOR . rr #NEXT_MISC -. rr #NUM_AUTHORS .END \# \# ==================================================================== @@ -6442,17 +8010,20 @@ the macro whose style is to be changed. . br . ds $DOC_FAM \\$1 . ds $FAMILY \\*[$DOC_FAM] -. TITLE_FAMILY \\*[$DOC_FAM] -. SUBTITLE_FAMILY \\*[$DOC_FAM] . AUTHOR_FAMILY \\*[$DOC_FAM] -. DOCTYPE_FAMILY \\*[$DOC_FAM] -. HEAD_FAMILY \\*[$DOC_FAM] -. SUBHEAD_FAMILY \\*[$DOC_FAM] -. QUOTE_FAMILY \\*[$DOC_FAM] . BLOCKQUOTE_FAMILY \\*[$DOC_FAM] +. DOCHEADER_FAMILY \\*[$DOC_FAM] +. DOCTYPE_FAMILY \\*[$DOC_FAM] . EPIGRAPH_FAMILY \\*[$DOC_FAM] -. HDRFTR_FAMILY \\*[$DOC_FAM] . FOOTNOTE_FAMILY \\*[$DOC_FAM] +. HDRFTR_FAMILY \\*[$DOC_FAM] +. HEAD_FAMILY \\*[$DOC_FAM] +. LINENUMBER_FAMILY \\*[$DOC_FAM] +. PARAHEAD_FAMILY \\*[$DOC_FAM] +. QUOTE_FAMILY \\*[$DOC_FAM] +. SUBHEAD_FAMILY \\*[$DOC_FAM] +. SUBTITLE_FAMILY \\*[$DOC_FAM] +. TITLE_FAMILY \\*[$DOC_FAM] .END \# \# @@ -6512,6 +8083,7 @@ the macro whose style is to be changed. .MAC DOC_LEAD_ADJUST END . ie '\\$1'' \{\ . nr #ADJ_DOC_LEAD 1 +. rr #DOC_LEAD_ADJUST_OFF . \} . el \{\ . nr #ADJ_DOC_LEAD 0 @@ -6525,43 +8097,53 @@ the macro whose style is to be changed. \# *Argument: \# None \# *Function: -\# Advances to the next "legal" baseline. +\# Advances to the next "valid" baseline. \# *Notes: \# If a user plays around with spacing in a doc (say, with ALD), \# it isn't easy to get mom back on track so she can achieve \# perfectly flush bottom margins. Any time SHIM is used, it -\# ensures that the next output line falls on a legal baseline. +\# ensures that the next output line falls on a valid baseline. \# \# First, a little convenience macro \# .MAC PROCESS_SHIM END -. while \\n+[#LEGAL_BASELINE]<\\n[#CURRENT_V_POS] \{\ +. while \\n+[#VALID_BASELINE]<\\n[#CURRENT_V_POS] \{\ . .\} -. nr #SHIM \\n[#LEGAL_BASELINE]-\\n[#CURRENT_V_POS] +. nr #SHIM \\n[#VALID_BASELINE]-\\n[#CURRENT_V_POS] .END \# +\# And a macro to disable SHIM (useful sometimes with QUOTE and +\# BLOCKQUOTE) +\# +.MAC NO_SHIM END +. ie '\\$1'' \{ .nr #NO_SHIM 1 \} +. el \{ .rr #NO_SHIM \} +.END \# .MAC SHIM END -. nr #LEGAL_BASELINE \\n[#T_MARGIN]-1v \\n[#DOC_LEAD] -. if !r#CURRENT_V_POS \{ .nr #CURRENT_V_POS \\n(.d \} -. ie r#ADVANCE_FROM_TOP \{\ -. ie \\n[#CURRENT_V_POS]<(\\n[#T_MARGIN]-1v) \{\ -. while \\n-[#LEGAL_BASELINE]>\\n[#CURRENT_V_POS] \{\ +. ie r#NO_SHIM \{ .return \} +. el \{\ +. nr #VALID_BASELINE \\n[#T_MARGIN]-1v \\n[#DOC_LEAD] +. if !r#CURRENT_V_POS \{ .nr #CURRENT_V_POS \\n(.d \} +. ie r#ADVANCE_FROM_TOP \{\ +. ie \\n[#CURRENT_V_POS]<(\\n[#T_MARGIN]-1v) \{\ +. while \\n-[#VALID_BASELINE]>\\n[#CURRENT_V_POS] \{\ . .\} -. nr #LEGAL_BASELINE +\\n[#DOC_LEAD] -. nr #SHIM \\n[#LEGAL_BASELINE]-\\n[#CURRENT_V_POS] +. nr #VALID_BASELINE +\\n[#DOC_LEAD] +. nr #SHIM \\n[#VALID_BASELINE]-\\n[#CURRENT_V_POS] +. \} +. el \{\ +. PROCESS_SHIM +. \} . \} . el \{\ . PROCESS_SHIM . \} +. ALD \\n[#SHIM]u +. rr #CURRENT_V_POS . \} -. el \{\ -. PROCESS_SHIM -. \} -. ALD \\n[#SHIM]u -. rr #CURRENT_V_POS .END \# \# @@ -6581,7 +8163,22 @@ the macro whose style is to be changed. \# attribution is desired. \# .MAC ATTRIBUTE_STRING END -. ds $ATTRIBUTE_STRING \\$1 +. if !'\\$1'DOC_COVER' \{\ +. if !'\\$1'COVER' \{ .nr #NEITHER 1 \} +. \} +. if !'\\$1'COVER' \{\ +. if !'\\$1'DOC_COVER' \{ .nr #NEITHER 1 \} +. \} +. if '\\$1'DOC_COVER' \{\ +. ds $ATTRIBUTE_STRING_DOCCOVER \\$2 +. \} +. if '\\$1'COVER' \{\ +. ds $ATTRIBUTE_STRING_COVER \\$2 +. \} +. if \\n[#NEITHER]=1 \{\ +. ds $ATTRIBUTE_STRING \\$1 +. rr #NEITHER +. \} .END \# \# @@ -6637,12 +8234,15 @@ the macro whose style is to be changed. \# Default is "END". \# .MAC FINIS_STRING END -. nr #FINIS 1 -. CAPS +\#. if \\n[#FINIS_STRING_CAPS]=1 \{ .CAPS \} . ds $FINIS_STRING \\$1 -. CAPS OFF +\#. if \\n[#FINIS_STRING_CAPS]=1 \{ .CAPS OFF \} .END \# +.MAC FINIS_STRING_CAPS END +. ie '\\$1'' \{ .nr #FINIS_STRING_CAPS 1 \} +. el \{ .nr #FINIS_STRING_CAPS 0 \} +.END \# \# ==================================================================== \# @@ -6679,7 +8279,17 @@ the macro whose style is to be changed. \# Default is 2 for TYPEWRITE, 3 for TYPESET. \# .MAC EPIGRAPH_INDENT END -. nr #EPI_OFFSET_VALUE \\$1 +. if r#EPI_OFFSET_VALUE \{ .rr #EPI_OFFSET_VALUE \} +. if !'\\*[$EPI_OFFSET_VALUE]'' \{ .rm $EPI_OFFSET_VALUE \} +. ds $EVAL_EI_ARG \\$1 +. substring $EVAL_EI_ARG -1 +. ie \B'\\*[$EVAL_EI_ARG]' \{\ +. nr #EPI_OFFSET_VALUE \\$1 +. \} +. el \{\ +. ds $EPI_OFFSET_VALUE \\$1 +. \} +. rm $EVAL_EI_ARG .END \# \# @@ -6782,19 +8392,39 @@ the macro whose style is to be changed. . ev EPIGRAPH . ie \\n[#START] \{\ . ie \\n[#COLUMNS] \{\ -. ll \\n[#L_LENGTH_FOR_EPI]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u)) +. ie r#EPI_OFFSET_VALUE \{\ +. ll \\n[#L_LENGTH_FOR_EPI]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u)) +. \} +. el \{\ +. ll \\n[#L_LENGTH_FOR_EPI]u-(\\*[$EPI_OFFSET_VALUE]u*2u) +. \} . ta \\n(.lu . \} . el \{\ -. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u)) +. ie r#EPI_OFFSET_VALUE \{\ +. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u)) +. \} +. el \{\ +. ll \\n[#L_LENGTH]u-(\\*[$EPI_OFFSET_VALUE]*2u) +. \} . ta \\n(.lu . \} . \} . el \{\ -. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u)) +. ie r#EPI_OFFSET_VALUE \{\ +. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u)) +. \} +. el \{\ +. ll \\n[#L_LENGTH]u-(\\*[$EPI_OFFSET_VALUE]*2u) +. \} . ta \\n(.lu . if \\n[#COLUMNS] \{\ -. ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u)) +. ie r#EPI_OFFSET_VALUE \{\ +. ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#EPI_OFFSET_VALUE]u*2u)) +. \} +. el \{\ +. ll \\n[#COL_L_LENGTH]u-(\\*[$EPI_OFFSET_VALUE]*2u) +. \} . ta \\n(.lu . \} . CHECK_INDENT @@ -6879,8 +8509,17 @@ the macro whose style is to be changed. . while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\ . nr #EPI_WHITESPACE -\\n[#DOC_LEAD] .\} +. if \\n[#PRINT_STYLE]=1 \{\ +. if !\\n[#SINGLE_SPACE]=1 \{ .ALD \\n[#DOC_LEAD]u \} +. \} . if \\n[#PRINT_STYLE]=2 \{\ -. RLD \\n[#DOC_LEAD]u +. ie !\\n[#DOC_TYPE]=2 \{ .RLD \\n[#DOC_LEAD]u \} +. el \{\ +. ie '\\*[$CHAPTER_TITLE]'' \{ .RLD \\n[#DOC_LEAD]u \} +. el \{\ +. if '\\*[$CHAPTER]'' \{ .RLD \\n[#DOC_LEAD]u \} +. \} +. \} . if \\n[#EPI_WHITESPACE]<\\n[#DOC_LEAD] \{\ . ALD \\n[#EPI_LEAD_DIFF]u+(\\n[#EPI_WHITESPACE]u/2u) . \} @@ -6931,9 +8570,15 @@ the macro whose style is to be changed. . \} . \} . if \\n[#EPIGRAPH]=2 \{\ -. nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) +. ie r#EPI_OFFSET_VALUE \{\ +. nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) +. \} +. el \{ .nr #EPI_OFFSET \\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE] \} . if \\n[#COLUMNS] \{\ -. nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) +. ie r#EPI_OFFSET_VALUE \{\ +. nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) +. \} +. el \{ .nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$EPI_OFFSET_VALUE] \} . \} . po \\n[#EPI_OFFSET]u . \} @@ -6942,11 +8587,6 @@ the macro whose style is to be changed. . br . ie \\n[#START] \{\ . if \\n[#PRINT_STYLE]=1 \{\ -. ie \\n[#SINGLE_SPACE] \{ .ALD \\n[#DOC_LEAD]u \} -. el \{\ -. ie \\n[#EPI_LINES]%2=1 \{ .ALD \\n[#DOC_LEAD]u \} -. el \{ .ALD \\n[#DOC_LEAD]u/2u \} -. \} . SHIM . \} . if \\n[#PRINT_STYLE]=2 \{\ @@ -7049,6 +8689,7 @@ the macro whose style is to be changed. . \} . ALD \\n[#DOC_LEAD]u . CENTER +. if \\n[#FINIS_STRING_CAPS]=1 \{ .CAPS \} . if \\n[#PRINT_STYLE]=1 \{ .PRINT "--\\*[$FINIS_STRING]--\} . if \\n[#PRINT_STYLE]=2 \{\ . ie \\n[#FINIS_COLOR] \{\ @@ -7056,6 +8697,7 @@ the macro whose style is to be changed. . \} . el \{ .PRINT \v'-\\n[#EM_ADJUST]u'\(em\v'+\\n[#EM_ADJUST]u'\\*[$FINIS_STRING]\v'-\\n[#EM_ADJUST]u'\*[FU1]\(em\m[] \} . \} +. if \\n[#FINIS_STRING_CAPS]=1 \{ .CAPS OFF \} . ev .END \# @@ -7082,6 +8724,14 @@ the macro whose style is to be changed. \# .MAC HDRFTR_RULE_GAP END . nr #HDRFTR_RULE_GAP (\\$1) +. if '\\$0'HEADER_RULE_GAP' \{\ +. nr #HEADER_RULE_GAP \\n[#HDRFTR_RULE_GAP] +. if r#FOOTER_RULE_GAP \{ .nr #FOOTER_RULE_GAP \\n[#FOOTER_RULE_GAP] \} +. \} +. if '\\$0'FOOTER_RULE_GAP' \{\ +. nr #FOOTER_RULE_GAP \\n[#HDRFTR_RULE_GAP] +. if r#HEADER_RULE_GAP \{ .nr #HEADER_RULE_GAP \\n[#HEADER_RULE_GAP] \} +. \} .END \# \# @@ -7288,26 +8938,43 @@ the macro whose style is to be changed. \# *Function: \# If invoked via the alias HDRFTR_RULE_INTERNAL in HDRFTR, prints a rule \# under the header/over the footer. Otherwise, turns HDRFTR_RULE -\# on or off. +\# on or off. \# .MAC HDRFTR_RULE END \"To print rule under header/over footer. -. ie '\\$0'HDRFTR_RULE_INTERNAL' \{\ +. if \\n[#HEADERS_ON] \{ .nr #HDRFTR_RULE_GAP \\n[#HEADER_RULE_GAP] \} +. if \\n[#FOOTERS_ON] \{ .nr #HDRFTR_RULE_GAP \\n[#FOOTER_RULE_GAP] \} +. if '\\$0'HDRFTR_RULE_INTERNAL' \{\ . ie \\n[#USERDEF_HDRFTR] \{\ . nr #CAP_HEIGHT_ADJUST \\n[#HDRFTR_HEIGHT] -. ps 12 . if \\n[#HEADERS_ON] \{\ . rt \\nyu . ALD \\n[#HDRFTR_RULE_GAP]u +. nr #HDRFTR_RULE_WEIGHT \\n[#HEADER_RULE_WEIGHT] +. nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#HEADER_RULE_WEIGHT_ADJ] . \} . if \\n[#FOOTERS_ON] \{\ -. rt \\nyu -. RLD \\n[#HDRFTR_RULE_GAP]u+\\n[#CAP_HEIGHT_ADJUST]u+1p +. rt \\nyu +. RLD \\n[#HDRFTR_RULE_GAP]u+\\n[#CAP_HEIGHT_ADJUST]u+\\n[#FOOTER_RULE_WEIGHT]u +. nr #HDRFTR_RULE_WEIGHT \\n[#FOOTER_RULE_WEIGHT] +. nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#FOOTER_RULE_WEIGHT_ADJ] . \} . ie \\n[#HDRFTR_RULE_COLOR]=1 \{\ -. PRINT \m[\\*[$HDRFTR_RULE_COLOR]]\\l'\\n[#DOC_L_LENGTH]u'\m[] +\m[\\*[$HDRFTR_RULE_COLOR]]\ +\D't \\n[#HDRFTR_RULE_WEIGHT]u'\ +\h'|0'\ +\v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\ +\D'l \\n[#DOC_L_LENGTH]u 0'\ +\D't \\n[#RULE_WEIGHT]u'\ +\h'-\\n[#RULE_WEIGHT]u'\ +\m[] . \} . el \{\ -. PRINT \\l'\\n[#DOC_L_LENGTH]u' +\D't \\n[#HDRFTR_RULE_WEIGHT]u'\ +\h'|0'\ +\v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\ +\D'l \\n[#DOC_L_LENGTH]u 0'\ +\D't \\n[#RULE_WEIGHT]u'\ +\h'-\\n[#RULE_WEIGHT]u' . \} . br . \} @@ -7325,27 +8992,64 @@ the macro whose style is to be changed. . \} . el \{ .nr #CAP_HEIGHT_ADJUST \\n[#RIGHT_CAP_HEIGHT] \} . \} -. ps 12 . if \\n[#HEADERS_ON] \{\ . rt \\nyu . ALD \\n[#HDRFTR_RULE_GAP]u +. nr #HDRFTR_RULE_WEIGHT \\n[#HEADER_RULE_WEIGHT] +. nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#HEADER_RULE_WEIGHT_ADJ] . \} . if \\n[#FOOTERS_ON] \{\ . rt \\nyu -. RLD \\n[#HDRFTR_RULE_GAP]u+\\n[#CAP_HEIGHT_ADJUST]u+1p +. RLD \\n[#HDRFTR_RULE_GAP]u+\\n[#CAP_HEIGHT_ADJUST]u+\\n[#FOOTER_RULE_WEIGHT]u +. nr #HDRFTR_RULE_WEIGHT \\n[#FOOTER_RULE_WEIGHT] +. nr #HDRFTR_RULE_WEIGHT_ADJ \\n[#FOOTER_RULE_WEIGHT_ADJ] . \} . ie \\n[#HDRFTR_RULE_COLOR]=1 \{\ -. PRINT \m[\\*[$HDRFTR_RULE_COLOR]]\\l'\\n[#DOC_L_LENGTH]u'\m[] +\m[\\*[$HDRFTR_RULE_COLOR]]\ +\D't \\n[#HDRFTR_RULE_WEIGHT]u'\ +\h'|0'\ +\v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\ +\D'l \\n[#DOC_L_LENGTH]u 0'\ +\D't \\n[#RULE_WEIGHT]u'\ +\h'-\\n[#RULE_WEIGHT]u'\ +\m[] . \} . el \{\ -. PRINT \\l'\\n[#DOC_L_LENGTH]u' +\D't \\n[#HDRFTR_RULE_WEIGHT]u'\ +\h'|0'\ +\v'+\\n[#HDRFTR_RULE_WEIGHT_ADJ]u'\ +\D'l \\n[#DOC_L_LENGTH]u 0'\ +\D't \\n[#RULE_WEIGHT]u'\ +\h'-\\n[#RULE_WEIGHT]u' . \} . br . \} . \} -. el \{\ +. if '\\$0'HEADER_RULE' \{\ +. nr #HEADERS_ON 1 +. ie '\\$1'' \{\ +. nr #HEADER_RULE 1 +. nr #HDRFTR_RULE 1 +. \} +. el \{\ +. nr #HEADER_RULE 0 +. nr #HDRFTR_RULE 0 +. \} +. \} +. if '\\$0'FOOTER_RULE' \{\ +. nr #FOOTERS_ON 1 +. ie '\\$1'' \{\ +. nr #FOOTER_RULE 1 +. nr #HDRFTR_RULE 1 +. \} +. el \{\ +. nr #FOOTER_RULE 0 +. nr #HDRFTR_RULE 0 +. \} +. \} +. if '\\$0'HDRFTR_RULE' \{\ . ie '\\$1'' \{ .nr #HDRFTR_RULE 1 \} -. el \{ .nr #HDRFTR_RULE 0 \} +. el \{ .nr #HDRFTR_RULE 0 \} . \} .END \# @@ -7388,24 +9092,21 @@ the macro whose style is to be changed. \# Creates or modifies register #SWITCH_HDRFTR, used to switch \# default location of HDRFTR_LEFT and HDRFTR_RIGHT. \# *Notes: +\# Default is OFF. \# -.ig -Typically, the author string appears at the left of header/footers, -and the title string appears at the right. This switches the -location of the two. Useful in conjuction with RECTO_VERSO to tweak -switches on alternate pages to come out as the user wishes. The -assumption of RECTO_VERSO is that the first page of the document -(recto) is odd, and even though it has no header/footer, if it did -have one, it would print as AUTHOR...CENTER...TITLE (or whatever -strings the user has supplied for HDRFTR_LEFT/RIGHT), meaning that -the next page, which does have a header/footer, will come out as -TITLE...CENTER...AUTHOR (or whatever strings the user has supplied -for HDRFTR_LEFT/RIGHT). SWITCH_HDRFTRS allows the user to get the -desired string in the desired place on the desired recto/verso page. - -Default is OFF. -.. -\# +\# Typically, the author string appears at the left of header/footers, +\# and the title string appears at the right. This switches the +\# location of the two. Useful in conjuction with RECTO_VERSO to tweak +\# switches on alternate pages to come out as the user wishes. The +\# assumption of RECTO_VERSO is that the first page of the document +\# (recto) is odd, and even though it has no header/footer, if it did +\# have one, it would print as AUTHOR...CENTER...TITLE (or whatever +\# strings the user has supplied for HDRFTR_LEFT/RIGHT), meaning that +\# the next page, which does have a header/footer, will come out as +\# TITLE...CENTER...AUTHOR (or whatever strings the user has supplied +\# for HDRFTR_LEFT/RIGHT). SWITCH_HDRFTRS allows the user to get the +\# desired string in the desired place on the desired recto/verso page. +\# .MAC SWITCH_HDRFTR END . ie '\\$1'' \{ .nr #SWITCH_HDRFTR 1 \} . el \{ .nr #SWITCH_HDRFTR 0 \} @@ -7435,6 +9136,8 @@ Default is OFF. . if '\\$1'CENTRE' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 2 \} . if '\\$1'R' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 3 \} . if '\\$1'RIGHT' \{ .nr #USERDEF_HDRFTR_RECTO_QUAD 3 \} +. shift +. if '\\$1'CAPS' \{ .nr #HDRFTR_RECTO_CAPS 1 \} . ds $USERDEF_HDRFTR_RECTO \\$2 .END \# @@ -7460,10 +9163,11 @@ Default is OFF. . if '\\$1'CENTRE' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 2 \} . if '\\$1'R' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 3 \} . if '\\$1'RIGHT' \{ .nr #USERDEF_HDRFTR_VERSO_QUAD 3 \} +. shift +. if '\\$1'CAPS' \{ .nr #HDRFTR_VERSO_CAPS 1 \} . ds $USERDEF_HDRFTR_VERSO \\$2 .END \# -\# \# PRINT FOOTER ON FIRST PAGE \# -------------------------- \# *Arguments: @@ -7514,7 +9218,17 @@ Default is OFF. . if \\n[#FOOTERS_ON] \{\ . if \\n[#START_FOR_FOOTERS] \{\ . rr #START_FOR_FOOTERS -. if !\\n[#PRINT_FOOTER_ON_PAGE_1] \{ .return \} +. if !\\n[#PRINT_FOOTER_ON_PAGE_1] \{\ +. ie !\\n[#HDRFTR_BOTH] \{ .return \} +. el \{\ +. rr #FOOTERS_ON +. nr #HEADERS_ON 1 +. ie \\n[#HEADER_RULE]=1 \{ .HEADER_RULE \} +. el \{ .HEADER_RULE OFF \} +. HEADER_RECTO \\*[$HDR_RECTO_QUAD] "\\*[$HDR_RECTO_STRING]" +. return +. \} +. \} . \} . \} . if \\n[#USERDEF_HDRFTR] \{\ @@ -7572,10 +9286,10 @@ Default is OFF. . el \{ .PRINT \& \} . \} . if \\n[#HDRFTR_CENTER_CAPS] \{ .CAPS OFF \} -. if o \{ .LEFT \} -. if e \{ .RIGHT \} -. if \\n[#RECTO_VERSO]=0 \{ .RIGHT \} -. if \\n[#HDRFTR_RIGHT_CAPS] \{ .CAPS \} +. if o \{ .LEFT \} +. if e \{ .RIGHT \} +. if \\n[#RECTO_VERSO]=0 \{ .RIGHT \} +. if \\n[#HDRFTR_RIGHT_CAPS] \{ .CAPS \} . rt \\nyu . ie '\\*[$HDRFTR_RIGHT]'#' \{\ . PRINT \\n[#PAGENUMBER] @@ -7590,7 +9304,6 @@ Default is OFF. . if \\n[#HDRFTR_COLOR]=1 \{\ . nf \m[\\*[$HDRFTR_COLOR]] -. EOL . \} . fam \\*[$HDRFTR_LEFT_FAM] . ft \\*[$HDRFTR_LEFT_FT] @@ -7716,9 +9429,9 @@ Default is OFF. . nr #PAGENUMBER \\n%+\\n[#PAGE_NUM_ADJ] . fc ^ # . if \\n[#PRINT_STYLE]=2 \{\ -. FAMILY \\*[$HDRFTR_FAM] -. FT R -. PT_SIZE \\n[#HDRFTR_PT_SIZE]u +. fam \\*[$HDRFTR_FAM] +. ft R +. ps \\n[#HDRFTR_PT_SIZE]u . if \\n[#HDRFTR_COLOR]=1 \{\ . nf . COLOR \\*[$HDRFTR_COLOR] @@ -7729,7 +9442,9 @@ Default is OFF. . if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 \{ .LEFT \} . if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 \{ .CENTER \} . if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 \{ .RIGHT \} +. if \\n[#HDRFTR_RECTO_CAPS]=1 \{ .CAPS \} . PRINT \\*[$USERDEF_HDRFTR_RECTO] +. if \\n[#HDRFTR_RECTO_CAPS]=1 \{ .CAPS OFF \} . EOL . if \\n[#FOOTERS_ON] \{\ . di NULL @@ -7743,7 +9458,9 @@ Default is OFF. . if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=1 \{ .LEFT \} . if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=2 \{ .CENTER \} . if \\n[#USERDEF_HDRFTR_VERSO_QUAD]=3 \{ .RIGHT \} +. if \\n[#HDRFTR_VERSO_CAPS]=1 \{ .CAPS \} . PRINT \\*[$USERDEF_HDRFTR_VERSO] +. if \\n[#HDRFTR_VERSO_CAPS]=1 \{ .CAPS OFF \} . EOL . if \\n[#FOOTERS_ON] \{\ . di NULL @@ -7756,7 +9473,9 @@ Default is OFF. . if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 \{ .LEFT \} . if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 \{ .CENTER \} . if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 \{ .RIGHT \} +. if \\n[#HDRFTR_RECTO_CAPS]=1 \{ .CAPS \} . PRINT \\*[$USERDEF_HDRFTR_RECTO] +. if \\n[#HDRFTR_RECTO_CAPS]=1 \{ .CAPS OFF \} . EOL . if \\n[#FOOTERS_ON] \{\ . di NULL @@ -7771,7 +9490,9 @@ Default is OFF. . if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=1 \{ .LEFT \} . if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=2 \{ .CENTER \} . if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 \{ .RIGHT \} +. if \\n[#HDRFTR_RECTO_CAPS]=1 \{ .CAPS \} . PRINT \\*[$USERDEF_HDRFTR_RECTO] +. if \\n[#HDRFTR_RECTO_CAPS]=1 \{ .CAPS OFF \} . EOL . if \\n[#FOOTERS_ON] \{\ . di NULL @@ -7908,6 +9629,8 @@ Default is OFF. . \} . \} . \} +. nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap' +. RLD 1v . ie \\n[#HEADERS_ON] \{\ . PRINT_HDRFTR . sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u @@ -7948,15 +9671,25 @@ Default is OFF. . if \\n[#QUOTE] \{\ . ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \} . el \{\ -. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) +. ie r#Q_OFFSET_VALUE \{\ +. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) +. \} +. el \{\ +. nr #Q_OFFSET \\n[#L_MARGIN]+\\*[$Q_OFFSET_VALUE] +. \} . po \\n[#Q_OFFSET]u . \} -. ALD \\n[#Q_LEAD_DIFF]u +. if \\n[#PRINTSTYLE]=2 \{ .ALD \\n[#Q_LEAD_DIFF]u \} . \} . if \\n[#EPIGRAPH] \{\ . ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \} . el \{\ -. nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) +. ie r#EPI_OFFSET_VALUE \{\ +. nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) +. \} +. el \{\ +. nr #EPI_OFFSET \\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE] +. \} . po \\n[#EPI_OFFSET]u . \} . \} @@ -7984,14 +9717,24 @@ Default is OFF. . ll \\n[#COL_L_LENGTH]u . ta \\n(.lu . if \\n[#QUOTE] \{\ -. po +(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u) +. ie r#Q_OFFSET_VALUE \{\ +. po +(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u) +. \} +. el \{\ +. po +\\*[$Q_OFFSET_VALUE] +. \} . \} . if \\n[#EPIGRAPH] \{\ . if \\n[#EPI_ACTIVE] \{\ . ie \\n[#EPI_FITS] \{ . \} . el \{ .nr dc -\\n[#EPI_LEAD_DIFF] \} . \} -. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u+(\\n[#PP_INDENT]u*\\n[#EPI_OFFSET_VALUE]u) +. ie r#EPI_OFFSET_VALUE \{\ +. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u+(\\n[#PP_INDENT]u*\\n[#EPI_OFFSET_VALUE]u) +. \} +. el \{\ +. po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u+\\*[$EPI_OFFSET_VALUE] +. \} . \} . \} . if \\n[#RESET_FN_COUNTERS]=1 \{\ @@ -8008,6 +9751,9 @@ Default is OFF. . if \\n[#SLANT_ON] \{\ . if \\n[#UNDERLINE_SLANT] \{ .UNDERLINE \} . \} +. if \\n[#UNDERLINE_ON]=1 \{\ +. if \\n[#UNDERLINE_ITALIC] \{ .UNDERLINE \} +. \} . \} . rr #FROM_HEADER . rr #DEFER_SPACE_ADDED @@ -8032,6 +9778,7 @@ Default is OFF. . rm MN_OVERFLOW_RIGHT . rr #MN_OVERFLOW_RIGHT . rr #no-repeat-MN-right +. if \\n[#PRE_COLLATE]=1 \{ .rr #PRE_COLLATE \} .END \# \# ==================================================================== @@ -8051,8 +9798,9 @@ Default is OFF. \# .MAC FOOTERS END . ie '\\$1'' \{\ +. rr #HEADERS_ON . nr #FOOTERS_ON 1 -. PAGE_NUM_POS TOP CENTER +. PAGENUM_POS TOP CENTER . \} . el \{ .nr #FOOTERS_ON 0 \} .END @@ -8192,16 +9940,40 @@ Default is OFF. . if \\n[#QUOTE] \{\ . ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \} . el \{\ -. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) -. if \\n[#COLUMNS] \{ .nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) \} +. ie r#Q_OFFSET_VALUE \{\ +. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) +. \} +. el \{\ +. nr #Q_OFFSET \\n[#L_MARGIN]+\\*[$Q_OFFSET_VALUE] +. \} +. if \\n[#COLUMNS] \{\ +. ie r#Q_OFFSET_VALUE \{\ +. nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) +. \} +. el \{\ +. nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$Q_OFFSET_VALUE] +. \} +. \} . po \\n[#Q_OFFSET]u . \} . \} . if \\n[#EPIGRAPH] \{\ . ie \\n[#TAB_ACTIVE] \{ .TAB \\n[#CURRENT_TAB] \} . el \{\ -. nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) -. if \\n[#COLUMNS] \{ .nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) \} +. ie r#EPI_OFFSET_VALUE \{\ +. nr #EPI_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) +. \} +. el \{\ +. nr #EPI_OFFSET \\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE] +. \} +. if \\n[#COLUMNS] \{\ +. ie r#EPI_OFFSET_VALUE \{\ +. nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE]) +. \} +. el \{\ +. nr #EPI_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$EPI_OFFSET_VALUE] +. \} +. \} . po \\n[#EPI_OFFSET]u . \} . \} @@ -8252,13 +10024,15 @@ Default is OFF. . po \\n[#DOC_L_MARGIN]u . ll \\n[#DOC_L_LENGTH]u . ta \\n(.lu -. FAMILY \\*[$HDRFTR_FAM] -. FT R -. PT_SIZE \\n[#DOC_PT_SIZE]u\\*[$HDRFTR_SIZE_CHANGE] . if \\n[#PRINT_STYLE]=1 \{\ . TYPEWRITER . \} -. LS \\n[#SAVED_LEAD]u +. if \\n[#PRINT_STYLE]=2 \{\ +. fam \\*[$HDRFTR_FAM] +. ft R +. ps \\n[#DOC_PT_SIZE]u\\*[$HDRFTR_SIZE_CHANGE] +. \} +. vs \\n[#SAVED_LEAD]u . nr #HDRFTR_PT_SIZE \\n[#PT_SIZE] . if \\n[#CAPS_ON] \{\ . nr #CAPS_WAS_ON 1 @@ -8297,6 +10071,109 @@ Default is OFF. \# \# ==================================================================== \# +\# +++HEADERS AND FOOTERS+++ +\# +\# HEADERS_AND_FOOTERS +\# ------------------- +\# *Arguments: +\# HEADER_RECTO_QUAD \ +\# HEADER_RECTO_STRING \ +\# FOOTER_RECTO_QUAD \ +\# FOOTER_RECTO_STRING \ +\# HEADER_VERSO_QUAD \ +\# HEADER_VERSO_STRING \ +\# FOOTER_VERSO_QUAD \ +\# FOOTER_VERSO_STRING +\# | +\# *Function: +\# Allows having both headers and footers. Sets register +\# #HDRFTR_BOTH to 1; collects HEADER/FOOTER_RECTO/VERSO +\# information; appends FOOTER_RECTO and FOOTER_VERSO to +\# START and turns off pagination; appends to macros +\# PRINT_USERDEF_HDRFTR and HEADER the necessary number +\# register manipulations and redefinitions of the +\# HEADER/FOOTER_RECTO/VERSO strings so that both +\# headers and footers get printed, with the appropriate +\# strings for each +\# *Notes: +\# Works in conjunction with HDRFTR_RECTO and HDRFTR_VERSO (qqv.), +\# ergo all style changes must be done inline in the strings +\# passed as arguments. +\# +.MAC HEADERS_AND_FOOTERS END +. ie \\n[#NUM_ARGS]>1 \{\ +. nr #HDRFTR_BOTH 1 +. nr #FOOTERS_ON 1 +. if !r#HEADER_RULE .nr #HEADER_RULE 1 +. if !r#FOOTER_RULE .nr #FOOTER_RULE 1 +. ds $HDR_RECTO_QUAD \\$1 +. ds $HDR_RECTO_STRING \\$2 +. ds $FTR_RECTO_QUAD \\$3 +. ds $FTR_RECTO_STRING \\$4 +. ds $HDR_VERSO_QUAD \\$5 +. ds $HDR_VERSO_STRING \\$6 +. ds $FTR_VERSO_QUAD \\$7 +. ds $FTR_VERSO_STRING \\$8 +.am START DONE +. if \\\\n[#HDRFTR_BOTH]=1 \{\ +. FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]" +. FOOTER_VERSO \\*[$FTR_VERSO_QUAD] "\\*[$FTR_VERSO_STRING]" +. if \\\\n[#HEADER_RULE]=1 \{ .HEADER_RULE \} +. ie \\\\n[#FOOTER_RULE]=1 \{ .FOOTER_RULE \} +. el \{ .FOOTER_RULE OFF \} +. if r#PAGINATE .rr #PAGINATE +. if r#PAGE_NUM_V_POS .rr #PAGE_NUM_V_POS +.\} +.DONE +.am PRINT_USERDEF_HDRFTR DONE +. if \\\\n[#HDRFTR_BOTH]=1 \{\ +. if \\n[#FOOTERS_ON]=1 \{\ +. if !\\\\n[#COLLATE]=1 \{\ +. HEADER_RECTO \\*[$HDR_RECTO_QUAD] "\\*[$HDR_RECTO_STRING]" +. HEADER_VERSO \\*[$HDR_VERSO_QUAD] "\\*[$HDR_VERSO_STRING]" +. rr #FOOTERS_ON +. nr #HEADERS_ON 1 +. ie \\\\n[#HEADER_RULE]=1 \{ .HEADER_RULE \} +. el \{ .HEADER_RULE OFF \} +. \} +. \} +. if \\n[#HEADERS_ON]=1 \{\ +. FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]" +. FOOTER_VERSO \\*[$FTR_VERSO_QUAD] "\\*[$FTR_VERSO_STRING]" +. \} +. \} +.DONE +.am HEADER DONE +. if \\\\n[#HDRFTR_BOTH]=1 \{\ +. if r#START_FOR_FOOTERS .rr #START_FOR_FOOTERS +. rr #HEADERS_ON +. nr #FOOTERS_ON 1 +. FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]" +. FOOTER_VERSO \\*[$FTR_VERSO_QUAD] "\\*[$FTR_VERSO_STRING]" +. ie \\\\n[#FOOTER_RULE]=1 \{ .FOOTER_RULE \} +. el \{ .FOOTER_RULE OFF \} +. \} +.DONE +. \} +. el \{\ +. rr #HDRFTR_BOTH +. rr #USERDEF_HDRFTR +. rm $USERDEF_HDRFTR_RECTO +. rm $USERDEF_HDRFTR_VERSO +. FOOTERS OFF +. HEADERS +. if \\n[#COLLATE]=1 \{\ +. nr #HEADER_STATE 1 +. nr #PAGINATION_STATE 1 +. \} +. PAGINATE +. PAGENUM_POS BOTTOM CENTER +. nr #HF_OFF 1 +. \} +.END +\# +\# ==================================================================== +\# \# +++HEADS+++ \# \# ---Head numbers--- @@ -8414,7 +10291,61 @@ Default is OFF. \# .MAC RESET_PARAHEAD_NUMBER END . ie '\\$1'' \{ .nr #PH_NUM 0 1 \} -. el \{ nr #SH_NUM \\$1-1 1 \} +. el \{ .nr #SH_NUM \\$1-1 1 \} +.END +\# +\# +\# PREFIX CHAPTER NUMBERS TO NUMBERED HEADS, SUBHEADS AND PARAHEADS +\# ---------------------------------------------------------------- +\# *Arguments: +\# | | +\# *Function: +\# Toggles register #PREFIX_CH_NUM. Sets register #CH_NUM from +\# string $CHAPTER if $CHAPTER is a digit; if arg +\# given, sets #CH_NUM to arg. +\# *Notes: +\# Default is OFF. +\# +.MAC PREFIX_CHAPTER_NUMBER END +. ie '\\$1'' \{\ +. ie r#CH_NUM \{\ +. nr #PREFIX_CH_NUM 1 +. if \\n[#CHAPTER_CALLED] \{\ +. ie \B'\\*[$CHAPTER]' \{\ +. nr #CH_NUM \\*[$CHAPTER] +. \} +. el \{\ +. PREFIX_CH_NUM_WARNING +. \} +. rr #CHAPTER_CALLED +. \} +. \} +. el \{\ +. ie \B'\\*[$CHAPTER]' \{\ +. nr #PREFIX_CH_NUM 1 +. nr #CH_NUM \\*[$CHAPTER] +. \} +. el \{\ +. PREFIX_CH_NUM_WARNING +. \} +. \} +. \} +. el \{\ +. ie \B'\\$1' \{\ +. nr #CH_NUM \\$1 +. nr #PREFIX_CH_NUM 1 +. \} +. el \{\ +. rr #PREFIX_CH_NUM +. \} +. \} +.END +\# +.MAC PREFIX_CH_NUM_WARNING END +. tm1 "[mom]: PREFIX_CHAPTER_NUMBER cannot determine a chapter number. +. tm1 " Please enter the current chapter number as a digit after +. tm1 " PREFIX_CHAPTER_NUMBER. +. ab Aborting on PREFIX_CHAPTER_NUMBER at line \\n(.c. .END \# \# @@ -8452,21 +10383,6 @@ Default is OFF. .END \# \# -\# HEAD UNDERLINE -\# -------------- -\# *Arguments: -\# | -\# *Function: -\# Creates or modifies register #HEAD_UNDERLINE. -\# *Notes: -\# Default is on. -\# -.MAC HEAD_UNDERLINE END -. ie '\\$1'' \{ .nr #HEAD_UNDERLINE 1 \} -. el \{ .nr #HEAD_UNDERLINE 0 \} -.END -\# -\# \# MAIN HEAD \# --------- \# *Arguments: @@ -8481,6 +10397,11 @@ Default is OFF. \# .MAC HEAD END . br +. if \\n[#PRINT_STYLE]=1 \{ .ne \\n[#NUM_ARGS]+2 \} +. if \\n[#PRINT_STYLE]=2 \{\ +. ie \\n[#HEAD_SPACE] \{ .ne \\n[#NUM_ARGS]+3 \} +. el \{ .ne \\n[#NUM_ARGS]+2 \} +. \} .\" Collect head for TOC. . nr #ARG_NUM 0 1 . nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ] @@ -8494,15 +10415,15 @@ Default is OFF. .\" space after it. . ie \\n[#NUMBER_HEAD] \{\ . ie \\n[#ARG_NUM]=0 \{\ -. as $TOC_HEAD_ITEM \\n+[#HEAD_NUM].\0\\$[\\n+[#ARG_NUM]]\ +. as $TOC_HEAD_ITEM \\n+[#HEAD_NUM].\0\\$[\\n+[#ARG_NUM]]\ \" . nr #HEAD_NUM \\n-[#HEAD_NUM] . \} . el \{\ -. as $TOC_HEAD_ITEM \\$[\\n+[#ARG_NUM]]\ +. as $TOC_HEAD_ITEM \\$[\\n+[#ARG_NUM]]\ \" . \} . \} . el \{\ -. as $TOC_HEAD_ITEM \\$[\\n+[#ARG_NUM]]\ +. as $TOC_HEAD_ITEM \\$[\\n+[#ARG_NUM]]\ \" . \} . \} .\} @@ -8522,12 +10443,14 @@ Default is OFF. \!. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_HEAD_SIZE_CHANGE] . \} \!. TRAP OFF +\!. PAD_MARKER ^ . ie \\n[#PRINT_STYLE]=1 \{\ \!. PAD "\\h'2m'\\*[$TOC_HEAD_ITEM]\\*[$TOC_PN_TYPEWRITE]" . \} . el \{\ \!. PAD "\\h'\\n[#TOC_HEAD_INDENT]u'\\*[$TOC_HEAD_ITEM]\\*[$TOC_PN]" . \} +\!. PAD_MARKER # \!. EOL \!. ST 100 L \!. ST 101 R @@ -8542,7 +10465,7 @@ Default is OFF. \!. TRAP \!. PRINT \\n[#TOC_ENTRY_PN] \!. TQ -. di +. di . ev .\" End collection of head for TOC .\" Process head @@ -8569,11 +10492,6 @@ Default is OFF. . \} . if r#QUOTE \{ .rr #QUOTE \} . if r#EPIGRAPH \{ .rr #EPIGRAPH \} -. if \\n[#PRINT_STYLE]=1 \{ .ne \\n[#NUM_ARGS]+2 \} -. if \\n[#PRINT_STYLE]=2 \{\ -. ie \\n[#HEAD_SPACE] \{ .ne \\n[#NUM_ARGS]+3 \} -. el \{ .ne \\n[#NUM_ARGS]+2 \} -. \} . ie \\n[#START] \{\ . if \\n[#DOC_HEADER]=0 \{ .RLD 1v \} . \} @@ -8614,6 +10532,7 @@ Default is OFF. . \} .\" Print head . nr #ARG_NUM 0 1 +. nr #FROM_HEAD 1 . if \\n[#HEAD_CAPS] \{ .CAPS \} . if \\n[#PRINT_STYLE]=2 \{\ . if \\n[#HEAD_COLOR]=1 \{\ @@ -8623,25 +10542,51 @@ Default is OFF. . TRAP . \} . \} +. if \\n[#PRINT_STYLE]=1 \{\ +. ie \\n[#HEAD_CAPS]=1 \{\ +. ds $HEAD_UNDERLINE_GAP 2p +. \} +. el \{\ +. ds $HEAD_UNDERLINE_GAP 4p +. \} +. \} . while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\ . ie \\n[#NUMBER_HEAD] \{\ . ie \\n[#ARG_NUM]=0 \{\ +. ie \\n[#PREFIX_CH_NUM]=1 \{\ +. ds $CH_NUM \\n[#CH_NUM]. +. \} +. el \{\ +. rm $CH_NUM +. \} . br -. ie \\n[#HEAD_UNDERLINE]=0 \{ .PRINT "\\n+[#HEAD_NUM].\0\\$[\\n+[#ARG_NUM]]\} -. el \{ .UNDERSCORE "\\n+[#HEAD_NUM].\0\\$[\\n+[#ARG_NUM]]\} +. ie \\n[#HEAD_UNDERLINE]=0 \{\ +. PRINT "\\*[$CH_NUM]\\n+[#HEAD_NUM].\0\\$[\\n+[#ARG_NUM]]" +. \} +. el \{\ +. UNDERSCORE \\*[$HEAD_UNDERLINE_GAP] "\\*[$CH_NUM]\\n+[#HEAD_NUM].\0\\$[\\n+[#ARG_NUM]]" +. \} . br . \} . el \{\ . br -. ie \\n[#HEAD_UNDERLINE]=0 \{ .PRINT "\\$[\\n+[#ARG_NUM]]\} -. el \{ .UNDERSCORE "\\$[\\n+[#ARG_NUM]]\} +. ie \\n[#HEAD_UNDERLINE]=0 \{\ +. PRINT "\\$[\\n+[#ARG_NUM]]" +. \} +. el \{\ +. UNDERSCORE \\*[$HEAD_UNDERLINE_GAP] "\\$[\\n+[#ARG_NUM]]" +. \} . br . \} . \} . el \{\ . br -. ie \\n[#HEAD_UNDERLINE]=0 \{ .PRINT "\\$[\\n+[#ARG_NUM]]\} -. el \{ .UNDERSCORE "\\$[\\n+[#ARG_NUM]]\} +. ie \\n[#HEAD_UNDERLINE]=0 \{\ +. PRINT "\\$[\\n+[#ARG_NUM]]" +. \} +. el \{\ +. UNDERSCORE \\*[$HEAD_UNDERLINE_GAP] "\\$[\\n+[#ARG_NUM]]" +. \} . br . \} .\} @@ -8649,8 +10594,8 @@ Default is OFF. . CAPS OFF . ev . ALD \\n[#DOC_LEAD]u -. RESET_SUBHEAD_NUMBER -. RESET_PARAHEAD_NUMBER +. if \\n[#NUMBER_HEAD] \{ .RESET_SUBHEAD_NUMBER \} +. if \\n[#NUMBER_SH] \{ .RESET_PARAHEAD_NUMBER \} . if r#START \{ .rr #START \} . if r#EPIGRAPH \{ .rr #EPIGRAPH \} . if r#QUOTE \{ .rr #QUOTE \} @@ -8660,6 +10605,7 @@ Default is OFF. . if r#Q_AT_TOP \{ .rr #Q_AT_TOP \} . if r#PP_ACTIVE \{ .rr #PP_ACTIVE \} . rr #ARG_NUM +. rr #FROM_HEAD . rm $TOC_HEAD_ITEM . nr #PP 0 .END @@ -8683,6 +10629,7 @@ Default is OFF. \# .MAC SUBHEAD END . br +. ne \\n[#NUM_ARGS]+2 .\" Collect subhead for TOC. . nr #ARG_NUM 0 1 . nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ] @@ -8695,15 +10642,15 @@ Default is OFF. .\" space after it. . ie \\n[#NUMBER_SH] \{\ . ie \\n[#ARG_NUM]=0 \{\ -. as $TOC_SH_ITEM \\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]\ +. as $TOC_SH_ITEM \\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]\ \" . nr #SH_NUM \\n-[#SH_NUM] . \} . el \{\ -. as $TOC_SH_ITEM \\$[\\n+[#ARG_NUM]]\ +. as $TOC_SH_ITEM \\$[\\n+[#ARG_NUM]]\ \" . \} . \} . el \{\ -. as $TOC_SH_ITEM \\$[\\n+[#ARG_NUM]]\ +. as $TOC_SH_ITEM \\$[\\n+[#ARG_NUM]]\ \" . \} . \} .\} @@ -8723,12 +10670,14 @@ Default is OFF. \!. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_SH_SIZE_CHANGE] . \} \!. TRAP OFF +\!. PAD_MARKER ^ . ie \\n[#PRINT_STYLE]=1 \{\ \!. PAD "\\h'4m'\\*[$TOC_SH_ITEM]\\*[$TOC_PN_TYPEWRITE]" . \} . el \{\ \!. PAD "\\h'\\n[#TOC_SH_INDENT]u'\\*[$TOC_SH_ITEM]\\*[$TOC_PN]" . \} +\!. PAD_MARKER # \!. EOL \!. ST 100 L \!. ST 101 R @@ -8743,7 +10692,7 @@ Default is OFF. \!. TRAP \!. PRINT \\n[#TOC_ENTRY_PN] \!. TQ -. di +. di . ev .\" End collection of head for TOC .\" Process subhead @@ -8775,24 +10724,18 @@ Default is OFF. . if \\n[#PRINT_STYLE]=2 \{ .nr #SH_LEAD_ADJUST \\n[#LEAD]/8 \} . ie \\n[#START] \{ .RLD 1v \} . el \{\ -. ie ( \\n[#TRAP_DISTANCE] < (\\n[#DOC_LEAD]*(\\n[#NUM_ARGS]+1)) ) \{\ -. ie \\n[#COLUMNS] \{ .COL_NEXT \} -. el \{ .bp \} -. \} +. ie \\n[#HEAD]=1 \{ . \} . el \{\ -. ie \\n[#HEAD]=1 \{ . \} -. el \{\ -. if \\n[#PRINT_STYLE]=1 \{\ -. if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \} +. if \\n[#PRINT_STYLE]=1 \{\ +. if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \} +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. ie \\n[#PP_SPACE]=1 \{\ +. ie !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \} +. el \{ .RLD \\n[#DOC_LEAD]u \} . \} -. if \\n[#PRINT_STYLE]=2 \{\ -. ie \\n[#PP_SPACE]=1 \{\ -. ie !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \} -. el \{ .RLD \\n[#DOC_LEAD]u \} -. \} -. el \{\ -. if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \} -. \} +. el \{\ +. if !\\n[#LINEBREAK] \{ .ALD \\n[#DOC_LEAD]u \} . \} . \} . \} @@ -8802,27 +10745,32 @@ Default is OFF. . while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\ . ie \\n[#NUMBER_SH] \{\ . ie \\n[#ARG_NUM]=0 \{\ +. ie \\n[#PREFIX_CH_NUM]=1 \{\ +. ds $CH_NUM \\n[#CH_NUM]. +. \} +. el \{\ +. rm $CH_NUM +. \} . ie \\n[#NUMBER_HEAD] \{\ . br -. UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\n[#HEAD_NUM].\\n+[#SH_NUM]\0\\$[\\n+[#ARG_NUM]] +. UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]" . br . \} . el \{\ . br -. UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]] +. UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\*[$CH_NUM]\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]]" . br . \} . \} . el \{\ . br -. ie \\n[#HEAD_UNDERLINE]=0 \{ .PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]\} -. el \{ .UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]\} +. UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]" . br . \} . \} . el \{\ . br -. UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]] +. UNDERSCORE "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]]" . br . \} .\} @@ -8836,26 +10784,32 @@ Default is OFF. . while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\ . ie \\n[#NUMBER_SH] \{\ . ie \\n[#ARG_NUM]=0 \{\ +. ie \\n[#PREFIX_CH_NUM]=1 \{\ +. ds $CH_NUM \\n[#CH_NUM]. +. \} +. el \{\ +. rm $CH_NUM +. \} . ie \\n[#NUMBER_HEAD] \{\ . br -. PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\n[#HEAD_NUM].\\n+[#SH_NUM]\0\\$[\\n+[#ARG_NUM]] +. PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]] . br . \} . el \{\ . br -. PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]] +. PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\*[$CH_NUM]\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]] . br . \} . \} . el \{\ . br -. PRINT "\\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]] +. PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]] . br . \} . \} . el \{\ . br -. PRINT "\\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]] +. PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]] . br . \} .\} @@ -8866,14 +10820,43 @@ Default is OFF. . if \\n[#END_QUOTE] \{ .RLD \\n[#DOC_LEAD]u \} . if \\n[#EPIGRAPH] \{ .RLD \\n[#DOC_LEAD]u \} . while \\n[#ARG_NUM]<\\n[#NUM_ARGS] \{\ -. PRINT "\\$[\\n+[#ARG_NUM]] +. ie \\n[#NUMBER_SH] \{\ +. ie \\n[#ARG_NUM]=0 \{\ +. ie \\n[#PREFIX_CH_NUM]=1 \{\ +. ds $CH_NUM \\n[#CH_NUM]. +. \} +. el \{\ +. rm $CH_NUM +. \} +. ie \\n[#NUMBER_HEAD] \{\ +. br +. PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n+[#SH_NUM]\0\\$[\\n+[#ARG_NUM]] +. br +. \} +. el \{\ +. br +. PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\*[$CH_NUM]\\n+[#SH_NUM].\0\\$[\\n+[#ARG_NUM]] +. br +. \} +. \} +. el \{\ +. br +. PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]] +. br +. \} +. \} +. el \{\ +. br +. PRINT "\v'-\\n[#SH_LEAD_ADJUST]u'\\$[\\n+[#ARG_NUM]] +. br +. \} .\} . ALD \\n[#DOC_LEAD]u . \} . \} . REMOVE_INDENT . ev -. RESET_PARAHEAD_NUMBER +. if \\n[#NUMBER_SH] \{ .RESET_PARAHEAD_NUMBER \} . if r#START \{ .rr #START \} . if r#EPIGRAPH \{ .rr #EPIGRAPH \} . if r#Q_FITS \{ .rr #Q_FITS \} @@ -8933,12 +10916,14 @@ Default is OFF. \!. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_PH_SIZE_CHANGE] . \} \!. TRAP OFF +\!. PAD_MARKER ^ . ie \\n[#PRINT_STYLE]=1 \{\ -\!. PAD "\\h'6m'\\*[$TOC_PH_ITEM]\\*[$TOC_PN_TYPEWRITE]" +\!. PAD "\\h'6m'\\*[$TOC_PH_ITEM]\\*[$TOC_PN_TYPEWRITE]" . \} . el \{\ \!. PAD "\\h'\\n[#TOC_PH_INDENT]u'\\*[$TOC_PH_ITEM]\\*[$TOC_PN]" . \} +\!. PAD_MARKER # \!. EOL \!. ST 100 L \!. ST 101 R @@ -8953,7 +10938,7 @@ Default is OFF. \!. TRAP \!. PRINT \\n[#TOC_ENTRY_PN] \!. TQ -. di +. di . ev .\" End collection of parahead for TOC .\" Process parahead @@ -8967,35 +10952,41 @@ Default is OFF. . \} . \} . el \{ .ti \\n[#PH_INDENT]u \} +. ie \\n[#PREFIX_CH_NUM]=1 \{\ +. ds $CH_NUM \\n[#CH_NUM]. +. \} +. el \{\ +. rm $CH_NUM +. \} . if \\n[#PRINT_STYLE]=1 \{\ . TYPEWRITER . UNDERLINE OFF . ie \\n[#NUMBER_PH] \{\ . if \\n[#NUMBER_HEAD] \{\ . ie \\n[#NUMBER_SH] \{\ -. UNDERSCORE "\R'#NUMBERED 1'\\n[#HEAD_NUM].\\n[#SH_NUM].\\n+[#PH_NUM].\\ \\$1" +. UNDERSCORE "\R'#NUMBERED 1'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n[#SH_NUM].\\n+[#PH_NUM].\\ \\$1" \0 . \} . el \{\ -. UNDERSCORE "\R'#NUMBERED 1'\\n[#HEAD_NUM].\\n+[#PH_NUM].\\ \\$1 +. UNDERSCORE "\R'#NUMBERED 1'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n+[#PH_NUM].\\ \\$1" \0 . \} . \} . ie \\n[#NUMBER_SH] \{\ . if !\\n[#NUMBERED] \{\ -. UNDERSCORE "\\n[#SH_NUM].\\n+[#PH_NUM].\\ \\$1 +. UNDERSCORE "\\*[$CH_NUM]\\n[#SH_NUM].\\n+[#PH_NUM].\\ \\$1" \0 . \} . \} . el \{\ . if !\\n[#NUMBERED] \{\ -. UNDERSCORE "\\n+[#PH_NUM].\\ \\$1 +. UNDERSCORE "\\*[$CH_NUM]\\n+[#PH_NUM].\\ \\$1" \0 . \} . \} . \} . el \{\ -. UNDERSCORE "\\$1 +. UNDERSCORE "\\$1" \0 . \} . if \\n[#SLANT_WAS_ON] \{\ @@ -9012,22 +11003,28 @@ Default is OFF. . PT_SIZE \\*[$PH_SIZE_CHANGE] . if \\n[#PH_COLOR]=1 \{ .COLOR \\*[$PH_COLOR] \} . ie \\n[#NUMBER_PH] \{\ +. ie \\n[#PREFIX_CH_NUM]=1 \{\ +. ds $CH_NUM \\n[#CH_NUM]. +. \} +. el \{\ +. rm $CH_NUM +. \} . if \\n[#NUMBER_HEAD] \{\ . ie \\n[#NUMBER_SH] \{\ -. PRINT "\R'#NUMBERED 1'\\n[#HEAD_NUM].\\n[#SH_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c" +. PRINT "\R'#NUMBERED 1'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n[#SH_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c" . \} . el \{\ -. PRINT "\R'#NUMBERED 1'\\n[#HEAD_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c" +. PRINT "\R'#NUMBERED 1'\\*[$CH_NUM]\\n[#HEAD_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c" . \} . \} . ie \\n[#NUMBER_SH] \{\ . if !\\n[#NUMBERED] \{\ -. PRINT "\\n[#SH_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c" +. PRINT "\\*[$CH_NUM]\\n[#SH_NUM].\\n+[#PH_NUM].\0\\$1\h'.6m'\c" . \} . \} . el \{\ . if !\\n[#NUMBERED] \{\ -. PRINT "\\n+[#PH_NUM].\0\\$1\h'.6m'\c" +. PRINT "\\*[$CH_NUM]\\n+[#PH_NUM].\0\\$1\h'.6m'\c" . \} . \} . \} @@ -9131,8 +11128,14 @@ Default is OFF. \# Affects all paragraphs. \# .MAC PP_FONT END -. if \\n[#IGNORE] \{ .return \} +. if \n[#PRINT_STYLE]=1 \{\ +. ie \n[#ITALIC_MEANS_ITALIC] \{ .nop \} +. el \{ .return \} +. \} . br +. if \\n[#COLLATE]=1 \{\ +. if !'\\*[$SAVED_PP_FT]'' \{ .rm $SAVED_PP_FT \} +. \} . ds $PP_FT \\$1 . FT \\*[$PP_FT] .END @@ -9255,6 +11258,9 @@ Default is OFF. . if \\n[#SLANT_ON] \{\ . if \\n[#UNDERLINE_SLANT] \{ .UNDERLINE \} . \} +. if '\\*[$PP_FT]'I' \{\ +. if \\n[#ITALIC_MEANS_ITALIC] \{ .FT I \} +. \} . \} . el \{\ . ie \\n[#ENDNOTE] \{\ @@ -9266,7 +11272,11 @@ Default is OFF. . \} . el \{\ . FAMILY \\*[$DOC_FAM] -. FT \\*[$PP_FT] +. if !'\\*[$SAVED_PP_FT]'' \{\ +. ds $PP_FT \\*[$SAVED_PP_FT] +. rm $SAVED_PP_FT +. \} +. FT \\*[$PP_FT] . PT_SIZE \\n[#DOC_PT_SIZE]u . LS \\n[#DOC_LEAD]u . QUAD \\*[$DOC_QUAD] @@ -9356,6 +11366,7 @@ Default is OFF. . \} . el \{\ . ti \\n[#PP_INDENT]u/2u +. if \\n[#PP_SPACE]=1 \{ .ALD \\n[#DOC_LEAD]u \} . \} . if \\n[#CONDENSE] \{\ \E*[COND]\c @@ -9365,6 +11376,12 @@ Default is OFF. . \} . nr #Q_PP +1 . \} +\# This takes care of multi-paragraph dialogue, where each para +\# is introduced by an open quote whereas the previous para has +\# no close quote. +. if \\n[#OPEN_CLOSE]=1 \{\ +. nr #OPEN_CLOSE 0 +. \} . nr #PP_ACTIVE 1 .END \# @@ -9387,21 +11404,35 @@ Default is OFF. \# .MAC UNDERLINE_QUOTES END . ie '\\$1'' \{ .nr #UNDERLINE_QUOTES 1 \} -. el \{ .rr #UNDERLINE_QUOTES \} +. el \{ .rr #UNDERLINE_QUOTES \} .END \# \# \# QUOTE INDENT \# ------------ \# *Argument: -\# +\# | \# *Function: \# Creates or modifies register #Q_OFFSET_VALUE. \# *Notes: -\# Default is 3 for typeset; 2 for typewrite +\# If just an integer given, value by which to multiply PARA_INDENT +\# to get quote indent. If integer with a unit of measure appended, +\# absolute value of quote indent. +\# +\# Default is 3 for typeset; 2 for typewrite. \# .MAC QUOTE_INDENT END -. nr #Q_OFFSET_VALUE \\$1 +. if r#Q_OFFSET_VALUE \{ .rr #Q_OFFSET_VALUE \} +. if !'\\*[$Q_OFFSET_VALUE]'' \{ .rm $Q_OFFSET_VALUE \} +. ds $EVAL_QI_ARG \\$1 +. substring $EVAL_QI_ARG -1 +. ie \B'\\*[$EVAL_QI_ARG]' \{\ +. nr #Q_OFFSET_VALUE \\$1 +. \} +. el \{\ +. ds $Q_OFFSET_VALUE \\$1 +. \} +. rm $EVAL_QI_ARG .END \# \# @@ -9450,6 +11481,17 @@ Default is OFF. \# diverted so its depth can be measured (in DO_QUOTE) for determining \# how much space to put before and after. \# +\# QUOTE +\# ----- +\# *Arguments: +\# | +\# *Function: +\# Indents quoted text on a line for line basis, or turns QUOTE off. +\# *Notes: +\# Owing to the need to bottom align TYPESET pages, quoted text gets +\# diverted so its depth can be measured (in DO_QUOTE) for determining +\# how much space to put before and after. +\# .MAC QUOTE END . br . if \\n[#LINENUMBERS]=1 \{\ @@ -9465,7 +11507,10 @@ Default is OFF. . nr #IN_DIVER 1 . nr #QUOTE 1 . di P_QUOTE -. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u) +. ie r#Q_OFFSET_VALUE \{\ +. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u) +. \} +. el \{ .ll \\n[#L_LENGTH]u-\\*[$Q_OFFSET_VALUE] \} . if \\n[#LINENUMBERS]=2 \{\ . if \\n[#QUOTE_LN]=1 \{\ . nm \\n(ln "" \\*[$Q_LN_GUTTER] -3-\\*[$Q_LN_GUTTER] @@ -9473,7 +11518,12 @@ Default is OFF. . \} . ta \\n(.lu . if \\n[#COLUMNS] \{\ -. ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u) +. ie r#Q_OFFSET_VALUE \{\ +. ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u) +. \} +. el \{\ +. ll \\n[#COL_L_LENGTH]u-\\*[$Q_OFFSET_VALUE] +. \} . ta \\n(.lu . \} . if \\n[#PRINT_STYLE]=1 \{\ @@ -9525,6 +11575,85 @@ Default is OFF. . el \{ .DO_QUOTE \} .END \# +\# +\# CODE +\# ---- +\# *Arguments: +\# | +\# *Function: +\# Takes care of admistrivia associated with setting code snippets. +\# +.MAC CODE END +\c +. if '\\$1'BR' \{\ +. br +. shift +. \} +. if '\\$1'BREAK' \{\ +. br +. shift +. \} +. if '\\$1'SPREAD' \{\ +. brp +. shift +. \} +. ie '\\$1'' \{\ +. ds $PRE_CODE_FAM \\n[.fam] +. ds $PRE_CODE_FT \\n[.sty] +. if !\\n[#PRINT_STYLE]=1 \{\ +. ie \\n[#CODE_FAM]=1 \{ .fam \\*[$CODE_FAM] \} +. el \{ .fam C \} +. \} +. ft R +. if \\n[#UNDERLINE_QUOTES]=1 \{\ +. nr #RESTORE_UNDERLINE 1 +. UNDERLINE_QUOTES OFF +. FT R +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. tr `' +. \} +. if \\n[#RESTORE_SQ]=1 \{\ +. nr #SQ_WAS_ON 1 +. SMARTQUOTES OFF +. \} +. \} +. el \{\ +. fam \\*[$PRE_CODE_FAM] +. ft \\*[$PRE_CODE_FT] +. rr $RESTORE_FT +. if \\n[#RESTORE_UNDERLINE]=1 \{\ +. rr #RESTORE_UNDERLINE +. UNDERLINE_QUOTES +. \} +. if \\n[#SQ_WAS_ON]=1 \{\ +. rr #SQ_WAS_ON +. SMARTQUOTES +. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. tr `` +. \} +. \} +. if \\n[#NUM_ARGS]=2 \{\ +. if '\\$2'BR' \{ .br \} +. if '\\$2'BREAK' \{ .br \} +. if '\\$2'SPREAK' \{ .brp \} +. \} +.END +\# +\# CODE_FAMILY +\# ----------- +\# *Arguments: +\# +\# *Function: +\# Creates register #CODE_FAM and string $CODE_FAM for use by CODE. +\# +.MAC CODE_FAMILY END +. nr #CODE_FAM 1 +. ds $CODE_FAM \\$1 +.END +\# +\# \# ---Blockquotes--- \# \# BLOCKQUOTE @@ -9559,25 +11688,53 @@ Default is OFF. . nr #PP_STYLE 2 . nr #Q_PP 0 . di B_QUOTE -. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u)) +. ie r#Q_OFFSET_VALUE \{\ +. ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u)) +. \} +. el \{ .ll \\n[#L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]*2u) \} . if \\n[#ENDNOTE] \{\ . if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\ -. ll \\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u)) +. ie r#Q_OFFSET_VALUE \{\ +. ll \\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u)) +. \} +. el \{\ +. ll \\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\*[$Q_OFFSET_VALUE]*2u) +. \} . \} . if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\ -. ll \\n[#L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u)) +. ie r#Q_OFFSET_VALUE \{\ +. ll \\n[#L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u)) +. \} +. el \{\ +. ll \\n[#L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]u*2u) +. \} . \} . \} . ta \\n(.lu . CHECK_INDENT . if \\n[#COLUMNS] \{\ -. ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u)) +. ie r#Q_OFFSET_VALUE \{\ +. ll \\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u)) +. \} +. el \{\ +. ll \\n[#COL_L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]*2u) +. \} . if \\n[#ENDNOTE] \{\ . if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\ -. ll \\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u)) +. ie r#Q_OFFSET_VALUE \{\ +. ll \\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u)) +. \} +. el \{\ +. ll \\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\*[$Q_OFFSET_VALUE]*2u) +. \} . \} . if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\ -. ll \\n[#COL_L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u)) +. ie r#Q_OFFSET_VALUE \{\ +. ll \\n[#COL_L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u)) +. \} +. el \{\ +. ll \\n[#COL_L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]*2u) +. \} . \} . \} . ta \\n(.lu @@ -9721,20 +11878,27 @@ Default is OFF. . \} . \} . \} -. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) +. ie r#Q_OFFSET_VALUE \{\ +. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) +. \} +. el \{ .nr #Q_OFFSET \\n[#L_MARGIN]+\\*[$Q_OFFSET_VALUE] \} . if \\n[#COLUMNS] \{\ -. nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) +. ie r#Q_OFFSET_VALUE \{\ +. nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) +. \} +. el \{ .nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$Q_OFFSET_VALUE] \} . \} . if !\\n[#ENDNOTE] \{ .po \\n[#Q_OFFSET]u \} . if \\n[#ENDNOTE] \{\ -. in +\\n[#EN_PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u +. ie r#Q_OFFSET_VALUE \{ .in +\\n[#EN_PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u \} +. el \{ .in +\\*[$Q_OFFSET_VALUE] \} . \} . ie \\n[#START]=1 \{\ . ie !\\n[#Q_LEAD_DIFF]<0 \{ .ALD \\n[#Q_SPACE_ADJ]u \} . el \{ .RLD 0-\\n[#Q_LEAD_DIFF]u \} . \} . el \{\ -. ALD \\n[#Q_SPACE_ADJ]u +. if \\n[#PRINT_STYLE]=2 \{ .ALD \\n[#Q_SPACE_ADJ]u \} . \} . if \\n[#QUOTE]=1 \{\ . nf @@ -9747,6 +11911,7 @@ Default is OFF. . \} . if \\n[#PRINT_STYLE]=1 \{\ . ALD \\n[#DOC_LEAD]u +. if !\\n[.v]=\\n[#DOC_LEAD] \{ .SHIM \} . \} . if \\n[#PRINT_STYLE]=2 \{\ . ie \\n[#START] \{\ @@ -9795,8 +11960,10 @@ Default is OFF. . \} . if \\n[#LINENUMBERS]=2 \{\ . nr #LINENUMBERS 1 -. ie \\n[#RESTORE_LN_NUM]=1 \{ .nm \\n[#NEXT_LN] \} -. el \{ .nm +0 \} +. if !\\n[#ENDNOTE] \{\ +. ie \\n[#RESTORE_LN_NUM]=1 \{ .nm \\n[#NEXT_LN] \} +. el \{ .nm +0 \} +. \} . \} . if \\n[#ENDNOTE] \{ .nr #FULLSPACE_QUOTES \\n[#RESET_QUOTE_SPACING] \} . if r#HEAD \{ .rr #HEAD \} @@ -9857,7 +12024,7 @@ Default is OFF. . el \{\ .\" This seems to be the only way to get the baseline of quotes that start .\" at the top of the page to fall on the first line of the "grid" (i.e on -.\" the first legal baseline of the page). +.\" the first valid baseline of the page). . ie \\n[#Q_TOP]=\\n[#PAGE_TOP] \{\ . if \\n[#QUOTE]=1 \{\ . rn P_QUOTE Q_TEMP @@ -9961,8 +12128,20 @@ Default is OFF. . el \{ .ALD \\n[#DOC_LEAD]u \} . \} . \} -. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) -. if \\n[#COLUMNS] \{ .nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) \} +. ie r#Q_OFFSET_VALUE \{\ +. nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) +. \} +. el \{\ +. nr #Q_OFFSET \\n[#L_MARGIN]+\\*[$Q_OFFSET_VALUE] +. \} +. if \\n[#COLUMNS] \{\ +. ie r#Q_OFFSET_VALUE \{\ +. nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE]) +. \} +. el \{\ +. nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$Q_OFFSET_VALUE] +. \} +. \} . po \\n[#Q_OFFSET]u . if \\n[#QUOTE]=1 \{\ . nf @@ -10009,6 +12188,10 @@ Default is OFF. .MAC PAGINATE END . ie '\\$1'' \{ .nr #PAGINATE 1 \} . el \{ .nr #PAGINATE 0 \} +. if \\n[#HF_OFF]=1 \{\ +. rr #PAGINATION_STATE +. rr #HF_OFF +. \} .END \# \# @@ -10116,7 +12299,7 @@ Default is OFF. . nr #HYPHEN_ADJ \\n[#CAP_HEIGHT]/12 . ds $HYPHEN \v'-\En[#HYPHEN_ADJ]u'-\v'\En[#HYPHEN_ADJ]u' . PRINT \m[\\*[$PAGENUM_COLOR]]\\*[$HYPHEN]\|\\n[#PAGENUMBER]\|\\*[$HYPHEN] -.br +. br .END \# \# @@ -10211,20 +12394,19 @@ E\\R'#CAP_HEIGHT \\n[.cht]' . el \{ .PRINT "\m[\\*[$PAGENUM_COLOR]]\\n[#PAGENUMBER]" \} . \} . ev +. nr #DIVER_DEPTH 0 .END \# \# ==================================================================== \# \# +++FOOTNOTES+++ \# -.ig -Mom's footnote handling is baroque, to say the least. There are -redundancies in a number of the macros involved, as well as some -registers that probably don't get used anymore. The baggage is left -in in case some new footnote oddity/challenge gets thrown my way. - -The macros are heavily commented. -.. +\# Mom's footnote handling is baroque, to say the least. There are +\# redundancies in a number of the macros involved, as well as some +\# registers that probably don't get used anymore. The baggage is left +\# in in case some new footnote oddity/challenge gets thrown my way. +\# +\# The macros are heavily commented. \# \# FOOTNOTE AUTOLEAD \# ----------------- @@ -10270,7 +12452,7 @@ The macros are heavily commented. . if '\\$1'STAR' \{\ . if \\n[#FN_MARKER_STYLE]=3 \{\ . if !\\n[#NEWPAGE]=1 \{\ -. tm1 "[mom]: Your current FOOTNOTE_MARKER STYLE is LINE. +. tm1 "[mom]: Your current FOOTNOTE_MARKER STYLE is LINE. . tm1 " You cannot change footnote marker style without . tm1 " first breaking to a new page with NEWPAGE. . tm1 " Ignoring request FOOTNOTE_MARKER_STYLE STAR at line \\n(.c. @@ -10289,7 +12471,7 @@ The macros are heavily commented. . if '\\$1'NUMBER' \{\ . if \\n[#FN_MARKER_STYLE]=3 \{\ . if !\\n[#NEWPAGE]=1 \{\ -. tm1 "[mom]: Your current FOOTNOTE_MARKER STYLE is NUMBER. +. tm1 "[mom]: Your current FOOTNOTE_MARKER STYLE is NUMBER. . tm1 " You cannot change footnote marker style without . tm1 " first breaking to a new page with NEWPAGE. . tm1 " Ignoring request FOOTNOTE_MARKER_STYLE NUMBER at line \\n(.c. @@ -10380,7 +12562,7 @@ The macros are heavily commented. . \} .END \# -\# +\# \# RESET FOOTNOTE NUMBER \# --------------------- \# *Arguments: @@ -10443,10 +12625,13 @@ The macros are heavily commented. .MAC FOOTNOTE_RULE END . ie '\\$0'PRINT_FOOTNOTE_RULE' \{\ . if \\n[#FN_RULE]=0 \{ .RLD 1v \} -\!. PT_SIZE 12 . RLD 1v . LEFT -. PRINT \v'-\\n[#FN_RULE_ADJ]u'\l'\\n[#FN_RULE_LENGTH]u'\v'+\\n[#FN_RULE_ADJ]u' +\v'-\\n[#FN_RULE_ADJ]u-\\n[#FN_RULE_WEIGHT_ADJ]u'\ +\D't \\n[#FN_RULE_WEIGHT]'\ +\h'-\\n[#FN_RULE_WEIGHT]u'\ +\D'l \\n[#FN_RULE_LENGTH]u 0'\ +\v'+\\n[#FN_RULE_ADJ]u+\\n[#FN_RULE_WEIGHT_ADJ]u' \!. PT_SIZE \\n[#DOC_PT_SIZE]u\\*$[FN_SIZE_CHANGE] . QUAD \\*[$FN_QUAD] . \} @@ -10542,7 +12727,6 @@ The macros are heavily commented. \# for each footnote the user wants indented. \# .MAC FOOTNOTE END -. if !\\n(.u \{ .nr #ADD_BREAK 1 \} . ie '\\$1'' \{\ . if \\n[#FN_MARKER_STYLE]=3 \{\ . if !\\n[#LINENUMBERS] \{\ @@ -10935,8 +13119,8 @@ The macros are heavily commented. . \} . \} . \} -.\" If INDENT arg is passed to FOOTNOTE, calculate the indent... . el \{\ +.\" If INDENT arg is passed to FOOTNOTE, calculate the indent... . ie '\\$1'INDENT' \{\ . ev FOOTNOTES . if '\\$2'L' \{ .in (\\$3) \} @@ -10972,7 +13156,7 @@ The macros are heavily commented. . \} . \} . if \\n[#REF]=1 \{\ -\!. in +\!. in . \} .\" Terminate FOOTNOTES or FN_IN_DIVER diversion . di @@ -10982,10 +13166,10 @@ The macros are heavily commented. .\" Turn off indent possibly set by FOOTNOTE INDENT . in 0 .\" Restore sentence spacing -. if \\n[#PRINT_STYLE]=2 \{\ -. if d$RESTORE_SS_VAR \{ .SS \\*[$RESTORE_SS_VAR] \} -. rm $RESTORE_SS_VAR -. \} +. if \\n[#PRINT_STYLE]=2 \{\ +. if d$RESTORE_SS_VAR \{ .SS \\*[$RESTORE_SS_VAR] \} +. rm $RESTORE_SS_VAR +. \} . if \\n[#PRINT_STYLE]=1 \{\ . if \\n[#UNDERLINE_WAS_ON] \{\ . UNDERLINE @@ -11046,7 +13230,11 @@ The macros are heavily commented. . di FOOTNOTES . ie \\n[#FN_RULE]=0 \{ .RLD 1v \} . el \{\ -. PRINT \v'-\\n[#FN_RULE_ADJ]u'\l'\\n[#FN_RULE_LENGTH]u'\v'+\\n[#FN_RULE_ADJ]u' +\v'-\\n[#FN_RULE_ADJ]u-\\n[#FN_RULE_WEIGHT_ADJ]u'\ +\D't \\n[#FN_RULE_WEIGHT]'\ +\h'-\\n[#FN_RULE_WEIGHT]u'\ +\D'l \\n[#FN_RULE_LENGTH]u 0'\ +\v'+\\n[#FN_RULE_ADJ]u+\\n[#FN_RULE_WEIGHT_ADJ]u' . \} . br . if \\n[#RUNON_FOOTNOTES] \{\ @@ -11175,7 +13363,13 @@ The macros are heavily commented. . \} . \} . \} -. nr #VARIABLE_FOOTER_POS -\\n[#VFP_DIFF] +.\" Not sure what I was thinking with this next line. As is, it +.\" moves the already established VFP trap for footnote 1 higher up +.\" the page, resulting in a VFP that's higher on the page than the +.\" current page position. Leaving it in anyway, commented out, in +.\" case the logic and the conditions under which it should +.\" apply reveal themselves. +\#. nr #VARIABLE_FOOTER_POS -\\n[#VFP_DIFF] . nr #FN_DEPTH \\n[#SAVED_FN_DEPTH_1]+\\n[#VFP_DIFF] . \} . el \{\ @@ -11191,7 +13385,7 @@ The macros are heavily commented. . if \\n[#DIVERTED] \{\ . if !\\n[#FN_DEPTH]=\\n[#SAVED_FN_DEPTH_1] \{\ . nr #FN_DEPTH +\\n[#FN_LEAD] -. nr #VARIABLE_FOOTER_POS -\\n[#FN_LEAD] +. nr #VARIABLE_FOOTER_POS -\\n[#FN_LEAD] . rr #PREV_FN_DEFERRED . \} . \} @@ -11221,26 +13415,24 @@ The macros are heavily commented. . \} . nr #NO_FN_MARKER 0 . \} -. if \\n[#ADD_BREAK] \{\ -. br -. rr #ADD_BREAK +. if \\n[#NUM_ARGS]=2 \{\ +. if '\\$2'BREAK' \{ .BR \} +. if '\\$2'BR' \{ .BR \} . \} .END \# \# Utility macros to manage footnotes that occur inside diversions \# --------------------------------------------------------------- \# -.ig -There are some redundancies here; they're left in in case unforeseen -footnote situations crop up in the future that might require -manipulation of them. -.. +\# There are some redundancies here; they're left in in case unforeseen +\# footnote situations crop up in the future that might require +\# manipulation of them. \# \# 1. Pre-footnote processing for footnotes in diversions \# \# a) A footnote inside a diversion will be moved entirely (marker \# in running text and text of footnote) to the next page/column. -\# +\# .MAC DIVER_FN_1_PRE END . nr #RESET_FN_COUNTERS 1 . nr #COUNTERS_RESET 1 @@ -11325,21 +13517,18 @@ manipulation of them. \# \# The main macros that handle footnote processing. \# ----------------------------------------------- -\# -.ig -Sometimes, #VARIABLE_FOOTER_POS sets FOOTER at a location that gives -the impression another line of running text could fit on the page. -VFP_CHECK is always set to the line just above the one where FOOTER -will be sprung, and checks for this condition. If it exists, FOOTER -is set one line lower on the page, thus squeezing in an extra line -of running text. This is a judgment call on my part, but seems to -work well. If there are problems (e.g. footnotes really do look -jammed), the user should probably adjust FOOTNOTE_AUTOLEAD and/or -FOOTNOTE_RULE_ADJ. - -The macro has to be run in its own environment, otherwise the first -word of the last line before the footnotes gets chopped. -.. +\# Sometimes, #VARIABLE_FOOTER_POS sets FOOTER at a location that gives +\# the impression another line of running text could fit on the page. +\# VFP_CHECK is always set to the line just above the one where FOOTER +\# will be sprung, and checks for this condition. If it exists, FOOTER +\# is set one line lower on the page, thus squeezing in an extra line +\# of running text. This is a judgment call on my part, but seems to +\# work well. If there are problems (e.g. footnotes really do look +\# jammed), the user should probably adjust FOOTNOTE_AUTOLEAD and/or +\# FOOTNOTE_RULE_ADJ. +\# +\# The macro has to be run in its own environment, otherwise the first +\# word of the last line before the footnotes gets chopped. \# .MAC VFP_CHECK END . ev VFP_CHECK @@ -11372,16 +13561,14 @@ word of the last line before the footnotes gets chopped. . ev .END \# -.ig -FN_OVERFLOW_TRAP starts off "underneath" FOOTER, but is revealed -as #VARIABLE_FOOTER_POSITION changes the position of FOOTER. -FN_OVERFLOW_TRAP simply starts diversion FN_OVERFLOW to "catch" -the overflow. The diversion is ended in FOOTER, immediately after -FOOTER outputs the diversion, FOOTNOTES, before PROCESS_FN_LEFTOVER -is run (either in HEADER, or in FOOTER if moving col to col). -.. +\# FN_OVERFLOW_TRAP starts off "underneath" FOOTER, but is revealed +\# as #VARIABLE_FOOTER_POSITION changes the position of FOOTER. +\# FN_OVERFLOW_TRAP simply starts diversion FN_OVERFLOW to "catch" +\# the overflow. The diversion is ended in FOOTER, immediately after +\# FOOTER outputs the diversion, FOOTNOTES, before PROCESS_FN_LEFTOVER +\# is run (either in HEADER, or in FOOTER if moving col to col). \# -.MAC FN_OVERFLOW_TRAP END +.MAC FN_OVERFLOW_TRAP END . if \\n[#FN_COUNT] \{\ . di FN_OVERFLOW . ie !\\n[#NO_BACK_UP]=1 \{\ @@ -11418,14 +13605,12 @@ is run (either in HEADER, or in FOOTER if moving col to col). . nr #FROM_DIVERT_FN 1 .END \# -.ig -PROCESS_FN_LEFTOVER is called at the top of HEADER, and in -FOOTER if we're moving from one column to the next (i.e. after -outputting FOOTNOTES). It checks for whether we have a "deferred -footnote" situation, and resets counters and number registers -accordingly. Lastly, if we have some footnote overflow, it calls -DIVERT_FN_OVERFLOW. -.. +\# PROCESS_FN_LEFTOVER is called at the top of HEADER, and in +\# FOOTER if we're moving from one column to the next (i.e. after +\# outputting FOOTNOTES). It checks for whether we have a "deferred +\# footnote" situation, and resets counters and number registers +\# accordingly. Lastly, if we have some footnote overflow, it calls +\# DIVERT_FN_OVERFLOW. \# .MAC PROCESS_FN_LEFTOVER END . if \\n[#PREV_FN_DEFERRED]=2 \{\ @@ -11476,11 +13661,9 @@ DIVERT_FN_OVERFLOW. . rr #FROM_DIVERT_FN .END \# -.ig -DIVERT_FN_LEFTOVER is called in PROCESS_FN_LEFTOVER (at -the top of HEADER, and in FOOTER if we're moving from one column -to the next). -.. +\# DIVERT_FN_LEFTOVER is called in PROCESS_FN_LEFTOVER (at +\# the top of HEADER, and in FOOTER if we're moving from one column +\# to the next). \# .MAC DIVERT_FN_LEFTOVER END . nr #NO_FN_MARKER 1 @@ -11491,7 +13674,7 @@ to the next). . FOOTNOTE OFF . if \\n[#PREV_FN_DEFERRED] \{\ . nr #FN_DEPTH -\\n[#FN_LEAD] -. nr #VARIABLE_FOOTER_POS +\\n[#FN_LEAD] +. nr #VARIABLE_FOOTER_POS +\\n[#FN_LEAD] . ch FOOTER \\n[#VARIABLE_FOOTER_POS]u . if \\n[#PREV_FN_DEFERRED]=2 \{\ . nr #PREV_FN_DEFERRED 1 @@ -11501,12 +13684,10 @@ to the next). . rr #FN_OVERFLOW_DEPTH .END \# -.ig -This is a special macro to deal with footnotes that are set inside -diversions (QUOTE, BLOCKQUOTE and EPIGRAPH). It's called in HEADER -(and in FOOTER, if we're moving from column to column), and comes -after PROCESS_FOOTNOTE_LEFTOVER in those two macros. -.. +\# This is a special macro to deal with footnotes that are set inside +\# diversions (QUOTE, BLOCKQUOTE and EPIGRAPH). It's called in HEADER +\# (and in FOOTER, if we're moving from column to column), and comes +\# after PROCESS_FOOTNOTE_LEFTOVER in those two macros. \# .MAC PROCESS_FN_IN_DIVER END . nr #SPACE_REMAINING 0 @@ -11533,20 +13714,19 @@ after PROCESS_FOOTNOTE_LEFTOVER in those two macros. \# \# +++ENDNOTES+++ \# -.ig -When endnotes are output, the spacing between the notes is always -1 extra linespace. This can have bottom margin consequences. If -this doesn't bother you, don't worry about it. If it does bother -you, and you want to adjust the spacing between any two endnotes (as -they're output), make the spacing adjustments (.ALD/.RLD) at the -*end* of endnotes (i.e. just before .ENDNOTE OFF), not at the top. - -Endnotes must be output manually with .ENDNOTES. This allows user -the flexibility to output endnotes at the end of each collated -document, or to output them at the end of the entire document. -.. +\# When endnotes are output, the spacing between the notes is always +\# 1 extra linespace. This can have bottom margin consequences. If +\# this doesn't bother you, don't worry about it. If it does bother +\# you, and you want to adjust the spacing between any two endnotes (as +\# they're output), make the spacing adjustments (.ALD/.RLD) at the +\# *end* of endnotes (i.e. just before .ENDNOTE OFF), not at the top. +\# +\# Endnotes must be output manually with .ENDNOTES. This allows user +\# the flexibility to output endnotes at the end of each collated +\# document, or to output them at the end of the entire document. \# \# Control macros +\# -------------- \# \# ENDNOTE POINT SIZE \# ------------------ @@ -11628,7 +13808,7 @@ document, or to output them at the end of the entire document. .END \# \# -\# ENDNOTE STRING +\# ENDNOTE STRING \# -------------- \# *Argument: \# @@ -11642,22 +13822,8 @@ document, or to output them at the end of the entire document. .END \# \# -\# ENDNOTE STRING UNDERSCORE -\# ------------------------- -\# *Arguments: -\# toggle | 2 -\# *Function: -\# Turns underscoring of endnote main title on or off. If the argument -\# is the digit "2", turns on double-underscoring. -\# *Notes: -\# Default is double-underscored. -\# -.MAC ENDNOTE_STRING_UNDERSCORE END -. ie '\\$1'' \{ .nr #EN_STRING_UNDERSCORE 1 \} -. el \{\ -. ie '\\$1'2' \{ .nr #EN_STRING_UNDERSCORE 2 \} -. el \{ .nr #EN_STRING_UNDERSCORE 0 \} -. \} +.MAC ENDNOTE_STRING_ADVANCE END +. nr #EN_STRING_ADVANCE (\\$1) .END \# \# @@ -11687,7 +13853,7 @@ document, or to output them at the end of the entire document. \# *Argument: \# \# *Function: -\# Creates string $EN_TITLE_STRING. +\# Creates string $EN_TITLE. \# *Notes: \# Default is the document title, or, if doc is a chapter, "Chapter #" \# @@ -11696,26 +13862,6 @@ document, or to output them at the end of the entire document. .END \# \# -.MAC ENDNOTE_TITLE_SPACE END -. nr #EN_TITLE_SPACE (\\$1) -.END -\# -\# -\# ENDNOTE TITLE UNDERSCORE -\# ------------------------ -\# *Argument: -\# toggle -\# *Function: -\# Creates or removes register #EN_TITLE_UNDERSCORE. -\# *Notes: -\# Default is to underscore the endnote titles. -\# -.MAC ENDNOTE_TITLE_UNDERSCORE END -. ie '\\$1'' \{ .nr #EN_TITLE_UNDERSCORE 1 \} -. el \{ .rr #EN_TITLE_UNDERSCORE \} -.END -\# -\# \# ENDNOTE MARKER STYLE \# -------------------- \# *Arguments: @@ -11817,7 +13963,7 @@ document, or to output them at the end of the entire document. . ds $EN_LN_GAP \\$1 .END \# -\# +\# \# ENDNOTE NUMBERS ALIGN RIGHT \# --------------------------- \# *Argument: @@ -11923,8 +14069,8 @@ document, or to output them at the end of the entire document. . nr #EN_ALLOWS_HEADERS_ALL 1 . \} . el \{\ -. rr #EN_ALLOWS_HEADERS -. rr #EN_ALLOWS_HEADERS_ALL +. nr #EN_ALLOWS_HEADERS 0 +. nr #EN_ALLOWS_HEADERS_ALL 0 . \} . \} .END @@ -12032,7 +14178,6 @@ document, or to output them at the end of the entire document. \# when ENDNOTE_MARKER_STYLE is NUMBER. \# .MAC ENDNOTE END -. if !\\n(.u \{ .nr #ADD_BREAK 1 \} . ie '\\$1'' \{\ . nr #ENDNOTE 1 . if \\n[#EN_MARKER_STYLE]=1 \{\ @@ -12049,9 +14194,13 @@ document, or to output them at the end of the entire document. . \} . PRINT "\s-2\v'-\\n[#DOC_LEAD]u/5u'\\n+[#EN_NUMBER]\v'+\\n[#DOC_LEAD]u/5u'\s+2\c" . \} -. if \\n[#PRINT_STYLE]=2 \{ .PRINT "\*[SUP]\\n+[#EN_NUMBER]\*[SUPX]\c" \} +. if \\n[#PRINT_STYLE]=2 \{\ +. PRINT \*[SUP]\\n+[#EN_NUMBER]\*[SUPX]\c +. \} . \} . if \\n[#EN_MARKER_STYLE]=2 \{\ +. ie r#EN_NUMBER \{ \\n+[#EN_NUMBER] \} +. el \{ .nr #EN_NUMBER 1 1 \} . if !\\n[#LINENUMBERS] \{\ . tm1 "[mom]: Line numbering must be enabled with NUMBER_LINES when . tm1 " ENDNOTE_MARKER_STYLE is LINE. @@ -12097,22 +14246,26 @@ document, or to output them at the end of the entire document. . if '\\*[$EN_TITLE_QUAD]'CENTRE' \{ .CENTER \} . if '\\*[$EN_TITLE_QUAD]'R' \{ .RIGHT \} . if '\\*[$EN_TITLE_QUAD]'RIGHT' \{ .RIGHT \} -. ie \\n[#EN_TITLE_UNDERSCORE] \{\ -. UNDERSCORE "\\*[$EN_TITLE] +. ie \\n[#EN_TITLE_UNDERLINE] \{\ +. nr #FROM_EN_TITLE 1 +. UNDERSCORE "\\*[$EN_TITLE]" +. rr #FROM_EN_TITLE . \} . el \{\ -. PRINT "\\*[$EN_TITLE] +. PRINT "\\*[$EN_TITLE]" . \} . \} . \} -. ie \\n[#EN_NUMBER]=1 \{\ -. if !'\\*[$EN_TITLE]'' \{ .sp \} -. \} -. el \{ .sp \} . if \\n[#PRINT_STYLE]=1 \{\ . TYPEWRITER +. if \\n[#EN_NUMBER]=1 \{\ +. if \\n[#SINGLE_SPACE]=1 \{ .sp \} +. \} . \} . if \\n[#PRINT_STYLE]=2 \{\ +. if \\n[#EN_NUMBER]=1 \{\ +. if !'\\*[$EN_TITLE]'' \{ .sp \} +. \} . if \\n[#EN_MARKER_STYLE]=1 \{\ . FAMILY \\*[$EN_NUMBER_FAM] . FT \\*[$EN_NUMBER_FT] @@ -12196,8 +14349,12 @@ document, or to output them at the end of the entire document. . ti -(\\*[$REF_EN_INDENT]-\\n[#EN_NUMBER_L_LENGTH]u) . \} . if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\ -. in \\*[$REF_EN_INDENT] -. ti -(\\*[$REF_EN_INDENT]-\\n[#EN_NUMBER_L_LENGTH]u-\\n[#EN_FIGURE_SPACE]u) +\#. in \\*[$REF_EN_INDENT] +\#. ti -(\\*[$REF_EN_INDENT]-\\n[#EN_NUMBER_L_LENGTH]u-\\n[#EN_FIGURE_SPACE]u) +\#. in \\*[$REF_EN_INDENT]+\\n[#EN_NUMBER_L_LENGTH]u +\#. ti -(\\*[$REF_EN_INDENT]-\\n[#EN_NUMBER_L_LENGTH]u+\\n[#EN_FIGURE_SPACE]u) +. in +\\*[$REF_EN_INDENT] +. ti -\\*[$REF_EN_INDENT] . \} . \} . el \{\ @@ -12209,8 +14366,8 @@ document, or to output them at the end of the entire document. . \} . \} . el \{\ -. br -. in 0 +. sp +. in 0 . if \\n[#EN_MARKER_STYLE]=2 \{\ \!. in 0 . \} @@ -12236,9 +14393,9 @@ document, or to output them at the end of the entire document. \*[SLANT]\c . \} . \} -. if \\n[#ADD_BREAK] \{\ -. br -. rr #ADD_BREAK +. if \\n[#NUM_ARGS]=2 \{\ +. if '\\$2'BREAK' \{ .BR \} +. if '\\$2'BR' \{ .BR \} . \} .END \# @@ -12323,12 +14480,14 @@ document, or to output them at the end of the entire document. \!. PT_SIZE \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE_CHANGE] . \} \!. TRAP OFF +\!. PAD_MARKER ^ . ie \\n[#PRINT_STYLE]=1 \{\ -\!. PAD "\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN_TYPEWRITE]" +\!. PAD "\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN_TYPEWRITE]" . \} . el \{\ \!. PAD "\\h'\\n[#TOC_TITLE_INDENT]u'\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN]" . \} +\!. PAD_MARKER # \!. EOL \!. ST 100 L \!. ST 101 R @@ -12343,7 +14502,7 @@ document, or to output them at the end of the entire document. \!. TRAP \!. PRINT \\n[#TOC_ENTRY_PN] \!. TQ -. di +. di . ev .\" End collection of endnotes title string for TOC .\" Process endnotes @@ -12360,7 +14519,7 @@ document, or to output them at the end of the entire document. . el \{ .DOC_LEAD \\n[#EN_LEAD]u \} . \} . PRINT \& -. ie r#EN_TITLE_SPACE \{ .sp |\\n[#EN_TITLE_SPACE]u \} +. ie r#EN_STRING_ADVANCE \{ .sp |\\n[#EN_STRING_ADVANCE]u \} . el \{ .sp |\\n[#T_MARGIN]u \} . mk ec . if \\n[#SLANT_ON] \{\ @@ -12394,13 +14553,15 @@ document, or to output them at the end of the entire document. . if '\\*[$EN_STRING_QUAD]'RIGHT' \{ .RIGHT \} . EOL . if \\n[#EN_STRING_CAPS] \{ .CAPS \} -. ie \\n[#EN_STRING_UNDERSCORE] \{\ -. ie \\n[#EN_STRING_UNDERSCORE]=2 \{\ -. UNDERSCORE2 "\\*[$EN_STRING] +. ie \\n[#EN_STRING_UNDERLINE] \{\ +. nr #FROM_EN_STRING 1 +. ie \\n[#EN_STRING_UNDERLINE]=2 \{\ +. UNDERSCORE2 \\*[$EN_UNDERLINE_GAP] \\*[$EN_RULE_GAP] "\\*[$EN_STRING]" . \} . el \{\ -. UNDERSCORE "\\*[$EN_STRING] +. UNDERSCORE "\\*[$EN_STRING]" . \} +. rr #FROM_EN_STRING . \} . el \{\ . PRINT "\\*[$EN_STRING] @@ -12448,25 +14609,23 @@ document, or to output them at the end of the entire document. \# \# +++BIBLIOGRAPHY+++ \# -.ig -Mom treats bibliographies and endnotes very similarly. The chief -difference is that endnotes are collected and formatted inside a -diversion, while bibliographies are built "by hand." ENDNOTES sets -up the endnotes page and outputs the formatted diversion. -BIBLIOGRAPHY sets up the bibliography page, then awaits refer -commands. - -All of the bibliography control macros have their exact -counterparts in the endnotes control macros. It was tempting to do -fancy stuff with aliases to avoid the repetition, but for reasons -of my own sanity, and for the benefit of anyone wanting to play -around with the bibliography control macros, I decided to keep them -separate. - -Because the bibliography control macros all have endnotes -equivalents, refer to the appropriate, similar endnote macro for -Arguments, Function and Notes. -.. +\# Mom treats bibliographies and endnotes very similarly. The chief +\# difference is that endnotes are collected and formatted inside a +\# diversion, while bibliographies are built "by hand." ENDNOTES sets +\# up the endnotes page and outputs the formatted diversion. +\# BIBLIOGRAPHY sets up the bibliography page, then awaits refer +\# commands. +\# +\# All of the bibliography control macros have their exact +\# counterparts in the endnotes control macros. It was tempting to do +\# fancy stuff with aliases to avoid the repetition, but for reasons +\# of my own sanity, and for the benefit of anyone wanting to play +\# around with the bibliography control macros, I decided to keep them +\# separate. +\# +\# Because the bibliography control macros all have endnotes +\# equivalents, refer to the appropriate, similar endnote macro for +\# Arguments, Function and Notes. \# Bibliography control macros \# .MAC BIBLIOGRAPHY_PT_SIZE END @@ -12507,14 +14666,6 @@ Arguments, Function and Notes. . ds $BIB_STRING \\$1 .END \# -.MAC BIBLIOGRAPHY_STRING_UNDERSCORE END -. ie '\\$1'' \{ .nr #BIB_STRING_UNDERSCORE 1 \} -. el \{\ -. ie '\\$1'2' \{ .nr #BIB_STRING_UNDERSCORE 2 \} -. el \{ .nr #BIB_STRING_UNDERSCORE 0 \} -. \} -.END -\# .MAC BIBLIOGRAPHY_STRING_CAPS END . ie '\\$1'' \{ .nr #BIB_STRING_CAPS 1 \} . el \{ .rr #BIB_STRING_CAPS \} @@ -12717,7 +14868,7 @@ Arguments, Function and Notes. . \} \!. TRAP OFF . ie \\n[#PRINT_STYLE]=1 \{\ -\!. PAD "\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN_TYPEWRITE]" +\!. PAD "\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN_TYPEWRITE]" . \} . el \{\ \!. PAD "\\h'\\n[#TOC_TITLE_INDENT]u'\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN]" @@ -12736,7 +14887,7 @@ Arguments, Function and Notes. \!. TRAP \!. PRINT \\n[#TOC_ENTRY_PN] \!. TQ -. di +. di . ev .\" End collection of bibliography title string for TOC .\" Process bibliography @@ -12779,23 +14930,25 @@ Arguments, Function and Notes. . \} . if '\\*[$BIB_STRING_QUAD]'L' \{ .LEFT \} . if '\\*[$BIB_STRING_QUAD]'LEFT' \{ .LEFT \} -. if '\\*[$EN_STRING_QUAD]'C' \{ .CENTER \} +. if '\\*[$BIB_STRING_QUAD]'C' \{ .CENTER \} . if '\\*[$BIB_STRING_QUAD]'CENTER' \{ .CENTER \} . if '\\*[$BIB_STRING_QUAD]'CENTRE' \{ .CENTER \} . if '\\*[$BIB_STRING_QUAD]'R' \{ .RIGHT \} . if '\\*[$BIB_STRING_QUAD]'RIGHT' \{ .RIGHT \} . EOL . if \\n[#BIB_STRING_CAPS] \{ .CAPS \} -. ie \\n[#BIB_STRING_UNDERSCORE] \{\ -. ie \\n[#BIB_STRING_UNDERSCORE]=2 \{\ -. UNDERSCORE2 "\\*[$BIB_STRING] +. ie \\n[#BIB_STRING_UNDERLINE] \{\ +. nr #FROM_BIB_STRING 1 +. ie \\n[#BIB_STRING_UNDERLINE]=2 \{\ +. UNDERSCORE2 "\\*[$BIB_STRING]" . \} . el \{\ -. UNDERSCORE "\\*[$BIB_STRING] +. UNDERSCORE "\\*[$BIB_STRING]" . \} +. rr #FROM_BIB_STRING . \} . el \{\ -. PRINT "\\*[$BIB_STRING] +. PRINT "\\*[$BIB_STRING]" . \} . \} . CAPS OFF @@ -12852,8 +15005,8 @@ Arguments, Function and Notes. \# \# Strings to allocate space for leaders and entry page numbers \# -.ds $TOC_PN \\*[ST100]\\F[\\*[$TOC_PN_FAM]]\\f[\\*[$TOC_PN_FT]]\\s[\\n[#TOC_PS]u]#\\*[ST100X]\\*[ST101]\\s[\\*[$TOC_PN_SIZE_CHANGE]]\\|\\h'\\w'0'u*\\n[#TOC_PN_PADDING]u'\*[ST101X] -.ds $TOC_PN_TYPEWRITE \\*[ST100]#\\*[ST100X]\\*[ST101]\\|\\h'\\w'0'u*\\n[#TOC_PN_PADDING]u'\\*[ST101X] +.ds $TOC_PN \\*[ST100]\\F[\\*[$TOC_PN_FAM]]\\f[\\*[$TOC_PN_FT]]\\s[\\n[#TOC_PS]u]^\\*[ST100X]\\*[ST101]\\s[\\*[$TOC_PN_SIZE_CHANGE]]\\|\\h'\\w'0'u*\\n[#TOC_PN_PADDING]u'\*[ST101X] +.ds $TOC_PN_TYPEWRITE \\*[ST100]^\\*[ST100X]\\*[ST101]\\|\\h'\\w'0'u*\\n[#TOC_PN_PADDING]u'\\*[ST101X] \# \# TOC ENTRIES PAGE NUMBERS PADDING \# -------------------------------- @@ -12899,7 +15052,7 @@ Arguments, Function and Notes. \# See notes for ENDNOTE_PT_SIZE for explanation. No unit of \# measure required. \# -\# No unit of measure required (points assumed). Default is 11.5 +\# No unit of measure required (points assumed). Default is 12.5 \# for TYPESET. \# .MAC TOC_PT_SIZE END @@ -12954,7 +15107,7 @@ Arguments, Function and Notes. \# Creates or modifies string $TOC_PN_STYLE \# *Notes: \# Page numbering style for page numbers that appear in the -\# headers/footers of toc pages. See notes for PAGENUM_STYLE. +\# headers/footers of toc pages. See notes for PAGENUM_STYLE. \# \# Default is roman. \# @@ -12995,7 +15148,7 @@ Arguments, Function and Notes. \# \# - for TOC entries page number numerals \# -\# Control macros for toc doc titles, heads, subheads and paraheads +\# Control macros for toc doc titles, heads, subheads and paraheads \# ---------------------------------------------------------------- \# \# All these control macros behave the same way, setting the family, @@ -13004,7 +15157,7 @@ Arguments, Function and Notes. \# operate is identical to all other _FAMILY, _FONT and _SIZE \# control macros. _INDENT takes an absolute value. \# TOC_APPENDS_AUTHORS is unique in this section. -\# +\# \# - for title entries \# .MAC TOC_TITLE_INDENT END @@ -13155,12 +15308,14 @@ Arguments, Function and Notes. . FT \\*[$TOC_TITLE_FT] . PT_SIZE \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE_CHANGE] . \} +. PAD_MARKER ^ . ie \\n[#PRINT_STYLE]=1 \{\ -. PAD "\\*[$FIRST_DOC_TITLE]\\*[$TOC_PN_TYPEWRITE]" +. PAD "\\*[$FIRST_DOC_TITLE]\\*[$TOC_PN_TYPEWRITE]" . \} . el \{\ . PAD "\\h'\\n[#TOC_TITLE_INDENT]u'\\*[$FIRST_DOC_TITLE]\\*[$TOC_PN]" . \} +. PAD_MARKER # . EOL . ST 100 L . ST 101 R @@ -13274,6 +15429,14 @@ Arguments, Function and Notes. . ds $LAST_CHAR \\$1 . substring $LAST_CHAR -1 . if !\B'\\*[$LAST_CHAR]' \{\ +. if !'\\$1'ROMAN' \{\ +. LIST OFF +. return +. \} +. if !'\\$1'roman' \{\ +. LIST OFF +. return +. \} . tm1 "[mom]: You must append a number to the \\$1 argument to LIST at line \\n(.c. . tm1 " The number should be the total number of items in this list. . tm1 " See the documentation. @@ -13424,7 +15587,7 @@ Arguments, Function and Notes. . el \{\ . QUIT_LISTS . return -. \} +. \} . \} . el \{\ . SET_LIST_INDENT @@ -13446,7 +15609,7 @@ Arguments, Function and Notes. . if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'other' \{\ . nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$ENUMERATOR\\n[#DEPTH]]\0' . \} -. LL \\n[#CURRENT_L_LENGTH]u +. ll \\n[#CURRENT_L_LENGTH]u . ie \\n[#DEPTH]=1 \{\ . ie \\n[#INDENT_ACTIVE]=1 \{\ . if \\n[#INDENT_LEFT_ACTIVE]=1 \{\ @@ -13490,6 +15653,7 @@ Arguments, Function and Notes. \# receive the text of an item. \# .MAC ITEM END +. if !r#DEPTH \{ .return \} . if \\n[#LINENUMBERS]=1 \{\ . NUMBER_LINES OFF . nr #LINENUMBERS 2 @@ -13498,7 +15662,7 @@ Arguments, Function and Notes. . nr #KERN_WAS_ON 1 . KERN OFF . \} -. IL +. IL . ll \\n[#CURRENT_L_LENGTH]u \" Set ll again because IL turns IB off. . TRAP OFF . HI \\n[#HL_INDENT\\n[#DEPTH]]u @@ -13570,22 +15734,20 @@ Arguments, Function and Notes. . \} . \} . \} -. \} -. el \{\ . if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'roman' \{\ . ie \\n[#PAD_LIST_DIGITS\\n[#DEPTH]]=1 \{\ .\" ROMAN I, padded . ie '\\g[#ENUMERATOR\\n[#DEPTH]]'I' \{\ . ie \\n[#SEP_TYPE]=1 \{\ -. PRINT "\h'\\n[#LIST_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\n[#SEPARATOR\\n[#DEPTH]]\ 'u'\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m' +. PRINT "\h'\\n[#HL_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]\0'u'\v'-.085m'\\*[$PREFIX\\n[#DEPTH]]\v'.085m'\\n[#ENUMERATOR\\n[#DEPTH]]\v'-.085m'\\*[$SEPARATOR\\n[#DEPTH]]\v'.085m' . \} . el \{\ -. PRINT "\h'\\n[#LIST_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\n[#SEPARATOR\\n[#DEPTH]]\ 'u'\\*[$PREFIX\\n[#DEPTH]]\\n[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]] +. PRINT "\h'\\n[#HL_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]\0'u'\\*[$PREFIX\\n[#DEPTH]]\\n[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]] . \} . \} .\" roman i, padded . el \{\ -. PRINT "\h'\\n[#LIST_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\n[#SEPARATOR\\n[#DEPTH]]\ 'u'\\*[$PREFIX\\n[#DEPTH]]\\n[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]] +. PRINT "\h'\\n[#HL_INDENT\\n[#DEPTH]]u'\h'-\w'\\*[$PREFIX\\n[#DEPTH]]\\n+[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]\0'u'\\*[$PREFIX\\n[#DEPTH]]\\n[#ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]] . \} . \} .\" No pad @@ -13808,15 +15970,8 @@ Arguments, Function and Notes. \# Requires a unit of measure. \# .MAC SHIFT_LIST END -. ie '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'roman' \{\ . nr #SHIFT_LIST\\n[#DEPTH] (\\$1) -. nr #LIST_INDENT\\n[#DEPTH] \\n(.i+\\n[#L_INDENT]+\\n[#SHIFT_LIST\\n[#DEPTH]] -. nr #L_INDENT \\n[#LIST_INDENT\\n[#DEPTH]] -. \} -. el \{\ -. nr #LIST_INDENT\\n[#DEPTH] \\n[#L_INDENT]+(\\$1) -. nr #L_INDENT \\n[#LIST_INDENT\\n[#DEPTH]] -. \} +. nr #L_INDENT +\\n[#SHIFT_LIST\\n[#DEPTH]] .END \# \# @@ -13878,21 +16033,21 @@ Arguments, Function and Notes. . if \\n[#RESTORE_PREV_INDENT]=2 \{\ . nr #BL_INDENT \\n[#STORED_BL_INDENT] . nr #BR_INDENT \\n[#STORED_BR_INDENT] -. LL \\n[#ORIG_L_LENGTH]u +. ll \\n[#ORIG_L_LENGTH]u . IB . rr #STORED_BL_INDENT . rr #STORED_BR_INDENT . \} . if \\n[#RESTORE_PREV_INDENT]=3 \{\ . nr #R_INDENT \\n[#STORED_R_INDENT] -. LL \\n[#ORIG_L_LENGTH]u +. ll \\n[#ORIG_L_LENGTH]u . IR . rr #STORED_R_INDENT . \} . if \\n[#RESTORE_PREV_INDENT]=4 \{\ . nr #R_INDENT \\n[#STORED_R_INDENT] . nr #L_INDENT \\n[#STORED_L_INDENT] -. LL \\n[#ORIG_L_LENGTH]u +. ll \\n[#ORIG_L_LENGTH]u . IR . IL . rr #STORED_R_INDENT @@ -13904,7 +16059,7 @@ Arguments, Function and Notes. . rr #LIST_INDENT\\n[#REMOVE] . rr #ENUMERATOR\\n[#REMOVE] . rm $ENUMERATOR\\n[#REMOVE] -. rr #SEPARATOR\\n[#REMOVE] +. rm $SEPARATOR\\n[#REMOVE] . rm $ENUMERATOR_TYPE\\n[#REMOVE] . rr #PAD_LIST_DIGITS\\n[#REMOVE] .\} @@ -13934,7 +16089,7 @@ Arguments, Function and Notes. . nr #QUIT 1 . return . \} -. nr #L_INDENT -\\n[#LIST_INDENT\\n[#DEPTH]] +. nr #L_INDENT -\\n[#LIST_INDENT\\n[#DEPTH]]+\\n[#SHIFT_LIST\\n[#DEPTH]] . nr #HL_INDENT \\n[#HL_INDENT\\n-[#DEPTH]] .END \# @@ -13959,9 +16114,13 @@ Arguments, Function and Notes. \# macros that alter mom's behaviour). \# .MAC COLLATE END +. if ( (\\n[.t]-1) <= \\n[.v] ) \{ .nr #NO_BREAK 1 \} +. ds $SAVED_PP_FT \\*[$PP_FT] . nr #COLLATE 1 +. nr #PRE_COLLATE 1 . nr #HEADER_STATE \\n[#HEADERS_ON] . HEADERS OFF +. if \\n[#DOC_HEADER]=2 \{ .nr #DOC_HEADER 1 \} . if \\n[#PAGE_NUM_V_POS]=1 \{\ . nr #PAGINATION_STATE \\n[#PAGINATE] . PAGINATION OFF @@ -14018,8 +16177,18 @@ Arguments, Function and Notes. . PAGENUM_STYLE \\*[$RESTORE_PAGENUM_STYLE] . rm $RESTORE_PAGENUM_STYLE . \} +. if \\n[#CH_NUM] \{ .nr #CH_NUM +1 \} . rm $EN_TITLE +. COVERTITLE +. DOCCOVERTITLE +. MISC +. TITLE +. SUBTITLE +. CHAPTER +. CHAPTER_TITLE . rr #PAGENUM_STYLE_SET +. rr #DOC_COVER +. rr #COVER .END \# \# @@ -14059,21 +16228,60 @@ Arguments, Function and Notes. .\" In other words, the first arg was not a digit. . rr #LN . ie '\\$1'RESUME' \{\ +. LN_PARAMS . nm +0 +. fam +. ft +. ps +. gcolor . \} . el \{\ +. LN_PARAMS . nm +. fam +. ft +. ps +. gcolor . if !\\n[#LINENUMBERS]=2 \{ .rr #LINENUMBERS \} . \} . \} . el \{\ +. LN_PARAMS . nm \\*[$LN_NUM] \\*[$LN_INC] \\*[$LN_GUTTER] -3-\\*[$LN_GUTTER] +. fam +. ft +. ps +. gcolor . if !'\\n(.z'' \{ .nr #DIVER_LN_OFF 1 \} . \} . rr #LN .END \# \# +\# LINENUMBER STYLE PARAMETERS +\# --------------------------- +\# *Arguments: +\# none +\# *Function: +\# Checks if any line numbering parameters have been set, and +\# passes the args, if any, to the appropriate request. If a linenumber +\# parameter is missing, passes the current value of the register +\# associated with the request to the request. (Ensures that the +\# same requests, called in NUMBER_LINES to reset the registers +\# to their former values, stay at those values.) +\# +.MAC LN_PARAMS END +. ie d$LN_FAM \{ .fam \\*[$LN_FAM] \} +. el \{ .fam \\n[.fam] \} +. ie d$LN_FT \{ .ft \\*[$LN_FT] \} +. el \{ .ft \\n[.sty] \} +. ie d$LN_SIZE_CHANGE \{ .ps \\*[$LN_SIZE_CHANGE] \} +. el \{ .ps \\n[.s] \} +. ie d$LN_COLOR \{ .gcolor \\*[$LN_COLOR] \} +. el \{ .gcolor \\n[.m] \} +.END +\# +\# \# NUMBER QUOTE AND BLOCKQUOTE LINES AS PART OF RUNNING TEXT \# --------------------------------------------------------- \# *Argument: @@ -14125,7 +16333,7 @@ Arguments, Function and Notes. \# OUTPUT BLANK PAGES \# ------------------ \# *Argument: -\# +\# [ NULL ] \# *Function: \# Outputs blank pages. \# *Notes: @@ -14166,6 +16374,10 @@ Arguments, Function and Notes. . if \\n[#PAGE_NUM_V_POS]=2 \{\ . if \\n[#PAGINATE_WAS_ON] \{ .PAGINATE \} . \} +. if \\n[#PAGINATE]=1 \{\ +. if '\\$2'NULL' \{ .nr #PAGE_NUM_ADJ -\\n[#HOW_MANY] \} +. \} +. rr #HOW_MANY . rr #HEADERS_WERE_ON . rr #FOOTERS_WERE_ON . rr #PAGINATE_WAS_ON @@ -14207,7 +16419,7 @@ Arguments, Function and Notes. . .\} . nr #LINES_PER_PAGE -1 -.\" Add machine units, 1 at a time, increasing the leading until the +.\" Add machine units, 1 at a time, increasing the leading until the .\" new leading fills the page properly . while \\n[#T_MARGIN]+(\\n[#DOC_LEAD]+\\n+[#DOC_LEAD_ADJ]*\\n[#LINES_PER_PAGE])<\\n[#DEPTH_TO_B_MARGIN] \{\ . @@ -14243,7 +16455,7 @@ Arguments, Function and Notes. . nr #SPACE_REMAINING 0 . nr #FN_DEPTH 0 . nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]u -. wh 20i FOOTER +. wh \\n(.pu FOOTER . wh -(\\n[#FN_OVERFLOW_TRAP_POS]u) FN_OVERFLOW_TRAP . ch FOOTER -\\n[#B_MARGIN]u . \} @@ -14815,6 +17027,7 @@ Arguments, Function and Notes. .ALIAS HDRFTR_LEFT_FAMILY _FAMILY .ALIAS HDRFTR_RIGHT_FAMILY _FAMILY .ALIAS HEAD_FAMILY _FAMILY +.ALIAS LINENUMBER_FAMILY _FAMILY .ALIAS PAGENUM_FAMILY _FAMILY .ALIAS PARAHEAD_FAMILY _FAMILY .ALIAS QUOTE_FAMILY _FAMILY @@ -14859,6 +17072,7 @@ Arguments, Function and Notes. .ALIAS HDRFTR_LEFT_FONT _FONT .ALIAS HDRFTR_RIGHT_FONT _FONT .ALIAS HEAD_FONT _FONT +.ALIAS LINENUMBER_FONT _FONT .ALIAS PAGENUM_FONT _FONT .ALIAS PARAHEAD_FONT _FONT .ALIAS QUOTE_FONT _FONT @@ -14900,6 +17114,7 @@ Arguments, Function and Notes. .ALIAS HDRFTR_RIGHT_SIZE _SIZE .ALIAS HDRFTR_SIZE _SIZE .ALIAS HEAD_SIZE _SIZE +.ALIAS LINENUMBER_SIZE _SIZE .ALIAS PAGENUM_SIZE _SIZE .ALIAS PARAHEAD_SIZE _SIZE .ALIAS QUOTE_SIZE _SIZE @@ -14947,6 +17162,7 @@ Arguments, Function and Notes. .ALIAS HDRFTR_RULE_COLOR _COLOR .ALIAS HEAD_COLOR _COLOR .ALIAS LINEBREAK_COLOR _COLOR +.ALIAS LINENUMBER_COLOR _COLOR .ALIAS PAGENUM_COLOR _COLOR .ALIAS PARAHEAD_COLOR _COLOR .ALIAS QUOTE_COLOR _COLOR @@ -14974,7 +17190,7 @@ Arguments, Function and Notes. \# Support aliases \# .ALIAS COL_BREAK COL_NEXT -.ALIAS DOC_COVER_ADVANCE COVER_ADVANCE +.ALIAS DOC_COVER_ADVANCE COVER_ADVANCE .ALIAS DOC_COVER COVER .ALIAS DOC_COVERS COVERS .ALIAS DOC_COVER_LEAD COVER_LEAD @@ -14995,8 +17211,10 @@ Arguments, Function and Notes. \# EOL is the "old" EL, for the personal use of om.tmac \# .MAC EOL END +. TRAP OFF . br . sp -1v +. TRAP .END \# \# REFER SUPPORT @@ -15047,17 +17265,17 @@ Arguments, Function and Notes. . \} . \} . el \{\ -. ie \\n[#REF]=1 \{\ -. if \\n[#FN_REF]=1 \{ .FOOTNOTE OFF \} -. if \\n[#EN_REF]=1 \{ .ENDNOTE OFF \} -. rr #REF -. \} -. el \{\ -. rr #REF_WARNING -. nr #REF 1 -. if \\n[#FN_REF]=1 \{ .FOOTNOTE \\$1 \\$2 \\$3 \} -. if \\n[#EN_REF]=1 \{ .ENDNOTE \} -. \} +. ie \\n[#REF]=1 \{\ +. if \\n[#FN_REF]=1 \{ .FOOTNOTE OFF \} +. if \\n[#EN_REF]=1 \{ .ENDNOTE OFF \} +. rr #REF +. \} +. el \{\ +. rr #REF_WARNING +. nr #REF 1 +. if \\n[#FN_REF]=1 \{ .FOOTNOTE \\$1 \\$2 \\$3 \} +. if \\n[#EN_REF]=1 \{ .ENDNOTE \} +. \} . \} .END \# @@ -15114,32 +17332,30 @@ Arguments, Function and Notes. \# *Argument: \# | \# *Function: -\# Sets register #REF_HYPHENATE +\# Sets register #REF_HY \# .MAC HYPHENATE_REFS END -. ie '\\$1'' \{ .nr #REF_HYPHENATE 1 \} +. ie '\\$1'' \{ .nr #REF_HY 1 \} . el \{\ . if r#REF_HY \{ .rr #REF_HY \} . \} .END \# -.ig -The remainder of the definitions in this section are modified -versions of the definitions found in the refer module of s.tmac. -.. +\# The remainder of the definitions in this section are modified +\# versions of the definitions found in the refer module of s.tmac. \# \# This one is directly from s.tmac. +\# .de @error .tm \\n(.F:\\n(.c: macro error: \\$* .. \# -.ig -The following strings define the order of entries for different -types of references. Each letter in the string refers to a database -field (A for author, T1/T2 for article and book titles, etc). -Mom is set up for MLA-style bibliographies. Other styles can be -implemented here by re-ordering the fields. -.. +\# The following strings define the order of entries for different +\# types of references. Each letter in the string refers to a database +\# field (A for author, T1/T2 for article and book titles, etc). +\# Mom is set up for MLA-style bibliographies. Other styles can be +\# implemented here by re-ordering the fields. +\# \# Book - type 2 .ds ref*spec!2 Q A T1 d t l r E S e V a C I D P O \# Article within book - type 3 @@ -15249,21 +17465,20 @@ implemented here by re-ordering the fields. \# \# Build up the ref*string \# -.ig -Correct MLA "typewritten" style (printstyle TYPEWRITE) demands -two spaces after each period. The spaces are hardwired into the -string definitions (ref*add-), so we have to make sure that there -aren't two spaces when the printstyle is TYPESET. Since I find that -references look a bit crowded with 0 sentence space, I've bumped it -up to +4. User's sentence spacing is reset in FOOTNOTES and ENDNOTES. -.. +\# Correct MLA "typewritten" style (printstyle TYPEWRITE) demands +\# two spaces after each period. The spaces are hardwired into the +\# string definitions (ref*add-), so we have to make sure that there +\# aren't two spaces when the printstyle is TYPESET. Since I find that +\# references look a bit crowded with 0 sentence space, I've bumped it +\# up to +4. User's sentence spacing is reset in FOOTNOTES and ENDNOTES. \# .de ref*build .if \\n[#PRINT_STYLE]=2 \{\ . ds $RESTORE_SS_VAR \\*[$SS_VAR] . SS +4 .\} -.rm ref*string ref*post-punct +\#.rm ref*string ref*post-punct +.rm ref*string .nr ref*suppress-period 1 .while \\n[.$] \{\ . if d [\\$1 \{\ @@ -15286,15 +17501,13 @@ up to +4. User's sentence spacing is reset in FOOTNOTES and ENDNOTES. \# The following macros determine how entries are formatted WRT \# punctuation, type style, additional strings, etc. \# -.ig -o First argument is the database field letter. -o Second argument is the punctuation character to use to separate this - field from the previous field. -o Third argument is a string with which to prefix this field. -o Fourth argument is a string with which to postfix this field. -o Fifth argument is a string to add after the punctuation character - supplied by the next field. -.. +\# o First argument is the database field letter. +\# o Second argument is the punctuation character to use to separate this +\# field from the previous field. +\# o Third argument is a string with which to prefix this field. +\# o Fourth argument is a string with which to postfix this field. +\# o Fifth argument is a string to add after the punctuation character +\# supplied by the next field. \# \# %A Author(s) .de ref*add-A @@ -15547,15 +17760,23 @@ o Fifth argument is a string to add after the punctuation character \# .MAC MN_INIT END . if !'\\$1'rerun' \{\ -. ds $MN-arg1 \\$1 -. ds $MN-arg2 \\$2 -. ds $MN-arg3 \\$3 -. ds $MN-arg4 \\$4 -. ds $MN-arg5 \\$5 -. ds $MN-arg6 \\$6 -. ds $MN-arg7 \\$7 -. ds $MN-arg8 \\$8 -. ds $MN-arg9 \\$9 +. ds $MN-arg1 \\$1 +. ie '\\$2'' .ds $MN-arg2 @ +. el .ds $MN-arg2 \\$2 +. ie '\\$3'' .ds $MN-arg3 @ +. el .ds $MN-arg3 \\$3 +. ie '\\$4'' .ds $MN-arg4 @ +. el .ds $MN-arg4 \\$4 +. ie '\\$5'' .ds $MN-arg5 @ +. el .ds $MN-arg5 \\$5 +. ie '\\$6'' .ds $MN-arg6 @ +. el .ds $MN-arg6 \\$6 +. ie '\\$7'' .ds $MN-arg7 @ +. el .ds $MN-arg7 \\$7 +. ie '\\$8'' .ds $MN-arg8 @ +. el .ds $MN-arg8 \\$8 +. ie '\\$9'' .ds $MN-arg9 @ +. el .ds $MN-arg9 \\$9 . \} . ie \\n[#START_FOR_MNinit]=0 \{\ . nr #MNinit_DEFERRED 1 @@ -15580,10 +17801,8 @@ o Fifth argument is a string to add after the punctuation character . rr #OVERFLOW_RIGHT .END \# -.ig -The remainder of the margin notes macros and routines are adapted -from Werner Lemberg's MN.tmac. -.. +\# The remainder of the margin notes macros and routines are adapted +\# from Werner Lemberg's MN.tmac. \# \# MNinit \# ------ @@ -15633,7 +17852,6 @@ from Werner Lemberg's MN.tmac. . ab MN: Left margin too small for requested margin notes settings. . if (\\n[MN-left-width] < 1n) \ . ab MN: Left margin notes width too small (<1n). -. . ie \B'\\$2' \{\ . nr MN-right-width (n;\\$2) . nr MN-right-start (\\n[.o] + \\n[.l] + \\n[MN-sep]) @@ -15724,7 +17942,7 @@ from Werner Lemberg's MN.tmac. \# MN \# -- \# Usage: -\# +\# \# MN LEFT|RIGHT \# margin note text \# MN @@ -15735,9 +17953,15 @@ from Werner Lemberg's MN.tmac. \# .de MN .ds MN-dir \\$1 +.if !'\\$1'LEFT' \{\ +. if !'\\$1'RIGHT' \{\ +. MN_QUIT +. return +. \} +.\} .if \\n[#COLUMNS]=1 \{\ . if \\n[#NUM_COLS]>2 \{\ -. tm MN: More than two columns. Ignoring margin notes. +. tm [mom]: Macro MN: More than two columns. Ignoring margin notes. . return . \} . if !\\n[#NUM_COLS]=1 \{\ @@ -15746,12 +17970,12 @@ from Werner Lemberg's MN.tmac. . \} .\} . if !\\n[#MNinit]=1 \{\ -. tm MN: You must set parameters with MN_INIT before using MN. +. tm [mom]: Macro MN: You must set parameters with MN_INIT before using MN. . ab Aborting . \} . ie !'\\$1'' \{\ . if \\n[MN-active] \{\ -. tm MN: Can't handle nested margin notes. +. tm [mom]: Macro MN: Can't handle nested margin notes. . return . \} . nr MN-active 1 @@ -15770,6 +17994,15 @@ from Werner Lemberg's MN.tmac. . di MN-div-\\*[MN-curr] . \} . el \{\ +. MN_QUIT +. \} +.. +\# +\# MN_QUIT +\# ------- +\# Utility macro to handle .MN OFF | QUIT | X etc +\# +.de MN_QUIT . if \\n[MN-active] \{\ . br . di @@ -15777,7 +18010,6 @@ from Werner Lemberg's MN.tmac. . ev . \} . nr MN-active 0 -. \} .. \# \# MNtop @@ -15787,6 +18019,8 @@ from Werner Lemberg's MN.tmac. . nr MN-left 0 . nr MN-right 0 . nr MN-active 0 +. rr MN-shifted +. ch FOOTER -\\n[#B_MARGIN]u .. \# \# MNbottom-left @@ -15801,7 +18035,7 @@ from Werner Lemberg's MN.tmac. . mk MN-curr-pos . if \\n[MN-active] \{\ . di -. tm MN: Margin note finished by new page. Ignored. +. tm [mom]: Macro MN: Margin note finished by new page. Ignored. . \} . po \\n[MN-left-start]u . ev MNbottom-left-env @@ -15814,24 +18048,32 @@ from Werner Lemberg's MN.tmac. . nr MN-shifted 1 . sp 1v . SHIM -. if \\n[#SHIM]u>\\n[MN-spacing] .sp -(1v+\\n[MN-lead-adj]u) -. tm MN: Warning: Left margin note #\\n[MN-curr] on page \\n[#P] shifted down. +. if \\n[#SHIM]>\\n[MN-spacing] .sp -(1v+\\n[MN-lead-adj]u) +. tm [mom]: Macro MN: Warning: Left margin note #\\n[MN-curr] on page \\n[#P] shifted down. . \} .\" If last margin note doesn't fit -. if ( (\\n(nl+\\n[MN-div-l-\\n[MN-curr]-depth]) > (\\n(.p+\\n[#VARIABLE_FOOTER_POS]) ) \{\ +. if ( (\\n(nl+\\n[MN-div-l-\\n[MN-curr]-depth]) > (\\n(.p+\\n[#VARIABLE_FOOTER_POS]-1) ) \{\ . if \\n[MN-shifted]=1 \{\ . sp -(1v+\\n[#SHIM]u) . rm MN-div-l-\\n[MN-curr] -. tm1 "[mom]: No room to start left margin note #\\n[MN-curr] on page \\n[#P] on page \\n[#P]. +. tm1 "[mom]: No room to start left margin note #\\n[MN-curr] on page \\n[#P]. . tm1 " Ignoring margin note. . rr MN-shifted . \} . nr #no-repeat-MN-left 1 . nr #OVERFLOW_LEFT 1 -. wh \\n[.p]u+\\n[#VARIABLE_FOOTER_POS]u-1u MN_OVERFLOW_TRAP +. ie \\n[#FN_COUNT]=0 \{\ +. ch FOOTER \\n(.pu +. wh \\n[#VARIABLE_FOOTER_POS]u+\\n[MN-lead-adj]u+1u MN_OVERFLOW_TRAP +. \} +. el \{\ +. wh \\n[.p]u+\\n[#VARIABLE_FOOTER_POS]u-1u MN_OVERFLOW_TRAP +. \} . vpt 1 . \} +. nf . MN-div-l-\\n[MN-curr] +. fi . br . nr MN-last-pos \\n[nl] .\} @@ -15862,10 +18104,11 @@ from Werner Lemberg's MN.tmac. . nr MN-shifted 1 . sp 1v . SHIM -. tm MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down. +. if \\n[#SHIM]>\\n[MN-spacing] .sp -(1v+\\n[MN-lead-adj]u) +. tm [mom]: Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down. . \} .\" If last margin note doesn't fit -. if ( (\\n(nl+\\n[MN-div-r-\\n[MN-curr]-depth]) > (\\n(.p+\\n[#VARIABLE_FOOTER_POS]) ) \{\ +. if ( (\\n(nl+\\n[MN-div-r-\\n[MN-curr]-depth]) > (\\n(.p+\\n[#VARIABLE_FOOTER_POS]-1) ) \{\ . if \\n[MN-shifted]=1 \{\ . sp -(1v+\\n[#SHIM]u) . rm MN-div-r-\\n[MN-curr] @@ -15875,15 +18118,24 @@ from Werner Lemberg's MN.tmac. . \} . nr #no-repeat-MN-right 1 . nr #OVERFLOW_RIGHT 1 -. wh \\n[.p]u+\\n[#VARIABLE_FOOTER_POS]u-1u MN_OVERFLOW_TRAP +. ie \\n[#FN_COUNT]=0 \{\ +. ch FOOTER \\n(.pu +. wh \\n[#VARIABLE_FOOTER_POS]u+\\n[MN-lead-adj]u+1u MN_OVERFLOW_TRAP +. \} +. el \{\ +. wh \\n[.p]u+\\n[#VARIABLE_FOOTER_POS]u-1u MN_OVERFLOW_TRAP +. \} . vpt 1 . \} +. nf . MN-div-r-\\n[MN-curr] +. fi . br . nr MN-last-pos \\n[nl] .\} . ev . po -' sp |\\n[MN-curr-pos]u . if !\\n[#no-repeat-MN-right]=1 .vpt 1 .. +\# +\# vim: ft=groff: diff --git a/contrib/groff/contrib/pdfmark/cover.ms b/contrib/groff/contrib/pdfmark/cover.ms index 1fe7e542c4..e806afb5cc 100644 --- a/contrib/groff/contrib/pdfmark/cover.ms +++ b/contrib/groff/contrib/pdfmark/cover.ms @@ -1,3 +1,10 @@ +.\" Copyright 2004, 2009 +.\" Free Software Foundation, Inc. +.\" +.\" Copying and distribution of this file, with or without modification, +.\" are permitted in any medium without royalty provided the copyright +.\" notice and this notice are preserved. +.\" .de CS .if !rCO .nr CO 0 .if !rTL .nr TL 0 diff --git a/contrib/groff/contrib/pdfmark/pdfmark.ms b/contrib/groff/contrib/pdfmark/pdfmark.ms index 0e9f0747fa..9e5e4e75b0 100644 --- a/contrib/groff/contrib/pdfmark/pdfmark.ms +++ b/contrib/groff/contrib/pdfmark/pdfmark.ms @@ -1,4 +1,29 @@ .\" vim: ft=groff +.ig +pdfmark.ms + +File position: /contrib/pdfmark/pdfmark.ms + +This file is part of groff, the GNU roff type-setting system. + +Copyright (C) 2004, 2005, 2006, 2009 Free Software Foundation, Inc. +written by Keith Marshall + +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Front-Cover Texts, no Back-Cover Texts, and the following Invariant +Sections:-- + + a) This "Legal Matters" section, extending from the start of + the document, to the end of the enclosing ".ig" section. + + b) The two lines below starting with `.AU' and `.AI'. + +A copy of the Free Documentation License is included as a file called +FDL in the main directory of the groff source package. +.. +. .CS Portable Document Format Publishing with GNU Troff @@ -150,7 +175,7 @@ possible to exploit these PDF features, which are described in the Adobe\*(rg .\" preceding it with "--", to avoid "invalid character in name" type .\" error messages from groff (caused by the use of "\~"). .\" -.pdfhref W -D http://partners.adobe.com/asn/acrobat/docs/pdfmark.pdf \ +.pdfhref W -D http://partners.adobe.com/public/developer/en/acrobat/sdk/pdf/pdf_creation_apis_and_specs/pdfmarkReference.pdf \ -P \(lq -A \(rq\\$1 -- pdfmark\~Reference\~Manual .. .pdfmark-manual , @@ -1397,7 +1422,7 @@ even if they would otherwise be interpreted as such. It is also useful when the argument list to .CW pdfhref contains special characters \(em any special character, -which is not legal in a +which is not valid in a .CW groff macro name, will cause a parsing error, if .CW pdfhref @@ -2397,7 +2422,7 @@ Caution is required, however, when explicitly flushing the subsequently extended, then the first outline entry after flushing .EM must be specified at level 1. -Nevertheless, such explict flushing may occasionally be necessary; +Nevertheless, such explicit flushing may occasionally be necessary; for example, the .CW TC macro in the diff --git a/contrib/groff/contrib/pdfmark/pdfmark.tmac b/contrib/groff/contrib/pdfmark/pdfmark.tmac index 385185c42a..b777063c66 100644 --- a/contrib/groff/contrib/pdfmark/pdfmark.tmac +++ b/contrib/groff/contrib/pdfmark/pdfmark.tmac @@ -3,7 +3,7 @@ pdfmark.tmac -Copyright (C) 2004 +Copyright (C) 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. Written by Keith Marshall (keith.d.marshall@ntlworld.com) @@ -11,17 +11,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. +You should have received a copy of the GNU General Public License +along with this program. If not, see . Author's Note ============= @@ -43,7 +42,7 @@ inspiration has come from discussion on the groff mailing list .if d pdfmark .nx .\" .\" ====================================================================== -.\" Module PDFMARK: Insert Arbitrary PDFMARK Code in the PostScript Stream +.\" Module PDFMARK: Insert Arbitrary PDFMARK Code in the Postscript Stream .\" ====================================================================== .\" .\" PDFMARK output may be disabled, by zeroing the PDFOPMODE register, @@ -56,8 +55,31 @@ inspiration has come from discussion on the groff mailing list .\" .if !rPDFOPMODE .nr PDFOPMODE 1 .\" +.\" PDFMARK output must be constrained to a maximum line length limit, +.\" for strict compliance with the Postscript DSC. This limit is defined +.\" in register "PDFMARK.FOLDWIDTH.MAX". This is user definable, up to a +.\" ceiling value of 255, which is also its default value; this limit +.\" is enforced for each PDFMARK, by macro "pdf*pdfmark.limit". +.\" +.de pdf*pdfmark.limit +.\" ---------------------------------------------------------------- +.\" Usage: +.\" .pdf*pdfmark.limit REGISTER-NAME DEFAULT-MAXIMUM-VALUE +.\" ---------------------------------------------------------------- +.\" +.\" If a register named REGISTER-NAME has not been defined, then +.\" define it now, with default value = DEFAULT-MAXIMUM-VALUE. +.\" +.if !r\\$1 .nr \\$1 \\$2 +.\" +.\" But when it has already been defined, ensure that its value does +.\" not exceed DEFAULT-MAXIMUM-VALUE; if value does exceed this ceiling, +.\" then redefine it, to enforce the limit. +.\" +.if (\\n[\\$1] > \\$2) .nr \\$1 \\$2 +.. .\" The "pdfmark" macro is responsible for emitting the appropriate -.\" PostScript code. +.\" Postscript code. .\" .de pdfmark .\" ---------------------------------------------------------------- @@ -67,7 +89,365 @@ inspiration has come from discussion on the groff mailing list .\" operator; DO NOT include them in the instruction text! .\" ---------------------------------------------------------------- .\" -.if \\n[PDFOPMODE] \X'ps:exec [\\$* pdfmark'\c +.if \\n[PDFOPMODE] \{\ +.\" +.\" Strict DSC compliance forbids emission of ps:exec lines which +.\" exceed 255 characters in length. We will allow the user to specify +.\" an alternative lesser limit ... +.\" +. pdf*pdfmark.limit PDFMARK.FOLDWIDTH.MAX 255 +.\" +.\" ... and we will also support a second lesser limit, which will be +.\" applied to literal text parenthetically embedded within the PDFMARK. +.\" +. pdf*pdfmark.limit PDFMARK.FOLDWIDTH \\n[PDFMARK.FOLDWIDTH.MAX] +.\" +.\" We will push out the entire PDFMARK in one chunk, provided it fits +.\" within this limit. +.\" +. length pdf:length "[\\$* pdfmark\" +. ie !(\\n[pdf:length] > \\n[PDFMARK.FOLDWIDTH]) \{\ +. \" +. \" This PDFMARK is suitable for single chunk output ... +. \" +. nop \X'ps:exec [\\$* pdfmark'\c +. \} +. el \{\ +. \" ... but, when the limit would be violated, then we must +. \" recompose the specified PDFMARK, spreading it over as many +. \" continuation lines as are necessary. +. \" +. als pdf*compose pdf*compose.first +. while \\n(.$ \{\ +. pdf*compose \\$1 +. shift +. \} +. \" +. \" Complete the PDFMARK recomposition, by appending a +. \" "pdfmark" operator, and push it out to the intermediate +. \" output stream, (excluding its final line break). +. \" +. pdf*compose pdfmark +. pdf*pdfmark.dispatch +. chop pdf:composed +. nop \Y[pdf:composed]\c +. \" +. \" And clean up when done. +. \" +. rm pdf*compose pdf*pdfmark.post +. rm pdf:compose.test pdf:composed pdf:composed.literal +. \} +. rr pdf:length +. \} +.. +.\" When a PDFMARK exceeds the specified output record length limit, +.\" then we decompose it, subsequently using the dynamically overloaded +.\" macro, "pdf*compose", to reassemble it into as many continuation +.\" records as it may require. +.\" +.\" Each call to "pdf*compose" uses macro "pdf*length.increment" to +.\" keep track of the current output record length, so ensuring that +.\" the active maximum length limit is not violated. +.\" +.de pdf*length.increment +.\" ---------------------------------------------------------------- +.\" Usage: +.\" .pdf*length.increment NEXT-ADDITION +.\" ---------------------------------------------------------------- +.\" +.ie d pdf:composed.line \ +. length pdf:length "\\*[pdf:composed.line] \\$*\" +.el .length pdf:length "\\$*\" +.. +.\" The first call to "pdf*compose" for each PDFMARK is directed +.\" to "pdf*compose.first"; this initialises the local strings +.\" and macros used to compose the eventual PDFMARK output. +.\" +.de pdf*compose.first +.\" ---------------------------------------------------------------- +.\" Usage: +.\" .als pdf*compose pdf*compose.first +.\" . pdf*compose TOKEN +.\" ---------------------------------------------------------------- +.\" +.\" Ensure that the output record accumulator will be initialised +.\" on posting of the first composed PDFMARK record. +.\" +.als pdf*pdfmark.post pdf*pdfmark.post.first +.\" +.\" The first token passed to "pdf*compose" should not be a +.\" literal, but be prepared to handle one, just in case. +.\" +.ds pdf:compose.test \\$1 +.substring pdf:compose.test 0 0 +.ie '('\\*[pdf:compose.test]' \{\ +.\" +.\" We found a literal, even though we didn't expect it; +.\" if it's a single element literal, we can just handle it +.\" as if it is a regular token anyway. +.\" +. ds pdf:compose.test "\\$\\n(.$\" +. substring pdf:compose.test -1 +. if !')'\\*[pdf:compose.test]' \{\ +. \" +. \" But when it is the first of a literal sequence, +. \" then we need to set up "pdf*compose" to handle it. +. \" +. ds pdf:composed.literal "[\\$*\" +. als pdf*compose pdf*compose.literal +. \} +. \} +.el .ds pdf:compose.test ) +.if ')'\\*[pdf:compose.test]' \{\ +.\" +.\" In the normal case, we start each new PDFMARK with a +.\" regular token; save it as the first in the composed output +.\" line sequence, and set up "pdf*compose" to collect +.\" the rest of the sequence. +.\" +. ds pdf:composed.line "[\\$*\" +. als pdf*compose pdf*compose.next +. \} +.. +.\" Subsequent calls to "pdf*compose", while collecting +.\" regular tokens, are then directed to "pdf*compose.next". +.\" +.de pdf*compose.next +.\" ---------------------------------------------------------------- +.\" Usage: +.\" .als pdf*compose pdf*compose.next +.\" . pdf*compose TOKEN +.\" ---------------------------------------------------------------- +.\" +.\" This first checks to ensure that the supplied token really is +.\" a regular token, and not the first element in a literal. +.\" +.ds pdf:compose.test \\$1 +.substring pdf:compose.test 0 0 +.ie '('\\*[pdf:compose.test]' \{\ +.\" +.\" The supplied token represents the first element of a literal, +.\" but it may be a single element literal, which we simply handle +.\" as a regular token anyway. +.\" +. ds pdf:compose.test "\\$\\n(.$\" +. substring pdf:compose.test -1 +. if !')'\\*[pdf:compose.test]' \{\ +. \" +. \" The supplied token is the first of a sequence of elements +. \" which collectively define a literal, so start collecting a +. \" composite literal token, and change the "pdf*compose" +. \" state, to collect and append the remaining elements. +. \" +. ds pdf:composed.literal "\\$*\" +. als pdf*compose pdf*compose.literal +. \} +. \} +.el .ds pdf:compose.test ) +.if ')'\\*[pdf:compose.test]' \{\ +.\" +.\" The supplied token IS a regular token; add it, but ensure that +.\" the active maximum record length limit is honoured. +.\" +. pdf*length.increment "\\$*\" +. ie (\\n[pdf:length] > \\n[PDFMARK.FOLDWIDTH.MAX]) \{\ +. \" +. \" Adding this token would cause the current PDFMARK record, in +. \" groff's intermediate output file, to overflow the active record +. \" length limit, so post the current record and start another. +. \" +. pdf*pdfmark.dispatch +. ds pdf:composed.line "\\$*\" +. \} +. el \{\ +. \" +. \" This token will fit in the current PDFMARK record, without +. \" violating the active length limit, so simply add it. +. \" +. ie d pdf:composed.line .as pdf:composed.line " \\$*\" +. el .ds pdf:composed.line "\\$*\" +. \} +. \} +.. +.\" While assembling a multiple token literal sequence into a single +.\" literal token, successive calls to "pdf*compose" are directed +.\" to "pdf*compose.literal". +.\" +.de pdf*compose.literal +.\" ---------------------------------------------------------------- +.\" Usage: +.\" .als pdf*compose pdf*compose.literal +.\" . pdf*compose TOKEN +.\" ---------------------------------------------------------------- +.\" +.\" First, check to ensure that the current token can be appended to +.\" the accumulated literal, without extending it beyond the maximum +.\" allowed literal token length. +.\" +.length pdf:length "\\*[pdf:composed.literal] \\$*\" +.ie (\\n[pdf:length] > (\\n[PDFMARK.FOLDWIDTH] - 2)) \{\ +.\" +.\" If it has grown too long, then it must be folded across two +.\" physical PDFMARK output records, so check if we can accommodate +.\" the portion collected so far within the current output record. +.\" +. pdf*length.increment "\\*[pdf:composed.literal]\" +. if (\\n[pdf:length] > (\\n[PDFMARK.FOLDWIDTH.MAX] - 2)) \{\ +. \" +. \" The current output record CAN'T accommodate the currently +. \" composed portion of the literal, so flush out the current +. \" record, to make way for the accumulated literal, and mark +. \" the dispatch mode as "wrapped", for the fragments of the +. \" folded literal string, which are to follow. +. \" +. pdf*pdfmark.dispatch +. ds pdf*pdfmark.dispatch.wrapped +. \} +. ie d pdf:composed.line \{\ +. \" +. \" If we DIDN'T need to flush the current output record, +. \" then we can simply append the accumulated literal to it... +. \" +. as pdf:composed.line " \\*[pdf:composed.literal]\" +. \} +. el \{\ +. \" +. \" otherwise, when the current record has been flushed, or is +. \" empty, then we promote the accumulated literal, to make it +. \" the next output record... +. \" +. rn pdf:composed.literal pdf:composed.line +. \} +.\" +.\" Now, to complete the fold, flush out any accumulated partial +.\" output record, and continue accumulating the literal, starting +.\" with the current token. +.\" +. pdf*pdfmark.dispatch +. ds pdf:composed.literal "\\$*\" +. \} +.el \{\ +.\" +.\" Alternatively, when we HAVEN'T identified a need to fold the +.\" current output record, then we simply append the current token +.\" to the accumulated literal token buffer string. +.\" +. as pdf:composed.literal " \\$*\" +. \} +.\" +.\" Having ensured that we have sufficient space, in which to +.\" append the current token to the currently accumulated literal, +.\" we check its rightmost character, to see if is the closing +.\" parenthesis, which completes the literal. +.\" +.ds pdf:compose.test \\$\\n(.$ +.substring pdf:compose.test -1 +.if ')'\\*[pdf:compose.test]' \{\ +.\" +.\" The literal has been completely collected, so we may now append +.\" it to the current output record, as a single literal token, but +.\" subject to the constraint that it must not extend the output +.\" record beyond the maximum permitted length. +.\" +. pdf*length.increment "\\*[pdf:composed.literal]\" +. ie (\\n[pdf:length] > \\n[PDFMARK.FOLDWIDTH.MAX]) \{\ +. \" +. \" So, when the literal cannot be accommodated within the maximum +. \" length constraint, then we flush the current record, and start +. \" a new one, with the literal token as its first entry. +. \" +. pdf*pdfmark.dispatch +. rn pdf:composed.literal pdf:composed.line +. \} +. el \{\ +. \" +. \" When the literal CAN be accommodated within the maximum length +. \" constraint, then ... +. \" +. ie d pdf:composed.line \{\ +. \" +. \" When an output record has already been instantiated, we +. \" append the literal token to it, and discard the accumulator +. \" string, which is no longer required. +. \" +. as pdf:composed.line " \\*[pdf:composed.literal]\" +. rm pdf:composed.literal +. \} +. el \{\ +. \" +. \" But when no output record yet exists, then we simply +. \" reassign the accumulated literal token, to instantiate a +. \" new output record. +. \" +. rn pdf:composed.literal pdf:composed.line +. \} +. \} +.\" +.\" Finally, since we have completed the accumulation of the literal, we +.\" revert to the "unwrapped" mode of operation for "pdf*pdfmark.dispatch", +.\" and restore the normal "pdf*compose" action, for collection of the next +.\" token (if any). +.\" +. rm pdf*pdfmark.dispatch.wrapped +. als pdf*compose pdf*compose.next +. \} +.. +.\" While composing a multiple record PDFMARK, each composed record +.\" must be added to the collection, whenever the partially composed +.\" output record has been filled; this is handled when necessary, +.\" by calling the "pdf*pdfmark.dispatch" macro. +.\" +.de pdf*pdfmark.dispatch +.\" ---------------------------------------------------------------- +.\" Usage: +.\" .pdf*pdfmark.dispatch +.\" ---------------------------------------------------------------- +.\" +.if d pdf:composed.line \{\ +.\" +.\" This is simply a wrapper around the overloaded "pdf*pdfmark.post" +.\" macro, ensuring that an output record has actually been collected +.\" before attempting to post it; it then cleans up after posting, to +.\" ensure that each collected record is posted only once. +.\" +. if d pdf*pdfmark.dispatch.wrapped \{\ +. \" +. \" When dispatching an excessively long literal string, which +. \" must be wrapped over multiple records, this mode is active +. \" for all but the closing record; we must escape the newline +. \" at the end of each such unclosed literal record. +. \" +. as pdf:composed.line " \\\\\\\\\" +. \} +. pdf*pdfmark.post +. rm pdf:composed.line +. \} +.. +.\" For each PDFMARK, the first call of "pdf*pdfmark.post" is directed +.\" to the "pdf*pdfmark.post.first" macro; this initialises the state +.\" of the "pdf:composed" macro, for assembly of a new PDFMARK. +.\" +.de pdf*pdfmark.post.first +.de pdf:composed pdf*end +ps:exec \\*[pdf:composed.line] +.pdf*end +.\" +.\" Subsequent calls to "pdf*pdfmark.post" are redirected to the +.\" alternative "pdf*pdfmark.post.next" macro, which simply appends +.\" additional PDFMARK records to the "pdf:composed" macro. +.\" +.als pdf*pdfmark.post pdf*pdfmark.post.next +.. +.de pdf*pdfmark.post.next +.am pdf:composed pdf*end +\\*[pdf:composed.line] +.pdf*end +.. +.\" "pdf*end" is a dummy macro. It is required to mark the end +.\" of each individual fragment which is added to "pdf:composed"; +.\" other than this, it does nothing. +.\" +.de pdf*end .. .\" .\" Some supporting macros defer actual pdfmark output until an @@ -216,7 +596,7 @@ inspiration has come from discussion on the groff mailing list .ds pdf:bbox \\n[pdf:llx] u \\n[pdf:lly] u \\n[pdf:urx] u \\n[pdf:ury] u .\" .\" Getting line breaks into the text of a PDFNOTE is tricky -- we need -.\" to get a "\n" into the PostScript stream, but three levels of "\" are +.\" to get a "\n" into the Postscript stream, but three levels of "\" are .\" swallowed, when we invoke "pdfnote". The following definition of "PDFLB", .\" (for LineBreak), is rather ugly, but does allow us to use .\" @@ -294,41 +674,56 @@ inspiration has come from discussion on the groff mailing list .\" $3 = suffix for PDF internal bookmark name (optional) .\" ------------------------------------------------------------------ .\" -.if \\n[PDFOPMODE] \{\ +.ie '\\n(.z'' \{\ .\" -.\" Make the bookmark name "untagged" by default, -.\" then parse any specified options, to set a "tag", if required +.\" When we are at the top diversion level, i.e. actually emitting text +.\" to the output device stream, then we compute the location of, and +.\" plant this bookmark immediately. .\" -. ds pdf:href-T -. while dpdf:href.opt\\$1 \{\ -. pdf:href.opt\\$1 \\$@ -. shift \\n[pdf:href.argc] +. if \\n[PDFOPMODE] \{\ +. \" +. \" Make the bookmark name "untagged" by default, +. \" then parse any specified options, to set a "tag", if required +. \" +. ds pdf:href-T +. while dpdf:href.opt\\$1 \{\ +. pdf:href.opt\\$1 \\$@ +. shift \\n[pdf:href.argc] +. \} +. rr pdf:href.argc +. \" +. \" If we found "--" to mark the end of the options, discard it +. \" +. if '\\$1'--' .shift +. \" +. \" Synchronise the bookmark cache +. \" to the requested bookmark nesting level +. \" +. pdf:bm.sync \\$1 +. shift +. \" +. \" Increment the bookmark serialisation index +. \" in order to generate a uniquely serialised bookmark name, +. \" ( which we return in the string "PDFBOOKMARK.NAME" ), +. \" and insert this bookmark into the cache +. \" +. pdf:href.sety +. nr pdf:bm.nr +1 +. ds PDFBOOKMARK.NAME pdf:bm\\n[pdf:bm.nr]\\*[pdf:href-T] +. ds pdf:bm\\n[pdf:bm.nr] /Dest /\\*[PDFBOOKMARK.NAME] +. pdfmark \\*[pdf:bm\\n[pdf:bm.nr]] /View [\\*[PDFBOOKMARK.VIEW]] /DEST +. as pdf:bm\\n[pdf:bm.nr] " /Title (\\$*) +. pdf:href.options.clear +. rr PDFPAGE.Y . \} -. rr pdf:href.argc -.\" -.\" If we found "--" to mark the end of the options, discard it -.\" -. if '\\$1'--' .shift -.\" -.\" Synchronise the bookmark cache -.\" to the requested bookmark nesting level +. \} +.el \{\ .\" -. pdf:bm.sync \\$1 -. shift +.\" But when we are collecting a diversion which will be written out later, +.\" then we must defer bookmark placement, until we emit the diversion. +.\" (don't rely on $0 == pdfbookmark here; it may be a volatile alias). .\" -.\" Increment the bookmark serialisation index -.\" in order to generate a uniquely serialised bookmark name, -.\" ( which we return in the string "PDFBOOKMARK.NAME" ), -.\" and insert this bookmark into the cache -.\" -. pdf:href.sety -. nr pdf:bm.nr +1 -. ds PDFBOOKMARK.NAME pdf:bm\\n[pdf:bm.nr]\\*[pdf:href-T] -. ds pdf:bm\\n[pdf:bm.nr] /Dest /\\*[PDFBOOKMARK.NAME] -. pdfmark \\*[pdf:bm\\n[pdf:bm.nr]] /View [\\*[PDFBOOKMARK.VIEW]] /DEST -. as pdf:bm\\n[pdf:bm.nr] " /Title (\\$*) -. pdf:href.options.clear -. rr PDFPAGE.Y +. nop \!.pdfbookmark \\$@ . \} .. .\" @@ -1459,7 +1854,7 @@ inspiration has come from discussion on the groff mailing list .de pdf*href.mark.end .\" ---------------------------------------------------------------------- .\" ---------------------------------------------------------------------- -\O1|\h'-\w"|"u'\O2\c +\O1\Z'|'\O2\c .. .\" Macro "pdf*href-I" is used for one time initialisation of special .\" "pdfhref" features; (currently, only the above page trap hook is diff --git a/contrib/groff/contrib/pdfmark/pdfroff.man b/contrib/groff/contrib/pdfmark/pdfroff.man index 7d83cdd928..5b6904f462 100644 --- a/contrib/groff/contrib/pdfmark/pdfroff.man +++ b/contrib/groff/contrib/pdfmark/pdfroff.man @@ -7,15 +7,15 @@ pdfroff.1 File position: /contrib/pdfmark/pdfroff.man -Last update: +Last update: 5 Jan 2009 This file is part of groff, the GNU roff type-setting system. -Copyright (C) 2005 Free Software Foundation, Inc. +Copyright (C) 2005, 2006, 2007, 2009 Free Software Foundation, Inc. written by Keith Marshall Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Front-Cover Texts, no Back-Cover Texts, and the following Invariant Sections:-- @@ -29,113 +29,76 @@ Sections:-- A copy of the Free Documentation License is included as a file called FDL in the main directory of the groff source package. .. -.\" -------------------------------------------------------------------- . -.SH NAME -pdfroff \- create PDF documents using -.I groff +. +.\" -------------------------------------------------------------------- +.\" Local macro definitions . .hw pdfmark -.de Q -\&\\$3\*(lq\\$1\*(rq\\$2 -.. -.de nohy -.hy 0 +. +.de NH +. hy 0 \&\\$* -.hy +. hy .. +. +. +.\" -------------------------------------------------------------------- +. +.SH NAME +. +pdfroff \- create PDF documents using groff +. +. .\" -------------------------------------------------------------------- . .SH SYNOPSIS -.de cmd -. if r@i .in -. nr @i \\n(.i -. in +\w'\f[B]\\$1\0'u -. ti \\n(@iu -. B \\$1\0\c -.. -.de opt -. tr -\- -. RB [ -\\$1\c -. IR \&\\$2 ] -. tr -- -.. -.de opta -. ie \\n(.$>1 .opt \\$1 \0\\$2 -. el .opt \\$1 -.. -.de opte -. tr -\- -. RB [ -\\$1 =\c -. IR \&\\$2 ] -. tr -- -.. -.de optx -. tr -\- -. RB [ --no\\$1 \0|\0\c -. BR -\\$1 =\c -. IR \&\\$2 ] -. tr -- -.. -.ad l -.hy 0 -.ll -5 -.cmd pdfroff -.opt abcegilpstzCEGNRSUVXZ -.opta d cs -.opta f fam -.opta F dir -.opta I dir -.opta L arg -.opta m name -.opta M dir -.opta n num -.opta o list -.opta P arg -.opta r cn -.opta T dev -.opta w name -.opta W name -.opt -no-toc-relocation -.opte -stylesheet name -.optx -pdf-output name -.optx -reference-dictionary name -.opt -report-progress -.B file -.I ... -.ll -.sp -.cmd pdfroff -.B -h +. +.SY pdfroff +.OP \-abcegilpstzCEGNRSUVXZ +.OP \-d cs +.OP \-f fam +.OP \-F dir +.OP \-I dir +.OP \-L arg +.OP \-m name +.OP \-M dir +.OP \-n num +.OP \-o list +.OP \-P arg +.OP \-r cn +.OP \-T dev +.OP \-w name +.OP \-W name +.OP \-\-emit\-ps +.OP \-\-no\-toc\-relocation +.OP \-\-no-kill\-null\-pages +.OP \-\-stylesheet=\fIname\fP +.OP \-\-no\-pdf\-output +.OP \-\-pdf\-output=\fIname\fP +.OP \-\-no\-reference\-dictionary +.OP \-\-reference\-dictionary=\fIname\fP +.OP \-\-report\-progress +.OP \-\-keep\-temporary\-files +.I file .\|.\|. +. +.SY pdfroff +.B \-h | -.B --help -.sp -.cmd pdfroff -.B -v +.B \-\-help +. +.SY pdfroff +.B \-v | -.B --version -.RI [ option -.IR ... ] -.rr @i -.in -.ad -.hy -.P -The command line is parsed in accordance with normal GNU conventions, -but with one exception \(em when specifying any short form option -(i.e., a single character option introduced by a single hyphen), -and if that option expects an argument, then it -.I must -be specified independently (i.e., it may -.I not -be appended to any group of other single character short form options). -.P -Long form option names (i.e., those introduced by a double hyphen) -may be abbreviated to their minimum length unambigous initial substring. +.B \-\-version +.RI [ option\ .\|.\|. ] +.YS +. . .\" -------------------------------------------------------------------- . .SH DESCRIPTION +. .B pdfroff is a wrapper program for the GNU text processing system, .BR groff . @@ -148,17 +111,19 @@ such that tables of contents and body text are formatted separately, and are subsequently combined in the correct order, for final publication as a single PDF document. A further optional -.Q style\0sheet +\*(lqstyle sheet\*(rq capability is provided; -this allows for the definition of content which is required to preceed the +this allows for the definition of content which is required to precede the table of contents, in the published document. +. .P For each invocation of .BR pdfroff , the ultimate .B groff -output stream is post\(hyprocessed by the GhostScript interpreter, +output stream is post-processed by the GhostScript interpreter, to produce a finished PDF document. +. .P .B pdfroff makes no assumptions about, and imposes no restrictions on, @@ -178,7 +143,7 @@ macro, defined in the package, is used to define public reference marks, or dynamic links to such reference marks, then .B pdfroff -will perform as many preformatting +performs as many preformatting .B groff passes as required, up to a maximum limit of .IR four , @@ -186,9 +151,27 @@ in order to compile a document reference dictionary, to resolve references, and to expand the dynamically defined content of links. . +. .\" -------------------------------------------------------------------- . .SH USAGE +. +The command line is parsed in accordance with normal GNU conventions, +but with one exception \(em when specifying any short form option +(i.e., a single character option introduced by a single hyphen), +and if that option expects an argument, then it +.I must +be specified independently (i.e., it may +.I not +be appended to any group of other single character short form options). +. +.P +Long form option names (i.e., those introduced by a double hyphen) +may be abbreviated to their minimum length unambiguous initial +substring. +. +.P +Otherwise, .B pdfroff usage closely mirrors that of .B groff @@ -198,7 +181,7 @@ with the exception of the .BR \-h , .BR \-v , and -.BI \-T \0dev +.BI \-T \ dev short form options, and all long form options, which are parsed internally by @@ -215,9 +198,11 @@ which may also be considered as the definitive reference for all standard .BR pdfroff options and argument usage. . +. .\" -------------------------------------------------------------------- . .SH OPTIONS +. .B pdfroff accepts all of the short form options (i.e., those introduced by a single hyphen), @@ -228,11 +213,13 @@ In most cases, these are simply passed transparently to .BR groff ; the following, however, are handled specially by .BR pdfroff . +. .TP .B \-h Same as .BR \-\-help ; see below. +. .TP .B \-i Process standard input, after all other specified input files. @@ -241,25 +228,28 @@ This is passed transparently to but, if grouped with other options, it .I must be the first in the group. -Hiding it within a group will -break standard input processing, in the multiple pass +Hiding it within a group +breaks standard input processing, in the multiple pass .B groff processing context of .BR pdfroff . +. .TP -.BI \-T \0dev +.BI \-T \ dev Only -.BI \-T \0ps +.B \-T\ ps is supported by .BR pdfroff . -Attempting to specify any other device will cause +Attempting to specify any other device causes .B pdfroff to abort. +. .TP .B \-v Same as .BR \-\-version ; see below. +. .P See .BR groff (@MAN1EXT@) @@ -268,6 +258,7 @@ which are transparently passed through .BR pdfroff to .BR groff . +. .P All long form options (i.e., those introduced by a double hyphen) @@ -278,27 +269,61 @@ they are passed on to .BR groff , unless otherwise stated below. +. .TP .B \-\-help Causes .B pdfroff to display a summary of the its usage syntax, and supported options, and then exit. +. +.TP +.B \-\-emit\-ps +Suppresses the final output conversion step, +causing +.B pdfroff +to emit PostScript output instead of PDF. +This may be useful, +to capture intermediate PostScript output, +when using a specialised postprocessor, +such as +.I gpresent +for example, +in place of the default +.I GhostScript +PDF writer. +. +.TP +.B \-\-keep\-temporary\-files +Suppresses the deletion of temporary files, +which normally occurs after +.B pdfroff +has completed PDF document formatting; +this may be useful, +when debugging formatting problems. +.IP +See section +.BR FILES , +for a description of the temporary files used by +.BR pdfroff . +. .TP .B \-\-no\-pdf\-output May be used with the -.BI \-\-reference\-dictionary= name +.BI \%\-\-reference\-dictionary= name option (described below) to eliminate the overhead of PDF formatting, when running .B pdfroff to create a reference dictionary, for use in a different document. +. .TP .B \-\-no\-reference\-dictionary May be used to eliminate the overhead of creating a reference dictionary, -when it is known that the target PDF document will contain no public +when it is known that the target PDF document contains no public references, created by the .I pdfhref macro. +. .TP .B \-\-no\-toc\-relocation May be used to eliminate the extra @@ -308,6 +333,24 @@ which is required to generate a table of contents, and relocate it to the start of the PDF document, when processing any document which lacks an automatically generated table of contents. +. +.TP +.B \-\-no\-kill\-null\-pages +While preparing for simulation of the manual collation step, +which is traditionally required to relocate of a +.I "table of contents" +to the start of a document, +.B pdfroff +accumulates a number of empty page descriptions +into the intermediate +.I PostScript +output stream. +During the final collation step, +these empty pages are normally discarded from the finished document; +this option forces +.B pdfroff +to leave them in place. +. .TP .BI \-\-pdf\-output= name Specifies the name to be used for the resultant PDF document; @@ -316,6 +359,7 @@ A future version of .B pdfroff may use this option, to encode the document name in a generated reference dictionary. +. .TP .BI \-\-reference\-dictionary= name Specifies the name to be used for the generated reference dictionary file; @@ -327,6 +371,7 @@ This option .I must be specified, if it is desired to save the reference dictionary, for use in references placed in other PDF documents. +. .TP .B \-\-report\-progress Causes @@ -335,6 +380,7 @@ to display an informational message on standard error, at the start of each .B groff processing pass. +. .TP .BI \-\-stylesheet= name Specifies the name of an @@ -344,6 +390,7 @@ which is to be placed .I before the table of contents, in the formatted PDF document. +. .TP .B \-\-version Causes @@ -359,19 +406,132 @@ in order to display the associated .B groff version information, before exiting. . +. .\" -------------------------------------------------------------------- . .SH ENVIRONMENT The following environment variables may be set, and exported, to modify the behaviour of .BR pdfroff . +. +.TP +.B PDFROFF_COLLATE +Specifies the program to be used +for collation of the finshed PDF document. +.IP +This collation step may be required to move +.I tables of contents +to the start of the finished PDF document, +when formatting with traditional macro packages, +which print them at the end. +However, +users should not normally need to specify +.BR \%PDFROFF_COLLATE , +(and indeed, +are not encouraged to do so). +If unspecified, +.B pdfroff +uses +.BR sed (@MAN1EXT@) +by default, +which normally suffices. +.IP +If +.B \%PDFROFF_COLLATE +.I is +specified, +then it must act as a filter, +accepting a list of file name arguments, +and write its output to the +.I stdout +stream, +whence it is piped to the +.BR \%PDFROFF_POSTPROCESSOR_COMMAND , +to produce the finished PDF output. +.IP +When specifying +.BR \%PDFROFF_COLLATE , +it is normally necessary to also specify +.BR \%PDFROFF_KILL_NULL_PAGES . +.IP +.B \%PDFROFF_COLLATE +is ignored, +if +.B pdfroff +is invoked with the +.I \%\-\-no\-kill\-null\-pages +option. +. +.TP +.B PDFROFF_KILL_NULL_PAGES +Specifies options to be passed to the +.B \%PDFROFF_COLLATE +program. +.IP +It should not normally be necessary to specify +.BR \%PDFROFF_KILL_NULL_PAGES . +The internal default is a +.BR sed (@MAN1EXT@) +script, +which is intended to remove completely blank pages +from the collated output stream, +and which should be appropriate in most applications of +.BR pdfroff . +However, +if any alternative to +.BR sed (@MAN1EXT@) +is specified for +.BR \%PDFROFF_COLLATE , +then it is likely that a corresponding alternative specification for +.B \%PDFROFF_KILL_NULL_PAGES +is required. +.IP +As in the case of +.BR \%PDFROFF_COLLATE , +.B \%PDFROFF_KILL_NULL_PAGES +is ignored, +if +.B pdfroff +is invoked with the +.I \%\-\-no\-kill\-null\-pages +option. +. +.TP +.B PDFROFF_POSTPROCESSOR_COMMAND +Specifies the command to be used for the final document conversion +from PostScript intermediate output to PDF. +It must behave as a filter, +writing its output to the +.I stdout +stream, +and must accept an arbitrary number of +.I files .\|.\|.\& +arguments, +with the special case of +.I \- +representing the +.I stdin +stream. +.IP +If unspecified, +.B \%PDFROFF_POSTPROCESSOR_COMMAND +defaults to +. +.RS 2 +.IP +.I +.ad l +.NH gs \-dBATCH \-dQUIET \-dNOPAUSE \-sDEVICE=pdfwrite \-sOutputFile=\- +.ad +.RE +. .TP .B GROFF_TMPDIR Identifies the directory in which .B pdfroff should create temporary files. If -.B GROFF_TMPDIR +.B \%GROFF_TMPDIR is .I not specified, then the variables @@ -380,8 +540,9 @@ specified, then the variables and .B TEMP are considered in turn, as possible temporary file repositories. -If none of these are set, then temporary files will be created +If none of these are set, then temporary files are created in the current directory. +. .TP .B GROFF_GHOSTSCRIPT_INTERPRETER Specifies the program to be invoked, when @@ -390,16 +551,25 @@ converts .B groff PostScript output to PDF. If -.B GROFF_GHOSTSCRIPT_INTERPRETER +.B \%PDFROFF_POSTPROCESSOR_COMMAND +is specified, +then the command name it specifies is +.I implicitly +assigned to +.BR \%GROFF_GHOSTSCRIPT_INTERPRETER , +overriding any explicit setting specified in the environment. +If +.B \%GROFF_GHOSTSCRIPT_INTERPRETER is not specified, then .B pdfroff -will search the process +searches the process .BR PATH , looking for a program with any of the well known names for the GhostScript interpreter; if no GhostScript interpreter can be found, .B pdfroff -will abort. +aborts. +. .TP .B GROFF_AWK_INTERPRETER Specifies the program to be invoked, when @@ -408,49 +578,53 @@ is extracting reference dictionary entries from a .B groff intermediate message stream. If -.B GROFF_AWK_INTERPRETER +.B \%GROFF_AWK_INTERPRETER is not specified, then .B pdfroff -will search the process +searches the process .BR PATH , looking for any of the preferred programs, `gawk', `mawk', `nawk' and `awk', in this order; if none of these are found, .B pdfroff -will issue a warning message, and continue processing; -however, in this case, no reference dictionary will be created. +issues a warning message, and continue processing; +however, in this case, no reference dictionary is created. +. .TP .B OSTYPE Typically defined automatically by the operating system, .B OSTYPE -is used on Microsoft Win32/MS\(hyDOS platforms +is used on Microsoft Win32/MS-DOS platforms .IR only , to infer the default -.B PATH_SEPARATOR +.B \%PATH_SEPARATOR character, which is used when parsing the process .B PATH to search for external helper programs. +. .TP .B PATH_SEPARATOR If set, -.B PATH_SEPARATOR +.B \%PATH_SEPARATOR overrides the default separator character, -(':' on POSIX/UNIX systems, +(`:' on POSIX/UNIX systems, inferred from .B OSTYPE -on Microsoft Win32/MS\(hyDOS), +on Microsoft Win32/MS-DOS), which is used when parsing the process .B PATH to search for external helper programs. +. .TP .B SHOW_PROGRESS If this is set to a non-empty value, then .B pdfroff -will always behave as if the -.B \-\-report\-progress +always behaves as if the +.B \%\-\-report\-progress option is specified, on the command line. . +. .\" -------------------------------------------------------------------- . .SH FILES @@ -467,6 +641,7 @@ macros normally, the final output file should be named .IB file .pdf\c \&. +. .P Temporary files, created by .BR pdfroff , @@ -481,9 +656,94 @@ is the standard shell variable representing the process ID of the .B pdfroff process itself, and .I * -represents any of a number of extensions used by +represents any of the extensions used by .B pdfroff -for temporary and intermediate files. +to identify the following temporary and intermediate files. +. +.TP +.BI pdf $$ .tmp +A scratch pad file, +used to capture reference data emitted by +.BR groff , +during the +.I reference dictionary +compilation phase. +. +.TP +.BI pdf $$ .ref +The +.IR "reference dictionary" , +as compiled in the last but one pass of the +.I reference dictionary +compilation phase; +(at the start of the first pass, +this file is created empty; +in successive passes, +it contains the +.I reference dictionary +entries, +as collected in the preceding pass). +.IP +If the +.BR \%\-\-reference\-dictionary =\c +.I name +option is specified, +this intermediate file becomes permanent, +and is named +.IR name , +rather than +.BI pdf $$ .ref\c +\&. +. +.TP +.BI pdf $$ .cmp +Used to collect +.I reference dictionary +entries during the active pass of the +.I reference dictionary +compilation phase. +At the end of any pass, +when the content of +.BI pdf $$ .cmp +compares as identical to +.BI pdf $$ .ref\c +\&, +(or the corresponding file named by the +.BR \%\-\-reference\-dictionary =\c +.I name +option), +then +.I reference dictionary +compilation is terminated, +and the +.I document reference map +is appended to this intermediate file, +for inclusion in the final formatting passes. +. +.TP +.BI pdf $$ .tc +An intermediate +.I PostScript +file, +in which \*(lqTable of Contents\*(rq entries are collected, +to facilitate relocation before the body text, +on ultimate output to the +.I GhostScript +postprocessor. +. +.TP +.BI pdf $$ .ps +An intermediate +.I PostScript +file, +in which the body text is collected prior to ultimate output to the +.I GhostScript +postprocessor, +in the proper sequence, +.I after +.BI pdf $$ .tc\c +\&. +. . .\" -------------------------------------------------------------------- . @@ -505,6 +765,7 @@ capabilities of with this document providing the reference to .BR pdfroff 's extended features. +. .P While .B pdfroff @@ -521,32 +782,35 @@ Detailed documentation on the use of these packages may be found, in PDF format, in the reference guide .BR "\*(lqPortable Document Format Publishing with GNU Troff\*(rq" , included in the installed documentation set as -.hy 0 -.BR @PDFDOCDIR@/pdfmark.pdf . -.hy +.BR \%@PDFDOCDIR@/pdfmark.pdf . +. . .\" -------------------------------------------------------------------- . .SH AUTHOR -Copyright \(co 2005, Free Software Foundation, Inc. -.LP +Copyright \(co 2005, 2006, 2007, 2009 Free Software Foundation, Inc. +. +.P This man page is distributed under the terms of the -GNU Free Documentation License (FDL), version 1.1 or later, +GNU Free Documentation License (FDL), version 1.3 or later, and is part of the .I GNU troff software package. -It was originally written by Keith Marshall, -.nohy , +It was originally written by +.MT keith.d.marshall@\:ntlworld.com +Keith Marshall +.ME , who also wrote the implementation of the .I pdfroff program, to which it relates. -.LP +. +.P You should have received a copy of the FDL as part of the .I GNU troff -distribution; it is also available on\-line, at the GNU -.Q copyleft -site, -.nohy . +distribution; it is also available on\-line, at +.UR http://\:www.gnu.org/\:copyleft/\:fdl.html +the GNU copyleft site +.UE . . .\" -------------------------------------------------------------------- .\" EOF / vim: ft=groff diff --git a/contrib/groff/contrib/pdfmark/pdfroff.sh b/contrib/groff/contrib/pdfmark/pdfroff.sh index 03bed4e1f3..b37f5498aa 100644 --- a/contrib/groff/contrib/pdfmark/pdfroff.sh +++ b/contrib/groff/contrib/pdfmark/pdfroff.sh @@ -3,24 +3,23 @@ # # Function: Format PDF Output from groff Markup # -# Copyright (C) 2005, Free Software Foundation, Inc. +# Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc. # Written by Keith Marshall (keith.d.marshall@ntlworld.com) # # This file is part of groff. # # groff is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free -# Software Foundation; either version 2, or (at your option) any later -# version. +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. # # groff is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # for more details. # -# You should have received a copy of the GNU General Public License along -# with groff; see the file COPYING. If not, write to the Free Software -# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . # # ------------------------------------------------------------------------------ # @@ -45,7 +44,7 @@ # # Usage: searchpath progname path # - IFS="${PATH_SEPARATOR-":"}" prog=':' + IFS=${PATH_SEPARATOR-":"} prog=':' for dir in $2 do for ext in '' '.exe' @@ -63,6 +62,12 @@ } # @PATH_SEARCH_SETUP@ # +# If the system maps '/bin/sh' to some 'zsh' implementation, +# then we may need this hack, adapted from autoconf code. +# + test x${ZSH_VERSION+"set"} = x"set" && NULLCMD=":" \ + && (emulate sh) >$NULLDEV 2>&1 && emulate sh +# # We need both 'grep' and 'sed' programs, to parse script options, # and we also need 'cat', to display help and some error messages, # so ensure they are all installed, before we continue. @@ -120,6 +125,16 @@ exit 1 fi # +# Identify the postprocessor command, for writing PDF output. +# (May be forced, by defining PDFROFF_POSTPROCESSOR_COMMAND in the environment; +# if this is not set, leave blank to use the built in default). +# + if test -n "${PDFROFF_POSTPROCESSOR_COMMAND}" + then + GROFF_GHOSTSCRIPT_INTERPRETER=`set command ${PDFROFF_POSTPROCESSOR_COMMAND}; + echo $2` + fi +# # Set up temporary/intermediate file locations. # WRKFILE=${GROFF_TMPDIR=${TMPDIR-${TMP-${TEMP-"."}}}}/pdf$$.tmp @@ -146,6 +161,7 @@ help reference-dictionary no-reference-dictionary stylesheet pdf-output no-pdf-output version report-progress no-toc-relocation + emit-ps keep-temporary-files no-kill-null-pages " # Parse the command line, to identify 'pdfroff' specific options. # Collect all other parameters into new argument and file lists, @@ -179,7 +195,7 @@ case "$MATCH" in --help) - $CAT >&2 <<-ETX + $CAT <<-ETX Usage: $CMD [-option ...] [--long-option ...] [file ...] Options: @@ -195,14 +211,22 @@ Enable console messages, indicating the progress of the PDF document formatting process. + --emit-ps + Emit PostScript output instead of PDF; this may be useful + when the ultimate PDF output is to be generated by a more + specialised postprocessor, (e.g. gpresent), rather than + the default GhostScript PDF writer. + --pdf-output=name - Write the PDF output stream to file 'name'; if this option - is unspecified, standard output is used for PDF output. + Write the PDF, (or PostScript), output stream to file + 'name'; if this option is unspecified, standard output + is used for PDF, (or PostScript), output. --no-pdf-output - Suppress the generation of PDF output entirely; use this - with the --reference-dictionary option, if processing a - document stream to produce only a reference dictionary. + Suppress the generation of PDF, (or PostScript), output + entirely; use this with the --reference-dictionary option, + if processing a document stream to produce only a + reference dictionary. --no-reference-dictionary Suppress the generation of a '$CMD' reference dictionary @@ -231,6 +255,15 @@ normally required to position the table of contents at the start of a PDF document. + --no-kill-null-pages + Suppress the 'null page' elimination filter, which is used + to remove the excess blank pages produced by the collation + algorithm used for 'toc-relocation'. + + --keep-temporary-files + Suppress the normal clean up of temporary files, which is + scheduled when 'pdfroff' completes. + ETX exit 0 ;; @@ -244,6 +277,14 @@ SHOW_PROGRESS=echo ;; + --keep-temporary-files) + trap "" 0 + ;; + + --emit-ps) + PDFROFF_POSTPROCESSOR_COMMAND="$CAT" + ;; + --pdf-output) PDF_OUTPUT="$OPTARG" ;; @@ -267,6 +308,10 @@ --no-toc-relocation) TC_DATA="" TOC_FORMAT="" BODY_FORMAT="" ;; + + --no-kill-null-pages) + PDFROFF_COLLATE="$CAT" PDFROFF_KILL_NULL_PAGES="" + ;; # # any other non-null match must have matched more than one defined case, # so report the ambiguity, and bail out. @@ -297,7 +342,7 @@ # # Those standard options which expect an argument, but are specified with # an intervening space, between flag and argument, must be reparsed, so we -# can trap illegal use of '-T dev', or missing input files. +# can trap invalid use of '-T dev', or missing input files. # -[dfFILmMnoPrTwW]) OPTNAME="$1" @@ -374,7 +419,7 @@ then >> $REFFILE echo kickstart > $REFCOPY - test "${SHOW_PROGRESS+"set"}" = "set" && SAY=echo + test x${SHOW_PROGRESS+"set"} = x"set" && SAY=echo # # In order to correctly resolve 'pdfmark' references, # we need to have both the 'awk' and 'diff' programs available. @@ -514,7 +559,7 @@ # (Missing 'awk' or 'diff' may have disabled it, to avoid display # of spurious messages associated with reference resolution). # - test "${SHOW_PROGRESS+"set"}" = "set" && SAY=echo + test x${SHOW_PROGRESS+"set"} = x"set" && SAY=echo # # If a document cover style sheet is specified ... # then we run a special formatting pass, to create a cover section file. @@ -550,11 +595,24 @@ # PostScript intermediate files into a single PDF output file. # $SAY >&2 $n "Writing PDF output ..$c" - PDFWRITE="$GS -dQUIET -dBATCH -dNOPAUSE -sDEVICE=pdfwrite" + if test -z "$PDFROFF_POSTPROCESSOR_COMMAND" + then + PDFROFF_POSTPROCESSOR_COMMAND="$GS -dQUIET -dBATCH -dNOPAUSE + -sDEVICE=pdfwrite -sOutputFile="${PDF_OUTPUT-"-"} + + elif test -n "$PDF_OUTPUT" + then + exec > $PDF_OUTPUT + fi # # (This 'sed' script is a hack, to eliminate redundant blank pages). # - $SED ' + ${PDFROFF_COLLATE-"$SED"} ${PDFROFF_KILL_NULL_PAGES-' + /%%Page:/{ + N + /%%BeginPageSetup/b again + } + b :again /%%EndPageSetup/b finish /%%Page:/{ @@ -564,9 +622,9 @@ b :finish N - /^%%Page:.*0 *Cg *EP/d - ' $TC_DATA $BD_DATA | $PDFWRITE -sOutputFile=${PDF_OUTPUT-"-"} $CS_DATA - + /^%%Page:.*\n0 Cg EP$/d + '} $TC_DATA $BD_DATA | $PDFROFF_POSTPROCESSOR_COMMAND $CS_DATA - $SAY >&2 ". done" # # ------------------------------------------------------------------------------ -# $RCSfile: pdfroff.sh,v $ $Revision: 1.7 $: end of file +# $RCSfile: pdfroff.sh,v $ $Revision: 1.15 $: end of file diff --git a/contrib/groff/contrib/pdfmark/spdf.tmac b/contrib/groff/contrib/pdfmark/spdf.tmac index 52bde1685f..c7af6dc3b2 100644 --- a/contrib/groff/contrib/pdfmark/spdf.tmac +++ b/contrib/groff/contrib/pdfmark/spdf.tmac @@ -3,7 +3,7 @@ spdf.tmac -Copyright (C) 2004 +Copyright (C) 2004, 2009 Free Software Foundation, Inc. Written by Keith Marshall (keith.d.marshall@ntlworld.com) @@ -11,17 +11,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. +You should have received a copy of the GNU General Public License +along with this program. If not, see . .. .\" diff --git a/contrib/groff/contrib/pic2graph/pic2graph.man b/contrib/groff/contrib/pic2graph/pic2graph.man index 36008cba4a..7cfcae20ea 100644 --- a/contrib/groff/contrib/pic2graph/pic2graph.man +++ b/contrib/groff/contrib/pic2graph/pic2graph.man @@ -1,4 +1,4 @@ -.\" $Id: pic2graph.man,v 1.5 2003/10/28 07:46:24 wlemb Exp $ +.\" $Id: pic2graph.man,v 1.7 2008/09/29 21:55:15 wl Exp $ .\" This documentation is released to the public domain. .TH PIC2GRAPH @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@" .IX pic2graph @@ -29,28 +29,35 @@ formulae. .P PIC is a rather expressive graphics minilanguage suitable for producing box-and-arrow diagrams of the kind frequently used in -technical papers and textbooks. The language is sufficiently flexible -to be quite useful for state charts, Petri-net diagrams, flow charts, -simple circuit schematics, jumper layouts, and other kinds of -illustration involving repetitive uses of simple geometric forms and -splines. Because PIC descriptions are procedural and object-based, -they are both compact and easy to modify. +technical papers and textbooks. +The language is sufficiently flexible to be quite useful for state +charts, Petri-net diagrams, flow charts, simple circuit schematics, +jumper layouts, and other kinds of illustration involving repetitive +uses of simple geometric forms and splines. +Because PIC descriptions are procedural and object-based, they are +both compact and easy to modify. .P -The PIC language is fully documented in "\fIMaking Pictures With GNU -PIC\fP", a document which is part of the +The PIC language is fully documented in +.IR "Making Pictures With GNU PIC" , +a document which is part of the .BR groff (@MAN1EXT@) distribution. .P -Your input PIC code should \fInot\fR be wrapped with the .PS and .PE macros -that normally guard it within +Your input PIC code should +.I not +be wrapped with the \&.PS and \&.PE macros that normally guard it within .BR groff (@MAN1EXT@) macros. .P -The output image will be a black-on-white graphic clipped to the -smallest possible bounding box that contains all the black pixels. +The output image will be clipped to the smallest possible bounding box +that contains all the black pixels. +Older versions of +.BR \%convert (1) +will produce a black-on-white graphic; newer ones may produce a +black-on-transparent graphic. By specifying command-line options to be passed to -.BR convert (1) -you can give it a border, set the background transparent, set the +.BR \%convert (1) +you can give it a border, force the background transparent, set the image's pixel density, or perform other useful transformations. .P This program uses @@ -59,10 +66,12 @@ This program uses .BR groff (@MAN1EXT@), .BR gs (1), and the ImageMagick -.BR convert (1) +.BR \%convert (1) program. These programs must be installed on your system and accessible on your -$PATH for \fBpic2graph\fR to work. +$PATH for +.B pic2graph +to work. . . .SH OPTIONS @@ -74,12 +83,13 @@ and .BR groff (@MAN1EXT@) in the `unsafe' mode enabling the PIC macro .B sh -to execute arbitrary commands. The default is to forbid this. +to execute arbitrary commands. +The default is to forbid this. .TP .BI \-format\ fmt Specify an output format; the default is PNG (Portable Network Graphics). Any format that -.BR convert (1) +.BR \%convert (1) can emit is supported. .TP .BI \-eqn\ delim @@ -89,13 +99,14 @@ directives .RB ( $ and .BR $ , -by default). This option requires an argument, but an empty string is +by default). +This option requires an argument, but an empty string is accepted as a directive to disable .BR @g@eqn (@MAN1EXT@) processing. .PP Command-line switches and arguments not listed above are passed to -.BR convert (1). +.BR \%convert (1). . . .SH FILES @@ -122,6 +133,28 @@ Otherwise, temporary files will be created in .BR /tmp . . . +.SH BUGS +Due to changes in the behavior of ImageMagick +.BR \%convert (1) +that are both forward and backward-incompatible, +mismatches between your +.B pic2graph +and +.BR \%convert (1) +versions may produce zero-sized or untrimmed output images. +For this version of +.B pic2graph +you will need a version of +.BR \%convert (1) +that supports the +.B \-trim +option; older versions of +.B pic2graph +used +.BR \-crop\~0x0 , +which no longer has trimming behavior. +. +. .SH "SEE ALSO" .BR eqn2graph (@MAN1EXT@), .BR grap2graph (@MAN1EXT@), @@ -129,7 +162,7 @@ Otherwise, temporary files will be created in .BR @g@eqn (@MAN1EXT@), .BR groff (@MAN1EXT@), .BR gs (1), -.BR convert (1). +.BR \%convert (1). . . .SH AUTHOR diff --git a/contrib/groff/contrib/pic2graph/pic2graph.sh b/contrib/groff/contrib/pic2graph/pic2graph.sh index 5a066cef2e..9d4854ffc1 100644 --- a/contrib/groff/contrib/pic2graph/pic2graph.sh +++ b/contrib/groff/contrib/pic2graph/pic2graph.sh @@ -32,7 +32,7 @@ # We don't have complete option coverage on eqn because this is primarily # intended as a pic translator; we can live with eqn defaults. # -# $Id: pic2graph.sh,v 1.7 2005/05/18 07:03:07 wl Exp $ +# $Id: pic2graph.sh,v 1.8 2008/09/29 00:53:29 esr Exp $ # groffpic_opts="" gs_opts="" @@ -95,7 +95,7 @@ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 2 15 # 4. Use convert(1) to crop the PostScript and turn it into a bitmap. (echo ".EQ"; echo $eqndelim; echo ".EN"; echo ".PS"; cat; echo ".PE") | \ groff -e -p $groffpic_opts -Tps -P-pletter > $tmp/pic2graph.ps \ - && convert -trim -crop 0x0 $convert_opts $tmp/pic2graph.ps $tmp/pic2graph.$format \ + && convert -trim $convert_opts $tmp/pic2graph.ps $tmp/pic2graph.$format \ && cat $tmp/pic2graph.$format # End diff --git a/contrib/groff/doc/fdl.texi b/contrib/groff/doc/fdl.texi index 994044df6f..8805f1a47d 100644 --- a/contrib/groff/doc/fdl.texi +++ b/contrib/groff/doc/fdl.texi @@ -1,13 +1,12 @@ +@c The GNU Free Documentation License. +@center Version 1.3, 3 November 2008 -@node GNU Free Documentation License -@appendixsec GNU Free Documentation License - -@cindex FDL, GNU Free Documentation License -@center Version 1.2, November 2002 +@c This file is intended to be included within another document, +@c hence no sectioning command or @node. @display -Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. +@uref{http://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -112,6 +111,9 @@ formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. +The ``publisher'' means any person or entity that distributes copies +of the Document to the public. + A section ``Entitled XYZ'' means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a @@ -380,13 +382,30 @@ title. @item TERMINATION -You may not copy, modify, sublicense, or distribute the Document except -as expressly provided for under this License. Any other attempt to -copy, modify, sublicense or distribute the Document is void, and will -automatically terminate your rights under this License. However, -parties who have received copies, or rights, from you under this -License will not have their licenses terminated so long as such -parties remain in full compliance. +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, and +will automatically terminate your rights under this License. + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, receipt of a copy of some or all of the same material does +not give you any rights to use it. @item FUTURE REVISIONS OF THIS LICENSE @@ -404,11 +423,46 @@ following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not -as a draft) by the Free Software Foundation. +as a draft) by the Free Software Foundation. If the Document +specifies that a proxy can decide which future versions of this +License can be used, that proxy's public statement of acceptance of a +version permanently authorizes you to choose that version for the +Document. + +@item +RELICENSING + +``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. A +``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the +site means any set of copyrightable works thus published on the MMC +site. + +``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. + +``Incorporate'' means to publish or republish a Document, in whole or +in part, as part of another Document. + +An MMC is ``eligible for relicensing'' if it is licensed under this +License, and if all works that were first published under this License +somewhere other than this MMC, and subsequently incorporated in whole +or in part into the MMC, (1) had no cover texts or invariant sections, +and (2) were thus incorporated prior to November 1, 2008. + +The operator of an MMC Site may republish an MMC contained in the site +under CC-BY-SA on the same site at any time before August 1, 2009, +provided the MMC is eligible for relicensing. + @end enumerate @page -@appendixsubsec ADDENDUM: How to use this License for your documents +@heading ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and @@ -418,7 +472,7 @@ license notices just after the title page: @group Copyright (C) @var{year} @var{your name}. Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 + under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU @@ -427,7 +481,7 @@ license notices just after the title page: @end smallexample If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, -replace the ``with...Texts.'' line with this: +replace the ``with@dots{}Texts.'' line with this: @smallexample @group diff --git a/contrib/groff/doc/groff.texinfo b/contrib/groff/doc/groff.texinfo index a23993ea92..e0f44a6c39 100644 --- a/contrib/groff/doc/groff.texinfo +++ b/contrib/groff/doc/groff.texinfo @@ -4,11 +4,11 @@ @c Please convert this manual with `texi2dvi -e groff.texinfo' due to @c problems in texinfo regarding expansion of user-defined macros. @c -@c You need texinfo 4.6 or newer to format this document! +@c You need texinfo 4.8 or newer to format this document! @c @c %**start of header (This is for running Texinfo on a region.) -@setfilename groff +@setfilename groff.info @settitle The GNU Troff Manual @setchapternewpage odd @footnotestyle separate @@ -24,23 +24,23 @@ @copying -This manual documents GNU @code{troff} version 1.19.2. +This manual documents GNU @code{troff} version 1.20.1. -Copyright @copyright{} 1994-2000, 2001, 2002, 2003, 2004, 2005 +Copyright @copyright{} 1994-2000, 2001, 2002, 2003, 2004, 2005, 2006, +2007, 2008, 2009 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, with the Front-Cover texts being `A GNU Manual,'' -and with the Back-Cover Texts as in (a) below. A copy of the -license is included in the section entitled `GNU Free Documentation -License.'' +and with the Back-Cover Texts as in (a) below. A copy of the license is +included in the section entitled `GNU Free Documentation License.'' -(a) The FSF's Back-Cover Text is: `You have freedom to copy and modify -this GNU Manual, like GNU software. Copies published by the Free -Software Foundation raise funds for GNU development.'' +(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and +modify this GNU manual. Buying copies from the FSF supports it in +developing GNU and promoting software freedom.'' @end quotation @end copying @@ -78,9 +78,9 @@ Software Foundation raise funds for GNU development.'' @c To assure correct HTML translation, some ugly hacks are necessary. @c While processing a @def... request, the HTML translator looks at the -@c next line to decide whether it should start indentation or not. If -@c it is something starting with @def... (e.g. @deffnx), it doesn't. -@c So we must assure during macro expansion that a @def... is seen. +@c next line to decide whether to start indentation, and if the line +@c starts with @def... (e.g. @deffnx), indentation is started. We must +@c therefore ensure that a @def... is seen, during macro expansion. @c @c The following macros have to be used: @c @@ -352,7 +352,8 @@ Software Foundation raise funds for GNU development.'' @c @c A value defined with @set is embedded into three group levels if @c called with @value, so we need seven \aftergroup to put \le outside -@c of the groups -- this is necessary to get proper mathematical spacing. +@c of the groups -- this is necessary to get proper mathematical +@c spacing. @tex \gdef\LEmacro{\aftergroup\aftergroup\aftergroup\aftergroup @@ -372,7 +373,7 @@ Software Foundation raise funds for GNU development.'' @end macro -@c We need special parentheses, brackets, and braces: +@c Special care is required with parentheses, brackets, and braces: @c @c . Real parentheses in @deffn produce an error while compiling with @c TeX. @@ -432,6 +433,7 @@ Software Foundation raise funds for GNU development.'' @c We map some latin-1 characters to corresponding texinfo macros. +@c Newer versions of texinfo.tex have similar code included already. @tex \global\catcode`^^e4\active % ä @@ -471,8 +473,8 @@ Software Foundation raise funds for GNU development.'' @titlepage @title groff @subtitle The GNU implementation of @code{troff} -@subtitle Edition 1.19.2 -@subtitle Summer 2005 +@subtitle Edition 1.20.1 +@subtitle Spring 2009 @author by Trent A.@tie{}Fisher @author and Werner Lemberg (@email{bug-groff@@gnu.org}) @@ -481,17 +483,13 @@ Software Foundation raise funds for GNU development.'' @insertcopying @end titlepage - @contents -@ifinfo +@ifnottex @node Top, Introduction, (dir), (dir) @top GNU troff +@end ifnottex -@insertcopying -@end ifinfo - -@ifhtml @menu * Introduction:: * Invoking groff:: @@ -515,34 +513,9 @@ Software Foundation raise funds for GNU development.'' * Concept Index:: @end menu -@node Top, Introduction, (dir), (dir) -@top GNU troff - +@ifnottex @insertcopying -@end ifhtml - -@menu -* Introduction:: -* Invoking groff:: -* Tutorial for Macro Users:: -* Macro Packages:: -* gtroff Reference:: -* Preprocessors:: -* Output Devices:: -* File formats:: -* Installation:: -* Copying This Manual:: -* Request Index:: -* Escape Index:: -* Operator Index:: -* Register Index:: -* Macro Index:: -* String Index:: -* Glyph Name Index:: -* Font File Keyword Index:: -* Program and File Index:: -* Concept Index:: -@end menu +@end ifnottex @@ -554,9 +527,9 @@ Software Foundation raise funds for GNU development.'' @cindex introduction GNU @code{troff} (or @code{groff}) is a system for typesetting -documents. @code{troff} is very flexible and has been in existence (and -use) for about 3@tie{}decades. It is quite widespread and firmly -entrenched in the @acronym{UNIX} community. +documents. @code{troff} is very flexible and has been used extensively +for some thirty years. It is well entrenched in the @acronym{UNIX} +community. @menu * What Is groff?:: @@ -585,10 +558,9 @@ normal text files with embedded formatting commands. These files can then be processed by @code{groff} to produce a typeset document on a variety of devices. -Likewise, @code{groff} should not be confused with a @dfn{word -processor}, since that term connotes an integrated system that includes -an editor and a text formatter. Also, many word processors follow the -@acronym{WYSIWYG} paradigm discussed earlier. +@code{groff} should not be confused with a @dfn{word processor}, an +integrated system of editor and text formatter. Also, many word +processors follow the @acronym{WYSIWYG} paradigm discussed earlier. Although @acronym{WYSIWYG} systems may be easier to use, they have a number of disadvantages compared to @code{troff}: @@ -605,8 +577,8 @@ very portable. @code{troff} is firmly entrenched in all @acronym{UNIX} systems. @item -It is difficult to have a wide range of capabilities available within -the confines of a GUI/window system. +It is difficult to have a wide range of capabilities within the confines +of a GUI/window system. @item It is more difficult to make global changes to a document. @@ -625,26 +597,39 @@ impossible to accomplish complex actions.'' --Doug Gwyn (22/Jun/91 in @section History @cindex history -@cindex @code{runoff}, the program +@cindex @code{RUNOFF}, the program @cindex @code{rf}, the program @code{troff} can trace its origins back to a formatting program called -@code{runoff}, written by J.@tie{}E.@tie{}Saltzer, which ran on MIT's CTSS -operating system in the mid-sixties. This name came from the common -phrase of the time ``I'll run off a document.'' Bob Morris ported it to -the 635 architecture and called the program @code{roff} (an abbreviation -of @code{runoff}). It was rewritten as @code{rf} for the @w{PDP-7} -(before having @acronym{UNIX}), and at the same time (1969), Doug -McIllroy rewrote an extended and simplified version of @code{roff} in -the @acronym{BCPL} programming language. +@code{RUNOFF}, written by Jerry Saltzer, which ran on the @acronym{CTSS} +(@emph{Compatible Time Sharing System}, a project of MIT, the +Massachusetts Institute of Technology) in the +mid-sixties.@footnote{Jerome H.@: Saltzer, a grad student then, later a +Professor of Electrical Engineering, now retired. Saltzer's PhD thesis +was the first application for @code{RUNOFF} and is available from the +MIT Libraries.} The name came from the use of the phrase ``run off a +document'', meaning to print it out. +@c +@c Tom Van Vleck writes about the following: +@c +@c I am not sure about this.. I think the BCPL runoff was the port to +@c the 635 architecture, and that the order of events is +@c 1. CTSS runoff +@c 2. BCPL runoff on Multics +@c 3. BCPL runoff on 635 +@c 4. rf on PDP-7 +@c +Bob Morris ported it to the 635 architecture and called the program +@code{roff} (an abbreviation of @code{runoff}). It was rewritten as +@code{rf} for the @w{PDP-7} (before having @acronym{UNIX}), and at the +same time (1969), Doug McIllroy rewrote an extended and simplified +version of @code{roff} in the @acronym{BCPL} programming language. @cindex @code{roff}, the program -The first version of @acronym{UNIX} was developed on a @w{PDP-7} which -was sitting around Bell Labs. In 1971 the developers wanted to get a -@w{PDP-11} for further work on the operating system. In order to -justify the cost for this system, they proposed that they would -implement a document formatting system for the @acronym{AT&T} patents -division. This first formatting program was a reimplementation of -McIllroy's @code{roff}, written by J.@tie{}F.@tie{}Ossanna. +In 1971, the UNIX developers wanted to get a @w{PDP-11}, and to justify +the cost, proposed the development of a document formatting system for +the @acronym{AT&T} patents division. This first formatting program was +a reimplementation of McIllroy's @code{roff}, written by J.@tie{}F.@: +Ossanna. @cindex @code{nroff}, the program When they needed a more flexible language, a new version of @code{roff} @@ -668,8 +653,8 @@ Since there are several things which cannot be done easily in transform certain parts of a document into @code{troff}, which made a very natural use of pipes in @acronym{UNIX}. -The @code{eqn} preprocessor allowed mathematical formulæ to be -specified in a much simpler and more intuitive manner. @code{tbl} is a +The @code{eqn} preprocessor allowed mathematical formulæ to be specified +in a much simpler and more intuitive manner. @code{tbl} is a preprocessor for formatting tables. The @code{refer} preprocessor (and the similar program, @code{bib}) processes citations in a document according to a bibliographic database. @@ -680,16 +665,17 @@ He rewrote it in C, although it was now 7000@tie{}lines of uncommented code and still dependent on the CAT. As the CAT became less common, and was no longer supported by the manufacturer, the need to make it support other devices became a priority. However, before this could be done, -Ossanna was killed in a car accident. +Ossanna died by a severe heart attack in a hospital while recovering +from a previous one. @pindex ditroff @cindex @code{ditroff}, the program So, Brian Kernighan took on the task of rewriting @code{troff}. The -newly rewritten version produced device independent code which was -very easy for postprocessors to read and translate to the appropriate -printer codes. Also, this new version of @code{troff} (called -@code{ditroff} for ``device independent @code{troff}'') had several -extensions, which included drawing functions. +newly rewritten version produced device independent code which was very +easy for postprocessors to read and translate to the appropriate printer +codes. Also, this new version of @code{troff} (called @code{ditroff} +for ``device independent @code{troff}'') had several extensions, which +included drawing functions. Due to the additional abilities of the new version of @code{troff}, several new preprocessors appeared. The @code{pic} preprocessor @@ -699,8 +685,8 @@ preprocessor did the same, although via a much different paradigm. The other preprocessors, produced @code{pic} code. James Clark began work on a GNU implementation of @code{ditroff} in -early@tie{}1989. The first version, @code{groff}@tie{}0.3.1, was released -June@tie{}1990. @code{groff} included: +early@tie{}1989. The first version, @code{groff}@tie{}0.3.1, was +released June@tie{}1990. @code{groff} included: @itemize @bullet @item @@ -731,10 +717,10 @@ document (@code{grog}). It was declared a stable (i.e.@: non-beta) package with the release of version@tie{}1.04 around November@tie{}1991. -Beginning in@tie{}1999, @code{groff} has new maintainers (the package was -an orphan for a few years). As a result, new features and programs like -@code{grn}, a preprocessor for gremlin images, and an output device to -produce @acronym{HTML} output have been added. +Beginning in@tie{}1999, @code{groff} has new maintainers (the package +was an orphan for a few years). As a result, new features and programs +like @code{grn}, a preprocessor for gremlin images, and an output device +to produce @acronym{HTML} and @acronym{XHTML} have been added. @c ===================================================================== @@ -820,9 +806,9 @@ Since @code{groff} provides such low-level facilities, it can be quite difficult to use by itself. However, @code{groff} provides a @dfn{macro} facility to specify how certain routine operations (e.g.@tie{}starting paragraphs, printing headers and footers, etc.)@: -should be done. These macros can be collected together into a @dfn{macro -package}. There are a number of macro packages available; the most -common (and the ones described in this manual) are @file{man}, +should be done. These macros can be collected together into a +@dfn{macro package}. There are a number of macro packages available; +the most common (and the ones described in this manual) are @file{man}, @file{mdoc}, @file{me}, @file{ms}, and @file{mm}. @@ -870,12 +856,12 @@ mathematical pictures (@code{ideal}) and chemical structures @cindex output devices @cindex devices for output -@code{groff} actually produces device independent code which may be -fed into a postprocessor to produce output for a particular device. -Currently, @code{groff} has postprocessors for @sc{PostScript} -devices, character terminals, X@tie{}Windows (for previewing), @TeX{} -DVI format, HP LaserJet@tie{}4 and Canon LBP printers (which use -@acronym{CAPSL}), and @acronym{HTML}. +@code{groff} actually produces device independent code which may be fed +into a postprocessor to produce output for a particular device. +Currently, @code{groff} has postprocessors for @sc{PostScript} devices, +character terminals, X@tie{}Windows (for previewing), @TeX{} DVI format, +HP LaserJet@tie{}4 and Canon LBP printers (which use @acronym{CAPSL}), +@acronym{HTML}, and @acronym{XHTML}. @c ===================================================================== @@ -920,8 +906,8 @@ replaced by @samp{roff}. In this document, we consequently say @samp{gtroff} when talking about the GNU @code{troff} program. All other implementations of @code{troff} -are called @acronym{AT&T} @code{troff} which is the common origin of -all @code{troff} derivates (with more or less compatible changes). +are called @acronym{AT&T} @code{troff} which is the common origin of all +@code{troff} derivates (with more or less compatible changes). Similarly, we say @samp{gpic}, @samp{geqn}, etc. @menu @@ -987,9 +973,10 @@ gtroff [ -abcivzCERU ] [ -w@var{name} ] [ -W@var{name} ] [ -d@var{cs} ] Obviously, many of the options to @code{groff} are actually passed on to @code{gtroff}. -Options without an argument can be grouped behind a single@tie{}@option{-}. -A filename of@tie{}@file{-} denotes the standard input. It is possible to -have whitespace between an option and its parameter. +Options without an argument can be grouped behind a +single@tie{}@option{-}. A filename of@tie{}@file{-} denotes the +standard input. It is possible to have whitespace between an option and +its parameter. The @code{grog} command can be used to guess the correct @code{groff} command to format a file. @@ -1038,8 +1025,9 @@ accessible via @code{groff}. This option prevents the loading of the Make programs run by @code{groff} print out their version number. @item -V -Print the pipeline on @code{stdout} instead of executing it. If specified -more than once, print the pipeline on @code{stderr} and execute it. +Print the pipeline on @code{stdout} instead of executing it. If +specified more than once, print the pipeline on @code{stderr} and +execute it. @item -z Suppress output from @code{gtroff}. Only error messages are printed. @@ -1061,9 +1049,9 @@ ignored. @item -L@var{arg} Pass @var{arg} to the spooler. Each argument should be passed with a -separate @option{-L} option. Note that @code{groff} does not prepend -a @samp{-} to @var{arg} before passing it to the postprocessor. -If the @code{print} keyword in the device description file is missing, +separate @option{-L} option. Note that @code{groff} does not prepend a +@samp{-} to @var{arg} before passing it to the postprocessor. If the +@code{print} keyword in the device description file is missing, @option{-L} is ignored. @item -T@var{dev} @@ -1136,17 +1124,18 @@ printers). @pindex post-grohtml @cindex @code{grohtml}, the program @item html -To produce @acronym{HTML} output. Note that the @acronym{HTML} driver -consists of two parts, a preprocessor (@code{pre-grohtml}) and a -postprocessor (@code{post-grohtml}). +@itemx xhtml +To produce @acronym{HTML} and @acronym{XHTML} output, respectively. +Note that this driver consists of two parts, a preprocessor +(@code{pre-grohtml}) and a postprocessor (@code{post-grohtml}). @end table @cindex output device name string register (@code{.T}) @cindex output device usage number register (@code{.T}) The predefined @code{gtroff} string register @code{.T} contains the current output device; the read-only number register @code{.T} is set -to@tie{}1 if this option is used (which is always true if @code{groff} is -used to call @code{gtroff}). @xref{Built-in Registers}. +to@tie{}1 if this option is used (which is always true if @code{groff} +is used to call @code{gtroff}). @xref{Built-in Registers}. The postprocessor to be used for a device is specified by the @code{postpro} command in the device description file. (@xref{Font @@ -1226,10 +1215,10 @@ list of incompatibilities between @code{groff} and @acronym{AT&T} @item -d@var{c}@var{s} @itemx -d@var{name}=@var{s} -Define @var{c} or @var{name} to be a string@tie{}@var{s}. @var{c}@tie{}must -be a one-letter name; @var{name} can be of arbitrary length. All string -assignments happen before loading any macro file (including the start-up -file). +Define @var{c} or @var{name} to be a string@tie{}@var{s}. +@var{c}@tie{}must be a one-letter name; @var{name} can be of arbitrary +length. All string assignments happen before loading any macro file +(including the start-up file). @item -f@var{fam} Use @var{fam} as the default font family. @xref{Font Families}. @@ -1245,11 +1234,12 @@ Number the first page @var{num}. @item -o@var{list} @cindex print current page register (@code{.P}) Output only pages in @var{list}, which is a comma-separated list of page -ranges; @samp{@var{n}} means print page@tie{}@var{n}, @samp{@var{m}-@var{n}} -means print every page between @var{m} and@tie{}@var{n}, @samp{-@var{n}} -means print every page up to@tie{}@var{n}, @samp{@var{n}-} means print every -page beginning with@tie{}@var{n}. @code{gtroff} exits after printing the -last page in the list. All the ranges are inclusive on both ends. +ranges; @samp{@var{n}} means print page@tie{}@var{n}, +@samp{@var{m}-@var{n}} means print every page between @var{m} +and@tie{}@var{n}, @samp{-@var{n}} means print every page up +to@tie{}@var{n}, @samp{@var{n}-} means print every page beginning +with@tie{}@var{n}. @code{gtroff} exits after printing the last page in +the list. All the ranges are inclusive on both ends. Within @code{gtroff}, this information can be extracted with the @samp{.P} register. @xref{Built-in Registers}. @@ -1260,11 +1250,11 @@ chapter. @item -r@var{c}@var{n} @itemx -r@var{name}=@var{n} -Set number register@tie{}@var{c} or @var{name} to the value@tie{}@var{n}. -@var{c}@tie{}must be a one-letter name; @var{name} can be of arbitrary -length. @var{n}@tie{}can be any @code{gtroff} numeric expression. All -register assignments happen before loading any macro file (including -the start-up file). +Set number register@tie{}@var{c} or @var{name} to the +value@tie{}@var{n}. @var{c}@tie{}must be a one-letter name; @var{name} +can be of arbitrary length. @var{n}@tie{}can be any @code{gtroff} +numeric expression. All register assignments happen before loading any +macro file (including the start-up file). @item -F@var{dir} Search @file{@var{dir}} for subdirectories @file{dev@var{name}} @@ -1295,9 +1285,10 @@ it also implies @code{groff}'s @option{-s} option. @w{@code{\X'ps: import}} and @w{@code{\X'ps: file}} escapes. @end itemize -The current directory is always searched first. This option may be specified -more than once; the directories will be searched in the order specified. No -directory search is performed for files specified using an absolute path. +The current directory is always searched first. This option may be +specified more than once; the directories are searched in the order +specified. No directory search is performed for files specified using +an absolute path. @end table @@ -1316,15 +1307,16 @@ not within @code{gtroff}) which can modify the behavior of @code{groff}. @tindex GROFF_COMMAND_PREFIX@r{, environment variable} @cindex command prefix @cindex prefix, for commands -If this is set to@tie{}@var{X}, then @code{groff} runs @code{@var{X}troff} -instead of @code{gtroff}. This also applies to @code{tbl}, @code{pic}, -@code{eqn}, @code{grn}, @code{refer}, and @code{soelim}. It does not -apply to @code{grops}, @code{grodvi}, @code{grotty}, @code{pre-grohtml}, -@code{post-grohtml}, @code{grolj4}, and @code{gxditview}. +If this is set to@tie{}@var{X}, then @code{groff} runs +@code{@var{X}troff} instead of @code{gtroff}. This also applies to +@code{tbl}, @code{pic}, @code{eqn}, @code{grn}, @code{refer}, and +@code{soelim}. It does not apply to @code{grops}, @code{grodvi}, +@code{grotty}, @code{pre-grohtml}, @code{post-grohtml}, @code{grolj4}, +and @code{gxditview}. -The default command prefix is determined during the installation process. -If a non-GNU troff system is found, prefix @samp{g} is used, none -otherwise. +The default command prefix is determined during the installation +process. If a non-GNU troff system is found, prefix @samp{g} is used, +none otherwise. @item GROFF_TMAC_PATH @tindex GROFF_TMAC_PATH@r{, environment variable} @@ -1395,8 +1387,7 @@ The directories specified with @code{gtroff}'s or @code{groff}'s @item @tindex GROFF_TMAC_PATH@r{, environment variable} -The directories given in the @env{GROFF_TMAC_PATH} environment -variable. +The directories given in the @env{GROFF_TMAC_PATH} environment variable. @item @cindex safer mode @@ -1424,13 +1415,13 @@ directory, and the main tmac directory; the default locations are @Example /usr/local/lib/groff/site-tmac /usr/local/share/groff/site-tmac -/usr/local/share/groff/1.18.2/tmac +/usr/local/share/groff/1.20.1/tmac @endExample @noindent -assuming that the version of @code{groff} is 1.18.2, and the installation -prefix was @file{/usr/local}. It is possible to fine-tune those -directories during the installation process. +assuming that the version of @code{groff} is 1.20.1, and the +installation prefix was @file{/usr/local}. It is possible to fine-tune +those directories during the installation process. @end itemize @@ -1455,10 +1446,10 @@ are @samp{TR}, @samp{TB}, @samp{TI}, and @samp{TBI}. @cindex font path @cindex path, for font files All font files are kept in the @dfn{font directories} which constitute -the @dfn{font path}. The file search functions will always append the +the @dfn{font path}. The file search functions always append the directory @code{dev}@var{name}, where @var{name} is the name of the -output device. Assuming, say, DVI output, and @file{/foo/bar} as a -font directory, the font files for @code{grodvi} must be in +output device. Assuming, say, DVI output, and @file{/foo/bar} as a font +directory, the font files for @code{grodvi} must be in @file{/foo/bar/devdvi}. The elements of the search path for font files are (in that order): @@ -1471,8 +1462,7 @@ preprocessors also have this option. @item @tindex GROFF_FONT_PATH@r{, environment variable} -The directories given in the @env{GROFF_FONT_PATH} environment -variable. +The directories given in the @env{GROFF_FONT_PATH} environment variable. @item @cindex site-specific directory @@ -1482,13 +1472,13 @@ locations are @Example /usr/local/share/groff/site-font -/usr/local/share/groff/1.18.2/font +/usr/local/share/groff/1.20.1/font @endExample @noindent -assuming that the version of @code{groff} is 1.18.2, and the installation -prefix was @file{/usr/local}. It is possible to fine-tune those -directories during the installation process. +assuming that the version of @code{groff} is 1.20.1, and the +installation prefix was @file{/usr/local}. It is possible to fine-tune +those directories during the installation process. @end itemize @@ -1606,12 +1596,13 @@ generates one or more of the options @option{-e}, @option{-man}, @option{-mdoc-old}, @option{-p}, @option{-R}, @option{-g}, @option{-G}, @option{-s}, and @option{-t}. -A special file name@tie{}@file{-} refers to the standard input. Specifying -no files also means to read the standard input. Any specified options -are included in the printed command. No space is allowed between -options and their arguments. The only options recognized are -@option{-C} (which is also passed on) to enable compatibility mode, and -@option{-v} to print the version number and exit. +A special file name@tie{}@file{-} refers to the standard input. +Specifying no files also means to read the standard input. Any +specified options are included in the printed command. No space is +allowed between options and their arguments. The only options +recognized are @option{-C} (which is also passed on) to enable +compatibility mode, and @option{-v} to print the version number and +exit. For example, @@ -1766,14 +1757,12 @@ can occur where not wanted, such as ``@w{mother- in}-law''. @cindex spacing @code{gtroff} double-spaces output text automatically if you use the request @w{@samp{.ls 2}}. Reactivate single-spaced mode by typing -@w{@samp{.ls 1}}.@footnote{If you need finer granularity of the -vertical space, use the @code{pvs} request (@pxref{Changing Type -Sizes}).} +@w{@samp{.ls 1}}.@footnote{If you need finer granularity of the vertical +space, use the @code{pvs} request (@pxref{Changing Type Sizes}).} -A number of requests allow to change the way the output looks, -sometimes called the @dfn{layout} of the output page. Most of these -requests adjust the placing of @dfn{whitespace} (blank lines or -spaces). +A number of requests allow to change the way the output looks, sometimes +called the @dfn{layout} of the output page. Most of these requests +adjust the placing of @dfn{whitespace} (blank lines or spaces). @cindex new page (@code{bp}) The @code{bp} request starts a new page, causing a line break. @@ -1860,12 +1849,12 @@ the following categories. @subsection Paragraphs @cindex paragraphs -One of the most common and most used capability is starting a -paragraph. There are a number of different types of paragraphs, any -of which can be initiated with macros supplied by the macro package. -Normally, paragraphs start with a blank line and the first line -indented, like the text in this manual. There are also block style -paragraphs, which omit the indentation: +One of the most common and most used capability is starting a paragraph. +There are a number of different types of paragraphs, any of which can be +initiated with macros supplied by the macro package. Normally, +paragraphs start with a blank line and the first line indented, like the +text in this manual. There are also block style paragraphs, which omit +the indentation: @Example Some men look at constitutions with sanctimonious @@ -1916,12 +1905,12 @@ supply macros for starting chapters and appendices. @subsection Headers and Footers Every macro package gives some way to manipulate the @dfn{headers} and -@dfn{footers} (also called @dfn{titles}) on each page. This is text -put at the top and bottom of each page, respectively, which contain -data like the current page number, the current chapter title, and so -on. Its appearance is not affected by the running text. Some packages -allow for different ones on the even and odd pages (for material printed -in a book form). +@dfn{footers} (also called @dfn{titles}) on each page. This is text put +at the top and bottom of each page, respectively, which contain data +like the current page number, the current chapter title, and so on. Its +appearance is not affected by the running text. Some packages allow for +different ones on the even and odd pages (for material printed in a book +form). The titles are called @dfn{three-part titles}, that is, there is a left-justified part, a centered part, and a right-justified part. An @@ -1942,9 +1931,9 @@ other details about the appearance of the printed pages. @subsection Displays @cindex displays -@dfn{Displays} are sections of text to be set off from the body of -the paper. Major quotes, tables, and figures are types of displays, as -are all the examples used in this document. +@dfn{Displays} are sections of text to be set off from the body of the +paper. Major quotes, tables, and figures are types of displays, as are +all the examples used in this document. @cindex quotes, major @cindex major quotes @@ -1965,9 +1954,9 @@ not. @cindex keep, floating @cindex floating keep -@dfn{Floating keeps} move relative to the text. Hence, they are good for -things which are referred to by name, such as ``See figure@tie{}3''. A -floating keep appears at the bottom of the current page if it fits; +@dfn{Floating keeps} move relative to the text. Hence, they are good +for things which are referred to by name, such as ``See figure@tie{}3''. +A floating keep appears at the bottom of the current page if it fits; otherwise, it appears at the top of the next page. Meanwhile, the surrounding text `flows' around the keep, thus leaving no blank areas. @@ -2065,9 +2054,9 @@ extend their functionality. For example, all macro packages mark tables (which are processed with @code{gtbl}) by placing them between @code{TS} and @code{TE} macros. -The @file{ms} macro package has an option, @samp{.TS@tie{}H}, that prints -a caption at the top of a new page (when the table is too long to fit on -a single page). +The @file{ms} macro package has an option, @samp{.TS@tie{}H}, that +prints a caption at the top of a new page (when the table is too long to +fit on a single page). @c --------------------------------------------------------------------- @@ -2091,15 +2080,16 @@ to changing the appearance of section headers. This chapter documents the main macro packages that come with @code{groff}. -Different main macro packages can't be used at the same time; for example +Different main macro packages can't be used at the same time; for +example @Example groff -m man foo.man -m ms bar.doc @endExample @noindent -doesn't work. Note that option arguments are processed before non-option -arguments; the above (failing) sample is thus reordered to +doesn't work. Note that option arguments are processed before +non-option arguments; the above (failing) sample is thus reordered to @Example groff -m man -m ms foo.man bar.doc @@ -2159,8 +2149,8 @@ It is possible to use @samp{-man} instead of @w{@samp{-m man}}. @table @code @item -rcR=1 This option (the default if a TTY output device is used) creates a -single, very long page instead of multiple pages. Use @code{-rcR=0} -to disable it. +single, very long page instead of multiple pages. Use @code{-rcR=0} to +disable it. @item -rC1 If more than one manual page is given on the command line, number the @@ -2177,37 +2167,36 @@ relative to the bottom. The default is @minus{}0.5@dmn{i}. @item -rHY=@var{flags} Set hyphenation flags. Possible values are 1@tie{}to hyphenate without -restrictions, 2@tie{} to not hyphenate the last word on a page, -4@tie{}to not hyphenate the last two characters of a word, and -8@tie{}to not hyphenate the first two characters of a word. These -values are additive; the default is@tie{}14. +restrictions, 2@tie{}to not hyphenate the last word on a page, 4@tie{}to +not hyphenate the last two characters of a word, and 8@tie{}to not +hyphenate the first two characters of a word. These values are +additive; the default is@tie{}14. @item -rIN=@var{length} -Set the body text indentation to @var{length}. -If not specified, the indentation defaults to 7@dmn{n} -(7@tie{}characters) in nroff mode and 7.2@dmn{n} otherwise. -For nroff, this value should always be an integer multiple of unit @samp{n} -to get consistent indentation. +Set the body text indentation to @var{length}. If not specified, the +indentation defaults to 7@dmn{n} (7@tie{}characters) in nroff mode and +7.2@dmn{n} otherwise. For nroff, this value should always be an integer +multiple of unit @samp{n} to get consistent indentation. @item -rLL=@var{length} -Set line length to @var{length}. If not specified, the line length -is set to respect any value set by a prior @samp{ll} request (which -@emph{must} be in effect when the @samp{TH} macro is invoked), if -this differs from the built-in default for the formatter; otherwise it -defaults to 78@dmn{n} in nroff mode (this is 78 characters per -line) and 6.5@dmn{i} in troff mode.@footnote{Note that the use of -a @samp{.ll @var{length}} request to initialize the line length, prior -to use of the @samp{TH} macro, is supported for backward compatibility -with some versions of the @code{man} program. @emph{Always} use the -@option{-rLL=@var{length}} option, or an equivalent @samp{.nr LL @var{length}} -request, in preference to such a @samp{.ll @var{length}} request. -In particular, note that in nroff mode, the request @samp{.ll 65n}, -(with any @var{length} expression which evaluates equal to 65@dmn{n}, -i.e., the formatter's default line length in nroff mode), will @emph{not} -set the line length to 65@dmn{n} (it will be adjusted to the @code{man} -macro package's default setting of 78@dmn{n}), whereas the use of the -@option{-rLL=65n} option, or the @samp{.nr LL 65n} -request @emph{will} establish a line length of 65@dmn{n}.} +Set line length to @var{length}. If not specified, the line length is +set to respect any value set by a prior @samp{ll} request (which +@emph{must} be in effect when the @samp{TH} macro is invoked), if this +differs from the built-in default for the formatter; otherwise it +defaults to 78@dmn{n} in nroff mode (this is 78 characters per line) and +6.5@dmn{i} in troff mode.@footnote{Note that the use of a @samp{.ll +@var{length}} request to initialize the line length, prior to use of the +@samp{TH} macro, is supported for backward compatibility with some +versions of the @code{man} program. @emph{Always} use the +@option{-rLL=@var{length}} option, or an equivalent @samp{.nr LL +@var{length}} request, in preference to such a @samp{.ll @var{length}} +request. In particular, note that in nroff mode, the request @samp{.ll +65n}, (with any @var{length} expression which evaluates equal to +65@dmn{n}, i.e., the formatter's default line length in nroff mode), +does @emph{not} set the line length to 65@dmn{n} (it is adjusted to the +@code{man} macro package's default setting of 78@dmn{n}), whereas the +use of the @option{-rLL=65n} option, or the @samp{.nr LL 65n} request +@emph{does} establish a line length of 65@dmn{n}.} @item -rLT=@var{length} Set title length to @var{length}. If not specified, the title length @@ -2221,8 +2210,8 @@ Use @var{xx} (which can be 10, 11, or@tie{}12@dmn{pt}) as the base document font size instead of the default value of@tie{}10@dmn{pt}. @item -rSN=@var{length} -Set the indentation for sub-subheadings to @var{length}. -If not specified, the indentation defaults to 3@dmn{n}. +Set the indentation for sub-subheadings to @var{length}. If not +specified, the indentation defaults to 3@dmn{n}. @item -rX@var{nnn} After page @var{nnn}, number pages as @var{nnn}a, @var{nnn}b, @@ -2246,8 +2235,8 @@ package. @Defmac {TH, title section [@Var{extra1} [@Var{extra2} [@Var{extra3}]]], man} Set the title of the man page to @var{title} and the section to @var{section}, which must have a value between 1 and@tie{}8. The value -of @var{section} may also have a string appended, e.g.@: @samp{.pm}, -to indicate a specific subsection of the man pages. +of @var{section} may also have a string appended, e.g.@: @samp{.pm}, to +indicate a specific subsection of the man pages. Both @var{title} and @var{section} are positioned at the left and right in the header line (with @var{section} in parentheses immediately @@ -2257,37 +2246,38 @@ line (or at the left on even pages and at the right on odd pages if double-sided printing is active). @var{extra3} is centered in the header line. -For @acronym{HTML} output, headers and footers are completely suppressed. +For @acronym{HTML} and @acronym{XHTML} output, headers and footers are +completely suppressed. -Additionally, this macro starts a new page; the new line number is@tie{}1 -again (except if the @option{-rC1} option is given on the command line) --- this feature is intended only for formatting multiple man pages; a -single man page should contain exactly one @code{TH} macro at the -beginning of the file. +Additionally, this macro starts a new page; the new line number +is@tie{}1 again (except if the @option{-rC1} option is given on the +command line) -- this feature is intended only for formatting multiple +man pages; a single man page should contain exactly one @code{TH} macro +at the beginning of the file. @endDefmac @Defmac {SH, [@Var{heading}], man} Set up an unnumbered section heading sticking out to the left. Prints out all the text following @code{SH} up to the end of the line (or the -text in the next line if there is no argument to @code{SH}) in bold -face (or the font specified by the string @code{HF}), one size larger than -the base document size. Additionally, the left margin and the indentation -for the following text is reset to its default value. +text in the next line if there is no argument to @code{SH}) in bold face +(or the font specified by the string @code{HF}), one size larger than +the base document size. Additionally, the left margin and the +indentation for the following text is reset to its default value. @endDefmac @Defmac {SS, [@Var{heading}], man} Set up an unnumbered (sub)section heading. Prints out all the text following @code{SS} up to the end of the line (or the text in the next line if there is no argument to @code{SS}) in bold face (or the font -specified by the string @code{HF}), at the same size as the base document -size. Additionally, the left margin and the indentation for the -following text is reset to its default value. +specified by the string @code{HF}), at the same size as the base +document size. Additionally, the left margin and the indentation for +the following text is reset to its default value. @endDefmac @Defmac {TP, [@Var{nnn}], man} Set up an indented paragraph with label. The indentation is set to -@var{nnn} if that argument is supplied (the default unit is @samp{n} -if omitted), otherwise it is set to the previous indentation value +@var{nnn} if that argument is supplied (the default unit is @samp{n} if +omitted), otherwise it is set to the previous indentation value specified with @code{TP}, @code{IP}, or @code{HP} (or to the default value if none of them have been used yet). @@ -2295,34 +2285,34 @@ The first line of text following this macro is interpreted as a string to be printed flush-left, as it is appropriate for a label. It is not interpreted as part of a paragraph, so there is no attempt to fill the first line with text from the following input lines. Nevertheless, if -the label is not as wide as the indentation the paragraph starts -at the same line (but indented), continuing on the following lines. -If the label is wider than the indentation the descriptive part -of the paragraph begins on the line following the label, entirely -indented. Note that neither font shape nor font size of the label is -set to a default value; on the other hand, the rest of the text has -default font settings. +the label is not as wide as the indentation the paragraph starts at the +same line (but indented), continuing on the following lines. If the +label is wider than the indentation the descriptive part of the +paragraph begins on the line following the label, entirely indented. +Note that neither font shape nor font size of the label is set to a +default value; on the other hand, the rest of the text has default font +settings. @endDefmac @DefmacList {LP, , man} @DefmacItem {PP, , man} @DefmacListEnd {P, , man} -These macros are mutual aliases. Any of them causes a line break at -the current position, followed by a vertical space downwards by the -amount specified by the @code{PD} macro. The font size and shape are -reset to the default value (10@dmn{pt} roman if no @option{-rS} option -is given on the command line). Finally, the current left margin and the +These macros are mutual aliases. Any of them causes a line break at the +current position, followed by a vertical space downwards by the amount +specified by the @code{PD} macro. The font size and shape are reset to +the default value (10@dmn{pt} roman if no @option{-rS} option is given +on the command line). Finally, the current left margin and the indentation is restored. @endDefmac @Defmac {IP, [@Var{designator} [@Var{nnn}]], man} Set up an indented paragraph, using @var{designator} as a tag to mark -its beginning. The indentation is set to @var{nnn} if that argument -is supplied (default unit is @samp{n}), otherwise it is set to the -previous indentation value specified with @code{TP}, @code{IP}, or -@code{HP} (or the default value if none of them have been used yet). -Font size and face of the paragraph (but not the designator) are reset -to their default values. +its beginning. The indentation is set to @var{nnn} if that argument is +supplied (default unit is @samp{n}), otherwise it is set to the previous +indentation value specified with @code{TP}, @code{IP}, or @code{HP} (or +the default value if none of them have been used yet). Font size and +face of the paragraph (but not the designator) are reset to their +default values. To start an indented paragraph with a particular indentation but without a designator, use @samp{""} (two double quotes) as the first argument of @@ -2342,9 +2332,9 @@ For example, to start a paragraph with bullets as the designator and Set up a paragraph with hanging left indentation. The indentation is set to @var{nnn} if that argument is supplied (default unit is @samp{n}), otherwise it is set to the previous indentation value -specified with @code{TP}, @code{IP}, or @code{HP} (or the default -value if non of them have been used yet). Font size and face are reset -to their default values. +specified with @code{TP}, @code{IP}, or @code{HP} (or the default value +if non of them have been used yet). Font size and face are reset to +their default values. @endDefmac @Defmac {RS, [@Var{nnn}], man} @@ -2352,18 +2342,18 @@ to their default values. @cindex @code{man} macros, moving left margin Move the left margin to the right by the value @var{nnn} if specified (default unit is @samp{n}); otherwise it is set to the previous -indentation value specified with @code{TP}, @code{IP}, or @code{HP} -(or to the default value if none of them have been used yet). The +indentation value specified with @code{TP}, @code{IP}, or @code{HP} (or +to the default value if none of them have been used yet). The indentation value is then set to the default. Calls to the @code{RS} macro can be nested. @endDefmac @Defmac {RE, [@Var{nnn}], man} -Move the left margin back to level @var{nnn}, restoring the previous left -margin. If no argument is given, it moves one level back. The first -level (i.e., no call to @code{RS} yet) has number@tie{}1, and each call -to @code{RS} increases the level by@tie{}1. +Move the left margin back to level @var{nnn}, restoring the previous +left margin. If no argument is given, it moves one level back. The +first level (i.e., no call to @code{RS} yet) has number@tie{}1, and each +call to @code{RS} increases the level by@tie{}1. @endDefmac @cindex line breaks, with vertical space [@code{man}] @@ -2381,8 +2371,8 @@ vertical space. @cindex default indentation, resetting [@code{man}] @cindex indentaion, resetting to default [@code{man}] @cindex @code{man} macros, resetting default indentation -Finally, the macros @code{SH}, @code{SS}, @code{LP} (@code{PP}, @code{P}), -and @code{RS} reset the indentation to its default value. +Finally, the macros @code{SH}, @code{SS}, @code{LP} (@code{PP}, +@code{P}), and @code{RS} reset the indentation to its default value. @c --------------------------------------------------------------------- @@ -2391,9 +2381,9 @@ and @code{RS} reset the indentation to its default value. @cindex font selection [@code{man}] @cindex @code{man} macros, how to set fonts -The standard font is roman; the default text size is 10@tie{}point. -If command line option @option{-rS=@var{n}} is given, use -@var{n}@dmn{pt} as the default text size. +The standard font is roman; the default text size is 10@tie{}point. If +command line option @option{-rS=@var{n}} is given, use @var{n}@dmn{pt} +as the default text size. @Defmac {SM, [@Var{text}], man} Set the text on the same line or the text on the next line in a font @@ -2426,13 +2416,13 @@ between the arguments. @endDefmac @Defmac {RI, text, man} -Set its arguments alternately in roman and italic, without a space between -the arguments. +Set its arguments alternately in roman and italic, without a space +between the arguments. @endDefmac @Defmac {IR, text, man} -Set its arguments alternately in italic and roman, without a space between -the arguments. +Set its arguments alternately in italic and roman, without a space +between the arguments. @endDefmac @Defmac {BR, text, man} @@ -2481,22 +2471,21 @@ the tab positions have been changed. @cindex empty space before a paragraph [@code{man}] @cindex @code{man} macros, empty space before a paragraph Adjust the empty space before a new paragraph (or section). The -optional argument gives the amount of space (default unit is -@samp{v}); without parameter, the value is reset to its default value -(1@tie{}line in nroff mode, 0.4@dmn{v}@tie{}otherwise). +optional argument gives the amount of space (default unit is @samp{v}); +without parameter, the value is reset to its default value (1@tie{}line +in nroff mode, 0.4@dmn{v}@tie{}otherwise). This affects the macros @code{SH}, @code{SS}, @code{TP}, @code{LP} (as well as @code{PP} and @code{P}), @code{IP}, and @code{HP}. @endDefmac -The following two macros are included for -BSD compatibility. +The following two macros are included for BSD compatibility. @Defmac {AT, [@Var{system} [@Var{release}]], man} @cindex @code{man}macros, BSD compatibility -Alter the footer for use with @acronym{AT&T} manpages. -This command exists only for compatibility; don't use it. -The first argument @var{system} can be: +Alter the footer for use with @acronym{AT&T} manpages. This command +exists only for compatibility; don't use it. The first argument +@var{system} can be: @table @code @item 3 @@ -2515,9 +2504,8 @@ release number (such as ``System V Release 3''). @Defmac {UC, [@Var{version}], man} @cindex @code{man}macros, BSD compatibility -Alters the footer for use with @acronym{BSD} manpages. -This command exists only for compatibility; don't use it. -The argument can be: +Alters the footer for use with @acronym{BSD} manpages. This command +exists only for compatibility; don't use it. The argument can be: @table @code @item 3 @@ -2601,31 +2589,27 @@ and automatically call the right preprocessor(s). @subsection Optional @file{man} extensions @pindex man.local -Use the file @file{man.local} for local extensions -to the @code{man} macros or for style changes. +Use the file @file{man.local} for local extensions to the @code{man} +macros or for style changes. @unnumberedsubsubsec Custom headers and footers @cindex @code{man} macros, custom headers and footers -In groff versions 1.18.2 and later, you can specify custom -headers and footers by redefining the following macros in -@file{man.local}. +In groff versions 1.18.2 and later, you can specify custom headers and +footers by redefining the following macros in @file{man.local}. @Defmac {PT, , man} -Control the content of the headers. -Normally, the header prints the command name -and section number on either side, and the -optional fifth argument to @code{TH} in the center. +Control the content of the headers. Normally, the header prints the +command name and section number on either side, and the optional fifth +argument to @code{TH} in the center. @endDefmac @Defmac {BT, , man} -Control the content of the footers. -Normally, the footer prints the page number -and the third and fourth arguments to @code{TH}. +Control the content of the footers. Normally, the footer prints the +page number and the third and fourth arguments to @code{TH}. -Use the @code{FT} number register to specify the -footer position. -The default is @minus{}0.5@dmn{i}. +Use the @code{FT} number register to specify the footer position. The +default is @minus{}0.5@dmn{i}. @endDefmac @unnumberedsubsubsec Ultrix-specific man macros @@ -2633,12 +2617,10 @@ The default is @minus{}0.5@dmn{i}. @cindex @code{man} macros, Ultrix-specific @pindex man.ultrix -The @code{groff} source distribution includes -a file named @file{man.ultrix}, containing -macros compatible with the Ultrix variant of -@code{man}. -Copy this file into @file{man.local} (or use the @code{mso} request to -load it) to enable the following macros. +The @code{groff} source distribution includes a file named +@file{man.ultrix}, containing macros compatible with the Ultrix variant +of @code{man}. Copy this file into @file{man.local} (or use the +@code{mso} request to load it) to enable the following macros. @Defmac {CT, @Var{key}, man} Print @samp{}. @@ -2657,10 +2639,8 @@ End a non-filled display started with @code{Ds}. @endDefmac @Defmac {EX, [@Var{indent}], man} -Begins a non-filled display -using the constant width (Courier) typeface. -Use the optional @var{indent} argument to -indent the display. +Begin a non-filled display using the constant width (Courier) typeface. +Use the optional @var{indent} argument to indent the display. @endDefmac @Defmac {EE, , man} @@ -2668,24 +2648,21 @@ End a non-filled display started with @code{EX}. @endDefmac @Defmac {G, [@Var{text}], man} -Sets @var{text} in Helvetica. -If no text is present on the line where -the macro is called, then the text of the -next line appears in Helvetica. +Set @var{text} in Helvetica. If no text is present on the line where +the macro is called, then the text of the next line appears in +Helvetica. @endDefmac @Defmac {GL, [@Var{text}], man} -Sets @var{text} in Helvetica Oblique. -If no text is present on the line where -the macro is called, then the text of the -next line appears in Helvetica Oblique. +Set @var{text} in Helvetica Oblique. If no text is present on the line +where the macro is called, then the text of the next line appears in +Helvetica Oblique. @endDefmac @Defmac {HB, [@Var{text}], man} -Sets @var{text} in Helvetica Bold. -If no text is present on the line where -the macro is called, then all text up to -the next @code{HB} appears in Helvetica Bold. +Set @var{text} in Helvetica Bold. If no text is present on the line +where the macro is called, then all text up to the next @code{HB} +appears in Helvetica Bold. @endDefmac @Defmac {TB, [@Var{text}], man} @@ -2693,20 +2670,16 @@ Identical to @code{HB}. @endDefmac @Defmac {MS, @Var{title} @Var{sect} [@Var{punct}], man} -Set a manpage reference in Ultrix format. -The @var{title} is in Courier instead of italic. -Optional punctuation follows the section number without -an intervening space. +Set a manpage reference in Ultrix format. The @var{title} is in Courier +instead of italic. Optional punctuation follows the section number +without an intervening space. @endDefmac @Defmac {NT, [@code{C}] [@Var{title}], man} -Begin a note. -Print the optional @Var{title}, or the word ``Note'', -centered on the page. -Text following the macro makes up the body of the note, -and is indented on both sides. -If the first argument is @code{C}, the body of the -note is printed centered (the second argument replaces +Begin a note. Print the optional @Var{title}, or the word ``Note'', +centered on the page. Text following the macro makes up the body of the +note, and is indented on both sides. If the first argument is @code{C}, +the body of the note is printed centered (the second argument replaces the word ``Note'' if specified). @endDefmac @@ -2715,14 +2688,13 @@ End a note begun with @code{NT}. @endDefmac @Defmac {PN, @Var{path} [@Var{punct}], man} -Set the path name in constant width (Courier), -followed by optional punctuation. +Set the path name in constant width (Courier), followed by optional +punctuation. @endDefmac @Defmac {Pn, [@Var{punct}] @Var{path} [@Var{punct}], man} -When called with two arguments, identical to @code{PN}. -When called with three arguments, -set the second argument in constant width (Courier), +If called with two arguments, identical to @code{PN}. If called with +three arguments, set the second argument in constant width (Courier), bracketed by the first and third arguments in the current font. @endDefmac @@ -2735,9 +2707,8 @@ Print the string @samp{}. @endDefmac @Defmac {VS, [@code{4}], man} -Start printing a change bar in the margin if -the number @code{4} is specified. -Otherwise, this macro does nothing. +Start printing a change bar in the margin if the number@tie{}@code{4} is +specified. Otherwise, this macro does nothing. @endDefmac @Defmac {VE, , man} @@ -2746,10 +2717,9 @@ End printing the change bar begun by @code{VS}. @unnumberedsubsubsec Simple example -The following example @file{man.local} file -alters the @code{SH} macro to add some extra -vertical space before printing the heading. -Headings are printed in Helvetica Bold. +The following example @file{man.local} file alters the @code{SH} macro +to add some extra vertical space before printing the heading. Headings +are printed in Helvetica Bold. @Example .\" Make the heading fonts Helvetica @@ -2763,6 +2733,7 @@ Headings are printed in Helvetica Bold. .. @endExample + @c ===================================================================== @node mdoc, ms, man, Macro Packages @@ -2783,8 +2754,8 @@ at the command line). The @file{-ms} macros are suitable for reports, letters, books, user manuals, and so forth. The package provides macros for cover pages, -section headings, paragraphs, lists, footnotes, pagination, and a -table of contents. +section headings, paragraphs, lists, footnotes, pagination, and a table +of contents. @menu * ms Intro:: @@ -2804,14 +2775,14 @@ table of contents. The original @file{-ms} macros were included with @acronym{AT&T} @code{troff} as well as the @file{man} macros. While the @file{man} -package is intended for brief documents that can be read on-line as -well as printed, the @file{ms} macros are suitable for longer -documents that are meant to be printed rather than read on-line. +package is intended for brief documents that can be read on-line as well +as printed, the @file{ms} macros are suitable for longer documents that +are meant to be printed rather than read on-line. The @file{ms} macro package included with @code{groff} is a complete, -bottom-up re-implementation. Several macros (specific to -@acronym{AT&T} or Berkeley) are not included, while several new -commands are. @xref{Differences from AT&T ms}, for more information. +bottom-up re-implementation. Several macros (specific to @acronym{AT&T} +or Berkeley) are not included, while several new commands are. +@xref{Differences from AT&T ms}, for more information. @c --------------------------------------------------------------------- @@ -2833,8 +2804,8 @@ If you invoke the @code{RP} (report) macro on the first line of the document, @code{groff} prints the cover page information on its own page; otherwise it prints the information on the first page with your document text immediately following. Other document formats found in -@acronym{AT&T} @code{troff} are specific to @acronym{AT&T} or -Berkeley, and are not supported in @code{groff}. +@acronym{AT&T} @code{troff} are specific to @acronym{AT&T} or Berkeley, +and are not supported in @code{groff}. @item Format and layout By setting number registers, you can change your document's type (font @@ -2842,28 +2813,28 @@ and size), margins, spacing, headers and footers, and footnotes. @xref{ms Document Control Registers}, for more details. @item Cover page -A cover page consists of a title, the author's name and institution, -an abstract, and the date.@footnote{Actually, only the title is -required.} @xref{ms Cover Page Macros}, for more details. +A cover page consists of a title, the author's name and institution, an +abstract, and the date.@footnote{Actually, only the title is required.} +@xref{ms Cover Page Macros}, for more details. @item Body Following the cover page is your document. You can use the @file{ms} macros to write reports, letters, books, and so forth. The package is -designed for structured documents, consisting of paragraphs -interspersed with headings and augmented by lists, footnotes, tables, -and other common constructs. @xref{ms Body Text}, for more details. +designed for structured documents, consisting of paragraphs interspersed +with headings and augmented by lists, footnotes, tables, and other +common constructs. @xref{ms Body Text}, for more details. @item Table of contents Longer documents usually include a table of contents, which you can -invoke by placing the @code{TC} macro at the end of your document. -The @file{ms} macros have minimal indexing facilities, consisting of -the @code{IX} macro, which prints an entry on standard error. -Printing the table of contents at the end is necessary since -@code{groff} is a single-pass text formatter, thus it cannot determine -the page number of each section until that section has actually been -set and printed. Since @file{ms} output is intended for hardcopy, you -can manually relocate the pages containing the table of contents -between the cover page and the body text after printing. +invoke by placing the @code{TC} macro at the end of your document. The +@file{ms} macros have minimal indexing facilities, consisting of the +@code{IX} macro, which prints an entry on standard error. Printing the +table of contents at the end is necessary since @code{groff} is a +single-pass text formatter, thus it cannot determine the page number of +each section until that section has actually been set and printed. +Since @file{ms} output is intended for hardcopy, you can manually +relocate the pages containing the table of contents between the cover +page and the body text after printing. @end table @c --------------------------------------------------------------------- @@ -2874,10 +2845,9 @@ between the cover page and the body text after printing. The following is a list of document control number registers. For the sake of consistency, set registers related to margins at the beginning -of your document, or just after the @code{RP} macro. You can set -other registers later in your document, but you should keep them -together at the beginning to make them easy to find and edit as -necessary. +of your document, or just after the @code{RP} macro. You can set other +registers later in your document, but you should keep them together at +the beginning to make them easy to find and edit as necessary. @unnumberedsubsubsec Margin Settings @@ -2927,9 +2897,9 @@ Default: 1@dmn{i}. @unnumberedsubsubsec Text Settings @Defmpreg {PS, ms} -Defines the point size of the body text. If the value is larger than -or equal to 1000, divide it by 1000 to get a fractional point size. -For example, @samp{.nr PS 10250} sets the document's point size to +Defines the point size of the body text. If the value is larger than or +equal to 1000, divide it by 1000 to get a fractional point size. For +example, @samp{.nr PS 10250} sets the document's point size to 10.25@dmn{p}. Effective: next paragraph. @@ -2949,12 +2919,11 @@ Default: 12@dmn{p}. @endDefmpreg @Defmpreg {PSINCR, ms} -Defines an increment in point size, which will be applied to section -headings at nesting levels below the value specified in @code{GROWPS}. -The value of @code{PSINCR} should be specified in points, with the -@dmn{p} scaling factor, and may include a fractional component; for -example, @w{@samp{.nr PSINCR 1.5p}} sets a point size increment of -1.5@dmn{p}. +Defines an increment in point size, which is applied to section headings +at nesting levels below the value specified in @code{GROWPS}. The value +of @code{PSINCR} should be specified in points, with the @dmn{p} scaling +factor, and may include a fractional component; for example, +@w{@samp{.nr PSINCR 1.5p}} sets a point size increment of 1.5@dmn{p}. Effective: next section heading. @@ -2964,11 +2933,11 @@ Default: 1@dmn{p}. @Defmpreg {GROWPS, ms} Defines the heading level below which the point size increment set by @code{PSINCR} becomes effective. Section headings at and above the -level specified by @code{GROWPS} will be printed at the point size set -by @code{PS}; for each level below the value of @code{GROWPS}, the -point size will be increased in steps equal to the value of -@code{PSINCR}. Setting @code{GROWPS} to any value less than@tie{}2 -disables the incremental heading size feature. +level specified by @code{GROWPS} are printed at the point size set by +@code{PS}; for each level below the value of @code{GROWPS}, the point +size is increased in steps equal to the value of @code{PSINCR}. Setting +@code{GROWPS} to any value less than@tie{}2 disables the incremental +heading size feature. Effective: next section heading. @@ -2977,8 +2946,8 @@ Default: 0. @Defmpreg {HY, ms} Defines the hyphenation level. @code{HY} sets safely the value of the -low-level @code{hy} register. Setting the value of @code{HY} -to@tie{}0 is equivalent to using the @code{nh} request. +low-level @code{hy} register. Setting the value of @code{HY} to@tie{}0 +is equivalent to using the @code{nh} request. Effective: next paragraph. @@ -3022,11 +2991,11 @@ Default: 5@dmn{n}. @Defmpreg {PORPHANS, ms} Defines the minimum number of initial lines of any paragraph which -should be kept together, to avoid orphan lines at the bottom of a -page. If a new paragraph is started close to the bottom of a page, -and there is insufficient space to accommodate @code{PORPHANS} lines -before an automatic page break, then the page break will be forced, -before the start of the paragraph. +should be kept together, to avoid orphan lines at the bottom of a page. +If a new paragraph is started close to the bottom of a page, and there +is insufficient space to accommodate @code{PORPHANS} lines before an +automatic page break, then the page break is forced, before the start of +the paragraph. Effective: next paragraph. @@ -3036,11 +3005,11 @@ Default: 1. @Defmpreg {HORPHANS, ms} Defines the minimum number of lines of the following paragraph which should be kept together with any section heading introduced by the -@code{NH} or @code{SH} macros. If a section heading is placed close -to the bottom of a page, and there is insufficient space to -accommodate both the heading and at least @code{HORPHANS} lines of the -following paragraph, before an automatic page break, then the page -break will be forced before the heading. +@code{NH} or @code{SH} macros. If a section heading is placed close to +the bottom of a page, and there is insufficient space to accommodate +both the heading and at least @code{HORPHANS} lines of the following +paragraph, before an automatic page break, then the page break is forced +before the heading. Effective: next paragraph. @@ -3131,14 +3100,13 @@ Default: 2@dmn{n}. @cindex @code{ms} macros, cover page @cindex cover page macros, [@code{ms}] -Use the following macros to create a cover page for your document in -the order shown. +Use the following macros to create a cover page for your document in the +order shown. @Defmac {RP, [@code{no}], ms} Specifies the report format for your document. The report format -creates a separate cover page. The default action (no @code{RP} -macro) is to print a subset of the cover page on page@tie{}1 of your -document. +creates a separate cover page. The default action (no @code{RP} macro) +is to print a subset of the cover page on page@tie{}1 of your document. If you use the word @code{no} as an optional argument, @code{groff} prints a title page but does not repeat any of the title page @@ -3164,8 +3132,8 @@ the default for @code{troff}. @endDefmac @Defmac {TL, , ms} -Specifies the document title. @code{groff} collects text following -the @code{TL} macro into the title, until reaching the author name or +Specifies the document title. @code{groff} collects text following the +@code{TL} macro into the title, until reaching the author name or abstract. @endDefmac @@ -3245,8 +3213,8 @@ user demand. @subsection Body text @cindex @code{ms} macros, body text -This section describes macros used to mark up the body of your -document. Examples include paragraphs, sections, and other groups. +This section describes macros used to mark up the body of your document. +Examples include paragraphs, sections, and other groups. @menu * Paragraphs in ms:: @@ -3331,17 +3299,17 @@ printing of orphan lines at the bottom of any page. @subsubsection Headings @cindex @code{ms} macros, headings -Use headings to create a hierarchical structure for your document. -The @file{ms} macros print headings in @strong{bold}, using the same -font family and point size as the body text. +Use headings to create a hierarchical structure for your document. The +@file{ms} macros print headings in @strong{bold}, using the same font +family and point size as the body text. The following describes the heading macros: @DefmacList {NH, @Var{curr-level}, ms} @DefmacListEnd {NH, @t{S} @Var{level0} @dots{}, ms} -Numbered heading. The argument is either a numeric argument to -indicate the level of the heading, or the letter@tie{}@code{S} -followed by numeric arguments to set the heading level explicitly. +Numbered heading. The argument is either a numeric argument to indicate +the level of the heading, or the letter@tie{}@code{S} followed by +numeric arguments to set the heading level explicitly. If you specify heading levels out of sequence, such as invoking @samp{.NH 3} after @samp{.NH 1}, @code{groff} prints a warning on @@ -3352,38 +3320,52 @@ standard error. @DefstrItem {SN-DOT, ms} @DefstrListEnd {SN-NO-DOT, ms} After invocation of @code{NH}, the assigned section number is made -available in the strings @code{SN-DOT} (exactly as it appears in the -printed section heading) and @code{SN-NO-DOT} (with the final period -omitted). The string @code{SN} is also defined, as an alias for -@code{SN-DOT}; if preferred, you may redefine it as an alias for -@code{SN-NO-DOT}, by including the initialization - +available in the strings @code{SN-DOT} (as it appears in a printed +section heading with default formatting, followed by a terminating +period), and @code{SN-NO-DOT} (with the terminating period omitted). +The string @code{SN} is also defined, as an alias for @code{SN-DOT}; if +preferred, you may redefine it as an alias for @code{SN-NO-DOT}, by +including the initialization @Example -.ds SN-NO-DOT .als SN SN-NO-DOT @endExample @noindent -@strong{before} your first use of @code{NH}, or simply +at any time @strong{before} you would like the change to take effect. +@endDefstr +@Defstr {SN-STYLE, ms} +You may control the style used to print section numbers, within numbered +section headings, by defining an appropriate alias for the string +@code{SN-STYLE}. The default style, in which the printed section number +is followed by a terminating period, is obtained by defining the alias @Example -.als SN SN-NO-DOT +.als SN-STYLE SN-DOT @endExample @noindent -@strong{after} your first use of @code{NH}. +If you prefer to omit the terminating period, from section numbers +appearing in numbered section headings, you may define the alias +@Example +.als SN-STYLE SN-NO-DOT +@endExample + +@noindent +Any such change in section numbering style becomes effective from the +next use of @code{.NH}, following redefinition of the alias for +@code{SN-STYLE}. @endDefstr @Defmac {SH, [@Var{match-level}], ms} Unnumbered subheading. The optional @var{match-level} argument is a GNU extension. It is a -number indicating the level of the heading, in a manner analogous to -the @var{curr-level} argument to @code{.NH}. Its purpose is to match -the point size, at which the heading is printed, to the size of a -numbered heading at the same level, when the @code{GROWPS} and -@code{PSINCR} heading size adjustment mechanism is in effect. -@xref{ms Document Control Registers}. +number indicating the level of the heading, in a manner analogous to the +@var{curr-level} argument to @code{.NH}. Its purpose is to match the +point size, at which the heading is printed, to the size of a numbered +heading at the same level, when the @code{GROWPS} and @code{PSINCR} +heading size adjustment mechanism is in effect. @xref{ms Document +Control Registers}. @endDefmac The @code{HORPHANS} register (@pxref{ms Document Control Registers}) @@ -3401,12 +3383,12 @@ The @file{ms} macros provide a variety of methods to highlight or emphasize text: @Defmac {B, [@Var{txt} [@Var{post} [@Var{pre}]]], ms} -Sets its first argument in @strong{bold type}. If you specify a -second argument, @code{groff} prints it in the previous font after the -bold text, with no intervening space (this allows you to set -punctuation after the highlighted text without highlighting the -punctuation). Similarly, it prints the third argument (if any) in the -previous font @strong{before} the first argument. For example, +Sets its first argument in @strong{bold type}. If you specify a second +argument, @code{groff} prints it in the previous font after the bold +text, with no intervening space (this allows you to set punctuation +after the highlighted text without highlighting the punctuation). +Similarly, it prints the third argument (if any) in the previous font +@strong{before} the first argument. For example, @Example .B foo ) ( @@ -3484,10 +3466,9 @@ superscript. The @code{IP} macro handles duties for all lists. @Defmac {IP, [@Var{marker} [@Var{width}]], ms} -The @var{marker} is usually a bullet glyph (@code{\[bu]}) for -unordered lists, a number (or auto-incrementing number register) for -numbered lists, or a word or phrase for indented (glossary-style) -lists. +The @var{marker} is usually a bullet glyph (@code{\[bu]}) for unordered +lists, a number (or auto-incrementing number register) for numbered +lists, or a word or phrase for indented (glossary-style) lists. The @var{width} specifies the indentation for the body of each list item; its default unit is @samp{n}. Once specified, the indentation @@ -3586,10 +3567,10 @@ money In the last example, the @code{IP} macro places the definition on the same line as the term if it has enough space; otherwise, it breaks to -the next line and starts the definition below the term. This may or -may not be the effect you want, especially if some of the definitions -break and some do not. The following examples show two possible ways -to force a break. +the next line and starts the definition below the term. This may or may +not be the effect you want, especially if some of the definitions break +and some do not. The following examples show two possible ways to force +a break. The first workaround uses the @code{br} request to force a break after printing the term or label. @@ -3608,9 +3589,9 @@ Gotta pay for those lawyers and guns! @endExample The second workaround uses the @code{\p} escape to force the break. -Note the space following the escape; this is important. If you omit -the space, @code{groff} prints the first word on the same line as the -term or label (if it fits) @strong{then} breaks the line. +Note the space following the escape; this is important. If you omit the +space, @code{groff} prints the first word on the same line as the term +or label (if it fits) @strong{then} breaks the line. @Example @cartouche @@ -3667,15 +3648,15 @@ o Guns @node Indentation values in ms, Tabstops in ms, Lists in ms, ms Body Text @subsubsection Indentation values -In many situations, you may need to indentation a section of text -while still wrapping and filling. @xref{Lists in ms}, for an example -of nested lists. +In many situations, you may need to indentation a section of text while +still wrapping and filling. @xref{Lists in ms}, for an example of +nested lists. @DefmacList {RS, , ms} @DefmacListEnd {RE, , ms} -These macros begin and end an indented section. The @code{PI} -register controls the amount of indentation, allowing the indented -text to line up under hanging and indented paragraphs. +These macros begin and end an indented section. The @code{PI} register +controls the amount of indentation, allowing the indented text to line +up under hanging and indented paragraphs. @endDefmac @xref{ms Displays and Keeps}, for macros to indentation and turn off @@ -3686,13 +3667,13 @@ filling. @node Tabstops in ms, ms Displays and Keeps, Indentation values in ms, ms Body Text @subsubsection Tab Stops -Use the @code{ta} request to define tab stops as needed. @xref{Tabs -and Fields}. +Use the @code{ta} request to define tab stops as needed. @xref{Tabs and +Fields}. -@Defmac{TA, , ms} +@Defmac {TA, , ms} Use this macro to reset the tab stops to the default for @file{ms} -(every 5n). You can redefine the @code{TA} macro to create a -different set of default tab stops. +(every 5n). You can redefine the @code{TA} macro to create a different +set of default tab stops. @endDefmac @c --------------------------------------------------------------------- @@ -3707,9 +3688,9 @@ different set of default tab stops. Use displays to show text-based examples or figures (such as code listings). -Displays turn off filling, so lines of code are displayed as-is -without inserting @code{br} requests in between each line. Displays -can be @dfn{kept} on a single page, or allowed to break across pages. +Displays turn off filling, so lines of code are displayed as-is without +inserting @code{br} requests in between each line. Displays can be +@dfn{kept} on a single page, or allowed to break across pages. @DefmacList {DS, @t{L}, ms} @DefmacItem {LD, , ms} @@ -3723,21 +3704,20 @@ ends the display. @DefmacList {DS, @t{I}, ms} @DefmacItem {ID, , ms} @DefmacListEnd {DE, , ms} -Indents the display as defined by the @code{DI} register. The -@samp{.DS I} call generates a page break, if necessary, to keep the -entire display on one page. The @code{ID} macro allows the display to -break across pages. The @code{DE} macro ends the display. +Indents the display as defined by the @code{DI} register. The @samp{.DS +I} call generates a page break, if necessary, to keep the entire display +on one page. The @code{ID} macro allows the display to break across +pages. The @code{DE} macro ends the display. @endDefmac @DefmacList {DS, @t{B}, ms} @DefmacItem {BD, , ms} @DefmacListEnd {DE, , ms} -Sets a block-centered display: the entire display is left-justified, -but indented so that the longest line in the display is centered on -the page. The @samp{.DS B} call generates a page break, if necessary, -to keep the entire display on one page. The @code{BD} macro allows -the display to break across pages. The @code{DE} macro ends the -display. +Sets a block-centered display: the entire display is left-justified, but +indented so that the longest line in the display is centered on the +page. The @samp{.DS B} call generates a page break, if necessary, to +keep the entire display on one page. The @code{BD} macro allows the +display to break across pages. The @code{DE} macro ends the display. @endDefmac @DefmacList {DS, @t{C}, ms} @@ -3753,9 +3733,9 @@ break across pages. The @code{DE} macro ends the display. @DefmacItem {RD, , ms} @DefmacListEnd {DE, , ms} Right-justifies each line in the display. The @samp{.DS R} call -generates a page break, if necessary, to keep the entire display on -one page. The @code{RD} macro allows the display to break across -pages. The @code{DE} macro ends the display. +generates a page break, if necessary, to keep the entire display on one +page. The @code{RD} macro allows the display to break across pages. +The @code{DE} macro ends the display. @endDefmac @DefmacList {Ds, , ms} @@ -3763,10 +3743,10 @@ pages. The @code{DE} macro ends the display. These two macros were formerly provided as aliases for @code{DS} and @code{DE}, respectively. They have been removed, and should no longer be used. The original implementations of @code{DS} and @code{DE} are -retained, and should be used instead. X11 documents which actually -use @code{Ds} and @code{De} always load a specific macro file from the -X11 distribution (@file{macros.t}) which provides proper definitions -for the two macros. +retained, and should be used instead. X11 documents which actually use +@code{Ds} and @code{De} always load a specific macro file from the X11 +distribution (@file{macros.t}) which provides proper definitions for the +two macros. @endDefmac On occasion, you may want to @dfn{keep} other text together on a page. @@ -3777,34 +3757,33 @@ macros for this purpose. @DefmacList {KS, , ms} @DefmacListEnd {KE, , ms} -The @code{KS} macro begins a block of text to be kept on a single -page, and the @code{KE} macro ends the block. +The @code{KS} macro begins a block of text to be kept on a single page, +and the @code{KE} macro ends the block. @endDefmac @DefmacList {KF, , ms} @DefmacListEnd {KE, , ms} Specifies a @dfn{floating keep}; if the keep cannot fit on the current page, @code{groff} holds the contents of the keep and allows text -following the keep (in the source file) to fill in the remainder of -the current page. When the page breaks, whether by an explicit -@code{bp} request or by reaching the end of the page, @code{groff} -prints the floating keep at the top of the new page. This is useful -for printing large graphics or tables that do not need to appear -exactly where specified. +following the keep (in the source file) to fill in the remainder of the +current page. When the page breaks, whether by an explicit @code{bp} +request or by reaching the end of the page, @code{groff} prints the +floating keep at the top of the new page. This is useful for printing +large graphics or tables that do not need to appear exactly where +specified. @endDefmac -You can also use the @code{ne} request to force a page break if there -is not enough vertical space remaining on the page. +You can also use the @code{ne} request to force a page break if there is +not enough vertical space remaining on the page. -Use the following macros to draw a box around a section of text (such -as a display). +Use the following macros to draw a box around a section of text (such as +a display). @DefmacList {B1, , ms} @DefmacListEnd {B2, , ms} Marks the beginning and ending of text that is to have a box drawn -around it. The @code{B1} macro begins the box; the @code{B2} macro -ends it. Text in the box is automatically placed in a diversion -(keep). +around it. The @code{B1} macro begins the box; the @code{B2} macro ends +it. Text in the box is automatically placed in a diversion (keep). @endDefmac @c --------------------------------------------------------------------- @@ -3826,23 +3805,23 @@ The @file{ms} macros support the standard @code{groff} preprocessors: @pindex pic @pindex eqn @pindex refer -You mark text meant for preprocessors by enclosing it -in pairs of tags as follows. +You mark text meant for preprocessors by enclosing it in pairs of tags +as follows. @DefmacList {TS, [@code{H}], ms} @DefmacListEnd {TE, , ms} Denotes a table, to be processed by the @code{tbl} preprocessor. The optional argument@tie{}@code{H} to @code{TS} instructs @code{groff} to -create a running header with the information up to the @code{TH} -macro. @code{groff} prints the header at the beginning of the table; -if the table runs onto another page, @code{groff} prints the header on -the next page as well. +create a running header with the information up to the @code{TH} macro. +@code{groff} prints the header at the beginning of the table; if the +table runs onto another page, @code{groff} prints the header on the next +page as well. @endDefmac @DefmacList {PS, , ms} @DefmacListEnd {PE, , ms} -Denotes a graphic, to be processed by the @code{pic} preprocessor. -You can create a @code{pic} file by hand, using the @acronym{AT&T} +Denotes a graphic, to be processed by the @code{pic} preprocessor. You +can create a @code{pic} file by hand, using the @acronym{AT&T} @code{pic} manual available on the Web as a reference, or by using a graphics program such as @code{xfig}. @endDefmac @@ -3901,8 +3880,8 @@ l | l . @cindex footnotes [@code{ms}] The @file{ms} macro package has a flexible footnote system. You can -specify either numbered footnotes or symbolic footnotes (that is, -using a marker such as a dagger symbol). +specify either numbered footnotes or symbolic footnotes (that is, using +a marker such as a dagger symbol). @Defstr {*, ms} Specifies the location of a numbered footnote marker in the text. @@ -3912,14 +3891,13 @@ Specifies the location of a numbered footnote marker in the text. @DefmacListEnd {FE, , ms} Specifies the text of the footnote. The default action is to create a numbered footnote; you can create a symbolic footnote by specifying a -@dfn{mark} glyph (such as @code{\[dg]} for the dagger glyph) in the -body text and as an argument to the @code{FS} macro, followed by the -text of the footnote and the @code{FE} macro. +@dfn{mark} glyph (such as @code{\[dg]} for the dagger glyph) in the body +text and as an argument to the @code{FS} macro, followed by the text of +the footnote and the @code{FE} macro. @endDefmac -You can control how @code{groff} prints footnote numbers by changing -the value of the @code{FF} register. @xref{ms Document Control -Registers}. +You can control how @code{groff} prints footnote numbers by changing the +value of the @code{FF} register. @xref{ms Document Control Registers}. @cindex footnotes, and keeps [@code{ms}] @cindex keeps, and footnotes [@code{ms}] @@ -3939,9 +3917,9 @@ the same order as the corresponding occurrences of @code{\**}. @cindex @code{ms} macros, page layout @cindex page layout [@code{ms}] -The default output from the @file{ms} macros provides a minimalist -page layout: it prints a single column, with the page number centered -at the top of each page. It prints no footers. +The default output from the @file{ms} macros provides a minimalist page +layout: it prints a single column, with the page number centered at the +top of each page. It prints no footers. You can change the layout by setting the proper number registers and strings. @@ -3986,22 +3964,35 @@ odd pages, use the following macros: @DefmacItem {OF, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms} @DefmacListEnd {EF, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms} The @code{OH} and @code{EH} macros define headers for the odd and even -pages; the @code{OF} and @code{EF} macros define footers for the odd -and even pages. This is more flexible than defining the individual -strings. +pages; the @code{OF} and @code{EF} macros define footers for the odd and +even pages. This is more flexible than defining the individual strings. You can replace the quote (@code{'}) marks with any character not appearing in the header or footer text. @endDefmac +To specify custom header and footer processing, redefine the following +macros: + +@DefmacList {PT,, ms} +@DefmacItem {HD,, ms} +@DefmacListEnd {BT,, ms} +The @code{PT} macro defines a custom header; the @code{BT} macro defines +a custom footer. These macros must handle odd/even/first page +differences if necessary. + +The @code{HD} macro defines additional header processing to take place +after executing the @code{PT} macro. +@endDefmac + @c --------------------------------------------------------------------- @node ms Margins, ms Multiple Columns, ms Headers and Footers, ms Page Layout @subsubsection Margins @cindex @code{ms} macros, margins -You control margins using a set of number registers. @xref{ms -Document Control Registers}, for details. +You control margins using a set of number registers. @xref{ms Document +Control Registers}, for details. @c --------------------------------------------------------------------- @@ -4010,11 +4001,11 @@ Document Control Registers}, for details. @cindex @code{ms} macros, multiple columns @cindex multiple columns [@code{ms}] -The @file{ms} macros can set text in as many columns as will -reasonably fit on the page. The following macros are available; all -of them force a page break if a multi-column mode is already set. -However, if the current mode is single-column, starting a multi-column -mode does @emph{not} force a page break. +The @file{ms} macros can set text in as many columns as do reasonably +fit on the page. The following macros are available; all of them force +a page break if a multi-column mode is already set. However, if the +current mode is single-column, starting a multi-column mode does +@emph{not} force a page break. @Defmac {1C, , ms} Single-column mode. @@ -4025,10 +4016,10 @@ Two-column mode. @endDefmac @Defmac {MC, [@Var{width} [@Var{gutter}]], ms} -Multi-column mode. If you specify no arguments, it is equivalent to -the @code{2C} macro. Otherwise, @var{width} is the width of each -column and @var{gutter} is the space between columns. The -@code{MINGW} number register controls the default gutter width. +Multi-column mode. If you specify no arguments, it is equivalent to the +@code{2C} macro. Otherwise, @var{width} is the width of each column and +@var{gutter} is the space between columns. The @code{MINGW} number +register controls the default gutter width. @endDefmac @c --------------------------------------------------------------------- @@ -4047,10 +4038,10 @@ those headings wrapped in @code{XS} and @code{XE} macros. @DefmacItem {XA, [@Var{page}], ms} @DefmacListEnd {XE, , ms} These macros define a table of contents or an individual entry in the -table of contents, depending on their use. The macros are very -simple; they cannot indent a heading based on its level. The easiest -way to work around this is to add tabs to the table of contents -string. The following is an example: +table of contents, depending on their use. The macros are very simple; +they cannot indent a heading based on its level. The easiest way to +work around this is to add tabs to the table of contents string. The +following is an example: @Example @cartouche @@ -4073,9 +4064,9 @@ Methodology @endExample You can manually create a table of contents by beginning with the -@code{XS} macro for the first entry, specifying the page number for -that entry as the argument to @code{XS}. Add subsequent entries using -the @code{XA} macro, specifying the page number for that entry as the +@code{XS} macro for the first entry, specifying the page number for that +entry as the argument to @code{XS}. Add subsequent entries using the +@code{XA} macro, specifying the page number for that entry as the argument to @code{XA}. The following is an example: @Example @@ -4099,17 +4090,17 @@ place this macro at the end of the file, since @code{groff} is a single-pass formatter and can only print what has been collected up to the point that the @code{TC} macro appears. -The optional argument @code{no} suppresses printing the title -specified by the string register @code{TOC}. +The optional argument @code{no} suppresses printing the title specified +by the string register @code{TOC}. @endDefmac -@Defmac{PX, [@code{no}], ms} +@Defmac {PX, [@code{no}], ms} Prints the table of contents on a new page, using the current page -numbering sequence. Use this macro to print a manually-generated -table of contents at the beginning of your document. +numbering sequence. Use this macro to print a manually-generated table +of contents at the beginning of your document. -The optional argument @code{no} suppresses printing the title -specified by the string register @code{TOC}. +The optional argument @code{no} suppresses printing the title specified +by the string register @code{TOC}. @endDefmac The @cite{Groff and Friends HOWTO} includes a @code{sed} script that @@ -4131,9 +4122,9 @@ deal of time in the long run if you use @file{ms} regularly. @cindex special characters [@code{ms}] @cindex strings [@code{ms}] -The @file{ms} macros provide the following predefined strings. You -can change the string definitions to help in creating documents in -languages other than English. +The @file{ms} macros provide the following predefined strings. You can +change the string definitions to help in creating documents in languages +other than English. @Defstr {REFERENCES, ms} Contains the string printed at the beginning of the references @@ -4166,8 +4157,7 @@ Prints the full name of the month in dates. The default is @endDefstr The following special characters are available@footnote{For an -explanation what special characters are see @ref{Special -Characters}.}: +explanation what special characters are see @ref{Special Characters}.}: @Defstr {-, ms} Prints an em dash. @@ -4182,9 +4172,8 @@ Prints typographer's quotes in troff, and plain quotes in nroff. Improved accent marks are available in the @file{ms} macros. @Defmac {AM, , ms} -Specify this macro at the beginning of your document to enable -extended accent marks and special characters. This is a Berkeley -extension. +Specify this macro at the beginning of your document to enable extended +accent marks and special characters. This is a Berkeley extension. To use the accent marks, place them @strong{after} the character being accented. @@ -4296,23 +4285,23 @@ Uppercase @cindex @code{ms} macros, differences from @acronym{AT&T} @cindex @acronym{AT&T} @code{troff}, @code{ms} macro package differences -This section lists the (minor) differences between the @code{groff --ms} macros and @acronym{AT&T} @code{troff -ms} macros. +This section lists the (minor) differences between the @code{groff -ms} +macros and @acronym{AT&T} @code{troff -ms} macros. @itemize @bullet @item The internals of @code{groff -ms} differ from the internals of @acronym{AT&T} @code{troff -ms}. Documents that depend upon -implementation details of @acronym{AT&T} @code{troff -ms} may not -format properly with @code{groff -ms}. +implementation details of @acronym{AT&T} @code{troff -ms} may not format +properly with @code{groff -ms}. @item The general error-handling policy of @code{groff -ms} is to detect and report errors, rather than silently to ignore them. @item -@code{groff -ms} does not work in compatibility mode (this is, with -the @option{-C} option). +@code{groff -ms} does not work in compatibility mode (this is, with the +@option{-C} option). @item There is no special support for typewriter-like devices. @@ -4325,36 +4314,54 @@ Multiple line spacing is not supported. Use a larger vertical spacing instead. @item -Some @acronym{UNIX} @code{ms} documentation says that the @code{CW} -and @code{GW} number registers can be used to control the column width -and gutter width, respectively. These number registers are not used in +Some @acronym{UNIX} @code{ms} documentation says that the @code{CW} and +@code{GW} number registers can be used to control the column width and +gutter width, respectively. These number registers are not used in @code{groff -ms}. @item -Macros that cause a reset (paragraphs, headings, etc.@:) may change -the indentation. Macros that change the indentation do not increment -or decrement the indentation, but rather set it absolutely. This can -cause problems for documents that define additional macros of their -own. The solution is to use not the @code{in} request but instead the -@code{RS} and @code{RE} macros. +Macros that cause a reset (paragraphs, headings, etc.@:) may change the +indentation. Macros that change the indentation do not increment or +decrement the indentation, but rather set it absolutely. This can cause +problems for documents that define additional macros of their own. The +solution is to use not the @code{in} request but instead the @code{RS} +and @code{RE} macros. @item To make @code{groff -ms} use the default page offset (which also specifies the left margin), the @code{PO} register must stay undefined until the first @file{-ms} macro is evaluated. This implies that -@code{PO} should not be used early in the document, unless it is -changed also: Remember that accessing an undefined register -automatically defines it. +@code{PO} should not be used early in the document, unless it is changed +also: Remember that accessing an undefined register automatically +defines it. @end itemize @Defmpreg {GS, ms} This number register is set to@tie{}1 by the @code{groff -ms} macros, but it is not used by the @code{AT&T} @code{troff -ms} macros. Documents that need to determine whether they are being formatted with -@code{AT&T} @code{troff -ms} or @code{groff -ms} should use this -number register. +@code{AT&T} @code{troff -ms} or @code{groff -ms} should use this number +register. @endDefmpreg +Emulations of a few ancient Bell Labs macros can be re-enabled by +calling the otherwise undocumented @code{SC} section-header macro. +Calling @code{SC} enables @code{UC} for marking up a product or +application name, and the pair @code{P1}/@code{P2} for surrounding code +example displays. + +These are not enabled by default because (a)@tie{}they were not +documented, in the original @code{ms} manual, and (b)@tie{}the @code{P1} +and @code{UC} macros collide with different macros with the same names +in the Berkeley version of @code{ms}. + +These @code{groff} emulations are sufficient to give back the 1976 +Kernighan@tie{}& Cherry paper @cite{Typsetting Mathematics -- User's +Guide} its section headings, and restore some text that had gone missing +as arguments of undefined macros. No warranty express or implied is +given as to how well the typographic details these produce match the +original Bell Labs macros. + @menu * Missing ms Macros:: * Additional ms Macros:: @@ -4402,19 +4409,18 @@ A cover sheet macro @node Additional ms Macros, , Missing ms Macros, Differences from AT&T ms @subsubsection @code{groff} macros not appearing in @acronym{AT&T} @code{troff} -The @code{groff -ms} macros have a few minor extensions -compared to the @acronym{AT&T} @code{troff -ms} macros. +The @code{groff -ms} macros have a few minor extensions compared to the +@acronym{AT&T} @code{troff -ms} macros. @Defmac {AM, , ms} -Improved accent marks. -@xref{ms Strings and Special Characters}, for details. +Improved accent marks. @xref{ms Strings and Special Characters}, for +details. @endDefmac @Defmac {DS, @t{I}, ms} -Indented display. -The default behavior of @acronym{AT&T} @code{troff -ms} -was to indent; the @code{groff} default prints displays -flush left with the body text. +Indented display. The default behavior of @acronym{AT&T} @code{troff +-ms} was to indent; the @code{groff} default prints displays flush left +with the body text. @endDefmac @Defmac {CW, , ms} @@ -4422,24 +4428,22 @@ Print text in @code{constant width} (Courier) font. @endDefmac @Defmac {IX, , ms} -Indexing term (printed on standard error). -You can write a script to capture and process an index -generated in this manner. +Indexing term (printed on standard error). You can write a script to +capture and process an index generated in this manner. @endDefmac The following additional number registers appear in @code{groff -ms}: @Defmpreg {MINGW, ms} -Specifies a minimum space -between columns (for multi-column output); this takes the -place of the @code{GW} register that was documented but apparently -not implemented in @acronym{AT&T} @code{troff}. +Specifies a minimum space between columns (for multi-column output); +this takes the place of the @code{GW} register that was documented but +apparently not implemented in @acronym{AT&T} @code{troff}. @endDefmpreg -Several new string registers are available as well. -You can change these to handle (for example) the local language. -@xref{ms Strings and Special Characters}, for details. +Several new string registers are available as well. You can change +these to handle (for example) the local language. @xref{ms Strings and +Special Characters}, for details. @c --------------------------------------------------------------------- @@ -4461,8 +4465,8 @@ Names used only within one module are of the form @var{module}@code{*}@var{name}. @item -Names used outside the module in which they are defined are of the -form @var{module}@code{@@}@var{name}. +Names used outside the module in which they are defined are of the form +@var{module}@code{@@}@var{name}. @item Names associated with a particular environment are of the form @@ -4481,8 +4485,7 @@ Thus the groff ms macros reserve the following names: @itemize @bullet @item -Names containing the characters @code{*}, @code{@@}, -and@tie{}@code{:}. +Names containing the characters @code{*}, @code{@@}, and@tie{}@code{:}. @item Names containing only uppercase letters and digits. @@ -4497,8 +4500,8 @@ Names containing only uppercase letters and digits. @c XXX documentation @c XXX this is a placeholder until we get stuff knocked into shape -See the @file{meintro.me} and @file{meref.me} documents in -groff's @file{doc} directory. +See the @file{meintro.me} and @file{meref.me} documents in groff's +@file{doc} directory. @c ===================================================================== @@ -4509,8 +4512,9 @@ groff's @file{doc} directory. @c XXX documentation @c XXX this is a placeholder until we get stuff knocked into shape -See the @cite{groff_mm(7)} man page (type @command{man groff_mm} at -the command line). +See the @cite{groff_mm(7)} man page (type @command{man groff_mm} at the +command line). + @c ===================================================================== @@ -4612,12 +4616,12 @@ as many of them together on one output line as it can. This is known as @cindex spaces, leading and trailing @cindex extra spaces @cindex trailing spaces -Once @code{gtroff} has a @dfn{filled} line, it tries to @dfn{adjust} -it. This means it widens the spacing between words until the text -reaches the right margin (in the default adjustment mode). Extra spaces -between words are preserved, but spaces at the end of lines are ignored. -Spaces at the front of a line cause a @dfn{break} (breaks are -explained in @ref{Implicit Line Breaks}). +Once @code{gtroff} has a @dfn{filled} line, it tries to @dfn{adjust} it. +This means it widens the spacing between words until the text reaches +the right margin (in the default adjustment mode). Extra spaces between +words are preserved, but spaces at the end of lines are ignored. Spaces +at the front of a line cause a @dfn{break} (breaks are explained in +@ref{Implicit Line Breaks}). @xref{Manipulating Filling and Adjusting}. @@ -4629,14 +4633,13 @@ explained in @ref{Implicit Line Breaks}). Since the odds are not great for finding a set of words, for every output line, which fit nicely on a line without inserting excessive -amounts of space between words, @code{gtroff} hyphenates words so -that it can justify lines without inserting too much space between -words. It uses an internal hyphenation algorithm (a simplified version -of the algorithm used within @TeX{}) to indicate which words can be -hyphenated and how to do so. When a word is hyphenated, the first part -of the word is added to the current filled line being output (with -an attached hyphen), and the other portion is added to the next -line to be filled. +amounts of space between words, @code{gtroff} hyphenates words so that +it can justify lines without inserting too much space between words. It +uses an internal hyphenation algorithm (a simplified version of the +algorithm used within @TeX{}) to indicate which words can be hyphenated +and how to do so. When a word is hyphenated, the first part of the word +is added to the current filled line being output (with an attached +hyphen), and the other portion is added to the next line to be filled. @xref{Manipulating Hyphenation}. @@ -4703,8 +4706,8 @@ However, it can often be deceptive as the appearance (and width) of the text on a terminal and the results from @code{gtroff} can vary greatly. Also, a possible sticking point is that lines beginning with tab -characters are still filled, again producing unexpected results. -For example, the following input +characters are still filled, again producing unexpected results. For +example, the following input @multitable {12345678} {12345678} {12345678} {12345678} @item @@ -4734,28 +4737,26 @@ produces @cindex line break An important concept in @code{gtroff} is the @dfn{break}. When a break -occurs, @code{gtroff} outputs the partially filled line -(unjustified), and resumes collecting and filling text on the next output -line. +occurs, @code{gtroff} outputs the partially filled line (unjustified), +and resumes collecting and filling text on the next output line. @cindex blank line @cindex empty line @cindex line, blank @cindex blank line macro (@code{blm}) -There are several ways to cause a break in @code{gtroff}. A blank -line not only causes a break, but it also outputs a one-line vertical -space (effectively a blank line). Note that this behaviour can be -modified with the blank line macro request @code{blm}. -@xref{Blank Line Traps}. +There are several ways to cause a break in @code{gtroff}. A blank line +not only causes a break, but it also outputs a one-line vertical space +(effectively a blank line). Note that this behaviour can be modified +with the blank line macro request @code{blm}. @xref{Blank Line Traps}. @cindex fill mode @cindex mode, fill -A line that begins with a space causes a break and the space is -output at the beginning of the next line. Note that this space isn't -adjusted, even in fill mode. +A line that begins with a space causes a break and the space is output +at the beginning of the next line. Note that this space isn't adjusted, +even in fill mode. -The end of file also causes a break -- otherwise the last line of -the document may vanish! +The end of file also causes a break -- otherwise the last line of the +document may vanish! Certain requests also cause breaks, implicitly or explicitly. This is discussed in @ref{Manipulating Filling and Adjusting}. @@ -4774,9 +4775,9 @@ paragraphs. These are some conventions commonly used when typing @itemize @bullet @item -Break lines after punctuation, particularly at the end of a sentence -and in other logical places. Keep separate phrases on lines by -themselves, as entire phrases are often added or deleted when editing. +Break lines after punctuation, particularly at the end of a sentence and +in other logical places. Keep separate phrases on lines by themselves, +as entire phrases are often added or deleted when editing. @item Try to keep lines less than 40-60@tie{}characters, to allow space for @@ -4827,6 +4828,16 @@ To use this encoding, either say @w{@samp{.mso latin2.tmac}} at the very beginning of your document or use @samp{-mlatin2} as a command line argument for @code{groff}. +@item latin-5 +@cindex encoding, input, @w{latin-5} (ISO @w{8859-9}) +@cindex @w{latin-2} (ISO @w{8859-9}), input encoding +@cindex ISO @w{8859-9} (@w{latin-2}), input encoding +@cindex input encoding, @w{latin-2} (ISO @w{8859-9}) +@pindex latin2.tmac +For Turkish. Either say @w{@samp{.mso latin9.tmac}} at the very +beginning of your document or use @samp{-mlatin9} as a command line +argument for @code{groff}. + @item latin-9 (latin-0) @cindex encoding, input, @w{latin-9} (@w{latin-0}, ISO @w{8859-15}) @cindex @w{latin-9} (@w{latin-0}, ISO @w{8859-15}), input encoding @@ -4848,7 +4859,7 @@ groff -Tlatin1 -mlatin9 ... @endExample @noindent -will fail if you use the Euro character in the input. Usually, this +fails if you use the Euro character in the input. Usually, this limitation is present only for devices which have a limited set of output glyphs (e.g.@: @option{-Tascii} and @option{-Tlatin1}); for other devices it is usually sufficient to install proper fonts which contain @@ -4858,7 +4869,7 @@ the necessary glyphs. @pindex ec.tmac Due to the importance of the Euro glyph in Europe, the groff package now comes with a @sc{PostScript} font called @file{freeeuro.pfa} which -provides various glyph shapes for the Euro. With other words, +provides various glyph shapes for the Euro. In other words, @w{latin-9} encoding is supported for the @option{-Tps} device out of the box (@w{latin-2} isn't). @@ -4873,6 +4884,8 @@ command line @option{-mec} is used also to load the file @file{ec.tmac} @node Measurements, Expressions, Text, gtroff Reference @section Measurements @cindex measurements +@cindex scaling indicator +@cindex indicator, scaling @cindex units of measurement @cindex basic unit (@code{u}) @@ -4936,14 +4949,13 @@ Pica. Another typesetting measurement. 6@tie{}Picas to an inch (and @item f @cindex @code{f} unit @cindex unit, @code{f} -Fractions. Value is 65536. +Fractions. Value is 65536. @xref{Colors}, for usage. @end table -The other measurements understood by @code{gtroff} depend on -settings currently in effect in @code{gtroff}. These are very useful -for specifying measurements which should look proper with any size of -text. +The other measurements understood by @code{gtroff} depend on settings +currently in effect in @code{gtroff}. These are very useful for +specifying measurements which should look proper with any size of text. @table @code @item m @@ -5009,9 +5021,9 @@ equals@tie{}10@dmn{p} (thus 1@dmn{m} equals@tie{}33@dmn{u}). The value parenthesis is simply ignored. @cindex measurements, specifying safely -Thus, the safest way to specify measurements is to always -attach a scaling indicator. If you want to multiply or divide by a -certain scalar value, use @samp{u} as the unit for that value. +Thus, the safest way to specify measurements is to always attach a +scaling indicator. If you want to multiply or divide by a certain +scalar value, use @samp{u} as the unit for that value. @c ===================================================================== @@ -5073,8 +5085,10 @@ Logical: @samp{&} (logical and), @samp{:} (logical or). @cindex @code{while} request, and the @samp{!} operator Unary operators: @samp{-} (negating, i.e.@: changing the sign), @samp{+} (just for completeness; does nothing in expressions), @samp{!} (logical -not; this works only within @code{if} and @code{while} requests). See -below for the use of unary operators in motion requests. +not; this works only within @code{if} and @code{while} +requests).@footnote{Note that, for example, @samp{!(-1)} evaluates to +`true' because @code{gtroff} treats both negative numbers and zero as +`false'.} See below for the use of unary operators in motion requests. @item @cindex extremum operators (@code{>?}, @code{| in |<-- - |<-----------ll------------>| - +----+----+----------------------+----+ - | : : : | - +----+----+----------------------+----+ - -->| po |<-- - |<--------paper width---------------->| + -->| in |<-- + |<-----------ll------------>| + +----+----+----------------------+----+ + | : : : | + +----+----+----------------------+----+ +-->| po |<-- + |<--------paper width---------------->| @endExample @noindent @@ -8037,9 +8102,9 @@ the current value by @var{offset}). Note that this request does not cause a break, so changing the page offset in the middle of text being filled may not yield the expected result. The initial value is 1@dmn{i}. For TTY output devices, it is set to 0 in the startup file -@file{troffrc}; the default scaling indicator is @samp{m} (and -not @samp{v} as incorrectly documented in the original -@acronym{UNIX} troff manual). +@file{troffrc}; the default scaling indicator is @samp{m} (and not +@samp{v} as incorrectly documented in the original @acronym{UNIX} troff +manual). The current page offset can be found in the read-only number register @samp{.o}. @@ -8064,9 +8129,9 @@ the previous value before the last call to @code{po}. @DefreqItem {in, @t{+}@Var{indent}} @DefreqItem {in, @t{-}@Var{indent}} @DefregListEnd {.i} -Set indentation to @var{indent} (or increment or decrement the -current value by @var{indent}). This request causes a break. -Initially, there is no indentation. +Set indentation to @var{indent} (or increment or decrement the current +value by @var{indent}). This request causes a break. Initially, there +is no indentation. If @code{in} is called without an argument, the indentation is reset to the previous value before the last call to @code{in}. The default @@ -8079,9 +8144,9 @@ If a negative indentation value is specified (which is not allowed), @code{gtroff} emits a warning of type @samp{range} and sets the indentation to zero. -The effect of @code{in} is delayed until a partially collected line -(if it exists) is output. A temporary indentation value is reset to -zero also. +The effect of @code{in} is delayed until a partially collected line (if +it exists) is output. A temporary indentation value is reset to zero +also. The current indentation (as set by @code{in}) can be found in the read-only number register @samp{.i}. @@ -8096,8 +8161,8 @@ increment or decrement value is specified, adjust the temporary indentation relative to the value set by the @code{in} request. This request causes a break; its value is associated with the current -environment (@pxref{Environments}). The default scaling indicator -is @samp{m}. A call of @code{ti} without an argument is ignored. +environment (@pxref{Environments}). The default scaling indicator is +@samp{m}. A call of @code{ti} without an argument is ignored. If the total indentation value is negative (which is not allowed), @code{gtroff} emits a warning of type @samp{range} and sets the @@ -8124,8 +8189,8 @@ indentation value or a temporary indentation value is active. Set the line length to @var{length} (or increment or decrement the current value by @var{length}). Initially, the line length is set to 6.5@dmn{i}. The effect of @code{ll} is delayed until a partially -collected line (if it exists) is output. The default scaling -indicator is @samp{m}. +collected line (if it exists) is output. The default scaling indicator +is @samp{m}. If @code{ll} is called without an argument, the line length is reset to the previous value before the last call to @code{ll}. If a negative @@ -8175,8 +8240,8 @@ This is a test. This is a test. @endExample -The main usage of this feature is to define macros which act exactly -at the place where called. +The main usage of this feature is to define macros which act exactly at +the place where called. @Example .\" A simple macro to underline a word @@ -8187,9 +8252,9 @@ at the place where called. @noindent In the above example, @samp{|0} specifies a negative distance from the -current position (at the end of the just emitted argument @code{\$1}) back -to the beginning of the input line. Thus, the @samp{\l} escape draws a -line from right to left. +current position (at the end of the just emitted argument @code{\$1}) +back to the beginning of the input line. Thus, the @samp{\l} escape +draws a line from right to left. @cindex input line continuation (@code{\}) @cindex line, input, continuation (@code{\}) @@ -8204,9 +8269,9 @@ continuation; the latter is also called @dfn{interrupting} a line. @DefescList {\\@key{RET}, , ,} @DefescItem {\\c, , ,} -@DefregListEnd{.int} -Continue a line. @code{\@key{RET}} (this is a backslash at the end -of a line immediately followed by a newline) works on the input level, +@DefregListEnd {.int} +Continue a line. @code{\@key{RET}} (this is a backslash at the end of a +line immediately followed by a newline) works on the input level, suppressing the effects of the following newline in the input. @Example @@ -8220,7 +8285,7 @@ The @samp{|} operator is also affected. @cindex @code{\R}, after @code{\c} @code{\c} works on the output level. Anything after this escape on the same line is ignored, except @code{\R} which works as usual. Anything -before @code{\c} on the same line will be appended to the current partial +before @code{\c} on the same line is appended to the current partial output line. The next non-command line after an interrupted line counts as a new input line. @@ -8232,8 +8297,8 @@ The visual results depend on whether no-fill mode is active. @cindex no-fill mode, and @code{\c} @cindex mode, no-fill, and @code{\c} If no-fill mode is active (using the @code{nf} request), the next input -text line after @code{\c} will be handled as a continuation of the same -input text line. +text line after @code{\c} is handled as a continuation of the same input +text line. @Example .nf @@ -8247,7 +8312,7 @@ test. @cindex fill mode, and @code{\c} @cindex mode, fill, and @code{\c} If fill mode is active (using the @code{fi} request), a word interrupted -with @code{\c} will be continued with the text on the next input text line, +with @code{\c} is continued with the text on the next input text line, without an intervening space. @Example @@ -8261,11 +8326,12 @@ Note that an intervening control line which causes a break is stronger than @code{\c}, flushing out the current partial line in the usual way. @cindex interrupted line register (@code{.int}) -The @code{.int} register contains a positive value -if the last output line was interrupted with @code{\c}; this is -associated with the current environment (@pxref{Environments}). +The @code{.int} register contains a positive value if the last output +line was interrupted with @code{\c}; this is associated with the current +environment (@pxref{Environments}). @endDefesc + @c ===================================================================== @node Page Layout, Page Control, Line Control, gtroff Reference @@ -8282,9 +8348,9 @@ page layout. @DefregListEnd {.p} @cindex page length (@code{pl}) @cindex length of page (@code{pl}) -Set the @dfn{page length} to @var{length} (or increment or decrement -the current value by @var{length}). This is the length of the -physical output page. The default scaling indicator is @samp{v}. +Set the @dfn{page length} to @var{length} (or increment or decrement the +current value by @var{length}). This is the length of the physical +output page. The default scaling indicator is @samp{v}. @cindex page length register (@code{.p}) The current setting can be found in the read-only number register @@ -8316,9 +8382,9 @@ and bottom titles (or headers and footers). @cindex title line (@code{tl}) @cindex three-part title (@code{tl}) @cindex page number character (@code{%}) -Print a @dfn{title line}. It consists of three parts: a left -justified portion, a centered portion, and a right justified portion. -The argument separator @samp{'} can be replaced with any character not +Print a @dfn{title line}. It consists of three parts: a left justified +portion, a centered portion, and a right justified portion. The +argument separator @samp{'} can be replaced with any character not occurring in the title line. The @samp{%} character is replaced with the current page number. This character can be changed with the @code{pc} request (see below). @@ -8354,14 +8420,14 @@ right justfied parts are empty. @cindex length of title line (@code{lt}) @cindex title line, length (@code{lt}) @cindex title line length register (@code{.lt}) -The title line is printed using its own line length, which is -specified (or incremented or decremented) with the @code{lt} request. -Initially, the title line length is set to 6.5@dmn{i}. If a negative -line length is specified (which is not allowed), @code{gtroff} emits a -warning of type @samp{range} and sets the title line length to zero. -The default scaling indicator is @samp{m}. If @code{lt} is called -without an argument, the title length is reset to the previous value -before the last call to @code{lt}. +The title line is printed using its own line length, which is specified +(or incremented or decremented) with the @code{lt} request. Initially, +the title line length is set to 6.5@dmn{i}. If a negative line length +is specified (which is not allowed), @code{gtroff} emits a warning of +type @samp{range} and sets the title line length to zero. The default +scaling indicator is @samp{m}. If @code{lt} is called without an +argument, the title length is reset to the previous value before the +last call to @code{lt}. The current setting of this is available in the @code{.lt} read-only number register; it is associated with the current environment @@ -8409,11 +8475,11 @@ Note that this doesn't affect the number register@tie{}@code{%}. @cindex new page (@code{bp}) @cindex page, new (@code{bp}) Stop processing the current page and move to the next page. This -request causes a break. It can also take an argument to set -(increase, decrease) the page number of the next page (which actually -becomes the current page after @code{bp} has finished). The -difference between @code{bp} and @code{pn} is that @code{pn} does not -cause a break or actually eject a page. @xref{Page Layout}. +request causes a break. It can also take an argument to set (increase, +decrease) the page number of the next page (which actually becomes the +current page after @code{bp} has finished). The difference between +@code{bp} and @code{pn} is that @code{pn} does not cause a break or +actually eject a page. @xref{Page Layout}. @Example .de newpage \" define macro @@ -8445,10 +8511,10 @@ active. @xref{Page Location Traps}. It is often necessary to force a certain amount of space before a new page occurs. This is most useful to make sure that there is not a single @dfn{orphan} line left at the bottom of a page. The @code{ne} -request ensures that there is a certain distance, specified by the -first argument, before the next page is triggered (see @ref{Traps}, -for further information). The default scaling indicator for @code{ne} -is @samp{v}; the default value of @var{space} is@tie{}1@dmn{v} if no +request ensures that there is a certain distance, specified by the first +argument, before the next page is triggered (see @ref{Traps}, for +further information). The default scaling indicator for @code{ne} is +@samp{v}; the default value of @var{space} is@tie{}1@dmn{v} if no argument is given. For example, to make sure that no fewer than 2@tie{}lines get orphaned, @@ -8459,26 +8525,25 @@ do the following before each paragraph: text text text @endExample -@code{ne} will then automatically cause a page break if there is space -for one line only. +@code{ne} then automatically causes a page break if there is space for +one line only. @endDefreq @DefreqList {sv, [@Var{space}]} @DefreqListEnd {os, } @cindex @code{ne} request, comparison with @code{sv} -@code{sv} is similar to the @code{ne} request; it reserves the -specified amount of vertical space. If the desired amount of space -exists before the next trap (or the bottom page boundary if no trap is -set), the space is output immediately (ignoring a partially filled line -which stays untouched). If there is not enough space, it is stored for -later output via the @code{os} request. The default value is@tie{}1@dmn{v} -if no argument is given; the default scaling indicator is @samp{v}. +@code{sv} is similar to the @code{ne} request; it reserves the specified +amount of vertical space. If the desired amount of space exists before +the next trap (or the bottom page boundary if no trap is set), the space +is output immediately (ignoring a partially filled line which stays +untouched). If there is not enough space, it is stored for later output +via the @code{os} request. The default value is@tie{}1@dmn{v} if no +argument is given; the default scaling indicator is @samp{v}. @cindex @code{sv} request, and no-space mode @cindex @code{os} request, and no-space mode Both @code{sv} and @code{os} ignore no-space mode. While the @code{sv} -request allows negative values for @var{space}, @code{os} will ignore -them. +request allows negative values for @var{space}, @code{os} ignores them. @endDefreq @Defreg {nl} @@ -8532,6 +8597,7 @@ one. registers. @endDefreg + @c ===================================================================== @node Fonts and Symbols, Sizes, Page Control, gtroff Reference @@ -8583,6 +8649,10 @@ with the @code{styles} command in the @file{DESC} file), use it within the current font family (as set with the @code{fam} request, @code{\F} escape, or with the @code{family} command in the @file{DESC} file). +It is not possible to switch to a font with the name @samp{DESC} +(whereas this name could be used as a style name; however, this is not +recommended). + @cindex previous font (@code{ft}, @code{\f[]}, @code{\fP}) @cindex font, previous (@code{ft}, @code{\f[]}, @code{\fP}) With no argument or using @samp{P} as an argument, @code{.ft} switches @@ -8605,10 +8675,9 @@ and sausage. eggs, bacon, \fBspam\fP and sausage. @endExample -Note that @code{\f} doesn't produce an input token in @code{gtroff}. -As a consequence, it can be used in requests like @code{mc} (which -expects a single character as an argument) to change the font on -the fly: +Note that @code{\f} doesn't produce an input token in @code{gtroff}. As +a consequence, it can be used in requests like @code{mc} (which expects +a single character as an argument) to change the font on the fly: @Example .mc \f[I]x\f[] @@ -8616,13 +8685,14 @@ the fly: The current style name is available in the read-only number register @samp{.sty} (this is a string-valued register); if the current font -isn't a style, the empty string is returned. It is associated with -the current environment. +isn't a style, the empty string is returned. It is associated with the +current environment. @xref{Font Positions}, for an alternative syntax. @endDefreq @Defreq {ftr, f [@Var{g}]} +@cindex font translation (@code{ftr}) @cindex @code{ft} request, and font translations @cindex @code{ul} request, and font translations @cindex @code{bd} request, and font translations @@ -8637,12 +8707,58 @@ the current environment. @cindex @code{ie} request, and font translations @cindex @code{while} request, and font translations Translate font@tie{}@var{f} to font@tie{}@var{g}. Whenever a font -named@tie{}@var{f} is referred to in a @code{\f} escape sequence, -in the @code{F} and @code{S} conditional operators, or in the -@code{ft}, @code{ul}, @code{bd}, @code{cs}, @code{tkf}, -@code{special}, @code{fspecial}, @code{fp}, or @code{sty} requests, -font@tie{}@var{g} is used. If @var{g} is missing or equal to@tie{}@var{f} -the translation is undone. +named@tie{}@var{f} is referred to in a @code{\f} escape sequence, in the +@code{F} and @code{S} conditional operators, or in the @code{ft}, +@code{ul}, @code{bd}, @code{cs}, @code{tkf}, @code{special}, +@code{fspecial}, @code{fp}, or @code{sty} requests, font@tie{}@var{g} is +used. If @var{g} is missing or equal to@tie{}@var{f} the translation is +undone. + +Note that it is not possible to chain font translations. Example: + +@Example +.ftr XXX TR +.ftr XXX YYY +.ft XXX + @result{} warning: can't find font `XXX' +@endExample +@endDefreq + +@DefreqList {fzoom, f [@Var{zoom}]} +@DefregListEnd {.zoom} +@cindex magnification of a font (@code{fzoom}) +@cindex font, magnification (@code{fzoom}) +@cindex zoom factor of a font (@code{fzoom}) +@cindex factor, zoom, of a font (@code{fzoom}) +@cindex font, zoom factor (@code{fzoom}) +@cindex optical size of a font +@cindex font, optical size +@cindex size, optical, of a font +Set magnification of font@tie{}@var{f} to factor @var{zoom}, which must +be a non-negative integer multiple of 1/1000th. This request is useful +to adjust the optical size of a font in relation to the others. In the +example below, font @code{CR} is magnified by 10% (the zoom factor is +thus 1.1). + +@Example +.fam P +.fzoom CR 1100 +.ps 12 +Palatino and \f[CR]Courier\f[] +@endExample + +A missing or zero value of @var{zoom} is the same as a value of 1000, +which means no magnification. @var{f}@tie{}must be a real font name, +not a style. + +Note that the magnification of a font is completely transparent to +troff; a change of the zoom factor doesn't cause any effect except that +the dimensions of glyphs, (word) spaces, kerns, etc., of the affected +font are adjusted accordingly. + +The zoom factor of the current font is available in the read-only number +register @samp{.zoom}, in multiples of 1/1000th. It returns zero if +there is no magnification. @endDefreq @c --------------------------------------------------------------------- @@ -8664,8 +8780,8 @@ the current family. @cindex fonts, PostScript Currently, fonts for the devices @option{-Tps}, @option{-Tdvi}, @option{-Tlj4}, @option{-Tlbp}, and the X11 fonts are set up to this -mechanism. By default, @code{gtroff} uses the Times family with the four -styles @samp{R}, @samp{I}, @samp{B}, and @samp{BI}. +mechanism. By default, @code{gtroff} uses the Times family with the +four styles @samp{R}, @samp{I}, @samp{B}, and @samp{BI}. This way, it is possible to use the basic four fonts and to select a different font family on the command line (@pxref{Groff Options}). @@ -8679,15 +8795,14 @@ different font family on the command line (@pxref{Groff Options}). @cindex changing font family (@code{fam}, @code{\F}) @cindex font family, changing (@code{fam}, @code{\F}) Switch font family to @var{family} (one-character name@tie{}@var{f}, -two-character name @var{fm}). If no argument is given, switch -back to the previous font family. Use @code{\F[]} to do this with the -escape. Note that @code{\FP} doesn't work; it selects font family -@samp{P} instead. - -The value at start-up is @samp{T}. -The current font family is available in the read-only number register -@samp{.fam} (this is a string-valued register); it is associated with -the current environment. +two-character name @var{fm}). If no argument is given, switch back to +the previous font family. Use @code{\F[]} to do this with the escape. +Note that @code{\FP} doesn't work; it selects font family @samp{P} +instead. + +The value at start-up is @samp{T}. The current font family is available +in the read-only number register @samp{.fam} (this is a string-valued +register); it is associated with the current environment. @Example spam, @@ -8703,20 +8818,18 @@ baked beans, and spam. @endExample -Note that @code{\F} doesn't produce an input token in @code{gtroff}. -As a consequence, it can be used in requests like @code{mc} (which -expects a single character as an argument) to change the font family on -the fly: +Note that @code{\F} doesn't produce an input token in @code{gtroff}. As +a consequence, it can be used in requests like @code{mc} (which expects +a single character as an argument) to change the font family on the fly: @Example .mc \F[P]x\F[] @endExample -The @samp{.fn} register contains the current @dfn{real font name} -of the current font. -This is a string-valued register. -If the current font is a style, the value of @code{\n[.fn]} -is the proper concatenation of family and style name. +The @samp{.fn} register contains the current @dfn{real font name} of the +current font. This is a string-valued register. If the current font is +a style, the value of @code{\n[.fn]} is the proper concatenation of +family and style name. @endDefreq @Defreq {sty, n style} @@ -8728,28 +8841,27 @@ is the proper concatenation of family and style name. @cindex @code{uf} request, and font styles @cindex @code{fspecial} request, and font styles Associate @var{style} with font position@tie{}@var{n}. A font position -can be associated either with a font or with a style. The current -font is the index of a font position and so is also either a font or a -style. If it is a style, the font that is actually used is the font -which name is the concatenation of the name of the current -family and the name of the current style. For example, if the current -font is@tie{}1 and font position@tie{}1 is associated with style -@samp{R} and the current font family is @samp{T}, then font -@samp{TR} will be used. If the current font is not a style, then the -current family is ignored. If the requests @code{cs}, @code{bd}, -@code{tkf}, @code{uf}, or @code{fspecial} are applied to a style, -they will instead be applied to the member of the current family -corresponding to that style. +can be associated either with a font or with a style. The current font +is the index of a font position and so is also either a font or a style. +If it is a style, the font that is actually used is the font which name +is the concatenation of the name of the current family and the name of +the current style. For example, if the current font is@tie{}1 and font +position@tie{}1 is associated with style @samp{R} and the current font +family is @samp{T}, then font @samp{TR} is used. If the current font is +not a style, then the current family is ignored. If the requests +@code{cs}, @code{bd}, @code{tkf}, @code{uf}, or @code{fspecial} are +applied to a style, they are instead applied to the member of the +current family corresponding to that style. @var{n}@tie{}must be a non-negative integer value. @pindex DESC @kindex styles -The default family can be set with the @option{-f} option -(@pxref{Groff Options}). The @code{styles} command in the @file{DESC} -file controls which font positions (if any) are initially associated -with styles rather than fonts. For example, the default setting for -@sc{PostScript} fonts +The default family can be set with the @option{-f} option (@pxref{Groff +Options}). The @code{styles} command in the @file{DESC} file controls +which font positions (if any) are initially associated with styles +rather than fonts. For example, the default setting for @sc{PostScript} +fonts @Example styles R I B BI @@ -8766,8 +8878,8 @@ is equivalent to @endExample @code{fam} and @code{\F} always check whether the current font position -is valid; this can give surprising results if the current font position is -associated with a style. +is valid; this can give surprising results if the current font position +is associated with a style. In the following example, we want to access the @sc{PostScript} font @code{FooBar} from the font family @code{Foo}: @@ -8779,9 +8891,9 @@ In the following example, we want to access the @sc{PostScript} font @endExample @noindent -The default font position at start-up is@tie{}1; for the -@sc{PostScript} device, this is associated with style @samp{R}, so -@code{gtroff} tries to open @code{FooR}. +The default font position at start-up is@tie{}1; for the @sc{PostScript} +device, this is associated with style @samp{R}, so @code{gtroff} tries +to open @code{FooR}. A solution to this problem is to use a dummy font like the following: @@ -8814,9 +8926,9 @@ on which various fonts are mounted. @cindex font, mounting (@code{fp}) Mount font @var{font} at position @var{pos} (which must be a non-negative integer). This numeric position can then be referred to -with font changing commands. When @code{gtroff} starts it is using -font position@tie{}1 (which must exist; position@tie{}0 is unused -usually at start-up). +with font changing commands. When @code{gtroff} starts it is using font +position@tie{}1 (which must exist; position@tie{}0 is unused usually at +start-up). @cindex font position register (@code{.f}) The current font in use, as a font position, is available in the @@ -8842,11 +8954,11 @@ like so: @pindex DESC@r{, and font mounting} Fonts not listed in the @file{DESC} file are automatically mounted on -the next available font position when they are referenced. If a font -is to be mounted explicitly with the @code{fp} request on an unused -font position, it should be mounted on the first unused font position, -which can be found in the @code{.fp} register. Although @code{gtroff} -does not enforce this strictly, it is not allowed to mount a font at a +the next available font position when they are referenced. If a font is +to be mounted explicitly with the @code{fp} request on an unused font +position, it should be mounted on the first unused font position, which +can be found in the @code{.fp} register. Although @code{gtroff} does +not enforce this strictly, it is not allowed to mount a font at a position whose number is much greater (approx.@: 1000 positions) than that of any currently used position. @@ -8855,8 +8967,8 @@ gives the external name of the font, which is used for finding the font description file. The second argument gives the internal name of the font which is used to refer to the font in @code{gtroff} after it has been mounted. If there is no third argument then the internal name is -used as the external name. This feature makes it possible to use -fonts with long names in compatibility mode. +used as the external name. This feature makes it possible to use fonts +with long names in compatibility mode. @endDefreq Both the @code{ft} request and the @code{\f} escape have alternative @@ -8881,8 +8993,8 @@ non-negative integer. If @var{nnn} is associated with a style (as set with the @code{sty} request or with the @code{styles} command in the @file{DESC} file), use it within the current font family (as set with the @code{fam} request, -the @code{\F} escape, or with the @code{family} command in the @file{DESC} -file). +the @code{\F} escape, or with the @code{family} command in the +@file{DESC} file). @Example this is font 1 @@ -8908,14 +9020,14 @@ this is font 1 again @cindex glyph @cindex character @cindex ligature -A @dfn{glyph} is a graphical representation of a @dfn{character}. -While a character is an abstract entity containing semantic -information, a glyph is something which can be actually seen on screen -or paper. It is possible that a character has multiple glyph -representation forms (for example, the character `A' can be either -written in a roman or an italic font, yielding two different glyphs); -sometimes more than one character maps to a single glyph (this is a -@dfn{ligature} -- the most common is `fi'). +A @dfn{glyph} is a graphical representation of a @dfn{character}. While +a character is an abstract entity containing semantic information, a +glyph is something which can be actually seen on screen or paper. It is +possible that a character has multiple glyph representation forms (for +example, the character `A' can be either written in a roman or an italic +font, yielding two different glyphs); sometimes more than one character +maps to a single glyph (this is a @dfn{ligature} -- the most common is +`fi'). @cindex symbol @cindex special fonts @@ -8923,17 +9035,16 @@ sometimes more than one character maps to a single glyph (this is a @pindex DESC @cindex @code{special} request, and glyph search order @cindex @code{fspecial} request, and glyph search order -A @dfn{symbol} is simply a named glyph. Within @code{gtroff}, all -glyph names of a particular font are defined in its font file. If the -user requests a glyph not available in this font, @code{gtroff} looks -up an ordered list of @dfn{special fonts}. By default, the -@sc{PostScript} output device supports the two special fonts @samp{SS} -(slanted symbols) and @samp{S} (symbols) (the former is looked up -before the latter). Other output devices use different names for -special fonts. Fonts mounted with the @code{fonts} keyword in the -@file{DESC} file are globally available. To install additional -special fonts locally (i.e.@: for a particular font), use the -@code{fspecial} request. +A @dfn{symbol} is simply a named glyph. Within @code{gtroff}, all glyph +names of a particular font are defined in its font file. If the user +requests a glyph not available in this font, @code{gtroff} looks up an +ordered list of @dfn{special fonts}. By default, the @sc{PostScript} +output device supports the two special fonts @samp{SS} (slanted symbols) +and @samp{S} (symbols) (the former is looked up before the latter). +Other output devices use different names for special fonts. Fonts +mounted with the @code{fonts} keyword in the @file{DESC} file are +globally available. To install additional special fonts locally (i.e.@: +for a particular font), use the @code{fspecial} request. Here the exact rules how @code{gtroff} searches a given symbol: @@ -8949,9 +9060,9 @@ Check the current font. If the symbol has been defined with the @code{fchar} request, use it. @item -Check whether the current font has a font-specific list of special fonts; -test all fonts in the order of appearance in the last @code{fspecial} -call if appropriate. +Check whether the current font has a font-specific list of special +fonts; test all fonts in the order of appearance in the last +@code{fspecial} call if appropriate. @item If the symbol has been defined with the @code{fschar} request for the @@ -8966,10 +9077,10 @@ If the symbol has been defined with the @code{schar} request, use it. @item As a last resort, consult all fonts loaded up to now for special fonts -and check them, starting with the lowest font number. Note that this can -sometimes lead to surprising results since the @code{fonts} line in the -@file{DESC} file often contains empty positions which are filled later -on. For example, consider the following: +and check them, starting with the lowest font number. Note that this +can sometimes lead to surprising results since the @code{fonts} line in +the @file{DESC} file often contains empty positions which are filled +later on. For example, consider the following: @Example fonts 3 0 0 FOO @@ -8977,8 +9088,8 @@ fonts 3 0 0 FOO @noindent This mounts font @code{foo} at font position@tie{}3. We assume that -@code{FOO} is a special font, containing glyph @code{foo}, -and that no font has been loaded yet. The line +@code{FOO} is a special font, containing glyph @code{foo}, and that no +font has been loaded yet. The line @Example .fspecial BAR BAZ @@ -8987,18 +9098,18 @@ and that no font has been loaded yet. The line @noindent makes font @code{BAZ} special only if font @code{BAR} is active. We further assume that @code{BAZ} is really a special font, i.e., the font -description file contains the @code{special} keyword, and that it -also contains glyph @code{foo} with a special shape fitting to font -@code{BAR}. After executing @code{fspecial}, font @code{BAR} is loaded at -font position@tie{}1, and @code{BAZ} at position@tie{}2. - -We now switch to a new font @code{XXX}, trying to access glyph @code{foo} -which is assumed to be missing. There are neither font-specific special -fonts for @code{XXX} nor any other fonts made special with the -@code{special} request, so @code{gtroff} starts the search for special -fonts in the list of already mounted fonts, with increasing font -positions. Consequently, it finds @code{BAZ} before @code{FOO} even for -@code{XXX} which is not the intended behaviour. +description file contains the @code{special} keyword, and that it also +contains glyph @code{foo} with a special shape fitting to font +@code{BAR}. After executing @code{fspecial}, font @code{BAR} is loaded +at font position@tie{}1, and @code{BAZ} at position@tie{}2. + +We now switch to a new font @code{XXX}, trying to access glyph +@code{foo} which is assumed to be missing. There are neither +font-specific special fonts for @code{XXX} nor any other fonts made +special with the @code{special} request, so @code{gtroff} starts the +search for special fonts in the list of already mounted fonts, with +increasing font positions. Consequently, it finds @code{BAZ} before +@code{FOO} even for @code{XXX} which is not the intended behaviour. @end itemize @xref{Font Files}, and @ref{Special Fonts}, for more details. @@ -9016,9 +9127,9 @@ man -Tdvi groff_char > groff_char.dvi @noindent for a list using the default DVI fonts (not all versions of the -@code{man} program support the @option{-T} option). If you want to -use an additional macro package to change the used fonts, @code{groff} -must be called directly: +@code{man} program support the @option{-T} option). If you want to use +an additional macro package to change the used fonts, @code{groff} must +be called directly: @Example groff -Tdvi -mec -man groff_char.7 > groff_char.dvi @@ -9031,16 +9142,16 @@ groff -Tdvi -mec -man groff_char.7 > groff_char.dvi @cindex adobe glyph list (AGL) @cindex AGL (adobe glyph list) Glyph names not listed in groff_char(7) are derived algorithmically, -using a simplified version of the Adobe Glyph List (AGL) algorithm -which is described in -@uref{http://partners.adobe.com@//asn@//tech@//type@//unicodegn.jsp}. +using a simplified version of the Adobe Glyph List (AGL) algorithm which +is described in +@uref{http://partners.adobe.com@//public@//developer@//opentype@//index_glyph.html}. The (frozen) set of glyph names which can't be derived algorithmically is called @dfn{groff glyph list (GGL)}. @itemize @bullet @item A glyph for Unicode character U+@var{XXXX}[@var{X}[@var{X}]] which is -not a composite character will be named +not a composite character is named @code{u@var{XXXX}@r{[}@var{X}@r{[}@var{X}@r{]]}}. @var{X} must be an uppercase hexadecimal digit. Examples: @code{u1234}, @code{u008E}, @code{u12DB8}. The largest Unicode value is 0x10FFFF. There must be at @@ -9051,7 +9162,7 @@ represented with character codes from the surrogate area U+D800-U+DFFF) are not allowed too. @item -A glyph representing more than a single input character will be named +A glyph representing more than a single input character is named @display @samp{u} @var{component1} @samp{_} @var{component2} @samp{_} @var{component3} @dots{} @@ -9072,10 +9183,10 @@ acute}. @item groff maintains a table to decompose all algorithmically derived glyph names which are composites itself. For example, @code{u0100} (@sc{latin -letter a with macron}) will be automatically decomposed into +letter a with macron}) is automatically decomposed into @code{u0041_0304}. Additionally, a glyph name of the GGL is preferred to an algorithmically derived glyph name; groff also automatically does -the mapping. Example: The glyph @code{u0045_0302} will be mapped to +the mapping. Example: The glyph @code{u0045_0302} is mapped to @code{^E}. @item @@ -9108,12 +9219,12 @@ follows: @itemize @bullet @item -Any component which is found in the GGL will be converted to the +Any component which is found in the GGL is converted to the @code{u@var{XXXX}} form. @item Any component @code{u@var{XXXX}} which is found in the list of -decomposable glyphs will be decomposed. +decomposable glyphs is decomposed. @item The resulting elements are then concatenated with @samp{_} inbetween, @@ -9121,7 +9232,7 @@ dropping the leading @samp{u} in all elements but the first. @end itemize No check for the existence of any component (similar to @code{tr} -request) will be done. +request) is done. Examples: @@ -9156,8 +9267,8 @@ have to define @code{u0041_0328}. Typeset the glyph named @var{xxx}.@footnote{@code{\C} is actually a misnomer since it accesses an output glyph.} Normally it is more convenient to use @code{\[@var{xxx}]}, but @code{\C} has the advantage -that it is compatible with newer versions of @acronym{AT&T} -@code{troff} and is available in compatibility mode. +that it is compatible with newer versions of @acronym{AT&T} @code{troff} +and is available in compatibility mode. @endDefesc @Defreq {composite, from to} @@ -9178,13 +9289,13 @@ A set of default mappings for many accents can be found in the file @cindex @code{char} request, used with @code{\N} @cindex Unicode Typeset the glyph with code@tie{}@var{n} in the current font -(@code{n}@tie{}is @strong{not} the input character code). The -number @var{n}@tie{}can be any non-negative decimal integer. Most devices -only have glyphs with codes between 0 and@tie{}255; the Unicode -output device uses codes in the range 0--65535. If the current -font does not contain a glyph with that code, special fonts are -@emph{not} searched. The @code{\N} escape sequence can be -conveniently used in conjunction with the @code{char} request: +(@code{n}@tie{}is @strong{not} the input character code). The number +@var{n}@tie{}can be any non-negative decimal integer. Most devices only +have glyphs with codes between 0 and@tie{}255; the Unicode output device +uses codes in the range 0--65535. If the current font does not contain +a glyph with that code, special fonts are @emph{not} searched. The +@code{\N} escape sequence can be conveniently used in conjunction with +the @code{char} request: @Example .char \[phone] \f[ZD]\N'37' @@ -9196,9 +9307,8 @@ conveniently used in conjunction with the @code{char} request: @cindex glyphs, unnamed The code of each glyph is given in the fourth column in the font description file after the @code{charset} command. It is possible to -include unnamed glyphs in the font description file by using a -name of @samp{---}; the @code{\N} escape sequence is the only way to -use these. +include unnamed glyphs in the font description file by using a name of +@samp{---}; the @code{\N} escape sequence is the only way to use these. No kerning is applied to glyphs accessed with @code{\N}. @endDefesc @@ -9206,9 +9316,9 @@ No kerning is applied to glyphs accessed with @code{\N}. Some escape sequences directly map onto special glyphs. @Defesc {\\', , , } -This is a backslash followed by the apostrophe character, @acronym{ASCII} -character @code{0x27} (@acronym{EBCDIC} character @code{0x7D}). The same -as @code{\[aa]}, the acute accent. +This is a backslash followed by the apostrophe character, +@acronym{ASCII} character @code{0x27} (@acronym{EBCDIC} character +@code{0x7D}). The same as @code{\[aa]}, the acute accent. @endDefesc @Defesc {\\`, , , } @@ -9221,20 +9331,24 @@ This is a backslash followed by @acronym{ASCII} character @code{0x60} This is the same as @code{\[-]}, the minus sign in the current font. @endDefesc +@Defesc {\\_, , , } +This is the same as @code{\[ul]}, the underline character. +@endDefesc + @Defreq {cflags, n c1 c2 @dots{}} @cindex glyph properties (@code{cflags}) @cindex character properties (@code{cflags}) @cindex properties of glyphs (@code{cflags}) @cindex properties of characters (@code{cflags}) -Input characters and symbols have certain properties associated -with it.@footnote{Note that the output glyphs themselves don't have -such properties. For @code{gtroff}, a glyph is a numbered box with -a given width, depth, and height, nothing else. All manipulations -with the @code{cflags} request work on the input level.} These -properties can be modified with the @code{cflags} request. The -first argument is the sum of the desired flags and the remaining -arguments are the characters or symbols to have those properties. -It is possible to omit the spaces between the characters or symbols. +Input characters and symbols have certain properties associated with +it.@footnote{Note that the output glyphs themselves don't have such +properties. For @code{gtroff}, a glyph is a numbered box with a given +width, depth, and height, nothing else. All manipulations with the +@code{cflags} request work on the input level.} These properties can be +modified with the @code{cflags} request. The first argument is the sum +of the desired flags and the remaining arguments are the characters or +symbols to have those properties. It is possible to omit the spaces +between the characters or symbols. @table @code @item 1 @@ -9247,13 +9361,18 @@ property). @cindex hyphenating characters @cindex characters, hyphenation Lines can be broken before the character (initially no characters have -this property). +this property). This only works if both the characters before and after +have non-zero hyphenation codes (as set with the @code{hcode} request). +Use value@tie{}64 to override this behaviour. @item 4 @cindex @code{hy} glyph, and @code{cflags} @cindex @code{em} glyph, and @code{cflags} Lines can be broken after the character (initially the character -@samp{-} and the symbols @samp{\[hy]} and @samp{\[em]} have this property). +@samp{-} and the symbols @samp{\[hy]} and @samp{\[em]} have this +property). This only works if both the characters before and after have +non-zero hyphenation codes (as set with the @code{hcode} request). Use +value@tie{}64 to override this behaviour. @item 8 @cindex overlapping characters @@ -9263,14 +9382,15 @@ Lines can be broken after the character (initially the character @cindex @code{ru} glyph, and @code{cflags} @cindex @code{radicalex} glyph, and @code{cflags} @cindex @code{sqrtex} glyph, and @code{cflags} -The character overlaps horizontally if used as a horizontal line building -element. Initially the symbols @samp{\[ul]}, @samp{\[rn]}, @samp{\[ru]}, -@samp{\[radicalex]}, and @samp{\[sqrtex]} have this property. +The character overlaps horizontally if used as a horizontal line +building element. Initially the symbols @samp{\[ul]}, @samp{\[rn]}, +@samp{\[ru]}, @samp{\[radicalex]}, and @samp{\[sqrtex]} have this +property. @item 16 @cindex @code{br} glyph, and @code{cflags} -The character overlaps vertically if used as vertical line building element. -Initially symbol @samp{\[br]} has this property. +The character overlaps vertically if used as vertical line building +element. Initially symbol @samp{\[br]} has this property. @item 32 @cindex transparent characters @@ -9284,11 +9404,26 @@ Initially symbol @samp{\[br]} has this property. @cindex @code{rq} glyph, at end of sentence An end-of-sentence character followed by any number of characters with this property is treated as the end of a sentence if followed by a -newline or two spaces; in other words the character is -@dfn{transparent} for the purposes of end-of-sentence recognition -- -this is the same as having a zero space factor in @TeX{} (initially -characters @samp{"')]*} and the symbols @samp{\[dg]} and @samp{\[rq]} have -this property). +newline or two spaces; in other words the character is @dfn{transparent} +for the purposes of end-of-sentence recognition -- this is the same as +having a zero space factor in @TeX{} (initially characters @samp{"')]*} +and the symbols @samp{\[dg]} and @samp{\[rq]} have this property). + +@item 64 +Ignore hyphenation code values of the surrounding characters. Use this +in combination with values 2 and@tie{}4 (initially no characters have +this property). For example, if you need an automatic break point after +the hyphen in number ranges like `3000-5000', insert + +@Example +.cflags 68 - +@endExample + +@noindent +into your document. Note, however, that this can lead to bad layout if +done without thinking; in most situations, a better solution instead of +changing the @code{cflags} value is to insert @code{\:} right after the +hyphen at the places which really need a break point. @end table @endDefreq @@ -9327,18 +9462,18 @@ processed. Any emboldening, constant spacing or track kerning is applied to this object rather than to individual characters in @var{string}. -A glyph defined by these requests can be used just -like a normal glyph provided by the output device. In particular, -other characters can be translated to it with the @code{tr} or -@code{trin} requests; it can be made the leader character by the -@code{lc} request; repeated patterns can be drawn with the glyph -using the @code{\l} and @code{\L} escape sequences; words containing -the glyph can be hyphenated correctly if the @code{hcode} request -is used to give the glyph's symbol a hyphenation code. +A glyph defined by these requests can be used just like a normal glyph +provided by the output device. In particular, other characters can be +translated to it with the @code{tr} or @code{trin} requests; it can be +made the leader character by the @code{lc} request; repeated patterns +can be drawn with the glyph using the @code{\l} and @code{\L} escape +sequences; words containing the glyph can be hyphenated correctly if the +@code{hcode} request is used to give the glyph's symbol a hyphenation +code. -There is a special anti-recursion feature: Use of @code{g} within -the glyph's definition is handled like normal characters and symbols -not defined with @code{char}. +There is a special anti-recursion feature: Use of @code{g} within the +glyph's definition is handled like normal characters and symbols not +defined with @code{char}. Note that the @code{tr} and @code{trin} requests take precedence if @code{char} accesses the same symbol. @@ -9355,24 +9490,24 @@ X @result{} Z @endExample -The @code{fchar} request defines a fallback glyph: -@code{gtroff} only checks for glyphs defined with @code{fchar} -if it cannot find the glyph in the current font. -@code{gtroff} carries out this test before checking special fonts. +The @code{fchar} request defines a fallback glyph: @code{gtroff} only +checks for glyphs defined with @code{fchar} if it cannot find the glyph +in the current font. @code{gtroff} carries out this test before +checking special fonts. -@code{fschar} defines a fallback glyph for font@tie{}@var{f}: @code{gtroff} -checks for glyphs defined with @code{fschar} after the list of fonts -declared as font-specific special fonts with the @code{fspecial} request, -but before the list of fonts declared as global special fonts with the -@code{special} request. +@code{fschar} defines a fallback glyph for font@tie{}@var{f}: +@code{gtroff} checks for glyphs defined with @code{fschar} after the +list of fonts declared as font-specific special fonts with the +@code{fspecial} request, but before the list of fonts declared as global +special fonts with the @code{special} request. Finally, the @code{schar} request defines a global fallback glyph: @code{gtroff} checks for glyphs defined with @code{schar} after the list -of fonts declared as global special fonts with the @code{special} request, -but before the already mounted special fonts. +of fonts declared as global special fonts with the @code{special} +request, but before the already mounted special fonts. -@xref{Using Symbols}, for a detailed description of the glyph -searching mechanism in @code{gtroff}. +@xref{Using Symbols}, for a detailed description of the glyph searching +mechanism in @code{gtroff}. @endDefreq @DefreqList {rchar, c1 c2 @dots{}} @@ -9381,8 +9516,8 @@ searching mechanism in @code{gtroff}. @cindex glyph, removing definition (@code{rchar}, @code{rfschar}) @cindex fallback glyph, removing definition (@code{rchar}, @code{rfschar}) Remove the definitions of glyphs @var{c1}, @var{c2},@tie{}@enddots{} -This undoes the effect of a @code{char}, @code{fchar}, or -@code{schar} request. +This undoes the effect of a @code{char}, @code{fchar}, or @code{schar} +request. It is possible to omit the whitespace between arguments. @@ -9399,9 +9534,9 @@ The request @code{rfschar} removes glyph definitions defined with @cindex special fonts @cindex fonts, special -Special fonts are those that @code{gtroff} searches -when it cannot find the requested glyph in the current font. -The Symbol font is usually a special font. +Special fonts are those that @code{gtroff} searches when it cannot find +the requested glyph in the current font. The Symbol font is usually a +special font. @code{gtroff} provides the following two requests to add more special fonts. @xref{Using Symbols}, for a detailed description of the glyph @@ -9423,8 +9558,8 @@ Previous calls to @code{special} or @code{fspecial} are overwritten; without arguments, the particular list of special fonts is set to empty. Special fonts are searched in the order they appear as arguments. -All fonts which appear in a call to @code{special} or @code{fspecial} are -loaded. +All fonts which appear in a call to @code{special} or @code{fspecial} +are loaded. @xref{Using Symbols}, for the exact search order of glyphs. @endDefreq @@ -9437,10 +9572,10 @@ loaded. @cindex fonts, artificial There are a number of requests and escapes for artificially creating -fonts. These are largely vestiges of the days when output devices -did not have a wide variety of fonts, and when @code{nroff} and -@code{troff} were separate programs. Most of them are no longer -necessary in GNU @code{troff}. Nevertheless, they are supported. +fonts. These are largely vestiges of the days when output devices did +not have a wide variety of fonts, and when @code{nroff} and @code{troff} +were separate programs. Most of them are no longer necessary in GNU +@code{troff}. Nevertheless, they are supported. @DefescList {\\H, ', height, '} @DefescItem {\\H, ', @t{+}height, '} @@ -9458,16 +9593,15 @@ set by @code{\H}. Currently, only the @option{-Tps} device supports this feature. -Note that @code{\H} doesn't produce an input token in @code{gtroff}. -As a consequence, it can be used in requests like @code{mc} (which -expects a single character as an argument) to change the font on -the fly: +Note that @code{\H} doesn't produce an input token in @code{gtroff}. As +a consequence, it can be used in requests like @code{mc} (which expects +a single character as an argument) to change the font on the fly: @Example .mc \H'+5z'x\H'0' @endExample -In compatibility mode, @code{gtroff} behaves differently: If an +In compatibility mode, @code{gtroff} behaves differently: If an increment or decrement is used, it is always taken relative to the current point size and not relative to the previously selected font height. Thus, @@ -9478,8 +9612,8 @@ height. Thus, @endExample @noindent -prints the word @samp{test} twice with the same font height (five -points larger than the current font size). +prints the word @samp{test} twice with the same font height (five points +larger than the current font size). @endDefesc @DefescList {\\S, ', slant, '} @@ -9487,18 +9621,17 @@ points larger than the current font size). @cindex changing the font slant (@code{\S}) @cindex font slant, changing (@code{\S}) @cindex slant, font, changing (@code{\S}) -Slant the current font by @var{slant} degrees. Positive values slant -to the right. Only integer values are possible. +Slant the current font by @var{slant} degrees. Positive values slant to +the right. Only integer values are possible. The read-only number register @code{.slant} contains the font slant as set by @code{\S}. Currently, only the @option{-Tps} device supports this feature. -Note that @code{\S} doesn't produce an input token in @code{gtroff}. -As a consequence, it can be used in requests like @code{mc} (which -expects a single character as an argument) to change the font on -the fly: +Note that @code{\S} doesn't produce an input token in @code{gtroff}. As +a consequence, it can be used in requests like @code{mc} (which expects +a single character as an argument) to change the font on the fly: @Example .mc \S'20'x\S'0' @@ -9521,8 +9654,8 @@ input lines, even if they produce some output like @code{tl}. Lines inserted by macros (e.g.@: invoked by a trap) do count. At the beginning of @code{ul}, the current font is stored and the -underline font is activated. Within the span of a @code{ul} request, -it is possible to change fonts, but after the last line affected by +underline font is activated. Within the span of a @code{ul} request, it +is possible to change fonts, but after the last line affected by @code{ul} the saved font is restored. This number of lines still to be underlined is associated with the @@ -9557,8 +9690,8 @@ a non-negative font position or the name of a font. @DefregListEnd {.b} @cindex imitating bold face (@code{bd}) @cindex bold face, imitating (@code{bd}) -Artificially create a bold font by printing each glyph twice, -slightly offset. +Artificially create a bold font by printing each glyph twice, slightly +offset. Two syntax forms are available. @@ -9581,11 +9714,11 @@ special font is active; in the @code{bd} request, its default unit is @cindex embolding of special fonts @cindex special fonts, emboldening @item -Imitate a bold form conditionally. Embolden @var{font1} by -@var{offset} only if font @var{font2} is the current font. This -command can be issued repeatedly to set up different emboldening -values for different current fonts. If the second argument is -missing, emboldening is turned off for this particular current font. +Imitate a bold form conditionally. Embolden @var{font1} by @var{offset} +only if font @var{font2} is the current font. This command can be +issued repeatedly to set up different emboldening values for different +current fonts. If the second argument is missing, emboldening is turned +off for this particular current font. This affects special fonts only (either set up with the @code{special} command in font files or with the @code{fspecial} request). @@ -9598,11 +9731,11 @@ command in font files or with the @code{fspecial} request). @cindex glyph, constant space @cindex @code{ps} request, and constant glyph space mode Switch to and from @dfn{constant glyph space mode}. If activated, the -width of every glyph is @math{@var{width}/36} ems. The em size is -given absolutely by @var{em-size}; if this argument is missing, the em -value is taken from the current font size (as set with the @code{ps} -request) when the font is effectively in use. Without second and -third argument, constant glyph space mode is deactivated. +width of every glyph is @math{@var{width}/36} ems. The em size is given +absolutely by @var{em-size}; if this argument is missing, the em value +is taken from the current font size (as set with the @code{ps} request) +when the font is effectively in use. Without second and third argument, +constant glyph space mode is deactivated. Default scaling indicator for @var{em-size} is @samp{z}; @var{width} is an integer. @@ -9627,19 +9760,20 @@ supported `ff', `ffi', and `ffl' ligatures. Advanced typesetters or `expert' fonts may include ligatures for `ft' and `ct', although GNU @code{troff} does not support these (yet). -Only the current font is checked for ligatures and kerns; neither special -fonts nor entities defined with the @code{char} request (and its siblings) -are taken into account. +Only the current font is checked for ligatures and kerns; neither +special fonts nor entities defined with the @code{char} request (and its +siblings) are taken into account. @DefreqList {lg, [@Var{flag}]} @DefregListEnd {.lg} @cindex activating ligatures (@code{lg}) @cindex ligatures, activating (@code{lg}) @cindex ligatures enabled register (@code{.lg}) -Switch the ligature mechanism on or off; if the parameter is non-zero -or missing, ligatures are enabled, otherwise disabled. Default is on. -The current ligature mode can be found in the read-only number register -@code{.lg} (set to 1 or@tie{}2 if ligatures are enabled, 0@tie{}otherwise). +Switch the ligature mechanism on or off; if the parameter is non-zero or +missing, ligatures are enabled, otherwise disabled. Default is on. The +current ligature mode can be found in the read-only number register +@code{.lg} (set to 1 or@tie{}2 if ligatures are enabled, +0@tie{}otherwise). Setting the ligature mode to@tie{}2 enables the two-character ligatures (fi, fl, and ff) and disables the three-character ligatures (ffi and @@ -9647,14 +9781,14 @@ ffl). @endDefreq @dfn{Pairwise kerning} is another subtle typesetting mechanism that -modifies the distance between a glyph pair to improve readability. -In most cases (but not always) the distance is decreased. +modifies the distance between a glyph pair to improve readability. In +most cases (but not always) the distance is decreased. @iftex For example, compare the combination of the letters `V' and `A'. With kerning, `VA' is printed. Without kerning it appears as `V@w{}A'. @end iftex -Typewriter-like fonts and fonts for terminals where all glyphs -have the same width don't use kerning. +Typewriter-like fonts and fonts for terminals where all glyphs have the +same width don't use kerning. @DefreqList {kern, [@Var{flag}]} @DefregListEnd {.kern} @@ -9670,19 +9804,19 @@ register @code{.kern} is set to@tie{}1 if pairwise kerning is enabled, @cindex character, zero width space (@code{\&}) @cindex space character, zero width (@code{\&}) If the font description file contains pairwise kerning information, -glyphs from that font are kerned. Kerning between two glyphs -can be inhibited by placing @code{\&} between them: @samp{V\&A}. +glyphs from that font are kerned. Kerning between two glyphs can be +inhibited by placing @code{\&} between them: @samp{V\&A}. @xref{Font File Format}. @endDefreq @cindex track kerning @cindex kerning, track -@dfn{Track kerning} expands or reduces the space between glyphs. -This can be handy, for example, if you need to squeeze a long word -onto a single line or spread some text to fill a narrow column. It -must be used with great care since it is usually considered bad -typography if the reader notices the effect. +@dfn{Track kerning} expands or reduces the space between glyphs. This +can be handy, for example, if you need to squeeze a long word onto a +single line or spread some text to fill a narrow column. It must be +used with great care since it is usually considered bad typography if +the reader notices the effect. @Defreq {tkf, f s1 n1 s2 n2} @cindex activating track kerning (@code{tkf}) @@ -9705,8 +9839,8 @@ length by the same amount to compensate it. @endDefreq Sometimes, when typesetting letters of different fonts, more or less -space at such boundaries are needed. There are two escapes to help -with this. +space at such boundaries are needed. There are two escapes to help with +this. @Defesc {\\/, , , } @cindex italic correction (@code{\/}) @@ -9715,15 +9849,14 @@ with this. @cindex roman glyph, correction after italic glyph (@code{\/}) @cindex italic glyph, correction before roman glyph (@code{\/}) @cindex glyph, italic correction (@code{\/}) -Increase the width of the preceding glyph so that the spacing -between that glyph and the following glyph is correct if the -following glyph is a roman glyph. For example, if an -italic@tie{}@code{f} is immediately followed by a roman right -parenthesis, then in many fonts the top right portion of the@tie{}@code{f} -overlaps the top left of the right parenthesis. Use this escape -sequence whenever an italic glyph is immediately followed by a -roman glyph without any intervening space. This small amount of -space is also called @dfn{italic correction}. +Increase the width of the preceding glyph so that the spacing between +that glyph and the following glyph is correct if the following glyph is +a roman glyph. For example, if an italic@tie{}@code{f} is immediately +followed by a roman right parenthesis, then in many fonts the top right +portion of the@tie{}@code{f} overlaps the top left of the right +parenthesis. Use this escape sequence whenever an italic glyph is +immediately followed by a roman glyph without any intervening space. +This small amount of space is also called @dfn{italic correction}. @iftex @c can't use @Example...@endExample here @@ -9744,13 +9877,12 @@ space is also called @dfn{italic correction}. @cindex glyph, left italic correction (@code{\,}) @cindex roman glyph, correction before italic glyph (@code{\,}) @cindex italic glyph, correction after roman glyph (@code{\,}) -Modify the spacing of the following glyph so that the spacing -between that glyph and the preceding glyph is correct if the -preceding glyph is a roman glyph. Use this escape sequence -whenever a roman glyph is immediately followed by an italic -glyph without any intervening space. In analogy to above, this -space could be called @dfn{left italic correction}, but this term -isn't used widely. +Modify the spacing of the following glyph so that the spacing between +that glyph and the preceding glyph is correct if the preceding glyph is +a roman glyph. Use this escape sequence whenever a roman glyph is +immediately followed by an italic glyph without any intervening space. +In analogy to above, this space could be called @dfn{left italic +correction}, but this term isn't used widely. @iftex @c can't use @Example...@endExample here @@ -9766,8 +9898,8 @@ q\,\f[I]f @endDefesc @Defesc {\\&, , , } -Insert a zero-width character, which is invisible. Its intended use -is to stop interaction of a character with its surrounding. +Insert a zero-width character, which is invisible. Its intended use is +to stop interaction of a character with its surrounding. @itemize @bullet @item @@ -9784,8 +9916,8 @@ Test. @endExample @item -It prevents interpretation of a control character at the beginning of -an input line. +It prevents interpretation of a control character at the beginning of an +input line. @Example .Test @@ -9817,8 +9949,8 @@ request (@pxref{Character Translations}). @Defesc {\\), , , } This escape is similar to @code{\&} except that it behaves like a -character declared with the @code{cflags} request to be transparent -for the purposes of an end-of-sentence character. +character declared with the @code{cflags} request to be transparent for +the purposes of an end-of-sentence character. Its main usage is in macro definitions to protect against arguments starting with a control character. @@ -9853,21 +9985,20 @@ This is a test. @cindex size of type @cindex vertical spacing @cindex spacing, vertical -@code{gtroff} uses two dimensions with each line of text, type size -and vertical spacing. The @dfn{type size} is approximately the height -of the tallest glyph.@footnote{This is usually the parenthesis. -Note that in most cases the real dimensions of the glyphs in a font -are @emph{not} related to its type size! For example, the standard -@sc{PostScript} font families `Times Roman', `Helvetica', and -`Courier' can't be used together at 10@dmn{pt}; to get acceptable -output, the size of `Helvetica' has to be reduced by one point, and -the size of `Courier' must be increased by one point.} @dfn{Vertical -spacing} is the amount of space @code{gtroff} allows for a line of -text; normally, this is about 20%@tie{}larger than the current type -size. Ratios smaller than this can result in hard-to-read text; -larger than this, it spreads the text out more vertically (useful for -term papers). By default, @code{gtroff} uses 10@tie{}point type on -12@tie{}point spacing. +@code{gtroff} uses two dimensions with each line of text, type size and +vertical spacing. The @dfn{type size} is approximately the height of +the tallest glyph.@footnote{This is usually the parenthesis. Note that +in most cases the real dimensions of the glyphs in a font are @emph{not} +related to its type size! For example, the standard @sc{PostScript} +font families `Times Roman', `Helvetica', and `Courier' can't be used +together at 10@dmn{pt}; to get acceptable output, the size of +`Helvetica' has to be reduced by one point, and the size of `Courier' +must be increased by one point.} @dfn{Vertical spacing} is the amount +of space @code{gtroff} allows for a line of text; normally, this is +about 20%@tie{}larger than the current type size. Ratios smaller than +this can result in hard-to-read text; larger than this, it spreads the +text out more vertically (useful for term papers). By default, +@code{gtroff} uses 10@tie{}point type on 12@tie{}point spacing. @cindex leading The difference between type size and vertical spacing is known, by @@ -9893,17 +10024,17 @@ typesetters, as @dfn{leading} (this is pronounced `ledding'). @cindex point sizes, changing (@code{ps}, @code{\s}) Use the @code{ps} request or the @code{\s} escape to change (increase, decrease) the type size (in points). Specify @var{size} as either an -absolute point size, or as a relative change from the current size. -The size@tie{}0, or no argument, goes back to the previous size. +absolute point size, or as a relative change from the current size. The +size@tie{}0, or no argument, goes back to the previous size. -Default scaling indicator of @code{size} is @samp{z}. If @code{size} -is zero or negative, it is set to 1@dmn{u}. +Default scaling indicator of @code{size} is @samp{z}. If @code{size} is +zero or negative, it is set to 1@dmn{u}. @cindex type size registers (@code{.s}, @code{.ps}) @cindex point size registers (@code{.s}, @code{.ps}) -The read-only number register @code{.s} returns the point size in -points as a decimal fraction. This is a string. To get the point -size in scaled points, use the @code{.ps} register instead. +The read-only number register @code{.s} returns the point size in points +as a decimal fraction. This is a string. To get the point size in +scaled points, use the @code{.ps} register instead. @code{.s} is associated with the current environment (@pxref{Environments}). @@ -9943,36 +10074,32 @@ Increase or decrease the point size by @var{nn}@tie{}points. @var{nn} must be exactly two digits. @end table -Note that @code{\s} doesn't produce an input token in @code{gtroff}. -As a consequence, it can be used in requests like @code{mc} (which -expects a single character as an argument) to change the font on -the fly: +Note that @code{\s} doesn't produce an input token in @code{gtroff}. As +a consequence, it can be used in requests like @code{mc} (which expects +a single character as an argument) to change the font on the fly: @Example .mc \s[20]x\s[0] @endExample -@xref{Fractional Type Sizes}, for yet another syntactical form of -using the @code{\s} escape. +@xref{Fractional Type Sizes}, for yet another syntactical form of using +the @code{\s} escape. @endDefreq @Defreq {sizes, s1 s2 @dots{} sn [0]} Some devices may only have certain permissible sizes, in which case -@code{gtroff} rounds to the nearest permissible size. -The @file{DESC} file specifies which sizes are permissible for the device. +@code{gtroff} rounds to the nearest permissible size. The @file{DESC} +file specifies which sizes are permissible for the device. -Use the @code{sizes} request to change the permissible sizes -for the current output device. -Arguments are in scaled points; -the @code{sizescale} line in the -@file{DESC} file for the output device -provides the scaling factor. -For example, if the scaling factor is 1000, -then the value 12000 is 12@tie{}points. +Use the @code{sizes} request to change the permissible sizes for the +current output device. Arguments are in scaled points; the +@code{sizescale} line in the @file{DESC} file for the output device +provides the scaling factor. For example, if the scaling factor is +1000, then the value 12000 is 12@tie{}points. -Each argument can be a single point size (such as @samp{12000}), -or a range of sizes (such as @samp{4000-72000}). -You can optionally end the list with a zero. +Each argument can be a single point size (such as @samp{12000}), or a +range of sizes (such as @samp{4000-72000}). You can optionally end the +list with a zero. @endDefreq @DefreqList {vs, [@Var{space}]} @@ -10003,8 +10130,8 @@ spacing; it is associated with the current environment @endDefreq @cindex vertical line spacing, effective value -The effective vertical line spacing consists of four components. Breaking -a line causes the following actions (in the given order). +The effective vertical line spacing consists of four components. +Breaking a line causes the following actions (in the given order). @itemize @bullet @item @@ -10015,8 +10142,8 @@ space}. This is the minimum value of all @code{\x} escapes with a negative argument in the current output line. @item -Move the current point vertically by the vertical line spacing as set with -the @code{vs} request. +Move the current point vertically by the vertical line spacing as set +with the @code{vs} request. @item Output the current line. @@ -10031,14 +10158,14 @@ positive argument in the line which has just been output. @item @cindex post-vertical line spacing @cindex line spacing, post-vertical (@code{pvs}) -Move the current point vertically by the @dfn{post-vertical line spacing} -as set with the @code{pvs} request. +Move the current point vertically by the @dfn{post-vertical line +spacing} as set with the @code{pvs} request. @end itemize @cindex double-spacing (@code{vs}, @code{pvs}) It is usually better to use @code{vs} or @code{pvs} instead of @code{ls} -to produce double-spaced documents: @code{vs} and @code{pvs} have a finer -granularity for the inserted vertical space compared to @code{ls}; +to produce double-spaced documents: @code{vs} and @code{pvs} have a +finer granularity for the inserted vertical space compared to @code{ls}; furthermore, certain preprocessors assume single-spacing. @xref{Manipulating Spacing}, for more details on the @code{\x} escape @@ -10051,11 +10178,11 @@ and the @code{ls} request. @cindex @code{ls} request, alternative to (@code{pvs}) @cindex post-vertical line spacing, changing (@code{pvs}) @cindex post-vertical line spacing register (@code{.pvs}) -Change (increase, decrease) the post-vertical spacing by -@var{space}. The default scaling indicator is @samp{p}. +Change (increase, decrease) the post-vertical spacing by @var{space}. +The default scaling indicator is @samp{p}. -If @code{pvs} is called without an argument, the post-vertical spacing is -reset to the previous value before the last call to @code{pvs}. +If @code{pvs} is called without an argument, the post-vertical spacing +is reset to the previous value before the last call to @code{pvs}. @code{gtroff} creates a warning of type @samp{range} if @var{space} is zero or negative; the vertical spacing is then set to zero. @@ -10084,18 +10211,18 @@ post-vertical spacing; it is associated with the current environment @cindex @code{tkf} request, with fractional type sizes @cindex @code{\H}, with fractional type sizes @cindex @code{\s}, with fractional type sizes -A @dfn{scaled point} is equal to @math{1/@var{sizescale}} points, -where @var{sizescale} is specified in the @file{DESC} file (1@tie{}by -default). There is a new scale indicator @samp{z} which has the -effect of multiplying by @var{sizescale}. Requests and escape -sequences in @code{gtroff} interpret arguments that represent a point -size as being in units of scaled points, but they evaluate each such -argument using a default scale indicator of @samp{z}. Arguments -treated in this way are the argument to the @code{ps} request, the -third argument to the @code{cs} request, the second and fourth -arguments to the @code{tkf} request, the argument to the @code{\H} -escape sequence, and those variants of the @code{\s} escape sequence -that take a numeric expression as their argument (see below). +A @dfn{scaled point} is equal to @math{1/@var{sizescale}} points, where +@var{sizescale} is specified in the @file{DESC} file (1@tie{}by +default). There is a new scale indicator @samp{z} which has the effect +of multiplying by @var{sizescale}. Requests and escape sequences in +@code{gtroff} interpret arguments that represent a point size as being +in units of scaled points, but they evaluate each such argument using a +default scale indicator of @samp{z}. Arguments treated in this way are +the argument to the @code{ps} request, the third argument to the +@code{cs} request, the second and fourth arguments to the @code{tkf} +request, the argument to the @code{\H} escape sequence, and those +variants of the @code{\s} escape sequence that take a numeric expression +as their argument (see below). For example, suppose @var{sizescale} is@tie{}1000; then a scaled point is equivalent to a millipoint; the request @w{@samp{.ps 10.25}} is @@ -10103,12 +10230,11 @@ equivalent to @w{@samp{.ps 10.25z}} and thus sets the point size to 10250@tie{}scaled points, which is equal to 10.25@tie{}points. @code{gtroff} disallows the use of the @samp{z} scale indicator in -instances where it would make no sense, such as a numeric -expression whose default scale indicator was neither @samp{u} nor -@samp{z}. Similarly it would make -no sense to use a scaling indicator other than @samp{z} or @samp{u} in a -numeric expression whose default scale indicator was @samp{z}, and so -@code{gtroff} disallows this as well. +instances where it would make no sense, such as a numeric expression +whose default scale indicator was neither @samp{u} nor @samp{z}. +Similarly it would make no sense to use a scaling indicator other than +@samp{z} or @samp{u} in a numeric expression whose default scale +indicator was @samp{z}, and so @code{gtroff} disallows this as well. There is also new scale indicator @samp{s} which multiplies by the number of units in a scaled point. So, for example, @samp{\n[.ps]s} is @@ -10129,15 +10255,15 @@ A read-only number register returning the point size in scaled points. @cindex @code{.ps} register, in comparison with @code{.psr} @cindex @code{.s} register, in comparison with @code{.sr} The last-requested point size in scaled points is contained in the -@code{.psr} read-only number register. The last requested point size -in points as a decimal fraction can be found in @code{.sr}. This is a +@code{.psr} read-only number register. The last requested point size in +points as a decimal fraction can be found in @code{.sr}. This is a string-valued read-only number register. -Note that the requested point sizes are device-independent, whereas -the values returned by the @code{.ps} and @code{.s} registers are not. -For example, if a point size of 11@dmn{pt} is requested, and a -@code{sizes} request (or a @code{sizescale} line in a @file{DESC} file) -specifies 10.95@dmn{pt} instead, this value is actually used. +Note that the requested point sizes are device-independent, whereas the +values returned by the @code{.ps} and @code{.s} registers are not. For +example, if a point size of 11@dmn{pt} is requested, and a @code{sizes} +request (or a @code{sizescale} line in a @file{DESC} file) specifies +10.95@dmn{pt} instead, this value is actually used. Both registers are associated with the current environment (@pxref{Environments}). @@ -10149,8 +10275,8 @@ fractional type sizes: @table @code @item \s[@var{n}] @itemx \s'@var{n}' -Set the point size to @var{n}@tie{}scaled points; @var{n}@tie{}is a numeric -expression with a default scale indicator of @samp{z}. +Set the point size to @var{n}@tie{}scaled points; @var{n}@tie{}is a +numeric expression with a default scale indicator of @samp{z}. @item \s[+@var{n}] @itemx \s[-@var{n}] @@ -10161,8 +10287,8 @@ expression with a default scale indicator of @samp{z}. @itemx \s+'@var{n}' @itemx \s-'@var{n}' Increase or or decrease the point size by @var{n}@tie{}scaled points; -@var{n}@tie{}is a numeric expression with a default scale indicator of -@samp{z}. +@var{n}@tie{}is a numeric expression (which may start with a minus sign) +with a default scale indicator of @samp{z}. @end table @xref{Font Files}. @@ -10191,8 +10317,8 @@ even this is a read-write string variable). @cindex arguments, of strings Define and access a string variable @var{name} (one-character name@tie{}@var{n}, two-character name @var{nm}). If @var{name} already -exists, @code{ds} overwrites the previous definition. Only the syntax form -using brackets can take arguments which are handled identically to +exists, @code{ds} overwrites the previous definition. Only the syntax +form using brackets can take arguments which are handled identically to macro arguments; the single exception is that a closing bracket as an argument must be enclosed in double quotes. @xref{Request and Macro Arguments}, and @ref{Parameters}. @@ -10210,7 +10336,7 @@ The @code{\*} escape @dfn{interpolates} (expands in-place) a previously-defined string variable. To be more precise, the stored string is pushed onto the input stack which is then parsed by @code{gtroff}. Similar to number registers, it is possible to nest -strings, i.e. string variables can be called within string variables. +strings, i.e., string variables can be called within string variables. If the string named by the @code{\*} escape does not exist, it is defined as empty, and a warning of type @samp{mac} is emitted (see @@ -10240,9 +10366,9 @@ escape adjacent with the end of the string. @cindex leading spaces with @code{ds} @cindex spaces with @code{ds} @cindex @code{ds} request, and leading spaces -To produce leading space the string can be started with a double -quote. No trailing quote is needed; in fact, any trailing quote is -included in your string. +To produce leading space the string can be started with a double quote. +No trailing quote is needed; in fact, any trailing quote is included in +your string. @Example .ds sign " Yours in a white wine sauce, @@ -10253,8 +10379,8 @@ included in your string. @cindex newline character, in strings, escaping @cindex escaping newline characters, in strings Strings are not limited to a single line of text. A string can span -several lines by escaping the newlines with a backslash. The -resulting string is stored @emph{without} the newlines. +several lines by escaping the newlines with a backslash. The resulting +string is stored @emph{without} the newlines. @Example .ds foo lots and lots \ @@ -10266,10 +10392,10 @@ It is not possible to have real newlines in a string. To put a single double quote character into a string, use two consecutive double quote characters. -The @code{ds1} request turns off compatibility mode -while interpreting a string. To be more precise, a @dfn{compatibility -save} input token is inserted at the beginning of the string, and a -@dfn{compatibility restore} input token at the end. +The @code{ds1} request turns off compatibility mode while interpreting a +string. To be more precise, a @dfn{compatibility save} input token is +inserted at the beginning of the string, and a @dfn{compatibility +restore} input token at the end. @Example .nr xxx 12345 @@ -10308,10 +10434,28 @@ This is @result{} This is a funny test. @endExample +In particular, interpolating a string does not hide existing macro +arguments. Thus in a macro, a more efficient way of doing + +@Example +.xx \\$@@ +@endExample + +@noindent +is + +@Example +\\*[xx]\\ +@endExample + +@noindent +Note that the latter calling syntax doesn't change the value of +@code{\$0}, which is then inherited from the calling macro. + Diversions and boxes can be also called with string syntax. -Another consequence is that you can copy one-line diversions or boxes -to a string. +Another consequence is that you can copy one-line diversions or boxes to +a string. @Example .di xxx @@ -10324,12 +10468,12 @@ a \fItest\fR @endExample @noindent -As the previous example shows, it is possible to store formatted -output in strings. The @code{\c} escape prevents the insertion of an +As the previous example shows, it is possible to store formatted output +in strings. The @code{\c} escape prevents the insertion of an additional blank line in the output. -Copying diversions longer than a single output line produces -unexpected results. +Copying diversions longer than a single output line produces unexpected +results. @Example .di xxx @@ -10343,12 +10487,12 @@ test @result{} test This is a funny. @endExample -Usually, it is not predictable whether a diversion contains one or -more output lines, so this mechanism should be avoided. With -@acronym{UNIX} @code{troff}, this was the only solution to strip off a -final newline from a diversion. Another disadvantage is that the -spaces in the copied string are already formatted, making them -unstretchable. This can cause ugly results. +Usually, it is not predictable whether a diversion contains one or more +output lines, so this mechanism should be avoided. With @acronym{UNIX} +@code{troff}, this was the only solution to strip off a final newline +from a diversion. Another disadvantage is that the spaces in the copied +string are already formatted, making them unstretchable. This can cause +ugly results. @cindex stripping final newline in diversions @cindex diversion, stripping final newline @@ -10357,10 +10501,9 @@ unstretchable. This can cause ugly results. @cindex horizontal space, unformatting @cindex space, horizontal, unformatting @cindex unformatting horizontal space -A clean solution to this problem is available in GNU @code{troff}, -using the requests @code{chop} to remove the final newline of a -diversion, and @code{unformat} to make the horizontal spaces -stretchable again. +A clean solution to this problem is available in GNU @code{troff}, using +the requests @code{chop} to remove the final newline of a diversion, and +@code{unformat} to make the horizontal spaces stretchable again. @Example .box xxx @@ -10402,13 +10545,13 @@ requests. @Defreq {substring, str n1 [@Var{n2}]} @cindex substring (@code{substring}) -Replace the string named @var{str} with the substring -defined by the indices @var{n1} and@tie{}@var{n2}. The first character -in the string has index@tie{}0. If @var{n2} is omitted, it is taken to -be equal to the string's length. If the index value @var{n1} or -@var{n2} is negative, it is counted from the end of the -string, going backwards: The last character has index@tie{}@minus{}1, the -character before the last character has index@tie{}@minus{}2, etc. +Replace the string named @var{str} with the substring defined by the +indices @var{n1} and@tie{}@var{n2}. The first character in the string +has index@tie{}0. If @var{n2} is omitted, it is taken to be equal to +the string's length. If the index value @var{n1} or @var{n2} is +negative, it is counted from the end of the string, going backwards: The +last character has index@tie{}@minus{}1, the character before the last +character has index@tie{}@minus{}2, etc. @Example .ds xxx abcdefgh @@ -10421,6 +10564,9 @@ character before the last character has index@tie{}@minus{}2, etc. @Defreq {length, reg str} @cindex length of a string (@code{length}) @cindex string, length of (@code{length}) +@cindex @code{length} request, and copy-in mode +@cindex copy-in mode, and @code{length} request +@cindex mode, copy-in, and @code{length} request Compute the number of characters of @var{str} and return it in the number register @var{reg}. If @var{reg} doesn't exist, it is created. @code{str} is read in copy mode. @@ -10458,6 +10604,7 @@ Remove the request, macro, diversion, or string @var{xx}. @code{gtroff} treats subsequent invocations as if the object had never been defined. @endDefreq +@anchor{als} @Defreq {als, new old} @cindex alias, string, creating (@code{als}) @cindex alias, macro, creating (@code{als}) @@ -10470,17 +10617,60 @@ treats subsequent invocations as if the object had never been defined. @cindex diversion, creating alias (@code{als}) Create an alias named @var{new} for the request, string, macro, or diversion object named @var{old}. The new name and the old name are -exactly equivalent (it is similar to a hard rather than a soft -link). If @var{old} is undefined, @code{gtroff} generates a warning of -type @samp{mac} and ignores the request. +exactly equivalent (it is similar to a hard rather than a soft link). If +@var{old} is undefined, @code{gtroff} generates a warning of type +@samp{mac} and ignores the request. + +To understand how the @code{als} request works it is probably best to +think of two different pools: one pool for objects (macros, strings, +etc.), and another one for names. As soon as an object is defined, +@code{gtroff} adds it to the object pool, adds its name to the name +pool, and creates a link between them. When @code{als} creates an +alias, it adds a new name to the name pool which gets linked to the same +object as the old name. + +Now consider this example. + +@Example +.de foo +.. +. +.als bar foo +. +.de bar +. foo +.. +. +.bar + @result{} input stack limit exceeded +@endExample + +@noindent +The definition of macro @code{bar} replaces the old object this name is +linked to. However, the alias to @code{foo} is still active! In +other words, @code{foo} is still linked to the same object as +@code{bar}, and the result of calling @code{bar} is an infinite, +recursive loop which finally leads to an error. + +@cindex alias, string, removing (@code{rm}) +@cindex alias, macro, removing (@code{rm}) +@cindex alias, diversion, removing (@code{rm}) +@cindex removing alias, for string (@code{rm}) +@cindex removing alias, for macro (@code{rm}) +@cindex removing alias, for diversion (@code{rm}) +@cindex string, removing alias (@code{rm}) +@cindex macro, removing alias (@code{rm}) +@cindex diversion, removing alias (@code{rm}) +To undo an alias, simply call @code{rm} on the aliased name. The object +itself is not destroyed until there are no more aliases. @endDefreq @Defreq {chop, xx} Remove (chop) the last character from the macro, string, or diversion -named @var{xx}. This is useful for removing the newline from the end -of diversions that are to be interpolated as strings. This command -can be used repeatedly; see @ref{Gtroff Internals}, for details on -nodes inserted additionally by @code{gtroff}. +named @var{xx}. This is useful for removing the newline from the end of +diversions that are to be interpolated as strings. This command can be +used repeatedly; see @ref{Gtroff Internals}, for details on nodes +inserted additionally by @code{gtroff}. @endDefreq @xref{Identifiers}, and @ref{Comments}. @@ -10505,9 +10695,10 @@ nodes inserted additionally by @code{gtroff}. @subsection Operators in Conditionals @cindex @code{if} request, operators to use with +@cindex @code{ie} request, operators to use with @cindex @code{while} request, operators to use with -In @code{if} and @code{while} requests, there are several more -operators available: +In @code{if}, @code{ie}, and @code{while} requests, there are several +more operators available: @table @code @item e @@ -10515,22 +10706,27 @@ operators available: True if the current page is even or odd numbered (respectively). @item n +@cindex conditional output for terminal (TTY) +@cindex TTY, conditional output for +@cindex terminal, conditional output for True if the document is being processed in nroff mode (i.e., the -@code{.nroff} command has been issued). +@code{.nroff} command has been issued). @xref{Troff and Nroff Mode}. @item t True if the document is being processed in troff mode (i.e., the -@code{.troff} command has been issued). +@code{.troff} command has been issued). @xref{Troff and Nroff Mode}. @item v Always false. This condition is for compatibility with other @code{troff} versions only (identifying a @code{-Tversatec} device). @item '@var{xxx}'@var{yyy}' -True if the string @var{xxx} is equal to the string @var{yyy}. Other -characters can be used in place of the single quotes; the same set of -delimiters as for the @code{\D} escape is used (@pxref{Escapes}). -@code{gtroff} formats the strings before being compared: +True if the output produced by @var{xxx} is equal to the output produced +by @var{yyy}. Other characters can be used in place of the single +quotes; the same set of delimiters as for the @code{\D} escape is used +(@pxref{Escapes}). @code{gtroff} formats @var{xxx} and @var{yyy} in +separate environments; after the comparison the resulting data is +discarded. @Example .ie "|"\fR|\fP" \ @@ -10543,13 +10739,42 @@ false @noindent The resulting motions, glyph sizes, and fonts have to match,@footnote{The created output nodes must be identical. -@xref{Gtroff Internals}.} and not the individual motion, size, and -font requests. In the previous example, @samp{|} and @samp{\fR|\fP} -both result in a roman @samp{|} glyph with the same point size and -at the same location on the page, so the strings are equal. If -@samp{.ft@tie{}I} had been added before the @samp{.ie}, the result -would be ``false'' because (the first) @samp{|} produces an italic -@samp{|} rather than a roman one. +@xref{Gtroff Internals}.} and not the individual motion, size, and font +requests. In the previous example, @samp{|} and @samp{\fR|\fP} both +result in a roman @samp{|} glyph with the same point size and at the +same location on the page, so the strings are equal. If +@samp{.ft@tie{}I} had been added before the @samp{.ie}, the result would +be ``false'' because (the first) @samp{|} produces an italic @samp{|} +rather than a roman one. + +@cindex string comparison +@cindex comparison of strings +To compare strings without processing, surround the data with @code{\?}. + +@Example +.ie "\?|\?"\?\fR|\fP\?" \ +true +.el \ +false + @result{} false +@endExample + +@cindex @code{\?}, and copy-in mode +@cindex copy-in mode, and @code{\?} +@cindex mode, copy-in, and @code{\?} +@noindent +Since data protected with @code{\?} is read in copy-in mode it is even +possible to use incomplete input without causing an error. + +@Example +.ds a \[ +.ds b \[ +.ie '\?\*a\?'\?\*b\?' \ +true +.el \ +false + @result{} true +@endExample @item r @var{xxx} True if there is a number register named @var{xxx}. @@ -10564,25 +10789,27 @@ True if there is a color named @var{xxx}. True if there is a glyph @var{g} available@footnote{The name of this conditional operator is a misnomer since it tests names of output glyphs.}; @var{g} is either an @acronym{ASCII} character or a special -character (@code{\(@var{gg}} or @code{\[@var{ggg}]}); the condition -is also true if @var{g} has been defined by the @code{char} request. +character (@code{\N'@var{xxx}'}, @code{\(@var{gg}} or +@code{\[@var{ggg}]}); the condition is also true if @var{g} has been +defined by the @code{char} request. @item F @var{font} -True if a font named @var{font} exists. @var{font} is handled as if it was -opened with the @code{ft} request (this is, font translation and styles are -applied), without actually mounting it. +True if a font named @var{font} exists. @var{font} is handled as if it +was opened with the @code{ft} request (this is, font translation and +styles are applied), without actually mounting it. This test doesn't load the complete font but only its header to verify its validity. @item S @var{style} -True if style @var{style} has been registered. Font translation is applied. +True if style @var{style} has been registered. Font translation is +applied. @end table Note that these operators can't be combined with other operators like @samp{:} or @samp{&}; only a leading @samp{!} (without whitespace -between the exclamation mark and the operator) can be used to negate -the result. +between the exclamation mark and the operator) can be used to negate the +result. @Example .nr xxx 1 @@ -10635,15 +10862,14 @@ by itself (except that leading spaces are swallowed). @endExample @endDefreq -@Defreq{nop, anything} -Executes @var{anything}. -This is similar to @code{.if@tie{}1}. +@Defreq {nop, anything} +Executes @var{anything}. This is similar to @code{.if@tie{}1}. @endDefreq @DefreqList {ie, expr anything} @DefreqListEnd {el, anything} -Use the @code{ie} and @code{el} requests to write an if-then-else. -The first request is the `if' part and the latter is the `else' part. +Use the @code{ie} and @code{el} requests to write an if-then-else. The +first request is the `if' part and the latter is the `else' part. @Example .ie n .ls 2 \" double-spacing in nroff @@ -10717,11 +10943,11 @@ Some remarks. @itemize @bullet @item The body of a @code{while} request is treated like the body of a -@code{de} request: @code{gtroff} temporarily stores it in a macro -which is deleted after the loop has been exited. It can considerably -slow down a macro if the body of the @code{while} request (within the -macro) is large. Each time the macro is executed, the @code{while} -body is parsed and stored again as a temporary macro. +@code{de} request: @code{gtroff} temporarily stores it in a macro which +is deleted after the loop has been exited. It can considerably slow +down a macro if the body of the @code{while} request (within the macro) +is large. Each time the macro is executed, the @code{while} body is +parsed and stored again as a temporary macro. @Example .de xxx @@ -10777,8 +11003,8 @@ The closing brace of a @code{while} body must end a line. @cindex @code{while} request, confusing with @code{br} @cindex @code{break} request, in a @code{while} loop @cindex @code{continue} request, in a @code{while} loop -Break out of a @code{while} loop. Be sure not to confuse this with -the @code{br} request (causing a line break). +Break out of a @code{while} loop. Be sure not to confuse this with the +@code{br} request (causing a line break). @endDefreq @Defreq {continue, } @@ -10796,8 +11022,9 @@ restarting the next iteration. @cindex writing macros @cindex macros, writing -A @dfn{macro} is a collection of text and embedded commands which can -be invoked multiple times. Use macros to define common operations. +A @dfn{macro} is a collection of text and embedded commands which can be +invoked multiple times. Use macros to define common operations. +@xref{Strings}, for a (limited) alternative syntax to call macros. @DefreqList {de, name [@Var{end}]} @DefreqItem {de1, name [@Var{end}]} @@ -10805,11 +11032,27 @@ be invoked multiple times. Use macros to define common operations. @DefreqListEnd {dei1, name [@Var{end}]} Define a new macro named @var{name}. @code{gtroff} copies subsequent lines (starting with the next one) into an internal buffer until it -encounters the line @samp{..} (two dots). The optional second -argument to @code{de} changes this to a macro to @samp{.@var{end}}. +encounters the line @samp{..} (two dots). The optional second argument +to @code{de} changes this to a macro to @samp{.@var{end}}. There can be whitespace after the first dot in the line containing the -ending token (either @samp{.} or macro @samp{@var{end}}). +ending token (either @samp{.} or macro @samp{@var{end}}). Don't insert +a tab character immediately after the @samp{..}, otherwise it isn't +recognized as the end-of-macro symbol.@footnote{While it is possible to +define and call a macro @samp{.} with + +@Example +.de . +. tm foo +.. +. +.. \" This calls macro `.'! +@endExample + +@noindent +you can't use this as the end-of-macro macro: during a macro definition, +@samp{..} is never handled as a call to @samp{.}, even if you say +@samp{.de foo .} explicitly.} Here a small example macro called @samp{P} which causes a break and inserts some vertical space. It could be used to separate paragraphs. @@ -10822,8 +11065,8 @@ inserts some vertical space. It could be used to separate paragraphs. @endExample The following example defines a macro within another. Remember that -expansion must be protected twice; once for reading the macro and -once for executing. +expansion must be protected twice; once for reading the macro and once +for executing. @Example \# a dummy macro to avoid a warning @@ -10843,12 +11086,12 @@ once for executing. @noindent Since @code{\f} has no expansion, it isn't necessary to protect its -backslash. Had we defined another macro within @code{bar} which takes -a parameter, eight backslashes would be necessary before @samp{$1}. +backslash. Had we defined another macro within @code{bar} which takes a +parameter, eight backslashes would be necessary before @samp{$1}. -The @code{de1} request turns off compatibility mode -while executing the macro. On entry, the current compatibility mode -is saved and restored at exit. +The @code{de1} request turns off compatibility mode while executing the +macro. On entry, the current compatibility mode is saved and restored +at exit. @Example .nr xxx 12345 @@ -10869,9 +11112,9 @@ The value of xxx ix \\n[xxx]. @result{} The value of xxx ix 12345. @endExample -The @code{dei} request defines a macro indirectly. -That is, it expands strings whose names -are @var{name} or @var{end} before performing the append. +The @code{dei} request defines a macro indirectly. That is, it expands +strings whose names are @var{name} or @var{end} before performing the +append. This: @@ -10891,18 +11134,22 @@ is equivalent to: The @code{dei1} request is similar to @code{dei} but with compatibility mode switched off during execution of the defined macro. -If compatibility mode is on, @code{de} (and @code{dei}) behave similar to -@code{de1} (and @code{dei1}): A `compatibility save' token is inserted at -the beginning, and a `compatibility restore' token at the end, with -compatibility mode switched on during execution. @xref{Gtroff Internals}, -for more information on switching compatibility mode on and off in a -single document. +If compatibility mode is on, @code{de} (and @code{dei}) behave similar +to @code{de1} (and @code{dei1}): A `compatibility save' token is +inserted at the beginning, and a `compatibility restore' token at the +end, with compatibility mode switched on during execution. @xref{Gtroff +Internals}, for more information on switching compatibility mode on and +off in a single document. @pindex trace.tmac -Using @file{trace.tmac}, you can trace calls to @code{de} and @code{de1}. +Using @file{trace.tmac}, you can trace calls to @code{de} and +@code{de1}. Note that macro identifiers are shared with identifiers for strings and diversions. + +@xref{als,,the description of the @code{als} request}, for possible +pitfalls if redefining a macro which has been aliased. @endDefreq @DefreqList {am, name [@Var{end}]} @@ -10922,30 +11169,31 @@ existing macro like this: .. @endExample -The @code{am1} request turns off compatibility mode -while executing the appended macro piece. To be more precise, a -@dfn{compatibility save} input token is inserted at the beginning of -the appended code, and a @dfn{compatibility restore} input token at -the end. +The @code{am1} request turns off compatibility mode while executing the +appended macro piece. To be more precise, a @dfn{compatibility save} +input token is inserted at the beginning of the appended code, and a +@dfn{compatibility restore} input token at the end. -The @code{ami} request appends indirectly, -meaning that @code{gtroff} expands strings whose names -are @var{name} or @var{end} before performing the append. +The @code{ami} request appends indirectly, meaning that @code{gtroff} +expands strings whose names are @var{name} or @var{end} before +performing the append. The @code{ami1} request is similar to @code{ami} but compatibility mode is switched off during execution of the defined macro. @pindex trace.tmac -Using @file{trace.tmac}, you can trace calls to @code{am} and @code{am1}. +Using @file{trace.tmac}, you can trace calls to @code{am} and +@code{am1}. @endDefreq -@xref{Strings}, for the @code{als} request to rename a macro. +@xref{Strings}, for the @code{als} and @code{rn} request to create an +alias and rename a macro, respectively. -The @code{de}, @code{am}, @code{di}, @code{da}, @code{ds}, and -@code{as} requests (together with its variants) only create a new object -if the name of the macro, diversion or string diversion is currently -undefined or if it is defined to be a request; normally they modify the -value of an existing object. +The @code{de}, @code{am}, @code{di}, @code{da}, @code{ds}, and @code{as} +requests (together with its variants) only create a new object if the +name of the macro, diversion or string diversion is currently undefined +or if it is defined to be a request; normally they modify the value of +an existing object. @Defreq {return, [@Var{anything}]} Exit a macro, immediately returning to the caller. @@ -10964,7 +11212,9 @@ macro one level higher. This is used to define a wrapper macro for @node Copy-in Mode, Parameters, Writing Macros, Writing Macros @subsection Copy-in Mode +@cindex copy mode @cindex copy-in mode +@cindex mode, copy @cindex mode, copy-in @cindex @code{\n}, when reading text for a macro @@ -10974,11 +11224,10 @@ macro one level higher. This is used to define a wrapper macro for @cindex \@key{RET}, when reading text for a macro When @code{gtroff} reads in the text for a macro, string, or diversion, it copies the text (including request lines, but excluding escapes) into -an internal buffer. Escapes are converted into an internal form, -except for @code{\n}, @code{\$}, @code{\*}, @code{\\} and -@code{\@key{RET}} which are evaluated and inserted into the text where -the escape was located. This is known as @dfn{copy-in} mode or -@dfn{copy} mode. +an internal buffer. Escapes are converted into an internal form, except +for @code{\n}, @code{\$}, @code{\*}, @code{\\} and @code{\@key{RET}} +which are evaluated and inserted into the text where the escape was +located. This is known as @dfn{copy-in} mode or @dfn{copy} mode. What this means is that you can specify when these escapes are to be evaluated (either at copy-in time or at the time of use) by insulating @@ -11008,8 +11257,8 @@ escapes. @Defreg {.$} @cindex number of arguments register (@code{.$}) -The number of arguments passed to a macro or string. This is a read-only -number register. +The number of arguments passed to a macro or string. This is a +read-only number register. Note that the @code{shift} request can change its value. @endDefreg @@ -11021,23 +11270,24 @@ escapes: @DefescItem {\\$, @Lparen{}, nn, } @DefescListEnd {\\$, @Lbrack{}, nnn, @Rbrack{}} @cindex copy-in mode, and macro arguments +@cindex mode, copy-in, and macro arguments @cindex macro, arguments (@code{\$}) @cindex arguments, macro (@code{\$}) Retrieve the @var{n}@dmn{th}, @var{nn}@dmn{th} or @var{nnn}@dmn{th} -argument. As usual, the first form only accepts a single number -(larger than zero), the second a two-digit number (larger or equal -to@tie{}10), and the third any positive integer value (larger -than zero). Macros and strings can have an unlimited number of arguments. -Note that due to copy-in mode, use two backslashes on these in actual use -to prevent interpolation until the macro is actually invoked. +argument. As usual, the first form only accepts a single number (larger +than zero), the second a two-digit number (larger or equal to@tie{}10), +and the third any positive integer value (larger than zero). Macros and +strings can have an unlimited number of arguments. Note that due to +copy-in mode, use two backslashes on these in actual use to prevent +interpolation until the macro is actually invoked. @endDefesc @Defreq {shift, [@Var{n}]} -Shift the arguments 1@tie{}position, or as -many positions as specified by its argument. After executing this -request, argument@tie{}@var{i} becomes argument @math{@var{i}-@var{n}}; -arguments 1 to@tie{}@var{n} are no longer available. Shifting by -negative amounts is currently undefined. +Shift the arguments 1@tie{}position, or as many positions as specified +by its argument. After executing this request, argument@tie{}@var{i} +becomes argument @math{@var{i}-@var{n}}; arguments 1 to@tie{}@var{n} are +no longer available. Shifting by negative amounts is currently +undefined. The register @code{.$} is adjusted accordingly. @endDefreq @@ -11046,30 +11296,77 @@ The register @code{.$} is adjusted accordingly. @DefescListEnd {\\$@@, , , } In some cases it is convenient to use all of the arguments at once (for example, to pass the arguments along to another macro). The @code{\$*} -escape concatenates all the arguments separated by spaces. A -similar escape is @code{\$@@}, which concatenates all the -arguments with each surrounded by double quotes, and separated by -spaces. If not in compatibility mode, the input level of double quotes -is preserved (see @ref{Request and Macro Arguments}). +escape concatenates all the arguments separated by spaces. A similar +escape is @code{\$@@}, which concatenates all the arguments with each +surrounded by double quotes, and separated by spaces. If not in +compatibility mode, the input level of double quotes is preserved (see +@ref{Request and Macro Arguments}). +@endDefesc + +@Defesc {\\$^, , , } +Handle the parameters of a macro as if they were an argument to the +@code{ds} or similar requests. + +@Example +.de foo +. tm $1=`\\$1' +. tm $2=`\\$2' +. tm $*=`\\$*' +. tm $@@=`\\$@@' +. tm $^=`\\$^' +.. +.foo " This is a "test" + @result{} $1=` This is a ' + @result{} $2=`test"' + @result{} $*=` This is a test"' + @result{} $@@=`" This is a " "test""' + @result{} $^=`" This is a "test"' +@endExample + +This escape is useful mainly for macro packages like @file{trace.tmac} +which redefines some requests and macros for debugging purposes. @endDefesc @Defesc {\\$0, , , } @cindex macro name register (@code{\$0}) @cindex @code{als} request, and @code{\$0} -The name used to invoke the current macro. -The @code{als} request can make a macro have more than one name. +The name used to invoke the current macro. The @code{als} request can +make a macro have more than one name. + +If a macro is called as a string (within another macro), the value of +@code{\$0} isn't changed. @Example -.de generic-macro -. ... -. if \\n[error] \@{\ -. tm \\$0: Houston, we have a problem. -. return -. \@} +.de foo +. tm \\$0 .. +.als foo bar . -.als foo generic-macro -.als bar generic-macro +@endExample +@Example +.de aaa +. foo +.. +.de bbb +. bar +.. +.de ccc +\\*[foo]\\ +.. +.de ddd +\\*[bar]\\ +.. +. +@endExample +@Example +.aaa + @result{} foo +.bbb + @result{} bar +.ccc + @result{} ccc +.ddd + @result{} ddd @endExample @endDefesc @@ -11097,15 +11394,15 @@ vertical motion, @code{sp}. @cindex location, vertical, page, returning to marked (@code{rt}) @cindex vertical page location, returning to marked (@code{rt}) The request @code{mk} can be used to mark a location on a page, for -movement to later. This request takes a register name as an argument -in which to store the current page location. With no argument it -stores the location in an internal register. The results of this can -be used later by the @code{rt} or the @code{sp} request (or the -@code{\v} escape). - -The @code{rt} request returns @emph{upwards} to the location marked -with the last @code{mk} request. If used with an argument, return to -a position which distance from the top of the page is @var{dist} (no +movement to later. This request takes a register name as an argument in +which to store the current page location. With no argument it stores +the location in an internal register. The results of this can be used +later by the @code{rt} or the @code{sp} request (or the @code{\v} +escape). + +The @code{rt} request returns @emph{upwards} to the location marked with +the last @code{mk} request. If used with an argument, return to a +position which distance from the top of the page is @var{dist} (no previous call to @code{mk} is necessary in this case). Default scaling indicator is @samp{v}. @@ -11177,16 +11474,16 @@ The following escapes give fine control of movements about the page. @cindex vertical motion (@code{\v}) @cindex motion, vertical (@code{\v}) Move vertically, usually from the current location on the page (if no -absolute position operator @samp{|} is used). The -argument@tie{}@var{e} specifies the distance to move; positive is -downwards and negative upwards. The default scaling indicator for this -escape is @samp{v}. Beware, however, that @code{gtroff} continues text -processing at the point where the motion ends, so you should always -balance motions to avoid interference with text processing. - -@code{\v} doesn't trigger a trap. This can be quite useful; for example, -consider a page bottom trap macro which prints a marker in the margin to -indicate continuation of a footnote or something similar. +absolute position operator @samp{|} is used). The argument@tie{}@var{e} +specifies the distance to move; positive is downwards and negative +upwards. The default scaling indicator for this escape is @samp{v}. +Beware, however, that @code{gtroff} continues text processing at the +point where the motion ends, so you should always balance motions to +avoid interference with text processing. + +@code{\v} doesn't trigger a trap. This can be quite useful; for +example, consider a page bottom trap macro which prints a marker in the +margin to indicate continuation of a footnote or something similar. @endDefesc There are some special-case escapes for vertical motion. @@ -11228,18 +11525,26 @@ space. (Note: This is a backslash followed by a space.) @endDefesc @Defesc {\\~, , , } -An unbreakable space that stretches like a normal inter-word space -when a line is adjusted. +An unbreakable space that stretches like a normal inter-word space when +a line is adjusted. @endDefesc @Defesc {\\|, , , } A 1/6@dmn{th} em space. Ignored for TTY output devices (rounded to zero). + +However, if there is a glyph defined in the current font file with name +@code{\|} (note the leading backslash), the width of this glyph is used +instead (even for TTYs). @endDefesc @Defesc {\\^, , , } A 1/12@dmn{th} em space. Ignored for TTY output devices (rounded to zero). + +However, if there is a glyph defined in the current font file with name +@code{\^} (note the leading backslash), the width of this glyph is used +instead (even for TTYs). @endDefesc @Defesc {\\0, , , } @@ -11263,9 +11568,9 @@ The following string sets the @TeX{} logo: @DefregItem {ssc} @DefregListEnd {skw} @cindex width escape (@code{\w}) -Return the width of the specified @var{text} in basic units. -This allows horizontal movement based on the width of some -arbitrary text (e.g.@: given as an argument to a macro). +Return the width of the specified @var{text} in basic units. This +allows horizontal movement based on the width of some arbitrary text +(e.g.@: given as an argument to a macro). @Example The length of the string `abc' is \w'abc'u. @@ -11280,14 +11585,14 @@ After use, @code{\w} sets several registers: @table @code @item st @itemx sb -The highest and lowest point of the baseline, respectively, in @var{text}. +The highest and lowest point of the baseline, respectively, in +@var{text}. @item rst @itemx rsb Like the @code{st} and @code{sb} registers, but takes account of the -heights and depths of glyphs. With other words, this gives the -highest and lowest point of @var{text}. Values below the baseline are -negative. +heights and depths of glyphs. In other words, this gives the highest +and lowest point of @var{text}. Values below the baseline are negative. @item ct Defines the kinds of glyphs occurring in @var{text}: @@ -11325,8 +11630,8 @@ over that glyph. @cindex input line position, horizontal, saving (@code{\k}) @cindex position, horizontal input line, saving (@code{\k}) @cindex line, input, horizontal position, saving (@code{\k}) -Store the current horizontal position in the @emph{input} line in -number register with name @var{position} (one-character name@tie{}@var{p}, +Store the current horizontal position in the @emph{input} line in number +register with name @var{position} (one-character name@tie{}@var{p}, two-character name @var{ps}). Use this, for example, to return to the beginning of a string for highlighting or other decoration. @endDefesc @@ -11351,16 +11656,16 @@ position (relative to the current indentation). @Defesc {\\o, ', abc, '} @cindex overstriking glyphs (@code{\o}) @cindex glyphs, overstriking (@code{\o}) -Overstrike glyphs @var{a}, @var{b}, @var{c}, @dots{}; the glyphs -are centered, and the resulting spacing is the largest width of the -affected glyphs. +Overstrike glyphs @var{a}, @var{b}, @var{c}, @dots{}; the glyphs are +centered, and the resulting spacing is the largest width of the affected +glyphs. @endDefesc @Defesc {\\z, , g, , } @cindex zero-width printing (@code{\z}, @code{\Z}) @cindex printing, zero-width (@code{\z}, @code{\Z}) -Print glyph @var{g} with zero width, i.e., without spacing. Use -this to overstrike glyphs left-aligned. +Print glyph @var{g} with zero width, i.e., without spacing. Use this to +overstrike glyphs left-aligned. @endDefesc @Defesc {\\Z, ', anything, '} @@ -11413,16 +11718,16 @@ values are handled differently: The line starts at the current location and draws to the left, but the current location doesn't move. @var{l} can also be specified absolutely (i.e.@: with a leading -@samp{|}) which draws back to the beginning of the input line. -Default scaling indicator is @samp{m}. +@samp{|}) which draws back to the beginning of the input line. Default +scaling indicator is @samp{m}. @cindex underscore glyph (@code{\[ru]}) @cindex glyph, underscore (@code{\[ru]}) @cindex line drawing glyph @cindex glyph, for line drawing The optional second parameter@tie{}@var{g} is a glyph to draw the line -with. If this second argument is not specified, @code{gtroff} uses -the underscore glyph, @code{\[ru]}. +with. If this second argument is not specified, @code{gtroff} uses the +underscore glyph, @code{\[ru]}. @cindex zero width space character (@code{\&}) @cindex character, zero width space (@code{\&}) @@ -11443,8 +11748,8 @@ Here a small useful example: Note that this works by outputting a box rule (a vertical line), then the text given as an argument and then another box rule. Finally, the line drawing escapes both draw from the current location to the -beginning of the @emph{input} line -- this works because the line -length is negative, not moving the current point. +beginning of the @emph{input} line -- this works because the line length +is negative, not moving the current point. @endDefesc @DefescList {\\L, ', l, '} @@ -11456,12 +11761,12 @@ length is negative, not moving the current point. @cindex glyph for line drawing @cindex box rule glyph (@code{\[br]}) @cindex glyph, box rule (@code{\[br]}) -Draw vertical lines. Its parameters are -similar to the @code{\l} escape, except that the default scaling -indicator is @samp{v}. The movement is downwards for positive values, -and upwards for negative values. The default glyph is the box rule -glyph, @code{\[br]}. As with the vertical motion escapes, text -processing blindly continues where the line ends. +Draw vertical lines. Its parameters are similar to the @code{\l} +escape, except that the default scaling indicator is @samp{v}. The +movement is downwards for positive values, and upwards for negative +values. The default glyph is the box rule glyph, @code{\[br]}. As with +the vertical motion escapes, text processing blindly continues where the +line ends. @Example This is a \L'3v'test. @@ -11479,10 +11784,10 @@ This is a @endDefesc @Defesc {\\D, ', command arg @dots{}, '} -The @code{\D} escape provides a variety of drawing functions. -Note that on character devices, only vertical and horizontal lines are -supported within @code{grotty}; other devices may only support a subset -of the available drawing functions. +The @code{\D} escape provides a variety of drawing functions. Note that +on character devices, only vertical and horizontal lines are supported +within @code{grotty}; other devices may only support a subset of the +available drawing functions. The default scaling indicator for all subcommands of @code{\D} is @samp{m} for horizontal distances and @samp{v} for vertical ones. @@ -11498,8 +11803,9 @@ Draw a line from the current location to the relative point specified by (@var{dx},@var{dy}), where positive values mean down and right, respectively. The end point of the line is the new current location. -The following example is a macro for creating a box around a text string; -for simplicity, the box margin is taken as a fixed value, 0.2@dmn{m}. +The following example is a macro for creating a box around a text +string; for simplicity, the box margin is taken as a fixed value, +0.2@dmn{m}. @Example .de BOX @@ -11525,24 +11831,24 @@ containing the largest height and depth of the whole string. @item \D'c @var{d}' @cindex circle, drawing (@w{@code{\D'c @dots{}'}}) @cindex drawing a circle (@w{@code{\D'c @dots{}'}}) -Draw a circle with a diameter of@tie{}@var{d} with the leftmost point at the -current position. After drawing, the current location is positioned at the -rightmost point of the circle. +Draw a circle with a diameter of@tie{}@var{d} with the leftmost point at +the current position. After drawing, the current location is positioned +at the rightmost point of the circle. @item \D'C @var{d}' @cindex circle, solid, drawing (@w{@code{\D'C @dots{}'}}) @cindex drawing a solid circle (@w{@code{\D'C @dots{}'}}) @cindex solid circle, drawing (@w{@code{\D'C @dots{}'}}) -Draw a solid circle with the same parameters and behaviour as an outlined -circle. No outline is drawn. +Draw a solid circle with the same parameters and behaviour as an +outlined circle. No outline is drawn. @item \D'e @var{x} @var{y}' @cindex drawing an ellipse (@w{@code{\D'e @dots{}'}}) @cindex ellipse, drawing (@w{@code{\D'e @dots{}'}}) Draw an ellipse with a horizontal diameter of @var{x} and a vertical diameter of @var{y} with the leftmost point at the current position. -After drawing, the current location is positioned at the rightmost point of -the ellipse. +After drawing, the current location is positioned at the rightmost point +of the ellipse. @item \D'E @var{x} @var{y}' @cindex ellipse, solid, drawing (@w{@code{\D'E @dots{}'}}) @@ -11558,44 +11864,44 @@ Draw an arc clockwise from the current location through the two specified relative locations (@var{dx1},@var{dy1}) and (@var{dx2},@var{dy2}). The coordinates of the first point are relative to the current position, and the coordinates of the second point are -relative to the first point. After drawing, the current position is moved -to the final point of the arc. +relative to the first point. After drawing, the current position is +moved to the final point of the arc. @item \D'~ @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}' @cindex drawing a spline (@w{@code{\D'~ @dots{}'}}) @cindex spline, drawing (@w{@code{\D'~ @dots{}'}}) Draw a spline from the current location to the relative point -(@var{dx1},@var{dy1}) and then to (@var{dx2},@var{dy2}), and so on. -The current position is moved to the terminal point of the drawn curve. +(@var{dx1},@var{dy1}) and then to (@var{dx2},@var{dy2}), and so on. The +current position is moved to the terminal point of the drawn curve. @item \D'f @var{n}' @cindex gray shading (@w{@code{\D'f @dots{}'}}) @cindex shading filled objects (@w{@code{\D'f @dots{}'}}) -Set the shade of gray to be used for filling solid objects to@tie{}@var{n}; -@var{n}@tie{}must be an integer between 0 and@tie{}1000, where 0 -corresponds solid white and 1000 to solid black, and values in between -correspond to intermediate shades of gray. This applies only to solid -circles, solid ellipses, and solid polygons. By default, a level of -1000 is used. +Set the shade of gray to be used for filling solid objects +to@tie{}@var{n}; @var{n}@tie{}must be an integer between 0 +and@tie{}1000, where 0 corresponds solid white and 1000 to solid black, +and values in between correspond to intermediate shades of gray. This +applies only to solid circles, solid ellipses, and solid polygons. By +default, a level of 1000 is used. Despite of being silly, the current point is moved horizontally to the right by@tie{}@var{n}. @cindex @w{@code{\D'f @dots{}'}} and horizontal resolution -Don't use this command! It has the serious drawback that it will be -always rounded to the next integer multiple of the horizontal resolution -(the value of the @code{hor} keyword in the @file{DESC} file). Use -@code{\M} (@pxref{Colors}) or @w{@code{\D'Fg @dots{}'}} instead. +Don't use this command! It has the serious drawback that it is always +rounded to the next integer multiple of the horizontal resolution (the +value of the @code{hor} keyword in the @file{DESC} file). Use @code{\M} +(@pxref{Colors}) or @w{@code{\D'Fg @dots{}'}} instead. @item \D'p @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}' @cindex drawing a polygon (@w{@code{\D'p @dots{}'}}) @cindex polygon, drawing (@w{@code{\D'p @dots{}'}}) Draw a polygon from the current location to the relative position -(@var{dx1},@var{dy1}) and then to (@var{dx2},@var{dy2}) and so on. -When the specified data points are exhausted, a line is drawn back -to the starting point. The current position is changed by adding the -sum of all arguments with odd index to the actual horizontal position and -the even ones to the vertical position. +(@var{dx1},@var{dy1}) and then to (@var{dx2},@var{dy2}) and so on. When +the specified data points are exhausted, a line is drawn back to the +starting point. The current position is changed by adding the sum of +all arguments with odd index to the actual horizontal position and the +even ones to the vertical position. @item \D'P @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}' @cindex polygon, solid, drawing (@w{@code{\D'P @dots{}'}}) @@ -11626,11 +11932,28 @@ text completely. .. @endExample +If you want a filled polygon which has exactly the same size as an +unfilled one, you must draw both an unfilled and a filled polygon. A +filled polygon is always smaller than an unfilled one because the latter +uses straight lines with a given line thickness to connect the polygon's +corners, while the former simply fills the area defined by the +coordinates. + +@Example +\h'1i'\v'1i'\ +\# increase line thickness +\Z'\D't 5p''\ +\# draw unfilled polygon +\Z'\D'p 3 3 -6 0''\ +\# draw filled polygon +\Z'\D'P 3 3 -6 0'' +@endExample + @item \D't @var{n}' @cindex line thickness (@w{@code{\D't @dots{}'}}) @cindex thickness of lines (@w{@code{\D't @dots{}'}}) -Set the current line thickness to @var{n}@tie{}machine units. A value of -zero selects the smallest available line thickness. A negative value +Set the current line thickness to @var{n}@tie{}machine units. A value +of zero selects the smallest available line thickness. A negative value makes the line thickness proportional to the current point size (this is the default behaviour of @acronym{AT&T} @code{troff}). @@ -11664,8 +11987,8 @@ Examples: @cindex pile, glyph (@code{\b}) @cindex glyph pile (@code{\b}) @cindex stacking glyphs (@code{\b}) -@dfn{Pile} a sequence of glyphs vertically, and center it vertically -on the current line. Use it to build large brackets and braces. +@dfn{Pile} a sequence of glyphs vertically, and center it vertically on +the current line. Use it to build large brackets and braces. Here an example how to create a large opening brace: @@ -11675,16 +11998,16 @@ Here an example how to create a large opening brace: @cindex @code{\b}, limitations @cindex limitations of @code{\b} escape -The first glyph is on the top, the last glyph in @var{string} is -at the bottom. Note that @code{gtroff} separates the glyphs -vertically by 1@dmn{m}, and the whole object is centered 0.5@dmn{m} -above the current baseline; the largest glyph width is used as the -width for the whole object. This rather unflexible positioning -algorithm doesn't work with @option{-Tdvi} since the bracket pieces vary -in height for this device. Instead, use the @code{eqn} preprocessor. - -@xref{Manipulating Spacing}, how to adjust the vertical spacing with -the @code{\x} escape. +The first glyph is on the top, the last glyph in @var{string} is at the +bottom. Note that @code{gtroff} separates the glyphs vertically by +1@dmn{m}, and the whole object is centered 0.5@dmn{m} above the current +baseline; the largest glyph width is used as the width for the whole +object. This rather unflexible positioning algorithm doesn't work with +@option{-Tdvi} since the bracket pieces vary in height for this device. +Instead, use the @code{eqn} preprocessor. + +@xref{Manipulating Spacing}, how to adjust the vertical spacing with the +@code{\x} escape. @endDefesc @@ -11694,18 +12017,18 @@ the @code{\x} escape. @section Traps @cindex traps -@dfn{Traps} are locations, which, when reached, call a specified -macro. These traps can occur at a given location on the page, at a -given location in the current diversion, at a blank line, -after a certain number of input lines, or at the end of input. +@dfn{Traps} are locations, which, when reached, call a specified macro. +These traps can occur at a given location on the page, at a given +location in the current diversion, at a blank line, after a certain +number of input lines, or at the end of input. @cindex planting a trap @cindex trap, planting Setting a trap is also called @dfn{planting}. @cindex trap, springing @cindex springing a trap -It is also said that a trap is @dfn{sprung} if the associated macro -is executed. +It is also said that a trap is @dfn{sprung} if the associated macro is +executed. @menu * Page Location Traps:: @@ -11722,9 +12045,9 @@ is executed. @cindex page location traps @cindex traps, page location -@dfn{Page location traps} perform an action when @code{gtroff} -reaches or passes a certain vertical location on the page. Page -location traps have a variety of purposes, including: +@dfn{Page location traps} perform an action when @code{gtroff} reaches +or passes a certain vertical location on the page. Page location traps +have a variety of purposes, including: @itemize @item @@ -11754,21 +12077,21 @@ Note that a page can't be ejected if @code{vpt} is set to zero. @endDefreq @Defreq {wh, dist [@Var{macro}]} -Set a page location trap. Non-negative values for @var{dist} set -the trap relative to the top of the page; negative values set -the trap relative to the bottom of the page. Default scaling -indicator is @samp{v}. +Set a page location trap. Non-negative values for @var{dist} set the +trap relative to the top of the page; negative values set the trap +relative to the bottom of the page. Default scaling indicator is +@samp{v}; values of @var{dist} are always rounded to be multiples of the +vertical resolution (as given in register @code{.V}). -@var{macro} is the name of the macro to execute when the -trap is sprung. If @var{macro} is missing, remove the first trap -(if any) at @var{dist}. +@var{macro} is the name of the macro to execute when the trap is sprung. +If @var{macro} is missing, remove the first trap (if any) at @var{dist}. @cindex page headers @cindex page footers @cindex headers @cindex footers -The following is a simple example of how many macro packages -set headers and footers. +The following is a simple example of how many macro packages set headers +and footers. @Example .de hd \" Page header @@ -11791,12 +12114,25 @@ A trap at or below the bottom of the page is ignored; it can be made active by either moving it up or increasing the page length so that the trap is on the page. -It is possible to have more than one trap at the same location; to do so, -the traps must be defined at different locations, then moved together with -the @code{ch} request; otherwise the second trap would replace the first -one. Earlier defined traps hide later defined traps if moved to the same -position (the many empty lines caused by the @code{bp} request are omitted -in the following example): +Negative trap values always use the @emph{current} page length; they are +not converted to an absolute vertical position: + +@Example +.pl 5i +.wh -1i xx +.ptr + @result{} xx -240 +.pl 100i +.ptr + @result{} xx -240 +@endExample + +It is possible to have more than one trap at the same location; to do +so, the traps must be defined at different locations, then moved +together with the @code{ch} request; otherwise the second trap would +replace the first one. Earlier defined traps hide later defined traps +if moved to the same position (the many empty lines caused by the +@code{bp} request are omitted in the following example): @Example .de a @@ -11835,23 +12171,23 @@ A read-only number register holding the distance to the next trap. If there are no traps between the current position and the bottom of the page, it contains the distance to the page bottom. In a diversion, the -distance to the page bottom is infinite (the returned value is the biggest -integer which can be represented in @code{groff}) if there are no diversion -traps. +distance to the page bottom is infinite (the returned value is the +biggest integer which can be represented in @code{groff}) if there are +no diversion traps. @endDefreg @Defreq {ch, macro [@Var{dist}]} @cindex changing trap location (@code{ch}) @cindex trap, changing location (@code{ch}) -Change the location of a trap. -The first argument is the name of the macro to be invoked at -the trap, and the second argument is the new location for the trap -(note that the parameters are specified in opposite order as in the -@code{wh} request). This is useful for building up footnotes in a -diversion to allow more space at the bottom of the page for them. +Change the location of a trap. The first argument is the name of the +macro to be invoked at the trap, and the second argument is the new +location for the trap (note that the parameters are specified in +opposite order as in the @code{wh} request). This is useful for +building up footnotes in a diversion to allow more space at the bottom +of the page for them. -Default scaling indicator for @var{dist} is @samp{v}. If @var{dist} -is missing, the trap is removed. +Default scaling indicator for @var{dist} is @samp{v}. If @var{dist} is +missing, the trap is removed. @c XXX @@ -11868,8 +12204,8 @@ that was needed in the last @code{ne} request that caused a trap to be sprung. Useful in conjunction with the @code{.trunc} register. @xref{Page Control}, for more information. -Since the @code{.ne} register is only set by traps it doesn't make -much sense to use it outside of trap macros. +Since the @code{.ne} register is only set by traps it doesn't make much +sense to use it outside of trap macros. @endDefreg @Defreg {.trunc} @@ -11894,8 +12230,8 @@ much sense to use it outside of trap macros. A read-only register which is set to@tie{}1 while a page is ejected with the @code{bp} request (or by the end of input). -Outside of traps this register is always zero. In the following example, -only the second call to@tie{}@code{x} is caused by @code{bp}. +Outside of traps this register is always zero. In the following +example, only the second call to@tie{}@code{x} is caused by @code{bp}. @Example .de x @@ -11918,13 +12254,13 @@ Another line. @cindex diversions, and traps @cindex traps, and diversions -An important fact to consider while designing macros is that diversions and -traps do not interact normally. For example, if a trap invokes a header -macro (while outputting a diversion) which tries to change the font on the -current page, the effect will not be visible before the diversion has -completely been printed (except for input protected with @code{\!} or -@code{\?}) since the data in the diversion is already formatted. In most -cases, this is not the expected behaviour. +An important fact to consider while designing macros is that diversions +and traps do not interact normally. For example, if a trap invokes a +header macro (while outputting a diversion) which tries to change the +font on the current page, the effect is not visible before the diversion +has completely been printed (except for input protected with @code{\!} +or @code{\?}) since the data in the diversion is already formatted. In +most cases, this is not the expected behaviour. @c --------------------------------------------------------------------- @@ -11938,11 +12274,10 @@ cases, this is not the expected behaviour. @cindex setting diversion trap (@code{dt}) @cindex diversion trap, setting (@code{dt}) @cindex trap, diversion, setting (@code{dt}) -Set a trap @emph{within} a diversion. -@var{dist} is the location of the trap -(identical to the @code{wh} request; default scaling indicator is -@samp{v}) and @var{macro} is the name of the macro to be invoked. -If called without arguments, the diversion trap is removed. +Set a trap @emph{within} a diversion. @var{dist} is the location of the +trap (identical to the @code{wh} request; default scaling indicator is +@samp{v}) and @var{macro} is the name of the macro to be invoked. If +called without arguments, the diversion trap is removed. Note that there exists only a single diversion trap. @@ -11962,13 +12297,12 @@ The number register @code{.t} still works within diversions. @cindex setting input line trap (@code{it}) @cindex input line trap, setting (@code{it}) @cindex trap, input line, setting (@code{it}) -Set an input line trap. -@var{n}@tie{}is the number of lines of input which may be read before -springing the trap, @var{macro} is the macro to be invoked. -Request lines are not counted as input lines. +Set an input line trap. @var{n}@tie{}is the number of lines of input +which may be read before springing the trap, @var{macro} is the macro to +be invoked. Request lines are not counted as input lines. -For example, one possible use is to have a macro which prints the -next @var{n}@tie{}lines in a bold font. +For example, one possible use is to have a macro which prints the next +@var{n}@tie{}lines in a bold font. @Example .de B @@ -11985,9 +12319,8 @@ next @var{n}@tie{}lines in a bold font. @cindex interrupted lines and input line traps (@code{itc}) @cindex traps, input line, and interrupted lines (@code{itc}) @cindex lines, interrupted, and input line traps (@code{itc}) -The @code{itc} request is identical -except that an interrupted text line (ending with @code{\c}) -is not counted as a separate line. +The @code{itc} request is identical except that an interrupted text line +(ending with @code{\c}) is not counted as a separate line. Both requests are associated with the current environment (@pxref{Environments}); switching to another environment disables the @@ -12004,9 +12337,8 @@ of already processed lines. @Defreq {blm, macro} @cindex blank line macro (@code{blm}) -Set a blank line trap. -@code{gtroff} executes @var{macro} when it encounters a blank line in -the input file. +Set a blank line trap. @code{gtroff} executes @var{macro} when it +encounters a blank line in the input file. @endDefreq @c --------------------------------------------------------------------- @@ -12022,8 +12354,8 @@ the input file. @cindex trap, end-of-input, setting (@code{em}) @cindex end-of-input macro (@code{em}) @cindex macro, end-of-input (@code{em}) -Set a trap at the end of input. @var{macro} is executed after the -last line of the input file has been processed. +Set a trap at the end of input. @var{macro} is executed after the last +line of the input file has been processed. For example, if the document had to have a section at the bottom of the last page for someone to approve it, the @code{em} request could be @@ -12072,19 +12404,23 @@ output device). @cindex diversion, ending (@code{di}) @cindex appending to a diversion (@code{da}) @cindex diversion, appending (@code{da}) -Begin a diversion. Like the @code{de} -request, it takes an argument of a macro name to divert subsequent text -into. The @code{da} macro appends to an existing diversion. +Begin a diversion. Like the @code{de} request, it takes an argument of +a macro name to divert subsequent text into. The @code{da} macro +appends to an existing diversion. @code{di} or @code{da} without an argument ends the diversion. + +The current partially-filled line is included into the diversion. See +the @code{box} request below for an example. Note that switching to +another (empty) environment (with the @code{ev} request) avoids the +inclusion of the current partially-filled line. @endDefreq @DefreqList {box, macro} @DefreqListEnd {boxa, macro} -Begin (or appends to) a diversion like the -@code{di} and @code{da} requests. -The difference is that @code{box} and @code{boxa} -do not include a partially-filled line in the diversion. +Begin (or append to) a diversion like the @code{di} and @code{da} +requests. The difference is that @code{box} and @code{boxa} do not +include a partially-filled line in the diversion. Compare this: @@ -12218,21 +12554,26 @@ been already stored in a macro are not taken into account. @DefescListEnd {\\?, , anything, \\?} @cindex transparent output (@code{\!}, @code{\?}) @cindex output, transparent (@code{\!}, @code{\?}) -Prevent requests, macros, and escapes from being -interpreted when read into a diversion. Both escapes take the given text -and @dfn{transparently} embed it into the diversion. This is useful for +Prevent requests, macros, and escapes from being interpreted when read +into a diversion. Both escapes take the given text and +@dfn{transparently} embed it into the diversion. This is useful for macros which shouldn't be invoked until the diverted text is actually output. -The @code{\!} escape transparently embeds text up to -and including the end of the line. -The @code{\?} escape transparently embeds text until the next -occurrence of the @code{\?} escape. Example: +The @code{\!} escape transparently embeds text up to and including the +end of the line. The @code{\?} escape transparently embeds text until +the next occurrence of the @code{\?} escape. Example: @Example \?@var{anything}\? @endExample +@cindex @code{\?}, and copy-in mode +@cindex copy-in mode, and @code{\?} +@cindex mode, copy-in, and @code{\?} +@cindex @code{\!}, and copy-in mode +@cindex copy-in mode, and @code{\!} +@cindex mode, copy-in, and @code{\!} @noindent @var{anything} may not contain newlines; use @code{\!} to embed newlines in a diversion. The escape sequence @code{\?} is also @@ -12275,16 +12616,19 @@ The @code{\?} escape used in the top-level diversion produces no output at all; its argument is simply ignored. @endDefesc -@cindex @code{\!}, and @code{output} +@cindex @code{\!}, and @code{output} request @cindex @code{output} request, and @code{\!} +@cindex @code{output} request, and copy-in mode +@cindex copy-in mode, and @code{output} request +@cindex mode, copy-in, and @code{output} request @Defreq {output, string} Emit @var{string} directly to the @code{gtroff} intermediate output -(subject to copy-mode interpretation); this is similar to @code{\!} used -at the top level. An initial double quote in @var{string} is stripped off -to allow initial blanks. +(subject to copy mode interpretation); this is similar to @code{\!} used +at the top level. An initial double quote in @var{string} is stripped +off to allow initial blanks. -This request can't be used before the first page has started -- if you get -an error, simply insert @code{.br} before the @code{output} request. +This request can't be used before the first page has started -- if you +get an error, simply insert @code{.br} before the @code{output} request. Without argument, @code{output} is ignored. @@ -12297,12 +12641,12 @@ the output device, filtering out @var{string} again. @cindex unformatting diversions (@code{asciify}) @cindex diversion, unformatting (@code{asciify}) @cindex @code{trin} request, and @code{asciify} -@dfn{Unformat} the diversion specified by @var{div} -in such a way that @acronym{ASCII} characters, characters translated with -the @code{trin} request, space characters, and some escape sequences that -were formatted and diverted are treated like ordinary input -characters when the diversion is reread. It can be also used for gross -hacks; for example, the following sets register@tie{}@code{n} to@tie{}1. +@dfn{Unformat} the diversion specified by @var{div} in such a way that +@acronym{ASCII} characters, characters translated with the @code{trin} +request, space characters, and some escape sequences that were formatted +and diverted are treated like ordinary input characters when the +diversion is reread. It can be also used for gross hacks; for example, +the following sets register@tie{}@code{n} to@tie{}1. @Example .tr @@. @@ -12319,11 +12663,10 @@ hacks; for example, the following sets register@tie{}@code{n} to@tie{}1. @endDefreq @Defreq {unformat, div} -Like @code{asciify}, unformat the specified diversion. -However, @code{unformat} only unformats spaces and tabs -between words. -Unformatted tabs are treated as input tokens, -and spaces are stretchable again. +Like @code{asciify}, unformat the specified diversion. However, +@code{unformat} only unformats spaces and tabs between words. +Unformatted tabs are treated as input tokens, and spaces are stretchable +again. The vertical size of lines is not preserved; glyph information (font, font size, space width, etc.)@: is retained. @@ -12339,28 +12682,28 @@ font size, space width, etc.)@: is retained. It happens frequently that some text should be printed in a certain format regardless of what may be in effect at the time, for example, in a trap invoked macro to print headers and footers. To solve this -@code{gtroff} processes text in @dfn{environments}. An -environment contains most of the parameters that control text -processing. It is possible to switch amongst these environments; by -default @code{gtroff} processes text in environment@tie{}0. The -following is the information kept in an environment. +@code{gtroff} processes text in @dfn{environments}. An environment +contains most of the parameters that control text processing. It is +possible to switch amongst these environments; by default @code{gtroff} +processes text in environment@tie{}0. The following is the information +kept in an environment. @itemize @bullet @item -font parameters (size, family, style, glyph height and slant, space -and sentence space size) +font parameters (size, family, style, glyph height and slant, space and +sentence space size) @item -page parameters (line length, title length, vertical spacing, -line spacing, indentation, line numbering, centering, right-justifying, +page parameters (line length, title length, vertical spacing, line +spacing, indentation, line numbering, centering, right-justifying, underlining, hyphenation data) @item fill and adjust mode @item -tab stops, tab and leader characters, escape character, -no-break and hyphen indicators, margin character data +tab stops, tab and leader characters, escape character, no-break and +hyphen indicators, margin character data @item partially collected lines @@ -12392,8 +12735,8 @@ Note that a call to @code{ev} (with argument) pushes the previously active environment onto a stack. If, say, environments @samp{foo}, @samp{bar}, and @samp{zap} are called (in that order), the first @code{ev} request without parameter switches back to environment -@samp{bar} (which is popped off the stack), and a second call -switches back to environment @samp{foo}. +@samp{bar} (which is popped off the stack), and a second call switches +back to environment @samp{foo}. Here is an example: @@ -12428,8 +12771,8 @@ Partially filled lines. The status whether the previous line was interrupted. @item -The number of lines still to center, or to right-justify, or to underline -(with or without underlined spaces); they are set to zero. +The number of lines still to center, or to right-justify, or to +underline (with or without underlined spaces); they are set to zero. @item The status whether a temporary indentation is active. @@ -12438,8 +12781,8 @@ The status whether a temporary indentation is active. Input traps and its associated data. @item -Line numbering mode is disabled; it can be reactivated with -@w{@samp{.nm +0}}. +Line numbering mode is disabled; it can be reactivated with @w{@samp{.nm ++0}}. @item The number of consecutive hyphenated lines (set to zero). @@ -12457,19 +12800,18 @@ The number of consecutive hyphenated lines (set to zero). @cindex skew, of last glyph (@code{.csk}) @cindex last glyph, dimensions (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk}) @cindex glyph, last, dimensions (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk}) -The @code{\n[.w]} register contains the -width of the last glyph added to the current environment. +The @code{\n[.w]} register contains the width of the last glyph added to +the current environment. -The @code{\n[.cht]} register contains the -height of the last glyph added to the current environment. +The @code{\n[.cht]} register contains the height of the last glyph added +to the current environment. -The @code{\n[.cdp]} register contains the -depth of the last glyph added to the current environment. -It is positive for glyphs extending below the baseline. +The @code{\n[.cdp]} register contains the depth of the last glyph added +to the current environment. It is positive for glyphs extending below +the baseline. -The @code{\n[.csk]} register contains the -@dfn{skew} (how far to the right of the glyph's center -that @code{gtroff} should place an accent) +The @code{\n[.csk]} register contains the @dfn{skew} (how far to the +right of the glyph's center that @code{gtroff} should place an accent) of the last glyph added to the current environment. @endDefreg @@ -12478,8 +12820,8 @@ of the last glyph added to the current environment. @cindex line length, previous (@code{.n}) @cindex length of previous line (@code{.n}) @cindex previous line length (@code{.n}) -The @code{\n[.n]} register contains the -length of the previous output line in the current environment. +The @code{\n[.n]} register contains the length of the previous output +line in the current environment. @endDefreg @@ -12495,9 +12837,10 @@ Disable or enable output depending on the value of @var{num}: @table @samp @item \O0 -Disable any glyphs from being emitted to the device driver, provided that -the escape occurs at the outer level (see @code{\O[3]} and @code{\O[4]}). -Motion is not suppressed so effectively @code{\O[0]} means @emph{pen up}. +Disable any glyphs from being emitted to the device driver, provided +that the escape occurs at the outer level (see @code{\O[3]} and +@code{\O[4]}). Motion is not suppressed so effectively @code{\O[0]} +means @emph{pen up}. @item \O1 Enable output of glyphs, provided that the escape occurs at the outer @@ -12535,20 +12878,24 @@ to @code{\O}. @item \O3 Begin a nesting level. At start-up, @code{gtroff} is at outer level. +The current level is contained within the read-only register @code{.O}. +@xref{Built-in Registers}. @item \O4 -End a nesting level. +End a nesting level. The current level is contained within the +read-only register @code{.O}. @xref{Built-in Registers}. @item \O[5@var{P}@var{filename}] This escape is @code{grohtml} specific. Provided that this escape occurs at the outer nesting level write the @code{filename} to @code{stderr}. The position of the image, @var{P}, must be specified and must be one of @code{l}, @code{r}, @code{c}, or@tie{}@code{i} (left, -right, centered, inline). @var{filename} will be associated with the +right, centered, inline). @var{filename} is associated with the production of the next inline image. @end table @endDefesc + @c ===================================================================== @node Colors, I/O, Suppressing output, gtroff Reference @@ -12557,21 +12904,21 @@ production of the next inline image. @DefreqList {color, [@Var{n}]} @DefregListEnd {.color} -If @var{n} is missing or non-zero, activate colors (this is the default); -otherwise, turn it off. +If @var{n} is missing or non-zero, activate colors (this is the +default); otherwise, turn it off. -The read-only number register @code{.color} is@tie{}1 if colors are active, -0@tie{}otherwise. +The read-only number register @code{.color} is@tie{}1 if colors are +active, 0@tie{}otherwise. -Internally, @code{color} sets a global flag; it does not produce a token. -Similar to the @code{cp} request, you should use it at the beginning of -your document to control color output. +Internally, @code{color} sets a global flag; it does not produce a +token. Similar to the @code{cp} request, you should use it at the +beginning of your document to control color output. Colors can be also turned off with the @option{-c} command line option. @endDefreq @Defreq {defcolor, ident scheme color_components} -Define color with name @var{ident}. @var{scheme} can be one of the +Define color with name @var{ident}. @var{scheme} can be one of the following values: @code{rgb} (three components), @code{cmy} (three components), @code{cmyk} (four components), and @code{gray} or @code{grey} (one component). @@ -12590,9 +12937,10 @@ default color for @code{\m} and @code{\M} is not identical. @cindex @code{f} unit, and colors @cindex unit, @code{f}, and colors -A new scaling indicator@tie{}@code{f} has been introduced which multiplies -its value by 65536; this makes it convenient to specify color components -as fractions in the range 0 to@tie{}1 (1f equals 65536u). Example: +A new scaling indicator@tie{}@code{f} has been introduced which +multiplies its value by 65536; this makes it convenient to specify color +components as fractions in the range 0 to@tie{}1 (1f equals 65536u). +Example: @Example .defcolor darkgreen rgb 0.1f 0.5f 0.2f @@ -12637,10 +12985,9 @@ string-valued number register @samp{.m}. The drawing color is associated with the current environment (@pxref{Environments}). -Note that @code{\m} doesn't produce an input token in @code{gtroff}. -As a consequence, it can be used in requests like @code{mc} (which -expects a single character as an argument) to change the color on -the fly: +Note that @code{\m} doesn't produce an input token in @code{gtroff}. As +a consequence, it can be used in requests like @code{mc} (which expects +a single character as an argument) to change the color on the fly: @Example .mc \m[red]x\m[] @@ -12661,8 +13008,8 @@ A red ellipse can be created with the following code: \M[red]\h'0.5i'\D'E 2i 1i'\M[] @endExample -The escape @code{\M[]} returns to the previous fill color, as does a call to -@code{fcolor} without an argument. +The escape @code{\M[]} returns to the previous fill color, as does a +call to @code{fcolor} without an argument. @cindex background color name register (@code{.M}) @cindex name, background color, register (@code{.M}) @@ -12694,14 +13041,14 @@ Note that @code{\M} doesn't produce an input token in @code{gtroff}. @Defreq {so, file} @cindex including a file (@code{so}) @cindex file, inclusion (@code{so}) -Read in the specified @var{file} and -includes it in place of the @code{so} request. This is quite useful for -large documents, e.g.@: keeping each chapter in a separate file. -@xref{gsoelim}, for more information. - -Since @code{gtroff} replaces the @code{so} request with the contents -of @code{file}, it makes a difference whether the data is terminated with -a newline or not: Assuming that file @file{xxx} contains the word +Read in the specified @var{file} and includes it in place of the +@code{so} request. This is quite useful for large documents, e.g.@: +keeping each chapter in a separate file. @xref{gsoelim}, for more +information. + +Since @code{gtroff} replaces the @code{so} request with the contents of +@code{file}, it makes a difference whether the data is terminated with a +newline or not: Assuming that file @file{xxx} contains the word @samp{foo} without a final newline, this @Example @@ -12713,64 +13060,82 @@ bar @noindent yields @samp{This is foobar}. -The search path for @var{file} can be controlled with the @option{-I} command -line option. +The search path for @var{file} can be controlled with the @option{-I} +command line option. @endDefreq @Defreq {pso, command} -Read the standard output from the specified @var{command} -and includes it in place of the @code{pso} request. +Read the standard output from the specified @var{command} and includes +it in place of the @code{pso} request. @cindex safer mode @cindex mode, safer @cindex unsafe mode @cindex mode, unsafe -This request causes an error if used in safer mode (which is the default). -Use @code{groff}'s or @code{troff}'s @option{-U} option to activate unsafe -mode. +This request causes an error if used in safer mode (which is the +default). Use @code{groff}'s or @code{troff}'s @option{-U} option to +activate unsafe mode. The comment regarding a final newline for the @code{so} request is valid for @code{pso} also. @endDefreq @Defreq {mso, file} -Identical to the @code{so} request except that @code{gtroff} searches for -the specified @var{file} in the same directories as macro files for the -the @option{-m} command line option. If the file name to be included -has the form @file{@var{name}.tmac} and it isn't found, @code{mso} tries -to include @file{tmac.@var{name}} and vice versa. +Identical to the @code{so} request except that @code{gtroff} searches +for the specified @var{file} in the same directories as macro files for +the the @option{-m} command line option. If the file name to be +included has the form @file{@var{name}.tmac} and it isn't found, +@code{mso} tries to include @file{tmac.@var{name}} and vice versa. @endDefreq @DefreqList {trf, file} @DefreqListEnd {cf, file} @cindex transparent output (@code{cf}, @code{trf}) @cindex output, transparent (@code{cf}, @code{trf}) -Transparently output the contents of @var{file}. Each line is output -as if it were preceded by @code{\!}; however, the lines are not subject -to copy mode interpretation. If the file does not end with a newline, -then a newline is added (@code{trf} only). For example, to define a -macro@tie{}@code{x} containing the contents of file@tie{}@file{f}, use - -@Example +@cindex @code{cf} request, and copy-in mode +@cindex copy-in mode, and @code{cf} request +@cindex mode, copy-in, and @code{cf} request +@cindex @code{trf} request, and copy-in mode +@cindex copy-in mode, and @code{trf} request +@cindex mode, copy-in, and @code{trf} request +Transparently output the contents of @var{file}. Each line is output as +if it were preceded by @code{\!}; however, the lines are @emph{not} +subject to copy mode interpretation. If the file does not end with a +newline, then a newline is added (@code{trf} only). For example, to +define a macro@tie{}@code{x} containing the contents of +file@tie{}@file{f}, use + +@Example +.ev 1 .di x .trf f .di +.ev @endExample -Both @code{trf} and @code{cf}, when used in a diversion, -embeds an object in the diversion which, when reread, causes the -contents of @var{file} to be transparently copied through to the -output. In @acronym{UNIX} @code{troff}, the contents of @var{file} -is immediately copied through to the output regardless of whether there -is a current diversion; this behaviour is so anomalous that it must be -considered a bug. +@noindent +The calls to @code{ev} prevent that the current partial input line +becomes part of the diversion. + +Both @code{trf} and @code{cf}, when used in a diversion, embeds an +object in the diversion which, when reread, causes the contents of +@var{file} to be transparently copied through to the output. In +@acronym{UNIX} @code{troff}, the contents of @var{file} is immediately +copied through to the output regardless of whether there is a current +diversion; this behaviour is so anomalous that it must be considered a +bug. @cindex @code{trf} request, and invalid characters @cindex characters, invalid for @code{trf} request @cindex invalid characters for @code{trf} request -While @code{cf} copies the contents of @var{file} completely unprocessed, -@code{trf} disallows characters such as NUL that are not valid -@code{gtroff} input characters (@pxref{Identifiers}). + +While @code{cf} copies the contents of @var{file} completely +unprocessed, @code{trf} disallows characters such as NUL that are not +valid @code{gtroff} input characters (@pxref{Identifiers}). + +For @code{cf}, within a diversion, `completely unprocessed' means that +each line of a file to be inserted is handled as if it were preceded by +@code{\!\\!}. Both requests cause a line break. @endDefreq @@ -12779,18 +13144,16 @@ Both requests cause a line break. @cindex processing next file (@code{nx}) @cindex file, processing next (@code{nx}) @cindex next file, processing (@code{nx}) -Force @code{gtroff} to continue processing of -the file specified as an argument. If no argument is given, immediately -jump to the end of file. +Force @code{gtroff} to continue processing of the file specified as an +argument. If no argument is given, immediately jump to the end of file. @endDefreq @Defreq {rd, [@Var{prompt} [@Var{arg1} @Var{arg2} @dots{}]]} @cindex reading from standard input (@code{rd}) @cindex standard input, reading from (@code{rd}) @cindex input, standard, reading from (@code{rd}) -Read from standard input, and include what is read as though it -were part of the input file. Text is read until a blank line -is encountered. +Read from standard input, and include what is read as though it were +part of the input file. Text is read until a blank line is encountered. If standard input is a TTY input device (keyboard), write @var{prompt} to standard error, followed by a colon (or send BEL for a beep if no @@ -12812,10 +13175,9 @@ This is bar. @cindex form letters @cindex letters, form -Using the @code{nx} and @code{rd} requests, -it is easy to set up form letters. The form -letter template is constructed like this, putting the following lines -into a file called @file{repeat.let}: +Using the @code{nx} and @code{rd} requests, it is easy to set up form +letters. The form letter template is constructed like this, putting the +following lines into a file called @file{repeat.let}: @Example .ce @@ -12834,9 +13196,9 @@ Body of letter. @cindex @code{ex} request, used with @code{nx} and @code{rd} @noindent When this is run, a file containing the following lines should be -redirected in. Note that requests included in this file are executed -as though they were part of the form letter. The last block of input -is the @code{ex} request which tells @code{groff} to stop processing. If +redirected in. Note that requests included in this file are executed as +though they were part of the form letter. The last block of input is +the @code{ex} request which tells @code{groff} to stop processing. If this was not there, @code{groff} would not know when to stop. @Example @@ -12856,19 +13218,20 @@ Dear Mr. Adollar, @endExample @Defreq {pi, pipe} -Pipe the output of @code{gtroff} to the shell command(s) -specified by @var{pipe}. This request must occur before -@code{gtroff} has a chance to print anything. +Pipe the output of @code{gtroff} to the shell command(s) specified by +@var{pipe}. This request must occur before @code{gtroff} has a chance +to print anything. @cindex safer mode @cindex mode, safer @cindex unsafe mode @cindex mode, unsafe @code{pi} causes an error if used in safer mode (which is the default). -Use @code{groff}'s or @code{troff}'s @option{-U} option to activate unsafe -mode. +Use @code{groff}'s or @code{troff}'s @option{-U} option to activate +unsafe mode. -Multiple calls to @code{pi} are allowed, acting as a chain. For example, +Multiple calls to @code{pi} are allowed, acting as a chain. For +example, @Example .pi foo @@ -12894,12 +13257,12 @@ saved anyplace, so it is up to the user to do so. @cindex mode, safer @cindex unsafe mode @cindex mode, unsafe -This request causes an error if used in safer mode (which is the default). -Use @code{groff}'s or @code{troff}'s @option{-U} option to activate unsafe -mode. +This request causes an error if used in safer mode (which is the +default). Use @code{groff}'s or @code{troff}'s @option{-U} option to +activate unsafe mode. -For example, the following code fragment introduces the current time into a -document: +For example, the following code fragment introduces the current time +into a document: @cindex time, current @cindex current time @@ -12941,8 +13304,8 @@ of the @code{system()} function executed by the last @code{sy} request. @cindex file, opening (@code{open}) @cindex appending to a file (@code{opena}) @cindex file, appending to (@code{opena}) -Open the specified @var{file} for writing and -associates the specified @var{stream} with it. +Open the specified @var{file} for writing and associates the specified +@var{stream} with it. The @code{opena} request is like @code{open}, but if the file exists, append to it instead of truncating it. @@ -12952,31 +13315,38 @@ append to it instead of truncating it. @cindex unsafe mode @cindex mode, unsafe Both @code{open} and @code{opena} cause an error if used in safer mode -(which is the default). Use @code{groff}'s or @code{troff}'s @option{-U} -option to activate unsafe mode. +(which is the default). Use @code{groff}'s or @code{troff}'s +@option{-U} option to activate unsafe mode. @endDefreq @DefreqList {write, stream data} @DefreqListEnd {writec, stream data} -@cindex copy-in mode, and @code{write} requests -@cindex mode, copy-in, and @code{write} requests -@cindex writing to file (@code{write}) -@cindex file, writing to (@code{write}) -Write to the file associated with the specified @var{stream}. -The stream must previously have -been the subject of an open request. The remainder of the line is -interpreted as the @code{ds} request reads its second argument: A -leading @samp{"} is stripped, and it is read in copy-in mode. - -The @code{writec} request is like @code{write}, but only -@code{write} appends a newline to the data. +@cindex copy-in mode, and @code{write} request +@cindex @code{write} request, and copy-in mode +@cindex mode, copy-in, and @code{write} request +@cindex copy-in mode, and @code{writec} request +@cindex @code{writec} request, and copy-in mode +@cindex mode, copy-in, and @code{writec} request +@cindex writing to file (@code{write}, @code{writec}) +@cindex file, writing to (@code{write}, @code{writec}) +Write to the file associated with the specified @var{stream}. The +stream must previously have been the subject of an open request. The +remainder of the line is interpreted as the @code{ds} request reads its +second argument: A leading @samp{"} is stripped, and it is read in +copy-in mode. + +The @code{writec} request is like @code{write}, but only @code{write} +appends a newline to the data. @endDefreq @Defreq {writem, stream xx} @cindex @code{asciify} request, and @code{writem} -Write the contents of the macro or string @var{xx} -to the file associated with the specified @var{stream}. +Write the contents of the macro or string @var{xx} to the file +associated with the specified @var{stream}. +@cindex @code{writem} request, and copy-in mode +@cindex copy-in mode, and @code{writem} request +@cindex mode, copy-in, and @code{writem} request @var{xx} is read in copy mode, i.e., already formatted elements are ignored. Consequently, diversions must be unformatted with the @code{asciify} request before calling @code{writem}. Usually, this @@ -12986,9 +13356,8 @@ means a loss of information. @Defreq {close, stream} @cindex closing file (@code{close}) @cindex file, closing (@code{close}) -Close the specified @var{stream}; -the stream is no longer an acceptable argument to the -@code{write} request. +Close the specified @var{stream}; the stream is no longer an acceptable +argument to the @code{write} request. Here a simple macro to write an index entry. @@ -13008,10 +13377,13 @@ Here a simple macro to write an index entry. @DefescList {\\V, , e, } @DefescItem {\\V, @Lparen{}, ev, } @DefescListEnd {\\V, @Lbrack{}, env, @Rbrack{}} -Interpolate the contents of the specified environment variable -@var{env} (one-character name@tie{}@var{e}, two-character name @var{ev}) -as returned by the function @code{getenv}. @code{\V} is interpreted -in copy-in mode. +@cindex @code{\V}, and copy-in mode +@cindex copy-in mode, and @code{\V} +@cindex mode, copy-in, and @code{\V} +Interpolate the contents of the specified environment variable @var{env} +(one-character name@tie{}@var{e}, two-character name @var{ev}) as +returned by the function @code{getenv}. @code{\V} is interpreted in +copy-in mode. @endDefesc @@ -13026,9 +13398,10 @@ There are two escapes which give information directly to the postprocessor. This is particularly useful for embedding @sc{PostScript} into the final document. -@Defesc {\\X, ', xxx, '} -Embeds its argument into the @code{gtroff} -output preceded with @w{@samp{x X}}. +@DefreqList {device, xxx} +@DefescListEnd {\\X, ', xxx, '} +Embeds its argument into the @code{gtroff} output preceded with +@w{@samp{x X}}. @cindex @code{\&}, in @code{\X} @cindex @code{\)}, in @code{\X} @@ -13044,29 +13417,37 @@ within @code{\X}, @w{@samp{\ }} and @code{\~} are converted to single space characters. All other escapes (except @code{\\} which produces a backslash) cause an error. +@cindex @code{device} request, and copy-in mode +@cindex copy-in mode, and @code{device} request +@cindex mode, copy-in, and @code{device} request +Contrary to @code{\X}, the @code{device} request simply processes its +argument in copy mode (@pxref{Copy-in Mode}). + @kindex use_charnames_in_special @pindex DESC@r{, and @code{use_charnames_in_special}} @cindex @code{\X}, and special characters If the @samp{use_charnames_in_special} keyword is set in the @file{DESC} -file, special characters no longer cause an error; the name @var{xx} is -represented as @samp{\(@var{xx})} in the @w{@samp{x X}} output command. -Additionally, the backslash is represented as @code{\\}. +file, special characters no longer cause an error; they are simply +output verbatim. Additionally, the backslash is represented as +@code{\\}. -@samp{use_charnames_in_special} is currently used by @code{grohtml} only. +@samp{use_charnames_in_special} is currently used by @code{grohtml} +only. @endDefesc -@DefescList {\\Y, , n, } +@DefreqList {devicem, xx} +@DefescItem {\\Y, , n, } @DefescItem {\\Y, @Lparen{}, nm, } @DefescListEnd {\\Y, @Lbrack{}, name, @Rbrack{}} This is approximately equivalent to @samp{\X'\*[@var{name}]'} (one-character name@tie{}@var{n}, two-character name @var{nm}). However, the contents of the string or macro @var{name} are not -interpreted; also it is permitted for @var{name} to have been defined -as a macro and thus contain newlines (it is not permitted for the -argument to @code{\X} to contain newlines). The inclusion of -newlines requires an extension to the @acronym{UNIX} @code{troff} -output format, and confuses drivers that do not know about this -extension (@pxref{Device Control Commands}). +interpreted; also it is permitted for @var{name} to have been defined as +a macro and thus contain newlines (it is not permitted for the argument +to @code{\X} to contain newlines). The inclusion of newlines requires +an extension to the @acronym{UNIX} @code{troff} output format, and +confuses drivers that do not know about this extension (@pxref{Device +Control Commands}). @endDefesc @xref{Output Devices}. @@ -13084,37 +13465,36 @@ categorized elsewhere in this manual. @cindex printing line numbers (@code{nm}) @cindex line numbers, printing (@code{nm}) @cindex numbers, line, printing (@code{nm}) -Print line numbers. -@var{start} is the line number of the @emph{next} -output line. @var{inc} indicates which line numbers are printed. -For example, the value@tie{}5 means to emit only line numbers which -are multiples of@tie{}5; this defaults to@tie{}1. @var{space} is the -space to be left between the number and the text; this defaults to -one digit space. The fourth argument is the indentation of the line -numbers, defaulting to zero. Both @var{space} and @var{indent} are -given as multiples of digit spaces; they can be negative also. -Without any arguments, line numbers are turned off. +Print line numbers. @var{start} is the line number of the @emph{next} +output line. @var{inc} indicates which line numbers are printed. For +example, the value@tie{}5 means to emit only line numbers which are +multiples of@tie{}5; this defaults to@tie{}1. @var{space} is the space +to be left between the number and the text; this defaults to one digit +space. The fourth argument is the indentation of the line numbers, +defaulting to zero. Both @var{space} and @var{indent} are given as +multiples of digit spaces; they can be negative also. Without any +arguments, line numbers are turned off. @code{gtroff} reserves three digit spaces for the line number (which is printed right-justified) plus the amount given by @var{indent}; the output lines are concatenated to the line numbers, separated by -@var{space}, and @emph{without} reducing the line length. Depending -on the value of the horizontal page offset (as set with the -@code{po} request), line numbers which are longer than the reserved -space stick out to the left, or the whole line is moved to the right. +@var{space}, and @emph{without} reducing the line length. Depending on +the value of the horizontal page offset (as set with the @code{po} +request), line numbers which are longer than the reserved space stick +out to the left, or the whole line is moved to the right. Parameters corresponding to missing arguments are not changed; any non-digit argument (to be more precise, any argument starting with a character valid as a delimiter for identifiers) is also treated as missing. -If line numbering has been disabled with a call to @code{nm} without -an argument, it can be reactivated with @samp{.nm +0}, using the -previously active line numbering parameters. +If line numbering has been disabled with a call to @code{nm} without an +argument, it can be reactivated with @samp{.nm +0}, using the previously +active line numbering parameters. The parameters of @code{nm} are associated with the current environment -(@pxref{Environments}). The current output line number is available -in the number register @code{ln}. +(@pxref{Environments}). The current output line number is available in +the number register @code{ln}. @Example .po 1m @@ -13150,8 +13530,8 @@ And here the result: @endDefreq @Defreq {nn, [@Var{skip}]} -Temporarily turn off line numbering. The argument is the number -of lines not to be numbered; this defaults to@tie{}1. +Temporarily turn off line numbering. The argument is the number of +lines not to be numbered; this defaults to@tie{}1. @endDefreq @Defreq {mc, glyph [@Var{dist}]} @@ -13159,15 +13539,14 @@ of lines not to be numbered; this defaults to@tie{}1. @cindex glyph, for margins (@code{mc}) Print a @dfn{margin character} to the right of the text.@footnote{@dfn{Margin character} is a misnomer since it is an -output glyph.} The first argument is the glyph to be -printed. The second argument is the distance away from the right -margin. If missing, the previously set value is used; default is -10@dmn{pt}). For text lines that are too long (that is, longer than -the text length plus @var{dist}), the margin character is directly -appended to the lines. +output glyph.} The first argument is the glyph to be printed. The +second argument is the distance away from the right margin. If missing, +the previously set value is used; default is 10@dmn{pt}). For text +lines that are too long (that is, longer than the text length plus +@var{dist}), the margin character is directly appended to the lines. -With no arguments the margin character is turned off. -If this occurs before a break, no margin character is printed. +With no arguments the margin character is turned off. If this occurs +before a break, no margin character is printed. For compatibility with @acronym{AT&T} @code{troff}, a call to @code{mc} to set the margin character can't be undone immediately; at least one @@ -13237,19 +13616,17 @@ But we can fake it with `\&'. | @DefregListEnd {ury} @cindex PostScript, bounding box @cindex bounding box -Retrieve the bounding box of the PostScript image -found in @var{filename}. -The file must conform to -Adobe's @dfn{Document Structuring Conventions} (DSC); -the command searches for a @code{%%BoundingBox} comment -and extracts the bounding box values into the number registers -@code{llx}, @code{lly}, @code{urx}, and @code{ury}. -If an error occurs (for example, @code{psbb} cannot find -the @code{%%BoundingBox} comment), -it sets the four number registers to zero. - -The search path for @var{filename} can be controlled with the @option{-I} -command line option. +Retrieve the bounding box of the PostScript image found in +@var{filename}. The file must conform to Adobe's @dfn{Document +Structuring Conventions} (DSC); the command searches for a +@code{%%BoundingBox} comment and extracts the bounding box values into +the number registers @code{llx}, @code{lly}, @code{urx}, and @code{ury}. +If an error occurs (for example, @code{psbb} cannot find the +@code{%%BoundingBox} comment), it sets the four number registers to +zero. + +The search path for @var{filename} can be controlled with the +@option{-I} command line option. @endDefreq @@ -13264,32 +13641,32 @@ command line option. @cindex node, output @code{gtroff} processes input in three steps. One or more input characters are converted to an @dfn{input token}.@footnote{Except the -escapes @code{\f}, @code{\F}, @code{\H}, @code{\m}, @code{\M}, @code{\R}, -@code{\s}, and @code{\S} which are processed immediately if not in -copy-in mode.} Then, one or more input tokens are converted to an -@dfn{output node}. Finally, output nodes are converted to the +escapes @code{\f}, @code{\F}, @code{\H}, @code{\m}, @code{\M}, +@code{\R}, @code{\s}, and @code{\S} which are processed immediately if +not in copy-in mode.} Then, one or more input tokens are converted to +an @dfn{output node}. Finally, output nodes are converted to the intermediate output language understood by all output devices. -Actually, before step one happens, @code{gtroff} converts certain -escape sequences into reserved input characters (not accessible by -the user); such reserved characters are used for other internal -processing also -- this is the very reason why not all characters -are valid input. @xref{Identifiers}, for more on this topic. +Actually, before step one happens, @code{gtroff} converts certain escape +sequences into reserved input characters (not accessible by the user); +such reserved characters are used for other internal processing also -- +this is the very reason why not all characters are valid input. +@xref{Identifiers}, for more on this topic. For example, the input string @samp{fi\[:u]} is converted into a character token @samp{f}, a character token @samp{i}, and a special token @samp{:u} (representing u@tie{}umlaut). Later on, the character tokens @samp{f} and @samp{i} are merged to a single output node -representing the ligature glyph @samp{fi} (provided the current font -has a glyph for this ligature); the same happens with @samp{:u}. All -output glyph nodes are `processed' which means that they are invariably -associated with a given font, font size, advance width, etc. During -the formatting process, @code{gtroff} itself adds various nodes to -control the data flow. +representing the ligature glyph @samp{fi} (provided the current font has +a glyph for this ligature); the same happens with @samp{:u}. All output +glyph nodes are `processed' which means that they are invariably +associated with a given font, font size, advance width, etc. During the +formatting process, @code{gtroff} itself adds various nodes to control +the data flow. -Macros, diversions, and strings collect elements in two chained lists: -a list of input tokens which have been passed unprocessed, and a list -of output nodes. Consider the following the diversion. +Macros, diversions, and strings collect elements in two chained lists: a +list of input tokens which have been passed unprocessed, and a list of +output nodes. Consider the following the diversion. @Example .di xxx @@ -13320,9 +13697,9 @@ It contains these elements. @cindex @code{\v}, internal representation @noindent Elements 1, 7, and@tie{}8 are inserted by @code{gtroff}; the latter two -(which are always present) specify the vertical extent of the last -line, possibly modified by @code{\x}. The @code{br} request finishes -the current partial line, inserting a newline input token which is +(which are always present) specify the vertical extent of the last line, +possibly modified by @code{\x}. The @code{br} request finishes the +current partial line, inserting a newline input token which is subsequently converted to a space when the diversion is reread. Note that the word space node has a fixed width which isn't stretchable anymore. To convert horizontal space nodes back to input tokens, use @@ -13331,18 +13708,18 @@ the @code{unformat} request. Macros only contain elements in the token list (and the node list is empty); diversions and strings can contain elements in both lists. -Note that the @code{chop} request simply reduces the number of elements in a -macro, string, or diversion by one. Exceptions are @dfn{compatibility save} -and @dfn{compatibility ignore} input tokens which are ignored. The -@code{substring} request also ignores those input tokens. +Note that the @code{chop} request simply reduces the number of elements +in a macro, string, or diversion by one. Exceptions are +@dfn{compatibility save} and @dfn{compatibility ignore} input tokens +which are ignored. The @code{substring} request also ignores those +input tokens. -Some requests like @code{tr} or @code{cflags} work on glyph -identifiers only; this means that the associated glyph can be changed -without destroying this association. This can be very helpful for -substituting glyphs. In the following example, we assume that -glyph @samp{foo} isn't available by default, so we provide a -substitution using the @code{fchar} request and map it to input -character @samp{x}. +Some requests like @code{tr} or @code{cflags} work on glyph identifiers +only; this means that the associated glyph can be changed without +destroying this association. This can be very helpful for substituting +glyphs. In the following example, we assume that glyph @samp{foo} isn't +available by default, so we provide a substitution using the +@code{fchar} request and map it to input character @samp{x}. @Example .fchar \[foo] foo @@ -13350,8 +13727,8 @@ character @samp{x}. @endExample @noindent -Now let us assume that we install an additional special font -@samp{bar} which has glyph @samp{foo}. +Now let us assume that we install an additional special font @samp{bar} +which has glyph @samp{foo}. @Example .special bar @@ -13359,10 +13736,10 @@ Now let us assume that we install an additional special font @endExample @noindent -Since glyphs defined with @code{fchar} are searched before glyphs -in special fonts, we must call @code{rchar} to remove the definition -of the fallback glyph. Anyway, the translation is still active; -@samp{x} now maps to the real glyph @samp{foo}. +Since glyphs defined with @code{fchar} are searched before glyphs in +special fonts, we must call @code{rchar} to remove the definition of the +fallback glyph. Anyway, the translation is still active; @samp{x} now +maps to the real glyph @samp{foo}. @cindex compatibility mode, and parameters @cindex mode, compatibility, and parameters @@ -13429,31 +13806,40 @@ Note that other @code{troff} implementations (including the original @DefreqListEnd {tmc, string} @cindex printing to stderr (@code{tm}, @code{tm1}, @code{tmc}) @cindex stderr, printing to (@code{tm}, @code{tm1}, @code{tmc}) -Send @var{string} to the standard error output; -this is very useful for printing debugging messages among other things. - +Send @var{string} to the standard error output; this is very useful for +printing debugging messages among other things. + +@cindex @code{tm} request, and copy-in mode +@cindex copy-in mode, and @code{tm} request +@cindex mode, copy-in, and @code{tm} request +@cindex @code{tm1} request, and copy-in mode +@cindex copy-in mode, and @code{tm1} request +@cindex mode, copy-in, and @code{tm1} request +@cindex @code{tmc} request, and copy-in mode +@cindex copy-in mode, and @code{tmc} request +@cindex mode, copy-in, and @code{tmc} request @var{string} is read in copy mode. The @code{tm} request ignores leading spaces of @var{string}; @code{tm1} handles its argument similar to the @code{ds} request: a leading double quote in @var{string} is stripped to allow initial blanks. -The @code{tmc} request is similar to @code{tm1} but does -not append a newline (as is done in @code{tm} and @code{tm1}). +The @code{tmc} request is similar to @code{tm1} but does not append a +newline (as is done in @code{tm} and @code{tm1}). @endDefreq @Defreq {ab, [@Var{string}]} @cindex aborting (@code{ab}) -Similar to the @code{tm} request, except that -it causes @code{gtroff} to stop processing. With no argument it -prints @samp{User Abort.} to standard error. +Similar to the @code{tm} request, except that it causes @code{gtroff} to +stop processing. With no argument it prints @samp{User Abort.} to +standard error. @endDefreq @Defreq {ex, } @cindex @code{ex} request, use in debugging @cindex exiting (@code{ex}) -The @code{ex} request also causes @code{gtroff} to stop processing; -see also @ref{I/O}. +The @code{ex} request also causes @code{gtroff} to stop processing; see +also @ref{I/O}. @endDefreq When doing something involved it is useful to leave the debugging @@ -13470,38 +13856,45 @@ To activate these statements say groff -rDB=1 file @endExample -If it is known in advance that there will be many errors and no useful +If it is known in advance that there are many errors and no useful output, @code{gtroff} can be forced to suppress formatted output with the @option{-z} flag. +@Defreq {pev, } +@cindex dumping environments (@code{pev}) +@cindex environments, dumping (@code{pev}) +Print the contents of the current environment and all the currently +defined environments (both named and numbered) on @code{stderr}. +@endDefreq + @Defreq {pm, } @cindex dumping symbol table (@code{pm}) @cindex symbol table, dumping (@code{pm}) Print the entire symbol table on @code{stderr}. Names of all defined macros, strings, and diversions are print together with their size in -bytes. Since @code{gtroff} sometimes adds nodes by itself, the -returned size can be larger than expected. +bytes. Since @code{gtroff} sometimes adds nodes by itself, the returned +size can be larger than expected. This request differs from @acronym{UNIX} @code{troff}: @code{gtroff} -reports the sizes of diversions, ignores an additional argument to -print only the total of the sizes, and the size isn't returned in -blocks of 128 characters. +reports the sizes of diversions, ignores an additional argument to print +only the total of the sizes, and the size isn't returned in blocks of +128 characters. @endDefreq @Defreq {pnr, } @cindex dumping number registers (@code{pnr}) @cindex number registers, dumping (@code{pnr}) -Print the names and contents of all -currently defined number registers on @code{stderr}. +Print the names and contents of all currently defined number registers +on @code{stderr}. @endDefreq @Defreq {ptr, } @cindex dumping traps (@code{ptr}) @cindex traps, dumping (@code{ptr}) -Print the names and positions of all traps -(not including input line traps and diversion traps) on @code{stderr}. -Empty slots in the page trap list are printed as well, because they can -affect the priority of subsequently planted traps. +Print the names and positions of all traps (not including input line +traps and diversion traps) on @code{stderr}. Empty slots in the page +trap list are printed as well, because they can affect the priority of +subsequently planted traps. @endDefreq @Defreq {fl, } @@ -13509,11 +13902,11 @@ affect the priority of subsequently planted traps. @cindex output, flush (@code{fl}) @cindex interactive use of @code{gtroff} @cindex @code{gtroff}, interactive use -Instruct @code{gtroff} to flush its output immediately. The intent -is for interactive use, but this behaviour is currently not -implemented in @code{gtroff}. Contrary to @acronym{UNIX} @code{troff}, -TTY output is sent to a device driver also (@code{grotty}), making it -non-trivial to communicate interactively. +Instruct @code{gtroff} to flush its output immediately. The intent is +for interactive use, but this behaviour is currently not implemented in +@code{gtroff}. Contrary to @acronym{UNIX} @code{troff}, TTY output is +sent to a device driver also (@code{grotty}), making it non-trivial to +communicate interactively. This request causes a line break. @endDefreq @@ -13551,28 +13944,27 @@ this request on each error and warning. @Defreg {slimit} @cindex input stack, setting limit -Use the @code{slimit} number register -to set the maximum number of objects on the input stack. -If @code{slimit} is less than or equal to@tie{}0, -there is no limit set. -With no limit, a buggy recursive macro can exhaust virtual memory. +Use the @code{slimit} number register to set the maximum number of +objects on the input stack. If @code{slimit} is less than or equal +to@tie{}0, there is no limit set. With no limit, a buggy recursive +macro can exhaust virtual memory. The default value is 1000; this is a compile-time constant. @endDefreg @Defreq {warnscale, si} -Set the scaling indicator used in warnings to @var{si}. Valid values for -@var{si} are @samp{u}, @samp{i}, @samp{c}, @samp{p}, and @samp{P}. At -startup, it is set to @samp{i}. +Set the scaling indicator used in warnings to @var{si}. Valid values +for @var{si} are @samp{u}, @samp{i}, @samp{c}, @samp{p}, and @samp{P}. +At startup, it is set to @samp{i}. @endDefreq @Defreq {spreadwarn, [@Var{limit}]} Make @code{gtroff} emit a warning if the additional space inserted for each space between words in an output line is larger or equal to -@var{limit}. A negative value is changed to zero; no argument toggles the -warning on and off without changing @var{limit}. The default scaling -indicator is @samp{m}. At startup, @code{spreadwarn} is deactivated, and -@var{limit} is set to 3@dmn{m}. +@var{limit}. A negative value is changed to zero; no argument toggles +the warning on and off without changing @var{limit}. The default +scaling indicator is @samp{m}. At startup, @code{spreadwarn} is +deactivated, and @var{limit} is set to 3@dmn{m}. For example, @@ -13581,7 +13973,7 @@ For example, @endExample @noindent -will cause a warning if @code{gtroff} must add 0.2@dmn{m} or more for each +causes a warning if @code{gtroff} must add 0.2@dmn{m} or more for each interword space in a line. This request is active only if text is justified to both margins (using @@ -13684,8 +14076,8 @@ current diversion. @cindex @code{\*}, and warnings Use of undefined strings, macros and diversions. When an undefined string, macro, or diversion is used, that string is automatically -defined as empty. So, in most cases, at most one warning is given -for each name. +defined as empty. So, in most cases, at most one warning is given for +each name. @item reg @itemx 1024 @@ -13727,9 +14119,9 @@ Unrecognized escape sequences. When an unrecognized escape sequence Missing space between a request or macro and its argument. This warning is given when an undefined name longer than two characters is encountered, and the first two characters of the name make a defined -name. The request or macro is not invoked. When this warning is -given, no macro is automatically defined. This is enabled by default. -This warning never occurs in compatibility mode. +name. The request or macro is not invoked. When this warning is given, +no macro is automatically defined. This is enabled by default. This +warning never occurs in compatibility mode. @item font @itemx 131072 @@ -13780,13 +14172,13 @@ interprets @cindex @code{\n}, incompatibilities with @acronym{AT&T} @code{troff} @noindent as defining a string @samp{ab} with contents @samp{cd}. Normally, GNU -@code{troff} interprets this as a call of a macro named -@code{dsabcd}. Also @acronym{UNIX} @code{troff} interprets -@code{\*[} or @code{\n[} as references to a string or number register -called @samp{[}. In GNU @code{troff}, however, this is normally -interpreted as the start of a long name. In compatibility mode GNU -@code{troff} interprets long names in the traditional way -(which means that they are not recognized as names). +@code{troff} interprets this as a call of a macro named @code{dsabcd}. +Also @acronym{UNIX} @code{troff} interprets @code{\*[} or @code{\n[} as +references to a string or number register called @samp{[}. In GNU +@code{troff}, however, this is normally interpreted as the start of a +long name. In compatibility mode GNU @code{troff} interprets long names +in the traditional way (which means that they are not recognized as +names). @DefreqList {cp, [@Var{n}]} @DefreqItem {do, cmd} @@ -13794,25 +14186,27 @@ interpreted as the start of a long name. In compatibility mode GNU If @var{n} is missing or non-zero, turn on compatibility mode; otherwise, turn it off. -The read-only number register @code{.C} is@tie{}1 if compatibility mode is -on, 0@tie{}otherwise. +The read-only number register @code{.C} is@tie{}1 if compatibility mode +is on, 0@tie{}otherwise. -Compatibility mode can be also turned on with the @option{-C} command line -option. +Compatibility mode can be also turned on with the @option{-C} command +line option. -The @code{do} request turns off compatibility mode -while executing its arguments as a @code{gtroff} command. +The @code{do} request turns off compatibility mode while executing its +arguments as a @code{gtroff} command. However, it does not turn off +compatibility mode while processing the macro itself. To do that, use +the @code{de1} request (or manipulate the @code{.C} register manually). +@xref{Writing Macros}. @Example .do fam T @endExample @noindent -executes the @code{fam} request when compatibility mode -is enabled. +executes the @code{fam} request when compatibility mode is enabled. -@code{gtroff} restores the previous compatibility setting -before interpreting any files sourced by the @var{cmd}. +@code{gtroff} restores the previous compatibility setting before +interpreting any files sourced by the @var{cmd}. @endDefreq @cindex input level in delimited arguments @@ -13902,18 +14296,17 @@ Sizes}, for more information. @cindex glyphs, output, and input characters, compatibility with @acronym{AT&T} @code{troff} In GNU @code{troff} there is a fundamental difference between (unformatted) input characters and (formatted) output glyphs. -Everything that affects how a glyph is output is stored -with the glyph node; once a glyph node has been constructed it is -unaffected by any subsequent requests that are executed, including -@code{bd}, @code{cs}, @code{tkf}, @code{tr}, or @code{fp} requests. -Normally glyphs are constructed from input characters at the -moment immediately before the glyph is added to the current output -line. Macros, diversions and strings are all, in fact, the same type of -object; they contain lists of input characters and glyph nodes in -any combination. A glyph node does not behave like an input -character for the purposes of macro processing; it does not inherit any -of the special properties that the input character from which it was -constructed might have had. For example, +Everything that affects how a glyph is output is stored with the glyph +node; once a glyph node has been constructed it is unaffected by any +subsequent requests that are executed, including @code{bd}, @code{cs}, +@code{tkf}, @code{tr}, or @code{fp} requests. Normally glyphs are +constructed from input characters at the moment immediately before the +glyph is added to the current output line. Macros, diversions and +strings are all, in fact, the same type of object; they contain lists of +input characters and glyph nodes in any combination. A glyph node does +not behave like an input character for the purposes of macro processing; +it does not inherit any of the special properties that the input +character from which it was constructed might have had. For example, @Example .di x @@ -13931,8 +14324,8 @@ constructed might have had. For example, @cindex transparent output, incompatibilities with @acronym{AT&T} @code{troff} @cindex output, transparent, incompatibilities with @acronym{AT&T} @code{troff} @noindent -prints @samp{\\} in GNU @code{troff}; each pair of input backslashes -is turned into one output backslash and the resulting output backslashes +prints @samp{\\} in GNU @code{troff}; each pair of input backslashes is +turned into one output backslash and the resulting output backslashes are not interpreted as escape characters when they are reread. @acronym{UNIX} @code{troff} would interpret them as escape characters when they were reread and would end up printing one @samp{\}. The @@ -13943,9 +14336,9 @@ diversion; it also works in both GNU @code{troff} and @acronym{UNIX} @code{troff}.@footnote{To be completely independent of the current escape character, use @code{\(rs} which represents a reverse solidus (backslash) glyph.} To store, for some reason, an escape sequence in a -diversion that will be interpreted when the diversion is reread, either -use the traditional @code{\!} transparent output facility, or, if this -is unsuitable, the new @code{\?} escape sequence. +diversion that is interpreted when the diversion is reread, either use +the traditional @code{\!} transparent output facility, or, if this is +unsuitable, the new @code{\?} escape sequence. @xref{Diversions}, and @ref{Gtroff Internals}, for more information. @@ -14192,10 +14585,11 @@ is available as an extra package from the following address: @c character. Literally, this is printing an underline character, then @c moving back one character position, and printing the actual character @c at the same position as the underline character (similar to a -@c typewriter). Usually, a modern terminal can't interpret this (and the -@c original Teletype machines for which this sequence was appropriate are -@c no longer in use). You need a pager program like @code{less} which -@c translates this into ISO 6429 SGR sequences to control terminals. +@c typewriter). Usually, a modern terminal can't interpret this (and +@c the original Teletype machines for which this sequence was +@c appropriate are no longer in use). You need a pager program like +@c @code{less} which translates this into ISO 6429 SGR sequences to +@c control terminals. @c ===================================================================== @@ -14329,9 +14723,9 @@ is available as an extra package from the following address: @DefmpregList {ps4html, grohtml} @DefstrListEnd {www-image-template, grohtml} The registers @code{ps4html} and @code{www-image-template} are defined -by the @code{pre-grohtml} preprocessor. @code{pre-grohtml} reads in -the @code{troff} input, marks up the inline equations and passes the -result firstly to +by the @code{pre-grohtml} preprocessor. @code{pre-grohtml} reads in the +@code{troff} input, marks up the inline equations and passes the result +firstly to @Example troff -Tps -rps4html=1 -dwww-image-template=@var{template} @@ -14344,9 +14738,19 @@ and secondly to troff -Thtml @endExample -The PostScript device is used to create all the image files, and the -register @code{ps4html} enables the macro sets to ignore floating -keeps, footers, and headings. +@noindent +or + +@Example +troff -Txhtml +@endExample + +@cindex MathML +The PostScript device is used to create all the image files (for +@option{-Thtml}; if @option{-Txhtml} is used, all equations are passed +to @code{geqn} to produce @acronym{MathML}, and the register +@code{ps4html} enables the macro sets to ignore floating keeps, footers, +and headings. The register @code{www-image-template} is set to the user specified template name or the default name. @@ -14402,15 +14806,15 @@ following two sections describe their format. @cindex output, @code{gtroff} This section describes the intermediate output format of GNU -@code{troff}. This output is produced by a run of @code{gtroff} -before it is fed into a device postprocessor program. +@code{troff}. This output is produced by a run of @code{gtroff} before +it is fed into a device postprocessor program. As @code{groff} is a wrapper program around @code{gtroff} that automatically calls a postprocessor, this output does not show up -normally. This is why it is called @dfn{intermediate}. -@code{groff} provides the option @option{-Z} to inhibit postprocessing, -such that the produced intermediate output is sent to standard output -just like calling @code{gtroff} manually. +normally. This is why it is called @dfn{intermediate}. @code{groff} +provides the option @option{-Z} to inhibit postprocessing, such that the +produced intermediate output is sent to standard output just like +calling @code{gtroff} manually. @cindex troff output @cindex output, troff @@ -14421,12 +14825,12 @@ Here, the term @dfn{troff output} describes what is output by that is accepted by the parser that prepares this output for the postprocessors. This parser is smarter on whitespace and implements obsolete elements for compatibility, otherwise both formats are the -same.@footnote{The parser and postprocessor for intermediate output -can be found in the file@* +same.@footnote{The parser and postprocessor for intermediate output can +be found in the file@* @file{@var{groff-source-dir}/src/libs/libdriver/input.cpp}.} -The main purpose of the intermediate output concept is to facilitate -the development of postprocessors by providing a common programming +The main purpose of the intermediate output concept is to facilitate the +development of postprocessors by providing a common programming interface for all devices. It has a language of its own that is completely different from the @code{gtroff} language. While the @code{gtroff} language is a high-level programming language for text @@ -14454,11 +14858,11 @@ used any longer by @code{gtroff}. During the run of @code{gtroff}, the input data is cracked down to the information on what has to be printed at what position on the intended device. So the language of the intermediate output format can be quite -small. Its only elements are commands with and without arguments. -In this section, the term @dfn{command} always refers to the intermediate -output language, and never to the @code{gtroff} language used for document -formatting. There are commands for positioning and text writing, for drawing, and -for device controlling. +small. Its only elements are commands with and without arguments. In +this section, the term @dfn{command} always refers to the intermediate +output language, and never to the @code{gtroff} language used for +document formatting. There are commands for positioning and text +writing, for drawing, and for device controlling. @menu * Separation:: @@ -14469,12 +14873,12 @@ for device controlling. @node Separation, Argument Units, Language Concepts, Language Concepts @subsubsection Separation -@acronym{AT&T} @code{troff} output has strange requirements on whitespace. -The @code{gtroff} output parser, however, is smart about whitespace by -making it maximally optional. The whitespace characters, i.e., the -tab, space, and newline characters, always have a syntactical meaning. -They are never printable because spacing within the output is always -done by positioning commands. +@acronym{AT&T} @code{troff} output has strange requirements on +whitespace. The @code{gtroff} output parser, however, is smart about +whitespace by making it maximally optional. The whitespace characters, +i.e., the tab, space, and newline characters, always have a syntactical +meaning. They are never printable because spacing within the output is +always done by positioning commands. Any sequence of space or tab characters is treated as a single @dfn{syntactical space}. It separates commands and arguments, but is @@ -14484,52 +14888,52 @@ variable-length command names, arguments, argument lists, or command clusters meet. Commands and arguments with a known, fixed length need not be separated by syntactical space. -A line break is a syntactical element, too. Every command argument can be -followed by whitespace, a comment, or a newline character. Thus a +A line break is a syntactical element, too. Every command argument can +be followed by whitespace, a comment, or a newline character. Thus a @dfn{syntactical line break} is defined to consist of optional syntactical space that is optionally followed by a comment, and a newline character. -The normal commands, those for positioning and text, consist of a -single letter taking a fixed number of arguments. For historical reasons, -the parser allows to stack such commands on the same line, but -fortunately, in @code{gtroff}'s intermediate output, every command with -at least one argument is followed by a line break, thus providing -excellent readability. - -The other commands -- those for drawing and device controlling -- -have a more complicated structure; some recognize long command names, -and some take a variable number of arguments. So all @samp{D} and -@samp{x} commands were designed to request a syntactical line break -after their last argument. Only one command, @w{@samp{x X}}, -has an argument that can stretch over several lines; all other -commands must have all of their arguments on the same line as the -command, i.e., the arguments may not be splitted by a line break. - -Empty lines (these are lines containing only space and/or a comment), can -occur everywhere. They are just ignored. +The normal commands, those for positioning and text, consist of a single +letter taking a fixed number of arguments. For historical reasons, the +parser allows to stack such commands on the same line, but fortunately, +in @code{gtroff}'s intermediate output, every command with at least one +argument is followed by a line break, thus providing excellent +readability. + +The other commands -- those for drawing and device controlling -- have a +more complicated structure; some recognize long command names, and some +take a variable number of arguments. So all @samp{D} and @samp{x} +commands were designed to request a syntactical line break after their +last argument. Only one command, @w{@samp{x X}}, has an argument that +can stretch over several lines; all other commands must have all of +their arguments on the same line as the command, i.e., the arguments may +not be split by a line break. + +Empty lines (these are lines containing only space and/or a comment), +can occur everywhere. They are just ignored. @node Argument Units, Document Parts, Separation, Language Concepts @subsubsection Argument Units Some commands take integer arguments that are assumed to represent -values in a measurement unit, but the letter for the corresponding -scale indicator is not written with the output command arguments. -Most commands assume the scale indicator @samp{u}, the basic unit of -the device, some use @samp{z}, the scaled point unit of the device, -while others, such as the color commands, expect plain integers. +values in a measurement unit, but the letter for the corresponding scale +indicator is not written with the output command arguments. Most +commands assume the scale indicator @samp{u}, the basic unit of the +device, some use @samp{z}, the scaled point unit of the device, while +others, such as the color commands, expect plain integers. Note that single characters can have the eighth bit set, as can the names of fonts and special characters. The names of characters and -fonts can be of arbitrary length. A character that is to be printed -will always be in the current font. +fonts can be of arbitrary length. A character that is to be printed is +always in the current font. -A string argument is always terminated by the next whitespace -character (space, tab, or newline); an embedded @samp{#} character is -regarded as part of the argument, not as the beginning of a comment -command. An integer argument is already terminated by the next -non-digit character, which then is regarded as the first character of -the next argument or command. +A string argument is always terminated by the next whitespace character +(space, tab, or newline); an embedded @samp{#} character is regarded as +part of the argument, not as the beginning of a comment command. An +integer argument is already terminated by the next non-digit character, +which then is regarded as the first character of the next argument or +command. @node Document Parts, , Argument Units, Language Concepts @subsubsection Document Parts @@ -14537,9 +14941,9 @@ the next argument or command. A correct intermediate output document consists of two parts, the @dfn{prologue} and the @dfn{body}. -The task of the prologue is to set the general device parameters -using three exactly specified commands. @code{gtroff}'s prologue -is guaranteed to consist of the following three lines (in that order): +The task of the prologue is to set the general device parameters using +three exactly specified commands. @code{gtroff}'s prologue is +guaranteed to consist of the following three lines (in that order): @Example x T @var{device} @@ -14550,21 +14954,20 @@ x init @noindent with the arguments set as outlined in @ref{Device Control Commands}. Note that the parser for the intermediate output format is able to -swallow additional whitespace and comments as well even in the -prologue. +swallow additional whitespace and comments as well even in the prologue. The body is the main section for processing the document data. -Syntactically, it is a sequence of any commands different from the -ones used in the prologue. Processing is terminated as soon as the -first @w{@samp{x stop}} command is encountered; the last line of any +Syntactically, it is a sequence of any commands different from the ones +used in the prologue. Processing is terminated as soon as the first +@w{@samp{x stop}} command is encountered; the last line of any @code{gtroff} intermediate output always contains such a command. Semantically, the body is page oriented. A new page is started by a -@samp{p} command. Positioning, writing, and drawing commands are -always done within the current page, so they cannot occur before the -first @samp{p} command. Absolute positioning (by the @samp{H} and -@samp{V} commands) is done relative to the current page; all other -positioning is done relative to the current location within this page. +@samp{p} command. Positioning, writing, and drawing commands are always +done within the current page, so they cannot occur before the first +@samp{p} command. Absolute positioning (by the @samp{H} and @samp{V} +commands) is done relative to the current page; all other positioning is +done relative to the current location within this page. @c --------------------------------------------------------------------- @@ -14587,8 +14990,8 @@ This section describes all intermediate output commands, both from @table @code @item #@var{anything}@angles{end of line} -A comment. Ignore any characters from the @samp{#} character up to -the next newline character. +A comment. Ignore any characters from the @samp{#} character up to the +next newline character. This command is the only possibility for commenting in the intermediate output. Each comment can be preceded by arbitrary syntactical space; @@ -14599,15 +15002,15 @@ every command can be terminated by a comment. @subsubsection Simple Commands The commands in this subsection have a command code consisting of a -single character, taking a fixed number of arguments. Most of them -are commands for positioning and text writing. These commands are -smart about whitespace. Optionally, syntactical space can be inserted -before, after, and between the command letter and its arguments. -All of these commands are stackable, i.e., they can be preceded by -other simple commands or followed by arbitrary other commands on the -same line. A separating syntactical space is only necessary when two -integer arguments would clash or if the preceding argument ends with a -string argument. +single character, taking a fixed number of arguments. Most of them are +commands for positioning and text writing. These commands are smart +about whitespace. Optionally, syntactical space can be inserted before, +after, and between the command letter and its arguments. All of these +commands are stackable, i.e., they can be preceded by other simple +commands or followed by arbitrary other commands on the same line. A +separating syntactical space is only necessary when two integer +arguments would clash or if the preceding argument ends with a string +argument. @table @code @ignore @@ -14630,24 +15033,24 @@ stack as the actual device configuration data. @end ignore @item C @var{xxx}@angles{whitespace} -Print a special character named @var{xxx}. The trailing -syntactical space or line break is necessary to allow glyph names -of arbitrary length. The glyph is printed at the current print -position; the glyph's size is read from the font file. The print -position is not changed. +Print a special character named @var{xxx}. The trailing syntactical +space or line break is necessary to allow glyph names of arbitrary +length. The glyph is printed at the current print position; the glyph's +size is read from the font file. The print position is not changed. @item c @var{g} -Print glyph@tie{}@var{g} at the current print position;@footnote{@samp{c} -is actually a misnomer since it outputs a glyph.} the glyph's size is -read from the font file. The print position is not changed. +Print glyph@tie{}@var{g} at the current print +position;@footnote{@samp{c} is actually a misnomer since it outputs a +glyph.} the glyph's size is read from the font file. The print position +is not changed. @item f @var{n} Set font to font number@tie{}@var{n} (a non-negative integer). @item H @var{n} Move right to the absolute vertical position@tie{}@var{n} (a -non-negative integer in basic units @samp{u} relative to left edge -of current page. +non-negative integer in basic units @samp{u} relative to left edge of +current page. @item h @var{n} Move @var{n} (a non-negative integer) basic units @samp{u} horizontally @@ -14658,11 +15061,11 @@ values for @var{n} also, but @code{gtroff} doesn't use this. Set the color for text (glyphs), line drawing, and the outline of graphic objects using different color schemes; the analoguous command for the filling color of graphic objects is @samp{DF}. The color -components are specified as integer arguments between 0 and 65536. -The number of color components and their meaning vary for the -different color schemes. These commands are generated by -@code{gtroff}'s escape sequence @code{\m}. No position changing. -These commands are a @code{gtroff} extension. +components are specified as integer arguments between 0 and 65536. The +number of color components and their meaning vary for the different +color schemes. These commands are generated by @code{gtroff}'s escape +sequence @code{\m}. No position changing. These commands are a +@code{gtroff} extension. @table @code @item mc @var{cyan} @var{magenta} @var{yellow} @@ -14670,16 +15073,16 @@ Set color using the CMY color scheme, having the 3@tie{}color components @var{cyan}, @var{magenta}, and @var{yellow}. @item md -Set color to the default color value (black in most cases). -No component arguments. +Set color to the default color value (black in most cases). No +component arguments. @item mg @var{gray} -Set color to the shade of gray given by the argument, an integer -between 0 (black) and 65536 (white). +Set color to the shade of gray given by the argument, an integer between +0 (black) and 65536 (white). @item mk @var{cyan} @var{magenta} @var{yellow} @var{black} -Set color using the CMYK color scheme, having the 4@tie{}color components -@var{cyan}, @var{magenta}, @var{yellow}, and @var{black}. +Set color using the CMYK color scheme, having the 4@tie{}color +components @var{cyan}, @var{magenta}, @var{yellow}, and @var{black}. @item mr @var{red} @var{green} @var{blue} Set color using the RGB color scheme, having the 3@tie{}color components @@ -14691,20 +15094,20 @@ Print glyph with index@tie{}@var{n} (a non-negative integer) of the current font. This command is a @code{gtroff} extension. @item n @var{b} @var{a} -Inform the device about a line break, but no positioning is done by -this command. In @acronym{AT&T} @code{troff}, the integer arguments -@var{b} and@tie{}@var{a} informed about the space before and after the -current line to make the intermediate output more human readable -without performing any action. In @code{groff}, they are just ignored, but -they must be provided for compatibility reasons. +Inform the device about a line break, but no positioning is done by this +command. In @acronym{AT&T} @code{troff}, the integer arguments @var{b} +and@tie{}@var{a} informed about the space before and after the current +line to make the intermediate output more human readable without +performing any action. In @code{groff}, they are just ignored, but they +must be provided for compatibility reasons. @item p @var{n} Begin a new page in the outprint. The page number is set to@tie{}@var{n}. This page is completely independent of pages formerly processed even if those have the same page number. The vertical position on the outprint is automatically set to@tie{}0. All -positioning, writing, and drawing is always done relative to a page, -so a @samp{p} command must be issued before any of these commands. +positioning, writing, and drawing is always done relative to a page, so +a @samp{p} command must be issued before any of these commands. @item s @var{n} Set point size to @var{n}@tie{}scaled points (this is unit @samp{z}). @@ -14714,32 +15117,30 @@ Set point size to @var{n}@tie{}scaled points (this is unit @samp{z}). @item t @var{xxx}@angles{whitespace} @itemx t @var{xxx} @var{dummy-arg}@angles{whitespace} Print a word, i.e., a sequence of characters @var{xxx} representing -output glyphs which names are single characters, terminated by -a space character or a line break; an optional second integer argument -is ignored (this allows the formatter to generate an even number of -arguments). The first glyph should be printed at the current -position, the current horizontal position should then be increased by -the width of the first glyph, and so on for each glyph. -The widths of the glyphs are read from the font file, scaled for the -current point size, and rounded to a multiple of the horizontal -resolution. Special characters cannot be printed using this command -(use the @samp{C} command for special characters). This command is a -@code{gtroff} extension; it is only used for devices whose @file{DESC} -file contains the @code{tcommand} keyword (@pxref{DESC File Format}). +output glyphs which names are single characters, terminated by a space +character or a line break; an optional second integer argument is +ignored (this allows the formatter to generate an even number of +arguments). The first glyph should be printed at the current position, +the current horizontal position should then be increased by the width of +the first glyph, and so on for each glyph. The widths of the glyphs are +read from the font file, scaled for the current point size, and rounded +to a multiple of the horizontal resolution. Special characters cannot +be printed using this command (use the @samp{C} command for special +characters). This command is a @code{gtroff} extension; it is only used +for devices whose @file{DESC} file contains the @code{tcommand} keyword +(@pxref{DESC File Format}). @item u @var{n} @var{xxx}@angles{whitespace} -Print word with track kerning. This is the same as the @samp{t} -command except that after printing each glyph, the current -horizontal position is increased by the sum of the width of that -glyph and@tie{}@var{n} (an integer in basic units @samp{u}). -This command is a @code{gtroff} extension; it is only used for devices -whose @file{DESC} file contains the @code{tcommand} keyword -(@pxref{DESC File Format}). +Print word with track kerning. This is the same as the @samp{t} command +except that after printing each glyph, the current horizontal position +is increased by the sum of the width of that glyph and@tie{}@var{n} (an +integer in basic units @samp{u}). This command is a @code{gtroff} +extension; it is only used for devices whose @file{DESC} file contains +the @code{tcommand} keyword (@pxref{DESC File Format}). @item V @var{n} -Move down to the absolute vertical position@tie{}@var{n} (a -non-negative integer in basic units @samp{u}) relative to upper edge -of current page. +Move down to the absolute vertical position@tie{}@var{n} (a non-negative +integer in basic units @samp{u}) relative to upper edge of current page. @item v @var{n} Move @var{n}@tie{}basic units @samp{u} down (@var{n} is a non-negative @@ -14747,51 +15148,49 @@ integer). The original @acronym{UNIX} troff manual allows negative values for @var{n} also, but @code{gtroff} doesn't use this. @item w -Informs about a paddable white space to increase readability. -The spacing itself must be performed explicitly by a move command. +Informs about a paddable white space to increase readability. The +spacing itself must be performed explicitly by a move command. @end table @node Graphics Commands, Device Control Commands, Simple Commands, Command Reference @subsubsection Graphics Commands -Each graphics or drawing command in the intermediate output starts -with the letter @samp{D}, followed by one or two characters that -specify a subcommand; this is followed by a fixed or variable number -of integer arguments that are separated by a single space character. -A @samp{D} command may not be followed by another command on the same line -(apart from a comment), so each @samp{D} command is terminated by a -syntactical line break. +Each graphics or drawing command in the intermediate output starts with +the letter @samp{D}, followed by one or two characters that specify a +subcommand; this is followed by a fixed or variable number of integer +arguments that are separated by a single space character. A @samp{D} +command may not be followed by another command on the same line (apart +from a comment), so each @samp{D} command is terminated by a syntactical +line break. @code{gtroff} output follows the classical spacing rules (no space -between command and subcommand, all arguments are preceded by a -single space character), but the parser allows optional space between -the command letters and makes the space before the first argument -optional. As usual, each space can be any sequence of tab and space -characters. - -Some graphics commands can take a variable number of arguments. -In this case, they are integers representing a size measured in basic -units @samp{u}. The arguments called @var{h1}, @var{h2}, @dots{}, -@var{hn} stand for horizontal distances where positive means right, -negative left. The arguments called @var{v1}, @var{v2}, @dots{}, -@var{vn} stand for vertical distances where positive means down, -negative up. All these distances are offsets relative to the current -location. +between command and subcommand, all arguments are preceded by a single +space character), but the parser allows optional space between the +command letters and makes the space before the first argument optional. +As usual, each space can be any sequence of tab and space characters. + +Some graphics commands can take a variable number of arguments. In this +case, they are integers representing a size measured in basic units +@samp{u}. The arguments called @var{h1}, @var{h2}, @dots{}, @var{hn} +stand for horizontal distances where positive means right, negative +left. The arguments called @var{v1}, @var{v2}, @dots{}, @var{vn} stand +for vertical distances where positive means down, negative up. All +these distances are offsets relative to the current location. Each graphics command directly corresponds to a similar @code{gtroff} @code{\D} escape sequence. @xref{Drawing Requests}. -Unknown @samp{D} commands are assumed to be device-specific. -Its arguments are parsed as strings; the whole information is then -sent to the postprocessor. +Unknown @samp{D} commands are assumed to be device-specific. Its +arguments are parsed as strings; the whole information is then sent to +the postprocessor. -In the following command reference, the syntax element -@angles{line break} means a syntactical line break as defined above. +In the following command reference, the syntax element @angles{line +break} means a syntactical line break as defined above. @table @code @item D~ @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break} -Draw B-spline from current position to offset (@var{h1},@var{v1}), -then to offset (@var{h2},@var{v2}), if given, etc.@: up to +Draw B-spline from current position to offset (@var{h1},@var{v1}), then +to offset (@var{h2},@var{v2}), if given, etc.@: up to (@var{hn},@var{vn}). This command takes a variable number of argument pairs; the current position is moved to the terminal point of the drawn curve. @@ -14819,26 +15218,26 @@ current position to the rightmost point of the circle. @item DE @var{h} @var{v}@angles{line break} Draw a solid ellipse in the current fill color with a horizontal diameter of@tie{}@var{h} and a vertical diameter of@tie{}@var{v} (both -integers in basic units @samp{u}) with the leftmost point at the -current position; then move to the rightmost point of the ellipse. -This command is a @code{gtroff} extension. +integers in basic units @samp{u}) with the leftmost point at the current +position; then move to the rightmost point of the ellipse. This command +is a @code{gtroff} extension. @item De @var{h} @var{v}@angles{line break} -Draw an outlined ellipse with a horizontal diameter of@tie{}@var{h} -and a vertical diameter of@tie{}@var{v} (both integers in basic units -@samp{u}) with the leftmost point at current position; then move to -the rightmost point of the ellipse. +Draw an outlined ellipse with a horizontal diameter of@tie{}@var{h} and +a vertical diameter of@tie{}@var{v} (both integers in basic units +@samp{u}) with the leftmost point at current position; then move to the +rightmost point of the ellipse. @item DF @var{color-scheme} @r{[}@var{component} @dots{}@r{]}@angles{line break} -Set fill color for solid drawing objects using different color -schemes; the analoguous command for setting the color of text, line -graphics, and the outline of graphic objects is @samp{m}. -The color components are specified as integer arguments between 0 and -65536. The number of color components and their meaning vary for the -different color schemes. These commands are generated by @code{gtroff}'s -escape sequences @w{@code{\D'F @dots{}'}} and @code{\M} (with no other -corresponding graphics commands). No position changing. This command -is a @code{gtroff} extension. +Set fill color for solid drawing objects using different color schemes; +the analoguous command for setting the color of text, line graphics, and +the outline of graphic objects is @samp{m}. The color components are +specified as integer arguments between 0 and 65536. The number of color +components and their meaning vary for the different color schemes. +These commands are generated by @code{gtroff}'s escape sequences +@w{@code{\D'F @dots{}'}} and @code{\M} (with no other corresponding +graphics commands). No position changing. This command is a +@code{gtroff} extension. @table @code @item DFc @var{cyan} @var{magenta} @var{yellow}@angles{line break} @@ -14856,12 +15255,13 @@ the argument, an integer between 0 (black) and 65536 (white). @item DFk @var{cyan} @var{magenta} @var{yellow} @var{black}@angles{line break} Set fill color for solid drawing objects using the CMYK color scheme, -having the 4@tie{}color components @var{cyan}, @var{magenta}, @var{yellow}, -and @var{black}. +having the 4@tie{}color components @var{cyan}, @var{magenta}, +@var{yellow}, and @var{black}. @item DFr @var{red} @var{green} @var{blue}@angles{line break} Set fill color for solid drawing objects using the RGB color scheme, -having the 3@tie{}color components @var{red}, @var{green}, and @var{blue}. +having the 3@tie{}color components @var{red}, @var{green}, and +@var{blue}. @end table @item Df @var{n}@angles{line break} @@ -14872,13 +15272,13 @@ to 32767. @item @math{0 @LE{} @var{n} @LE{} 1000} Set the color for filling solid drawing objects to a shade of gray, where 0 corresponds to solid white, 1000 (the default) to solid black, -and values in between to intermediate shades of gray; this is -obsoleted by command @samp{DFg}. +and values in between to intermediate shades of gray; this is obsoleted +by command @samp{DFg}. @item @math{@var{n} < 0} or @math{@var{n} > 1000} -Set the filling color to the color that is currently being used for -the text and the outline, see command @samp{m}. For example, the -command sequence +Set the filling color to the color that is currently being used for the +text and the outline, see command @samp{m}. For example, the command +sequence @Example mg 0 0 65536 @@ -14893,18 +15293,18 @@ sets all colors to blue. No position changing. This command is a @code{gtroff} extension. @item Dl @var{h} @var{v}@angles{line break} -Draw line from current position to offset (@var{h},@var{v}) (integers -in basic units @samp{u}); then set current position to the end of the -drawn line. +Draw line from current position to offset (@var{h},@var{v}) (integers in +basic units @samp{u}); then set current position to the end of the drawn +line. @item Dp @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break} Draw a polygon line from current position to offset (@var{h1},@var{v1}), from there to offset (@var{h2},@var{v2}), etc.@: up to offset -(@var{hn},@var{vn}), and from there back to the starting position. -For historical reasons, the position is changed by adding the sum of -all arguments with odd index to the actual horizontal position and the -even ones to the vertical position. Although this doesn't make sense -it is kept for compatibility. +(@var{hn},@var{vn}), and from there back to the starting position. For +historical reasons, the position is changed by adding the sum of all +arguments with odd index to the actual horizontal position and the even +ones to the vertical position. Although this doesn't make sense it is +kept for compatibility. @ignore As the polygon is closed, the end of drawing is the starting point, so the position doesn't change. @@ -14924,9 +15324,9 @@ This command is a @code{gtroff} extension. Set the current line thickness to@tie{}@var{n} (an integer in basic units @samp{u}) if @math{@var{n}>0}; if @math{@var{n}=0} select the smallest available line thickness; if @math{@var{n}<0} set the line -thickness proportional to the point size (this is the default before -the first @samp{Dt} command was specified). For historical reasons, -the horizontal position is changed by adding the argument to the actual +thickness proportional to the point size (this is the default before the +first @samp{Dt} command was specified). For historical reasons, the +horizontal position is changed by adding the argument to the actual horizontal position, while the vertical position is not changed. Although this doesn't make sense it is kept for compatibility. @ignore @@ -14938,20 +15338,20 @@ This command is a @code{gtroff} extension. @node Device Control Commands, Obsolete Command, Graphics Commands, Command Reference @subsubsection Device Control Commands -Each device control command starts with the letter @samp{x}, -followed by a space character (optional or arbitrary space or tab in -@code{gtroff}) and a subcommand letter or word; each argument (if any) -must be preceded by a syntactical space. All @samp{x} commands are -terminated by a syntactical line break; no device control command can -be followed by another command on the same line (except a comment). +Each device control command starts with the letter @samp{x}, followed by +a space character (optional or arbitrary space or tab in @code{gtroff}) +and a subcommand letter or word; each argument (if any) must be preceded +by a syntactical space. All @samp{x} commands are terminated by a +syntactical line break; no device control command can be followed by +another command on the same line (except a comment). The subcommand is basically a single letter, but to increase -readability, it can be written as a word, i.e., an arbitrary sequence -of characters terminated by the next tab, space, or newline character. -All characters of the subcommand word but the first are simply ignored. -For example, @code{gtroff} outputs the initialization command -@w{@samp{x i}} as @w{@samp{x init}} and the resolution command -@w{@samp{x r}} as @w{@samp{x res}}. +readability, it can be written as a word, i.e., an arbitrary sequence of +characters terminated by the next tab, space, or newline character. All +characters of the subcommand word but the first are simply ignored. For +example, @code{gtroff} outputs the initialization command @w{@samp{x i}} +as @w{@samp{x init}} and the resolution command @w{@samp{x r}} as +@w{@samp{x res}}. In the following, the syntax element @angles{line break} means a syntactical line break (@pxref{Separation}). @@ -14962,8 +15362,8 @@ The @samp{F} stands for @var{Filename}. Use @var{name} as the intended name for the current file in error reports. This is useful for remembering the original file name when -@code{gtroff} uses an internal piping mechanism. The input file is -not changed by this command. This command is a @code{gtroff} extension. +@code{gtroff} uses an internal piping mechanism. The input file is not +changed by this command. This command is a @code{gtroff} extension. @item xf @var{n} @var{s}@angles{line break} The @samp{f} stands for @var{font}. @@ -14974,9 +15374,9 @@ named@tie{}@var{s} (a text word). @xref{Font Positions}. @item xH @var{n}@angles{line break} The @samp{H} stands for @var{Height}. -Set glyph height to@tie{}@var{n} (a positive integer in scaled -points @samp{z}). @acronym{AT&T} @code{troff} uses the unit points -(@samp{p}) instead. @xref{Output Language Compatibility}. +Set glyph height to@tie{}@var{n} (a positive integer in scaled points +@samp{z}). @acronym{AT&T} @code{troff} uses the unit points (@samp{p}) +instead. @xref{Output Language Compatibility}. @item xi@angles{line break} The @samp{i} stands for @var{init}. @@ -14997,8 +15397,8 @@ The @samp{r} stands for @var{resolution}. Resolution is@tie{}@var{n}, while @var{h} is the minimal horizontal motion, and @var{v} the minimal vertical motion possible with this -device; all arguments are positive integers in basic units @samp{u} -per inch. This is the second command of the prologue. +device; all arguments are positive integers in basic units @samp{u} per +inch. This is the second command of the prologue. @item xS @var{n}@angles{line break} The @samp{S} stands for @var{Slant}. @@ -15014,15 +15414,15 @@ command of any intermediate troff output. @item xt@angles{line break} The @samp{t} stands for @var{trailer}. -Generate trailer information, if any. In @var{gtroff}, this is -actually just ignored. +Generate trailer information, if any. In @var{gtroff}, this is actually +just ignored. @item xT @var{xxx}@angles{line break} The @samp{T} stands for @var{Typesetter}. -Set name of device to word @var{xxx}, a sequence of characters ended -by the next white space character. The possible device names coincide -with those from the @code{groff} @option{-T} option. This is the first +Set name of device to word @var{xxx}, a sequence of characters ended by +the next white space character. The possible device names coincide with +those from the @code{groff} @option{-T} option. This is the first command of the prologue. @item xu @var{n}@angles{line break} @@ -15038,22 +15438,22 @@ The @samp{x} stands for @var{X-escape}. Send string @var{anything} uninterpreted to the device. If the line following this command starts with a @samp{+} character this line is -interpreted as a continuation line in the following sense. The -@samp{+} is ignored, but a newline character is sent instead to the -device, the rest of the line is sent uninterpreted. The same applies -to all following lines until the first character of a line is not a -@samp{+} character. This command is generated by the @code{gtroff} -escape sequence @code{\X}. The line-continuing feature is a -@code{gtroff} extension. +interpreted as a continuation line in the following sense. The @samp{+} +is ignored, but a newline character is sent instead to the device, the +rest of the line is sent uninterpreted. The same applies to all +following lines until the first character of a line is not a @samp{+} +character. This command is generated by the @code{gtroff} escape +sequence @code{\X}. The line-continuing feature is a @code{gtroff} +extension. @end table @node Obsolete Command, , Device Control Commands, Command Reference @subsubsection Obsolete Command -In @acronym{AT&T} @code{troff} output, the writing of a single -glyph is mostly done by a very strange command that combines a -horizontal move and a single character giving the glyph name. It -doesn't have a command code, but is represented by a 3-character -argument consisting of exactly 2@tie{}digits and a character. +In @acronym{AT&T} @code{troff} output, the writing of a single glyph is +mostly done by a very strange command that combines a horizontal move +and a single character giving the glyph name. It doesn't have a command +code, but is represented by a 3-character argument consisting of exactly +2@tie{}digits and a character. @table @asis @item @var{dd}@var{g} @@ -15062,18 +15462,17 @@ then print glyph@tie{}@var{g} (represented as a single character). In @code{gtroff}, arbitrary syntactical space around and within this command is allowed to be added. Only when a preceding command on the -same line ends with an argument of variable length a separating space -is obligatory. In @acronym{AT&T} @code{troff}, large clusters of these -and other commands are used, mostly without spaces; this made such output +same line ends with an argument of variable length a separating space is +obligatory. In @acronym{AT&T} @code{troff}, large clusters of these and +other commands are used, mostly without spaces; this made such output almost unreadable. @end table For modern high-resolution devices, this command does not make sense -because the width of the glyphs can become much larger than two -decimal digits. In @code{gtroff}, this is only used for the devices -@code{X75}, @code{X75-12}, @code{X100}, and @code{X100-12}. For other -devices, the commands @samp{t} and @samp{u} provide a better -functionality. +because the width of the glyphs can become much larger than two decimal +digits. In @code{gtroff}, this is only used for the devices @code{X75}, +@code{X75-12}, @code{X100}, and @code{X100-12}. For other devices, the +commands @samp{t} and @samp{u} provide a better functionality. @c --------------------------------------------------------------------- @@ -15081,14 +15480,14 @@ functionality. @subsection Intermediate Output Examples This section presents the intermediate output generated from the same -input for three different devices. The input is the sentence -@samp{hell world} fed into @code{gtroff} on the command line. +input for three different devices. The input is the sentence @samp{hell +world} fed into @code{gtroff} on the command line. @table @asis @item High-resolution device @code{ps} -This is the standard output of @code{gtroff} if no @option{-T} option -is given. +This is the standard output of @code{gtroff} if no @option{-T} option is +given. @example @group @@ -15118,15 +15517,15 @@ x stop @end example @noindent -This output can be fed into @code{grops} to get its representation as -a PostScript file. +This output can be fed into @code{grops} to get its representation as a +PostScript file. @item Low-resolution device @code{latin1} This is similar to the high-resolution device except that the positioning is done at a minor scale. Some comments (lines starting -with @samp{#}) were added for clarification; they were not generated -by the formatter. +with @samp{#}) were added for clarification; they were not generated by +the formatter. @example @group @@ -15196,8 +15595,8 @@ x stop @end example @noindent -This output can be fed into @code{xditview} or @code{gxditview} -for displaying in@tie{}X. +This output can be fed into @code{xditview} or @code{gxditview} for +displaying in@tie{}X. Due to the obsolete jump-and-write command, the text clusters in the @acronym{AT&T} @code{troff} output are almost unreadable. @@ -15208,10 +15607,10 @@ Due to the obsolete jump-and-write command, the text clusters in the @node Output Language Compatibility, , Intermediate Output Examples, gtroff Output @subsection Output Language Compatibility -The intermediate output language of @acronym{AT&T} @code{troff} -was first documented in the @acronym{UNIX} troff manual, with later -additions documented in @cite{A Typesetter-indenpendent TROFF}, -written by Brian Kernighan. +The intermediate output language of @acronym{AT&T} @code{troff} was +first documented in the @acronym{UNIX} troff manual, with later +additions documented in @cite{A Typesetter-indenpendent TROFF}, written +by Brian Kernighan. The @code{gtroff} intermediate output format is compatible with this specification except for the following features. @@ -15223,28 +15622,28 @@ The classical quasi device independence is not yet implemented. @item The old hardware was very different from what we use today. So the @code{groff} devices are also fundamentally different from the ones in -@acronym{AT&T} @code{troff}. For example, the @acronym{AT&T} -PostScript device is called @code{post} and has a resolution of only -720 units per inch, suitable for printers 20 years ago, while -@code{groff}'s @code{ps} device has a resolution of -72000 units per inch. Maybe, by implementing some rescaling -mechanism similar to the classical quasi device independence, -@code{groff} could emulate @acronym{AT&T}'s @code{post} device. +@acronym{AT&T} @code{troff}. For example, the @acronym{AT&T} PostScript +device is called @code{post} and has a resolution of only 720 units per +inch, suitable for printers 20 years ago, while @code{groff}'s @code{ps} +device has a resolution of 72000 units per inch. Maybe, by implementing +some rescaling mechanism similar to the classical quasi device +independence, @code{groff} could emulate @acronym{AT&T}'s @code{post} +device. @item -The B-spline command @samp{D~} is correctly handled by the -intermediate output parser, but the drawing routines aren't -implemented in some of the postprocessor programs. +The B-spline command @samp{D~} is correctly handled by the intermediate +output parser, but the drawing routines aren't implemented in some of +the postprocessor programs. @item The argument of the commands @samp{s} and @w{@samp{x H}} has the implicit unit scaled point @samp{z} in @code{gtroff}, while @acronym{AT&T} @code{troff} has point (@samp{p}). This isn't an -incompatibility but a compatible extension, for both units coincide -for all devices without a @code{sizescale} parameter in the @file{DESC} +incompatibility but a compatible extension, for both units coincide for +all devices without a @code{sizescale} parameter in the @file{DESC} file, including all postprocessors from @acronym{AT&T} and -@code{groff}'s text devices. The few @code{groff} devices with -a @code{sizescale} parameter either do not exist for @acronym{AT&T} +@code{groff}'s text devices. The few @code{groff} devices with a +@code{sizescale} parameter either do not exist for @acronym{AT&T} @code{troff}, have a different name, or seem to have a different resolution. So conflicts are very unlikely. @@ -15255,13 +15654,13 @@ feature it is kept for compatibility reasons. @ignore Temporarily, there existed some confusion on the positioning after the -@samp{D} commands that are groff extensions. This has been clarified -by establishing the classical rule for all @code{groff} drawing commands: +@samp{D} commands that are groff extensions. This has been clarified by +establishing the classical rule for all @code{groff} drawing commands: @itemize @item -The position after a graphic object has been drawn is at its end; -for circles and ellipses, the `end' is at the right side. +The position after a graphic object has been drawn is at its end; for +circles and ellipses, the `end' is at the right side. @item From this, the positionings specified for the drawing commands above @@ -15305,14 +15704,25 @@ called@tie{}@file{@var{f}}. The @file{DESC} file can contain the following types of line. Except for the @code{charset} keyword which must comes last (if at all), the -order of the lines is not important. +order of the lines is not important. Later entries in the file, +however, override previous values. @table @code -@item res @var{n} -@kindex res -@cindex device resolution -@cindex resolution, device -There are @var{n}@tie{}machine units per inch. +@item charset +@kindex charset +This line and everything following in the file are ignored. It is +allowed for the sake of backwards compatibility. + +@item family @var{fam} +@kindex family +The default font family is @var{fam}. + +@item fonts @var{n} @var{F1} @var{F2} @var{F3} @dots{} @var{Fn} +@kindex fonts +Fonts @var{F1} @dots{} @var{Fn} are mounted in the font positions +@var{m}+1, @dots{}, @var{m}+@var{n} where @var{m} is the number of +styles. This command may extend over more than one line. A font name +of@tie{}0 means no font is mounted on the corresponding font position. @item hor @var{n} @kindex hor @@ -15321,29 +15731,56 @@ There are @var{n}@tie{}machine units per inch. The horizontal resolution is @var{n}@tie{}machine units. All horizontal quantities are rounded to be multiples of this value. -@item vert @var{n} -@kindex vert -@cindex vertical resolution -@cindex resolution, vertical -The vertical resolution is @var{n}@tie{}machine units. All vertical -quantities are rounded to be multiples of this value. +@item image_generator @var{string} +@kindex image_generator +@cindex PostScript, PNG image generation +@cindex PNG image generation from PostScript +Needed for @code{grohtml} only. It specifies the program to generate +PNG images from PostScript input. Under GNU/Linux this is usually +@code{gs} but under other systems (notably cygwin) it might be set to +another name. + +@item paperlength @var{n} +@kindex paperlength +The physical vertical dimension of the output medium in machine units. +This isn't used by @code{troff} itself but by output devices. +Deprecated. Use @code{papersize} instead. -@item sizescale @var{n} -@kindex sizescale -The scale factor for point sizes. By default this has a value of@tie{}1. -One scaled point is equal to one point/@var{n}. The arguments to the -@code{unitwidth} and @code{sizes} commands are given in scaled points. -@xref{Fractional Type Sizes}, for more information. +@item papersize @var{string} @dots{} +@kindex papersize +Select a paper size. Valid values for @var{string} are the ISO paper +types @code{A0}-@code{A7}, @code{B0}-@code{B7}, @code{C0}-@code{C7}, +@code{D0}-@code{D7}, @code{DL}, and the US paper types @code{letter}, +@code{legal}, @code{tabloid}, @code{ledger}, @code{statement}, +@code{executive}, @code{com10}, and @code{monarch}. Case is not +significant for @var{string} if it holds predefined paper types. +Alternatively, @var{string} can be a file name (e.g.@: +@file{/etc/papersize}); if the file can be opened, @code{groff} reads +the first line and tests for the above paper sizes. Finally, +@var{string} can be a custom paper size in the format +@code{@var{length},@var{width}} (no spaces before and after the comma). +Both @var{length} and @var{width} must have a unit appended; valid +values are @samp{i} for inches, @samp{C} for centimeters, @samp{p} for +points, and @samp{P} for picas. Example: @code{12c,235p}. An argument +which starts with a digit is always treated as a custom paper format. +@code{papersize} sets both the vertical and horizontal dimension of the +output medium. -@item unitwidth @var{n} -@kindex unitwidth -Quantities in the font files are given in machine units for fonts whose -point size is @var{n}@tie{}scaled points. +More than one argument can be specified; @code{groff} scans from left to +right and uses the first valid paper specification. -@item prepro @var{program} -@kindex prepro -Call @var{program} as a preprocessor. Currently, this keyword is used -by @code{groff} with option @option{-Thtml} only. +@item paperwidth @var{n} +@kindex paperwidth +The physical horizontal dimension of the output medium in machine units. +This isn't used by @code{troff} itself but by output devices. +Deprecated. Use @code{papersize} instead. + +@item pass_filenames +@kindex pass_filenames +Tell @code{gtroff} to emit the name of the source file currently being +processed. This is achieved by the intermediate output command +@samp{F}. Currently, this is only used by the @code{grohtml} output +device. @item postpro @var{program} @kindex postpro @@ -15354,13 +15791,24 @@ postpro grodvi @endExample @noindent -in the file @file{devdvi/DESC} makes @code{groff} call @code{grodvi} -if option @option{-Tdvi} is given (and @option{-Z} isn't used). +in the file @file{devdvi/DESC} makes @code{groff} call @code{grodvi} if +option @option{-Tdvi} is given (and @option{-Z} isn't used). -@item tcommand -@kindex tcommand -This means that the postprocessor can handle the @samp{t} and @samp{u} -intermediate output commands. +@item prepro @var{program} +@kindex prepro +Call @var{program} as a preprocessor. Currently, this keyword is used +by @code{groff} with option @option{-Thtml} or @option{-Txhtml} only. + +@item print @var{program} +@kindex print +Use @var{program} as a spooler program for printing. If omitted, the +@option{-l} and @option{-L} options of @code{groff} are ignored. + +@item res @var{n} +@kindex res +@cindex device resolution +@cindex resolution, device +There are @var{n}@tie{}machine units per inch. @item sizes @var{s1} @var{s2} @dots{} @var{sn} 0 @kindex sizes @@ -15369,65 +15817,58 @@ This means that the device has fonts at @var{s1}, @var{s2}, @dots{} (this is digit zero). Each @var{si} can also be a range of sizes @var{m}-@var{n}. The list can extend over more than one line. +@item sizescale @var{n} +@kindex sizescale +The scale factor for point sizes. By default this has a value +of@tie{}1. One scaled point is equal to one point/@var{n}. The +arguments to the @code{unitwidth} and @code{sizes} commands are given in +scaled points. @xref{Fractional Type Sizes}, for more information. + @item styles @var{S1} @var{S2} @dots{} @var{Sm} @kindex styles The first @var{m}@tie{}font positions are associated with styles @var{S1} @dots{} @var{Sm}. -@item fonts @var{n} @var{F1} @var{F2} @var{F3} @dots{} @var{Fn} -@kindex fonts -Fonts @var{F1} @dots{} @var{Fn} are mounted in the font positions -@var{m}+1, @dots{}, @var{m}+@var{n} where @var{m} is the number of -styles. This command may extend over more than one line. A font name -of@tie{}0 means no font is mounted on the corresponding font position. - -@item family @var{fam} -@kindex family -The default font family is @var{fam}. +@item tcommand +@kindex tcommand +This means that the postprocessor can handle the @samp{t} and @samp{u} +intermediate output commands. -@item use_charnames_in_special -@kindex use_charnames_in_special -This command indicates that @code{gtroff} should encode special -characters inside special commands. Currently, this is only used -by the @acronym{HTML} output device. @xref{Postprocessor Access}. +@item unicode +@kindex unicode +Indicate that the output device supports the complete Unicode +repertoire. Useful only for devices which produce @emph{character +entities} instead of glyphs. -@item papersize @var{string} @dots{} -@kindex papersize -Select a paper size. Valid values for @var{string} are the ISO paper -types @code{A0}-@code{A7}, @code{B0}-@code{B7}, @code{C0}-@code{C7}, -@code{D0}-@code{D7}, @code{DL}, and the US paper types @code{letter}, -@code{legal}, @code{tabloid}, @code{ledger}, @code{statement}, -@code{executive}, @code{com10}, and @code{monarch}. Case is not significant -for @var{string} if it holds predefined paper types. Alternatively, -@var{string} can be a file name (e.g.@: @file{/etc/papersize}); if the file -can be opened, @code{groff} reads the first line and tests for the above -paper sizes. Finally, @var{string} can be a custom paper size in the format -@code{@var{length},@var{width}} (no spaces before and after the comma). -Both @var{length} and @var{width} must have a unit appended; valid values -are @samp{i} for inches, @samp{C} for centimeters, @samp{p} for points, and -@samp{P} for picas. Example: @code{12c,235p}. An argument which starts -with a digit is always treated as a custom paper format. @code{papersize} -sets both the vertical and horizontal dimension of the output medium. +If @code{unicode} is present, no @code{charset} section is required in +the font description files since the Unicode handling built into +@code{groff} is used. However, if there are entries in a @code{charset} +section, they either override the default mappings for those particular +characters or add new mappings (normally for composite characters). -More than one argument can be specified; @code{groff} scans from left to -right and uses the first valid paper specification. +This is used for @option{-Tutf8}, @option{-Thtml}, and @option{-Txhtml}. -@item pass_filenames -@kindex pass_filenames -Tell @code{gtroff} to emit the name of the source file currently -being processed. This is achieved by the intermediate output command -@samp{F}. Currently, this is only used by the @acronym{HTML} output -device. +@item unitwidth @var{n} +@kindex unitwidth +Quantities in the font files are given in machine units for fonts whose +point size is @var{n}@tie{}scaled points. -@item print @var{program} -@kindex print -Use @var{program} as a spooler program for printing. If omitted, -the @option{-l} and @option{-L} options of @code{groff} are ignored. +@item unscaled_charwidths +@kindex unscaled_charwidths +Make the font handling module always return unscaled character widths. +Needed for the @code{grohtml} device. +@item use_charnames_in_special +@kindex use_charnames_in_special +This command indicates that @code{gtroff} should encode special +characters inside special commands. Currently, this is only used by the +@code{grohtml} output device. @xref{Postprocessor Access}. -@item charset -@kindex charset -This line and everything following in the file are ignored. It is -allowed for the sake of backwards compatibility. +@item vert @var{n} +@kindex vert +@cindex vertical resolution +@cindex resolution, vertical +The vertical resolution is @var{n}@tie{}machine units. All vertical +quantities are rounded to be multiples of this value. @end table The @code{res}, @code{unitwidth}, @code{fonts}, and @code{sizes} lines @@ -15452,8 +15893,8 @@ but completely ignored: @code{spare1}, @code{spare2}, @cindex format of font description files A @dfn{font file}, also (and probably better) called a @dfn{font -description file}, has two sections. The first section is a sequence -of lines each containing a sequence of blank delimited words; the first +description file}, has two sections. The first section is a sequence of +lines each containing a sequence of blank delimited words; the first word in the line is a key, and subsequent words give a value for that key. @@ -15468,16 +15909,16 @@ The normal width of a space is@tie{}@var{n}. @item slant @var{n} @kindex slant -The glyphs of the font have a slant of @var{n}@tie{}degrees. -(Positive means forward.) +The glyphs of the font have a slant of @var{n}@tie{}degrees. (Positive +means forward.) @item ligatures @var{lig1} @var{lig2} @dots{} @var{lign} [0] @kindex ligatures Glyphs @var{lig1}, @var{lig2}, @dots{}, @var{lign} are ligatures; possible ligatures are @samp{ff}, @samp{fi}, @samp{fl}, @samp{ffi} and @samp{ffl}. For backwards compatibility, the list of ligatures may be -terminated with a@tie{}0. The list of ligatures may not extend over more -than one line. +terminated with a@tie{}0. The list of ligatures may not extend over +more than one line. @item special @cindex special fonts @@ -15499,20 +15940,19 @@ character and extend to the end of a line. The second section contains one or two subsections. It must contain a @code{charset} subsection and it may also contain a @code{kernpairs} -subsection. These subsections can appear in any order. Each -subsection starts with a word on a line by itself. +subsection. These subsections can appear in any order. Each subsection +starts with a word on a line by itself. @kindex charset The word @code{charset} starts the character set -subsection.@footnote{This keyword is misnamed since it starts a list -of ordered glyphs, not characters.} The @code{charset} line is -followed by a sequence of lines. Each line gives information for one -glyph. A line comprises a number of fields separated by blanks or -tabs. The format is +subsection.@footnote{This keyword is misnamed since it starts a list of +ordered glyphs, not characters.} The @code{charset} line is followed by +a sequence of lines. Each line gives information for one glyph. A line +comprises a number of fields separated by blanks or tabs. The format is @quotation -@var{name} @var{metrics} @var{type} @var{code} -[@var{entity-name}] [@code{--} @var{comment}] +@var{name} @var{metrics} @var{type} @var{code} [@var{entity-name}] +[@code{--} @var{comment}] @end quotation @cindex 8-bit input @@ -15525,32 +15965,31 @@ tabs. The format is @noindent @var{name} identifies the glyph name@footnote{The distinction between input, characters, and output, glyphs, is not clearly separated in the -terminology of @code{groff}; for example, the @code{char} request -should be called @code{glyph} since it defines an output entity.}: -If @var{name} is a single character@tie{}@var{c} then it corresponds -to the @code{gtroff} input character@tie{}@var{c}; if it is of the form -@samp{\@var{c}} where @var{c} is a single character, then it -corresponds to the special character @code{\[@var{c}]}; otherwise it -corresponds to the special character @samp{\[@var{name}]}. If it -is exactly two characters @var{xx} it can be entered as -@samp{\(@var{xx}}. Note that single-letter special characters can't -be accessed as @samp{\@var{c}}; the only exception is @samp{\-} which -is identical to @code{\[-]}. +terminology of @code{groff}; for example, the @code{char} request should +be called @code{glyph} since it defines an output entity.}: If +@var{name} is a single character@tie{}@var{c} then it corresponds to the +@code{gtroff} input character@tie{}@var{c}; if it is of the form +@samp{\@var{c}} where @var{c} is a single character, then it corresponds +to the special character @code{\[@var{c}]}; otherwise it corresponds to +the special character @samp{\[@var{name}]}. If it is exactly two +characters @var{xx} it can be entered as @samp{\(@var{xx}}. Note that +single-letter special characters can't be accessed as @samp{\@var{c}}; +the only exception is @samp{\-} which is identical to @code{\[-]}. @code{gtroff} supports 8-bit input characters; however some utilities have difficulties with eight-bit characters. For this reason, there is a convention that the entity name @samp{char@var{n}} is equivalent to the single input character whose code is@tie{}@var{n}. For example, @samp{char163} would be equivalent to the character with code@tie{}163 -which is the pounds sterling sign in the ISO@tie{}@w{Latin-1} character set. -You shouldn't use @samp{char@var{n}} entities in font description files -since they are related to input, not output. Otherwise, you get -hard-coded connections between input and output encoding which -prevents use of different (input) character sets. +which is the pounds sterling sign in the ISO@tie{}@w{Latin-1} character +set. You shouldn't use @samp{char@var{n}} entities in font description +files since they are related to input, not output. Otherwise, you get +hard-coded connections between input and output encoding which prevents +use of different (input) character sets. -The name @samp{---} is special and indicates that the glyph is -unnamed; such glyphs can only be used by means of the @code{\N} -escape sequence in @code{gtroff}. +The name @samp{---} is special and indicates that the glyph is unnamed; +such glyphs can only be used by means of the @code{\N} escape sequence +in @code{gtroff}. The @var{type} field gives the glyph type: @@ -15566,22 +16005,22 @@ the glyph has both an ascender and a descender, for example, @samp{(}. @end table The @var{code} field gives the code which the postprocessor uses to -print the glyph. The glyph can also be input to @code{gtroff} -using this code by means of the @code{\N} escape sequence. @var{code} -can be any integer. If it starts with @samp{0} it is interpreted as -octal; if it starts with @samp{0x} or @samp{0X} it is interpreted as -hexadecimal. Note, however, that the @code{\N} escape sequence only -accepts a decimal integer. - -The @var{entity-name} field gives an @acronym{ASCII} string -identifying the glyph which the postprocessor uses to print the -@code{gtroff} glyph @var{name}. This field is optional and has been -introduced so that the @acronym{HTML} device driver can encode its -character set. For example, the glyph @samp{\[Po]} is -represented as @samp{£} in @acronym{HTML} 4.0. +print the glyph. The glyph can also be input to @code{gtroff} using +this code by means of the @code{\N} escape sequence. @var{code} can be +any integer. If it starts with @samp{0} it is interpreted as octal; if +it starts with @samp{0x} or @samp{0X} it is interpreted as hexadecimal. +Note, however, that the @code{\N} escape sequence only accepts a decimal +integer. + +The @var{entity-name} field gives an @acronym{ASCII} string identifying +the glyph which the postprocessor uses to print the @code{gtroff} glyph +@var{name}. This field is optional and has been introduced so that the +@code{grohtml} device driver can encode its character set. For example, +the glyph @samp{\[Po]} is represented as @samp{£} in +@acronym{HTML} 4.0. Anything on the line after the @var{entity-name} field resp.@: after -@samp{--} will be ignored. +@samp{--} is ignored. The @var{metrics} field has the form: @@ -15599,11 +16038,11 @@ assumed to be@tie{}0. The subfields are all decimal integers. Since there is no associated binary format, these values are not required to fit into a variable of type @samp{char} as they are in @code{ditroff}. The @var{width} subfield gives the width of the glyph. The @var{height} -subfield gives the height of the glyph (upwards is positive); if a -glyph does not extend above the baseline, it should be given a zero -height, rather than a negative height. The @var{depth} subfield gives -the depth of the glyph, that is, the distance from the baseline to the -lowest point below the baseline to which the glyph extends (downwards is +subfield gives the height of the glyph (upwards is positive); if a glyph +does not extend above the baseline, it should be given a zero height, +rather than a negative height. The @var{depth} subfield gives the depth +of the glyph, that is, the distance from the baseline to the lowest +point below the baseline to which the glyph extends (downwards is positive); if a glyph does not extend below the baseline, it should be given a zero depth, rather than a negative depth. The @var{italic-correction} subfield gives the amount of space that should @@ -15612,8 +16051,8 @@ glyph from a roman font. The @var{left-italic-correction} subfield gives the amount of space that should be added before the glyph when it is immediately to be preceded by a glyph from a roman font. The @var{subscript-correction} gives the amount of space that should be -added after a glyph before adding a subscript. This should be less -than the italic correction. +added after a glyph before adding a subscript. This should be less than +the italic correction. A line in the @code{charset} section can also have the format @@ -15634,9 +16073,9 @@ sequence of lines of the form: @endExample @noindent -This means that when glyph @var{c1} appears next to glyph @var{c2} -the space between them should be increased by@tie{}@var{n}. Most -entries in the kernpairs section have a negative value for@tie{}@var{n}. +This means that when glyph @var{c1} appears next to glyph @var{c2} the +space between them should be increased by@tie{}@var{n}. Most entries in +the kernpairs section have a negative value for@tie{}@var{n}. @@ -15657,10 +16096,6 @@ entries in the kernpairs section have a negative value for@tie{}@var{n}. @node Copying This Manual, Request Index, Installation, Top @appendix Copying This Manual -@menu -* GNU Free Documentation License:: License for copying this manual. -@end menu - @include fdl.texi @@ -15712,8 +16147,8 @@ brackets. A register name@tie{}@code{x} consisting of exactly one character can be accessed as @samp{\nx}. A register name @code{xx} consisting of exactly -two characters can be accessed as @samp{\n(xx}. Register names @code{xxx} -of any length can be accessed as @samp{\n[xxx]}. +two characters can be accessed as @samp{\n(xx}. Register names +@code{xxx} of any length can be accessed as @samp{\n[xxx]}. @printindex vr diff --git a/contrib/groff/font/devcp1047/R.proto b/contrib/groff/font/devcp1047/R.proto index 866ad87dc4..a1103dbf8b 100644 --- a/contrib/groff/font/devcp1047/R.proto +++ b/contrib/groff/font/devcp1047/R.proto @@ -253,7 +253,7 @@ H 24 0 0310 *Y " I 24 0 0311 *I " -shc 24 0 0312 +--- 24 0 0312 ^o 24 0 0313 :o 24 0 0314 `o 24 0 0315 diff --git a/contrib/groff/font/devdvi/CWITC b/contrib/groff/font/devdvi/CWITC index 65d6ddb608..43654086f8 100644 --- a/contrib/groff/font/devdvi/CWITC +++ b/contrib/groff/font/devdvi/CWITC @@ -129,7 +129,7 @@ pc 550368,451360,0,182000 0 0267 u203B 550368,514453,0,182000 2 0270 S1 550368,728000,0,182000 2 0271 Om 550368,728000,0,182000 2 0272 ---- 550368,728000,14560,182000 3 0273 +sr 550368,728000,14560,182000 3 0273 --- 550368,728000,232960,182000 3 0274 --- 550368,728000,232960,182000 3 0275 --- 550368,728000,232960,182000 3 0276 diff --git a/contrib/groff/font/devdvi/CWTC b/contrib/groff/font/devdvi/CWTC index 4e2eea32fe..0e73e8af04 100644 --- a/contrib/groff/font/devdvi/CWTC +++ b/contrib/groff/font/devdvi/CWTC @@ -128,7 +128,7 @@ pc 550368,451360 0 0267 u203B 550368,514453 2 0270 S1 550368,728000 2 0271 Om 550368,728000 2 0272 ---- 550368,728000,14560 3 0273 +sr 550368,728000,14560 3 0273 --- 550368,728000,232960 3 0274 --- 550368,728000,232960 3 0275 --- 550368,728000,232960 3 0276 diff --git a/contrib/groff/font/devdvi/HBITC b/contrib/groff/font/devdvi/HBITC index 9a9fec86b3..b7645b2155 100644 --- a/contrib/groff/font/devdvi/HBITC +++ b/contrib/groff/font/devdvi/HBITC @@ -129,7 +129,7 @@ pc 235872,483392 2 0267 u203B 700819,572691,0,19032 2 0270 S1 512512,786240,0,135086 2 0271 Om 512512,786240,0,116982 2 0272 ---- 544544,786240,174720,167118 3 0273 +sr 544544,786240,174720,167118 3 0273 --- 512512,786240,203840,135086 3 0274 --- 512512,786240,203840,135086 3 0275 --- 512512,786240,203840,135086 3 0276 diff --git a/contrib/groff/font/devdvi/HBTC b/contrib/groff/font/devdvi/HBTC index 74c0f272dc..d953209428 100644 --- a/contrib/groff/font/devdvi/HBTC +++ b/contrib/groff/font/devdvi/HBTC @@ -128,7 +128,7 @@ pc 235872,483392 2 0267 u203B 700819,572691 2 0270 S1 512512,786240 2 0271 Om 512512,786240 2 0272 ---- 544544,786240,174720 3 0273 +sr 544544,786240,174720 3 0273 --- 512512,786240,203840 3 0274 --- 512512,786240,203840 3 0275 --- 512512,786240,203840 3 0276 diff --git a/contrib/groff/font/devdvi/HITC b/contrib/groff/font/devdvi/HITC index 46d62df75a..7dae3690a3 100644 --- a/contrib/groff/font/devdvi/HITC +++ b/contrib/groff/font/devdvi/HITC @@ -129,7 +129,7 @@ pc 247520,465920 0 0267 u203B 679466,560560,0,20397 2 0270 S1 465920,786240,0,137998 2 0271 Om 465920,786240,0,116982 2 0272 ---- 495040,786240,220138,167118 3 0273 +sr 495040,786240,220138,167118 3 0273 --- 465920,786240,203840,137998 3 0274 --- 465920,786240,203840,137998 3 0275 --- 465920,786240,203840,137998 3 0276 diff --git a/contrib/groff/font/devdvi/HRTC b/contrib/groff/font/devdvi/HRTC index 9e7b715af4..f05e6caf47 100644 --- a/contrib/groff/font/devdvi/HRTC +++ b/contrib/groff/font/devdvi/HRTC @@ -128,7 +128,7 @@ pc 247520,465920 0 0267 u203B 679466,560560 2 0270 S1 465920,786240 2 0271 Om 465920,786240 2 0272 ---- 495040,786240,220138 3 0273 +sr 495040,786240,220138 3 0273 --- 465920,786240,203840 3 0274 --- 465920,786240,203840 3 0275 --- 465920,786240,203840 3 0276 diff --git a/contrib/groff/font/devdvi/TBITC b/contrib/groff/font/devdvi/TBITC index 1a68c23786..a451d4ea0d 100644 --- a/contrib/groff/font/devdvi/TBITC +++ b/contrib/groff/font/devdvi/TBITC @@ -129,7 +129,7 @@ pc 321485,472035 2 0267 u203B 740811,553278,0,27373 2 0270 S1 557939,786240,0,165693 2 0271 Om 557939,786240,0,137592 2 0272 ---- 556774,786240,199165,196560 3 0273 +sr 556774,786240,199165,196560 3 0273 --- 557939,786240,203840,165693 3 0274 --- 557939,786240,203840,165693 3 0275 --- 557939,786240,203840,165693 3 0276 diff --git a/contrib/groff/font/devdvi/TBTC b/contrib/groff/font/devdvi/TBTC index 94e2360fb8..0b9250593f 100644 --- a/contrib/groff/font/devdvi/TBTC +++ b/contrib/groff/font/devdvi/TBTC @@ -128,7 +128,7 @@ pc 288288,465920 0 0267 u203B 687230,553278 2 0270 S1 535808,786240 2 0271 Om 535808,786240 2 0272 ---- 569296,786240,199165 3 0273 +sr 569296,786240,199165 3 0273 --- 535808,786240,203840 3 0274 --- 535808,786240,203840 3 0275 --- 535808,786240,203840 3 0276 diff --git a/contrib/groff/font/devdvi/TITC b/contrib/groff/font/devdvi/TITC index 4987eeb702..c050c97c73 100644 --- a/contrib/groff/font/devdvi/TITC +++ b/contrib/groff/font/devdvi/TITC @@ -129,7 +129,7 @@ pc 321485,450486 0 0267 u203B 704314,548426,0,29630 2 0270 S1 482227,786240,0,169770 2 0271 Om 482227,786240,0,137592 2 0272 ---- 482227,786240,220138,196560 3 0273 +sr 482227,786240,220138,196560 3 0273 --- 482227,786240,203840,169770 3 0274 --- 482227,786240,203840,169770 3 0275 --- 482227,786240,203840,169770 3 0276 diff --git a/contrib/groff/font/devdvi/TRTC b/contrib/groff/font/devdvi/TRTC index 6042e8e0b2..b297903ea7 100644 --- a/contrib/groff/font/devdvi/TRTC +++ b/contrib/groff/font/devdvi/TRTC @@ -128,7 +128,7 @@ pc 291200,458640 2 0267 u203B 660051,548426 2 0270 S1 465920,786240 2 0271 Om 465920,786240 2 0272 ---- 495040,786240,220138 3 0273 +sr 495040,786240,220138 3 0273 --- 465920,786240,203840 3 0274 --- 465920,786240,203840 3 0275 --- 465920,786240,203840 3 0276 diff --git a/contrib/groff/font/devdvi/generate/Makefile b/contrib/groff/font/devdvi/generate/Makefile index ffbc68c77c..24668a3586 100644 --- a/contrib/groff/font/devdvi/generate/Makefile +++ b/contrib/groff/font/devdvi/generate/Makefile @@ -1,21 +1,20 @@ -# Copyright (C) 1989-2002 Free Software Foundation, Inc. +# Copyright (C) 1989-2002, 2009 Free Software Foundation, Inc. # Written by James Clark (jjc@jclark.com) # # This file is part of groff. # # groff is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free -# Software Foundation; either version 2, or (at your option) any later -# version. +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. # # groff is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # for more details. # -# You should have received a copy of the GNU General Public License along -# with groff; see the file COPYING. If not, write to the Free Software -# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . # This is set up so you can do: # make -f generate/Makefile diff --git a/contrib/groff/font/devdvi/generate/tc.map b/contrib/groff/font/devdvi/generate/tc.map index e7457221b3..4c12a30d30 100644 --- a/contrib/groff/font/devdvi/generate/tc.map +++ b/contrib/groff/font/devdvi/generate/tc.map @@ -75,6 +75,7 @@ 184 u203B 185 S1 186 Om +187 sr 191 Eu 214 tmu 246 tdi diff --git a/contrib/groff/font/devhtml/DESC.proto b/contrib/groff/font/devhtml/DESC.proto index db407f7bb8..0c9c0cc863 100644 --- a/contrib/groff/font/devhtml/DESC.proto +++ b/contrib/groff/font/devhtml/DESC.proto @@ -10,3 +10,4 @@ postpro post-grohtml prepro pre-grohtml use_charnames_in_special pass_filenames +unicode diff --git a/contrib/groff/font/devhtml/R.in b/contrib/groff/font/devhtml/R.in new file mode 100644 index 0000000000..849c0b66cb --- /dev/null +++ b/contrib/groff/font/devhtml/R.in @@ -0,0 +1,8 @@ +name R +internalname 0 +spacewidth 24 +charset +hy 24 0 0x002D +- " +la 24 0 0x2329 +ra 24 0 0x232A diff --git a/contrib/groff/font/devhtml/R.proto b/contrib/groff/font/devhtml/R.proto index 5126980a38..357052fba7 100644 --- a/contrib/groff/font/devhtml/R.proto +++ b/contrib/groff/font/devhtml/R.proto @@ -2,745 +2,1027 @@ name R 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 -ij 24 0 0x0133 ij -u004C_0301 24 0 0x0139 Ĺ -u006C_0301 24 0 0x013A ĺ -u004C_030C 24 0 0x013D Ľ -u006C_030C 24 0 0x013E ľ -/L 24 0 0x0141 Ł -/l 24 0 0x0142 ł -u004E_0301 24 0 0x0143 Ń -u006E_0301 24 0 0x0144 ń -u004E_030C 24 0 0x0147 Ň -u006E_030C 24 0 0x0148 ň -u004F_030B 24 0 0x0150 Ŋ -u006F_030B 24 0 0x0151 ŋ -OE 24 0 0x0152 Œ -oe 24 0 0x0153 œ -u0052_0301 24 0 0x0154 Ŕ -u0072_0301 24 0 0x0155 ŕ -u0052_030C 24 0 0x0158 Ř -u0072_030C 24 0 0x0159 ř -u0053_0301 24 0 0x015A Ś -u0073_0301 24 0 0x015B ś -u0053_0327 24 0 0x015E Ş -u0073_0327 24 0 0x015F ş -vS 24 0 0x0160 Š -vs 24 0 0x0161 š -u0054_0327 24 0 0x0162 Ţ -u0074_0327 24 0 0x0163 ţ -u0054_030C 24 0 0x0164 Ť -u0074_030C 24 0 0x0165 ť -u0055_030A 24 0 0x016E Ů -u0075_030A 24 0 0x016F ů -u0055_030B 24 0 0x0170 Ű -u0075_030B 24 0 0x0171 ű -:Y 24 0 0x0178 Ÿ -u005A_0301 24 0 0x0179 Ź -u007A_0301 24 0 0x017A ź -u005A_0307 24 0 0x017B Ż -u007A_0307 24 0 0x017C ż -vZ 24 0 0x017D Ž -vz 24 0 0x017E ž -Fn 24 0 0x0192 ƒ -ah 24 0 0x02C7 ˇ -ab 24 0 0x02D8 ˘ -a. 24 0 0x02D9 ˙ -ao 24 0 0x02DA ˚ -ho 24 0 0x02DB ˛ -a" 24 0 0x02DD ˝ -*A 24 0 0x0391 Α -*B 24 0 0x0392 Β -*G 24 0 0x0393 Γ -*D 24 0 0x0394 Δ -*E 24 0 0x0395 Ε -*Z 24 0 0x0396 Ζ -*Y 24 0 0x0397 Η -*H 24 0 0x0398 Θ -*I 24 0 0x0399 Ι -*K 24 0 0x039A Κ -*L 24 0 0x039B Λ -*M 24 0 0x039C Μ -*N 24 0 0x039D Ν -*C 24 0 0x039E Ξ -*O 24 0 0x039F Ο -*P 24 0 0x03A0 Π -*R 24 0 0x03A1 Ρ -*S 24 0 0x03A3 Σ -*T 24 0 0x03A4 Τ -*U 24 0 0x03A5 Υ -*F 24 0 0x03A6 Φ -*X 24 0 0x03A7 Χ -*Q 24 0 0x03A8 Ψ -*W 24 0 0x03A9 Ω -*a 24 0 0x03B1 α -*b 24 0 0x03B2 β -*g 24 0 0x03B3 γ -*d 24 0 0x03B4 δ -*e 24 0 0x03B5 ε -*z 24 0 0x03B6 ζ -*y 24 0 0x03B7 η -*h 24 0 0x03B8 θ -*i 24 0 0x03B9 ι -*k 24 0 0x03BA κ -*l 24 0 0x03BB λ -*m 24 0 0x03BC μ -*n 24 0 0x03BD ν -*c 24 0 0x03BE ξ -*o 24 0 0x03BF ο -*p 24 0 0x03C0 π -*r 24 0 0x03C1 ρ -ts 24 0 0x03C2 ς -*s 24 0 0x03C3 σ -*t 24 0 0x03C4 τ -*u 24 0 0x03C5 υ -+f 24 0 0x03C6 φ -*x 24 0 0x03C7 χ -*q 24 0 0x03C8 ψ -*w 24 0 0x03C9 ω -+h 24 0 0x03D1 ϑ -*f 24 0 0x03D5 ϕ -+p 24 0 0x03D6 ϖ -+e 24 0 0x03F5 ϵ -u0415_0300 24 0 0x0400 Ѐ -u0415_0308 24 0 0x0401 Ё -u0402 24 0 0x0402 Ђ -u0413_0301 24 0 0x0403 Ѓ -u0404 24 0 0x0404 Є -u0405 24 0 0x0405 Ѕ -u0406 24 0 0x0406 І -u0406_0308 24 0 0x0407 Ї -u0408 24 0 0x0408 Ј -u0409 24 0 0x0409 Љ -u040A 24 0 0x040A Њ -u040B 24 0 0x040B Ћ -u041A_0301 24 0 0x040C Ќ -u0418_0300 24 0 0x040D Ѝ -u0423_0306 24 0 0x040E Ў -u040F 24 0 0x040F Џ -u0410 24 0 0x0410 А -u0411 24 0 0x0411 Б -u0412 24 0 0x0412 В -u0413 24 0 0x0413 Г -u0414 24 0 0x0414 Д -u0415 24 0 0x0415 Е -u0416 24 0 0x0416 Ж -u0417 24 0 0x0417 З -u0418 24 0 0x0418 И -u0418_0306 24 0 0x0419 Й -u041A 24 0 0x041A К -u041B 24 0 0x041B Л -u041C 24 0 0x041C М -u041D 24 0 0x041D Н -u041E 24 0 0x041E О -u041F 24 0 0x041F П -u0420 24 0 0x0420 Р -u0421 24 0 0x0421 С -u0422 24 0 0x0422 Т -u0423 24 0 0x0423 У -u0424 24 0 0x0424 Ф -u0425 24 0 0x0425 Х -u0426 24 0 0x0426 Ц -u0427 24 0 0x0427 Ч -u0428 24 0 0x0428 Ш -u0429 24 0 0x0429 Щ -u042A 24 0 0x042A Ъ -u042B 24 0 0x042B Ы -u042C 24 0 0x042C Ь -u042D 24 0 0x042D Э -u042E 24 0 0x042E Ю -u042F 24 0 0x042F Я -u0430 24 0 0x0430 а -u0431 24 0 0x0431 б -u0432 24 0 0x0432 в -u0433 24 0 0x0433 г -u0434 24 0 0x0434 д -u0435 24 0 0x0435 е -u0436 24 0 0x0436 ж -u0437 24 0 0x0437 з -u0438 24 0 0x0438 и -u0438_0306 24 0 0x0439 й -u043A 24 0 0x043A к -u043B 24 0 0x043B л -u043C 24 0 0x043C м -u043D 24 0 0x043D н -u043E 24 0 0x043E о -u043F 24 0 0x043F п -u0440 24 0 0x0440 р -u0441 24 0 0x0441 с -u0442 24 0 0x0442 т -u0443 24 0 0x0443 у -u0444 24 0 0x0444 ф -u0445 24 0 0x0445 х -u0446 24 0 0x0446 ц -u0447 24 0 0x0447 ч -u0448 24 0 0x0448 ш -u0449 24 0 0x0449 щ -u044A 24 0 0x044A ъ -u044B 24 0 0x044B ы -u044C 24 0 0x044C ь -u044D 24 0 0x044D э -u044E 24 0 0x044E ю -u044F 24 0 0x044F я -u0435_0300 24 0 0x0450 ѐ -u0435_0308 24 0 0x0451 ё -u0452 24 0 0x0452 ђ -u0433_0301 24 0 0x0453 ѓ -u0454 24 0 0x0454 є -u0455 24 0 0x0455 ѕ -u0456 24 0 0x0456 і -u0456_0308 24 0 0x0457 ї -u0458 24 0 0x0458 ј -u0459 24 0 0x0459 љ -u045A 24 0 0x045A њ -u045B 24 0 0x045B ћ -u043A_0301 24 0 0x045C ќ -u0438_0300 24 0 0x045D ѝ -u0443_0306 24 0 0x045E ў -u045F 24 0 0x045F џ -u0460 24 0 0x0460 Ѡ -u0461 24 0 0x0461 ѡ -u0462 24 0 0x0462 Ѣ -u0463 24 0 0x0463 ѣ -u0464 24 0 0x0464 Ѥ -u0465 24 0 0x0465 ѥ -u0466 24 0 0x0466 Ѧ -u0467 24 0 0x0467 ѧ -u0468 24 0 0x0468 Ѩ -u0469 24 0 0x0469 ѩ -u046A 24 0 0x046A Ѫ -u046B 24 0 0x046B ѫ -u046C 24 0 0x046C Ѭ -u046D 24 0 0x046D ѭ -u046E 24 0 0x046E Ѯ -u046F 24 0 0x046F ѯ -u0470 24 0 0x0470 Ѱ -u0471 24 0 0x0471 ѱ -u0472 24 0 0x0472 Ѳ -u0473 24 0 0x0473 ѳ -u0474 24 0 0x0474 Ѵ -u0475 24 0 0x0475 ѵ -u0474_030F 24 0 0x0476 Ѷ -u0475_030F 24 0 0x0477 ѷ -u0478 24 0 0x0478 Ѹ -u0479 24 0 0x0479 ѹ -u047A 24 0 0x047A Ѻ -u047B 24 0 0x047B ѻ -u047C 24 0 0x047C Ѽ -u047D 24 0 0x047D ѽ -u047E 24 0 0x047E Ѿ -u047F 24 0 0x047F ѿ -u0480 24 0 0x0480 Ҁ -u0481 24 0 0x0481 ҁ -u0482 24 0 0x0482 ҂ -u0483 0 0 0x0483 ҃ -u0484 0 0 0x0484 ҄ -u0485 0 0 0x0485 ҅ -u0486 0 0 0x0486 ҆ -u0488 0 0 0x0488 ҈ -u0489 0 0 0x0489 ҉ -u048A 24 0 0x048A Ҋ -u048B 24 0 0x048B ҋ -u048C 24 0 0x048C Ҍ -u048D 24 0 0x048D ҍ -u048E 24 0 0x048E Ҏ -u048F 24 0 0x048F ҏ -u0490 24 0 0x0490 Ґ -u0491 24 0 0x0491 ґ -u0492 24 0 0x0492 Ғ -u0493 24 0 0x0493 ғ -u0494 24 0 0x0494 Ҕ -u0495 24 0 0x0495 ҕ -u0496 24 0 0x0496 Җ -u0497 24 0 0x0497 җ -u0498 24 0 0x0498 Ҙ -u0499 24 0 0x0499 ҙ -u049A 24 0 0x049A Қ -u049B 24 0 0x049B қ -u049C 24 0 0x049C Ҝ -u049D 24 0 0x049D ҝ -u049E 24 0 0x049E Ҟ -u049F 24 0 0x049F ҟ -u04A0 24 0 0x04A0 Ҡ -u04A1 24 0 0x04A1 ҡ -u04A2 24 0 0x04A2 Ң -u04A3 24 0 0x04A3 ң -u04A4 24 0 0x04A4 Ҥ -u04A5 24 0 0x04A5 ҥ -u04A6 24 0 0x04A6 Ҧ -u04A7 24 0 0x04A7 ҧ -u04A8 24 0 0x04A8 Ҩ -u04A9 24 0 0x04A9 ҩ -u04AA 24 0 0x04AA Ҫ -u04AB 24 0 0x04AB ҫ -u04AC 24 0 0x04AC Ҭ -u04AD 24 0 0x04AD ҭ -u04AE 24 0 0x04AE Ү -u04AF 24 0 0x04AF ү -u04B0 24 0 0x04B0 Ұ -u04B1 24 0 0x04B1 ұ -u04B2 24 0 0x04B2 Ҳ -u04B3 24 0 0x04B3 ҳ -u04B4 24 0 0x04B4 Ҵ -u04B5 24 0 0x04B5 ҵ -u04B6 24 0 0x04B6 Ҷ -u04B7 24 0 0x04B7 ҷ -u04B8 24 0 0x04B8 Ҹ -u04B9 24 0 0x04B9 ҹ -u04BA 24 0 0x04BA Һ -u04BB 24 0 0x04BB һ -u04BC 24 0 0x04BC Ҽ -u04BD 24 0 0x04BD ҽ -u04BE 24 0 0x04BE Ҿ -u04BF 24 0 0x04BF ҿ -u04C0 24 0 0x04C0 Ӏ -u0416_0306 24 0 0x04C1 Ӂ -u0436_0306 24 0 0x04C2 ӂ -u04C3 24 0 0x04C3 Ӄ -u04C4 24 0 0x04C4 ӄ -u04C5 24 0 0x04C5 Ӆ -u04C6 24 0 0x04C6 ӆ -u04C7 24 0 0x04C7 Ӈ -u04C8 24 0 0x04C8 ӈ -u04C9 24 0 0x04C9 Ӊ -u04CA 24 0 0x04CA ӊ -u04CB 24 0 0x04CB Ӌ -u04CC 24 0 0x04CC ӌ -u04CD 24 0 0x04CD Ӎ -u04CE 24 0 0x04CE ӎ -u0410_0306 24 0 0x04D0 Ӑ -u0430_0306 24 0 0x04D1 ӑ -u0410_0308 24 0 0x04D2 Ӓ -u0430_0308 24 0 0x04D3 ӓ -u04D4 24 0 0x04D4 Ӕ -u04D5 24 0 0x04D5 ӕ -u0415_0306 24 0 0x04D6 Ӗ -u0435_0306 24 0 0x04D7 ӗ -u04D8 24 0 0x04D8 Ә -u04D9 24 0 0x04D9 ә -u04D8_0308 24 0 0x04DA Ӛ -u04D9_0308 24 0 0x04DB ӛ -u0416_0308 24 0 0x04DC Ӝ -u0436_0308 24 0 0x04DD ӝ -u0417_0308 24 0 0x04DE Ӟ -u0437_0308 24 0 0x04DF ӟ -u04E0 24 0 0x04E0 Ӡ -u04E1 24 0 0x04E1 ӡ -u0418_0304 24 0 0x04E2 Ӣ -u0438_0304 24 0 0x04E3 ӣ -u0418_0308 24 0 0x04E4 Ӥ -u0438_0308 24 0 0x04E5 ӥ -u041E_0308 24 0 0x04E6 Ӧ -u043E_0308 24 0 0x04E7 ӧ -u04E8 24 0 0x04E8 Ө -u04E9 24 0 0x04E9 ө -u04E8_0308 24 0 0x04EA Ӫ -u04E9_0308 24 0 0x04EB ӫ -u042D_0308 24 0 0x04EC Ӭ -u044D_0308 24 0 0x04ED ӭ -u0423_0304 24 0 0x04EE Ӯ -u0443_0304 24 0 0x04EF ӯ -u0423_0308 24 0 0x04F0 Ӱ -u0443_0308 24 0 0x04F1 ӱ -u0423_030B 24 0 0x04F2 Ӳ -u0443_030B 24 0 0x04F3 ӳ -u0427_0308 24 0 0x04F4 Ӵ -u0447_0308 24 0 0x04F5 ӵ -u042B_0308 24 0 0x04F8 Ӹ -u044B_0308 24 0 0x04F9 ӹ -u0500 24 0 0x0500 Ԁ -u0501 24 0 0x0501 ԁ -u0502 24 0 0x0502 Ԃ -u0503 24 0 0x0503 ԃ -u0504 24 0 0x0504 Ԅ -u0505 24 0 0x0505 ԅ -u0506 24 0 0x0506 Ԇ -u0507 24 0 0x0507 ԇ -u0508 24 0 0x0508 Ԉ -u0509 24 0 0x0509 ԉ -u050A 24 0 0x050A Ԋ -u050B 24 0 0x050B ԋ -u050C 24 0 0x050C Ԍ -u050D 24 0 0x050D ԍ -u050E 24 0 0x050E Ԏ -u050F 24 0 0x050F ԏ -en 24 0 0x2013 – -em 24 0 0x2014 — -` 24 0 0x2018 ‘ -oq " -' 24 0 0x2019 ’ -cq " -bq 24 0 0x201A ‚ -lq 24 0 0x201C “ -rq 24 0 0x201D ” -Bq 24 0 0x201E „ -dg 24 0 0x2020 † -dd 24 0 0x2021 ‡ -bu 24 0 0x2022 • -%0 24 0 0x2030 ‰ -fm 24 0 0x2032 ′ -sd 24 0 0x2033 ″ -fo 24 0 0x2039 ‹ -fc 24 0 0x203A › -rn 24 0 0x203E ‾ -f/ 24 0 0x2044 ⁄ -Eu 24 0 0x20AC € -eu " --h 24 0 0x210F ℏ -hbar " -Im 24 0 0x2111 ℑ -wp 24 0 0x2118 ℘ -Re 24 0 0x211C ℜ -tm 24 0 0x2122 ™ -Ah 24 0 0x2135 ℵ -18 24 0 0x215B ⅛ -38 24 0 0x215C ⅜ -58 24 0 0x215D ⅝ -78 24 0 0x215E ⅞ -<- 24 0 0x2190 ← -ua 24 0 0x2191 ↑ --> 24 0 0x2192 → -da 24 0 0x2193 ↓ -<> 24 0 0x2194 ↔ -va 24 0 0x2195 ↕ -CR 24 0 0x21B5 ↵ -lA 24 0 0x21D0 ⇐ -uA 24 0 0x21D1 ⇑ -rA 24 0 0x21D2 ⇒ -dA 24 0 0x21D3 ⇓ -hA 24 0 0x21D4 ⇔ -vA 24 0 0x21D5 ⇕ -fa 24 0 0x2200 ∀ -pd 24 0 0x2202 ∂ -te 24 0 0x2203 ∃ -es 24 0 0x2205 ∅ -gr 24 0 0x2207 ∇ -mo 24 0 0x2208 ∈ -nm 24 0 0x2209 ∉ -st 24 0 0x220B ∋ -product 24 0 0x220F ∏ -coproduct 24 0 0x2210 ∐ -sum 24 0 0x2211 ∑ -\- 24 0 0x2212 − -mi " --+ 24 0 0x2213 ∓ -** 24 0 0x2217 ∗ -sr 24 0 0x221A √ -sqrt " -pt 24 0 0x221D ∝ -if 24 0 0x221E ∞ -/_ 24 0 0x2220 ∠ -AN 24 0 0x2227 ∧ -OR 24 0 0x2228 ∨ -ca 24 0 0x2229 ∩ -cu 24 0 0x222A ∪ -is 24 0 0x222B ∫ -integral " -tf 24 0 0x2234 ∴ -3d " -ap 24 0 0x223C ∼ -|= 24 0 0x2243 ≃ -=~ 24 0 0x2245 ≅ -~~ 24 0 0x2248 ≈ -~= " -!= 24 0 0x2260 ≠ -== 24 0 0x2261 ≡ -ne 24 0 0x2262 ≢ -<= 24 0 0x2264 ≤ ->= 24 0 0x2265 ≥ -<< 24 0 0x226A ≪ ->> 24 0 0x226B ≫ -sb 24 0 0x2282 ⊂ -sp 24 0 0x2283 ⊃ -nb 24 0 0x2284 ⊄ -nc 24 0 0x2285 ⊅ -ib 24 0 0x2286 ⊆ -ip 24 0 0x2287 ⊇ -c+ 24 0 0x2295 ⊕ -c* 24 0 0x2297 ⊗ -pp 24 0 0x22A5 ⊥ -md 24 0 0x22C5 ⋅ -lc 24 0 0x2308 ⌈ -rc 24 0 0x2309 ⌉ -lf 24 0 0x230A ⌊ -rf 24 0 0x230B ⌋ -la 24 0 0x2329 ⟨ -ra 24 0 0x232A ⟩ -parenlefttp 24 0 0x239B ⎛ -parenleftex 24 0 0x239C ⎜ -parenleftbt 24 0 0x239D ⎝ -parenrighttp 24 0 0x239E ⎞ -parenrightex 24 0 0x239F ⎟ -parenrightbt 24 0 0x23A0 ⎠ -bracketlefttp 24 0 0x23A1 ⎡ -bracketleftex 24 0 0x23A2 ⎢ -bracketleftbt 24 0 0x23A3 ⎣ -bracketrighttp 24 0 0x23A4 ⎤ -bracketrightex 24 0 0x23A5 ⎥ -bracketrightbt 24 0 0x23A6 ⎦ -lt 24 0 0x23A7 ⎧ -bracelefttp " -lk 24 0 0x23A8 ⎨ -braceleftmid " -lb 24 0 0x23A9 ⎩ -braceleftbt " -bv 24 0 0x23AA ⎪ -braceex " -braceleftex " -bracerightex " -rt 24 0 0x23AB ⎫ -bracerighttp " -rk 24 0 0x23AC ⎬ -bracerightmid " -rb 24 0 0x23AD ⎭ -bracerightbt " -u23AE 24 0 0x23AE ⎮ -an 24 0 0x23AF ⎯ -br 24 0 0x2502 │ -sq 24 0 0x25A1 □ -lz 24 0 0x25CA ◊ -ci 24 0 0x25CB ○ -lh 24 0 0x261C ☜ -rh 24 0 0x261E ☞ -SP 24 0 0x2660 ♠ -CL 24 0 0x2663 ♣ -HE 24 0 0x2665 ♥ -DI 24 0 0x2666 ♦ -OK 24 0 0x2713 ✓ +la 24 0 0x2329 +ra 24 0 0x232A +u0041_0300 24 0 0x00C0 +u0041_0301 24 0 0x00C1 +u0041_0302 24 0 0x00C2 +u0041_0303 24 0 0x00C3 +u0041_0308 24 0 0x00C4 +u0041_030A 24 0 0x00C5 +u0043_0327 24 0 0x00C7 +u0045_0300 24 0 0x00C8 +u0045_0301 24 0 0x00C9 +u0045_0302 24 0 0x00CA +u0045_0308 24 0 0x00CB +u0049_0300 24 0 0x00CC +u0049_0301 24 0 0x00CD +u0049_0302 24 0 0x00CE +u0049_0308 24 0 0x00CF +u004E_0303 24 0 0x00D1 +u004F_0300 24 0 0x00D2 +u004F_0301 24 0 0x00D3 +u004F_0302 24 0 0x00D4 +u004F_0303 24 0 0x00D5 +u004F_0308 24 0 0x00D6 +u0055_0300 24 0 0x00D9 +u0055_0301 24 0 0x00DA +u0055_0302 24 0 0x00DB +u0055_0308 24 0 0x00DC +u0059_0301 24 0 0x00DD +u0061_0300 24 0 0x00E0 +u0061_0301 24 0 0x00E1 +u0061_0302 24 0 0x00E2 +u0061_0303 24 0 0x00E3 +u0061_0308 24 0 0x00E4 +u0061_030A 24 0 0x00E5 +u0063_0327 24 0 0x00E7 +u0065_0300 24 0 0x00E8 +u0065_0301 24 0 0x00E9 +u0065_0302 24 0 0x00EA +u0065_0308 24 0 0x00EB +u0069_0300 24 0 0x00EC +u0069_0301 24 0 0x00ED +u0069_0302 24 0 0x00EE +u0069_0308 24 0 0x00EF +u006E_0303 24 0 0x00F1 +u006F_0300 24 0 0x00F2 +u006F_0301 24 0 0x00F3 +u006F_0302 24 0 0x00F4 +u006F_0303 24 0 0x00F5 +u006F_0308 24 0 0x00F6 +u0075_0300 24 0 0x00F9 +u0075_0301 24 0 0x00FA +u0075_0302 24 0 0x00FB +u0075_0308 24 0 0x00FC +u0079_0301 24 0 0x00FD +u0079_0308 24 0 0x00FF +u0041_0304 24 0 0x0100 +u0061_0304 24 0 0x0101 +u0041_0306 24 0 0x0102 +u0061_0306 24 0 0x0103 +u0041_0328 24 0 0x0104 +u0061_0328 24 0 0x0105 +u0043_0301 24 0 0x0106 +u0063_0301 24 0 0x0107 +u0043_0302 24 0 0x0108 +u0063_0302 24 0 0x0109 +u0043_0307 24 0 0x010A +u0063_0307 24 0 0x010B +u0043_030C 24 0 0x010C +u0063_030C 24 0 0x010D +u0044_030C 24 0 0x010E +u0064_030C 24 0 0x010F +u0045_0304 24 0 0x0112 +u0065_0304 24 0 0x0113 +u0045_0306 24 0 0x0114 +u0065_0306 24 0 0x0115 +u0045_0307 24 0 0x0116 +u0065_0307 24 0 0x0117 +u0045_0328 24 0 0x0118 +u0065_0328 24 0 0x0119 +u0045_030C 24 0 0x011A +u0065_030C 24 0 0x011B +u0047_0302 24 0 0x011C +u0067_0302 24 0 0x011D +u0047_0306 24 0 0x011E +u0067_0306 24 0 0x011F +u0047_0307 24 0 0x0120 +u0067_0307 24 0 0x0121 +u0047_0327 24 0 0x0122 +u0067_0327 24 0 0x0123 +u0048_0302 24 0 0x0124 +u0068_0302 24 0 0x0125 +u0049_0303 24 0 0x0128 +u0069_0303 24 0 0x0129 +u0049_0304 24 0 0x012A +u0069_0304 24 0 0x012B +u0049_0306 24 0 0x012C +u0069_0306 24 0 0x012D +u0049_0328 24 0 0x012E +u0069_0328 24 0 0x012F +u0049_0307 24 0 0x0130 +u004A_0302 24 0 0x0134 +u006A_0302 24 0 0x0135 +u004B_0327 24 0 0x0136 +u006B_0327 24 0 0x0137 +u004C_0301 24 0 0x0139 +u006C_0301 24 0 0x013A +u004C_0327 24 0 0x013B +u006C_0327 24 0 0x013C +u004C_030C 24 0 0x013D +u006C_030C 24 0 0x013E +u004E_0301 24 0 0x0143 +u006E_0301 24 0 0x0144 +u004E_0327 24 0 0x0145 +u006E_0327 24 0 0x0146 +u004E_030C 24 0 0x0147 +u006E_030C 24 0 0x0148 +u004F_0304 24 0 0x014C +u006F_0304 24 0 0x014D +u004F_0306 24 0 0x014E +u006F_0306 24 0 0x014F +u004F_030B 24 0 0x0150 +u006F_030B 24 0 0x0151 +u0052_0301 24 0 0x0154 +u0072_0301 24 0 0x0155 +u0052_0327 24 0 0x0156 +u0072_0327 24 0 0x0157 +u0052_030C 24 0 0x0158 +u0072_030C 24 0 0x0159 +u0053_0301 24 0 0x015A +u0073_0301 24 0 0x015B +u0053_0302 24 0 0x015C +u0073_0302 24 0 0x015D +u0053_0327 24 0 0x015E +u0073_0327 24 0 0x015F +u0053_030C 24 0 0x0160 +u0073_030C 24 0 0x0161 +u0054_0327 24 0 0x0162 +u0074_0327 24 0 0x0163 +u0054_030C 24 0 0x0164 +u0074_030C 24 0 0x0165 +u0055_0303 24 0 0x0168 +u0075_0303 24 0 0x0169 +u0055_0304 24 0 0x016A +u0075_0304 24 0 0x016B +u0055_0306 24 0 0x016C +u0075_0306 24 0 0x016D +u0055_030A 24 0 0x016E +u0075_030A 24 0 0x016F +u0055_030B 24 0 0x0170 +u0075_030B 24 0 0x0171 +u0055_0328 24 0 0x0172 +u0075_0328 24 0 0x0173 +u0057_0302 24 0 0x0174 +u0077_0302 24 0 0x0175 +u0059_0302 24 0 0x0176 +u0079_0302 24 0 0x0177 +u0059_0308 24 0 0x0178 +u005A_0301 24 0 0x0179 +u007A_0301 24 0 0x017A +u005A_0307 24 0 0x017B +u007A_0307 24 0 0x017C +u005A_030C 24 0 0x017D +u007A_030C 24 0 0x017E +u004F_031B 24 0 0x01A0 +u006F_031B 24 0 0x01A1 +u0055_031B 24 0 0x01AF +u0075_031B 24 0 0x01B0 +u0041_030C 24 0 0x01CD +u0061_030C 24 0 0x01CE +u0049_030C 24 0 0x01CF +u0069_030C 24 0 0x01D0 +u004F_030C 24 0 0x01D1 +u006F_030C 24 0 0x01D2 +u0055_030C 24 0 0x01D3 +u0075_030C 24 0 0x01D4 +u0055_0308_0304 24 0 0x01D5 +u0075_0308_0304 24 0 0x01D6 +u0055_0308_0301 24 0 0x01D7 +u0075_0308_0301 24 0 0x01D8 +u0055_0308_030C 24 0 0x01D9 +u0075_0308_030C 24 0 0x01DA +u0055_0308_0300 24 0 0x01DB +u0075_0308_0300 24 0 0x01DC +u0041_0308_0304 24 0 0x01DE +u0061_0308_0304 24 0 0x01DF +u0041_0307_0304 24 0 0x01E0 +u0061_0307_0304 24 0 0x01E1 +u00C6_0304 24 0 0x01E2 +u00E6_0304 24 0 0x01E3 +u0047_030C 24 0 0x01E6 +u0067_030C 24 0 0x01E7 +u004B_030C 24 0 0x01E8 +u006B_030C 24 0 0x01E9 +u004F_0328 24 0 0x01EA +u006F_0328 24 0 0x01EB +u004F_0328_0304 24 0 0x01EC +u006F_0328_0304 24 0 0x01ED +u01B7_030C 24 0 0x01EE +u0292_030C 24 0 0x01EF +u006A_030C 24 0 0x01F0 +u0047_0301 24 0 0x01F4 +u0067_0301 24 0 0x01F5 +u004E_0300 24 0 0x01F8 +u006E_0300 24 0 0x01F9 +u0041_030A_0301 24 0 0x01FA +u0061_030A_0301 24 0 0x01FB +u00C6_0301 24 0 0x01FC +u00E6_0301 24 0 0x01FD +u00D8_0301 24 0 0x01FE +u00F8_0301 24 0 0x01FF +u0041_030F 24 0 0x0200 +u0061_030F 24 0 0x0201 +u0041_0311 24 0 0x0202 +u0061_0311 24 0 0x0203 +u0045_030F 24 0 0x0204 +u0065_030F 24 0 0x0205 +u0045_0311 24 0 0x0206 +u0065_0311 24 0 0x0207 +u0049_030F 24 0 0x0208 +u0069_030F 24 0 0x0209 +u0049_0311 24 0 0x020A +u0069_0311 24 0 0x020B +u004F_030F 24 0 0x020C +u006F_030F 24 0 0x020D +u004F_0311 24 0 0x020E +u006F_0311 24 0 0x020F +u0052_030F 24 0 0x0210 +u0072_030F 24 0 0x0211 +u0052_0311 24 0 0x0212 +u0072_0311 24 0 0x0213 +u0055_030F 24 0 0x0214 +u0075_030F 24 0 0x0215 +u0055_0311 24 0 0x0216 +u0075_0311 24 0 0x0217 +u0053_0326 24 0 0x0218 +u0073_0326 24 0 0x0219 +u0054_0326 24 0 0x021A +u0074_0326 24 0 0x021B +u0048_030C 24 0 0x021E +u0068_030C 24 0 0x021F +u0041_0307 24 0 0x0226 +u0061_0307 24 0 0x0227 +u0045_0327 24 0 0x0228 +u0065_0327 24 0 0x0229 +u004F_0308_0304 24 0 0x022A +u006F_0308_0304 24 0 0x022B +u004F_0303_0304 24 0 0x022C +u006F_0303_0304 24 0 0x022D +u004F_0307 24 0 0x022E +u006F_0307 24 0 0x022F +u004F_0307_0304 24 0 0x0230 +u006F_0307_0304 24 0 0x0231 +u0059_0304 24 0 0x0232 +u0079_0304 24 0 0x0233 +u0308_0301 24 0 0x0344 +u00A8_0301 24 0 0x0385 +u0391_0301 24 0 0x0386 +u0395_0301 24 0 0x0388 +u0397_0301 24 0 0x0389 +u0399_0301 24 0 0x038A +u039F_0301 24 0 0x038C +u03A5_0301 24 0 0x038E +u03A9_0301 24 0 0x038F +u03B9_0308_0301 24 0 0x0390 +u0399_0308 24 0 0x03AA +u03A5_0308 24 0 0x03AB +u03B1_0301 24 0 0x03AC +u03B5_0301 24 0 0x03AD +u03B7_0301 24 0 0x03AE +u03B9_0301 24 0 0x03AF +u03C5_0308_0301 24 0 0x03B0 +u03B9_0308 24 0 0x03CA +u03C5_0308 24 0 0x03CB +u03BF_0301 24 0 0x03CC +u03C5_0301 24 0 0x03CD +u03C9_0301 24 0 0x03CE +u03D2_0301 24 0 0x03D3 +u03D2_0308 24 0 0x03D4 +u0415_0300 24 0 0x0400 +u0415_0308 24 0 0x0401 +u0413_0301 24 0 0x0403 +u0406_0308 24 0 0x0407 +u041A_0301 24 0 0x040C +u0418_0300 24 0 0x040D +u0423_0306 24 0 0x040E +u0418_0306 24 0 0x0419 +u0438_0306 24 0 0x0439 +u0435_0300 24 0 0x0450 +u0435_0308 24 0 0x0451 +u0433_0301 24 0 0x0453 +u0456_0308 24 0 0x0457 +u043A_0301 24 0 0x045C +u0438_0300 24 0 0x045D +u0443_0306 24 0 0x045E +u0474_030F 24 0 0x0476 +u0475_030F 24 0 0x0477 +u0416_0306 24 0 0x04C1 +u0436_0306 24 0 0x04C2 +u0410_0306 24 0 0x04D0 +u0430_0306 24 0 0x04D1 +u0410_0308 24 0 0x04D2 +u0430_0308 24 0 0x04D3 +u0415_0306 24 0 0x04D6 +u0435_0306 24 0 0x04D7 +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 +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_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 +u0627_0653 24 0 0x0622 +u0627_0654 24 0 0x0623 +u0648_0654 24 0 0x0624 +u0627_0655 24 0 0x0625 +u064A_0654 24 0 0x0626 +u06D5_0654 24 0 0x06C0 +u06C1_0654 24 0 0x06C2 +u06D2_0654 24 0 0x06D3 +u0928_093C 24 0 0x0929 +u0930_093C 24 0 0x0931 +u0933_093C 24 0 0x0934 +u0915_093C 24 0 0x0958 +u0916_093C 24 0 0x0959 +u0917_093C 24 0 0x095A +u091C_093C 24 0 0x095B +u0921_093C 24 0 0x095C +u0922_093C 24 0 0x095D +u092B_093C 24 0 0x095E +u092F_093C 24 0 0x095F +u09C7_09BE 24 0 0x09CB +u09C7_09D7 24 0 0x09CC +u09A1_09BC 24 0 0x09DC +u09A2_09BC 24 0 0x09DD +u09AF_09BC 24 0 0x09DF +u0A32_0A3C 24 0 0x0A33 +u0A38_0A3C 24 0 0x0A36 +u0A16_0A3C 24 0 0x0A59 +u0A17_0A3C 24 0 0x0A5A +u0A1C_0A3C 24 0 0x0A5B +u0A2B_0A3C 24 0 0x0A5E +u0B47_0B56 24 0 0x0B48 +u0B47_0B3E 24 0 0x0B4B +u0B47_0B57 24 0 0x0B4C +u0B21_0B3C 24 0 0x0B5C +u0B22_0B3C 24 0 0x0B5D +u0B92_0BD7 24 0 0x0B94 +u0BC6_0BBE 24 0 0x0BCA +u0BC7_0BBE 24 0 0x0BCB +u0BC6_0BD7 24 0 0x0BCC +u0C46_0C56 24 0 0x0C48 +u0CBF_0CD5 24 0 0x0CC0 +u0CC6_0CD5 24 0 0x0CC7 +u0CC6_0CD6 24 0 0x0CC8 +u0CC6_0CC2 24 0 0x0CCA +u0CC6_0CC2_0CD5 24 0 0x0CCB +u0D46_0D3E 24 0 0x0D4A +u0D47_0D3E 24 0 0x0D4B +u0D46_0D57 24 0 0x0D4C +u0DD9_0DCA 24 0 0x0DDA +u0DD9_0DCF 24 0 0x0DDC +u0DD9_0DCF_0DCA 24 0 0x0DDD +u0DD9_0DDF 24 0 0x0DDE +u0F42_0FB7 24 0 0x0F43 +u0F4C_0FB7 24 0 0x0F4D +u0F51_0FB7 24 0 0x0F52 +u0F56_0FB7 24 0 0x0F57 +u0F5B_0FB7 24 0 0x0F5C +u0F40_0FB5 24 0 0x0F69 +u0F71_0F72 24 0 0x0F73 +u0F71_0F74 24 0 0x0F75 +u0FB2_0F80 24 0 0x0F76 +u0FB3_0F80 24 0 0x0F78 +u0F71_0F80 24 0 0x0F81 +u0F92_0FB7 24 0 0x0F93 +u0F9C_0FB7 24 0 0x0F9D +u0FA1_0FB7 24 0 0x0FA2 +u0FA6_0FB7 24 0 0x0FA7 +u0FAB_0FB7 24 0 0x0FAC +u0F90_0FB5 24 0 0x0FB9 +u1025_102E 24 0 0x1026 +u0041_0325 24 0 0x1E00 +u0061_0325 24 0 0x1E01 +u0042_0307 24 0 0x1E02 +u0062_0307 24 0 0x1E03 +u0042_0323 24 0 0x1E04 +u0062_0323 24 0 0x1E05 +u0042_0331 24 0 0x1E06 +u0062_0331 24 0 0x1E07 +u0043_0327_0301 24 0 0x1E08 +u0063_0327_0301 24 0 0x1E09 +u0044_0307 24 0 0x1E0A +u0064_0307 24 0 0x1E0B +u0044_0323 24 0 0x1E0C +u0064_0323 24 0 0x1E0D +u0044_0331 24 0 0x1E0E +u0064_0331 24 0 0x1E0F +u0044_0327 24 0 0x1E10 +u0064_0327 24 0 0x1E11 +u0044_032D 24 0 0x1E12 +u0064_032D 24 0 0x1E13 +u0045_0304_0300 24 0 0x1E14 +u0065_0304_0300 24 0 0x1E15 +u0045_0304_0301 24 0 0x1E16 +u0065_0304_0301 24 0 0x1E17 +u0045_032D 24 0 0x1E18 +u0065_032D 24 0 0x1E19 +u0045_0330 24 0 0x1E1A +u0065_0330 24 0 0x1E1B +u0045_0327_0306 24 0 0x1E1C +u0065_0327_0306 24 0 0x1E1D +u0046_0307 24 0 0x1E1E +u0066_0307 24 0 0x1E1F +u0047_0304 24 0 0x1E20 +u0067_0304 24 0 0x1E21 +u0048_0307 24 0 0x1E22 +u0068_0307 24 0 0x1E23 +u0048_0323 24 0 0x1E24 +u0068_0323 24 0 0x1E25 +u0048_0308 24 0 0x1E26 +u0068_0308 24 0 0x1E27 +u0048_0327 24 0 0x1E28 +u0068_0327 24 0 0x1E29 +u0048_032E 24 0 0x1E2A +u0068_032E 24 0 0x1E2B +u0049_0330 24 0 0x1E2C +u0069_0330 24 0 0x1E2D +u0049_0308_0301 24 0 0x1E2E +u0069_0308_0301 24 0 0x1E2F +u004B_0301 24 0 0x1E30 +u006B_0301 24 0 0x1E31 +u004B_0323 24 0 0x1E32 +u006B_0323 24 0 0x1E33 +u004B_0331 24 0 0x1E34 +u006B_0331 24 0 0x1E35 +u004C_0323 24 0 0x1E36 +u006C_0323 24 0 0x1E37 +u004C_0323_0304 24 0 0x1E38 +u006C_0323_0304 24 0 0x1E39 +u004C_0331 24 0 0x1E3A +u006C_0331 24 0 0x1E3B +u004C_032D 24 0 0x1E3C +u006C_032D 24 0 0x1E3D +u004D_0301 24 0 0x1E3E +u006D_0301 24 0 0x1E3F +u004D_0307 24 0 0x1E40 +u006D_0307 24 0 0x1E41 +u004D_0323 24 0 0x1E42 +u006D_0323 24 0 0x1E43 +u004E_0307 24 0 0x1E44 +u006E_0307 24 0 0x1E45 +u004E_0323 24 0 0x1E46 +u006E_0323 24 0 0x1E47 +u004E_0331 24 0 0x1E48 +u006E_0331 24 0 0x1E49 +u004E_032D 24 0 0x1E4A +u006E_032D 24 0 0x1E4B +u004F_0303_0301 24 0 0x1E4C +u006F_0303_0301 24 0 0x1E4D +u004F_0303_0308 24 0 0x1E4E +u006F_0303_0308 24 0 0x1E4F +u004F_0304_0300 24 0 0x1E50 +u006F_0304_0300 24 0 0x1E51 +u004F_0304_0301 24 0 0x1E52 +u006F_0304_0301 24 0 0x1E53 +u0050_0301 24 0 0x1E54 +u0070_0301 24 0 0x1E55 +u0050_0307 24 0 0x1E56 +u0070_0307 24 0 0x1E57 +u0052_0307 24 0 0x1E58 +u0072_0307 24 0 0x1E59 +u0052_0323 24 0 0x1E5A +u0072_0323 24 0 0x1E5B +u0052_0323_0304 24 0 0x1E5C +u0072_0323_0304 24 0 0x1E5D +u0052_0331 24 0 0x1E5E +u0072_0331 24 0 0x1E5F +u0053_0307 24 0 0x1E60 +u0073_0307 24 0 0x1E61 +u0053_0323 24 0 0x1E62 +u0073_0323 24 0 0x1E63 +u0053_0301_0307 24 0 0x1E64 +u0073_0301_0307 24 0 0x1E65 +u0053_030C_0307 24 0 0x1E66 +u0073_030C_0307 24 0 0x1E67 +u0053_0323_0307 24 0 0x1E68 +u0073_0323_0307 24 0 0x1E69 +u0054_0307 24 0 0x1E6A +u0074_0307 24 0 0x1E6B +u0054_0323 24 0 0x1E6C +u0074_0323 24 0 0x1E6D +u0054_0331 24 0 0x1E6E +u0074_0331 24 0 0x1E6F +u0054_032D 24 0 0x1E70 +u0074_032D 24 0 0x1E71 +u0055_0324 24 0 0x1E72 +u0075_0324 24 0 0x1E73 +u0055_0330 24 0 0x1E74 +u0075_0330 24 0 0x1E75 +u0055_032D 24 0 0x1E76 +u0075_032D 24 0 0x1E77 +u0055_0303_0301 24 0 0x1E78 +u0075_0303_0301 24 0 0x1E79 +u0055_0304_0308 24 0 0x1E7A +u0075_0304_0308 24 0 0x1E7B +u0056_0303 24 0 0x1E7C +u0076_0303 24 0 0x1E7D +u0056_0323 24 0 0x1E7E +u0076_0323 24 0 0x1E7F +u0057_0300 24 0 0x1E80 +u0077_0300 24 0 0x1E81 +u0057_0301 24 0 0x1E82 +u0077_0301 24 0 0x1E83 +u0057_0308 24 0 0x1E84 +u0077_0308 24 0 0x1E85 +u0057_0307 24 0 0x1E86 +u0077_0307 24 0 0x1E87 +u0057_0323 24 0 0x1E88 +u0077_0323 24 0 0x1E89 +u0058_0307 24 0 0x1E8A +u0078_0307 24 0 0x1E8B +u0058_0308 24 0 0x1E8C +u0078_0308 24 0 0x1E8D +u0059_0307 24 0 0x1E8E +u0079_0307 24 0 0x1E8F +u005A_0302 24 0 0x1E90 +u007A_0302 24 0 0x1E91 +u005A_0323 24 0 0x1E92 +u007A_0323 24 0 0x1E93 +u005A_0331 24 0 0x1E94 +u007A_0331 24 0 0x1E95 +u0068_0331 24 0 0x1E96 +u0074_0308 24 0 0x1E97 +u0077_030A 24 0 0x1E98 +u0079_030A 24 0 0x1E99 +u017F_0307 24 0 0x1E9B +u0041_0323 24 0 0x1EA0 +u0061_0323 24 0 0x1EA1 +u0041_0309 24 0 0x1EA2 +u0061_0309 24 0 0x1EA3 +u0041_0302_0301 24 0 0x1EA4 +u0061_0302_0301 24 0 0x1EA5 +u0041_0302_0300 24 0 0x1EA6 +u0061_0302_0300 24 0 0x1EA7 +u0041_0302_0309 24 0 0x1EA8 +u0061_0302_0309 24 0 0x1EA9 +u0041_0302_0303 24 0 0x1EAA +u0061_0302_0303 24 0 0x1EAB +u0041_0323_0302 24 0 0x1EAC +u0061_0323_0302 24 0 0x1EAD +u0041_0306_0301 24 0 0x1EAE +u0061_0306_0301 24 0 0x1EAF +u0041_0306_0300 24 0 0x1EB0 +u0061_0306_0300 24 0 0x1EB1 +u0041_0306_0309 24 0 0x1EB2 +u0061_0306_0309 24 0 0x1EB3 +u0041_0306_0303 24 0 0x1EB4 +u0061_0306_0303 24 0 0x1EB5 +u0041_0323_0306 24 0 0x1EB6 +u0061_0323_0306 24 0 0x1EB7 +u0045_0323 24 0 0x1EB8 +u0065_0323 24 0 0x1EB9 +u0045_0309 24 0 0x1EBA +u0065_0309 24 0 0x1EBB +u0045_0303 24 0 0x1EBC +u0065_0303 24 0 0x1EBD +u0045_0302_0301 24 0 0x1EBE +u0065_0302_0301 24 0 0x1EBF +u0045_0302_0300 24 0 0x1EC0 +u0065_0302_0300 24 0 0x1EC1 +u0045_0302_0309 24 0 0x1EC2 +u0065_0302_0309 24 0 0x1EC3 +u0045_0302_0303 24 0 0x1EC4 +u0065_0302_0303 24 0 0x1EC5 +u0045_0323_0302 24 0 0x1EC6 +u0065_0323_0302 24 0 0x1EC7 +u0049_0309 24 0 0x1EC8 +u0069_0309 24 0 0x1EC9 +u0049_0323 24 0 0x1ECA +u0069_0323 24 0 0x1ECB +u004F_0323 24 0 0x1ECC +u006F_0323 24 0 0x1ECD +u004F_0309 24 0 0x1ECE +u006F_0309 24 0 0x1ECF +u004F_0302_0301 24 0 0x1ED0 +u006F_0302_0301 24 0 0x1ED1 +u004F_0302_0300 24 0 0x1ED2 +u006F_0302_0300 24 0 0x1ED3 +u004F_0302_0309 24 0 0x1ED4 +u006F_0302_0309 24 0 0x1ED5 +u004F_0302_0303 24 0 0x1ED6 +u006F_0302_0303 24 0 0x1ED7 +u004F_0323_0302 24 0 0x1ED8 +u006F_0323_0302 24 0 0x1ED9 +u004F_031B_0301 24 0 0x1EDA +u006F_031B_0301 24 0 0x1EDB +u004F_031B_0300 24 0 0x1EDC +u006F_031B_0300 24 0 0x1EDD +u004F_031B_0309 24 0 0x1EDE +u006F_031B_0309 24 0 0x1EDF +u004F_031B_0303 24 0 0x1EE0 +u006F_031B_0303 24 0 0x1EE1 +u004F_031B_0323 24 0 0x1EE2 +u006F_031B_0323 24 0 0x1EE3 +u0055_0323 24 0 0x1EE4 +u0075_0323 24 0 0x1EE5 +u0055_0309 24 0 0x1EE6 +u0075_0309 24 0 0x1EE7 +u0055_031B_0301 24 0 0x1EE8 +u0075_031B_0301 24 0 0x1EE9 +u0055_031B_0300 24 0 0x1EEA +u0075_031B_0300 24 0 0x1EEB +u0055_031B_0309 24 0 0x1EEC +u0075_031B_0309 24 0 0x1EED +u0055_031B_0303 24 0 0x1EEE +u0075_031B_0303 24 0 0x1EEF +u0055_031B_0323 24 0 0x1EF0 +u0075_031B_0323 24 0 0x1EF1 +u0059_0300 24 0 0x1EF2 +u0079_0300 24 0 0x1EF3 +u0059_0323 24 0 0x1EF4 +u0079_0323 24 0 0x1EF5 +u0059_0309 24 0 0x1EF6 +u0079_0309 24 0 0x1EF7 +u0059_0303 24 0 0x1EF8 +u0079_0303 24 0 0x1EF9 +u03B1_0313 24 0 0x1F00 +u03B1_0314 24 0 0x1F01 +u03B1_0313_0300 24 0 0x1F02 +u03B1_0314_0300 24 0 0x1F03 +u03B1_0313_0301 24 0 0x1F04 +u03B1_0314_0301 24 0 0x1F05 +u03B1_0313_0342 24 0 0x1F06 +u03B1_0314_0342 24 0 0x1F07 +u0391_0313 24 0 0x1F08 +u0391_0314 24 0 0x1F09 +u0391_0313_0300 24 0 0x1F0A +u0391_0314_0300 24 0 0x1F0B +u0391_0313_0301 24 0 0x1F0C +u0391_0314_0301 24 0 0x1F0D +u0391_0313_0342 24 0 0x1F0E +u0391_0314_0342 24 0 0x1F0F +u03B5_0313 24 0 0x1F10 +u03B5_0314 24 0 0x1F11 +u03B5_0313_0300 24 0 0x1F12 +u03B5_0314_0300 24 0 0x1F13 +u03B5_0313_0301 24 0 0x1F14 +u03B5_0314_0301 24 0 0x1F15 +u0395_0313 24 0 0x1F18 +u0395_0314 24 0 0x1F19 +u0395_0313_0300 24 0 0x1F1A +u0395_0314_0300 24 0 0x1F1B +u0395_0313_0301 24 0 0x1F1C +u0395_0314_0301 24 0 0x1F1D +u03B7_0313 24 0 0x1F20 +u03B7_0314 24 0 0x1F21 +u03B7_0313_0300 24 0 0x1F22 +u03B7_0314_0300 24 0 0x1F23 +u03B7_0313_0301 24 0 0x1F24 +u03B7_0314_0301 24 0 0x1F25 +u03B7_0313_0342 24 0 0x1F26 +u03B7_0314_0342 24 0 0x1F27 +u0397_0313 24 0 0x1F28 +u0397_0314 24 0 0x1F29 +u0397_0313_0300 24 0 0x1F2A +u0397_0314_0300 24 0 0x1F2B +u0397_0313_0301 24 0 0x1F2C +u0397_0314_0301 24 0 0x1F2D +u0397_0313_0342 24 0 0x1F2E +u0397_0314_0342 24 0 0x1F2F +u03B9_0313 24 0 0x1F30 +u03B9_0314 24 0 0x1F31 +u03B9_0313_0300 24 0 0x1F32 +u03B9_0314_0300 24 0 0x1F33 +u03B9_0313_0301 24 0 0x1F34 +u03B9_0314_0301 24 0 0x1F35 +u03B9_0313_0342 24 0 0x1F36 +u03B9_0314_0342 24 0 0x1F37 +u0399_0313 24 0 0x1F38 +u0399_0314 24 0 0x1F39 +u0399_0313_0300 24 0 0x1F3A +u0399_0314_0300 24 0 0x1F3B +u0399_0313_0301 24 0 0x1F3C +u0399_0314_0301 24 0 0x1F3D +u0399_0313_0342 24 0 0x1F3E +u0399_0314_0342 24 0 0x1F3F +u03BF_0313 24 0 0x1F40 +u03BF_0314 24 0 0x1F41 +u03BF_0313_0300 24 0 0x1F42 +u03BF_0314_0300 24 0 0x1F43 +u03BF_0313_0301 24 0 0x1F44 +u03BF_0314_0301 24 0 0x1F45 +u039F_0313 24 0 0x1F48 +u039F_0314 24 0 0x1F49 +u039F_0313_0300 24 0 0x1F4A +u039F_0314_0300 24 0 0x1F4B +u039F_0313_0301 24 0 0x1F4C +u039F_0314_0301 24 0 0x1F4D +u03C5_0313 24 0 0x1F50 +u03C5_0314 24 0 0x1F51 +u03C5_0313_0300 24 0 0x1F52 +u03C5_0314_0300 24 0 0x1F53 +u03C5_0313_0301 24 0 0x1F54 +u03C5_0314_0301 24 0 0x1F55 +u03C5_0313_0342 24 0 0x1F56 +u03C5_0314_0342 24 0 0x1F57 +u03A5_0314 24 0 0x1F59 +u03A5_0314_0300 24 0 0x1F5B +u03A5_0314_0301 24 0 0x1F5D +u03A5_0314_0342 24 0 0x1F5F +u03C9_0313 24 0 0x1F60 +u03C9_0314 24 0 0x1F61 +u03C9_0313_0300 24 0 0x1F62 +u03C9_0314_0300 24 0 0x1F63 +u03C9_0313_0301 24 0 0x1F64 +u03C9_0314_0301 24 0 0x1F65 +u03C9_0313_0342 24 0 0x1F66 +u03C9_0314_0342 24 0 0x1F67 +u03A9_0313 24 0 0x1F68 +u03A9_0314 24 0 0x1F69 +u03A9_0313_0300 24 0 0x1F6A +u03A9_0314_0300 24 0 0x1F6B +u03A9_0313_0301 24 0 0x1F6C +u03A9_0314_0301 24 0 0x1F6D +u03A9_0313_0342 24 0 0x1F6E +u03A9_0314_0342 24 0 0x1F6F +u03B1_0300 24 0 0x1F70 +u03B1_0301 24 0 0x1F71 +u03B5_0300 24 0 0x1F72 +u03B5_0301 24 0 0x1F73 +u03B7_0300 24 0 0x1F74 +u03B7_0301 24 0 0x1F75 +u03B9_0300 24 0 0x1F76 +u03B9_0301 24 0 0x1F77 +u03BF_0300 24 0 0x1F78 +u03BF_0301 24 0 0x1F79 +u03C5_0300 24 0 0x1F7A +u03C5_0301 24 0 0x1F7B +u03C9_0300 24 0 0x1F7C +u03C9_0301 24 0 0x1F7D +u03B1_0313_0345 24 0 0x1F80 +u03B1_0314_0345 24 0 0x1F81 +u03B1_0313_0300_0345 24 0 0x1F82 +u03B1_0314_0300_0345 24 0 0x1F83 +u03B1_0313_0301_0345 24 0 0x1F84 +u03B1_0314_0301_0345 24 0 0x1F85 +u03B1_0313_0342_0345 24 0 0x1F86 +u03B1_0314_0342_0345 24 0 0x1F87 +u0391_0313_0345 24 0 0x1F88 +u0391_0314_0345 24 0 0x1F89 +u0391_0313_0300_0345 24 0 0x1F8A +u0391_0314_0300_0345 24 0 0x1F8B +u0391_0313_0301_0345 24 0 0x1F8C +u0391_0314_0301_0345 24 0 0x1F8D +u0391_0313_0342_0345 24 0 0x1F8E +u0391_0314_0342_0345 24 0 0x1F8F +u03B7_0313_0345 24 0 0x1F90 +u03B7_0314_0345 24 0 0x1F91 +u03B7_0313_0300_0345 24 0 0x1F92 +u03B7_0314_0300_0345 24 0 0x1F93 +u03B7_0313_0301_0345 24 0 0x1F94 +u03B7_0314_0301_0345 24 0 0x1F95 +u03B7_0313_0342_0345 24 0 0x1F96 +u03B7_0314_0342_0345 24 0 0x1F97 +u0397_0313_0345 24 0 0x1F98 +u0397_0314_0345 24 0 0x1F99 +u0397_0313_0300_0345 24 0 0x1F9A +u0397_0314_0300_0345 24 0 0x1F9B +u0397_0313_0301_0345 24 0 0x1F9C +u0397_0314_0301_0345 24 0 0x1F9D +u0397_0313_0342_0345 24 0 0x1F9E +u0397_0314_0342_0345 24 0 0x1F9F +u03C9_0313_0345 24 0 0x1FA0 +u03C9_0314_0345 24 0 0x1FA1 +u03C9_0313_0300_0345 24 0 0x1FA2 +u03C9_0314_0300_0345 24 0 0x1FA3 +u03C9_0313_0301_0345 24 0 0x1FA4 +u03C9_0314_0301_0345 24 0 0x1FA5 +u03C9_0313_0342_0345 24 0 0x1FA6 +u03C9_0314_0342_0345 24 0 0x1FA7 +u03A9_0313_0345 24 0 0x1FA8 +u03A9_0314_0345 24 0 0x1FA9 +u03A9_0313_0300_0345 24 0 0x1FAA +u03A9_0314_0300_0345 24 0 0x1FAB +u03A9_0313_0301_0345 24 0 0x1FAC +u03A9_0314_0301_0345 24 0 0x1FAD +u03A9_0313_0342_0345 24 0 0x1FAE +u03A9_0314_0342_0345 24 0 0x1FAF +u03B1_0306 24 0 0x1FB0 +u03B1_0304 24 0 0x1FB1 +u03B1_0300_0345 24 0 0x1FB2 +u03B1_0345 24 0 0x1FB3 +u03B1_0301_0345 24 0 0x1FB4 +u03B1_0342 24 0 0x1FB6 +u03B1_0342_0345 24 0 0x1FB7 +u0391_0306 24 0 0x1FB8 +u0391_0304 24 0 0x1FB9 +u0391_0300 24 0 0x1FBA +u0391_0301 24 0 0x1FBB +u0391_0345 24 0 0x1FBC +u00A8_0342 24 0 0x1FC1 +u03B7_0300_0345 24 0 0x1FC2 +u03B7_0345 24 0 0x1FC3 +u03B7_0301_0345 24 0 0x1FC4 +u03B7_0342 24 0 0x1FC6 +u03B7_0342_0345 24 0 0x1FC7 +u0395_0300 24 0 0x1FC8 +u0395_0301 24 0 0x1FC9 +u0397_0300 24 0 0x1FCA +u0397_0301 24 0 0x1FCB +u0397_0345 24 0 0x1FCC +u1FBF_0300 24 0 0x1FCD +u1FBF_0301 24 0 0x1FCE +u1FBF_0342 24 0 0x1FCF +u03B9_0306 24 0 0x1FD0 +u03B9_0304 24 0 0x1FD1 +u03B9_0308_0300 24 0 0x1FD2 +u03B9_0308_0301 24 0 0x1FD3 +u03B9_0342 24 0 0x1FD6 +u03B9_0308_0342 24 0 0x1FD7 +u0399_0306 24 0 0x1FD8 +u0399_0304 24 0 0x1FD9 +u0399_0300 24 0 0x1FDA +u0399_0301 24 0 0x1FDB +u1FFE_0300 24 0 0x1FDD +u1FFE_0301 24 0 0x1FDE +u1FFE_0342 24 0 0x1FDF +u03C5_0306 24 0 0x1FE0 +u03C5_0304 24 0 0x1FE1 +u03C5_0308_0300 24 0 0x1FE2 +u03C5_0308_0301 24 0 0x1FE3 +u03C1_0313 24 0 0x1FE4 +u03C1_0314 24 0 0x1FE5 +u03C5_0342 24 0 0x1FE6 +u03C5_0308_0342 24 0 0x1FE7 +u03A5_0306 24 0 0x1FE8 +u03A5_0304 24 0 0x1FE9 +u03A5_0300 24 0 0x1FEA +u03A5_0301 24 0 0x1FEB +u03A1_0314 24 0 0x1FEC +u00A8_0300 24 0 0x1FED +u00A8_0301 24 0 0x1FEE +u03C9_0300_0345 24 0 0x1FF2 +u03C9_0345 24 0 0x1FF3 +u03C9_0301_0345 24 0 0x1FF4 +u03C9_0342 24 0 0x1FF6 +u03C9_0342_0345 24 0 0x1FF7 +u039F_0300 24 0 0x1FF8 +u039F_0301 24 0 0x1FF9 +u03A9_0300 24 0 0x1FFA +u03A9_0301 24 0 0x1FFB +u03A9_0345 24 0 0x1FFC +u0041_030A 24 0 0x212B +u2190_0338 24 0 0x219A +u2192_0338 24 0 0x219B +u2194_0338 24 0 0x21AE +u21D0_0338 24 0 0x21CD +u21D4_0338 24 0 0x21CE +u21D2_0338 24 0 0x21CF +u2203_0338 24 0 0x2204 +u2208_0338 24 0 0x2209 +u220B_0338 24 0 0x220C +u2223_0338 24 0 0x2224 +u2225_0338 24 0 0x2226 +u223C_0338 24 0 0x2241 +u2243_0338 24 0 0x2244 +u2245_0338 24 0 0x2247 +u2248_0338 24 0 0x2249 +u003D_0338 24 0 0x2260 +u2261_0338 24 0 0x2262 +u224D_0338 24 0 0x226D +u003C_0338 24 0 0x226E +u003E_0338 24 0 0x226F +u2264_0338 24 0 0x2270 +u2265_0338 24 0 0x2271 +u2272_0338 24 0 0x2274 +u2273_0338 24 0 0x2275 +u2276_0338 24 0 0x2278 +u2277_0338 24 0 0x2279 +u227A_0338 24 0 0x2280 +u227B_0338 24 0 0x2281 +u2282_0338 24 0 0x2284 +u2283_0338 24 0 0x2285 +u2286_0338 24 0 0x2288 +u2287_0338 24 0 0x2289 +u22A2_0338 24 0 0x22AC +u22A8_0338 24 0 0x22AD +u22A9_0338 24 0 0x22AE +u22AB_0338 24 0 0x22AF +u227C_0338 24 0 0x22E0 +u227D_0338 24 0 0x22E1 +u2291_0338 24 0 0x22E2 +u2292_0338 24 0 0x22E3 +u22B2_0338 24 0 0x22EA +u22B3_0338 24 0 0x22EB +u22B4_0338 24 0 0x22EC +u22B5_0338 24 0 0x22ED +u2ADD_0338 24 0 0x2ADC +u304B_3099 24 0 0x304C +u304D_3099 24 0 0x304E +u304F_3099 24 0 0x3050 +u3051_3099 24 0 0x3052 +u3053_3099 24 0 0x3054 +u3055_3099 24 0 0x3056 +u3057_3099 24 0 0x3058 +u3059_3099 24 0 0x305A +u305B_3099 24 0 0x305C +u305D_3099 24 0 0x305E +u305F_3099 24 0 0x3060 +u3061_3099 24 0 0x3062 +u3064_3099 24 0 0x3065 +u3066_3099 24 0 0x3067 +u3068_3099 24 0 0x3069 +u306F_3099 24 0 0x3070 +u306F_309A 24 0 0x3071 +u3072_3099 24 0 0x3073 +u3072_309A 24 0 0x3074 +u3075_3099 24 0 0x3076 +u3075_309A 24 0 0x3077 +u3078_3099 24 0 0x3079 +u3078_309A 24 0 0x307A +u307B_3099 24 0 0x307C +u307B_309A 24 0 0x307D +u3046_3099 24 0 0x3094 +u309D_3099 24 0 0x309E +u30AB_3099 24 0 0x30AC +u30AD_3099 24 0 0x30AE +u30AF_3099 24 0 0x30B0 +u30B1_3099 24 0 0x30B2 +u30B3_3099 24 0 0x30B4 +u30B5_3099 24 0 0x30B6 +u30B7_3099 24 0 0x30B8 +u30B9_3099 24 0 0x30BA +u30BB_3099 24 0 0x30BC +u30BD_3099 24 0 0x30BE +u30BF_3099 24 0 0x30C0 +u30C1_3099 24 0 0x30C2 +u30C4_3099 24 0 0x30C5 +u30C6_3099 24 0 0x30C7 +u30C8_3099 24 0 0x30C9 +u30CF_3099 24 0 0x30D0 +u30CF_309A 24 0 0x30D1 +u30D2_3099 24 0 0x30D3 +u30D2_309A 24 0 0x30D4 +u30D5_3099 24 0 0x30D6 +u30D5_309A 24 0 0x30D7 +u30D8_3099 24 0 0x30D9 +u30D8_309A 24 0 0x30DA +u30DB_3099 24 0 0x30DC +u30DB_309A 24 0 0x30DD +u30A6_3099 24 0 0x30F4 +u30EF_3099 24 0 0x30F7 +u30F0_3099 24 0 0x30F8 +u30F1_3099 24 0 0x30F9 +u30F2_3099 24 0 0x30FA +u30FD_3099 24 0 0x30FE +u05D9_05B4 24 0 0xFB1D +u05F2_05B7 24 0 0xFB1F +u05E9_05C1 24 0 0xFB2A +u05E9_05C2 24 0 0xFB2B +u05E9_05BC_05C1 24 0 0xFB2C +u05E9_05BC_05C2 24 0 0xFB2D +u05D0_05B7 24 0 0xFB2E +u05D0_05B8 24 0 0xFB2F +u05D0_05BC 24 0 0xFB30 +u05D1_05BC 24 0 0xFB31 +u05D2_05BC 24 0 0xFB32 +u05D3_05BC 24 0 0xFB33 +u05D4_05BC 24 0 0xFB34 +u05D5_05BC 24 0 0xFB35 +u05D6_05BC 24 0 0xFB36 +u05D8_05BC 24 0 0xFB38 +u05D9_05BC 24 0 0xFB39 +u05DA_05BC 24 0 0xFB3A +u05DB_05BC 24 0 0xFB3B +u05DC_05BC 24 0 0xFB3C +u05DE_05BC 24 0 0xFB3E +u05E0_05BC 24 0 0xFB40 +u05E1_05BC 24 0 0xFB41 +u05E3_05BC 24 0 0xFB43 +u05E4_05BC 24 0 0xFB44 +u05E6_05BC 24 0 0xFB46 +u05E7_05BC 24 0 0xFB47 +u05E8_05BC 24 0 0xFB48 +u05E9_05BC 24 0 0xFB49 +u05EA_05BC 24 0 0xFB4A +u05D5_05B9 24 0 0xFB4B +u05D1_05BF 24 0 0xFB4C +u05DB_05BF 24 0 0xFB4D +u05E4_05BF 24 0 0xFB4E +u1D157_1D165 24 0 0x1D15E +u1D158_1D165 24 0 0x1D15F +u1D158_1D165_1D16E 24 0 0x1D160 +u1D158_1D165_1D16F 24 0 0x1D161 +u1D158_1D165_1D170 24 0 0x1D162 +u1D158_1D165_1D171 24 0 0x1D163 +u1D158_1D165_1D172 24 0 0x1D164 +u1D1B9_1D165 24 0 0x1D1BB +u1D1BA_1D165 24 0 0x1D1BC +u1D1B9_1D165_1D16E 24 0 0x1D1BD +u1D1BA_1D165_1D16E 24 0 0x1D1BE +u1D1B9_1D165_1D16F 24 0 0x1D1BF +u1D1BA_1D165_1D16F 24 0 0x1D1C0 diff --git a/contrib/groff/font/devlatin1/R.proto b/contrib/groff/font/devlatin1/R.proto index 92e76056f8..ff33356377 100644 --- a/contrib/groff/font/devlatin1/R.proto +++ b/contrib/groff/font/devlatin1/R.proto @@ -231,7 +231,7 @@ Of 24 0 0252 Fo 24 0 0253 no 24 0 0254 tno " -shc 24 0 0255 +--- 24 0 0255 rg 24 0 0256 a- 24 0 0257 de 24 0 0260 diff --git a/contrib/groff/font/devlj4/generate/Makefile b/contrib/groff/font/devlj4/generate/Makefile index 88a8cba7dd..7c6d7f436e 100644 --- a/contrib/groff/font/devlj4/generate/Makefile +++ b/contrib/groff/font/devlj4/generate/Makefile @@ -1,21 +1,20 @@ -# Copyright (C) 1994, 2002, 2003, 2004 Free Software Foundation, Inc. +# Copyright (C) 1994, 2002, 2003, 2004, 2009 Free Software Foundation, Inc. # Written by James Clark (jjc@jclark.com) # # This file is part of groff. # # groff is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free -# Software Foundation; either version 2, or (at your option) any later -# version. +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. # # groff is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # for more details. # -# You should have received a copy of the GNU General Public License along -# with groff; see the file COPYING. If not, write to the Free Software -# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . # Directory containing Autofont TFM files. # The TFM files used are available for ftp as diff --git a/contrib/groff/font/devps/AB b/contrib/groff/font/devps/AB index 464dd52040..ef1477415c 100644 --- a/contrib/groff/font/devps/AB +++ b/contrib/groff/font/devps/AB @@ -1,8 +1,23 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName ITC Avant Garde Gothic Demi +# Version 001.007 +# FamilyName ITC Avant Garde Gothic +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1991 Adobe Systems Incorporated. All Rights Reserved.ITC Avant Garde Gothic is a registered trademark of International Typeface Corporation. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1991 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Mar 4 13:46:34 1991 +# Comment UniqueID 34370 +# Comment VMusage 24954 31846 + name AB internalname AvantGarde-Demi spacewidth 280 encoding text.enc ligatures fi fl 0 + kernpairs A y -50 A w -65 @@ -245,6 +260,7 @@ y e -20 y , -100 y c -35 y a -30 + charset ha 600,740 2 0 asciicircum ti 600,347 0 1 asciitilde diff --git a/contrib/groff/font/devps/ABI b/contrib/groff/font/devps/ABI index 22b3126be4..56cdee570e 100644 --- a/contrib/groff/font/devps/ABI +++ b/contrib/groff/font/devps/ABI @@ -1,9 +1,24 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName ITC Avant Garde Gothic Demi Oblique +# Version 001.007 +# FamilyName ITC Avant Garde Gothic +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1991 Adobe Systems Incorporated. All Rights Reserved.ITC Avant Garde Gothic is a registered trademark of International Typeface Corporation. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1991 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Mar 4 13:49:44 1991 +# Comment UniqueID 34373 +# Comment VMusage 6550 39938 + name ABI internalname AvantGarde-DemiOblique slant 10.5 spacewidth 280 encoding text.enc ligatures fi fl 0 + kernpairs A y -50 A w -65 @@ -246,6 +261,7 @@ y e -20 y , -100 y c -35 y a -30 + charset ha 600,740,0,46,-92,46 2 0 asciicircum ti 600,347,0,29,-64,29 0 1 asciitilde diff --git a/contrib/groff/font/devps/AI b/contrib/groff/font/devps/AI index 4758916983..45afe77ca5 100644 --- a/contrib/groff/font/devps/AI +++ b/contrib/groff/font/devps/AI @@ -1,9 +1,24 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName ITC Avant Garde Gothic Book Oblique +# Version 001.006 +# FamilyName ITC Avant Garde Gothic +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1991 Adobe Systems Incorporated. All Rights Reserved.ITC Avant Garde Gothic is a registered trademark of International Typeface Corporation. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1991 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Mar 4 13:41:11 1991 +# Comment UniqueID 34367 +# Comment VMusage 6555 39267 + name AI internalname AvantGarde-BookOblique slant 10.5 spacewidth 277 encoding text.enc ligatures fi fl 0 + kernpairs A y -62 A w -65 @@ -246,6 +261,7 @@ y o -30 y e -20 y , -110 y a -30 + charset ha 606,740,0,54,-60,54 2 0 asciicircum ti 606,319,0,28,-64,28 0 1 asciitilde diff --git a/contrib/groff/font/devps/AR b/contrib/groff/font/devps/AR index f5fb6c3c67..c96b1f1333 100644 --- a/contrib/groff/font/devps/AR +++ b/contrib/groff/font/devps/AR @@ -1,8 +1,23 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName ITC Avant Garde Gothic Book +# Version 001.006 +# FamilyName ITC Avant Garde Gothic +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1991 Adobe Systems Incorporated. All Rights Reserved.ITC Avant Garde Gothic is a registered trademark of International Typeface Corporation. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1991 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Mar 4 13:37:31 1991 +# Comment UniqueID 34364 +# Comment VMusage 24225 31117 + name AR internalname AvantGarde-Book spacewidth 277 encoding text.enc ligatures fi fl 0 + kernpairs A y -62 A w -65 @@ -245,6 +260,7 @@ y o -30 y e -20 y , -110 y a -30 + charset ha 606,740 2 0 asciicircum ti 606,319 0 1 asciitilde diff --git a/contrib/groff/font/devps/BMB b/contrib/groff/font/devps/BMB index edb18a87de..6fec85f89f 100644 --- a/contrib/groff/font/devps/BMB +++ b/contrib/groff/font/devps/BMB @@ -1,8 +1,23 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName ITC Bookman Demi +# Version 001.004 +# FamilyName ITC Bookman +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1992 Adobe Systems Incorporated. All Rights Reserved.ITC Bookman is a registered trademark of International Typeface Corporation. +# Comment Copyright (c) 1985, 1987, 1989, 1992 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Tue Jan 21 16:13:29 1992 +# Comment UniqueID 37831 +# Comment VMusage 31983 38875 + name BMB internalname Bookman-Demi spacewidth 340 encoding text.enc ligatures fi fl 0 + kernpairs A y -1 A w -9 @@ -99,6 +114,7 @@ r e -10 r d -10 r , -101 r c -9 + charset ha 600,681 2 0 asciicircum ti 600,368 0 1 asciitilde diff --git a/contrib/groff/font/devps/BMBI b/contrib/groff/font/devps/BMBI index b794a71de2..5155377c77 100644 --- a/contrib/groff/font/devps/BMBI +++ b/contrib/groff/font/devps/BMBI @@ -1,9 +1,24 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName ITC Bookman Demi Italic +# Version 001.004 +# FamilyName ITC Bookman +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1992 Adobe Systems Incorporated. All Rights Reserved.ITC Bookman is a registered trademark of International Typeface Corporation. +# Comment Copyright (c) 1985, 1987, 1989, 1992 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Tue Jan 21 16:12:43 1992 +# Comment UniqueID 37832 +# Comment VMusage 32139 39031 + name BMBI internalname Bookman-DemiItalic slant 10 spacewidth 340 encoding text.enc ligatures fi fl 0 + kernpairs A y 20 A w 20 @@ -102,6 +117,7 @@ r e -6 r d -3 r , -113 r c -5 + charset ha 620,681,0,24,-42,24 2 0 asciicircum ti 620,368,0,35,-51,35 0 1 asciitilde diff --git a/contrib/groff/font/devps/BMI b/contrib/groff/font/devps/BMI index 7ed66f4377..30f0eada1f 100644 --- a/contrib/groff/font/devps/BMI +++ b/contrib/groff/font/devps/BMI @@ -1,9 +1,24 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName ITC Bookman Light Italic +# Version 001.004 +# FamilyName ITC Bookman +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1992 Adobe Systems Incorporated. All Rights Reserved.ITC Bookman is a registered trademark of International Typeface Corporation. +# Comment Copyright (c) 1985, 1987, 1989, 1992 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Tue Jan 21 16:12:06 1992 +# Comment UniqueID 37830 +# Comment VMusage 33139 40031 + name BMI internalname Bookman-LightItalic slant 10 spacewidth 300 encoding text.enc ligatures fi fl 0 + kernpairs A Y -62 A W -73 @@ -95,6 +110,7 @@ r e -15 r d -9 r , -143 r c -8 + charset ha 600,681,0,49,-47,49 2 0 asciicircum ti 600,386,0,45,-41,45 0 1 asciitilde diff --git a/contrib/groff/font/devps/BMR b/contrib/groff/font/devps/BMR index bef802aeb6..7613dcd49b 100644 --- a/contrib/groff/font/devps/BMR +++ b/contrib/groff/font/devps/BMR @@ -1,8 +1,23 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName ITC Bookman Light +# Version 001.004 +# FamilyName ITC Bookman +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1992 Adobe Systems Incorporated. All Rights Reserved.ITC Bookman is a registered trademark of International Typeface Corporation. +# Comment Copyright (c) 1985, 1987, 1989, 1992 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Tue Jan 21 16:15:53 1992 +# Comment UniqueID 37833 +# Comment VMusage 32321 39213 + name BMR internalname Bookman-Light spacewidth 320 encoding text.enc ligatures fi fl 0 + kernpairs A y 32 A w 4 @@ -91,6 +106,7 @@ r e 7 r d 7 r , -58 r c 7 + charset ha 600,681 2 0 asciicircum ti 600,352 0 1 asciitilde diff --git a/contrib/groff/font/devps/CB b/contrib/groff/font/devps/CB index 31f19b7356..dd761c88df 100644 --- a/contrib/groff/font/devps/CB +++ b/contrib/groff/font/devps/CB @@ -1,281 +1,265 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Courier Bold +# Version 004.000 +# FamilyName Courier +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1989, 1990, 1991, 1993, 1996, 1997, 1998 Adobe Systems Incorporated. All Rights Reserved. +# Comment Copyright (c) 1989, 1990, 1991, 1993, 1996, 1997, 1998 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Wed Aug 26 16:51:38 1998 +# Comment UniqueID 44053 +# Comment VMusage 32181 39117 + name CB internalname Courier-Bold spacewidth 600 encoding text.enc + charset -ha 600,616 2 0 asciicircum -ti 600,356 0 1 asciitilde -vS 600,790,22 2 2 Scaron -vZ 600,790 2 3 Zcaron -vs 600,667,17 2 4 scaron -vz 600,667 2 5 zcaron -:Y 600,748 2 6 Ydieresis -tm 600,562,0,149,9 2 7 trademark -aq 600,562 2 8 quotesingle +ha 600,750 2 0 asciicircum +ti 600,311 0 1 asciitilde +vS 600,811,13 2 2 Scaron +vZ 600,811 2 3 Zcaron +vs 600,679,12 2 4 scaron +vz 600,679 2 5 zcaron +:Y 600,789 2 6 Ydieresis +tm 600,678 2 7 trademark +aq 600,572 2 8 quotesingle +Eu 600,612,12 2 9 Euro space 600 0 32 space -! 600,572,15 2 33 exclam -" 600,562 2 34 quotedbl +! 600,572,12 2 33 exclam +" 600,572 2 34 quotedbl dq " -# 600,651,45 2 35 numbersign +# 600,649,52 2 35 numbersign sh " -$ 600,666,126 2 36 dollar +$ 600,646,124 2 36 dollar Do " -% 600,616,15 2 37 percent -& 600,543,15 0 38 ampersand -' 600,562 2 39 quoteright +% 600,617,33 2 37 percent +& 600,539,12 0 38 ampersand +' 600,572 2 39 quoteright cq " -( 600,616,102 2 40 parenleft -) 600,616,102 2 41 parenright -* 600,601 2 42 asterisk -+ 600,478 0 43 plus -, 600,174,111 0 44 comma -- 600,313 0 45 hyphen +( 600,643,86 2 40 parenleft +) 600,643,86 2 41 parenright +* 600,570 2 42 asterisk ++ 600,438 0 43 plus +, 600,163,100 0 44 comma +- 600,282 0 45 hyphen hy " -. 600,171,15 0 46 period -/ 600,626,77 2 47 slash +. 600,153,12 0 46 period +/ 600,696,133 2 47 slash sl " -0 600,616,15 2 48 zero -1 600,616 2 49 one -2 600,616 2 50 two -3 600,616,15 2 51 three -4 600,616 2 52 four -5 600,601,15 2 53 five -6 600,616,15 2 54 six +0 600,612,12 2 48 zero +1 600,615 2 49 one +2 600,613 2 50 two +3 600,612,12 2 51 three +4 600,613 2 52 four +5 600,601,12 2 53 five +6 600,612,12 2 54 six 7 600,601 2 55 seven -8 600,616,15 2 56 eight -9 600,616,15 2 57 nine -: 600,425,15 0 58 colon -; 600,425,111 0 59 semicolon -< 600,501 0 60 less -= 600,398 0 61 equal -> 600,501 0 62 greater -? 600,580,14 2 63 question -@ 600,616,15 2 64 at +8 600,613,11 2 56 eight +9 600,612,14 2 57 nine +: 600,403,12 0 58 colon +; 600,403,100 0 59 semicolon +< 600,446,8 0 60 less += 600,339 0 61 equal +> 600,446,8 0 62 greater +? 600,582,13 2 63 question +@ 600,579,18 2 64 at at " -A 600,562,0,9,9 2 65 A -B 600,562 2 66 B -C 600,580,18 2 67 C -D 600,562 2 68 D -E 600,562 2 69 E -F 600,562 2 70 F -G 600,580,18 2 71 G -H 600,562 2 72 H -I 600,562 2 73 I -J 600,562,18,1 2 74 J -K 600,562 2 75 K -L 600,562 2 76 L -M 600,562,0,2,2 2 77 M -N 600,562,12,10 2 78 N -O 600,580,18 2 79 O -P 600,562 2 80 P -Q 600,580,138 2 81 Q -R 600,562 2 82 R -S 600,582,22 2 83 S -T 600,562 2 84 T -U 600,562,18 2 85 U -V 600,562,0,13,13 2 86 V -W 600,562,0,18,18 2 87 W -X 600,562 2 88 X -Y 600,562 2 89 Y -Z 600,562 2 90 Z -[ 600,616,102 2 91 bracketleft +A 600,572 2 65 A +B 600,572 2 66 B +C 600,583,12 2 67 C +D 600,572 2 68 D +E 600,572 2 69 E +F 600,572 2 70 F +G 600,583,12 2 71 G +H 600,572 2 72 H +I 600,572 2 73 I +J 600,572,12 2 74 J +K 600,572 2 75 K +L 600,572 2 76 L +M 600,572,0,12 2 77 M +N 600,572,0,5 2 78 N +O 600,583,12 2 79 O +P 600,572 2 80 P +Q 600,584,143 2 81 Q +R 600,572 2 82 R +S 600,583,13 2 83 S +T 600,572 2 84 T +U 600,572,12 2 85 U +V 600,572,0,1,1 2 86 V +W 600,572,0,6,2 2 87 W +X 600,572 2 88 X +Y 600,572 2 89 Y +Z 600,572 2 90 Z +[ 600,643,86 2 91 bracketleft lB " -\ 600,626,77 2 92 backslash +\ 600,695,133 2 92 backslash rs " -] 600,616,102 2 93 bracketright +] 600,643,86 2 93 bracketright rB " -a^ 600,657 2 94 circumflex +a^ 600,679 2 94 circumflex ^ " -_ 600,0,125 0 95 underscore -` 600,562 2 96 quoteleft +_ 600,0,249 1 95 underscore +` 600,572 2 96 quoteleft oq " -a 600,454,15 0 97 a -b 600,626,15 2 98 b -c 600,459,15 0 99 c -d 600,626,15 2 100 d -e 600,454,15 0 101 e -f 600,626 2 102 f -g 600,454,146 1 103 g -h 600,626 2 104 h -i 600,658 2 105 i -j 600,658,146 3 106 j -k 600,626 2 107 k -l 600,626 2 108 l -m 600,454,0,26,22 0 109 m -n 600,454 0 110 n -o 600,454,15 0 111 o -p 600,454,142,0,1 1 112 p -q 600,454,142 1 113 q -r 600,454 0 114 r -s 600,459,17 0 115 s -t 600,562,15 2 116 t -u 600,439,15,0,1 0 117 u -v 600,439,0,1,1 0 118 v -w 600,439,0,18,18 0 119 w -x 600,439 0 120 x -y 600,439,142,1,4 1 121 y -z 600,439 0 122 z -lC 600,616,102 2 123 braceleft +a 600,448,12 0 97 a +b 600,621,12 2 98 b +c 600,448,12 0 99 c +d 600,621,12 2 100 d +e 600,447,12 0 101 e +f 600,621 2 102 f +g 600,447,184 1 103 g +h 600,621 2 104 h +i 600,642 2 105 i +j 600,641,184 3 106 j +k 600,621 2 107 k +l 600,621 2 108 l +m 600,447,0,15,15 0 109 m +n 600,447 0 110 n +o 600,448,12 0 111 o +p 600,447,183 1 112 p +q 600,447,183 1 113 q +r 600,448 0 114 r +s 600,448,12 0 115 s +t 600,567,12 2 116 t +u 600,434,12 0 117 u +v 600,434 0 118 v +w 600,434,0,7,6 0 119 w +x 600,434 0 120 x +y 600,434,183 1 121 y +z 600,434 0 122 z +lC 600,764,228 3 123 braceleft { " -ba 600,750,250 3 124 bar +ba 600,750,249 3 124 bar | " -rC 600,616,102 2 125 braceright +rC 600,764,228 3 125 braceright } " -a~ 600,636 2 126 tilde +a~ 600,644 2 126 tilde ~ " -bq 600,143,142 1 128 quotesinglbase -Fo 600,446 0 129 guillemotleft -Fc 600,446 0 130 guillemotright -bu 600,430 0 131 bullet -Fn 600,616,131,0,30 2 132 florin -f/ 600,661,60 2 133 fraction -%0 600,616,15,113,113 2 134 perthousand -dg 600,580,70 2 135 dagger -dd 600,580,70 2 136 daggerdbl -en 600,313 0 137 endash -em 600,313,0,10,10 0 138 emdash -fi 600,626 2 140 fi -fl 600,626 2 141 fl -.i 600,439 0 144 dotlessi -ga 600,661 2 146 grave -a" 600,661 2 147 hungarumlaut -a. 600,625 2 148 dotaccent -ab 600,631 2 149 breve -ah 600,667 2 150 caron -ao 600,678 2 151 ring -ho 600,0,199 1 152 ogonek -lq 600,562 2 153 quotedblleft -rq 600,562 2 154 quotedblright -oe 600,454,15,11,18 0 155 oe -/l 600,626 2 156 lslash -Bq 600,143,142 1 157 quotedblbase -OE 600,562,0,0,25 2 158 OE -/L 600,562 2 159 Lslash -r! 600,449,146 1 161 exclamdown -ct 600,614,49 2 162 cent -Po 600,611,28 2 163 sterling -Cs 600,517 0 164 currency -Ye 600,562 2 165 yen -bb 600,675,175 3 166 brokenbar -sc 600,580,70 2 167 section -ad 600,625 2 168 dieresis -co 600,580,18 2 169 copyright -Of 600,580 2 170 ordfeminine -fo 600,446 0 171 guilsinglleft -tno 600,413 0 172 logicalnot -\- 600,313 0 173 minus -rg 600,580,18 2 174 registered -a- 600,585 2 175 macron -de 600,616 2 176 degree -t+- 600,515 0 177 plusminus -S2 600,616 2 178 twosuperior -S3 600,616 2 179 threesuperior -aa 600,661 2 180 acute -mc 600,439,142,0,1 1 181 mu -ps 600,580,70 2 182 paragraph -pc 600,351 0 183 periodcentered -ac 600,0,206 1 184 cedilla -S1 600,616 2 185 onesuperior -Om 600,580 2 186 ordmasculine -fc 600,446 0 187 guilsinglright -14 600,661,60,56,56 2 188 onequarter -12 600,661,60,48,47 2 189 onehalf -34 600,661,60,48,47 2 190 threequarters -r? 600,449,146 1 191 questiondown -`A 600,784,0,9,9 2 192 Agrave -'A 600,784,0,9,9 2 193 Aacute -^A 600,780,0,9,9 2 194 Acircumflex -~A 600,759,0,9,9 2 195 Atilde -:A 600,748,0,9,9 2 196 Adieresis -oA 600,801,0,9,9 2 197 Aring -AE 600,562,0,2,29 2 198 AE -,C 600,580,206 3 199 Ccedilla -`E 600,784 2 200 Egrave -'E 600,784 2 201 Eacute -^E 600,780 2 202 Ecircumflex -:E 600,748 2 203 Edieresis -`I 600,784 2 204 Igrave -'I 600,784 2 205 Iacute -^I 600,780 2 206 Icircumflex -:I 600,748 2 207 Idieresis --D 600,562 2 208 Eth -~N 600,759,12,10 2 209 Ntilde -`O 600,784,18 2 210 Ograve -'O 600,784,18 2 211 Oacute -^O 600,780,18 2 212 Ocircumflex -~O 600,759,18 2 213 Otilde -:O 600,748,18 2 214 Odieresis -tmu 600,478 0 215 multiply -/O 600,584,22 2 216 Oslash -`U 600,784,18 2 217 Ugrave -'U 600,784,18 2 218 Uacute -^U 600,780,18 2 219 Ucircumflex -:U 600,748,18 2 220 Udieresis -'Y 600,784 2 221 Yacute -TP 600,562 2 222 Thorn -ss 600,626,15 2 223 germandbls -`a 600,661,15 2 224 agrave -'a 600,661,15 2 225 aacute -^a 600,657,15 2 226 acircumflex -~a 600,636,15 2 227 atilde -:a 600,625,15 2 228 adieresis -oa 600,678,15 2 229 aring -ae 600,454,15,1,4 0 230 ae -,c 600,459,206 1 231 ccedilla -`e 600,661,15 2 232 egrave -'e 600,661,15 2 233 eacute -^e 600,657,15 2 234 ecircumflex -:e 600,625,15 2 235 edieresis -`i 600,661 2 236 igrave -'i 600,661 2 237 iacute -^i 600,657 2 238 icircumflex -:i 600,625 2 239 idieresis -Sd 600,626,27 2 240 eth -~n 600,636 2 241 ntilde -`o 600,661,15 2 242 ograve -'o 600,661,15 2 243 oacute -^o 600,657,15 2 244 ocircumflex -~o 600,636,15 2 245 otilde -:o 600,625,15 2 246 odieresis -tdi 600,500 0 247 divide -/o 600,463,24 0 248 oslash -`u 600,661,15,0,1 2 249 ugrave -'u 600,661,15,0,1 2 250 uacute -^u 600,657,15,0,1 2 251 ucircumflex -:u 600,625,15,0,1 2 252 udieresis -'y 600,661,142,1,4 3 253 yacute -Tp 600,626,142,0,14 3 254 thorn -:y 600,625,142,1,4 3 255 ydieresis -IJ 600,562,18,22,8 2 256 IJ ---- 600,447 0 257 up ---- 600,320 0 258 dectab -u0047_030C 600,790,18 2 259 Gcaron ---- 600,562 2 260 stop ---- 600,562 2 261 tab -u2026 600,116,15 0 262 ellipsis ---- 600,333 0 263 largebullet -u0073_0327 600,459,206 1 264 scedilla ---- 600,562 2 265 return -ij 600,658,146 3 266 ij ---- 600,562,0,45,45 2 267 LL ---- 600,562 2 268 square -da 600,608,15 2 269 arrowdown -<- 600,455,0,34,24 0 270 arrowleft -<> 600,455,0,24,24 0 271 arrowboth ---- 600,599 2 272 graybox --> 600,455,0,24,34 0 273 arrowright -u00AF 600,629 2 274 overscore ---- 600,626,0,0,12 2 275 ll -u0067_030C 600,667,146 3 276 gcaron -u20A4 600,611,28 2 277 lira ---- 600,580 2 278 center -u0053_0327 600,582,206 3 279 Scedilla ---- 600,601,146 3 280 format -ua 600,626 2 281 arrowup ---- 600,572,15 2 282 notegraphic -u211E 600,562,15 2 283 prescription ---- 600,372 0 284 indent ---- 600,439,15 0 285 down ---- 600,371 0 286 left -u0049_0307 600,748 2 287 Idot ---- 600,487,15 0 288 merge +bq 600,163,100 0 128 quotesinglbase +Fo 600,423 0 129 guillemotleft +Fc 600,423 0 130 guillemotright +bu 600,482 0 131 bullet +Fn 600,618,119,0,18 2 132 florin +f/ 600,634,85 2 133 fraction +%0 600,617,33,97,88 2 134 perthousand +dg 600,572,44 2 135 dagger +dd 600,572,42 2 136 daggerdbl +en 600,282 0 137 endash +em 600,282 0 138 emdash +fi 600,642 2 140 fi +fl 600,621 2 141 fl +.i 600,434 0 144 dotlessi +ga 600,678 2 146 grave +a" 600,710 2 147 hungarumlaut +a. 600,641 2 148 dotaccent +ab 600,657 2 149 breve +ah 600,679 2 150 caron +ao 600,717 2 151 ring +ho 600,22,177 0 152 ogonek +lq 600,572 2 153 quotedblleft +rq 600,572 2 154 quotedblright +oe 600,446,12,6 0 155 oe +/l 600,621 2 156 lslash +Bq 600,163,101 0 157 quotedblbase +OE 600,572,0,8 2 158 OE +/L 600,572 2 159 Lslash +r! 600,447,136 0 161 exclamdown +ct 600,605,52 2 162 cent +Po 600,612,27 2 163 sterling +Cs 600,605 2 164 currency +Ye 600,601 2 165 yen +bb 600,724,224 3 166 brokenbar +sc 600,584,63 2 167 section +ad 600,640 2 168 dieresis +co 600,744 2 169 copyright +Of 600,612 2 170 ordfeminine +fo 600,423 0 171 guilsinglleft +tno 600,358 0 172 logicalnot +\- 600,266 0 173 minus +rg 600,744 2 174 registered +a- 600,591 2 175 macron +de 600,612 2 176 degree +t+- 600,438,127 0 177 plusminus +S2 600,607 2 178 twosuperior +S3 600,607 2 179 threesuperior +aa 600,678 2 180 acute +mc 600,434,167 0 181 mu +ps 600,745,154 2 182 paragraph +pc 600,386 0 183 periodcentered +ac 600,0,207 1 184 cedilla +S1 600,607 2 185 onesuperior +Om 600,612 2 186 ordmasculine +fc 600,423 0 187 guilsinglright +14 600,625,91,45 2 188 onequarter +12 600,625,91,33,25 2 189 onehalf +34 600,626,91,24,2 2 190 threequarters +r? 600,446,149 0 191 questiondown +`A 600,811 2 192 Agrave +'A 600,811 2 193 Aacute +^A 600,811 2 194 Acircumflex +~A 600,777 2 195 Atilde +:A 600,789 2 196 Adieresis +oA 600,800 2 197 Aring +AE 600,572 2 198 AE +,C 600,583,204 3 199 Ccedilla +`E 600,811 2 200 Egrave +'E 600,811 2 201 Eacute +^E 600,811 2 202 Ecircumflex +:E 600,789 2 203 Edieresis +`I 600,811 2 204 Igrave +'I 600,811 2 205 Iacute +^I 600,811 2 206 Icircumflex +:I 600,789 2 207 Idieresis +-D 600,572 2 208 Eth +~N 600,777,0,5 2 209 Ntilde +`O 600,811,12 2 210 Ograve +'O 600,811,12 2 211 Oacute +^O 600,811,12 2 212 Ocircumflex +~O 600,777,12 2 213 Otilde +:O 600,789,12 2 214 Odieresis +tmu 600,441 0 215 multiply +/O 600,585,19 2 216 Oslash +`U 600,811,12 2 217 Ugrave +'U 600,811,12 2 218 Uacute +^U 600,811,12 2 219 Ucircumflex +:U 600,789,12 2 220 Udieresis +'Y 600,811 2 221 Yacute +TP 600,572 2 222 Thorn +ss 600,621,12 2 223 germandbls +`a 600,678,12 2 224 agrave +'a 600,678,12 2 225 aacute +^a 600,679,12 2 226 acircumflex +~a 600,644,12 2 227 atilde +:a 600,640,12 2 228 adieresis +oa 600,717,12 2 229 aring +ae 600,446,12 0 230 ae +,c 600,448,206 1 231 ccedilla +`e 600,678,12 2 232 egrave +'e 600,678,12 2 233 eacute +^e 600,679,12 2 234 ecircumflex +:e 600,640,12 2 235 edieresis +`i 600,678 2 236 igrave +'i 600,678 2 237 iacute +^i 600,679 2 238 icircumflex +:i 600,640 2 239 idieresis +Sd 600,693,12 2 240 eth +~n 600,644 2 241 ntilde +`o 600,678,12 2 242 ograve +'o 600,678,12 2 243 oacute +^o 600,679,12 2 244 ocircumflex +~o 600,644,12 2 245 otilde +:o 600,640,12 2 246 odieresis +tdi 600,425 0 247 divide +/o 600,452,22 0 248 oslash +`u 600,678,12 2 249 ugrave +'u 600,678,12 2 250 uacute +^u 600,679,12 2 251 ucircumflex +:u 600,640,12 2 252 udieresis +'y 600,678,183 3 253 yacute +Tp 600,618,183 3 254 thorn +:y 600,640,183 3 255 ydieresis +u2026 600,111,12 0 256 ellipsis diff --git a/contrib/groff/font/devps/CBI b/contrib/groff/font/devps/CBI index 27976db2f2..4e1fdbcc2b 100644 --- a/contrib/groff/font/devps/CBI +++ b/contrib/groff/font/devps/CBI @@ -1,282 +1,266 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Courier Bold Oblique +# Version 004.000 +# FamilyName Courier +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1989, 1990, 1991, 1993, 1996, 1997, 1998 Adobe Systems Incorporated. All Rights Reserved. +# Comment Copyright (c) 1989, 1990, 1991, 1993, 1996, 1997, 1998 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Wed Aug 26 16:53:05 1998 +# Comment UniqueID 44055 +# Comment VMusage 11931 56737 + name CBI internalname Courier-BoldOblique -slant 12 +slant 11 spacewidth 600 encoding text.enc + charset -ha 600,616,0,5,-121,5 2 0 asciicircum -ti 600,356,0,39,-70,39 0 1 asciitilde -vS 600,790,22,122,-4,75 2 2 Scaron -vZ 600,790,0,109,-12,75 2 3 Zcaron -vs 600,667,17,82,-17,75 2 4 scaron -vz 600,667,0,82,-31,75 2 5 zcaron -:Y 600,748,0,158,-59,75 2 6 Ydieresis -tm 600,562,0,318,-36,75 2 7 trademark -aq 600,562,0,0,-254 2 8 quotesingle +ha 600,750,0,57,-146,57 2 0 asciicircum +ti 600,311,0,24,-64,24 0 1 asciitilde +vS 600,811,13,112,-21,67 2 2 Scaron +vZ 600,811,0,102,-26,67 2 3 Zcaron +vs 600,679,12,92,-34,67 2 4 scaron +vz 600,679,0,81,-42,67 2 5 zcaron +:Y 600,789,0,145,-69,67 2 6 Ydieresis +tm 600,678,0,128,-129,67 2 7 trademark +aq 600,572,0,0,-246 2 8 quotesingle +Eu 600,612,12,148,7,67 2 9 Euro space 600 0 32 space -! 600,572,15,0,-166 2 33 exclam -" 600,562,0,34,-162,34 2 34 quotedbl +! 600,572,12,0,-172 2 33 exclam +" 600,572,0,24,-163,24 2 34 quotedbl dq " -# 600,651,45,90,-38,75 2 35 numbersign +# 600,649,52,66,-48,66 2 35 numbersign sh " -$ 600,666,126,79,-37,75 2 36 dollar +$ 600,646,124,54,-58,54 2 36 dollar Do " -% 600,616,15,74,-52,74 2 37 percent -& 600,543,15,44,-12,44 0 38 ampersand -' 600,562,0,0,-180 2 39 quoteright +% 600,617,33,50,-74,50 2 37 percent +& 600,539,12,41,-39,41 0 38 ampersand +' 600,572,0,0,-162 2 39 quoteright cq " -( 600,616,102,42,-216,42 2 40 parenleft -) 600,616,102,0,-67 2 41 parenright -* 600,601,0,47,-129,47 2 42 asterisk -+ 600,478,0,46,-64,46 0 43 plus -, 600,174,111,0,-49 0 44 comma -- 600,313,0,17,-93,17 0 45 hyphen +( 600,643,86,59,-259,59 2 40 parenleft +) 600,643,86,0,-50 2 41 parenright +* 600,570,0,28,-114,28 2 42 asterisk ++ 600,438,0,19,-67,19 0 43 plus +, 600,163,100,0,-83 0 44 comma +- 600,282,0,0,-127 0 45 hyphen hy " -. 600,171,15,0,-157 0 46 period -/ 600,626,77,76,-41,75 2 47 slash +. 600,153,12,0,-168 0 46 period +/ 600,696,133,108,-4,67 2 47 slash sl " -0 600,616,15,42,-86,42 2 48 zero -1 600,616,0,11,-43,11 2 49 one -2 600,616,0,43,-11,43 2 50 two -3 600,616,15,21,-22,21 2 51 three -4 600,616,0,8,-32,8 2 52 four -5 600,601,15,71,-27,71 2 53 five -6 600,616,15,102,-86,75 2 54 six -7 600,601,0,72,-97,72 2 55 seven -8 600,616,15,54,-65,54 2 56 eight -9 600,616,15,42,-26,42 2 57 nine -: 600,425,15,0,-156 0 58 colon -; 600,425,111,0,-49 0 59 semicolon -< 600,501,0,62,-71,62 0 60 less -= 600,398,0,64,-46,64 0 61 equal -> 600,501,0,39,-47,39 0 62 greater -? 600,580,14,41,-133,41 2 63 question -@ 600,616,15,91,-16,75 2 64 at +0 600,612,12,24,-94,24 2 48 zero +1 600,615,0,0,-44 2 49 one +2 600,613,0,20,-22,20 2 50 two +3 600,612,12,0,-27 2 51 three +4 600,613,0,0,-48 2 52 four +5 600,601,12,50,-36,50 2 53 five +6 600,612,12,68,-92,67 2 54 six +7 600,601,0,52,-106,52 2 55 seven +8 600,613,11,33,-74,33 2 56 eight +9 600,612,14,26,-51,26 2 57 nine +: 600,403,12,0,-168 0 58 colon +; 600,403,100,0,-83 0 59 semicolon +< 600,446,8,41,-55,41 0 60 less += 600,339,0,31,-52,31 0 61 equal +> 600,446,8,43,-56,43 0 62 greater +? 600,582,13,24,-141,24 2 63 question +@ 600,579,18,100,-15,67 2 64 at at " -A 600,562,0,81,59,75 2 65 A -B 600,562,0,79,20,75 2 66 B -C 600,580,18,124,-25,75 2 67 C -D 600,562,0,114,20,75 2 68 D -E 600,562,0,119,25,75 2 69 E -F 600,562,0,133,11,75 2 70 F -G 600,580,18,124,-25,75 2 71 G -H 600,562,0,149,30,75 2 72 H -I 600,562,0,92,-27,75 2 73 I -J 600,562,18,170,-9,75 2 74 J -K 600,562,0,141,29,75 2 75 K -L 600,562,0,85,11,75 2 76 L -M 600,562,0,171,52,75 2 77 M -N 600,562,12,179,42,75 2 78 N -O 600,580,18,95,-24,75 2 79 O -P 600,562,0,92,2,75 2 80 P -Q 600,580,138,86,-34,75 2 81 Q -R 600,562,0,67,26,67 2 82 R -S 600,582,22,122,-4,75 2 83 S -T 600,562,0,128,-36,75 2 84 T -U 600,562,18,165,-51,75 2 85 U -V 600,562,0,182,-34,75 2 86 V -W 600,562,0,187,-34,75 2 87 W -X 600,562,0,139,38,75 2 88 X -Y 600,562,0,158,-59,75 2 89 Y -Z 600,562,0,86,-12,75 2 90 Z -[ 600,616,102,56,-173,56 2 91 bracketleft +A 600,572,0,65,46,65 2 65 A +B 600,572,0,55,14,55 2 66 B +C 600,583,12,128,-51,67 2 67 C +D 600,572,0,79,24,67 2 68 D +E 600,572,0,113,2,67 2 69 E +F 600,572,0,120,-13,67 2 70 F +G 600,583,12,114,-38,67 2 71 G +H 600,572,0,141,25,67 2 72 H +I 600,572,0,74,-40,67 2 73 I +J 600,572,12,151,-15,67 2 74 J +K 600,572,0,111,20,67 2 75 K +L 600,572,0,61,-1,61 2 76 L +M 600,572,0,174,39,67 2 77 M +N 600,572,0,167,36,67 2 78 N +O 600,583,12,78,-33,67 2 79 O +P 600,572,0,74,-10,67 2 80 P +Q 600,584,143,76,-33,67 2 81 Q +R 600,572,0,54,4,54 2 82 R +S 600,583,13,76,-21,67 2 83 S +T 600,572,0,125,-58,67 2 84 T +U 600,572,12,160,-63,67 2 85 U +V 600,572,0,163,-42,67 2 86 V +W 600,572,0,168,-41,67 2 87 W +X 600,572,0,119,25,67 2 88 X +Y 600,572,0,145,-69,67 2 89 Y +Z 600,572,0,67,-26,67 2 90 Z +[ 600,643,86,74,-222,67 2 91 bracketleft lB " -\ 600,626,77,0,-173 2 92 backslash +\ 600,695,133,0,-156 2 92 backslash rs " -] 600,616,102,0,-53 2 93 bracketright +] 600,643,86,0,-34 2 93 bracketright rB " -a^ 600,657,0,56,-162,56 2 94 circumflex +a^ 600,679,0,60,-153,60 2 94 circumflex ^ " -_ 600,0,125,34,77,34 0 95 underscore -` 600,562,0,0,-247 2 96 quoteleft +_ 600,0,249,12,99,12 1 95 underscore +` 600,572,0,0,-271 2 96 quoteleft oq " -a 600,454,15,42,-12,42 0 97 a -b 600,626,15,86,37,75 2 98 b -c 600,459,15,81,-31,75 0 99 c -d 600,626,15,94,-11,75 2 100 d -e 600,454,15,54,-31,54 0 101 e -f 600,626,0,127,-33,75 2 102 f -g 600,454,146,123,9,75 1 103 g -h 600,626,0,64,32,64 2 104 h -i 600,658,0,0,-27 2 105 i -j 600,658,146,30,13,30 3 106 j -k 600,626,0,92,17,75 2 107 k -l 600,626,0,0,-27 2 108 l -m 600,454,0,98,72,75 0 109 m -n 600,454,0,64,32,64 0 110 n -o 600,454,15,72,-21,72 0 111 o -p 600,454,142,72,81,72 1 112 p -q 600,454,142,134,-11,75 1 113 q -r 600,454,0,104,3,75 0 114 r -s 600,459,17,57,-17,57 0 115 s -t 600,562,15,16,-68,16 2 116 t -u 600,439,15,41,-20,41 0 117 u -v 600,439,0,144,-20,75 0 118 v -w 600,439,0,161,-3,75 0 119 w -x 600,439,0,120,44,75 0 120 x -y 600,439,142,144,70,75 1 121 y -z 600,439,0,63,-31,63 0 122 z -lC 600,616,102,45,-154,45 2 123 braceleft +a 600,448,12,33,-31,33 0 97 a +b 600,621,12,50,40,50 2 98 b +c 600,448,12,48,-46,48 0 99 c +d 600,621,12,85,-32,67 2 100 d +e 600,447,12,43,-52,43 0 101 e +f 600,621,0,107,-62,67 2 102 f +g 600,447,184,113,12,67 1 103 g +h 600,621,0,57,11,57 2 104 h +i 600,642,0,0,-40 2 105 i +j 600,641,184,0,-4 3 106 j +k 600,621,0,77,0,67 2 107 k +l 600,621,0,0,-41 2 108 l +m 600,447,0,84,65,67 0 109 m +n 600,447,0,45,25,45 0 110 n +o 600,448,12,52,-31,52 0 111 o +p 600,447,183,56,72,56 1 112 p +q 600,447,183,128,-37,67 1 113 q +r 600,448,0,86,-20,67 0 114 r +s 600,448,12,43,-34,43 0 115 s +t 600,567,12,23,-110,23 2 116 t +u 600,434,12,42,-38,42 0 117 u +v 600,434,0,123,-28,67 0 118 v +w 600,434,0,142,-10,67 0 119 w +x 600,434,0,91,32,67 0 120 x +y 600,434,183,124,39,67 1 121 y +z 600,434,0,41,-42,41 0 122 z +lC 600,764,228,78,-113,67 3 123 braceleft { " -ba 600,750,250,0,-152 3 124 bar +ba 600,750,249,0,-176 3 124 bar | " -rC 600,616,102,0,-64 2 125 braceright +rC 600,764,228,0,-26 3 125 braceright } " -a~ 600,636,0,92,-150,75 2 126 tilde +a~ 600,644,0,98,-150,67 2 126 tilde ~ " -bq 600,143,142,0,-95 1 128 quotesinglbase -Fo 600,446,0,88,-13,75 0 129 guillemotleft -Fc 600,446,0,97,-22,75 0 130 guillemotright -bu 600,430,0,0,-147 0 131 bullet -Fn 600,616,131,151,106,75 2 132 florin -f/ 600,661,60,157,28,75 2 133 fraction -%0 600,616,15,192,94,75 2 134 perthousand -dg 600,580,70,36,-126,36 2 135 dagger -dd 600,580,70,36,-72,36 2 136 daggerdbl -en 600,313,0,52,-58,52 0 137 endash -em 600,313,0,127,17,75 0 138 emdash -fi 600,626,0,93,38,75 2 140 fi -fl 600,626,0,93,38,75 2 141 fl -.i 600,439,0,0,-27 0 144 dotlessi -ga 600,661,0,0,-222 2 146 grave -a" 600,661,0,178,-122,75 2 147 hungarumlaut -a. 600,625,0,0,-296 2 148 dotaccent -ab 600,631,0,101,-167,75 2 149 breve -ah 600,667,0,82,-188,75 2 150 caron -ao 600,678,0,0,-269 2 151 ring -ho 600,0,199,0,-94 1 152 ogonek -lq 600,562,0,44,-140,44 2 153 quotedblleft -rq 600,562,0,94,-70,75 2 154 quotedblright -oe 600,454,15,111,31,75 0 155 oe -/l 600,626,0,28,-27,28 2 156 lslash -Bq 600,143,142,9,15,9 1 157 quotedblbase -OE 600,562,0,150,24,75 2 158 OE -/L 600,562,0,85,11,75 2 159 Lslash -r! 600,449,146,0,-147 1 161 exclamdown -ct 600,614,49,54,-71,54 2 162 cent -Po 600,611,28,100,-57,75 2 163 sterling -Cs 600,517,0,93,-27,75 0 164 currency -Ye 600,562,0,159,-48,75 2 165 yen -bb 600,675,175,0,-168 3 166 brokenbar -sc 600,580,70,69,-24,69 2 167 section -ad 600,625,0,42,-194,42 2 168 dieresis -co 600,580,18,117,-3,75 2 169 copyright -Of 600,580,0,0,-139 2 170 ordfeminine -fo 600,446,0,0,-146 0 171 guilsinglleft -tno 600,413,0,67,-85,67 0 172 logicalnot -\- 600,313,0,46,-64,46 0 173 minus -rg 600,580,18,117,-3,75 2 174 registered -a- 600,585,0,86,-145,75 2 175 macron -de 600,616,0,19,-123,19 2 176 degree -t+- 600,515,0,64,-26,64 0 177 plusminus -S2 600,616,0,0,-142 2 178 twosuperior -S3 600,616,0,0,-143 2 179 threesuperior -aa 600,661,0,58,-263,58 2 180 acute -mc 600,439,142,41,0,41 1 181 mu -ps 600,580,70,149,-11,75 2 182 paragraph -pc 600,351,0,0,-199 0 183 periodcentered -ac 600,0,206,0,-119 1 184 cedilla -S1 600,616,0,0,-163 2 185 onesuperior -Om 600,580,0,0,-139 2 186 ordmasculine -fc 600,446,0,0,-116 0 187 guilsinglright -14 600,661,60,156,36,75 2 188 onequarter -12 600,661,60,165,27,75 2 189 onehalf -34 600,661,60,148,42,75 2 190 threequarters -r? 600,449,146,0,-51 1 191 questiondown -`A 600,784,0,81,59,75 2 192 Agrave -'A 600,784,0,115,59,75 2 193 Aacute -^A 600,780,0,81,59,75 2 194 Acircumflex -~A 600,759,0,88,59,75 2 195 Atilde -:A 600,748,0,81,59,75 2 196 Adieresis -oA 600,801,0,81,59,75 2 197 Aring -AE 600,562,0,157,79,75 2 198 AE -,C 600,580,206,124,-24,75 3 199 Ccedilla -`E 600,784,0,119,25,75 2 200 Egrave -'E 600,784,0,119,25,75 2 201 Eacute -^E 600,780,0,119,25,75 2 202 Ecircumflex -:E 600,748,0,119,25,75 2 203 Edieresis -`I 600,784,0,92,-27,75 2 204 Igrave -'I 600,784,0,92,-27,75 2 205 Iacute -^I 600,780,0,92,-27,75 2 206 Icircumflex -:I 600,748,0,92,-27,75 2 207 Idieresis --D 600,562,0,114,20,75 2 208 Eth -~N 600,759,12,179,42,75 2 209 Ntilde -`O 600,784,18,95,-24,75 2 210 Ograve -'O 600,784,18,95,-24,75 2 211 Oacute -^O 600,780,18,95,-24,75 2 212 Ocircumflex -~O 600,759,18,118,-24,75 2 213 Otilde -:O 600,748,18,95,-24,75 2 214 Odieresis -tmu 600,478,0,56,-55,56 0 215 multiply -/O 600,584,22,122,2,75 2 216 Oslash -`U 600,784,18,165,-51,75 2 217 Ugrave -'U 600,784,18,165,-51,75 2 218 Uacute -^U 600,780,18,165,-51,75 2 219 Ucircumflex -:U 600,748,18,165,-51,75 2 220 Udieresis -'Y 600,784,0,158,-59,75 2 221 Yacute -TP 600,562,0,69,2,69 2 222 Thorn -ss 600,626,15,78,28,75 2 223 germandbls -`a 600,661,15,42,-12,42 2 224 agrave -'a 600,661,15,58,-12,58 2 225 aacute -^a 600,657,15,42,-12,42 2 226 acircumflex -~a 600,636,15,92,-12,75 2 227 atilde -:a 600,625,15,42,-12,42 2 228 adieresis -oa 600,678,15,42,-12,42 2 229 aring -ae 600,454,15,101,29,75 0 230 ae -,c 600,459,206,81,-31,75 1 231 ccedilla -`e 600,661,15,54,-31,54 2 232 egrave -'e 600,661,15,58,-31,58 2 233 eacute -^e 600,657,15,56,-31,56 2 234 ecircumflex -:e 600,625,15,54,-31,54 2 235 edieresis -`i 600,661,0,0,-27 2 236 igrave -'i 600,661,0,58,-27,58 2 237 iacute -^i 600,657,0,16,-27,16 2 238 icircumflex -:i 600,625,0,2,-27,2 2 239 idieresis -Sd 600,626,27,111,-43,75 2 240 eth -~n 600,636,0,92,32,75 2 241 ntilde -`o 600,661,15,72,-21,72 2 242 ograve -'o 600,661,15,72,-21,72 2 243 oacute -^o 600,657,15,72,-21,72 2 244 ocircumflex -~o 600,636,15,92,-21,75 2 245 otilde -:o 600,625,15,72,-21,72 2 246 odieresis -tdi 600,500,0,46,-64,46 0 247 divide -/o 600,463,24,87,-5,75 0 248 oslash -`u 600,661,15,41,-20,41 2 249 ugrave -'u 600,661,15,58,-20,58 2 250 uacute -^u 600,657,15,41,-20,41 2 251 ucircumflex -:u 600,625,15,41,-20,41 2 252 udieresis -'y 600,661,142,144,70,75 3 253 yacute -Tp 600,626,142,72,81,72 3 254 thorn -:y 600,625,142,144,70,75 3 255 ydieresis -IJ 600,562,18,191,58,75 2 256 IJ ---- 600,447,0,0,-146 0 257 up ---- 600,320,0,65,42,65 0 258 dectab -u0047_030C 600,790,18,124,-25,75 2 259 Gcaron ---- 600,562,0,150,31,75 2 260 stop ---- 600,562,0,91,31,75 2 261 tab -u2026 600,116,15,36,15,36 0 262 ellipsis ---- 600,333,0,0,-257 0 263 largebullet -u0073_0327 600,459,206,57,-17,57 1 264 scedilla ---- 600,562,0,150,-29,75 2 265 return -ij 600,658,146,164,44,75 3 266 ij ---- 600,562,0,144,95,75 2 267 LL ---- 600,562,0,150,31,75 2 268 square -da 600,608,15,0,-124 2 269 arrowdown -<- 600,455,0,158,10,75 0 270 arrowleft -<> 600,455,0,138,10,75 0 271 arrowboth ---- 600,599,0,102,-26,75 2 272 graybox --> 600,455,0,138,30,75 0 273 arrowright -u00AF 600,629,0,184,-73,75 2 274 overscore ---- 600,626,0,103,49,75 2 275 ll -u0067_030C 600,667,146,123,9,75 3 276 gcaron -u20A4 600,611,28,100,-57,75 2 277 lira ---- 600,580,0,73,-53,73 2 278 center -u0053_0327 600,582,206,122,-4,75 3 279 Scedilla ---- 600,601,146,0,76 3 280 format -ua 600,626,0,6,-194,6 2 281 arrowup ---- 600,572,15,69,-41,69 2 282 notegraphic -u211E 600,562,15,82,26,75 2 283 prescription ---- 600,372,0,29,-49,29 0 284 indent ---- 600,439,15,0,-118 0 285 down ---- 600,371,0,39,-59,39 0 286 left -u0049_0307 600,748,0,92,-27,75 2 287 Idot ---- 600,487,15,0,-118 0 288 merge +bq 600,163,100,0,-83 0 128 quotesinglbase +Fo 600,423,0,80,-34,67 0 129 guillemotleft +Fc 600,423,0,53,-7,53 0 130 guillemotright +bu 600,482,0,0,-125 0 131 bullet +Fn 600,618,119,126,90,67 2 132 florin +f/ 600,634,85,163,31,67 2 133 fraction +%0 600,617,33,171,64,67 2 134 perthousand +dg 600,572,44,16,-131,16 2 135 dagger +dd 600,572,42,16,-95,16 2 136 daggerdbl +en 600,282,0,27,-63,27 0 137 endash +em 600,282,0,104,14,67 0 138 emdash +fi 600,642,0,74,41,67 2 140 fi +fl 600,621,0,67,44,67 2 141 fl +.i 600,434,0,0,-38 0 144 dotlessi +ga 600,678,0,37,-214,37 2 146 grave +a" 600,710,0,175,-214,67 2 147 hungarumlaut +a. 600,641,0,0,-299 2 148 dotaccent +ab 600,657,0,102,-169,67 2 149 breve +ah 600,679,0,81,-175,67 2 150 caron +ao 600,717,0,0,-268 2 151 ring +ho 600,22,177,0,-253 0 152 ogonek +lq 600,572,0,54,-169,54 2 153 quotedblleft +rq 600,572,0,47,-61,47 2 154 quotedblright +oe 600,446,12,100,12,67 0 155 oe +/l 600,621,0,0,-39 2 156 lslash +Bq 600,163,101,0,18 0 157 quotedblbase +OE 600,572,0,170,2,67 2 158 OE +/L 600,572,0,61,-1,61 2 159 Lslash +r! 600,447,136,0,-162 0 161 exclamdown +ct 600,605,52,50,-97,50 2 162 cent +Po 600,612,27,81,-69,67 2 163 sterling +Cs 600,605,0,123,-12,67 2 164 currency +Ye 600,601,0,145,-72,67 2 165 yen +bb 600,724,224,0,-181 3 166 brokenbar +sc 600,584,63,52,-58,52 2 167 section +ad 600,640,0,17,-209,17 2 168 dieresis +co 600,744,0,87,-111,67 2 169 copyright +Of 600,612,0,0,-208 2 170 ordfeminine +fo 600,423,0,0,-122 0 171 guilsinglleft +tno 600,358,0,35,-87,35 0 172 logicalnot +\- 600,266,0,17,-69,17 0 173 minus +rg 600,744,0,87,-111,67 2 174 registered +a- 600,591,0,75,-137,67 2 175 macron +de 600,612,0,0,-186 2 176 degree +t+- 600,438,127,20,-9,20 0 177 plusminus +S2 600,607,0,0,-141 2 178 twosuperior +S3 600,607,0,0,-140 2 179 threesuperior +aa 600,678,0,64,-233,64 2 180 acute +mc 600,434,167,46,-18,46 0 181 mu +ps 600,745,154,105,-143,67 2 182 paragraph +pc 600,386,0,0,-213 0 183 periodcentered +ac 600,0,207,0,-154 1 184 cedilla +S1 600,607,0,0,-156 2 185 onesuperior +Om 600,612,0,0,-206 2 186 ordmasculine +fc 600,423,0,0,-112 0 187 guilsinglright +14 600,625,91,208,-9,67 2 188 onequarter +12 600,625,91,172,24,67 2 189 onehalf +34 600,626,91,187,9,67 2 190 threequarters +r? 600,446,149,0,-58 0 191 questiondown +`A 600,811,0,65,46,65 2 192 Agrave +'A 600,811,0,76,46,67 2 193 Aacute +^A 600,811,0,74,46,67 2 194 Acircumflex +~A 600,777,0,114,46,67 2 195 Atilde +:A 600,789,0,65,46,65 2 196 Adieresis +oA 600,800,0,65,46,65 2 197 Aring +AE 600,572,0,158,34,67 2 198 AE +,C 600,583,204,123,-50,67 3 199 Ccedilla +`E 600,811,0,113,2,67 2 200 Egrave +'E 600,811,0,113,2,67 2 201 Eacute +^E 600,811,0,113,2,67 2 202 Ecircumflex +:E 600,789,0,113,2,67 2 203 Edieresis +`I 600,811,0,74,-40,67 2 204 Igrave +'I 600,811,0,88,-40,67 2 205 Iacute +^I 600,811,0,86,-40,67 2 206 Icircumflex +:I 600,789,0,74,-40,67 2 207 Idieresis +-D 600,572,0,79,24,67 2 208 Eth +~N 600,777,0,167,36,67 2 209 Ntilde +`O 600,811,12,78,-33,67 2 210 Ograve +'O 600,811,12,88,-33,67 2 211 Oacute +^O 600,811,12,86,-33,67 2 212 Ocircumflex +~O 600,777,12,126,-33,67 2 213 Otilde +:O 600,789,12,78,-33,67 2 214 Odieresis +tmu 600,441,0,48,-48,48 0 215 multiply +/O 600,585,19,108,-3,67 2 216 Oslash +`U 600,811,12,160,-63,67 2 217 Ugrave +'U 600,811,12,160,-63,67 2 218 Uacute +^U 600,811,12,160,-63,67 2 219 Ucircumflex +:U 600,789,12,160,-63,67 2 220 Udieresis +'Y 600,811,0,145,-69,67 2 221 Yacute +TP 600,572,0,83,41,67 2 222 Thorn +ss 600,621,12,53,23,53 2 223 germandbls +`a 600,678,12,33,-31,33 2 224 agrave +'a 600,678,12,59,-31,59 2 225 aacute +^a 600,679,12,55,-31,55 2 226 acircumflex +~a 600,644,12,93,-31,67 2 227 atilde +:a 600,640,12,33,-31,33 2 228 adieresis +oa 600,717,12,33,-31,33 2 229 aring +ae 600,446,12,86,18,67 0 230 ae +,c 600,448,206,48,-46,48 1 231 ccedilla +`e 600,678,12,44,-52,44 2 232 egrave +'e 600,678,12,71,-52,67 2 233 eacute +^e 600,679,12,67,-52,67 2 234 ecircumflex +:e 600,640,12,43,-52,43 2 235 edieresis +`i 600,678,0,24,-38,24 2 236 igrave +'i 600,678,0,51,-38,51 2 237 iacute +^i 600,679,0,47,-38,47 2 238 icircumflex +:i 600,640,0,4,-38,4 2 239 idieresis +Sd 600,693,12,49,-41,49 2 240 eth +~n 600,644,0,98,25,67 2 241 ntilde +`o 600,678,12,52,-31,52 2 242 ograve +'o 600,678,12,64,-31,64 2 243 oacute +^o 600,679,12,60,-31,60 2 244 ocircumflex +~o 600,644,12,98,-31,67 2 245 otilde +:o 600,640,12,52,-31,52 2 246 odieresis +tdi 600,425,0,15,-75,15 0 247 divide +/o 600,452,22,75,-7,67 0 248 oslash +`u 600,678,12,42,-38,42 2 249 ugrave +'u 600,678,12,44,-38,44 2 250 uacute +^u 600,679,12,42,-38,42 2 251 ucircumflex +:u 600,640,12,42,-38,42 2 252 udieresis +'y 600,678,183,124,39,67 3 253 yacute +Tp 600,618,183,56,72,56 3 254 thorn +:y 600,640,183,124,39,67 3 255 ydieresis +u2026 600,111,12,47,19,47 0 256 ellipsis diff --git a/contrib/groff/font/devps/CI b/contrib/groff/font/devps/CI index 7d7582dad6..1f63df19b9 100644 --- a/contrib/groff/font/devps/CI +++ b/contrib/groff/font/devps/CI @@ -1,282 +1,266 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Courier Oblique +# Version 004.000 +# FamilyName Courier +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1989, 1990, 1991, 1992, 1993, 1996, 1997, 1998 Adobe Systems Incorporated. All Rights Reserved. +# Comment Copyright (c) 1989, 1990, 1991, 1992, 1993, 1996, 1997, 1998 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Wed Aug 26 16:52:23 1998 +# Comment UniqueID 44054 +# Comment VMusage 11074 54655 + name CI internalname Courier-Oblique -slant 12 +slant 11 spacewidth 600 encoding text.enc + charset -ha 600,622,0,37,-125,37 2 0 asciicircum -ti 600,320,0,50,-66,50 0 1 asciitilde -vS 600,805,20,123,-26,72 2 2 Scaron -vZ 600,805,0,93,-36,72 2 3 Zcaron -vs 600,669,15,64,-28,64 2 4 scaron -vz 600,669,0,74,-49,72 2 5 zcaron -:Y 600,731,0,145,-83,72 2 6 Ydieresis -tm 600,562,0,192,-25,72 2 7 trademark -aq 600,562,0,0,-295 2 8 quotesingle +ha 600,750,0,55,-144,55 2 0 asciicircum +ti 600,274,0,22,-77,22 0 1 asciitilde +vS 600,803,12,101,-21,67 2 2 Scaron +vZ 600,803,0,109,-32,67 2 3 Zcaron +vs 600,667,12,67,-40,67 2 4 scaron +vz 600,667,0,74,-53,67 2 5 zcaron +:Y 600,785,0,137,-85,67 2 6 Ydieresis +tm 600,678,0,128,-129,67 2 7 trademark +aq 600,572,0,0,-278 2 8 quotesingle +Eu 600,584,12,140,-6,67 2 9 Euro space 600 0 32 space -! 600,572,15,0,-193 2 33 exclam -" 600,562,0,0,-223 2 34 quotedbl +! 600,572,12,0,-196 2 33 exclam +" 600,572,0,0,-194 2 34 quotedbl dq " -# 600,639,32,46,-83,46 2 35 numbersign +# 600,639,77,53,-45,53 2 35 numbersign sh " -$ 600,662,126,46,-58,46 2 36 dollar +$ 600,655,137,41,-55,41 2 36 dollar Do " -% 600,622,15,49,-84,49 2 37 percent -& 600,543,15,30,-37,30 0 38 ampersand -' 600,562,0,0,-233 2 39 quoteright +% 600,622,12,43,-92,43 2 37 percent +& 600,539,12,53,-66,53 0 38 ampersand +' 600,572,0,0,-190 2 39 quoteright cq " -( 600,622,108,22,-263,22 2 40 parenleft -) 600,622,108,0,-87 2 41 parenright -* 600,607,0,30,-162,30 2 42 asterisk -+ 600,470,0,30,-79,30 0 43 plus -, 600,122,112,0,-107 0 44 comma -- 600,285,0,8,-102,8 0 45 hyphen +( 600,648,97,38,-281,38 2 40 parenleft +) 600,648,97,0,-73 2 41 parenright +* 600,572,0,15,-131,15 2 42 asterisk ++ 600,432,0,12,-71,12 0 43 plus +, 600,121,129,0,-105 0 44 comma +- 600,276,0,0,-131 0 45 hyphen hy " -. 600,109,15,0,-188 0 46 period -/ 600,629,80,54,-62,54 2 47 slash +. 600,107,12,0,-192 0 46 period +/ 600,701,143,87,-18,67 2 47 slash sl " -0 600,622,15,25,-104,25 2 48 zero -1 600,622,0,0,-48 2 49 one -2 600,622,0,18,-20,18 2 50 two -3 600,622,15,0,-32 2 51 three -4 600,622,0,0,-58 2 52 four -5 600,607,15,39,-49,39 2 53 five -6 600,622,15,79,-105,72 2 54 six -7 600,607,0,62,-132,62 2 55 seven -8 600,622,15,38,-82,38 2 56 eight -9 600,622,15,24,-43,24 2 57 nine -: 600,385,15,0,-188 0 58 colon -; 600,385,112,0,-107 0 59 semicolon -< 600,472,0,60,-46,60 0 60 less -= 600,376,0,50,-59,50 0 61 equal -> 600,472,0,49,-35,49 0 62 greater -? 600,572,15,33,-172,33 2 63 question -@ 600,622,15,32,-77,32 2 64 at +0 600,584,12,16,-106,16 2 48 zero +1 600,584,0,0,-55 2 49 one +2 600,584,0,11,-25,11 2 50 two +3 600,584,12,0,-37 2 51 three +4 600,572,0,0,-42 2 52 four +5 600,572,12,31,-45,31 2 53 five +6 600,584,13,54,-86,54 2 54 six +7 600,572,0,65,-135,65 2 55 seven +8 600,585,13,10,-80,10 2 56 eight +9 600,584,13,28,-58,28 2 57 nine +: 600,368,14,0,-194 0 58 colon +; 600,368,129,0,-115 0 59 semicolon +< 600,404,1,20,-74,20 0 60 less += 600,321,0,27,-56,27 0 61 equal +> 600,404,0,19,-74,19 0 62 greater +? 600,584,12,15,-156,15 2 63 question +@ 600,543,14,79,-33,67 0 64 at at " -A 600,562,0,57,47,57 2 65 A -B 600,562,0,66,7,66 2 66 B -C 600,580,18,105,-43,72 2 67 C -D 600,562,0,95,7,72 2 68 D -E 600,562,0,110,-3,72 2 69 E -F 600,562,0,110,-3,72 2 70 F -G 600,580,18,95,-33,72 2 71 G -H 600,562,0,137,18,72 2 72 H -I 600,562,0,73,-46,72 2 73 I -J 600,562,18,135,-2,72 2 74 J -K 600,562,0,121,12,72 2 75 K -L 600,562,0,57,3,57 2 76 L -M 600,562,0,165,46,72 2 77 M -N 600,562,13,162,43,72 2 78 N -O 600,580,18,75,-44,72 2 79 O -P 600,562,0,94,-29,72 2 80 P -Q 600,580,138,75,-45,72 2 81 Q -R 600,562,0,48,12,48 2 82 R -S 600,580,20,100,-26,72 2 83 S -T 600,562,0,115,-58,72 2 84 T -U 600,562,18,152,-75,72 2 85 U -V 600,562,13,173,-55,72 2 86 V -W 600,562,13,172,-56,72 2 87 W -X 600,562,0,125,27,72 2 88 X -Y 600,562,0,145,-83,72 2 89 Y -Z 600,562,0,60,-36,60 2 90 Z -[ 600,622,108,24,-196,24 2 91 bracketleft +A 600,572,0,64,56,64 2 65 A +B 600,572,0,43,8,43 2 66 B +C 600,584,13,119,-65,67 2 67 C +D 600,572,0,75,16,67 2 68 D +E 600,572,0,96,-7,67 2 69 E +F 600,572,0,116,-27,67 2 70 F +G 600,584,12,92,-33,67 2 71 G +H 600,572,0,131,20,67 2 72 H +I 600,572,0,53,-59,53 2 73 I +J 600,572,12,139,-10,67 2 74 J +K 600,572,0,138,-11,67 2 75 K +L 600,572,0,54,-2,54 2 76 L +M 600,572,0,138,29,67 2 77 M +N 600,572,0,148,35,67 2 78 N +O 600,585,12,72,-37,67 2 79 O +P 600,572,0,83,-33,67 2 80 P +Q 600,584,126,76,-38,67 2 81 Q +R 600,572,0,41,7,41 2 82 R +S 600,584,12,64,-21,64 2 83 S +T 600,572,0,124,-69,67 2 84 T +U 600,572,12,162,-68,67 2 85 U +V 600,572,0,161,-60,67 2 86 V +W 600,572,0,143,-70,67 2 87 W +X 600,572,0,112,28,67 2 88 X +Y 600,572,0,137,-85,67 2 89 Y +Z 600,572,0,87,-32,67 2 90 Z +[ 600,648,97,66,-240,66 2 91 bracketleft lB " -\ 600,629,80,0,-199 2 92 backslash +\ 600,701,142,0,-174 2 92 backslash rs " -] 600,622,108,0,-85 2 93 bracketright +] 600,648,97,0,-43 2 93 bracketright rB " -a^ 600,654,0,31,-179,31 2 94 circumflex +a^ 600,667,0,40,-162,40 2 94 circumflex ^ " -_ 600,0,125,34,77,34 0 95 underscore -` 600,562,0,0,-293 2 96 quoteleft +_ 600,0,249,12,99,12 1 95 underscore +` 600,572,0,0,-285 2 96 quoteleft oq " -a 600,441,15,19,-26,19 0 97 a -b 600,629,15,75,21,72 2 98 b -c 600,441,15,58,-56,58 0 99 c -d 600,629,15,90,-35,72 2 100 d -e 600,441,15,48,-56,48 0 101 e -f 600,629,0,112,-64,72 2 102 f -g 600,441,157,107,-11,72 1 103 g -h 600,629,0,42,17,42 2 104 h -i 600,657,0,0,-45 2 105 i -j 600,657,157,0,-2 3 106 j -k 600,629,0,83,-8,72 2 107 k -l 600,629,0,0,-45 2 108 l -m 600,441,0,65,55,65 0 109 m -n 600,441,0,35,24,35 0 110 n -o 600,441,15,38,-52,38 0 111 o -p 600,441,157,55,74,55 1 112 p -q 600,441,157,132,-35,72 1 113 q -r 600,441,0,86,-10,72 0 114 r -s 600,441,15,34,-28,34 0 115 s -t 600,561,15,11,-117,11 2 116 t -u 600,426,15,22,-51,22 0 117 u -v 600,426,10,131,-40,72 0 118 v -w 600,426,10,145,-26,72 0 119 w -x 600,426,0,105,30,72 0 120 x -y 600,426,157,133,54,72 1 121 y -z 600,426,0,43,-49,43 0 122 z -lC 600,622,108,19,-183,19 2 123 braceleft +a 600,447,12,13,-29,13 0 97 a +b 600,627,12,54,26,54 2 98 b +c 600,447,12,58,-60,58 0 99 c +d 600,627,12,75,-38,67 2 100 d +e 600,447,12,27,-49,27 0 101 e +f 600,626,0,89,-48,67 2 102 f +g 600,447,194,100,2,67 1 103 g +h 600,627,0,43,11,43 2 104 h +i 600,654,0,0,-52 2 105 i +j 600,654,193 3 106 j +k 600,627,0,63,5,63 2 107 k +l 600,627,0,0,-47 2 108 l +m 600,447,0,64,-17,64 0 109 m +n 600,447,0,37,17,37 0 110 n +o 600,447,12,51,-39,51 0 111 o +p 600,447,194,48,71,48 1 112 p +q 600,447,194,117,-36,67 1 113 q +r 600,447,0,88,-24,67 0 114 r +s 600,447,12,29,-40,29 0 115 s +t 600,563,12,0,-95 2 116 t +u 600,434,12,30,-49,30 0 117 u +v 600,434,0,121,-38,67 0 118 v +w 600,434,0,124,-48,67 0 119 w +x 600,434,0,90,28,67 0 120 x +y 600,434,194,125,22,67 1 121 y +z 600,434,0,41,-53,41 0 122 z +lC 600,764,230,19,-176,19 3 123 braceleft { " -ba 600,750,250,0,-172 3 124 bar +ba 600,750,249,0,-176 3 124 bar | " -rC 600,622,108,0,-90 2 125 braceright +rC 600,764,230,0,-85 3 125 braceright } " -a~ 600,606,0,79,-162,72 2 126 tilde +a~ 600,639,0,71,-155,67 2 126 tilde ~ " -bq 600,100,134,0,-135 0 128 quotesinglbase -Fo 600,446,0,102,-42,72 0 129 guillemotleft -Fc 600,446,0,68,-8,68 0 130 guillemotright -bu 600,383,0,0,-174 0 131 bullet -Fn 600,622,143,121,76,72 2 132 florin -f/ 600,665,57,96,-34,72 2 133 fraction -%0 600,622,15,77,-9,72 2 134 perthousand -dg 600,580,78,0,-167 2 135 dagger -dd 600,580,78,0,-113 2 136 daggerdbl -en 600,285,0,36,-74,36 0 137 endash -em 600,285,0,111,1,72 0 138 emdash -fi 600,629,0,69,47,69 2 140 fi -fl 600,629,0,69,47,69 2 141 fl -.i 600,426,0,0,-45 0 144 dotlessi -ga 600,672,0,0,-244 2 146 grave -a" 600,672,0,133,-189,72 2 147 hungarumlaut -a. 600,580,0,0,-310 2 148 dotaccent -ab 600,609,0,26,-229,26 2 149 breve -ah 600,669,0,64,-212,64 2 150 caron -ao 600,627,0,0,-282 2 151 ring -ho 600,0,151,0,-157 0 152 ogonek -lq 600,562,0,0,-212 2 153 quotedblleft -rq 600,562,0,26,-163,26 2 154 quotedblright -oe 600,441,15,65,-4,65 0 155 oe -/l 600,629,0,33,-45,33 2 156 lslash -Bq 600,100,134,0,-65 0 157 quotedblbase -OE 600,562,0,122,-9,72 2 158 OE -/L 600,562,0,57,3,57 2 159 Lslash -r! 600,430,157,0,-175 1 161 exclamdown -ct 600,614,49,38,-101,38 2 162 cent -Po 600,611,21,71,-74,71 2 163 sterling -Cs 600,506,0,78,-44,72 0 164 currency -Ye 600,562,0,143,-70,72 2 165 yen -bb 600,675,175,0,-188 3 166 brokenbar -sc 600,580,78,40,-54,40 2 167 section -ad 600,595,0,20,-212,20 2 168 dieresis -co 600,580,18,117,-3,72 2 169 copyright -Of 600,580,0,0,-159 2 170 ordfeminine -fo 600,446,0,0,-154 0 171 guilsinglleft -tno 600,369,0,41,-105,41 0 172 logicalnot -\- 600,283,0,30,-79,30 0 173 minus -rg 600,580,18,117,-3,72 2 174 registered -a- 600,565,0,50,-182,50 2 175 macron -de 600,622,0,26,-164,26 2 176 degree -t+- 600,558,0,44,-46,44 0 177 plusminus -S2 600,622,0,0,-180 2 178 twosuperior -S3 600,622,0,0,-163 2 179 threesuperior -aa 600,672,0,62,-298,62 2 180 acute -mc 600,426,157,22,-22,22 1 181 mu -ps 600,562,78,80,-50,72 2 182 paragraph -pc 600,327,0,0,-225 0 183 periodcentered -ac 600,10,151,0,-147 0 184 cedilla -S1 600,622,0,0,-181 2 185 onesuperior -Om 600,580,0,0,-160 2 186 ordmasculine -fc 600,446,0,0,-120 0 187 guilsinglright -14 600,665,57,124,-15,72 2 188 onequarter -12 600,665,57,119,-15,72 2 189 onehalf -34 600,666,56,109,-23,72 2 190 threequarters -r? 600,430,157,0,-55 1 191 questiondown -`A 600,793,0,57,47,57 2 192 Agrave -'A 600,793,0,108,47,72 2 193 Aacute -^A 600,775,0,57,47,57 2 194 Acircumflex -~A 600,732,0,106,47,72 2 195 Atilde -:A 600,731,0,57,47,57 2 196 Adieresis -oA 600,753,0,57,47,57 2 197 Aring -AE 600,562,0,105,47,72 2 198 AE -,C 600,580,151,108,-43,72 2 199 Ccedilla -`E 600,793,0,110,-3,72 2 200 Egrave -'E 600,793,0,118,-3,72 2 201 Eacute -^E 600,775,0,110,-3,72 2 202 Ecircumflex -:E 600,731,0,110,-3,72 2 203 Edieresis -`I 600,793,0,73,-46,72 2 204 Igrave -'I 600,793,0,88,-46,72 2 205 Iacute -^I 600,775,0,73,-46,72 2 206 Icircumflex -:I 600,731,0,73,-46,72 2 207 Idieresis --D 600,562,0,95,7,72 2 208 Eth -~N 600,732,13,162,43,72 2 209 Ntilde -`O 600,793,18,75,-44,72 2 210 Ograve -'O 600,793,18,88,-44,72 2 211 Oacute -^O 600,775,18,75,-44,72 2 212 Ocircumflex -~O 600,732,18,106,-44,72 2 213 Otilde -:O 600,731,18,75,-44,72 2 214 Odieresis -tmu 600,470,0,57,-53,57 0 215 multiply -/O 600,629,80,75,-44,72 2 216 Oslash -`U 600,793,18,152,-75,72 2 217 Ugrave -'U 600,793,18,152,-75,72 2 218 Uacute -^U 600,775,18,152,-75,72 2 219 Ucircumflex -:U 600,731,18,152,-75,72 2 220 Udieresis -'Y 600,793,0,145,-83,72 2 221 Yacute -TP 600,562,0,56,-29,56 2 222 Thorn -ss 600,629,15,67,2,67 2 223 germandbls -`a 600,672,15,19,-26,19 2 224 agrave -'a 600,672,15,62,-26,62 2 225 aacute -^a 600,654,15,31,-26,31 2 226 acircumflex -~a 600,606,15,79,-26,72 2 227 atilde -:a 600,595,15,20,-26,20 2 228 adieresis -oa 600,627,15,19,-26,19 2 229 aring -ae 600,441,15,76,9,72 0 230 ae -,c 600,441,151,64,-56,64 0 231 ccedilla -`e 600,672,15,48,-56,48 2 232 egrave -'e 600,672,15,62,-56,62 2 233 eacute -^e 600,654,15,48,-56,48 2 234 ecircumflex -:e 600,595,15,48,-56,48 2 235 edieresis -`i 600,672,0,0,-45 2 236 igrave -'i 600,672,0,62,-45,62 2 237 iacute -^i 600,654,0,1,-45,1 2 238 icircumflex -:i 600,595,0,0,-45 2 239 idieresis -Sd 600,629,15,89,-52,72 2 240 eth -~n 600,606,0,79,24,72 2 241 ntilde -`o 600,672,15,38,-52,38 2 242 ograve -'o 600,672,15,62,-52,62 2 243 oacute -^o 600,654,15,38,-52,38 2 244 ocircumflex -~o 600,606,15,79,-52,72 2 245 otilde -:o 600,595,15,38,-52,38 2 246 odieresis -tdi 600,467,0,23,-86,23 0 247 divide -/o 600,506,80,38,-52,38 0 248 oslash -`u 600,672,15,22,-51,22 2 249 ugrave -'u 600,672,15,52,-51,52 2 250 uacute -^u 600,654,15,22,-51,22 2 251 ucircumflex -:u 600,595,15,22,-51,22 2 252 udieresis -'y 600,672,157,133,54,72 3 253 yacute -Tp 600,629,157,55,74,55 3 254 thorn -:y 600,595,157,133,54,72 3 255 ydieresis -IJ 600,562,18,152,18,72 2 256 IJ ---- 600,437,0,0,-173 0 257 up ---- 600,227,0,43,32,43 0 258 dectab -u0047_030C 600,805,18,95,-33,72 2 259 Gcaron ---- 600,562,0,150,31,72 2 260 stop ---- 600,562,0,91,31,72 2 261 tab -u2026 600,111,15,25,4,25 0 262 ellipsis ---- 600,297,0,0,-265 0 263 largebullet -u0073_0327 600,441,151,34,-28,34 0 264 scedilla ---- 600,562,0,150,-29,72 2 265 return -ij 600,657,157,80,13,72 3 266 ij ---- 600,562,0,97,42,72 2 267 LL ---- 600,562,0,150,31,72 2 268 square -da 600,608,15,0,-102 2 269 arrowdown -<- 600,483,0,143,10,72 0 270 arrowleft -<> 600,483,0,142,14,72 0 271 arrowboth ---- 600,599,0,102,-26,72 2 272 graybox --> 600,483,0,138,16,72 0 273 arrowright -u00AF 600,629,0,184,-73,72 2 274 overscore ---- 600,629,0,66,17,66 2 275 ll -u0067_030C 600,669,157,107,-11,72 3 276 gcaron -u20A4 600,611,21,71,-68,71 2 277 lira ---- 600,580,0,73,-53,72 2 278 center -u0053_0327 600,580,151,100,-26,72 2 279 Scedilla ---- 600,607,157,0,78 3 280 format -ua 600,623,0,27,-159,27 2 281 arrowup ---- 600,572,15,14,-93,14 2 282 notegraphic -u211E 600,562,15,67,23,67 2 283 prescription ---- 600,348,0,24,-58,24 0 284 indent ---- 600,426,15,0,-137 0 285 down ---- 600,348,0,30,-64,30 0 286 left -u0049_0307 600,716,0,73,-46,72 2 287 Idot ---- 600,436,15,0,-137 0 288 merge +bq 600,127,123,0,-111 0 128 quotesinglbase +Fo 600,414,0,38,-78,38 0 129 guillemotleft +Fc 600,414,0,9,-49,9 0 130 guillemotright +bu 600,478,0,0,-124 0 131 bullet +Fn 600,574,164,121,55,67 2 132 florin +f/ 600,589,100,108,42,67 2 133 fraction +%0 600,622,12,62,-12,62 2 134 perthousand +dg 600,572,48,0,-182 2 135 dagger +dd 600,572,48,0,-145 2 136 daggerdbl +en 600,276,0,21,-74,21 0 137 endash +em 600,276,0,121,7,67 0 138 emdash +fi 600,654,0,63,50,63 2 140 fi +fl 600,626,0,61,46,61 2 141 fl +.i 600,434,0,0,-52 0 144 dotlessi +ga 600,667,0,10,-223,10 2 146 grave +a" 600,690,0,82,-257,67 2 147 hungarumlaut +a. 600,642,0,0,-311 2 148 dotaccent +ab 600,634,0,79,-180,67 2 149 breve +ah 600,667,0,67,-189,67 2 150 caron +ao 600,681,0,0,-272 2 151 ring +ho 600,0,161,0,-276 0 152 ogonek +lq 600,572,0,9,-211,9 2 153 quotedblleft +rq 600,572,0,2,-106,2 2 154 quotedblright +oe 600,448,12,84,4,67 0 155 oe +/l 600,627,0,0,-47 2 156 lslash +Bq 600,127,124,0,-18 0 157 quotedblbase +OE 600,572,0,122,-8,67 2 158 OE +/L 600,572,0,49,3,49 2 159 Lslash +r! 600,451,132,0,-192 0 161 exclamdown +ct 600,614,53,35,-104,35 2 162 cent +Po 600,584,13,48,-73,48 2 163 sterling +Cs 600,595,0,96,-42,67 2 164 currency +Ye 600,572,0,137,-76,67 2 165 yen +bb 600,724,224,0,-181 3 166 brokenbar +sc 600,584,71,31,-61,31 2 167 section +ad 600,642,0,0,-231 2 168 dieresis +co 600,745,0,88,-111,67 2 169 copyright +Of 600,584,0,0,-185 2 170 ordfeminine +fo 600,414,0,0,-158 0 171 guilsinglleft +tno 600,336,0,31,-90,31 0 172 logicalnot +\- 600,244,0,13,-72,13 0 173 minus +rg 600,745,0,88,-111,67 2 174 registered +a- 600,597,0,84,-136,67 2 175 macron +de 600,584,0,0,-169 2 176 degree +t+- 600,433,107,13,-15,13 0 177 plusminus +S2 600,579,0,0,-181 2 178 twosuperior +S3 600,579,0,0,-186 2 179 threesuperior +aa 600,666,0,32,-219,32 2 180 acute +mc 600,434,167,34,-27,34 0 181 mu +ps 600,745,154,105,-143,67 2 182 paragraph +pc 600,338,0,0,-239 0 183 periodcentered +ac 600,0,182,0,-161 0 184 cedilla +S1 600,576,0,0,-180 2 185 onesuperior +Om 600,584,0,0,-210 2 186 ordmasculine +fc 600,414,0,0,-136 0 187 guilsinglright +14 600,589,100,199,-43,67 2 188 onequarter +12 600,589,100,160,-13,67 2 189 onehalf +34 600,589,100,164,-17,67 2 190 threequarters +r? 600,452,144,0,-72 0 191 questiondown +`A 600,803,0,64,56,64 2 192 Agrave +'A 600,803,0,64,56,64 2 193 Aacute +^A 600,803,0,64,56,64 2 194 Acircumflex +~A 600,782,0,103,56,67 2 195 Atilde +:A 600,785,0,64,56,64 2 196 Adieresis +oA 600,801,0,64,56,64 2 197 Aring +AE 600,572,0,119,39,67 2 198 AE +,C 600,584,194,119,-65,67 3 199 Ccedilla +`E 600,803,0,96,-7,67 2 200 Egrave +'E 600,803,0,96,-7,67 2 201 Eacute +^E 600,803,0,96,-7,67 2 202 Ecircumflex +:E 600,785,0,96,-7,67 2 203 Edieresis +`I 600,803,0,53,-59,53 2 204 Igrave +'I 600,803,0,67,-59,67 2 205 Iacute +^I 600,803,0,67,-59,67 2 206 Icircumflex +:I 600,785,0,53,-59,53 2 207 Idieresis +-D 600,572,0,75,16,67 2 208 Eth +~N 600,782,0,148,35,67 2 209 Ntilde +`O 600,803,12,72,-37,67 2 210 Ograve +'O 600,803,12,72,-37,67 2 211 Oacute +^O 600,803,12,72,-37,67 2 212 Ocircumflex +~O 600,782,12,110,-37,67 2 213 Otilde +:O 600,785,12,72,-37,67 2 214 Odieresis +tmu 600,430,0,41,-43,41 0 215 multiply +/O 600,585,27,100,-10,67 2 216 Oslash +`U 600,803,12,162,-68,67 2 217 Ugrave +'U 600,803,12,162,-68,67 2 218 Uacute +^U 600,803,12,162,-68,67 2 219 Ucircumflex +:U 600,785,12,162,-68,67 2 220 Udieresis +'Y 600,803,0,137,-85,67 2 221 Yacute +TP 600,572,0,95,-19,67 2 222 Thorn +ss 600,626,12,65,3,65 2 223 germandbls +`a 600,667,12,13,-29,13 2 224 agrave +'a 600,666,12,17,-29,17 2 225 aacute +^a 600,667,12,25,-29,25 2 226 acircumflex +~a 600,639,12,56,-29,56 2 227 atilde +:a 600,642,12,13,-29,13 2 228 adieresis +oa 600,681,12,13,-29,13 2 229 aring +ae 600,447,12,68,8,67 0 230 ae +,c 600,447,182,58,-60,58 0 231 ccedilla +`e 600,667,12,27,-49,27 2 232 egrave +'e 600,666,12,32,-49,32 2 233 eacute +^e 600,667,12,40,-49,40 2 234 ecircumflex +:e 600,642,12,27,-49,27 2 235 edieresis +`i 600,667,0,0,-52 2 236 igrave +'i 600,666,0,15,-52,15 2 237 iacute +^i 600,667,0,23,-52,23 2 238 icircumflex +:i 600,642,0,0,-52 2 239 idieresis +Sd 600,684,12,58,-35,58 2 240 eth +~n 600,639,0,71,17,67 2 241 ntilde +`o 600,667,12,51,-39,51 2 242 ograve +'o 600,666,12,51,-39,51 2 243 oacute +^o 600,667,12,51,-39,51 2 244 ocircumflex +~o 600,639,12,71,-39,67 2 245 otilde +:o 600,642,12,51,-39,51 2 246 odieresis +tdi 600,400,0,15,-74,15 0 247 divide +/o 600,451,17,90,-6,67 0 248 oslash +`u 600,667,12,30,-49,30 2 249 ugrave +'u 600,666,12,30,-49,30 2 250 uacute +^u 600,667,12,31,-49,31 2 251 ucircumflex +:u 600,642,12,30,-49,30 2 252 udieresis +'y 600,666,194,125,22,67 3 253 yacute +Tp 600,627,194,48,71,48 3 254 thorn +:y 600,642,194,125,22,67 3 255 ydieresis +u2026 600,107,12,43,13,43 0 256 ellipsis diff --git a/contrib/groff/font/devps/CR b/contrib/groff/font/devps/CR index df194213a6..61b70c3b27 100644 --- a/contrib/groff/font/devps/CR +++ b/contrib/groff/font/devps/CR @@ -1,281 +1,265 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Courier +# Version 004.000 +# FamilyName Courier +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1989, 1990, 1991, 1992, 1993, 1996, 1997, 1998 Adobe Systems Incorporated. All Rights Reserved. +# Comment Copyright (c) 1989, 1990, 1991, 1992, 1993, 1996, 1997, 1998 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Wed Aug 26 16:50:02 1998 +# Comment UniqueID 44052 +# Comment VMusage 31569 38505 + name CR internalname Courier spacewidth 600 encoding text.enc + charset -ha 600,622 2 0 asciicircum -ti 600,320 0 1 asciitilde -vS 600,805,20 2 2 Scaron -vZ 600,805 2 3 Zcaron -vs 600,669,15 2 4 scaron -vz 600,669 2 5 zcaron -:Y 600,731 2 6 Ydieresis -tm 600,562,0,23,23 2 7 trademark -aq 600,562 2 8 quotesingle +ha 600,750 2 0 asciicircum +ti 600,274 0 1 asciitilde +vS 600,803,12 2 2 Scaron +vZ 600,803 2 3 Zcaron +vs 600,667,12 2 4 scaron +vz 600,667 2 5 zcaron +:Y 600,785 2 6 Ydieresis +tm 600,678 2 7 trademark +aq 600,572 2 8 quotesingle +Eu 600,584,12 2 9 Euro space 600 0 32 space -! 600,572,15 2 33 exclam -" 600,562 2 34 quotedbl +! 600,572,12 2 33 exclam +" 600,572 2 34 quotedbl dq " -# 600,639,32 2 35 numbersign +# 600,639,77 2 35 numbersign sh " -$ 600,662,126 2 36 dollar +$ 600,655,137 2 36 dollar Do " -% 600,622,15 2 37 percent -& 600,543,15 0 38 ampersand -' 600,562 2 39 quoteright +% 600,622,12 2 37 percent +& 600,539,12 0 38 ampersand +' 600,572 2 39 quoteright cq " -( 600,622,108 2 40 parenleft -) 600,622,108 2 41 parenright -* 600,607 2 42 asterisk -+ 600,470 0 43 plus -, 600,122,112 0 44 comma -- 600,285 0 45 hyphen +( 600,648,97 2 40 parenleft +) 600,648,97 2 41 parenright +* 600,572 2 42 asterisk ++ 600,432 0 43 plus +, 600,121,129 0 44 comma +- 600,276 0 45 hyphen hy " -. 600,109,15 0 46 period -/ 600,629,80 2 47 slash +. 600,107,12 0 46 period +/ 600,701,143 2 47 slash sl " -0 600,622,15 2 48 zero -1 600,622 2 49 one -2 600,622 2 50 two -3 600,622,15 2 51 three -4 600,622 2 52 four -5 600,607,15 2 53 five -6 600,622,15 2 54 six -7 600,607 2 55 seven -8 600,622,15 2 56 eight -9 600,622,15 2 57 nine -: 600,385,15 0 58 colon -; 600,385,112 0 59 semicolon -< 600,472 0 60 less -= 600,376 0 61 equal -> 600,472 0 62 greater -? 600,572,15 2 63 question -@ 600,622,15 2 64 at +0 600,584,12 2 48 zero +1 600,584 2 49 one +2 600,584 2 50 two +3 600,584,12 2 51 three +4 600,572 2 52 four +5 600,572,12 2 53 five +6 600,584,13 2 54 six +7 600,572 2 55 seven +8 600,585,13 2 56 eight +9 600,584,13 2 57 nine +: 600,368,14 0 58 colon +; 600,368,129 0 59 semicolon +< 600,404,1 0 60 less += 600,321 0 61 equal +> 600,404 0 62 greater +? 600,584,12 2 63 question +@ 600,543,14 0 64 at at " -A 600,562 2 65 A -B 600,562 2 66 B -C 600,580,18 2 67 C -D 600,562 2 68 D -E 600,562 2 69 E -F 600,562 2 70 F -G 600,580,18 2 71 G -H 600,562 2 72 H -I 600,562 2 73 I -J 600,562,18 2 74 J -K 600,562 2 75 K -L 600,562 2 76 L -M 600,562 2 77 M -N 600,562,13 2 78 N -O 600,580,18 2 79 O -P 600,562 2 80 P -Q 600,580,138 2 81 Q -R 600,562 2 82 R -S 600,580,20 2 83 S -T 600,562 2 84 T -U 600,562,18 2 85 U -V 600,562,13,4,4 2 86 V -W 600,562,13,3,3 2 87 W -X 600,562 2 88 X -Y 600,562 2 89 Y -Z 600,562 2 90 Z -[ 600,622,108 2 91 bracketleft +A 600,572,0,3,6 2 65 A +B 600,572 2 66 B +C 600,584,13 2 67 C +D 600,572 2 68 D +E 600,572 2 69 E +F 600,572 2 70 F +G 600,584,12 2 71 G +H 600,572 2 72 H +I 600,572 2 73 I +J 600,572,12 2 74 J +K 600,572,0,12 2 75 K +L 600,572 2 76 L +M 600,572 2 77 M +N 600,572 2 78 N +O 600,585,12 2 79 O +P 600,572 2 80 P +Q 600,584,126 2 81 Q +R 600,572 2 82 R +S 600,584,12 2 83 S +T 600,572 2 84 T +U 600,572,12 2 85 U +V 600,572 2 86 V +W 600,572 2 87 W +X 600,572 2 88 X +Y 600,572 2 89 Y +Z 600,572 2 90 Z +[ 600,648,97 2 91 bracketleft lB " -\ 600,629,80 2 92 backslash +\ 600,701,142 2 92 backslash rs " -] 600,622,108 2 93 bracketright +] 600,648,97 2 93 bracketright rB " -a^ 600,654 2 94 circumflex +a^ 600,667 2 94 circumflex ^ " -_ 600,0,125 0 95 underscore -` 600,562 2 96 quoteleft +_ 600,0,249 1 95 underscore +` 600,572 2 96 quoteleft oq " -a 600,441,15 0 97 a -b 600,629,15 2 98 b -c 600,441,15 0 99 c -d 600,629,15 2 100 d -e 600,441,15 0 101 e -f 600,629 2 102 f -g 600,441,157 1 103 g -h 600,629 2 104 h -i 600,657 2 105 i -j 600,657,157 3 106 j -k 600,629 2 107 k -l 600,629 2 108 l -m 600,441,0,5,5 0 109 m -n 600,441 0 110 n -o 600,441,15 0 111 o -p 600,441,157 1 112 p -q 600,441,157 1 113 q -r 600,441 0 114 r -s 600,441,15 0 115 s -t 600,561,15 2 116 t -u 600,426,15 0 117 u -v 600,426,10 0 118 v -w 600,426,10,4,4 0 119 w -x 600,426 0 120 x -y 600,426,157 1 121 y -z 600,426 0 122 z -lC 600,622,108 2 123 braceleft +a 600,447,12 0 97 a +b 600,627,12 2 98 b +c 600,447,12 0 99 c +d 600,627,12 2 100 d +e 600,447,12 0 101 e +f 600,626 2 102 f +g 600,447,194 1 103 g +h 600,627 2 104 h +i 600,654 2 105 i +j 600,654,193 3 106 j +k 600,627 2 107 k +l 600,627 2 108 l +m 600,447 0 109 m +n 600,447 0 110 n +o 600,447,12 0 111 o +p 600,447,194 1 112 p +q 600,447,194 1 113 q +r 600,447 0 114 r +s 600,447,12 0 115 s +t 600,563,12 2 116 t +u 600,434,12 0 117 u +v 600,434 0 118 v +w 600,434 0 119 w +x 600,434 0 120 x +y 600,434,194 1 121 y +z 600,434 0 122 z +lC 600,764,230 3 123 braceleft { " -ba 600,750,250 3 124 bar +ba 600,750,249 3 124 bar | " -rC 600,622,108 2 125 braceright +rC 600,764,230 3 125 braceright } " -a~ 600,606 2 126 tilde +a~ 600,639 2 126 tilde ~ " -bq 600,100,134 0 128 quotesinglbase -Fo 600,446 0 129 guillemotleft -Fc 600,446 0 130 guillemotright -bu 600,383 0 131 bullet -Fn 600,622,143 2 132 florin -f/ 600,665,57 2 133 fraction -%0 600,622,15 2 134 perthousand -dg 600,580,78 2 135 dagger -dd 600,580,78 2 136 daggerdbl -en 600,285 0 137 endash -em 600,285 0 138 emdash -fi 600,629 2 140 fi -fl 600,629 2 141 fl -.i 600,426 0 144 dotlessi -ga 600,672 2 146 grave -a" 600,672 2 147 hungarumlaut -a. 600,580 2 148 dotaccent -ab 600,609 2 149 breve -ah 600,669 2 150 caron -ao 600,627 2 151 ring -ho 600,0,151 0 152 ogonek -lq 600,562 2 153 quotedblleft -rq 600,562 2 154 quotedblright -oe 600,441,15 0 155 oe -/l 600,629 2 156 lslash -Bq 600,100,134 0 157 quotedblbase -OE 600,562 2 158 OE -/L 600,562 2 159 Lslash -r! 600,430,157 1 161 exclamdown -ct 600,614,49 2 162 cent -Po 600,611,21 2 163 sterling -Cs 600,506 0 164 currency -Ye 600,562 2 165 yen -bb 600,675,175 3 166 brokenbar -sc 600,580,78 2 167 section -ad 600,595 2 168 dieresis -co 600,580,18 2 169 copyright -Of 600,580 2 170 ordfeminine -fo 600,446 0 171 guilsinglleft -tno 600,369 0 172 logicalnot -\- 600,283 0 173 minus -rg 600,580,18 2 174 registered -a- 600,565 2 175 macron -de 600,622 2 176 degree -t+- 600,558 0 177 plusminus -S2 600,622 2 178 twosuperior -S3 600,622 2 179 threesuperior -aa 600,672 2 180 acute -mc 600,426,157 1 181 mu -ps 600,562,78 2 182 paragraph -pc 600,327 0 183 periodcentered -ac 600,10,151 0 184 cedilla -S1 600,622 2 185 onesuperior -Om 600,580 2 186 ordmasculine -fc 600,446 0 187 guilsinglright -14 600,665,57 2 188 onequarter -12 600,665,57,11 2 189 onehalf -34 600,666,56 2 190 threequarters -r? 600,430,157 1 191 questiondown -`A 600,793 2 192 Agrave -'A 600,793 2 193 Aacute -^A 600,775 2 194 Acircumflex -~A 600,732 2 195 Atilde -:A 600,731 2 196 Adieresis -oA 600,753 2 197 Aring -AE 600,562 2 198 AE -,C 600,580,151 2 199 Ccedilla -`E 600,793 2 200 Egrave -'E 600,793 2 201 Eacute -^E 600,775 2 202 Ecircumflex -:E 600,731 2 203 Edieresis -`I 600,793 2 204 Igrave -'I 600,793 2 205 Iacute -^I 600,775 2 206 Icircumflex -:I 600,731 2 207 Idieresis --D 600,562 2 208 Eth -~N 600,732,13 2 209 Ntilde -`O 600,793,18 2 210 Ograve -'O 600,793,18 2 211 Oacute -^O 600,775,18 2 212 Ocircumflex -~O 600,732,18 2 213 Otilde -:O 600,731,18 2 214 Odieresis -tmu 600,470 0 215 multiply -/O 600,629,80 2 216 Oslash -`U 600,793,18 2 217 Ugrave -'U 600,793,18 2 218 Uacute -^U 600,775,18 2 219 Ucircumflex -:U 600,731,18 2 220 Udieresis -'Y 600,793 2 221 Yacute -TP 600,562 2 222 Thorn -ss 600,629,15 2 223 germandbls -`a 600,672,15 2 224 agrave -'a 600,672,15 2 225 aacute -^a 600,654,15 2 226 acircumflex -~a 600,606,15 2 227 atilde -:a 600,595,15 2 228 adieresis -oa 600,627,15 2 229 aring -ae 600,441,15 0 230 ae -,c 600,441,151 0 231 ccedilla -`e 600,672,15 2 232 egrave -'e 600,672,15 2 233 eacute -^e 600,654,15 2 234 ecircumflex -:e 600,595,15 2 235 edieresis -`i 600,672 2 236 igrave -'i 600,672 2 237 iacute -^i 600,654 2 238 icircumflex -:i 600,595 2 239 idieresis -Sd 600,629,15 2 240 eth -~n 600,606 2 241 ntilde -`o 600,672,15 2 242 ograve -'o 600,672,15 2 243 oacute -^o 600,654,15 2 244 ocircumflex -~o 600,606,15 2 245 otilde -:o 600,595,15 2 246 odieresis -tdi 600,467 0 247 divide -/o 600,506,80 0 248 oslash -`u 600,672,15 2 249 ugrave -'u 600,672,15 2 250 uacute -^u 600,654,15 2 251 ucircumflex -:u 600,595,15 2 252 udieresis -'y 600,672,157 3 253 yacute -Tp 600,629,157,0,6 3 254 thorn -:y 600,595,157 3 255 ydieresis -IJ 600,562,18 2 256 IJ ---- 600,437 0 257 up ---- 600,227 0 258 dectab -u0047_030C 600,805,18 2 259 Gcaron ---- 600,562 2 260 stop ---- 600,562 2 261 tab -u2026 600,111,15 0 262 ellipsis ---- 600,297 0 263 largebullet -u0073_0327 600,441,151 0 264 scedilla ---- 600,562 2 265 return -ij 600,657,157 3 266 ij ---- 600,562 2 267 LL ---- 600,562 2 268 square -da 600,608,15 2 269 arrowdown -<- 600,483,0,24,24 0 270 arrowleft -<> 600,483,0,28,28 0 271 arrowboth ---- 600,599 2 272 graybox --> 600,483,0,24,24 0 273 arrowright -u00AF 600,629 2 274 overscore ---- 600,629 2 275 ll -u0067_030C 600,669,157 3 276 gcaron -u20A4 600,611,21 2 277 lira ---- 600,580 2 278 center -u0053_0327 600,580,151 2 279 Scedilla ---- 600,607,157 3 280 format -ua 600,623 2 281 arrowup ---- 600,572,15 2 282 notegraphic -u211E 600,562,15 2 283 prescription ---- 600,348 0 284 indent ---- 600,426,15 0 285 down ---- 600,348 0 286 left -u0049_0307 600,716 2 287 Idot ---- 600,436,15 0 288 merge +bq 600,127,123 0 128 quotesinglbase +Fo 600,414 0 129 guillemotleft +Fc 600,414 0 130 guillemotright +bu 600,478 0 131 bullet +Fn 600,574,164 2 132 florin +f/ 600,589,100 2 133 fraction +%0 600,622,12 2 134 perthousand +dg 600,572,48 2 135 dagger +dd 600,572,48 2 136 daggerdbl +en 600,276 0 137 endash +em 600,276,0,17 0 138 emdash +fi 600,654 2 140 fi +fl 600,626 2 141 fl +.i 600,434 0 144 dotlessi +ga 600,667 2 146 grave +a" 600,690 2 147 hungarumlaut +a. 600,642 2 148 dotaccent +ab 600,634 2 149 breve +ah 600,667 2 150 caron +ao 600,681 2 151 ring +ho 600,0,161 0 152 ogonek +lq 600,572 2 153 quotedblleft +rq 600,572 2 154 quotedblright +oe 600,448,12 0 155 oe +/l 600,627 2 156 lslash +Bq 600,127,124 0 157 quotedblbase +OE 600,572 2 158 OE +/L 600,572 2 159 Lslash +r! 600,451,132 0 161 exclamdown +ct 600,614,53 2 162 cent +Po 600,584,13 2 163 sterling +Cs 600,595 2 164 currency +Ye 600,572 2 165 yen +bb 600,724,224 3 166 brokenbar +sc 600,584,71 2 167 section +ad 600,642 2 168 dieresis +co 600,745 2 169 copyright +Of 600,584 2 170 ordfeminine +fo 600,414 0 171 guilsinglleft +tno 600,336 0 172 logicalnot +\- 600,244 0 173 minus +rg 600,745 2 174 registered +a- 600,597 2 175 macron +de 600,584 2 176 degree +t+- 600,433,107 0 177 plusminus +S2 600,579 2 178 twosuperior +S3 600,579 2 179 threesuperior +aa 600,666 2 180 acute +mc 600,434,167 0 181 mu +ps 600,745,154 2 182 paragraph +pc 600,338 0 183 periodcentered +ac 600,0,182 0 184 cedilla +S1 600,576 2 185 onesuperior +Om 600,584 2 186 ordmasculine +fc 600,414 0 187 guilsinglright +14 600,589,100,39 2 188 onequarter +12 600,589,100 2 189 onehalf +34 600,589,100,4 2 190 threequarters +r? 600,452,144 0 191 questiondown +`A 600,803,0,3,6 2 192 Agrave +'A 600,803,0,3,6 2 193 Aacute +^A 600,803,0,3,6 2 194 Acircumflex +~A 600,782,0,3,6 2 195 Atilde +:A 600,785,0,3,6 2 196 Adieresis +oA 600,801,0,3,6 2 197 Aring +AE 600,572 2 198 AE +,C 600,584,194 3 199 Ccedilla +`E 600,803 2 200 Egrave +'E 600,803 2 201 Eacute +^E 600,803 2 202 Ecircumflex +:E 600,785 2 203 Edieresis +`I 600,803 2 204 Igrave +'I 600,803 2 205 Iacute +^I 600,803 2 206 Icircumflex +:I 600,785 2 207 Idieresis +-D 600,572 2 208 Eth +~N 600,782 2 209 Ntilde +`O 600,803,12 2 210 Ograve +'O 600,803,12 2 211 Oacute +^O 600,803,12 2 212 Ocircumflex +~O 600,782,12 2 213 Otilde +:O 600,785,12 2 214 Odieresis +tmu 600,430 0 215 multiply +/O 600,585,27 2 216 Oslash +`U 600,803,12 2 217 Ugrave +'U 600,803,12 2 218 Uacute +^U 600,803,12 2 219 Ucircumflex +:U 600,785,12 2 220 Udieresis +'Y 600,803 2 221 Yacute +TP 600,572 2 222 Thorn +ss 600,626,12 2 223 germandbls +`a 600,667,12 2 224 agrave +'a 600,666,12 2 225 aacute +^a 600,667,12 2 226 acircumflex +~a 600,639,12 2 227 atilde +:a 600,642,12 2 228 adieresis +oa 600,681,12 2 229 aring +ae 600,447,12 0 230 ae +,c 600,447,182 0 231 ccedilla +`e 600,667,12 2 232 egrave +'e 600,666,12 2 233 eacute +^e 600,667,12 2 234 ecircumflex +:e 600,642,12 2 235 edieresis +`i 600,667 2 236 igrave +'i 600,666 2 237 iacute +^i 600,667 2 238 icircumflex +:i 600,642 2 239 idieresis +Sd 600,684,12 2 240 eth +~n 600,639 2 241 ntilde +`o 600,667,12 2 242 ograve +'o 600,666,12 2 243 oacute +^o 600,667,12 2 244 ocircumflex +~o 600,639,12 2 245 otilde +:o 600,642,12 2 246 odieresis +tdi 600,400 0 247 divide +/o 600,451,17 0 248 oslash +`u 600,667,12 2 249 ugrave +'u 600,666,12 2 250 uacute +^u 600,667,12 2 251 ucircumflex +:u 600,642,12 2 252 udieresis +'y 600,666,194 3 253 yacute +Tp 600,627,194 3 254 thorn +:y 600,642,194 3 255 ydieresis +u2026 600,107,12 0 256 ellipsis diff --git a/contrib/groff/font/devps/EURO b/contrib/groff/font/devps/EURO index e1459e6476..c5b359bc02 100644 --- a/contrib/groff/font/devps/EURO +++ b/contrib/groff/font/devps/EURO @@ -1,5 +1,18 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName FreeEuro +# Version 001.001 +# FamilyName FreeEuro +# +# The original AFM file contains the following comments: +# +# Notice (Created by Werner Lemberg with PfaEdit 1.0 (http://pfaedit.sf.net); the serif shapes are based on the Omega fonts created by Yannis Haralambous.) +# Comment Generated by FontForge 20060105 +# Comment Creation Date: Sun Jan 8 10:14:22 2006 + name EURO internalname FreeEuro + charset --- 750,685,12 3 0 Euro.symbol --- 750,685,12 3 1 Euro.symbol.bold diff --git a/contrib/groff/font/devps/HB b/contrib/groff/font/devps/HB index ac3c1f3548..ba26015967 100644 --- a/contrib/groff/font/devps/HB +++ b/contrib/groff/font/devps/HB @@ -1,239 +1,1230 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Helvetica Bold +# Version 003.001 +# FamilyName Helvetica +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 12:45:17 1999 +# Comment UniqueID 44699 +# Comment VMusage 29305 36241 + name HB internalname Helvetica-Bold spacewidth 278 encoding text.enc ligatures fi fl 0 + kernpairs -A y -30 -A w -30 -A v -40 -A u -30 -A Y -110 -A W -60 -A V -80 -A U -50 -A T -90 -A Q -40 -A O -40 -A G -50 A C -40 -B U -10 +A ,C -40 +A G -50 +A O -40 +A 'O -40 +A ^O -40 +A :O -40 +A `O -40 +A /O -40 +A ~O -40 +A Q -40 +A T -90 +A U -50 +A 'U -50 +A ^U -50 +A :U -50 +A `U -50 +A V -80 +A W -60 +A Y -110 +A 'Y -110 +A :Y -110 +A u -30 +A 'u -30 +A ^u -30 +A :u -30 +A `u -30 +A v -40 +A w -30 +A y -30 +A 'y -30 +A :y -30 +'A C -40 +'A ,C -40 +'A G -50 +'A O -40 +'A 'O -40 +'A ^O -40 +'A :O -40 +'A `O -40 +'A /O -40 +'A ~O -40 +'A Q -40 +'A T -90 +'A U -50 +'A 'U -50 +'A ^U -50 +'A :U -50 +'A `U -50 +'A V -80 +'A W -60 +'A Y -110 +'A 'Y -110 +'A :Y -110 +'A u -30 +'A 'u -30 +'A ^u -30 +'A :u -30 +'A `u -30 +'A v -40 +'A w -30 +'A y -30 +'A 'y -30 +'A :y -30 +^A C -40 +^A ,C -40 +^A G -50 +^A O -40 +^A 'O -40 +^A ^O -40 +^A :O -40 +^A `O -40 +^A /O -40 +^A ~O -40 +^A Q -40 +^A T -90 +^A U -50 +^A 'U -50 +^A ^U -50 +^A :U -50 +^A `U -50 +^A V -80 +^A W -60 +^A Y -110 +^A 'Y -110 +^A :Y -110 +^A u -30 +^A 'u -30 +^A ^u -30 +^A :u -30 +^A `u -30 +^A v -40 +^A w -30 +^A y -30 +^A 'y -30 +^A :y -30 +:A C -40 +:A ,C -40 +:A G -50 +:A O -40 +:A 'O -40 +:A ^O -40 +:A :O -40 +:A `O -40 +:A /O -40 +:A ~O -40 +:A Q -40 +:A T -90 +:A U -50 +:A 'U -50 +:A ^U -50 +:A :U -50 +:A `U -50 +:A V -80 +:A W -60 +:A Y -110 +:A 'Y -110 +:A :Y -110 +:A u -30 +:A 'u -30 +:A ^u -30 +:A :u -30 +:A `u -30 +:A v -40 +:A w -30 +:A y -30 +:A 'y -30 +:A :y -30 +`A C -40 +`A ,C -40 +`A G -50 +`A O -40 +`A 'O -40 +`A ^O -40 +`A :O -40 +`A `O -40 +`A /O -40 +`A ~O -40 +`A Q -40 +`A T -90 +`A U -50 +`A 'U -50 +`A ^U -50 +`A :U -50 +`A `U -50 +`A V -80 +`A W -60 +`A Y -110 +`A 'Y -110 +`A :Y -110 +`A u -30 +`A 'u -30 +`A ^u -30 +`A :u -30 +`A `u -30 +`A v -40 +`A w -30 +`A y -30 +`A 'y -30 +`A :y -30 +oA C -40 +oA ,C -40 +oA G -50 +oA O -40 +oA 'O -40 +oA ^O -40 +oA :O -40 +oA `O -40 +oA /O -40 +oA ~O -40 +oA Q -40 +oA T -90 +oA U -50 +oA 'U -50 +oA ^U -50 +oA :U -50 +oA `U -50 +oA V -80 +oA W -60 +oA Y -110 +oA 'Y -110 +oA :Y -110 +oA u -30 +oA 'u -30 +oA ^u -30 +oA :u -30 +oA `u -30 +oA v -40 +oA w -30 +oA y -30 +oA 'y -30 +oA :y -30 +~A C -40 +~A ,C -40 +~A G -50 +~A O -40 +~A 'O -40 +~A ^O -40 +~A :O -40 +~A `O -40 +~A /O -40 +~A ~O -40 +~A Q -40 +~A T -90 +~A U -50 +~A 'U -50 +~A ^U -50 +~A :U -50 +~A `U -50 +~A V -80 +~A W -60 +~A Y -110 +~A 'Y -110 +~A :Y -110 +~A u -30 +~A 'u -30 +~A ^u -30 +~A :u -30 +~A `u -30 +~A v -40 +~A w -30 +~A y -30 +~A 'y -30 +~A :y -30 B A -30 -D . -30 -D , -30 -D Y -70 -D W -40 -D V -40 +B 'A -30 +B ^A -30 +B :A -30 +B `A -30 +B oA -30 +B ~A -30 +B U -10 +B 'U -10 +B ^U -10 +B :U -10 +B `U -10 D A -40 -F . -100 -F , -100 -F a -20 +D 'A -40 +D ^A -40 +D :A -40 +D `A -40 +D oA -40 +D ~A -40 +D V -40 +D W -40 +D Y -70 +D 'Y -70 +D :Y -70 +D , -30 +D . -30 F A -80 -J u -20 -J . -20 -J , -20 +F 'A -80 +F ^A -80 +F :A -80 +F `A -80 +F oA -80 +F ~A -80 +F a -20 +F 'a -20 +F ^a -20 +F :a -20 +F `a -20 +F oa -20 +F ~a -20 +F , -100 +F . -100 J A -20 -K y -40 -K u -30 -K o -35 -K e -15 +J 'A -20 +J ^A -20 +J :A -20 +J `A -20 +J oA -20 +J ~A -20 +J , -20 +J . -20 +J u -20 +J 'u -20 +J ^u -20 +J :u -20 +J `u -20 K O -30 -L y -30 +K 'O -30 +K ^O -30 +K :O -30 +K `O -30 +K /O -30 +K ~O -30 +K e -15 +K 'e -15 +K ^e -15 +K :e -15 +K `e -15 +K o -35 +K 'o -35 +K ^o -35 +K :o -35 +K `o -35 +K /o -35 +K ~o -35 +K u -30 +K 'u -30 +K ^u -30 +K :u -30 +K `u -30 +K y -40 +K 'y -40 +K :y -40 +L T -90 +L V -110 +L W -80 +L Y -120 +L 'Y -120 +L :Y -120 +L rq -140 L ' -140 L cq -140 -L rq -140 -L Y -120 -L W -80 -L V -110 -L T -90 -O . -40 -O , -40 -O Y -70 -O X -50 -O W -50 -O V -50 -O T -40 +L y -30 +L 'y -30 +L :y -30 +/L T -90 +/L V -110 +/L W -80 +/L Y -120 +/L 'Y -120 +/L :Y -120 +/L rq -140 +/L ' -140 +/L cq -140 +/L y -30 +/L 'y -30 +/L :y -30 O A -50 -P . -120 -P o -40 -P e -30 -P , -120 -P a -30 +O 'A -50 +O ^A -50 +O :A -50 +O `A -50 +O oA -50 +O ~A -50 +O T -40 +O V -50 +O W -50 +O X -50 +O Y -70 +O 'Y -70 +O :Y -70 +O , -40 +O . -40 +'O A -50 +'O 'A -50 +'O ^A -50 +'O :A -50 +'O `A -50 +'O oA -50 +'O ~A -50 +'O T -40 +'O V -50 +'O W -50 +'O X -50 +'O Y -70 +'O 'Y -70 +'O :Y -70 +'O , -40 +'O . -40 +^O A -50 +^O 'A -50 +^O ^A -50 +^O :A -50 +^O `A -50 +^O oA -50 +^O ~A -50 +^O T -40 +^O V -50 +^O W -50 +^O X -50 +^O Y -70 +^O 'Y -70 +^O :Y -70 +^O , -40 +^O . -40 +:O A -50 +:O 'A -50 +:O ^A -50 +:O :A -50 +:O `A -50 +:O oA -50 +:O ~A -50 +:O T -40 +:O V -50 +:O W -50 +:O X -50 +:O Y -70 +:O 'Y -70 +:O :Y -70 +:O , -40 +:O . -40 +`O A -50 +`O 'A -50 +`O ^A -50 +`O :A -50 +`O `A -50 +`O oA -50 +`O ~A -50 +`O T -40 +`O V -50 +`O W -50 +`O X -50 +`O Y -70 +`O 'Y -70 +`O :Y -70 +`O , -40 +`O . -40 +/O A -50 +/O 'A -50 +/O ^A -50 +/O :A -50 +/O `A -50 +/O oA -50 +/O ~A -50 +/O T -40 +/O V -50 +/O W -50 +/O X -50 +/O Y -70 +/O 'Y -70 +/O :Y -70 +/O , -40 +/O . -40 +~O A -50 +~O 'A -50 +~O ^A -50 +~O :A -50 +~O `A -50 +~O oA -50 +~O ~A -50 +~O T -40 +~O V -50 +~O W -50 +~O X -50 +~O Y -70 +~O 'Y -70 +~O :Y -70 +~O , -40 +~O . -40 P A -100 -Q . 20 -Q , 20 +P 'A -100 +P ^A -100 +P :A -100 +P `A -100 +P oA -100 +P ~A -100 +P a -30 +P 'a -30 +P ^a -30 +P :a -30 +P `a -30 +P oa -30 +P ~a -30 +P , -120 +P e -30 +P 'e -30 +P ^e -30 +P :e -30 +P `e -30 +P o -40 +P 'o -40 +P ^o -40 +P :o -40 +P `o -40 +P /o -40 +P ~o -40 +P . -120 Q U -10 -R Y -50 -R W -40 -R V -50 -R U -20 -R T -20 +Q 'U -10 +Q ^U -10 +Q :U -10 +Q `U -10 +Q , 20 +Q . 20 R O -20 -T y -60 -T w -60 -T u -90 -T ; -40 -T r -80 -T . -80 -T o -80 +R 'O -20 +R ^O -20 +R :O -20 +R `O -20 +R /O -20 +R ~O -20 +R T -20 +R U -20 +R 'U -20 +R ^U -20 +R :U -20 +R `U -20 +R V -50 +R W -40 +R Y -50 +R 'Y -50 +R :Y -50 +T A -90 +T 'A -90 +T ^A -90 +T :A -90 +T `A -90 +T oA -90 +T ~A -90 +T O -40 +T 'O -40 +T ^O -40 +T :O -40 +T `O -40 +T /O -40 +T ~O -40 +T a -80 +T 'a -80 +T ^a -80 +T :a -80 +T `a -80 +T oa -80 +T ~a -80 +T : -40 +T , -80 +T e -60 +T 'e -60 +T ^e -60 +T :e -60 +T `e -60 T - -120 T hy -120 -T e -60 -T , -80 -T : -40 -T a -80 -T O -40 -T A -90 -U . -30 -U , -30 +T o -80 +T 'o -80 +T ^o -80 +T :o -80 +T `o -80 +T /o -80 +T ~o -80 +T . -80 +T r -80 +T ; -40 +T u -90 +T 'u -90 +T ^u -90 +T :u -90 +T `u -90 +T w -60 +T y -60 +T 'y -60 +T :y -60 U A -50 -V u -60 -V ; -40 -V . -120 -V o -90 +U 'A -50 +U ^A -50 +U :A -50 +U `A -50 +U oA -50 +U ~A -50 +U , -30 +U . -30 +'U A -50 +'U 'A -50 +'U ^A -50 +'U :A -50 +'U `A -50 +'U oA -50 +'U ~A -50 +'U , -30 +'U . -30 +^U A -50 +^U 'A -50 +^U ^A -50 +^U :A -50 +^U `A -50 +^U oA -50 +^U ~A -50 +^U , -30 +^U . -30 +:U A -50 +:U 'A -50 +:U ^A -50 +:U :A -50 +:U `A -50 +:U oA -50 +:U ~A -50 +:U , -30 +:U . -30 +`U A -50 +`U 'A -50 +`U ^A -50 +`U :A -50 +`U `A -50 +`U oA -50 +`U ~A -50 +`U , -30 +`U . -30 +V A -80 +V 'A -80 +V ^A -80 +V :A -80 +V `A -80 +V oA -80 +V ~A -80 +V G -50 +V O -50 +V 'O -50 +V ^O -50 +V :O -50 +V `O -50 +V /O -50 +V ~O -50 +V a -60 +V 'a -60 +V ^a -60 +V :a -60 +V `a -60 +V oa -60 +V ~a -60 +V : -40 +V , -120 +V e -50 +V 'e -50 +V ^e -50 +V :e -50 +V `e -50 V - -80 V hy -80 -V e -50 -V , -120 -V : -40 -V a -60 -V O -50 -V G -50 -V A -80 -W y -20 -W u -45 -W ; -10 -W . -80 -W o -60 +V o -90 +V 'o -90 +V ^o -90 +V :o -90 +V `o -90 +V /o -90 +V ~o -90 +V . -120 +V ; -40 +V u -60 +V 'u -60 +V ^u -60 +V :u -60 +V `u -60 +W A -60 +W 'A -60 +W ^A -60 +W :A -60 +W `A -60 +W oA -60 +W ~A -60 +W O -20 +W 'O -20 +W ^O -20 +W :O -20 +W `O -20 +W /O -20 +W ~O -20 +W a -40 +W 'a -40 +W ^a -40 +W :a -40 +W `a -40 +W oa -40 +W ~a -40 +W : -10 +W , -80 +W e -35 +W 'e -35 +W ^e -35 +W :e -35 +W `e -35 W - -40 W hy -40 -W e -35 -W , -80 -W : -10 -W a -40 -W O -20 -W A -60 -Y u -100 -Y ; -50 -Y . -100 -Y o -100 -Y e -80 -Y , -100 -Y : -50 -Y a -90 -Y O -70 +W o -60 +W 'o -60 +W ^o -60 +W :o -60 +W `o -60 +W /o -60 +W ~o -60 +W . -80 +W ; -10 +W u -45 +W 'u -45 +W ^u -45 +W :u -45 +W `u -45 +W y -20 +W 'y -20 +W :y -20 Y A -110 -a y -20 -a w -15 -a v -15 +Y 'A -110 +Y ^A -110 +Y :A -110 +Y `A -110 +Y oA -110 +Y ~A -110 +Y O -70 +Y 'O -70 +Y ^O -70 +Y :O -70 +Y `O -70 +Y /O -70 +Y ~O -70 +Y a -90 +Y 'a -90 +Y ^a -90 +Y :a -90 +Y `a -90 +Y oa -90 +Y ~a -90 +Y : -50 +Y , -100 +Y e -80 +Y 'e -80 +Y ^e -80 +Y :e -80 +Y `e -80 +Y o -100 +Y 'o -100 +Y ^o -100 +Y :o -100 +Y `o -100 +Y /o -100 +Y ~o -100 +Y . -100 +Y ; -50 +Y u -100 +Y 'u -100 +Y ^u -100 +Y :u -100 +Y `u -100 +'Y A -110 +'Y 'A -110 +'Y ^A -110 +'Y :A -110 +'Y `A -110 +'Y oA -110 +'Y ~A -110 +'Y O -70 +'Y 'O -70 +'Y ^O -70 +'Y :O -70 +'Y `O -70 +'Y /O -70 +'Y ~O -70 +'Y a -90 +'Y 'a -90 +'Y ^a -90 +'Y :a -90 +'Y `a -90 +'Y oa -90 +'Y ~a -90 +'Y : -50 +'Y , -100 +'Y e -80 +'Y 'e -80 +'Y ^e -80 +'Y :e -80 +'Y `e -80 +'Y o -100 +'Y 'o -100 +'Y ^o -100 +'Y :o -100 +'Y `o -100 +'Y /o -100 +'Y ~o -100 +'Y . -100 +'Y ; -50 +'Y u -100 +'Y 'u -100 +'Y ^u -100 +'Y :u -100 +'Y `u -100 +:Y A -110 +:Y 'A -110 +:Y ^A -110 +:Y :A -110 +:Y `A -110 +:Y oA -110 +:Y ~A -110 +:Y O -70 +:Y 'O -70 +:Y ^O -70 +:Y :O -70 +:Y `O -70 +:Y /O -70 +:Y ~O -70 +:Y a -90 +:Y 'a -90 +:Y ^a -90 +:Y :a -90 +:Y `a -90 +:Y oa -90 +:Y ~a -90 +:Y : -50 +:Y , -100 +:Y e -80 +:Y 'e -80 +:Y ^e -80 +:Y :e -80 +:Y `e -80 +:Y o -100 +:Y 'o -100 +:Y ^o -100 +:Y :o -100 +:Y `o -100 +:Y /o -100 +:Y ~o -100 +:Y . -100 +:Y ; -50 +:Y u -100 +:Y 'u -100 +:Y ^u -100 +:Y :u -100 +:Y `u -100 a g -10 -b y -20 -b v -20 -b u -20 +a v -15 +a w -15 +a y -20 +a 'y -20 +a :y -20 +'a g -10 +'a v -15 +'a w -15 +'a y -20 +'a 'y -20 +'a :y -20 +^a g -10 +^a v -15 +^a w -15 +^a y -20 +^a 'y -20 +^a :y -20 +:a g -10 +:a v -15 +:a w -15 +:a y -20 +:a 'y -20 +:a :y -20 +`a g -10 +`a v -15 +`a w -15 +`a y -20 +`a 'y -20 +`a :y -20 +oa g -10 +oa v -15 +oa w -15 +oa y -20 +oa 'y -20 +oa :y -20 +~a g -10 +~a v -15 +~a w -15 +~a y -20 +~a 'y -20 +~a :y -20 b l -10 -c y -10 -c l -20 -c k -20 +b /l -10 +b u -20 +b 'u -20 +b ^u -20 +b :u -20 +b `u -20 +b v -20 +b y -20 +b 'y -20 +b :y -20 c h -10 +c k -20 +c l -20 +c /l -20 +c y -10 +c 'y -10 +c :y -10 +,c h -10 +,c k -20 +,c l -20 +,c /l -20 +,c y -10 +,c 'y -10 +,c :y -10 : u0020 -40 -, u0020 -40 +, rq -120 , ' -120 , cq -120 -, rq -120 -d y -15 -d w -15 -d v -15 +, u0020 -40 d d -10 -e y -15 -e x -15 -e w -15 -e v -15 -e . 20 +d v -15 +d w -15 +d y -15 +d 'y -15 +d :y -15 e , 10 +e . 20 +e v -15 +e w -15 +e x -15 +e y -15 +e 'y -15 +e :y -15 +'e , 10 +'e . 20 +'e v -15 +'e w -15 +'e x -15 +'e y -15 +'e 'y -15 +'e :y -15 +^e , 10 +^e . 20 +^e v -15 +^e w -15 +^e x -15 +^e y -15 +^e 'y -15 +^e :y -15 +:e , 10 +:e . 20 +:e v -15 +:e w -15 +:e x -15 +:e y -15 +:e 'y -15 +:e :y -15 +`e , 10 +`e . 20 +`e v -15 +`e w -15 +`e x -15 +`e y -15 +`e 'y -15 +`e :y -15 +f , -10 +f e -10 +f 'e -10 +f ^e -10 +f :e -10 +f `e -10 +f o -20 +f 'o -20 +f ^o -20 +f :o -20 +f `o -20 +f /o -20 +f ~o -20 +f . -10 +f rq 30 f ' 30 f cq 30 -f rq 30 -f . -10 -f o -20 -f e -10 -f , -10 -g g -10 g e 10 +g 'e 10 +g ^e 10 +g :e 10 +g `e 10 +g g -10 h y -20 +h 'y -20 +h :y -20 k o -15 -l y -15 +k 'o -15 +k ^o -15 +k :o -15 +k `o -15 +k /o -15 +k ~o -15 l w -15 -m y -30 +l y -15 +l 'y -15 +l :y -15 +/l w -15 +/l y -15 +/l 'y -15 +/l :y -15 m u -20 -n y -20 -n v -40 +m 'u -20 +m ^u -20 +m :u -20 +m `u -20 +m y -30 +m 'y -30 +m :y -30 n u -10 -o y -20 -o x -30 -o w -15 +n 'u -10 +n ^u -10 +n :u -10 +n `u -10 +n v -40 +n y -20 +n 'y -20 +n :y -20 +~n u -10 +~n 'u -10 +~n ^u -10 +~n :u -10 +~n `u -10 +~n v -40 +~n y -20 +~n 'y -20 +~n :y -20 o v -20 +o w -15 +o x -30 +o y -20 +o 'y -20 +o :y -20 +'o v -20 +'o w -15 +'o x -30 +'o y -20 +'o 'y -20 +'o :y -20 +^o v -20 +^o w -15 +^o x -30 +^o y -20 +^o 'y -20 +^o :y -20 +:o v -20 +:o w -15 +:o x -30 +:o y -20 +:o 'y -20 +:o :y -20 +`o v -20 +`o w -15 +`o x -30 +`o y -20 +`o 'y -20 +`o :y -20 +/o v -20 +/o w -15 +/o x -30 +/o y -20 +/o 'y -20 +/o :y -20 +~o v -20 +~o w -15 +~o x -30 +~o y -20 +~o 'y -20 +~o :y -20 p y -15 -. u0020 -40 +p 'y -15 +p :y -15 +. rq -120 . ' -120 . cq -120 -. rq -120 +. u0020 -40 rq u0020 -80 ` ` -46 ` oq -46 oq ` -46 oq oq -46 -' v -20 -cq v -20 -' u0020 -80 -cq u0020 -80 -' s -60 -cq s -60 -' r -40 -cq r -40 +' d -80 +cq d -80 +' l -20 +cq l -20 +' /l -20 +cq /l -20 ' ' -46 ' cq -46 cq ' -46 cq cq -46 -' l -20 -cq l -20 -' d -80 -cq d -80 -r y 10 -r v 10 -r t 20 -r s -15 -r q -20 -r . -60 -r o -20 +' r -40 +cq r -40 +' s -60 +cq s -60 +' vs -60 +cq vs -60 +' u0020 -80 +cq u0020 -80 +' v -20 +cq v -20 +r c -20 +r ,c -20 +r , -60 +r d -20 +r g -15 r - -20 r hy -20 -r g -15 -r d -20 -r , -60 -r c -20 +r o -20 +r 'o -20 +r ^o -20 +r :o -20 +r `o -20 +r /o -20 +r ~o -20 +r . -60 +r q -20 +r s -15 +r vs -15 +r t 20 +r v 10 +r y 10 +r 'y 10 +r :y 10 s w -15 +vs w -15 ; u0020 -40 +u0020 T -100 +u0020 V -80 +u0020 W -80 +u0020 Y -120 +u0020 'Y -120 +u0020 :Y -120 +u0020 lq -80 u0020 ` -60 u0020 oq -60 -u0020 lq -80 -u0020 Y -120 -u0020 W -80 -u0020 V -80 -u0020 T -100 -v . -80 -v o -30 -v , -80 v a -20 -w . -40 -w o -20 +v 'a -20 +v ^a -20 +v :a -20 +v `a -20 +v oa -20 +v ~a -20 +v , -80 +v o -30 +v 'o -30 +v ^o -30 +v :o -30 +v `o -30 +v /o -30 +v ~o -30 +v . -80 w , -40 +w o -20 +w 'o -20 +w ^o -20 +w :o -20 +w `o -20 +w /o -20 +w ~o -20 +w . -40 x e -10 -y . -80 -y o -25 -y e -10 -y , -80 +x 'e -10 +x ^e -10 +x :e -10 +x `e -10 y a -30 +y 'a -30 +y ^a -30 +y :a -30 +y `a -30 +y oa -30 +y ~a -30 +y , -80 +y e -10 +y 'e -10 +y ^e -10 +y :e -10 +y `e -10 +y o -25 +y 'o -25 +y ^o -25 +y :o -25 +y `o -25 +y /o -25 +y ~o -25 +y . -80 +'y a -30 +'y 'a -30 +'y ^a -30 +'y :a -30 +'y `a -30 +'y oa -30 +'y ~a -30 +'y , -80 +'y e -10 +'y 'e -10 +'y ^e -10 +'y :e -10 +'y `e -10 +'y o -25 +'y 'o -25 +'y ^o -25 +'y :o -25 +'y `o -25 +'y /o -25 +'y ~o -25 +'y . -80 +:y a -30 +:y 'a -30 +:y ^a -30 +:y :a -30 +:y `a -30 +:y oa -30 +:y ~a -30 +:y , -80 +:y e -10 +:y 'e -10 +:y ^e -10 +:y :e -10 +:y `e -10 +:y o -25 +:y 'o -25 +:y ^o -25 +:y :o -25 +:y `o -25 +:y /o -25 +:y ~o -25 +:y . -80 z e 10 +z 'e 10 +z ^e 10 +z :e 10 +z `e 10 +vz e 10 +vz 'e 10 +vz ^e 10 +vz :e 10 +vz `e 10 + charset ha 584,698 2 0 asciicircum ti 584,343 0 1 asciitilde @@ -244,6 +1235,7 @@ vz 500,750 2 5 zcaron :Y 667,915 2 6 Ydieresis tm 1000,718 2 7 trademark aq 238,718 2 8 quotesingle +Eu 556,710,19,7 2 9 Euro space 278 0 32 space ! 333,718 2 33 exclam " 474,718 2 34 quotedbl @@ -349,7 +1341,7 @@ y 556,532,214 1 121 y z 500,532 0 122 z lC 389,722,196 2 123 braceleft { " -ba 280,737,19 2 124 bar +ba 280,775,225 3 124 bar | " rC 389,722,196 2 125 braceright } " @@ -388,7 +1380,7 @@ ct 556,628,118 0 162 cent Po 556,718,16 2 163 sterling Cs 556,636,0,3,3 0 164 currency Ye 556,698,0,9,9 2 165 yen -bb 280,737,19 2 166 brokenbar +bb 280,700,150 2 166 brokenbar sc 556,727,184 2 167 section ad 333,729 2 168 dieresis co 737,737,19,12,11 2 169 copyright diff --git a/contrib/groff/font/devps/HBI b/contrib/groff/font/devps/HBI index 72d5872103..a80bd811bc 100644 --- a/contrib/groff/font/devps/HBI +++ b/contrib/groff/font/devps/HBI @@ -1,289 +1,1281 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Helvetica Bold Oblique +# Version 003.001 +# FamilyName Helvetica +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 12:46:09 1999 +# Comment UniqueID 44700 +# Comment VMusage 10926 50493 + name HBI internalname Helvetica-BoldOblique slant 12 spacewidth 278 encoding text.enc ligatures fi fl 0 + kernpairs -A y -30 -A w -30 -A v -40 -A u -30 -A Y -110 -A W -60 -A V -80 -A U -50 -A T -90 -A Q -40 -A O -40 -A G -50 A C -40 -B U -10 +A ,C -40 +A G -50 +A O -40 +A 'O -40 +A ^O -40 +A :O -40 +A `O -40 +A /O -40 +A ~O -40 +A Q -40 +A T -90 +A U -50 +A 'U -50 +A ^U -50 +A :U -50 +A `U -50 +A V -80 +A W -60 +A Y -110 +A 'Y -110 +A :Y -110 +A u -30 +A 'u -30 +A ^u -30 +A :u -30 +A `u -30 +A v -40 +A w -30 +A y -30 +A 'y -30 +A :y -30 +'A C -40 +'A ,C -40 +'A G -50 +'A O -40 +'A 'O -40 +'A ^O -40 +'A :O -40 +'A `O -40 +'A /O -40 +'A ~O -40 +'A Q -40 +'A T -90 +'A U -50 +'A 'U -50 +'A ^U -50 +'A :U -50 +'A `U -50 +'A V -80 +'A W -60 +'A Y -110 +'A 'Y -110 +'A :Y -110 +'A u -30 +'A 'u -30 +'A ^u -30 +'A :u -30 +'A `u -30 +'A v -40 +'A w -30 +'A y -30 +'A 'y -30 +'A :y -30 +^A C -40 +^A ,C -40 +^A G -50 +^A O -40 +^A 'O -40 +^A ^O -40 +^A :O -40 +^A `O -40 +^A /O -40 +^A ~O -40 +^A Q -40 +^A T -90 +^A U -50 +^A 'U -50 +^A ^U -50 +^A :U -50 +^A `U -50 +^A V -80 +^A W -60 +^A Y -110 +^A 'Y -110 +^A :Y -110 +^A u -30 +^A 'u -30 +^A ^u -30 +^A :u -30 +^A `u -30 +^A v -40 +^A w -30 +^A y -30 +^A 'y -30 +^A :y -30 +:A C -40 +:A ,C -40 +:A G -50 +:A O -40 +:A 'O -40 +:A ^O -40 +:A :O -40 +:A `O -40 +:A /O -40 +:A ~O -40 +:A Q -40 +:A T -90 +:A U -50 +:A 'U -50 +:A ^U -50 +:A :U -50 +:A `U -50 +:A V -80 +:A W -60 +:A Y -110 +:A 'Y -110 +:A :Y -110 +:A u -30 +:A 'u -30 +:A ^u -30 +:A :u -30 +:A `u -30 +:A v -40 +:A w -30 +:A y -30 +:A 'y -30 +:A :y -30 +`A C -40 +`A ,C -40 +`A G -50 +`A O -40 +`A 'O -40 +`A ^O -40 +`A :O -40 +`A `O -40 +`A /O -40 +`A ~O -40 +`A Q -40 +`A T -90 +`A U -50 +`A 'U -50 +`A ^U -50 +`A :U -50 +`A `U -50 +`A V -80 +`A W -60 +`A Y -110 +`A 'Y -110 +`A :Y -110 +`A u -30 +`A 'u -30 +`A ^u -30 +`A :u -30 +`A `u -30 +`A v -40 +`A w -30 +`A y -30 +`A 'y -30 +`A :y -30 +oA C -40 +oA ,C -40 +oA G -50 +oA O -40 +oA 'O -40 +oA ^O -40 +oA :O -40 +oA `O -40 +oA /O -40 +oA ~O -40 +oA Q -40 +oA T -90 +oA U -50 +oA 'U -50 +oA ^U -50 +oA :U -50 +oA `U -50 +oA V -80 +oA W -60 +oA Y -110 +oA 'Y -110 +oA :Y -110 +oA u -30 +oA 'u -30 +oA ^u -30 +oA :u -30 +oA `u -30 +oA v -40 +oA w -30 +oA y -30 +oA 'y -30 +oA :y -30 +~A C -40 +~A ,C -40 +~A G -50 +~A O -40 +~A 'O -40 +~A ^O -40 +~A :O -40 +~A `O -40 +~A /O -40 +~A ~O -40 +~A Q -40 +~A T -90 +~A U -50 +~A 'U -50 +~A ^U -50 +~A :U -50 +~A `U -50 +~A V -80 +~A W -60 +~A Y -110 +~A 'Y -110 +~A :Y -110 +~A u -30 +~A 'u -30 +~A ^u -30 +~A :u -30 +~A `u -30 +~A v -40 +~A w -30 +~A y -30 +~A 'y -30 +~A :y -30 B A -30 -D . -30 -D , -30 -D Y -70 -D W -40 -D V -40 +B 'A -30 +B ^A -30 +B :A -30 +B `A -30 +B oA -30 +B ~A -30 +B U -10 +B 'U -10 +B ^U -10 +B :U -10 +B `U -10 D A -40 -F . -100 -F , -100 -F a -20 +D 'A -40 +D ^A -40 +D :A -40 +D `A -40 +D oA -40 +D ~A -40 +D V -40 +D W -40 +D Y -70 +D 'Y -70 +D :Y -70 +D , -30 +D . -30 F A -80 -J u -20 -J . -20 -J , -20 +F 'A -80 +F ^A -80 +F :A -80 +F `A -80 +F oA -80 +F ~A -80 +F a -20 +F 'a -20 +F ^a -20 +F :a -20 +F `a -20 +F oa -20 +F ~a -20 +F , -100 +F . -100 J A -20 -K y -40 -K u -30 -K o -35 -K e -15 +J 'A -20 +J ^A -20 +J :A -20 +J `A -20 +J oA -20 +J ~A -20 +J , -20 +J . -20 +J u -20 +J 'u -20 +J ^u -20 +J :u -20 +J `u -20 K O -30 -L y -30 +K 'O -30 +K ^O -30 +K :O -30 +K `O -30 +K /O -30 +K ~O -30 +K e -15 +K 'e -15 +K ^e -15 +K :e -15 +K `e -15 +K o -35 +K 'o -35 +K ^o -35 +K :o -35 +K `o -35 +K /o -35 +K ~o -35 +K u -30 +K 'u -30 +K ^u -30 +K :u -30 +K `u -30 +K y -40 +K 'y -40 +K :y -40 +L T -90 +L V -110 +L W -80 +L Y -120 +L 'Y -120 +L :Y -120 +L rq -140 L ' -140 L cq -140 -L rq -140 -L Y -120 -L W -80 -L V -110 -L T -90 -O . -40 -O , -40 -O Y -70 -O X -50 -O W -50 -O V -50 -O T -40 +L y -30 +L 'y -30 +L :y -30 +/L T -90 +/L V -110 +/L W -80 +/L Y -120 +/L 'Y -120 +/L :Y -120 +/L rq -140 +/L ' -140 +/L cq -140 +/L y -30 +/L 'y -30 +/L :y -30 O A -50 -P . -120 -P o -40 -P e -30 -P , -120 -P a -30 +O 'A -50 +O ^A -50 +O :A -50 +O `A -50 +O oA -50 +O ~A -50 +O T -40 +O V -50 +O W -50 +O X -50 +O Y -70 +O 'Y -70 +O :Y -70 +O , -40 +O . -40 +'O A -50 +'O 'A -50 +'O ^A -50 +'O :A -50 +'O `A -50 +'O oA -50 +'O ~A -50 +'O T -40 +'O V -50 +'O W -50 +'O X -50 +'O Y -70 +'O 'Y -70 +'O :Y -70 +'O , -40 +'O . -40 +^O A -50 +^O 'A -50 +^O ^A -50 +^O :A -50 +^O `A -50 +^O oA -50 +^O ~A -50 +^O T -40 +^O V -50 +^O W -50 +^O X -50 +^O Y -70 +^O 'Y -70 +^O :Y -70 +^O , -40 +^O . -40 +:O A -50 +:O 'A -50 +:O ^A -50 +:O :A -50 +:O `A -50 +:O oA -50 +:O ~A -50 +:O T -40 +:O V -50 +:O W -50 +:O X -50 +:O Y -70 +:O 'Y -70 +:O :Y -70 +:O , -40 +:O . -40 +`O A -50 +`O 'A -50 +`O ^A -50 +`O :A -50 +`O `A -50 +`O oA -50 +`O ~A -50 +`O T -40 +`O V -50 +`O W -50 +`O X -50 +`O Y -70 +`O 'Y -70 +`O :Y -70 +`O , -40 +`O . -40 +/O A -50 +/O 'A -50 +/O ^A -50 +/O :A -50 +/O `A -50 +/O oA -50 +/O ~A -50 +/O T -40 +/O V -50 +/O W -50 +/O X -50 +/O Y -70 +/O 'Y -70 +/O :Y -70 +/O , -40 +/O . -40 +~O A -50 +~O 'A -50 +~O ^A -50 +~O :A -50 +~O `A -50 +~O oA -50 +~O ~A -50 +~O T -40 +~O V -50 +~O W -50 +~O X -50 +~O Y -70 +~O 'Y -70 +~O :Y -70 +~O , -40 +~O . -40 P A -100 -Q . 20 -Q , 20 +P 'A -100 +P ^A -100 +P :A -100 +P `A -100 +P oA -100 +P ~A -100 +P a -30 +P 'a -30 +P ^a -30 +P :a -30 +P `a -30 +P oa -30 +P ~a -30 +P , -120 +P e -30 +P 'e -30 +P ^e -30 +P :e -30 +P `e -30 +P o -40 +P 'o -40 +P ^o -40 +P :o -40 +P `o -40 +P /o -40 +P ~o -40 +P . -120 Q U -10 -R Y -50 -R W -40 -R V -50 -R U -20 -R T -20 +Q 'U -10 +Q ^U -10 +Q :U -10 +Q `U -10 +Q , 20 +Q . 20 R O -20 -T y -60 -T w -60 -T u -90 -T ; -40 -T r -80 -T . -80 -T o -80 +R 'O -20 +R ^O -20 +R :O -20 +R `O -20 +R /O -20 +R ~O -20 +R T -20 +R U -20 +R 'U -20 +R ^U -20 +R :U -20 +R `U -20 +R V -50 +R W -40 +R Y -50 +R 'Y -50 +R :Y -50 +T A -90 +T 'A -90 +T ^A -90 +T :A -90 +T `A -90 +T oA -90 +T ~A -90 +T O -40 +T 'O -40 +T ^O -40 +T :O -40 +T `O -40 +T /O -40 +T ~O -40 +T a -80 +T 'a -80 +T ^a -80 +T :a -80 +T `a -80 +T oa -80 +T ~a -80 +T : -40 +T , -80 +T e -60 +T 'e -60 +T ^e -60 +T :e -60 +T `e -60 T - -120 T hy -120 -T e -60 -T , -80 -T : -40 -T a -80 -T O -40 -T A -90 -U . -30 -U , -30 +T o -80 +T 'o -80 +T ^o -80 +T :o -80 +T `o -80 +T /o -80 +T ~o -80 +T . -80 +T r -80 +T ; -40 +T u -90 +T 'u -90 +T ^u -90 +T :u -90 +T `u -90 +T w -60 +T y -60 +T 'y -60 +T :y -60 U A -50 -V u -60 -V ; -40 -V . -120 -V o -90 +U 'A -50 +U ^A -50 +U :A -50 +U `A -50 +U oA -50 +U ~A -50 +U , -30 +U . -30 +'U A -50 +'U 'A -50 +'U ^A -50 +'U :A -50 +'U `A -50 +'U oA -50 +'U ~A -50 +'U , -30 +'U . -30 +^U A -50 +^U 'A -50 +^U ^A -50 +^U :A -50 +^U `A -50 +^U oA -50 +^U ~A -50 +^U , -30 +^U . -30 +:U A -50 +:U 'A -50 +:U ^A -50 +:U :A -50 +:U `A -50 +:U oA -50 +:U ~A -50 +:U , -30 +:U . -30 +`U A -50 +`U 'A -50 +`U ^A -50 +`U :A -50 +`U `A -50 +`U oA -50 +`U ~A -50 +`U , -30 +`U . -30 +V A -80 +V 'A -80 +V ^A -80 +V :A -80 +V `A -80 +V oA -80 +V ~A -80 +V G -50 +V O -50 +V 'O -50 +V ^O -50 +V :O -50 +V `O -50 +V /O -50 +V ~O -50 +V a -60 +V 'a -60 +V ^a -60 +V :a -60 +V `a -60 +V oa -60 +V ~a -60 +V : -40 +V , -120 +V e -50 +V 'e -50 +V ^e -50 +V :e -50 +V `e -50 V - -80 V hy -80 -V e -50 -V , -120 -V : -40 -V a -60 -V O -50 -V G -50 -V A -80 -W y -20 -W u -45 -W ; -10 -W . -80 -W o -60 +V o -90 +V 'o -90 +V ^o -90 +V :o -90 +V `o -90 +V /o -90 +V ~o -90 +V . -120 +V ; -40 +V u -60 +V 'u -60 +V ^u -60 +V :u -60 +V `u -60 +W A -60 +W 'A -60 +W ^A -60 +W :A -60 +W `A -60 +W oA -60 +W ~A -60 +W O -20 +W 'O -20 +W ^O -20 +W :O -20 +W `O -20 +W /O -20 +W ~O -20 +W a -40 +W 'a -40 +W ^a -40 +W :a -40 +W `a -40 +W oa -40 +W ~a -40 +W : -10 +W , -80 +W e -35 +W 'e -35 +W ^e -35 +W :e -35 +W `e -35 W - -40 W hy -40 -W e -35 -W , -80 -W : -10 -W a -40 -W O -20 -W A -60 -Y u -100 -Y ; -50 -Y . -100 -Y o -100 -Y e -80 -Y , -100 -Y : -50 -Y a -90 -Y O -70 +W o -60 +W 'o -60 +W ^o -60 +W :o -60 +W `o -60 +W /o -60 +W ~o -60 +W . -80 +W ; -10 +W u -45 +W 'u -45 +W ^u -45 +W :u -45 +W `u -45 +W y -20 +W 'y -20 +W :y -20 Y A -110 -a y -20 -a w -15 -a v -15 +Y 'A -110 +Y ^A -110 +Y :A -110 +Y `A -110 +Y oA -110 +Y ~A -110 +Y O -70 +Y 'O -70 +Y ^O -70 +Y :O -70 +Y `O -70 +Y /O -70 +Y ~O -70 +Y a -90 +Y 'a -90 +Y ^a -90 +Y :a -90 +Y `a -90 +Y oa -90 +Y ~a -90 +Y : -50 +Y , -100 +Y e -80 +Y 'e -80 +Y ^e -80 +Y :e -80 +Y `e -80 +Y o -100 +Y 'o -100 +Y ^o -100 +Y :o -100 +Y `o -100 +Y /o -100 +Y ~o -100 +Y . -100 +Y ; -50 +Y u -100 +Y 'u -100 +Y ^u -100 +Y :u -100 +Y `u -100 +'Y A -110 +'Y 'A -110 +'Y ^A -110 +'Y :A -110 +'Y `A -110 +'Y oA -110 +'Y ~A -110 +'Y O -70 +'Y 'O -70 +'Y ^O -70 +'Y :O -70 +'Y `O -70 +'Y /O -70 +'Y ~O -70 +'Y a -90 +'Y 'a -90 +'Y ^a -90 +'Y :a -90 +'Y `a -90 +'Y oa -90 +'Y ~a -90 +'Y : -50 +'Y , -100 +'Y e -80 +'Y 'e -80 +'Y ^e -80 +'Y :e -80 +'Y `e -80 +'Y o -100 +'Y 'o -100 +'Y ^o -100 +'Y :o -100 +'Y `o -100 +'Y /o -100 +'Y ~o -100 +'Y . -100 +'Y ; -50 +'Y u -100 +'Y 'u -100 +'Y ^u -100 +'Y :u -100 +'Y `u -100 +:Y A -110 +:Y 'A -110 +:Y ^A -110 +:Y :A -110 +:Y `A -110 +:Y oA -110 +:Y ~A -110 +:Y O -70 +:Y 'O -70 +:Y ^O -70 +:Y :O -70 +:Y `O -70 +:Y /O -70 +:Y ~O -70 +:Y a -90 +:Y 'a -90 +:Y ^a -90 +:Y :a -90 +:Y `a -90 +:Y oa -90 +:Y ~a -90 +:Y : -50 +:Y , -100 +:Y e -80 +:Y 'e -80 +:Y ^e -80 +:Y :e -80 +:Y `e -80 +:Y o -100 +:Y 'o -100 +:Y ^o -100 +:Y :o -100 +:Y `o -100 +:Y /o -100 +:Y ~o -100 +:Y . -100 +:Y ; -50 +:Y u -100 +:Y 'u -100 +:Y ^u -100 +:Y :u -100 +:Y `u -100 a g -10 -b y -20 -b v -20 -b u -20 +a v -15 +a w -15 +a y -20 +a 'y -20 +a :y -20 +'a g -10 +'a v -15 +'a w -15 +'a y -20 +'a 'y -20 +'a :y -20 +^a g -10 +^a v -15 +^a w -15 +^a y -20 +^a 'y -20 +^a :y -20 +:a g -10 +:a v -15 +:a w -15 +:a y -20 +:a 'y -20 +:a :y -20 +`a g -10 +`a v -15 +`a w -15 +`a y -20 +`a 'y -20 +`a :y -20 +oa g -10 +oa v -15 +oa w -15 +oa y -20 +oa 'y -20 +oa :y -20 +~a g -10 +~a v -15 +~a w -15 +~a y -20 +~a 'y -20 +~a :y -20 b l -10 -c y -10 -c l -20 -c k -20 +b /l -10 +b u -20 +b 'u -20 +b ^u -20 +b :u -20 +b `u -20 +b v -20 +b y -20 +b 'y -20 +b :y -20 c h -10 +c k -20 +c l -20 +c /l -20 +c y -10 +c 'y -10 +c :y -10 +,c h -10 +,c k -20 +,c l -20 +,c /l -20 +,c y -10 +,c 'y -10 +,c :y -10 : u0020 -40 -, u0020 -40 +, rq -120 , ' -120 , cq -120 -, rq -120 -d y -15 -d w -15 -d v -15 +, u0020 -40 d d -10 -e y -15 -e x -15 -e w -15 -e v -15 -e . 20 +d v -15 +d w -15 +d y -15 +d 'y -15 +d :y -15 e , 10 +e . 20 +e v -15 +e w -15 +e x -15 +e y -15 +e 'y -15 +e :y -15 +'e , 10 +'e . 20 +'e v -15 +'e w -15 +'e x -15 +'e y -15 +'e 'y -15 +'e :y -15 +^e , 10 +^e . 20 +^e v -15 +^e w -15 +^e x -15 +^e y -15 +^e 'y -15 +^e :y -15 +:e , 10 +:e . 20 +:e v -15 +:e w -15 +:e x -15 +:e y -15 +:e 'y -15 +:e :y -15 +`e , 10 +`e . 20 +`e v -15 +`e w -15 +`e x -15 +`e y -15 +`e 'y -15 +`e :y -15 +f , -10 +f e -10 +f 'e -10 +f ^e -10 +f :e -10 +f `e -10 +f o -20 +f 'o -20 +f ^o -20 +f :o -20 +f `o -20 +f /o -20 +f ~o -20 +f . -10 +f rq 30 f ' 30 f cq 30 -f rq 30 -f . -10 -f o -20 -f e -10 -f , -10 -g g -10 g e 10 +g 'e 10 +g ^e 10 +g :e 10 +g `e 10 +g g -10 h y -20 +h 'y -20 +h :y -20 k o -15 -l y -15 +k 'o -15 +k ^o -15 +k :o -15 +k `o -15 +k /o -15 +k ~o -15 l w -15 -m y -30 +l y -15 +l 'y -15 +l :y -15 +/l w -15 +/l y -15 +/l 'y -15 +/l :y -15 m u -20 -n y -20 -n v -40 +m 'u -20 +m ^u -20 +m :u -20 +m `u -20 +m y -30 +m 'y -30 +m :y -30 n u -10 -o y -20 -o x -30 -o w -15 +n 'u -10 +n ^u -10 +n :u -10 +n `u -10 +n v -40 +n y -20 +n 'y -20 +n :y -20 +~n u -10 +~n 'u -10 +~n ^u -10 +~n :u -10 +~n `u -10 +~n v -40 +~n y -20 +~n 'y -20 +~n :y -20 o v -20 +o w -15 +o x -30 +o y -20 +o 'y -20 +o :y -20 +'o v -20 +'o w -15 +'o x -30 +'o y -20 +'o 'y -20 +'o :y -20 +^o v -20 +^o w -15 +^o x -30 +^o y -20 +^o 'y -20 +^o :y -20 +:o v -20 +:o w -15 +:o x -30 +:o y -20 +:o 'y -20 +:o :y -20 +`o v -20 +`o w -15 +`o x -30 +`o y -20 +`o 'y -20 +`o :y -20 +/o v -20 +/o w -15 +/o x -30 +/o y -20 +/o 'y -20 +/o :y -20 +~o v -20 +~o w -15 +~o x -30 +~o y -20 +~o 'y -20 +~o :y -20 p y -15 -. u0020 -40 +p 'y -15 +p :y -15 +. rq -120 . ' -120 . cq -120 -. rq -120 +. u0020 -40 rq u0020 -80 ` ` -46 ` oq -46 oq ` -46 oq oq -46 -' v -20 -cq v -20 -' u0020 -80 -cq u0020 -80 -' s -60 -cq s -60 -' r -40 -cq r -40 +' d -80 +cq d -80 +' l -20 +cq l -20 +' /l -20 +cq /l -20 ' ' -46 ' cq -46 cq ' -46 cq cq -46 -' l -20 -cq l -20 -' d -80 -cq d -80 -r y 10 -r v 10 -r t 20 -r s -15 -r q -20 -r . -60 -r o -20 +' r -40 +cq r -40 +' s -60 +cq s -60 +' vs -60 +cq vs -60 +' u0020 -80 +cq u0020 -80 +' v -20 +cq v -20 +r c -20 +r ,c -20 +r , -60 +r d -20 +r g -15 r - -20 r hy -20 -r g -15 -r d -20 -r , -60 -r c -20 +r o -20 +r 'o -20 +r ^o -20 +r :o -20 +r `o -20 +r /o -20 +r ~o -20 +r . -60 +r q -20 +r s -15 +r vs -15 +r t 20 +r v 10 +r y 10 +r 'y 10 +r :y 10 s w -15 +vs w -15 ; u0020 -40 +u0020 T -100 +u0020 V -80 +u0020 W -80 +u0020 Y -120 +u0020 'Y -120 +u0020 :Y -120 +u0020 lq -80 u0020 ` -60 u0020 oq -60 -u0020 lq -80 -u0020 Y -120 -u0020 W -80 -u0020 V -80 -u0020 T -100 -v . -80 -v o -30 -v , -80 v a -20 -w . -40 -w o -20 +v 'a -20 +v ^a -20 +v :a -20 +v `a -20 +v oa -20 +v ~a -20 +v , -80 +v o -30 +v 'o -30 +v ^o -30 +v :o -30 +v `o -30 +v /o -30 +v ~o -30 +v . -80 w , -40 +w o -20 +w 'o -20 +w ^o -20 +w :o -20 +w `o -20 +w /o -20 +w ~o -20 +w . -40 x e -10 -y . -80 -y o -25 -y e -10 -y , -80 +x 'e -10 +x ^e -10 +x :e -10 +x `e -10 y a -30 +y 'a -30 +y ^a -30 +y :a -30 +y `a -30 +y oa -30 +y ~a -30 +y , -80 +y e -10 +y 'e -10 +y ^e -10 +y :e -10 +y `e -10 +y o -25 +y 'o -25 +y ^o -25 +y :o -25 +y `o -25 +y /o -25 +y ~o -25 +y . -80 +'y a -30 +'y 'a -30 +'y ^a -30 +'y :a -30 +'y `a -30 +'y oa -30 +'y ~a -30 +'y , -80 +'y e -10 +'y 'e -10 +'y ^e -10 +'y :e -10 +'y `e -10 +'y o -25 +'y 'o -25 +'y ^o -25 +'y :o -25 +'y `o -25 +'y /o -25 +'y ~o -25 +'y . -80 +:y a -30 +:y 'a -30 +:y ^a -30 +:y :a -30 +:y `a -30 +:y oa -30 +:y ~a -30 +:y , -80 +:y e -10 +:y 'e -10 +:y ^e -10 +:y :e -10 +:y `e -10 +:y o -25 +:y 'o -25 +:y ^o -25 +:y :o -25 +:y `o -25 +:y /o -25 +:y ~o -25 +:y . -80 z e 10 +z 'e 10 +z ^e 10 +z :e 10 +z `e 10 +vz e 10 +vz 'e 10 +vz ^e 10 +vz :e 10 +vz `e 10 + charset -ha 584,698,0,57,-81,57 2 0 asciicircum -ti 584,343,0,43,-65,43 0 1 asciitilde -vS 667,936,19,101,-31,90 2 2 Scaron +ha 584,698,0,57,-80,57 2 0 asciicircum +ti 584,343,0,43,-64,43 0 1 asciitilde +vS 667,936,19,101,-30,90 2 2 Scaron vZ 611,936,0,176,25,90 2 3 Zcaron -vs 556,750,14,108,-13,90 2 4 scaron -vz 500,750,0,136,30,90 2 5 zcaron -:Y 667,915,0,189,-118,90 2 6 Ydieresis -tm 1000,718,0,159,-129,90 2 7 trademark +vs 556,750,14,109,-12,90 2 4 scaron +vz 500,750,0,137,30,90 2 5 zcaron +:Y 667,915,0,189,-117,90 2 6 Ydieresis +tm 1000,718,0,159,-128,90 2 7 trademark aq 238,718,0,133,-115,90 2 8 quotesingle +Eu 556,710,19,189,-9,90 2 9 Euro space 278 0 32 space ! 333,718,0,114,-44,90 2 33 exclam " 474,718,0,105,-143,90 2 34 quotedbl dq " -# 556,698,0,138,-10,90 2 35 numbersign +# 556,698,0,139,-10,90 2 35 numbersign sh " -$ 556,775,115,116,-17,90 2 36 dollar +$ 556,775,115,116,-16,90 2 36 dollar Do " -% 889,710,19,62,-86,62 2 37 percent -& 722,718,19,60,-39,60 2 38 ampersand -' 278,718,0,134,-117,90 2 39 quoteright +% 889,710,19,63,-86,63 2 37 percent +& 722,718,19,61,-38,61 2 38 ampersand +' 278,718,0,134,-116,90 2 39 quoteright cq " -( 333,734,208,187,-26,90 3 40 parenleft -) 333,734,208,86,75,86 3 41 parenright -* 389,718,0,142,-96,90 2 42 asterisk -+ 584,506,0,76,-32,76 0 43 plus -, 278,146,168,17,22,17 0 44 comma -- 333,345,0,96,-23,90 0 45 hyphen +( 333,734,208,188,-25,90 3 40 parenleft +) 333,734,208,86,76,86 3 41 parenright +* 389,718,0,143,-96,90 2 42 asterisk ++ 584,506,0,76,-31,76 0 43 plus +, 278,146,168,18,22,18 0 44 comma +- 333,345,0,97,-22,90 0 45 hyphen hy " -. 278,146,0,17,-14,17 0 46 period -/ 278,737,19,240,87,90 2 47 slash +. 278,146,0,18,-14,18 0 46 period +/ 278,737,19,240,88,90 2 47 slash sl " -0 556,710,19,111,-36,90 2 48 zero -1 556,710,0,23,-123,23 2 49 one -2 556,710,0,113,24,90 2 50 two -3 556,710,19,102,-15,90 2 51 three +0 556,710,19,112,-36,90 2 48 zero +1 556,710,0,23,-122,23 2 49 one +2 556,710,0,114,24,90 2 50 two +3 556,710,19,103,-15,90 2 51 three 4 556,710,0,92,-10,90 2 52 four -5 556,698,19,130,-14,90 2 53 five -6 556,710,19,113,-35,90 2 54 six -7 556,698,0,170,-75,90 2 55 seven +5 556,698,19,131,-14,90 2 53 five +6 556,710,19,114,-34,90 2 54 six +7 556,698,0,171,-75,90 2 55 seven 8 556,710,19,110,-19,90 2 56 eight -9 556,710,19,109,-28,90 2 57 nine +9 556,710,19,109,-27,90 2 57 nine : 333,512,0,68,-42,68 0 58 colon ; 333,512,168,68,-6,68 0 59 semicolon -< 584,514,8,121,-32,90 0 60 less -= 584,419,0,99,-8,90 0 61 equal -> 584,514,8,75,14,75 0 62 greater -? 611,727,0,110,-115,90 2 63 question -@ 975,737,19,29,-136,29 2 64 at +< 584,514,8,122,-32,90 0 60 less += 584,419,0,100,-8,90 0 61 equal +> 584,514,8,76,14,76 0 62 greater +? 611,727,0,111,-114,90 2 63 question +@ 975,737,19,29,-135,29 2 64 at at " A 722,718,0,30,30,30 2 65 A B 722,718,0,92,-26,90 2 66 B @@ -291,138 +1283,138 @@ C 722,737,19,117,-57,90 2 67 C D 722,718,0,105,-26,90 2 68 D E 667,718,0,140,-26,90 2 69 E F 611,718,0,179,-26,90 2 70 F -G 778,737,19,89,-58,89 2 71 G +G 778,737,19,89,-57,89 2 71 G H 722,718,0,132,-21,90 2 72 H I 278,718,0,139,-14,90 2 73 I -J 556,718,18,131,-10,90 2 74 J +J 556,718,18,131,-9,90 2 74 J K 722,718,0,186,-37,90 2 75 K L 611,718,0,50,-26,50 2 76 L M 833,718,0,135,-19,90 2 77 M N 722,718,0,135,-19,90 2 78 N -O 778,737,19,95,-57,90 2 79 O +O 778,737,19,96,-57,90 2 79 O P 667,718,0,121,-26,90 2 80 P -Q 778,737,52,95,-57,90 2 81 Q -R 722,718,0,106,-26,90 2 82 R -S 667,737,19,101,-31,90 2 83 S -T 611,718,0,190,-90,90 2 84 T -U 722,718,19,132,-66,90 2 85 U -V 667,718,0,184,-122,90 2 86 V -W 944,718,0,188,-119,90 2 87 W +Q 778,737,52,96,-57,90 2 81 Q +R 722,718,0,107,-26,90 2 82 R +S 667,737,19,101,-30,90 2 83 S +T 611,718,0,190,-89,90 2 84 T +U 722,718,19,132,-65,90 2 85 U +V 667,718,0,184,-121,90 2 86 V +W 944,718,0,188,-118,90 2 87 W X 667,718,0,174,36,90 2 88 X -Y 667,718,0,189,-118,90 2 89 Y +Y 667,718,0,189,-117,90 2 89 Y Z 611,718,0,176,25,90 2 90 Z -[ 333,722,196,179,29,90 2 91 bracketleft +[ 333,722,196,180,29,90 2 91 bracketleft lB " -\ 278,737,19,79,-74,79 2 92 backslash +\ 278,737,19,79,-73,79 2 92 backslash rs " -] 333,722,196,140,68,90 2 93 bracketright +] 333,722,196,141,68,90 2 93 bracketright rB " -a^ 333,750,0,188,-68,90 2 94 circumflex +a^ 333,750,0,189,-68,90 2 94 circumflex ^ " -_ 556,0,125,34,77,34 0 95 underscore +_ 556,0,125,35,77,35 0 95 underscore ` 278,727,0,133,-115,90 2 96 quoteleft oq " -a 556,546,14,77,-5,77 0 97 a -b 611,718,14,84,-11,84 2 98 b -c 556,546,14,93,-29,90 0 99 c -d 611,718,14,143,-32,90 2 100 d -e 556,546,14,87,-20,87 0 101 e -f 333,727,0,186,-37,90 2 102 f -g 611,546,217,105,12,90 1 103 g -h 611,718,0,68,-15,68 2 104 h -i 278,725,0,135,-19,90 2 105 i -j 278,725,214,135,92,90 3 106 j -k 556,718,0,164,-19,90 2 107 k +a 556,546,14,78,-4,78 0 97 a +b 611,718,14,85,-11,85 2 98 b +c 556,546,14,94,-28,90 0 99 c +d 611,718,14,143,-31,90 2 100 d +e 556,546,14,88,-20,88 0 101 e +f 333,727,0,187,-37,90 2 102 f +g 611,546,217,106,13,90 1 103 g +h 611,718,0,69,-15,69 2 104 h +i 278,725,0,136,-19,90 2 105 i +j 278,725,214,136,93,90 3 106 j +k 556,718,0,165,-19,90 2 107 k l 278,718,0,134,-19,90 2 108 l -m 889,546,0,70,-14,70 0 109 m -n 611,546,0,68,-15,68 0 110 n +m 889,546,0,71,-14,71 0 109 m +n 611,546,0,69,-15,69 0 110 n o 611,546,14,82,-32,82 0 111 o -p 611,546,207,84,32,84 1 112 p -q 611,546,207,104,-30,90 1 113 q +p 611,546,207,85,32,85 1 112 p +q 611,546,207,105,-30,90 1 113 q r 389,546,0,150,-14,90 0 114 r -s 556,546,14,78,-13,78 0 115 s -t 333,676,6,139,-50,90 2 116 t -u 611,532,14,97,-48,90 0 117 u -v 556,532,0,150,-76,90 0 118 v -w 778,532,0,154,-73,90 0 119 w -x 556,532,0,142,35,90 0 120 x -y 556,532,214,146,8,90 1 121 y -z 500,532,0,133,30,90 0 122 z -lC 389,722,196,179,-44,90 2 123 braceleft +s 556,546,14,78,-12,78 0 115 s +t 333,676,6,140,-50,90 2 116 t +u 611,532,14,98,-47,90 0 117 u +v 556,532,0,151,-76,90 0 118 v +w 778,532,0,155,-73,90 0 119 w +x 556,532,0,143,35,90 0 120 x +y 556,532,214,147,9,90 1 121 y +z 500,532,0,134,30,90 0 122 z +lC 389,722,196,180,-44,90 2 123 braceleft { " -ba 280,737,19,123,-30,90 2 124 bar +ba 280,775,225,131,14,90 3 124 bar | " rC 389,722,196,68,68,68 2 125 braceright } " -a~ 333,737,0,224,-63,90 2 126 tilde +a~ 333,737,0,224,-62,90 2 126 tilde ~ " -bq 278,127,146,8,9,8 0 128 quotesinglbase -Fo 556,484,0,65,-85,65 0 129 guillemotleft -Fc 556,484,0,34,-54,34 0 130 guillemotright -bu 350,524,0,120,-33,90 0 131 bullet -Fn 556,737,210,163,100,90 3 132 florin -f/ 167,710,19,370,224,90 2 133 fraction -%0 1000,710,19,88,-26,88 2 134 perthousand -dg 556,718,171,120,-68,90 2 135 dagger -dd 556,718,171,122,4,90 2 136 daggerdbl +bq 278,127,146,8,10,8 0 128 quotesinglbase +Fo 556,484,0,65,-84,65 0 129 guillemotleft +Fc 556,484,0,35,-54,35 0 130 guillemotright +bu 350,524,0,121,-32,90 0 131 bullet +Fn 556,737,210,163,101,90 3 132 florin +f/ 167,710,19,370,225,90 2 133 fraction +%0 1000,710,19,89,-25,89 2 134 perthousand +dg 556,718,171,121,-68,90 2 135 dagger +dd 556,718,171,123,5,90 2 136 daggerdbl en 556,333,0,121,2,90 0 137 endash em 1000,333,0,121,2,90 0 138 emdash -fi 611,727,0,135,-37,90 2 140 fi +fi 611,727,0,136,-37,90 2 140 fi fl 611,727,0,134,-37,90 2 141 fl -.i 278,532,0,94,-19,90 0 144 dotlessi -ga 333,750,0,70,-86,70 2 146 grave -a" 333,750,0,362,-87,90 2 147 hungarumlaut -a. 333,729,0,102,-185,90 2 148 dotaccent -ab 333,750,0,211,-106,90 2 149 breve -ah 333,750,0,219,-99,90 2 150 caron -ao 333,776,0,137,-150,90 2 151 ring -ho 333,0,228,0,9 1 152 ogonek +.i 278,532,0,95,-19,90 0 144 dotlessi +ga 333,750,0,71,-86,71 2 146 grave +a" 333,750,0,363,-87,90 2 147 hungarumlaut +a. 333,729,0,102,-184,90 2 148 dotaccent +ab 333,750,0,212,-105,90 2 149 breve +ah 333,750,0,220,-99,90 2 150 caron +ao 333,776,0,138,-149,90 2 151 ring +ho 333,0,228,0,10 1 152 ogonek lq 500,727,0,138,-110,90 2 153 quotedblleft -rq 500,718,0,139,-112,90 2 154 quotedblright -oe 944,546,14,83,-32,83 0 155 oe -/l 278,718,0,179,10,90 2 156 lslash -Bq 500,127,146,13,14,13 0 157 quotedblbase -OE 1000,737,19,164,-49,90 2 158 OE +rq 500,718,0,139,-111,90 2 154 quotedblright +oe 944,546,14,84,-32,84 0 155 oe +/l 278,718,0,180,10,90 2 156 lslash +Bq 500,127,146,13,15,13 0 157 quotedblbase +OE 1000,737,19,164,-48,90 2 158 OE /L 611,718,0,50,16,50 2 159 Lslash -r! 333,532,186,70,0,70 0 161 exclamdown -ct 556,628,118,93,-29,90 0 162 cent +r! 333,532,186,71,0,71 0 161 exclamdown +ct 556,628,118,94,-28,90 0 162 cent Po 556,718,16,129,0,90 2 163 sterling -Cs 556,636,0,174,23,90 0 164 currency -Ye 556,698,0,207,-10,90 2 165 yen -bb 280,737,19,123,-30,90 2 166 brokenbar -sc 556,727,184,92,-11,90 2 167 section -ad 333,729,0,199,-87,90 2 168 dieresis -co 737,737,19,148,-6,90 2 169 copyright -Of 370,737,0,145,-42,90 2 170 ordfeminine -fo 333,484,0,70,-80,70 0 171 guilsinglleft -tno 584,419,0,99,-55,90 0 172 logicalnot -\- 584,309,0,76,-32,76 0 173 minus -rg 737,737,19,147,-5,90 2 174 registered -a- 333,678,0,200,-72,90 2 175 macron -de 400,712,0,117,-125,90 2 176 degree +Cs 556,636,0,175,23,90 0 164 currency +Ye 556,698,0,208,-9,90 2 165 yen +bb 280,700,150,115,-2,90 2 166 brokenbar +sc 556,727,184,93,-10,90 2 167 section +ad 333,729,0,199,-86,90 2 168 dieresis +co 737,737,19,149,-5,90 2 169 copyright +Of 370,737,0,145,-74,90 2 170 ordfeminine +fo 333,484,0,70,-79,70 0 171 guilsinglleft +tno 584,419,0,100,-55,90 0 172 logicalnot +\- 584,309,0,76,-31,76 0 173 minus +rg 737,737,19,148,-5,90 2 174 registered +a- 333,678,0,201,-72,90 2 175 macron +de 400,712,0,118,-124,90 2 176 degree t+- 584,506,0,91,10,90 0 177 plusminus S2 333,710,0,166,-19,90 2 178 twosuperior S3 333,710,0,158,-41,90 2 179 threesuperior -aa 333,750,0,232,-186,90 2 180 acute -mc 611,532,207,97,28,90 1 181 mu +aa 333,750,0,233,-186,90 2 180 acute +mc 611,532,207,99,29,90 1 181 mu ps 556,700,191,182,-48,90 2 182 paragraph -pc 278,334,0,48,-60,48 0 183 periodcentered -ac 333,0,228,0,87 1 184 cedilla +pc 278,334,0,48,-59,48 0 183 periodcentered +ac 333,0,228,0,88 1 184 cedilla S1 333,710,0,105,-98,90 2 185 onesuperior -Om 365,737,0,170,-42,90 2 186 ordmasculine -fc 333,484,0,39,-49,39 0 187 guilsinglright -14 834,710,19,22,-82,22 2 188 onequarter -12 834,710,19,74,-82,74 2 189 onehalf -34 834,710,19,55,-49,55 2 190 threequarters -r? 611,532,195,0,-3 0 191 questiondown +Om 365,737,0,170,-73,90 2 186 ordmasculine +fc 333,484,0,40,-49,40 0 187 guilsinglright +14 834,710,19,23,-81,23 2 188 onequarter +12 834,710,19,75,-81,75 2 189 onehalf +34 834,710,19,56,-49,56 2 190 threequarters +r? 611,532,195,0,-2 0 191 questiondown `A 722,936,0,30,30,30 2 192 Agrave 'A 722,936,0,78,30,78 2 193 Aacute ^A 722,936,0,34,30,34 2 194 Acircumflex -~A 722,923,0,69,30,69 2 195 Atilde -:A 722,915,0,44,30,44 2 196 Adieresis +~A 722,923,0,70,30,70 2 195 Atilde +:A 722,915,0,45,30,45 2 196 Adieresis oA 722,962,0,30,30,30 2 197 Aring AE 1000,718,0,150,45,90 2 198 AE -,C 722,737,228,117,-57,90 3 199 Ccedilla +,C 722,737,228,117,-56,90 3 199 Ccedilla `E 667,936,0,140,-26,90 2 200 Egrave 'E 667,936,0,140,-26,90 2 201 Eacute ^E 667,936,0,140,-26,90 2 202 Ecircumflex @@ -430,53 +1422,53 @@ AE 1000,718,0,150,45,90 2 198 AE `I 278,936,0,139,-14,90 2 204 Igrave 'I 278,936,0,300,-14,90 2 205 Iacute ^I 278,936,0,256,-14,90 2 206 Icircumflex -:I 278,915,0,266,-14,90 2 207 Idieresis +:I 278,915,0,267,-14,90 2 207 Idieresis -D 722,718,0,105,-12,90 2 208 Eth ~N 722,923,0,135,-19,90 2 209 Ntilde -`O 778,936,19,95,-57,90 2 210 Ograve -'O 778,936,19,95,-57,90 2 211 Oacute -^O 778,936,19,95,-57,90 2 212 Ocircumflex -~O 778,923,19,95,-57,90 2 213 Otilde -:O 778,915,19,95,-57,90 2 214 Odieresis +`O 778,936,19,96,-57,90 2 210 Ograve +'O 778,936,19,96,-57,90 2 211 Oacute +^O 778,936,19,96,-57,90 2 212 Ocircumflex +~O 778,923,19,96,-57,90 2 213 Otilde +:O 778,915,19,96,-57,90 2 214 Odieresis tmu 584,505,0,101,-7,90 0 215 multiply -/O 778,745,27,166,15,90 2 216 Oslash -`U 722,936,19,132,-66,90 2 217 Ugrave -'U 722,936,19,132,-66,90 2 218 Uacute -^U 722,936,19,132,-66,90 2 219 Ucircumflex -:U 722,915,19,132,-66,90 2 220 Udieresis -'Y 667,936,0,189,-118,90 2 221 Yacute -TP 667,718,0,99,-26,90 2 222 Thorn -ss 611,731,14,96,-19,90 2 223 germandbls -`a 556,750,14,77,-5,77 2 224 agrave -'a 556,750,14,121,-5,90 2 225 aacute -^a 556,750,14,77,-5,77 2 226 acircumflex -~a 556,737,14,113,-5,90 2 227 atilde -:a 556,729,14,88,-5,88 2 228 adieresis -oa 556,776,14,77,-5,77 2 229 aring -ae 889,546,14,84,-6,84 0 230 ae -,c 556,546,228,93,-29,90 1 231 ccedilla -`e 556,750,14,87,-20,87 2 232 egrave -'e 556,750,14,121,-20,90 2 233 eacute -^e 556,750,14,87,-20,87 2 234 ecircumflex +/O 778,745,27,167,15,90 2 216 Oslash +`U 722,936,19,132,-65,90 2 217 Ugrave +'U 722,936,19,132,-65,90 2 218 Uacute +^U 722,936,19,132,-65,90 2 219 Ucircumflex +:U 722,915,19,132,-65,90 2 220 Udieresis +'Y 667,936,0,189,-117,90 2 221 Yacute +TP 667,718,0,100,-26,90 2 222 Thorn +ss 611,731,14,97,-19,90 2 223 germandbls +`a 556,750,14,78,-4,78 2 224 agrave +'a 556,750,14,122,-4,90 2 225 aacute +^a 556,750,14,78,-4,78 2 226 acircumflex +~a 556,737,14,113,-4,90 2 227 atilde +:a 556,729,14,88,-4,88 2 228 adieresis +oa 556,776,14,78,-4,78 2 229 aring +ae 889,546,14,85,-5,85 0 230 ae +,c 556,546,228,94,-28,90 1 231 ccedilla +`e 556,750,14,88,-20,88 2 232 egrave +'e 556,750,14,122,-20,90 2 233 eacute +^e 556,750,14,88,-20,88 2 234 ecircumflex :e 556,729,14,88,-20,88 2 235 edieresis -`i 278,750,0,98,-19,90 2 236 igrave -'i 278,750,0,260,-19,90 2 237 iacute -^i 278,750,0,216,-19,90 2 238 icircumflex +`i 278,750,0,99,-19,90 2 236 igrave +'i 278,750,0,261,-19,90 2 237 iacute +^i 278,750,0,217,-19,90 2 238 icircumflex :i 278,729,0,227,-19,90 2 239 idieresis -Sd 611,737,14,109,-32,90 2 240 eth +Sd 611,737,14,109,-31,90 2 240 eth ~n 611,737,0,85,-15,85 2 241 ntilde `o 611,750,14,82,-32,82 2 242 ograve -'o 611,750,14,93,-32,90 2 243 oacute +'o 611,750,14,94,-32,90 2 243 oacute ^o 611,750,14,82,-32,82 2 244 ocircumflex ~o 611,737,14,85,-32,85 2 245 otilde :o 611,729,14,82,-32,82 2 246 odieresis -tdi 584,548,42,76,-32,76 0 247 divide -/o 611,560,29,140,28,90 0 248 oslash -`u 611,750,14,97,-48,90 2 249 ugrave -'u 611,750,14,97,-48,90 2 250 uacute -^u 611,750,14,97,-48,90 2 251 ucircumflex -:u 611,729,14,97,-48,90 2 252 udieresis -'y 556,750,214,146,8,90 3 253 yacute -Tp 611,718,208,84,32,84 3 254 thorn -:y 556,729,214,146,8,90 3 255 ydieresis +tdi 584,548,42,76,-31,76 0 247 divide +/o 611,560,29,141,28,90 0 248 oslash +`u 611,750,14,98,-47,90 2 249 ugrave +'u 611,750,14,98,-47,90 2 250 uacute +^u 611,750,14,98,-47,90 2 251 ucircumflex +:u 611,729,14,98,-47,90 2 252 udieresis +'y 556,750,214,147,9,90 3 253 yacute +Tp 611,718,208,85,33,85 3 254 thorn +:y 556,729,214,147,9,90 3 255 ydieresis u2026 1000,146,0,0,-42 0 256 ellipsis diff --git a/contrib/groff/font/devps/HI b/contrib/groff/font/devps/HI index 20055dfda8..138fbe5bf1 100644 --- a/contrib/groff/font/devps/HI +++ b/contrib/groff/font/devps/HI @@ -1,521 +1,1590 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Helvetica Oblique +# Version 003.001 +# FamilyName Helvetica +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 12:49:11 1999 +# Comment UniqueID 44702 +# Comment VMusage 11195 50629 + name HI internalname Helvetica-Oblique slant 12 spacewidth 278 encoding text.enc ligatures fi fl 0 + kernpairs -A y -40 -A w -40 -A v -40 -A u -30 -A Y -100 -A W -50 -A V -70 -A U -50 -A T -120 -A Q -30 -A O -30 -A G -30 A C -30 -B . -20 -B , -20 +A ,C -30 +A G -30 +A O -30 +A 'O -30 +A ^O -30 +A :O -30 +A `O -30 +A /O -30 +A ~O -30 +A Q -30 +A T -120 +A U -50 +A 'U -50 +A ^U -50 +A :U -50 +A `U -50 +A V -70 +A W -50 +A Y -100 +A 'Y -100 +A :Y -100 +A u -30 +A 'u -30 +A ^u -30 +A :u -30 +A `u -30 +A v -40 +A w -40 +A y -40 +A 'y -40 +A :y -40 +'A C -30 +'A ,C -30 +'A G -30 +'A O -30 +'A 'O -30 +'A ^O -30 +'A :O -30 +'A `O -30 +'A /O -30 +'A ~O -30 +'A Q -30 +'A T -120 +'A U -50 +'A 'U -50 +'A ^U -50 +'A :U -50 +'A `U -50 +'A V -70 +'A W -50 +'A Y -100 +'A 'Y -100 +'A :Y -100 +'A u -30 +'A 'u -30 +'A ^u -30 +'A :u -30 +'A `u -30 +'A v -40 +'A w -40 +'A y -40 +'A 'y -40 +'A :y -40 +^A C -30 +^A ,C -30 +^A G -30 +^A O -30 +^A 'O -30 +^A ^O -30 +^A :O -30 +^A `O -30 +^A /O -30 +^A ~O -30 +^A Q -30 +^A T -120 +^A U -50 +^A 'U -50 +^A ^U -50 +^A :U -50 +^A `U -50 +^A V -70 +^A W -50 +^A Y -100 +^A 'Y -100 +^A :Y -100 +^A u -30 +^A 'u -30 +^A ^u -30 +^A :u -30 +^A `u -30 +^A v -40 +^A w -40 +^A y -40 +^A 'y -40 +^A :y -40 +:A C -30 +:A ,C -30 +:A G -30 +:A O -30 +:A 'O -30 +:A ^O -30 +:A :O -30 +:A `O -30 +:A /O -30 +:A ~O -30 +:A Q -30 +:A T -120 +:A U -50 +:A 'U -50 +:A ^U -50 +:A :U -50 +:A `U -50 +:A V -70 +:A W -50 +:A Y -100 +:A 'Y -100 +:A :Y -100 +:A u -30 +:A 'u -30 +:A ^u -30 +:A :u -30 +:A `u -30 +:A v -40 +:A w -40 +:A y -40 +:A 'y -40 +:A :y -40 +`A C -30 +`A ,C -30 +`A G -30 +`A O -30 +`A 'O -30 +`A ^O -30 +`A :O -30 +`A `O -30 +`A /O -30 +`A ~O -30 +`A Q -30 +`A T -120 +`A U -50 +`A 'U -50 +`A ^U -50 +`A :U -50 +`A `U -50 +`A V -70 +`A W -50 +`A Y -100 +`A 'Y -100 +`A :Y -100 +`A u -30 +`A 'u -30 +`A ^u -30 +`A :u -30 +`A `u -30 +`A v -40 +`A w -40 +`A y -40 +`A 'y -40 +`A :y -40 +oA C -30 +oA ,C -30 +oA G -30 +oA O -30 +oA 'O -30 +oA ^O -30 +oA :O -30 +oA `O -30 +oA /O -30 +oA ~O -30 +oA Q -30 +oA T -120 +oA U -50 +oA 'U -50 +oA ^U -50 +oA :U -50 +oA `U -50 +oA V -70 +oA W -50 +oA Y -100 +oA 'Y -100 +oA :Y -100 +oA u -30 +oA 'u -30 +oA ^u -30 +oA :u -30 +oA `u -30 +oA v -40 +oA w -40 +oA y -40 +oA 'y -40 +oA :y -40 +~A C -30 +~A ,C -30 +~A G -30 +~A O -30 +~A 'O -30 +~A ^O -30 +~A :O -30 +~A `O -30 +~A /O -30 +~A ~O -30 +~A Q -30 +~A T -120 +~A U -50 +~A 'U -50 +~A ^U -50 +~A :U -50 +~A `U -50 +~A V -70 +~A W -50 +~A Y -100 +~A 'Y -100 +~A :Y -100 +~A u -30 +~A 'u -30 +~A ^u -30 +~A :u -30 +~A `u -30 +~A v -40 +~A w -40 +~A y -40 +~A 'y -40 +~A :y -40 B U -10 -C . -30 +B 'U -10 +B ^U -10 +B :U -10 +B `U -10 +B , -20 +B . -20 C , -30 -D . -70 -D , -70 -D Y -90 -D W -40 -D V -70 +C . -30 +,C , -30 +,C . -30 D A -40 -F r -45 -F . -150 -F o -30 -F e -30 -F , -150 -F a -50 +D 'A -40 +D ^A -40 +D :A -40 +D `A -40 +D oA -40 +D ~A -40 +D V -70 +D W -40 +D Y -90 +D 'Y -90 +D :Y -90 +D , -70 +D . -70 F A -80 -J u -20 -J . -30 -J , -30 -J a -20 +F 'A -80 +F ^A -80 +F :A -80 +F `A -80 +F oA -80 +F ~A -80 +F a -50 +F 'a -50 +F ^a -50 +F :a -50 +F `a -50 +F oa -50 +F ~a -50 +F , -150 +F e -30 +F 'e -30 +F ^e -30 +F :e -30 +F `e -30 +F o -30 +F 'o -30 +F ^o -30 +F :o -30 +F `o -30 +F /o -30 +F ~o -30 +F . -150 +F r -45 J A -20 -K y -50 -K u -30 -K o -40 -K e -40 +J 'A -20 +J ^A -20 +J :A -20 +J `A -20 +J oA -20 +J ~A -20 +J a -20 +J 'a -20 +J ^a -20 +J :a -20 +J `a -20 +J oa -20 +J ~a -20 +J , -30 +J . -30 +J u -20 +J 'u -20 +J ^u -20 +J :u -20 +J `u -20 K O -50 -L y -30 +K 'O -50 +K ^O -50 +K :O -50 +K `O -50 +K /O -50 +K ~O -50 +K e -40 +K 'e -40 +K ^e -40 +K :e -40 +K `e -40 +K o -40 +K 'o -40 +K ^o -40 +K :o -40 +K `o -40 +K /o -40 +K ~o -40 +K u -30 +K 'u -30 +K ^u -30 +K :u -30 +K `u -30 +K y -50 +K 'y -50 +K :y -50 +L T -110 +L V -110 +L W -70 +L Y -140 +L 'Y -140 +L :Y -140 +L rq -140 L ' -160 L cq -160 -L rq -140 -L Y -140 -L W -70 -L V -110 -L T -110 -O . -40 -O , -40 -O Y -70 -O X -60 -O W -30 -O V -50 -O T -40 +L y -30 +L 'y -30 +L :y -30 +/L T -110 +/L V -110 +/L W -70 +/L Y -140 +/L 'Y -140 +/L :Y -140 +/L rq -140 +/L ' -160 +/L cq -160 +/L y -30 +/L 'y -30 +/L :y -30 O A -20 -P . -180 -P o -50 -P e -50 -P , -180 -P a -40 +O 'A -20 +O ^A -20 +O :A -20 +O `A -20 +O oA -20 +O ~A -20 +O T -40 +O V -50 +O W -30 +O X -60 +O Y -70 +O 'Y -70 +O :Y -70 +O , -40 +O . -40 +'O A -20 +'O 'A -20 +'O ^A -20 +'O :A -20 +'O `A -20 +'O oA -20 +'O ~A -20 +'O T -40 +'O V -50 +'O W -30 +'O X -60 +'O Y -70 +'O 'Y -70 +'O :Y -70 +'O , -40 +'O . -40 +^O A -20 +^O 'A -20 +^O ^A -20 +^O :A -20 +^O `A -20 +^O oA -20 +^O ~A -20 +^O T -40 +^O V -50 +^O W -30 +^O X -60 +^O Y -70 +^O 'Y -70 +^O :Y -70 +^O , -40 +^O . -40 +:O A -20 +:O 'A -20 +:O ^A -20 +:O :A -20 +:O `A -20 +:O oA -20 +:O ~A -20 +:O T -40 +:O V -50 +:O W -30 +:O X -60 +:O Y -70 +:O 'Y -70 +:O :Y -70 +:O , -40 +:O . -40 +`O A -20 +`O 'A -20 +`O ^A -20 +`O :A -20 +`O `A -20 +`O oA -20 +`O ~A -20 +`O T -40 +`O V -50 +`O W -30 +`O X -60 +`O Y -70 +`O 'Y -70 +`O :Y -70 +`O , -40 +`O . -40 +/O A -20 +/O 'A -20 +/O ^A -20 +/O :A -20 +/O `A -20 +/O oA -20 +/O ~A -20 +/O T -40 +/O V -50 +/O W -30 +/O X -60 +/O Y -70 +/O 'Y -70 +/O :Y -70 +/O , -40 +/O . -40 +~O A -20 +~O 'A -20 +~O ^A -20 +~O :A -20 +~O `A -20 +~O oA -20 +~O ~A -20 +~O T -40 +~O V -50 +~O W -30 +~O X -60 +~O Y -70 +~O 'Y -70 +~O :Y -70 +~O , -40 +~O . -40 P A -120 +P 'A -120 +P ^A -120 +P :A -120 +P `A -120 +P oA -120 +P ~A -120 +P a -40 +P 'a -40 +P ^a -40 +P :a -40 +P `a -40 +P oa -40 +P ~a -40 +P , -180 +P e -50 +P 'e -50 +P ^e -50 +P :e -50 +P `e -50 +P o -50 +P 'o -50 +P ^o -50 +P :o -50 +P `o -50 +P /o -50 +P ~o -50 +P . -180 Q U -10 -R Y -50 -R W -30 -R V -50 -R U -40 -R T -30 +Q 'U -10 +Q ^U -10 +Q :U -10 +Q `U -10 R O -20 -S . -20 +R 'O -20 +R ^O -20 +R :O -20 +R `O -20 +R /O -20 +R ~O -20 +R T -30 +R U -40 +R 'U -40 +R ^U -40 +R :U -40 +R `U -40 +R V -50 +R W -30 +R Y -50 +R 'Y -50 +R :Y -50 S , -20 -T y -120 -T w -120 -T u -120 -T ; -20 -T r -120 -T . -120 -T o -120 +S . -20 +vS , -20 +vS . -20 +T A -120 +T 'A -120 +T ^A -120 +T :A -120 +T `A -120 +T oA -120 +T ~A -120 +T O -40 +T 'O -40 +T ^O -40 +T :O -40 +T `O -40 +T /O -40 +T ~O -40 +T a -120 +T 'a -120 +T ^a -120 +T :a -120 +T `a -120 +T oa -120 +T ~a -60 +T : -20 +T , -120 +T e -120 +T 'e -120 +T ^e -120 +T :e -120 +T `e -60 T - -140 T hy -140 -T e -120 -T , -120 -T : -20 -T a -120 -T O -40 -T A -120 -U . -40 -U , -40 +T o -120 +T 'o -120 +T ^o -120 +T :o -120 +T `o -120 +T /o -120 +T ~o -60 +T . -120 +T r -120 +T ; -20 +T u -120 +T 'u -120 +T ^u -120 +T :u -120 +T `u -120 +T w -120 +T y -120 +T 'y -120 +T :y -60 U A -40 -V u -70 -V ; -40 -V . -125 -V o -80 +U 'A -40 +U ^A -40 +U :A -40 +U `A -40 +U oA -40 +U ~A -40 +U , -40 +U . -40 +'U A -40 +'U 'A -40 +'U ^A -40 +'U :A -40 +'U `A -40 +'U oA -40 +'U ~A -40 +'U , -40 +'U . -40 +^U A -40 +^U 'A -40 +^U ^A -40 +^U :A -40 +^U `A -40 +^U oA -40 +^U ~A -40 +^U , -40 +^U . -40 +:U A -40 +:U 'A -40 +:U ^A -40 +:U :A -40 +:U `A -40 +:U oA -40 +:U ~A -40 +:U , -40 +:U . -40 +`U A -40 +`U 'A -40 +`U ^A -40 +`U :A -40 +`U `A -40 +`U oA -40 +`U ~A -40 +`U , -40 +`U . -40 +V A -80 +V 'A -80 +V ^A -80 +V :A -80 +V `A -80 +V oA -80 +V ~A -80 +V G -40 +V O -40 +V 'O -40 +V ^O -40 +V :O -40 +V `O -40 +V /O -40 +V ~O -40 +V a -70 +V 'a -70 +V ^a -70 +V :a -70 +V `a -70 +V oa -70 +V ~a -70 +V : -40 +V , -125 +V e -80 +V 'e -80 +V ^e -80 +V :e -80 +V `e -80 V - -80 V hy -80 -V e -80 -V , -125 -V : -40 -V a -70 -V O -40 -V G -40 -V A -80 -W y -20 -W u -30 -W . -80 -W o -30 +V o -80 +V 'o -80 +V ^o -80 +V :o -80 +V `o -80 +V /o -80 +V ~o -80 +V . -125 +V ; -40 +V u -70 +V 'u -70 +V ^u -70 +V :u -70 +V `u -70 +W A -50 +W 'A -50 +W ^A -50 +W :A -50 +W `A -50 +W oA -50 +W ~A -50 +W O -20 +W 'O -20 +W ^O -20 +W :O -20 +W `O -20 +W /O -20 +W ~O -20 +W a -40 +W 'a -40 +W ^a -40 +W :a -40 +W `a -40 +W oa -40 +W ~a -40 +W , -80 +W e -30 +W 'e -30 +W ^e -30 +W :e -30 +W `e -30 W - -40 W hy -40 -W e -30 -W , -80 -W a -40 -W O -20 -W A -50 -Y u -110 -Y ; -60 -Y . -140 -Y o -140 -Y i -20 +W o -30 +W 'o -30 +W ^o -30 +W :o -30 +W `o -30 +W /o -30 +W ~o -30 +W . -80 +W u -30 +W 'u -30 +W ^u -30 +W :u -30 +W `u -30 +W y -20 +W 'y -20 +W :y -20 +Y A -110 +Y 'A -110 +Y ^A -110 +Y :A -110 +Y `A -110 +Y oA -110 +Y ~A -110 +Y O -85 +Y 'O -85 +Y ^O -85 +Y :O -85 +Y `O -85 +Y /O -85 +Y ~O -85 +Y a -140 +Y 'a -140 +Y ^a -140 +Y :a -140 +Y `a -140 +Y oa -140 +Y ~a -140 +Y : -60 +Y , -140 +Y e -140 +Y 'e -140 +Y ^e -140 +Y :e -140 +Y `e -140 Y - -140 Y hy -140 -Y e -140 -Y , -140 -Y : -60 -Y a -140 -Y O -85 -Y A -110 -a y -30 -a w -20 +Y i -20 +Y 'i -20 +Y o -140 +Y 'o -140 +Y ^o -140 +Y :o -140 +Y `o -140 +Y /o -140 +Y ~o -140 +Y . -140 +Y ; -60 +Y u -110 +Y 'u -110 +Y ^u -110 +Y :u -110 +Y `u -110 +'Y A -110 +'Y 'A -110 +'Y ^A -110 +'Y :A -110 +'Y `A -110 +'Y oA -110 +'Y ~A -110 +'Y O -85 +'Y 'O -85 +'Y ^O -85 +'Y :O -85 +'Y `O -85 +'Y /O -85 +'Y ~O -85 +'Y a -140 +'Y 'a -140 +'Y ^a -140 +'Y :a -140 +'Y `a -140 +'Y oa -140 +'Y ~a -70 +'Y : -60 +'Y , -140 +'Y e -140 +'Y 'e -140 +'Y ^e -140 +'Y :e -140 +'Y `e -140 +'Y - -140 +'Y hy -140 +'Y i -20 +'Y 'i -20 +'Y o -140 +'Y 'o -140 +'Y ^o -140 +'Y :o -140 +'Y `o -140 +'Y /o -140 +'Y ~o -140 +'Y . -140 +'Y ; -60 +'Y u -110 +'Y 'u -110 +'Y ^u -110 +'Y :u -110 +'Y `u -110 +:Y A -110 +:Y 'A -110 +:Y ^A -110 +:Y :A -110 +:Y `A -110 +:Y oA -110 +:Y ~A -110 +:Y O -85 +:Y 'O -85 +:Y ^O -85 +:Y :O -85 +:Y `O -85 +:Y /O -85 +:Y ~O -85 +:Y a -140 +:Y 'a -140 +:Y ^a -140 +:Y :a -140 +:Y `a -140 +:Y oa -140 +:Y ~a -70 +:Y : -60 +:Y , -140 +:Y e -140 +:Y 'e -140 +:Y ^e -140 +:Y :e -140 +:Y `e -140 +:Y - -140 +:Y hy -140 +:Y i -20 +:Y 'i -20 +:Y o -140 +:Y 'o -140 +:Y ^o -140 +:Y :o -140 +:Y `o -140 +:Y /o -140 +:Y ~o -140 +:Y . -140 +:Y ; -60 +:Y u -110 +:Y 'u -110 +:Y ^u -110 +:Y :u -110 +:Y `u -110 a v -20 -b y -20 -b v -20 -b u -20 -b . -40 -b l -20 -b , -40 +a w -20 +a y -30 +a 'y -30 +a :y -30 +'a v -20 +'a w -20 +'a y -30 +'a 'y -30 +'a :y -30 +^a v -20 +^a w -20 +^a y -30 +^a 'y -30 +^a :y -30 +:a v -20 +:a w -20 +:a y -30 +:a 'y -30 +:a :y -30 +`a v -20 +`a w -20 +`a y -30 +`a 'y -30 +`a :y -30 +oa v -20 +oa w -20 +oa y -30 +oa 'y -30 +oa :y -30 +~a v -20 +~a w -20 +~a y -30 +~a 'y -30 +~a :y -30 b b -10 -c k -20 +b , -40 +b l -20 +b /l -20 +b . -40 +b u -20 +b 'u -20 +b ^u -20 +b :u -20 +b `u -20 +b v -20 +b y -20 +b 'y -20 +b :y -20 c , -15 +c k -20 +,c , -15 +,c k -20 : u0020 -50 +, rq -100 , ' -100 , cq -100 -, rq -100 -e y -20 -e x -30 -e w -20 -e v -30 -e . -15 e , -15 +e . -15 +e v -30 +e w -20 +e x -30 +e y -20 +e 'y -20 +e :y -20 +'e , -15 +'e . -15 +'e v -30 +'e w -20 +'e x -30 +'e y -20 +'e 'y -20 +'e :y -20 +^e , -15 +^e . -15 +^e v -30 +^e w -20 +^e x -30 +^e y -20 +^e 'y -20 +^e :y -20 +:e , -15 +:e . -15 +:e v -30 +:e w -20 +:e x -30 +:e y -20 +:e 'y -20 +:e :y -20 +`e , -15 +`e . -15 +`e v -30 +`e w -20 +`e x -30 +`e y -20 +`e 'y -20 +`e :y -20 +f a -30 +f 'a -30 +f ^a -30 +f :a -30 +f `a -30 +f oa -30 +f ~a -30 +f , -30 +f .i -28 +f e -30 +f 'e -30 +f ^e -30 +f :e -30 +f `e -30 +f o -30 +f 'o -30 +f ^o -30 +f :o -30 +f `o -30 +f /o -30 +f ~o -30 +f . -30 +f rq 60 f ' 50 f cq 50 -f rq 60 -f . -30 -f o -30 -f e -30 -f .i -28 -f , -30 -f a -30 g r -10 h y -30 -k o -20 +h 'y -30 +h :y -30 k e -20 -m y -15 +k 'e -20 +k ^e -20 +k :e -20 +k `e -20 +k o -20 +k 'o -20 +k ^o -20 +k :o -20 +k `o -20 +k /o -20 +k ~o -20 m u -10 -n y -15 -n v -20 +m 'u -10 +m ^u -10 +m :u -10 +m `u -10 +m y -15 +m 'y -15 +m :y -15 n u -10 -o y -30 -o x -30 -o w -15 -o v -15 -o . -40 +n 'u -10 +n ^u -10 +n :u -10 +n `u -10 +n v -20 +n y -15 +n 'y -15 +n :y -15 +~n u -10 +~n 'u -10 +~n ^u -10 +~n :u -10 +~n `u -10 +~n v -20 +~n y -15 +~n 'y -15 +~n :y -15 o , -40 -/o z -55 -/o y -70 -/o x -85 -/o w -70 -/o v -70 -/o u -55 -/o t -55 -/o s -55 -/o r -55 -/o q -55 -/o . -95 -/o p -55 -/o o -55 -/o n -55 -/o m -55 -/o l -55 -/o k -55 -/o j -55 -/o i -55 -/o h -55 -/o g -55 -/o f -55 -/o e -55 -/o d -55 -/o , -95 -/o c -55 -/o b -55 +o . -40 +o v -15 +o w -15 +o x -30 +o y -30 +o 'y -30 +o :y -30 +'o , -40 +'o . -40 +'o v -15 +'o w -15 +'o x -30 +'o y -30 +'o 'y -30 +'o :y -30 +^o , -40 +^o . -40 +^o v -15 +^o w -15 +^o x -30 +^o y -30 +^o 'y -30 +^o :y -30 +:o , -40 +:o . -40 +:o v -15 +:o w -15 +:o x -30 +:o y -30 +:o 'y -30 +:o :y -30 +`o , -40 +`o . -40 +`o v -15 +`o w -15 +`o x -30 +`o y -30 +`o 'y -30 +`o :y -30 /o a -55 -p y -30 -p . -35 +/o 'a -55 +/o ^a -55 +/o :a -55 +/o `a -55 +/o oa -55 +/o ~a -55 +/o b -55 +/o c -55 +/o ,c -55 +/o , -95 +/o d -55 +/o e -55 +/o 'e -55 +/o ^e -55 +/o :e -55 +/o `e -55 +/o f -55 +/o g -55 +/o h -55 +/o i -55 +/o 'i -55 +/o ^i -55 +/o :i -55 +/o `i -55 +/o j -55 +/o k -55 +/o l -55 +/o /l -55 +/o m -55 +/o n -55 +/o ~n -55 +/o o -55 +/o 'o -55 +/o ^o -55 +/o :o -55 +/o `o -55 +/o /o -55 +/o ~o -55 +/o p -55 +/o . -95 +/o q -55 +/o r -55 +/o s -55 +/o vs -55 +/o t -55 +/o u -55 +/o 'u -55 +/o ^u -55 +/o :u -55 +/o `u -55 +/o v -70 +/o w -70 +/o x -85 +/o y -70 +/o 'y -70 +/o :y -70 +/o z -55 +/o vz -55 +~o , -40 +~o . -40 +~o v -15 +~o w -15 +~o x -30 +~o y -30 +~o 'y -30 +~o :y -30 p , -35 -. u0020 -60 +p . -35 +p y -30 +p 'y -30 +p :y -30 +. rq -100 . ' -100 . cq -100 -. rq -100 +. u0020 -60 rq u0020 -40 ` ` -57 ` oq -57 oq ` -57 oq oq -57 -' u0020 -70 -cq u0020 -70 -' s -50 -cq s -50 -' r -50 -cq r -50 +' d -50 +cq d -50 ' ' -57 ' cq -57 cq ' -57 cq cq -57 -' d -50 -cq d -50 -r y 30 -r v 30 -r u 15 -r t 40 -r ; 30 -r . -50 -r p 30 -r n 25 -r m 25 -r l 15 -r k 15 -r i 15 -r , -50 -r : 30 +' r -50 +cq r -50 +' s -50 +cq s -50 +' vs -50 +cq vs -50 +' u0020 -70 +cq u0020 -70 r a -10 -s w -30 -s . -15 +r 'a -10 +r ^a -10 +r :a -10 +r `a -10 +r oa -10 +r ~a -10 +r : 30 +r , -50 +r i 15 +r 'i 15 +r ^i 15 +r :i 15 +r `i 15 +r k 15 +r l 15 +r /l 15 +r m 25 +r n 25 +r ~n 25 +r p 30 +r . -50 +r ; 30 +r t 40 +r u 15 +r 'u 15 +r ^u 15 +r :u 15 +r `u 15 +r v 30 +r y 30 +r 'y 30 +r :y 30 s , -15 +s . -15 +s w -30 +vs , -15 +vs . -15 +vs w -30 ; u0020 -50 +u0020 T -50 +u0020 V -50 +u0020 W -40 +u0020 Y -90 +u0020 'Y -90 +u0020 :Y -90 +u0020 lq -30 u0020 ` -60 u0020 oq -60 -u0020 lq -30 -u0020 Y -90 -u0020 W -40 -u0020 V -50 -u0020 T -50 -v . -80 -v o -25 -v e -25 -v , -80 v a -25 -w . -60 -w o -10 -w e -10 -w , -60 +v 'a -25 +v ^a -25 +v :a -25 +v `a -25 +v oa -25 +v ~a -25 +v , -80 +v e -25 +v 'e -25 +v ^e -25 +v :e -25 +v `e -25 +v o -25 +v 'o -25 +v ^o -25 +v :o -25 +v `o -25 +v /o -25 +v ~o -25 +v . -80 w a -15 +w 'a -15 +w ^a -15 +w :a -15 +w `a -15 +w oa -15 +w ~a -15 +w , -60 +w e -10 +w 'e -10 +w ^e -10 +w :e -10 +w `e -10 +w o -10 +w 'o -10 +w ^o -10 +w :o -10 +w `o -10 +w /o -10 +w ~o -10 +w . -60 x e -30 -y . -100 -y o -20 -y e -20 -y , -100 +x 'e -30 +x ^e -30 +x :e -30 +x `e -30 y a -20 -z o -15 +y 'a -20 +y ^a -20 +y :a -20 +y `a -20 +y oa -20 +y ~a -20 +y , -100 +y e -20 +y 'e -20 +y ^e -20 +y :e -20 +y `e -20 +y o -20 +y 'o -20 +y ^o -20 +y :o -20 +y `o -20 +y /o -20 +y ~o -20 +y . -100 +'y a -20 +'y 'a -20 +'y ^a -20 +'y :a -20 +'y `a -20 +'y oa -20 +'y ~a -20 +'y , -100 +'y e -20 +'y 'e -20 +'y ^e -20 +'y :e -20 +'y `e -20 +'y o -20 +'y 'o -20 +'y ^o -20 +'y :o -20 +'y `o -20 +'y /o -20 +'y ~o -20 +'y . -100 +:y a -20 +:y 'a -20 +:y ^a -20 +:y :a -20 +:y `a -20 +:y oa -20 +:y ~a -20 +:y , -100 +:y e -20 +:y 'e -20 +:y ^e -20 +:y :e -20 +:y `e -20 +:y o -20 +:y 'o -20 +:y ^o -20 +:y :o -20 +:y `o -20 +:y /o -20 +:y ~o -20 +:y . -100 z e -15 +z 'e -15 +z ^e -15 +z :e -15 +z `e -15 +z o -15 +z 'o -15 +z ^o -15 +z :o -15 +z `o -15 +z /o -15 +z ~o -15 +vz e -15 +vz 'e -15 +vz ^e -15 +vz :e -15 +vz `e -15 +vz o -15 +vz 'o -15 +vz ^o -15 +vz :o -15 +vz `o -15 +vz /o -15 +vz ~o -15 + charset -ha 469,688,0,120,8,89 2 0 asciicircum -ti 584,326,0,46,-61,46 0 1 asciitilde -vS 667,929,19,96,-40,89 2 2 Scaron +ha 469,688,0,121,8,89 2 0 asciicircum +ti 584,326,0,47,-61,47 0 1 asciitilde +vS 667,929,19,96,-39,89 2 2 Scaron vZ 611,929,0,180,27,89 2 3 Zcaron -vs 500,734,15,102,-13,89 2 4 scaron -vz 500,734,0,121,19,89 2 5 zcaron -:Y 667,901,0,189,-117,89 2 6 Ydieresis -tm 1000,718,0,106,-136,89 2 7 trademark +vs 500,734,15,103,-13,89 2 4 scaron +vz 500,734,0,122,19,89 2 5 zcaron +:Y 667,901,0,189,-116,89 2 6 Ydieresis +tm 1000,718,0,106,-135,89 2 7 trademark aq 191,718,0,144,-107,89 2 8 quotesingle +Eu 556,703,19,169,-22,89 2 9 Euro space 278 0 32 space ! 278,718,0,112,-40,89 2 33 exclam " 355,718,0,133,-118,89 2 34 quotedbl dq " -# 556,688,0,125,-23,89 2 35 numbersign +# 556,688,0,125,-22,89 2 35 numbersign sh " -$ 556,775,115,111,-19,89 2 36 dollar +$ 556,775,115,112,-18,89 2 36 dollar Do " -% 889,703,19,50,-97,50 2 37 percent -& 667,718,15,30,-27,30 2 38 ampersand +% 889,703,19,50,-96,50 2 37 percent +& 667,718,15,30,-26,30 2 38 ampersand ' 222,718,0,138,-101,89 2 39 quoteright cq " ( 333,733,207,171,-58,89 3 40 parenleft ) 333,733,207,54,59,54 3 41 parenright -* 389,718,0,136,-115,89 2 42 asterisk -+ 584,505,0,72,-35,72 0 43 plus -, 278,106,147,0,-6 0 44 comma -- 333,322,0,74,-43,74 0 45 hyphen +* 389,718,0,136,-114,89 2 42 asterisk ++ 584,505,0,73,-34,73 0 43 plus +, 278,106,147,0,-5 0 44 comma +- 333,322,0,75,-43,75 0 45 hyphen hy " . 278,106,0,0,-37 0 46 period -/ 278,737,19,224,71,89 2 47 slash +/ 278,737,19,224,72,89 2 47 slash sl " -0 556,703,19,102,-43,89 2 48 zero -1 556,703,0,2,-157,2 2 49 one -2 556,703,0,111,24,89 2 50 two -3 556,703,19,104,-25,89 2 51 three +0 556,703,19,103,-43,89 2 48 zero +1 556,703,0,3,-157,3 2 49 one +2 556,703,0,112,24,89 2 50 two +3 556,703,19,104,-24,89 2 51 three 4 556,703,0,70,-11,70 2 52 four -5 556,688,19,115,-18,89 2 53 five -6 556,703,19,109,-41,89 2 54 six -7 556,688,0,163,-87,89 2 55 seven -8 556,703,19,101,-24,89 2 56 eight -9 556,703,19,103,-32,89 2 57 nine +5 556,688,19,116,-17,89 2 53 five +6 556,703,19,110,-40,89 2 54 six +7 556,688,0,164,-87,89 2 55 seven +8 556,703,19,101,-23,89 2 56 eight +9 556,703,19,104,-32,89 2 57 nine : 278,516,0,73,-37,73 0 58 colon -; 278,516,147,73,-6,73 0 59 semicolon -< 584,495,0,107,-44,89 0 60 less +; 278,516,147,73,-5,73 0 59 semicolon +< 584,495,0,108,-44,89 0 60 less = 584,390,0,94,-13,89 0 61 equal -> 584,495,0,63,0,63 0 62 greater -? 556,727,0,104,-111,89 2 63 question -@ 1015,737,19,0,-165 2 64 at +> 584,495,0,64,0,64 0 62 greater +? 556,727,0,104,-110,89 2 63 question +@ 1015,737,19,1,-164,1 2 64 at at " A 667,718,0,37,36,37 2 65 A B 667,718,0,95,-24,89 2 66 B -C 722,737,19,110,-58,89 2 67 C +C 722,737,19,110,-57,89 2 67 C D 722,718,0,92,-31,89 2 68 D E 667,718,0,145,-36,89 2 69 E F 611,718,0,175,-36,89 2 70 F -G 778,737,19,71,-61,71 2 71 G +G 778,737,19,72,-60,72 2 71 G H 722,718,0,127,-27,89 2 72 H I 278,718,0,113,-41,89 2 73 I -J 500,718,19,131,3,89 2 74 J +J 500,718,19,131,4,89 2 74 J K 667,718,0,191,-26,89 2 75 K -L 556,718,0,49,-26,49 2 76 L +L 556,718,0,50,-26,50 2 76 L M 833,718,0,131,-23,89 2 77 M N 722,718,0,127,-26,89 2 78 N -O 778,737,19,98,-55,89 2 79 O +O 778,737,19,98,-54,89 2 79 O P 667,718,0,120,-36,89 2 80 P -Q 778,737,56,98,-55,89 2 81 Q -R 722,718,0,101,-38,89 2 82 R -S 667,737,19,96,-40,89 2 83 S +Q 778,737,56,98,-54,89 2 81 Q +R 722,718,0,102,-38,89 2 82 R +S 667,737,19,96,-39,89 2 83 S T 611,718,0,189,-98,89 2 84 T U 722,718,19,125,-73,89 2 85 U -V 667,718,0,183,-123,89 2 86 V -W 944,718,0,187,-119,89 2 87 W +V 667,718,0,183,-122,89 2 86 V +W 944,718,0,187,-118,89 2 87 W X 667,718,0,173,31,89 2 88 X -Y 667,718,0,189,-117,89 2 89 Y +Y 667,718,0,189,-116,89 2 89 Y Z 611,718,0,180,27,89 2 90 Z -[ 278,722,196,175,29,89 2 91 bracketleft +[ 278,722,196,176,29,89 2 91 bracketleft lB " -\ 278,737,19,63,-90,63 2 92 backslash +\ 278,737,19,63,-89,63 2 92 backslash rs " -] 278,722,196,140,64,89 2 93 bracketright +] 278,722,196,141,64,89 2 93 bracketright rB " -a^ 333,734,0,155,-97,89 2 94 circumflex +a^ 333,734,0,156,-97,89 2 94 circumflex ^ " -_ 556,0,125,34,77,34 0 95 underscore -` 222,725,0,151,-115,89 2 96 quoteleft +_ 556,0,125,35,77,35 0 95 underscore +` 222,725,0,152,-114,89 2 96 quoteleft oq " a 556,538,15,53,-11,53 0 97 a -b 556,718,15,78,-8,78 2 98 b -c 500,538,15,103,-24,89 0 99 c -d 556,718,15,146,-34,89 2 100 d -e 556,538,15,72,-34,72 0 101 e -f 278,728,0,188,-36,89 2 102 f -g 556,538,220,104,8,89 1 103 g +b 556,718,15,79,-8,79 2 98 b +c 500,538,15,104,-24,89 0 99 c +d 556,718,15,146,-33,89 2 100 d +e 556,538,15,73,-34,73 0 101 e +f 278,728,0,189,-36,89 2 102 f +g 556,538,220,105,9,89 1 103 g h 556,718,0,67,-15,67 2 104 h i 222,718,0,136,-17,89 2 105 i j 222,718,210,136,110,89 3 106 j -k 500,718,0,150,-17,89 2 107 k +k 500,718,0,151,-17,89 2 107 k l 222,718,0,136,-17,89 2 108 l m 833,538,0,69,-15,69 0 109 m n 556,538,0,67,-15,67 0 110 n -o 556,538,14,79,-33,79 0 111 o -p 556,538,207,78,36,78 1 112 p -q 556,538,207,99,-34,89 1 113 q +o 556,538,14,79,-32,79 0 111 o +p 556,538,207,79,36,79 1 112 p +q 556,538,207,100,-33,89 1 113 q r 333,538,0,163,-27,89 0 114 r -s 500,538,15,79,-13,79 0 115 s -t 278,669,7,140,-52,89 2 116 t -u 556,523,15,94,-44,89 0 117 u -v 500,523,0,153,-69,89 0 118 v -w 722,523,0,148,-75,89 0 119 w -x 500,523,0,144,39,89 0 120 x -y 500,523,214,150,35,89 1 121 y -z 500,523,0,121,19,89 0 122 z -lC 334,722,196,161,-42,89 2 123 braceleft +s 500,538,15,80,-13,80 0 115 s +t 278,669,7,141,-52,89 2 116 t +u 556,523,15,95,-44,89 0 117 u +v 500,523,0,154,-69,89 0 118 v +w 722,523,0,149,-75,89 0 119 w +x 500,523,0,145,39,89 0 120 x +y 500,523,214,151,35,89 1 121 y +z 500,523,0,122,19,89 0 122 z +lC 334,722,196,162,-41,89 2 123 braceleft { " -ba 260,737,19,114,-40,89 2 124 bar +ba 260,775,225,122,4,89 3 124 bar | " -rC 334,722,196,70,50,70 2 125 braceright +rC 334,722,196,71,50,71 2 125 braceright } " -a~ 333,722,0,207,-75,89 2 126 tilde +a~ 333,722,0,208,-74,89 2 126 tilde ~ " bq 222,106,149,8,29,8 0 128 quotesinglbase Fo 556,446,0,48,-96,48 0 129 guillemotleft -Fc 556,446,0,22,-70,22 0 130 guillemotright -bu 350,517,0,113,-41,89 0 131 bullet -Fn 556,737,207,148,102,89 3 132 florin -f/ 167,703,19,365,220,89 2 133 fraction -%0 1000,703,19,79,-38,79 2 134 perthousand -dg 556,718,159,116,-85,89 2 135 dagger -dd 556,718,159,117,-2,89 2 136 daggerdbl +Fc 556,446,0,22,-69,22 0 130 guillemotright +bu 350,517,0,113,-40,89 0 131 bullet +Fn 556,737,207,149,103,89 3 132 florin +f/ 167,703,19,366,221,89 2 133 fraction +%0 1000,703,19,80,-37,80 2 134 perthousand +dg 556,718,159,116,-84,89 2 135 dagger +dd 556,718,159,118,-2,89 2 136 daggerdbl en 556,313,0,117,-1,89 0 137 endash em 1000,313,0,117,-1,89 0 138 emdash fi 500,728,0,137,-36,89 2 140 fi fl 500,728,0,135,-36,89 2 141 fl -.i 278,523,0,66,-45,66 0 144 dotlessi -ga 333,734,0,54,-120,54 2 146 grave -a" 333,734,0,282,-107,89 2 147 hungarumlaut -a. 333,706,0,79,-199,79 2 148 dotaccent -ab 333,731,0,193,-117,89 2 149 breve -ah 333,734,0,185,-127,89 2 150 caron -ao 333,756,0,119,-164,89 2 151 ring -ho 333,0,225,0,7 1 152 ogonek -lq 333,725,0,178,-88,89 2 153 quotedblleft +.i 278,523,0,67,-45,67 0 144 dotlessi +ga 333,734,0,55,-120,55 2 146 grave +a" 333,734,0,283,-107,89 2 147 hungarumlaut +a. 333,706,0,80,-199,80 2 148 dotaccent +ab 333,731,0,194,-117,89 2 149 breve +ah 333,734,0,186,-127,89 2 150 caron +ao 333,756,0,120,-163,89 2 151 ring +ho 333,0,225,0,8 1 152 ogonek +lq 333,725,0,179,-87,89 2 153 quotedblleft rq 333,718,0,165,-74,89 2 154 quotedblright -oe 944,538,15,70,-33,70 0 155 oe +oe 944,538,15,71,-32,71 0 155 oe /l 222,718,0,175,9,89 2 156 lslash Bq 333,106,149,35,56,35 0 157 quotedblbase -OE 1000,737,19,166,-48,89 2 158 OE -/L 556,718,0,49,9,49 2 159 Lslash -r! 333,523,195,43,-27,43 0 161 exclamdown -ct 556,623,115,78,-45,78 0 162 cent +OE 1000,737,19,166,-47,89 2 158 OE +/L 556,718,0,50,9,50 2 159 Lslash +r! 333,523,195,44,-26,44 0 161 exclamdown +ct 556,623,115,78,-44,78 0 162 cent Po 556,718,16,128,1,89 2 163 sterling -Cs 556,603,0,140,-10,89 0 164 currency -Ye 556,688,0,193,-31,89 2 165 yen -bb 260,737,19,114,-40,89 2 166 brokenbar +Cs 556,603,0,140,-9,89 0 164 currency +Ye 556,688,0,194,-31,89 2 165 yen +bb 260,700,150,106,-12,89 2 166 brokenbar sc 556,737,191,78,-26,78 2 167 section -ad 333,706,0,160,-118,89 2 168 dieresis -co 737,737,19,150,-4,89 2 169 copyright -Of 370,737,0,129,-50,89 2 170 ordfeminine +ad 333,706,0,161,-118,89 2 168 dieresis +co 737,737,19,151,-3,89 2 169 copyright +Of 370,737,0,129,-77,89 2 170 ordfeminine fo 333,446,0,57,-87,57 0 171 guilsinglleft tno 584,390,0,94,-56,89 0 172 logicalnot -\- 584,289,0,72,-35,72 0 173 minus -rg 737,737,19,150,-4,89 2 174 registered -a- 333,684,0,185,-93,89 2 175 macron -de 400,703,0,118,-119,89 2 176 degree -t+- 584,506,0,84,11,84 0 177 plusminus -S2 333,703,0,166,-14,89 2 178 twosuperior -S3 333,703,0,153,-40,89 2 179 threesuperior -aa 333,734,0,192,-198,89 2 180 acute -mc 556,523,207,94,26,89 1 181 mu +\- 584,289,0,73,-34,73 0 173 minus +rg 737,737,19,151,-3,89 2 174 registered +a- 333,684,0,186,-93,89 2 175 macron +de 400,703,0,118,-118,89 2 176 degree +t+- 584,506,0,85,11,85 0 177 plusminus +S2 333,703,0,166,-13,89 2 178 twosuperior +S3 333,703,0,154,-39,89 2 179 threesuperior +aa 333,734,0,193,-198,89 2 180 acute +mc 578,523,207,74,26,74 1 181 mu ps 537,718,173,163,-76,89 2 182 paragraph pc 278,315,0,29,-79,29 0 183 periodcentered -ac 333,0,225,0,48 1 184 cedilla -S1 333,703,0,88,-116,88 2 185 onesuperior -Om 365,737,0,153,-50,89 2 186 ordmasculine -fc 333,446,0,31,-61,31 0 187 guilsinglright -14 834,703,19,18,-100,18 2 188 onequarter -12 834,703,19,55,-64,55 2 189 onehalf -34 834,703,19,77,-80,77 2 190 threequarters -r? 611,525,201,0,-35 0 191 questiondown +ac 333,0,225,0,49 1 184 cedilla +S1 333,703,0,89,-115,89 2 185 onesuperior +Om 365,737,0,154,-90,89 2 186 ordmasculine +fc 333,446,0,31,-60,31 0 187 guilsinglright +14 834,703,19,19,-99,19 2 188 onequarter +12 834,703,19,55,-63,55 2 189 onehalf +34 834,703,19,78,-79,78 2 190 threequarters +r? 611,525,201,0,-34 0 191 questiondown `A 667,929,0,37,36,37 2 192 Agrave -'A 667,929,0,66,36,66 2 193 Aacute +'A 667,929,0,67,36,67 2 193 Aacute ^A 667,929,0,37,36,37 2 194 Acircumflex ~A 667,917,0,82,36,82 2 195 Atilde :A 667,901,0,37,36,37 2 196 Adieresis oA 667,931,0,37,36,37 2 197 Aring AE 1000,718,0,147,42,89 2 198 AE -,C 722,737,225,110,-58,89 3 199 Ccedilla +,C 722,737,225,110,-57,89 3 199 Ccedilla `E 667,929,0,145,-36,89 2 200 Egrave 'E 667,929,0,145,-36,89 2 201 Eacute ^E 667,929,0,145,-36,89 2 202 Ecircumflex :E 667,901,0,145,-36,89 2 203 Edieresis -`I 278,929,0,123,-41,89 2 204 Igrave -'I 278,929,0,261,-41,89 2 205 Iacute -^I 278,929,0,224,-41,89 2 206 Icircumflex +`I 278,929,0,124,-41,89 2 204 Igrave +'I 278,929,0,262,-41,89 2 205 Iacute +^I 278,929,0,225,-41,89 2 206 Icircumflex :I 278,901,0,230,-41,89 2 207 Idieresis -D 722,718,0,92,-19,89 2 208 Eth ~N 722,917,0,127,-26,89 2 209 Ntilde -`O 778,929,19,98,-55,89 2 210 Ograve -'O 778,929,19,98,-55,89 2 211 Oacute -^O 778,929,19,98,-55,89 2 212 Ocircumflex -~O 778,917,19,98,-55,89 2 213 Otilde -:O 778,901,19,98,-55,89 2 214 Odieresis -tmu 584,506,0,108,0,89 0 215 multiply -/O 778,737,19,162,7,89 2 216 Oslash +`O 778,929,19,98,-54,89 2 210 Ograve +'O 778,929,19,98,-54,89 2 211 Oacute +^O 778,929,19,98,-54,89 2 212 Ocircumflex +~O 778,917,19,98,-54,89 2 213 Otilde +:O 778,901,19,98,-54,89 2 214 Odieresis +tmu 584,506,0,108,1,89 0 215 multiply +/O 778,737,19,163,8,89 2 216 Oslash `U 722,929,19,125,-73,89 2 217 Ugrave 'U 722,929,19,125,-73,89 2 218 Uacute ^U 722,929,19,125,-73,89 2 219 Ucircumflex :U 722,901,19,125,-73,89 2 220 Udieresis -'Y 667,929,0,189,-117,89 2 221 Yacute +'Y 667,929,0,189,-116,89 2 221 Yacute TP 667,718,0,95,-36,89 2 222 Thorn ss 611,728,15,97,-17,89 2 223 germandbls `a 556,734,15,53,-11,53 2 224 agrave -'a 556,734,15,81,-11,81 2 225 aacute +'a 556,734,15,82,-11,82 2 225 aacute ^a 556,734,15,53,-11,53 2 226 acircumflex -~a 556,722,15,86,-11,86 2 227 atilde +~a 556,722,15,87,-11,87 2 227 atilde :a 556,706,15,53,-11,53 2 228 adieresis oa 556,756,15,53,-11,53 2 229 aring -ae 889,538,15,70,-11,70 0 230 ae -,c 500,538,225,103,-24,89 1 231 ccedilla -`e 556,734,15,72,-34,72 2 232 egrave -'e 556,734,15,81,-34,81 2 233 eacute -^e 556,734,15,72,-34,72 2 234 ecircumflex -:e 556,706,15,72,-34,72 2 235 edieresis -`i 278,734,0,82,-45,82 2 236 igrave -'i 278,734,0,220,-45,89 2 237 iacute -^i 278,734,0,183,-45,89 2 238 icircumflex -:i 278,706,0,188,-45,89 2 239 idieresis -Sd 556,737,15,111,-31,89 2 240 eth -~n 556,722,0,86,-15,86 2 241 ntilde -`o 556,734,14,79,-33,79 2 242 ograve -'o 556,734,14,81,-33,81 2 243 oacute -^o 556,734,14,79,-33,79 2 244 ocircumflex -~o 556,722,14,96,-33,89 2 245 otilde -:o 556,706,14,79,-33,79 2 246 odieresis -tdi 584,524,19,72,-35,72 0 247 divide -/o 611,545,22,86,21,86 0 248 oslash -`u 556,734,15,94,-44,89 2 249 ugrave -'u 556,734,15,94,-44,89 2 250 uacute -^u 556,734,15,94,-44,89 2 251 ucircumflex -:u 556,706,15,94,-44,89 2 252 udieresis -'y 500,734,214,150,35,89 3 253 yacute -Tp 556,718,207,78,36,78 3 254 thorn -:y 500,706,214,150,35,89 3 255 ydieresis +ae 889,538,15,71,-11,71 0 230 ae +,c 500,538,225,104,-24,89 1 231 ccedilla +`e 556,734,15,73,-34,73 2 232 egrave +'e 556,734,15,82,-34,82 2 233 eacute +^e 556,734,15,73,-34,73 2 234 ecircumflex +:e 556,706,15,73,-34,73 2 235 edieresis +`i 278,734,0,83,-45,83 2 236 igrave +'i 278,734,0,221,-45,89 2 237 iacute +^i 278,734,0,184,-45,89 2 238 icircumflex +:i 278,706,0,189,-45,89 2 239 idieresis +Sd 556,737,15,112,-31,89 2 240 eth +~n 556,722,0,87,-15,87 2 241 ntilde +`o 556,734,14,79,-32,79 2 242 ograve +'o 556,734,14,82,-32,82 2 243 oacute +^o 556,734,14,79,-32,79 2 244 ocircumflex +~o 556,722,14,97,-32,89 2 245 otilde +:o 556,706,14,79,-32,79 2 246 odieresis +tdi 584,524,19,73,-34,73 0 247 divide +/o 611,545,22,87,22,87 0 248 oslash +`u 556,734,15,95,-44,89 2 249 ugrave +'u 556,734,15,95,-44,89 2 250 uacute +^u 556,734,15,95,-44,89 2 251 ucircumflex +:u 556,706,15,95,-44,89 2 252 udieresis +'y 500,734,214,151,35,89 3 253 yacute +Tp 556,718,207,79,36,79 3 254 thorn +:y 500,706,214,151,35,89 3 255 ydieresis u2026 1000,106,0,0,-65 0 256 ellipsis diff --git a/contrib/groff/font/devps/HNB b/contrib/groff/font/devps/HNB index 5e86bb4901..8620f3278a 100644 --- a/contrib/groff/font/devps/HNB +++ b/contrib/groff/font/devps/HNB @@ -1,239 +1,1230 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Helvetica Narrow Bold +# Version 003.001 +# FamilyName Helvetica +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 13:08:06 1999 +# Comment UniqueID 44712 +# Comment VMusage 10926 50493 + name HNB internalname Helvetica-Narrow-Bold spacewidth 228 encoding text.enc ligatures fi fl 0 + kernpairs -A y -24 -A w -24 -A v -32 -A u -24 -A Y -89 -A W -48 -A V -65 -A U -40 -A T -73 -A Q -32 -A O -32 -A G -40 -A C -32 -B U -7 -B A -24 -D . -24 -D , -24 -D Y -56 -D W -32 -D V -32 -D A -32 -F . -81 -F , -81 -F a -15 -F A -65 -J u -15 -J . -15 -J , -15 -J A -15 -K y -32 -K u -24 -K o -28 -K e -11 -K O -24 -L y -24 -L ' -114 -L cq -114 -L rq -114 -L Y -97 -L W -65 -L V -89 -L T -73 -O . -32 -O , -32 -O Y -56 -O X -40 -O W -40 -O V -40 -O T -32 -O A -40 -P . -97 -P o -32 -P e -24 -P , -97 -P a -24 -P A -81 -Q . 16 -Q , 16 -Q U -7 -R Y -40 -R W -32 -R V -40 -R U -15 -R T -15 -R O -15 -T y -48 -T w -48 -T u -73 -T ; -32 -T r -65 -T . -65 -T o -65 -T - -97 -T hy -97 -T e -48 -T , -65 -T : -32 -T a -65 -T O -32 -T A -73 -U . -24 -U , -24 -U A -40 -V u -48 -V ; -32 -V . -97 -V o -73 -V - -65 -V hy -65 -V e -40 -V , -97 -V : -32 -V a -48 -V O -40 -V G -40 -V A -65 -W y -15 -W u -36 -W ; -7 -W . -65 -W o -48 -W - -32 -W hy -32 -W e -28 -W , -65 -W : -7 -W a -32 -W O -15 -W A -48 -Y u -81 -Y ; -40 -Y . -81 -Y o -81 -Y e -65 -Y , -81 -Y : -40 -Y a -73 -Y O -56 -Y A -89 -a y -15 -a w -11 -a v -11 -a g -7 -b y -15 -b v -15 -b u -15 -b l -7 -c y -7 -c l -15 -c k -15 -c h -7 -: u0020 -32 -, u0020 -32 -, ' -97 -, cq -97 -, rq -97 -d y -11 -d w -11 -d v -11 -d d -7 -e y -11 -e x -11 -e w -11 -e v -11 -e . 16 -e , 8 -f ' 25 -f cq 25 -f rq 25 -f . -7 -f o -15 -f e -7 -f , -7 -g g -7 -g e 8 -h y -15 -k o -11 -l y -11 -l w -11 -m y -24 -m u -15 -n y -15 -n v -32 -n u -7 -o y -15 -o x -24 -o w -11 -o v -15 -p y -11 -. u0020 -32 -. ' -97 -. cq -97 -. rq -97 -rq u0020 -65 -` ` -37 -` oq -37 -oq ` -37 -oq oq -37 -' v -15 -cq v -15 -' u0020 -65 -cq u0020 -65 -' s -48 -cq s -48 -' r -32 -cq r -32 -' ' -37 -' cq -37 -cq ' -37 -cq cq -37 -' l -15 -cq l -15 -' d -65 -cq d -65 -r y 8 -r v 8 -r t 16 -r s -11 -r q -15 -r . -48 -r o -15 -r - -15 -r hy -15 -r g -11 -r d -15 -r , -48 -r c -15 -s w -11 -; u0020 -32 -u0020 ` -48 -u0020 oq -48 -u0020 lq -65 -u0020 Y -97 -u0020 W -65 -u0020 V -65 -u0020 T -81 -v . -65 -v o -24 -v , -65 -v a -15 -w . -32 -w o -15 -w , -32 -x e -7 -y . -65 -y o -20 -y e -7 -y , -65 -y a -24 -z e 8 +A C -40 +A ,C -40 +A G -50 +A O -40 +A 'O -40 +A ^O -40 +A :O -40 +A `O -40 +A /O -40 +A ~O -40 +A Q -40 +A T -90 +A U -50 +A 'U -50 +A ^U -50 +A :U -50 +A `U -50 +A V -80 +A W -60 +A Y -110 +A 'Y -110 +A :Y -110 +A u -30 +A 'u -30 +A ^u -30 +A :u -30 +A `u -30 +A v -40 +A w -30 +A y -30 +A 'y -30 +A :y -30 +'A C -40 +'A ,C -40 +'A G -50 +'A O -40 +'A 'O -40 +'A ^O -40 +'A :O -40 +'A `O -40 +'A /O -40 +'A ~O -40 +'A Q -40 +'A T -90 +'A U -50 +'A 'U -50 +'A ^U -50 +'A :U -50 +'A `U -50 +'A V -80 +'A W -60 +'A Y -110 +'A 'Y -110 +'A :Y -110 +'A u -30 +'A 'u -30 +'A ^u -30 +'A :u -30 +'A `u -30 +'A v -40 +'A w -30 +'A y -30 +'A 'y -30 +'A :y -30 +^A C -40 +^A ,C -40 +^A G -50 +^A O -40 +^A 'O -40 +^A ^O -40 +^A :O -40 +^A `O -40 +^A /O -40 +^A ~O -40 +^A Q -40 +^A T -90 +^A U -50 +^A 'U -50 +^A ^U -50 +^A :U -50 +^A `U -50 +^A V -80 +^A W -60 +^A Y -110 +^A 'Y -110 +^A :Y -110 +^A u -30 +^A 'u -30 +^A ^u -30 +^A :u -30 +^A `u -30 +^A v -40 +^A w -30 +^A y -30 +^A 'y -30 +^A :y -30 +:A C -40 +:A ,C -40 +:A G -50 +:A O -40 +:A 'O -40 +:A ^O -40 +:A :O -40 +:A `O -40 +:A /O -40 +:A ~O -40 +:A Q -40 +:A T -90 +:A U -50 +:A 'U -50 +:A ^U -50 +:A :U -50 +:A `U -50 +:A V -80 +:A W -60 +:A Y -110 +:A 'Y -110 +:A :Y -110 +:A u -30 +:A 'u -30 +:A ^u -30 +:A :u -30 +:A `u -30 +:A v -40 +:A w -30 +:A y -30 +:A 'y -30 +:A :y -30 +`A C -40 +`A ,C -40 +`A G -50 +`A O -40 +`A 'O -40 +`A ^O -40 +`A :O -40 +`A `O -40 +`A /O -40 +`A ~O -40 +`A Q -40 +`A T -90 +`A U -50 +`A 'U -50 +`A ^U -50 +`A :U -50 +`A `U -50 +`A V -80 +`A W -60 +`A Y -110 +`A 'Y -110 +`A :Y -110 +`A u -30 +`A 'u -30 +`A ^u -30 +`A :u -30 +`A `u -30 +`A v -40 +`A w -30 +`A y -30 +`A 'y -30 +`A :y -30 +oA C -40 +oA ,C -40 +oA G -50 +oA O -40 +oA 'O -40 +oA ^O -40 +oA :O -40 +oA `O -40 +oA /O -40 +oA ~O -40 +oA Q -40 +oA T -90 +oA U -50 +oA 'U -50 +oA ^U -50 +oA :U -50 +oA `U -50 +oA V -80 +oA W -60 +oA Y -110 +oA 'Y -110 +oA :Y -110 +oA u -30 +oA 'u -30 +oA ^u -30 +oA :u -30 +oA `u -30 +oA v -40 +oA w -30 +oA y -30 +oA 'y -30 +oA :y -30 +~A C -40 +~A ,C -40 +~A G -50 +~A O -40 +~A 'O -40 +~A ^O -40 +~A :O -40 +~A `O -40 +~A /O -40 +~A ~O -40 +~A Q -40 +~A T -90 +~A U -50 +~A 'U -50 +~A ^U -50 +~A :U -50 +~A `U -50 +~A V -80 +~A W -60 +~A Y -110 +~A 'Y -110 +~A :Y -110 +~A u -30 +~A 'u -30 +~A ^u -30 +~A :u -30 +~A `u -30 +~A v -40 +~A w -30 +~A y -30 +~A 'y -30 +~A :y -30 +B A -30 +B 'A -30 +B ^A -30 +B :A -30 +B `A -30 +B oA -30 +B ~A -30 +B U -10 +B 'U -10 +B ^U -10 +B :U -10 +B `U -10 +D A -40 +D 'A -40 +D ^A -40 +D :A -40 +D `A -40 +D oA -40 +D ~A -40 +D V -40 +D W -40 +D Y -70 +D 'Y -70 +D :Y -70 +D , -30 +D . -30 +F A -80 +F 'A -80 +F ^A -80 +F :A -80 +F `A -80 +F oA -80 +F ~A -80 +F a -20 +F 'a -20 +F ^a -20 +F :a -20 +F `a -20 +F oa -20 +F ~a -20 +F , -100 +F . -100 +J A -20 +J 'A -20 +J ^A -20 +J :A -20 +J `A -20 +J oA -20 +J ~A -20 +J , -20 +J . -20 +J u -20 +J 'u -20 +J ^u -20 +J :u -20 +J `u -20 +K O -30 +K 'O -30 +K ^O -30 +K :O -30 +K `O -30 +K /O -30 +K ~O -30 +K e -15 +K 'e -15 +K ^e -15 +K :e -15 +K `e -15 +K o -35 +K 'o -35 +K ^o -35 +K :o -35 +K `o -35 +K /o -35 +K ~o -35 +K u -30 +K 'u -30 +K ^u -30 +K :u -30 +K `u -30 +K y -40 +K 'y -40 +K :y -40 +L T -90 +L V -110 +L W -80 +L Y -120 +L 'Y -120 +L :Y -120 +L rq -140 +L ' -140 +L cq -140 +L y -30 +L 'y -30 +L :y -30 +/L T -90 +/L V -110 +/L W -80 +/L Y -120 +/L 'Y -120 +/L :Y -120 +/L rq -140 +/L ' -140 +/L cq -140 +/L y -30 +/L 'y -30 +/L :y -30 +O A -50 +O 'A -50 +O ^A -50 +O :A -50 +O `A -50 +O oA -50 +O ~A -50 +O T -40 +O V -50 +O W -50 +O X -50 +O Y -70 +O 'Y -70 +O :Y -70 +O , -40 +O . -40 +'O A -50 +'O 'A -50 +'O ^A -50 +'O :A -50 +'O `A -50 +'O oA -50 +'O ~A -50 +'O T -40 +'O V -50 +'O W -50 +'O X -50 +'O Y -70 +'O 'Y -70 +'O :Y -70 +'O , -40 +'O . -40 +^O A -50 +^O 'A -50 +^O ^A -50 +^O :A -50 +^O `A -50 +^O oA -50 +^O ~A -50 +^O T -40 +^O V -50 +^O W -50 +^O X -50 +^O Y -70 +^O 'Y -70 +^O :Y -70 +^O , -40 +^O . -40 +:O A -50 +:O 'A -50 +:O ^A -50 +:O :A -50 +:O `A -50 +:O oA -50 +:O ~A -50 +:O T -40 +:O V -50 +:O W -50 +:O X -50 +:O Y -70 +:O 'Y -70 +:O :Y -70 +:O , -40 +:O . -40 +`O A -50 +`O 'A -50 +`O ^A -50 +`O :A -50 +`O `A -50 +`O oA -50 +`O ~A -50 +`O T -40 +`O V -50 +`O W -50 +`O X -50 +`O Y -70 +`O 'Y -70 +`O :Y -70 +`O , -40 +`O . -40 +/O A -50 +/O 'A -50 +/O ^A -50 +/O :A -50 +/O `A -50 +/O oA -50 +/O ~A -50 +/O T -40 +/O V -50 +/O W -50 +/O X -50 +/O Y -70 +/O 'Y -70 +/O :Y -70 +/O , -40 +/O . -40 +~O A -50 +~O 'A -50 +~O ^A -50 +~O :A -50 +~O `A -50 +~O oA -50 +~O ~A -50 +~O T -40 +~O V -50 +~O W -50 +~O X -50 +~O Y -70 +~O 'Y -70 +~O :Y -70 +~O , -40 +~O . -40 +P A -100 +P 'A -100 +P ^A -100 +P :A -100 +P `A -100 +P oA -100 +P ~A -100 +P a -30 +P 'a -30 +P ^a -30 +P :a -30 +P `a -30 +P oa -30 +P ~a -30 +P , -120 +P e -30 +P 'e -30 +P ^e -30 +P :e -30 +P `e -30 +P o -40 +P 'o -40 +P ^o -40 +P :o -40 +P `o -40 +P /o -40 +P ~o -40 +P . -120 +Q U -10 +Q 'U -10 +Q ^U -10 +Q :U -10 +Q `U -10 +Q , 20 +Q . 20 +R O -20 +R 'O -20 +R ^O -20 +R :O -20 +R `O -20 +R /O -20 +R ~O -20 +R T -20 +R U -20 +R 'U -20 +R ^U -20 +R :U -20 +R `U -20 +R V -50 +R W -40 +R Y -50 +R 'Y -50 +R :Y -50 +T A -90 +T 'A -90 +T ^A -90 +T :A -90 +T `A -90 +T oA -90 +T ~A -90 +T O -40 +T 'O -40 +T ^O -40 +T :O -40 +T `O -40 +T /O -40 +T ~O -40 +T a -80 +T 'a -80 +T ^a -80 +T :a -80 +T `a -80 +T oa -80 +T ~a -80 +T : -40 +T , -80 +T e -60 +T 'e -60 +T ^e -60 +T :e -60 +T `e -60 +T - -120 +T hy -120 +T o -80 +T 'o -80 +T ^o -80 +T :o -80 +T `o -80 +T /o -80 +T ~o -80 +T . -80 +T r -80 +T ; -40 +T u -90 +T 'u -90 +T ^u -90 +T :u -90 +T `u -90 +T w -60 +T y -60 +T 'y -60 +T :y -60 +U A -50 +U 'A -50 +U ^A -50 +U :A -50 +U `A -50 +U oA -50 +U ~A -50 +U , -30 +U . -30 +'U A -50 +'U 'A -50 +'U ^A -50 +'U :A -50 +'U `A -50 +'U oA -50 +'U ~A -50 +'U , -30 +'U . -30 +^U A -50 +^U 'A -50 +^U ^A -50 +^U :A -50 +^U `A -50 +^U oA -50 +^U ~A -50 +^U , -30 +^U . -30 +:U A -50 +:U 'A -50 +:U ^A -50 +:U :A -50 +:U `A -50 +:U oA -50 +:U ~A -50 +:U , -30 +:U . -30 +`U A -50 +`U 'A -50 +`U ^A -50 +`U :A -50 +`U `A -50 +`U oA -50 +`U ~A -50 +`U , -30 +`U . -30 +V A -80 +V 'A -80 +V ^A -80 +V :A -80 +V `A -80 +V oA -80 +V ~A -80 +V G -50 +V O -50 +V 'O -50 +V ^O -50 +V :O -50 +V `O -50 +V /O -50 +V ~O -50 +V a -60 +V 'a -60 +V ^a -60 +V :a -60 +V `a -60 +V oa -60 +V ~a -60 +V : -40 +V , -120 +V e -50 +V 'e -50 +V ^e -50 +V :e -50 +V `e -50 +V - -80 +V hy -80 +V o -90 +V 'o -90 +V ^o -90 +V :o -90 +V `o -90 +V /o -90 +V ~o -90 +V . -120 +V ; -40 +V u -60 +V 'u -60 +V ^u -60 +V :u -60 +V `u -60 +W A -60 +W 'A -60 +W ^A -60 +W :A -60 +W `A -60 +W oA -60 +W ~A -60 +W O -20 +W 'O -20 +W ^O -20 +W :O -20 +W `O -20 +W /O -20 +W ~O -20 +W a -40 +W 'a -40 +W ^a -40 +W :a -40 +W `a -40 +W oa -40 +W ~a -40 +W : -10 +W , -80 +W e -35 +W 'e -35 +W ^e -35 +W :e -35 +W `e -35 +W - -40 +W hy -40 +W o -60 +W 'o -60 +W ^o -60 +W :o -60 +W `o -60 +W /o -60 +W ~o -60 +W . -80 +W ; -10 +W u -45 +W 'u -45 +W ^u -45 +W :u -45 +W `u -45 +W y -20 +W 'y -20 +W :y -20 +Y A -110 +Y 'A -110 +Y ^A -110 +Y :A -110 +Y `A -110 +Y oA -110 +Y ~A -110 +Y O -70 +Y 'O -70 +Y ^O -70 +Y :O -70 +Y `O -70 +Y /O -70 +Y ~O -70 +Y a -90 +Y 'a -90 +Y ^a -90 +Y :a -90 +Y `a -90 +Y oa -90 +Y ~a -90 +Y : -50 +Y , -100 +Y e -80 +Y 'e -80 +Y ^e -80 +Y :e -80 +Y `e -80 +Y o -100 +Y 'o -100 +Y ^o -100 +Y :o -100 +Y `o -100 +Y /o -100 +Y ~o -100 +Y . -100 +Y ; -50 +Y u -100 +Y 'u -100 +Y ^u -100 +Y :u -100 +Y `u -100 +'Y A -110 +'Y 'A -110 +'Y ^A -110 +'Y :A -110 +'Y `A -110 +'Y oA -110 +'Y ~A -110 +'Y O -70 +'Y 'O -70 +'Y ^O -70 +'Y :O -70 +'Y `O -70 +'Y /O -70 +'Y ~O -70 +'Y a -90 +'Y 'a -90 +'Y ^a -90 +'Y :a -90 +'Y `a -90 +'Y oa -90 +'Y ~a -90 +'Y : -50 +'Y , -100 +'Y e -80 +'Y 'e -80 +'Y ^e -80 +'Y :e -80 +'Y `e -80 +'Y o -100 +'Y 'o -100 +'Y ^o -100 +'Y :o -100 +'Y `o -100 +'Y /o -100 +'Y ~o -100 +'Y . -100 +'Y ; -50 +'Y u -100 +'Y 'u -100 +'Y ^u -100 +'Y :u -100 +'Y `u -100 +:Y A -110 +:Y 'A -110 +:Y ^A -110 +:Y :A -110 +:Y `A -110 +:Y oA -110 +:Y ~A -110 +:Y O -70 +:Y 'O -70 +:Y ^O -70 +:Y :O -70 +:Y `O -70 +:Y /O -70 +:Y ~O -70 +:Y a -90 +:Y 'a -90 +:Y ^a -90 +:Y :a -90 +:Y `a -90 +:Y oa -90 +:Y ~a -90 +:Y : -50 +:Y , -100 +:Y e -80 +:Y 'e -80 +:Y ^e -80 +:Y :e -80 +:Y `e -80 +:Y o -100 +:Y 'o -100 +:Y ^o -100 +:Y :o -100 +:Y `o -100 +:Y /o -100 +:Y ~o -100 +:Y . -100 +:Y ; -50 +:Y u -100 +:Y 'u -100 +:Y ^u -100 +:Y :u -100 +:Y `u -100 +a g -10 +a v -15 +a w -15 +a y -20 +a 'y -20 +a :y -20 +'a g -10 +'a v -15 +'a w -15 +'a y -20 +'a 'y -20 +'a :y -20 +^a g -10 +^a v -15 +^a w -15 +^a y -20 +^a 'y -20 +^a :y -20 +:a g -10 +:a v -15 +:a w -15 +:a y -20 +:a 'y -20 +:a :y -20 +`a g -10 +`a v -15 +`a w -15 +`a y -20 +`a 'y -20 +`a :y -20 +oa g -10 +oa v -15 +oa w -15 +oa y -20 +oa 'y -20 +oa :y -20 +~a g -10 +~a v -15 +~a w -15 +~a y -20 +~a 'y -20 +~a :y -20 +b l -10 +b /l -10 +b u -20 +b 'u -20 +b ^u -20 +b :u -20 +b `u -20 +b v -20 +b y -20 +b 'y -20 +b :y -20 +c h -10 +c k -20 +c l -20 +c /l -20 +c y -10 +c 'y -10 +c :y -10 +,c h -10 +,c k -20 +,c l -20 +,c /l -20 +,c y -10 +,c 'y -10 +,c :y -10 +: u0020 -40 +, rq -120 +, ' -120 +, cq -120 +, u0020 -40 +d d -10 +d v -15 +d w -15 +d y -15 +d 'y -15 +d :y -15 +e , 10 +e . 20 +e v -15 +e w -15 +e x -15 +e y -15 +e 'y -15 +e :y -15 +'e , 10 +'e . 20 +'e v -15 +'e w -15 +'e x -15 +'e y -15 +'e 'y -15 +'e :y -15 +^e , 10 +^e . 20 +^e v -15 +^e w -15 +^e x -15 +^e y -15 +^e 'y -15 +^e :y -15 +:e , 10 +:e . 20 +:e v -15 +:e w -15 +:e x -15 +:e y -15 +:e 'y -15 +:e :y -15 +`e , 10 +`e . 20 +`e v -15 +`e w -15 +`e x -15 +`e y -15 +`e 'y -15 +`e :y -15 +f , -10 +f e -10 +f 'e -10 +f ^e -10 +f :e -10 +f `e -10 +f o -20 +f 'o -20 +f ^o -20 +f :o -20 +f `o -20 +f /o -20 +f ~o -20 +f . -10 +f rq 30 +f ' 30 +f cq 30 +g e 10 +g 'e 10 +g ^e 10 +g :e 10 +g `e 10 +g g -10 +h y -20 +h 'y -20 +h :y -20 +k o -15 +k 'o -15 +k ^o -15 +k :o -15 +k `o -15 +k /o -15 +k ~o -15 +l w -15 +l y -15 +l 'y -15 +l :y -15 +/l w -15 +/l y -15 +/l 'y -15 +/l :y -15 +m u -20 +m 'u -20 +m ^u -20 +m :u -20 +m `u -20 +m y -30 +m 'y -30 +m :y -30 +n u -10 +n 'u -10 +n ^u -10 +n :u -10 +n `u -10 +n v -40 +n y -20 +n 'y -20 +n :y -20 +~n u -10 +~n 'u -10 +~n ^u -10 +~n :u -10 +~n `u -10 +~n v -40 +~n y -20 +~n 'y -20 +~n :y -20 +o v -20 +o w -15 +o x -30 +o y -20 +o 'y -20 +o :y -20 +'o v -20 +'o w -15 +'o x -30 +'o y -20 +'o 'y -20 +'o :y -20 +^o v -20 +^o w -15 +^o x -30 +^o y -20 +^o 'y -20 +^o :y -20 +:o v -20 +:o w -15 +:o x -30 +:o y -20 +:o 'y -20 +:o :y -20 +`o v -20 +`o w -15 +`o x -30 +`o y -20 +`o 'y -20 +`o :y -20 +/o v -20 +/o w -15 +/o x -30 +/o y -20 +/o 'y -20 +/o :y -20 +~o v -20 +~o w -15 +~o x -30 +~o y -20 +~o 'y -20 +~o :y -20 +p y -15 +p 'y -15 +p :y -15 +. rq -120 +. ' -120 +. cq -120 +. u0020 -40 +rq u0020 -80 +` ` -46 +` oq -46 +oq ` -46 +oq oq -46 +' d -80 +cq d -80 +' l -20 +cq l -20 +' /l -20 +cq /l -20 +' ' -46 +' cq -46 +cq ' -46 +cq cq -46 +' r -40 +cq r -40 +' s -60 +cq s -60 +' vs -60 +cq vs -60 +' u0020 -80 +cq u0020 -80 +' v -20 +cq v -20 +r c -20 +r ,c -20 +r , -60 +r d -20 +r g -15 +r - -20 +r hy -20 +r o -20 +r 'o -20 +r ^o -20 +r :o -20 +r `o -20 +r /o -20 +r ~o -20 +r . -60 +r q -20 +r s -15 +r vs -15 +r t 20 +r v 10 +r y 10 +r 'y 10 +r :y 10 +s w -15 +vs w -15 +; u0020 -40 +u0020 T -100 +u0020 V -80 +u0020 W -80 +u0020 Y -120 +u0020 'Y -120 +u0020 :Y -120 +u0020 lq -80 +u0020 ` -60 +u0020 oq -60 +v a -20 +v 'a -20 +v ^a -20 +v :a -20 +v `a -20 +v oa -20 +v ~a -20 +v , -80 +v o -30 +v 'o -30 +v ^o -30 +v :o -30 +v `o -30 +v /o -30 +v ~o -30 +v . -80 +w , -40 +w o -20 +w 'o -20 +w ^o -20 +w :o -20 +w `o -20 +w /o -20 +w ~o -20 +w . -40 +x e -10 +x 'e -10 +x ^e -10 +x :e -10 +x `e -10 +y a -30 +y 'a -30 +y ^a -30 +y :a -30 +y `a -30 +y oa -30 +y ~a -30 +y , -80 +y e -10 +y 'e -10 +y ^e -10 +y :e -10 +y `e -10 +y o -25 +y 'o -25 +y ^o -25 +y :o -25 +y `o -25 +y /o -25 +y ~o -25 +y . -80 +'y a -30 +'y 'a -30 +'y ^a -30 +'y :a -30 +'y `a -30 +'y oa -30 +'y ~a -30 +'y , -80 +'y e -10 +'y 'e -10 +'y ^e -10 +'y :e -10 +'y `e -10 +'y o -25 +'y 'o -25 +'y ^o -25 +'y :o -25 +'y `o -25 +'y /o -25 +'y ~o -25 +'y . -80 +:y a -30 +:y 'a -30 +:y ^a -30 +:y :a -30 +:y `a -30 +:y oa -30 +:y ~a -30 +:y , -80 +:y e -10 +:y 'e -10 +:y ^e -10 +:y :e -10 +:y `e -10 +:y o -25 +:y 'o -25 +:y ^o -25 +:y :o -25 +:y `o -25 +:y /o -25 +:y ~o -25 +:y . -80 +z e 10 +z 'e 10 +z ^e 10 +z :e 10 +z `e 10 +vz e 10 +vz 'e 10 +vz ^e 10 +vz :e 10 +vz `e 10 + charset ha 479,698 2 0 asciicircum ti 479,343 0 1 asciitilde @@ -244,6 +1235,7 @@ vz 410,750 2 5 zcaron :Y 547,915 2 6 Ydieresis tm 820,718 2 7 trademark aq 195,718 2 8 quotesingle +Eu 456,710,19,6 2 9 Euro space 228 0 32 space ! 273,718 2 33 exclam " 389,718 2 34 quotedbl @@ -264,7 +1256,7 @@ cq " - 273,345 0 45 hyphen hy " . 228,146 0 46 period -/ 228,737,19,27,27 2 47 slash +/ 228,737,19,28,28 2 47 slash sl " 0 456,710,19 2 48 zero 1 456,710 2 49 one @@ -294,7 +1286,7 @@ G 638,737,19 2 71 G H 592,718 2 72 H I 228,718 2 73 I J 456,718,18 2 74 J -K 592,718 2 75 K +K 592,718,0,1 2 75 K L 501,718 2 76 L M 683,718 2 77 M N 592,718 2 78 N @@ -312,11 +1304,11 @@ Y 547,718 2 89 Y Z 501,718 2 90 Z [ 273,722,196 2 91 bracketleft lB " -\ 228,737,19,27,27 2 92 backslash +\ 228,737,19,28,28 2 92 backslash rs " ] 273,722,196 2 93 bracketright rB " -a^ 273,750,0,8,8 2 94 circumflex +a^ 273,750,0,9,9 2 94 circumflex ^ " _ 456,0,125 0 95 underscore ` 228,727 2 96 quoteleft @@ -349,23 +1341,23 @@ y 456,532,214 1 121 y z 410,532 0 122 z lC 319,722,196 2 123 braceleft { " -ba 230,737,19 2 124 bar +ba 230,775,225 3 124 bar | " rC 319,722,196 2 125 braceright } " -a~ 273,737,0,14,14 2 126 tilde +a~ 273,737,0,15,14 2 126 tilde ~ " bq 228,127,146 0 128 quotesinglbase Fo 456,484 0 129 guillemotleft Fc 456,484 0 130 guillemotright bu 287,524 0 131 bullet -Fn 456,737,210,0,8 3 132 florin -f/ 137,710,19,139,139 2 133 fraction -%0 820,710,19,2,2 2 134 perthousand +Fn 456,737,210,0,9 3 132 florin +f/ 137,710,19,139,140 2 133 fraction +%0 820,710,19,3,3 2 134 perthousand dg 456,718,171 2 135 dagger dd 456,718,171 2 136 daggerdbl en 456,333 0 137 endash -em 820,333 0 138 emdash +em 820,333,0,1 0 138 emdash fi 501,727 2 140 fi fl 501,727 2 141 fl .i 228,532 0 144 dotlessi @@ -373,7 +1365,7 @@ ga 273,750,0,0,19 2 146 grave a" 273,750,0,126 2 147 hungarumlaut a. 273,729 2 148 dotaccent ab 273,750,0,2,2 2 149 breve -ah 273,750,0,8,8 2 150 caron +ah 273,750,0,9,9 2 150 caron ao 273,776 2 151 ring ho 273,0,228 1 152 ogonek lq 410,727 2 153 quotedblleft @@ -382,21 +1374,21 @@ oe 774,546,14 0 155 oe /l 228,718,0,15,15 2 156 lslash Bq 410,127,146 0 157 quotedblbase OE 820,737,19 2 158 OE -/L 501,718,0,0,16 2 159 Lslash +/L 501,718,0,0,17 2 159 Lslash r! 273,532,186 0 161 exclamdown ct 456,628,118 0 162 cent Po 456,718,16 2 163 sterling -Cs 456,636,0,2,2 0 164 currency -Ye 456,698,0,7,7 2 165 yen -bb 230,737,19 2 166 brokenbar +Cs 456,636,0,3,3 0 164 currency +Ye 456,698,0,8,8 2 165 yen +bb 230,700,150 2 166 brokenbar sc 456,727,184 2 167 section ad 273,729 2 168 dieresis -co 604,737,19,10,9 2 169 copyright +co 604,737,19,11,10 2 169 copyright Of 303,737 2 170 ordfeminine fo 273,484 0 171 guilsinglleft tno 479,419 0 172 logicalnot \- 479,309 0 173 minus -rg 604,737,19,9,9 2 174 registered +rg 604,737,19,10,10 2 174 registered a- 273,678,0,5,5 2 175 macron de 328,712 2 176 degree t+- 479,506 0 177 plusminus @@ -426,11 +1418,11 @@ AE 820,718 2 198 AE 'E 547,936 2 201 Eacute ^E 547,936 2 202 Ecircumflex :E 547,915 2 203 Edieresis -`I 228,936,0,0,41 2 204 Igrave +`I 228,936,0,0,42 2 204 Igrave 'I 228,936,0,42 2 205 Iacute -^I 228,936,0,31,30 2 206 Icircumflex -:I 228,915,0,18,17 2 207 Idieresis --D 592,718,0,0,4 2 208 Eth +^I 228,936,0,32,31 2 206 Icircumflex +:I 228,915,0,19,18 2 207 Idieresis +-D 592,718,0,0,5 2 208 Eth ~N 592,923 2 209 Ntilde `O 638,936,19 2 210 Ograve 'O 638,936,19 2 211 Oacute @@ -458,10 +1450,10 @@ ae 729,546,14 0 230 ae 'e 456,750,14 2 233 eacute ^e 456,750,14 2 234 ecircumflex :e 456,729,14 2 235 edieresis -`i 228,750,0,0,41 2 236 igrave +`i 228,750,0,0,42 2 236 igrave 'i 228,750,0,42 2 237 iacute -^i 228,750,0,31,30 2 238 icircumflex -:i 228,729,0,18,17 2 239 idieresis +^i 228,750,0,32,31 2 238 icircumflex +:i 228,729,0,19,18 2 239 idieresis Sd 501,737,14 2 240 eth ~n 501,737 2 241 ntilde `o 501,750,14 2 242 ograve diff --git a/contrib/groff/font/devps/HNBI b/contrib/groff/font/devps/HNBI index 74414b44cf..6cb00dc877 100644 --- a/contrib/groff/font/devps/HNBI +++ b/contrib/groff/font/devps/HNBI @@ -1,420 +1,1412 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Helvetica Narrow Bold Oblique +# Version 003.001 +# FamilyName Helvetica +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 13:08:56 1999 +# Comment UniqueID 44713 +# Comment VMusage 10926 50493 + name HNBI internalname Helvetica-Narrow-BoldOblique slant 12 spacewidth 228 encoding text.enc ligatures fi fl 0 + kernpairs -A y -30 -A w -30 -A v -40 -A u -30 -A Y -110 -A W -60 -A V -80 -A U -50 -A T -90 -A Q -40 -A O -40 -A G -50 A C -40 -B U -10 +A ,C -40 +A G -50 +A O -40 +A 'O -40 +A ^O -40 +A :O -40 +A `O -40 +A /O -40 +A ~O -40 +A Q -40 +A T -90 +A U -50 +A 'U -50 +A ^U -50 +A :U -50 +A `U -50 +A V -80 +A W -60 +A Y -110 +A 'Y -110 +A :Y -110 +A u -30 +A 'u -30 +A ^u -30 +A :u -30 +A `u -30 +A v -40 +A w -30 +A y -30 +A 'y -30 +A :y -30 +'A C -40 +'A ,C -40 +'A G -50 +'A O -40 +'A 'O -40 +'A ^O -40 +'A :O -40 +'A `O -40 +'A /O -40 +'A ~O -40 +'A Q -40 +'A T -90 +'A U -50 +'A 'U -50 +'A ^U -50 +'A :U -50 +'A `U -50 +'A V -80 +'A W -60 +'A Y -110 +'A 'Y -110 +'A :Y -110 +'A u -30 +'A 'u -30 +'A ^u -30 +'A :u -30 +'A `u -30 +'A v -40 +'A w -30 +'A y -30 +'A 'y -30 +'A :y -30 +^A C -40 +^A ,C -40 +^A G -50 +^A O -40 +^A 'O -40 +^A ^O -40 +^A :O -40 +^A `O -40 +^A /O -40 +^A ~O -40 +^A Q -40 +^A T -90 +^A U -50 +^A 'U -50 +^A ^U -50 +^A :U -50 +^A `U -50 +^A V -80 +^A W -60 +^A Y -110 +^A 'Y -110 +^A :Y -110 +^A u -30 +^A 'u -30 +^A ^u -30 +^A :u -30 +^A `u -30 +^A v -40 +^A w -30 +^A y -30 +^A 'y -30 +^A :y -30 +:A C -40 +:A ,C -40 +:A G -50 +:A O -40 +:A 'O -40 +:A ^O -40 +:A :O -40 +:A `O -40 +:A /O -40 +:A ~O -40 +:A Q -40 +:A T -90 +:A U -50 +:A 'U -50 +:A ^U -50 +:A :U -50 +:A `U -50 +:A V -80 +:A W -60 +:A Y -110 +:A 'Y -110 +:A :Y -110 +:A u -30 +:A 'u -30 +:A ^u -30 +:A :u -30 +:A `u -30 +:A v -40 +:A w -30 +:A y -30 +:A 'y -30 +:A :y -30 +`A C -40 +`A ,C -40 +`A G -50 +`A O -40 +`A 'O -40 +`A ^O -40 +`A :O -40 +`A `O -40 +`A /O -40 +`A ~O -40 +`A Q -40 +`A T -90 +`A U -50 +`A 'U -50 +`A ^U -50 +`A :U -50 +`A `U -50 +`A V -80 +`A W -60 +`A Y -110 +`A 'Y -110 +`A :Y -110 +`A u -30 +`A 'u -30 +`A ^u -30 +`A :u -30 +`A `u -30 +`A v -40 +`A w -30 +`A y -30 +`A 'y -30 +`A :y -30 +oA C -40 +oA ,C -40 +oA G -50 +oA O -40 +oA 'O -40 +oA ^O -40 +oA :O -40 +oA `O -40 +oA /O -40 +oA ~O -40 +oA Q -40 +oA T -90 +oA U -50 +oA 'U -50 +oA ^U -50 +oA :U -50 +oA `U -50 +oA V -80 +oA W -60 +oA Y -110 +oA 'Y -110 +oA :Y -110 +oA u -30 +oA 'u -30 +oA ^u -30 +oA :u -30 +oA `u -30 +oA v -40 +oA w -30 +oA y -30 +oA 'y -30 +oA :y -30 +~A C -40 +~A ,C -40 +~A G -50 +~A O -40 +~A 'O -40 +~A ^O -40 +~A :O -40 +~A `O -40 +~A /O -40 +~A ~O -40 +~A Q -40 +~A T -90 +~A U -50 +~A 'U -50 +~A ^U -50 +~A :U -50 +~A `U -50 +~A V -80 +~A W -60 +~A Y -110 +~A 'Y -110 +~A :Y -110 +~A u -30 +~A 'u -30 +~A ^u -30 +~A :u -30 +~A `u -30 +~A v -40 +~A w -30 +~A y -30 +~A 'y -30 +~A :y -30 B A -30 -D . -30 -D , -30 -D Y -70 -D W -40 -D V -40 +B 'A -30 +B ^A -30 +B :A -30 +B `A -30 +B oA -30 +B ~A -30 +B U -10 +B 'U -10 +B ^U -10 +B :U -10 +B `U -10 D A -40 -F . -100 -F , -100 -F a -20 +D 'A -40 +D ^A -40 +D :A -40 +D `A -40 +D oA -40 +D ~A -40 +D V -40 +D W -40 +D Y -70 +D 'Y -70 +D :Y -70 +D , -30 +D . -30 F A -80 -J u -20 -J . -20 -J , -20 +F 'A -80 +F ^A -80 +F :A -80 +F `A -80 +F oA -80 +F ~A -80 +F a -20 +F 'a -20 +F ^a -20 +F :a -20 +F `a -20 +F oa -20 +F ~a -20 +F , -100 +F . -100 J A -20 -K y -40 -K u -30 -K o -35 -K e -15 +J 'A -20 +J ^A -20 +J :A -20 +J `A -20 +J oA -20 +J ~A -20 +J , -20 +J . -20 +J u -20 +J 'u -20 +J ^u -20 +J :u -20 +J `u -20 K O -30 -L y -30 +K 'O -30 +K ^O -30 +K :O -30 +K `O -30 +K /O -30 +K ~O -30 +K e -15 +K 'e -15 +K ^e -15 +K :e -15 +K `e -15 +K o -35 +K 'o -35 +K ^o -35 +K :o -35 +K `o -35 +K /o -35 +K ~o -35 +K u -30 +K 'u -30 +K ^u -30 +K :u -30 +K `u -30 +K y -40 +K 'y -40 +K :y -40 +L T -90 +L V -110 +L W -80 +L Y -120 +L 'Y -120 +L :Y -120 +L rq -140 L ' -140 L cq -140 -L rq -140 -L Y -120 -L W -80 -L V -110 -L T -90 -O . -40 -O , -40 -O Y -70 -O X -50 -O W -50 -O V -50 -O T -40 +L y -30 +L 'y -30 +L :y -30 +/L T -90 +/L V -110 +/L W -80 +/L Y -120 +/L 'Y -120 +/L :Y -120 +/L rq -140 +/L ' -140 +/L cq -140 +/L y -30 +/L 'y -30 +/L :y -30 O A -50 -P . -120 -P o -40 -P e -30 -P , -120 -P a -30 +O 'A -50 +O ^A -50 +O :A -50 +O `A -50 +O oA -50 +O ~A -50 +O T -40 +O V -50 +O W -50 +O X -50 +O Y -70 +O 'Y -70 +O :Y -70 +O , -40 +O . -40 +'O A -50 +'O 'A -50 +'O ^A -50 +'O :A -50 +'O `A -50 +'O oA -50 +'O ~A -50 +'O T -40 +'O V -50 +'O W -50 +'O X -50 +'O Y -70 +'O 'Y -70 +'O :Y -70 +'O , -40 +'O . -40 +^O A -50 +^O 'A -50 +^O ^A -50 +^O :A -50 +^O `A -50 +^O oA -50 +^O ~A -50 +^O T -40 +^O V -50 +^O W -50 +^O X -50 +^O Y -70 +^O 'Y -70 +^O :Y -70 +^O , -40 +^O . -40 +:O A -50 +:O 'A -50 +:O ^A -50 +:O :A -50 +:O `A -50 +:O oA -50 +:O ~A -50 +:O T -40 +:O V -50 +:O W -50 +:O X -50 +:O Y -70 +:O 'Y -70 +:O :Y -70 +:O , -40 +:O . -40 +`O A -50 +`O 'A -50 +`O ^A -50 +`O :A -50 +`O `A -50 +`O oA -50 +`O ~A -50 +`O T -40 +`O V -50 +`O W -50 +`O X -50 +`O Y -70 +`O 'Y -70 +`O :Y -70 +`O , -40 +`O . -40 +/O A -50 +/O 'A -50 +/O ^A -50 +/O :A -50 +/O `A -50 +/O oA -50 +/O ~A -50 +/O T -40 +/O V -50 +/O W -50 +/O X -50 +/O Y -70 +/O 'Y -70 +/O :Y -70 +/O , -40 +/O . -40 +~O A -50 +~O 'A -50 +~O ^A -50 +~O :A -50 +~O `A -50 +~O oA -50 +~O ~A -50 +~O T -40 +~O V -50 +~O W -50 +~O X -50 +~O Y -70 +~O 'Y -70 +~O :Y -70 +~O , -40 +~O . -40 P A -100 -Q . 20 -Q , 20 +P 'A -100 +P ^A -100 +P :A -100 +P `A -100 +P oA -100 +P ~A -100 +P a -30 +P 'a -30 +P ^a -30 +P :a -30 +P `a -30 +P oa -30 +P ~a -30 +P , -120 +P e -30 +P 'e -30 +P ^e -30 +P :e -30 +P `e -30 +P o -40 +P 'o -40 +P ^o -40 +P :o -40 +P `o -40 +P /o -40 +P ~o -40 +P . -120 Q U -10 -R Y -50 -R W -40 -R V -50 -R U -20 -R T -20 +Q 'U -10 +Q ^U -10 +Q :U -10 +Q `U -10 +Q , 20 +Q . 20 R O -20 -T y -60 -T w -60 -T u -90 -T ; -40 -T r -80 -T . -80 -T o -80 +R 'O -20 +R ^O -20 +R :O -20 +R `O -20 +R /O -20 +R ~O -20 +R T -20 +R U -20 +R 'U -20 +R ^U -20 +R :U -20 +R `U -20 +R V -50 +R W -40 +R Y -50 +R 'Y -50 +R :Y -50 +T A -90 +T 'A -90 +T ^A -90 +T :A -90 +T `A -90 +T oA -90 +T ~A -90 +T O -40 +T 'O -40 +T ^O -40 +T :O -40 +T `O -40 +T /O -40 +T ~O -40 +T a -80 +T 'a -80 +T ^a -80 +T :a -80 +T `a -80 +T oa -80 +T ~a -80 +T : -40 +T , -80 +T e -60 +T 'e -60 +T ^e -60 +T :e -60 +T `e -60 T - -120 T hy -120 -T e -60 -T , -80 -T : -40 -T a -80 -T O -40 -T A -90 -U . -30 -U , -30 +T o -80 +T 'o -80 +T ^o -80 +T :o -80 +T `o -80 +T /o -80 +T ~o -80 +T . -80 +T r -80 +T ; -40 +T u -90 +T 'u -90 +T ^u -90 +T :u -90 +T `u -90 +T w -60 +T y -60 +T 'y -60 +T :y -60 U A -50 -V u -60 -V ; -40 -V . -120 -V o -90 +U 'A -50 +U ^A -50 +U :A -50 +U `A -50 +U oA -50 +U ~A -50 +U , -30 +U . -30 +'U A -50 +'U 'A -50 +'U ^A -50 +'U :A -50 +'U `A -50 +'U oA -50 +'U ~A -50 +'U , -30 +'U . -30 +^U A -50 +^U 'A -50 +^U ^A -50 +^U :A -50 +^U `A -50 +^U oA -50 +^U ~A -50 +^U , -30 +^U . -30 +:U A -50 +:U 'A -50 +:U ^A -50 +:U :A -50 +:U `A -50 +:U oA -50 +:U ~A -50 +:U , -30 +:U . -30 +`U A -50 +`U 'A -50 +`U ^A -50 +`U :A -50 +`U `A -50 +`U oA -50 +`U ~A -50 +`U , -30 +`U . -30 +V A -80 +V 'A -80 +V ^A -80 +V :A -80 +V `A -80 +V oA -80 +V ~A -80 +V G -50 +V O -50 +V 'O -50 +V ^O -50 +V :O -50 +V `O -50 +V /O -50 +V ~O -50 +V a -60 +V 'a -60 +V ^a -60 +V :a -60 +V `a -60 +V oa -60 +V ~a -60 +V : -40 +V , -120 +V e -50 +V 'e -50 +V ^e -50 +V :e -50 +V `e -50 V - -80 V hy -80 -V e -50 -V , -120 -V : -40 -V a -60 -V O -50 -V G -50 -V A -80 -W y -20 -W u -45 -W ; -10 -W . -80 -W o -60 +V o -90 +V 'o -90 +V ^o -90 +V :o -90 +V `o -90 +V /o -90 +V ~o -90 +V . -120 +V ; -40 +V u -60 +V 'u -60 +V ^u -60 +V :u -60 +V `u -60 +W A -60 +W 'A -60 +W ^A -60 +W :A -60 +W `A -60 +W oA -60 +W ~A -60 +W O -20 +W 'O -20 +W ^O -20 +W :O -20 +W `O -20 +W /O -20 +W ~O -20 +W a -40 +W 'a -40 +W ^a -40 +W :a -40 +W `a -40 +W oa -40 +W ~a -40 +W : -10 +W , -80 +W e -35 +W 'e -35 +W ^e -35 +W :e -35 +W `e -35 W - -40 W hy -40 -W e -35 -W , -80 -W : -10 -W a -40 -W O -20 -W A -60 -Y u -100 -Y ; -50 -Y . -100 -Y o -100 -Y e -80 -Y , -100 -Y : -50 -Y a -90 -Y O -70 +W o -60 +W 'o -60 +W ^o -60 +W :o -60 +W `o -60 +W /o -60 +W ~o -60 +W . -80 +W ; -10 +W u -45 +W 'u -45 +W ^u -45 +W :u -45 +W `u -45 +W y -20 +W 'y -20 +W :y -20 Y A -110 -a y -20 -a w -15 -a v -15 +Y 'A -110 +Y ^A -110 +Y :A -110 +Y `A -110 +Y oA -110 +Y ~A -110 +Y O -70 +Y 'O -70 +Y ^O -70 +Y :O -70 +Y `O -70 +Y /O -70 +Y ~O -70 +Y a -90 +Y 'a -90 +Y ^a -90 +Y :a -90 +Y `a -90 +Y oa -90 +Y ~a -90 +Y : -50 +Y , -100 +Y e -80 +Y 'e -80 +Y ^e -80 +Y :e -80 +Y `e -80 +Y o -100 +Y 'o -100 +Y ^o -100 +Y :o -100 +Y `o -100 +Y /o -100 +Y ~o -100 +Y . -100 +Y ; -50 +Y u -100 +Y 'u -100 +Y ^u -100 +Y :u -100 +Y `u -100 +'Y A -110 +'Y 'A -110 +'Y ^A -110 +'Y :A -110 +'Y `A -110 +'Y oA -110 +'Y ~A -110 +'Y O -70 +'Y 'O -70 +'Y ^O -70 +'Y :O -70 +'Y `O -70 +'Y /O -70 +'Y ~O -70 +'Y a -90 +'Y 'a -90 +'Y ^a -90 +'Y :a -90 +'Y `a -90 +'Y oa -90 +'Y ~a -90 +'Y : -50 +'Y , -100 +'Y e -80 +'Y 'e -80 +'Y ^e -80 +'Y :e -80 +'Y `e -80 +'Y o -100 +'Y 'o -100 +'Y ^o -100 +'Y :o -100 +'Y `o -100 +'Y /o -100 +'Y ~o -100 +'Y . -100 +'Y ; -50 +'Y u -100 +'Y 'u -100 +'Y ^u -100 +'Y :u -100 +'Y `u -100 +:Y A -110 +:Y 'A -110 +:Y ^A -110 +:Y :A -110 +:Y `A -110 +:Y oA -110 +:Y ~A -110 +:Y O -70 +:Y 'O -70 +:Y ^O -70 +:Y :O -70 +:Y `O -70 +:Y /O -70 +:Y ~O -70 +:Y a -90 +:Y 'a -90 +:Y ^a -90 +:Y :a -90 +:Y `a -90 +:Y oa -90 +:Y ~a -90 +:Y : -50 +:Y , -100 +:Y e -80 +:Y 'e -80 +:Y ^e -80 +:Y :e -80 +:Y `e -80 +:Y o -100 +:Y 'o -100 +:Y ^o -100 +:Y :o -100 +:Y `o -100 +:Y /o -100 +:Y ~o -100 +:Y . -100 +:Y ; -50 +:Y u -100 +:Y 'u -100 +:Y ^u -100 +:Y :u -100 +:Y `u -100 a g -10 -b y -20 -b v -20 -b u -20 +a v -15 +a w -15 +a y -20 +a 'y -20 +a :y -20 +'a g -10 +'a v -15 +'a w -15 +'a y -20 +'a 'y -20 +'a :y -20 +^a g -10 +^a v -15 +^a w -15 +^a y -20 +^a 'y -20 +^a :y -20 +:a g -10 +:a v -15 +:a w -15 +:a y -20 +:a 'y -20 +:a :y -20 +`a g -10 +`a v -15 +`a w -15 +`a y -20 +`a 'y -20 +`a :y -20 +oa g -10 +oa v -15 +oa w -15 +oa y -20 +oa 'y -20 +oa :y -20 +~a g -10 +~a v -15 +~a w -15 +~a y -20 +~a 'y -20 +~a :y -20 b l -10 -c y -10 -c l -20 -c k -20 +b /l -10 +b u -20 +b 'u -20 +b ^u -20 +b :u -20 +b `u -20 +b v -20 +b y -20 +b 'y -20 +b :y -20 c h -10 +c k -20 +c l -20 +c /l -20 +c y -10 +c 'y -10 +c :y -10 +,c h -10 +,c k -20 +,c l -20 +,c /l -20 +,c y -10 +,c 'y -10 +,c :y -10 : u0020 -40 -, u0020 -40 +, rq -120 , ' -120 , cq -120 -, rq -120 -d y -15 -d w -15 -d v -15 +, u0020 -40 d d -10 -e y -15 -e x -15 -e w -15 -e v -15 -e . 20 +d v -15 +d w -15 +d y -15 +d 'y -15 +d :y -15 e , 10 +e . 20 +e v -15 +e w -15 +e x -15 +e y -15 +e 'y -15 +e :y -15 +'e , 10 +'e . 20 +'e v -15 +'e w -15 +'e x -15 +'e y -15 +'e 'y -15 +'e :y -15 +^e , 10 +^e . 20 +^e v -15 +^e w -15 +^e x -15 +^e y -15 +^e 'y -15 +^e :y -15 +:e , 10 +:e . 20 +:e v -15 +:e w -15 +:e x -15 +:e y -15 +:e 'y -15 +:e :y -15 +`e , 10 +`e . 20 +`e v -15 +`e w -15 +`e x -15 +`e y -15 +`e 'y -15 +`e :y -15 +f , -10 +f e -10 +f 'e -10 +f ^e -10 +f :e -10 +f `e -10 +f o -20 +f 'o -20 +f ^o -20 +f :o -20 +f `o -20 +f /o -20 +f ~o -20 +f . -10 +f rq 30 f ' 30 f cq 30 -f rq 30 -f . -10 -f o -20 -f e -10 -f , -10 -g g -10 g e 10 +g 'e 10 +g ^e 10 +g :e 10 +g `e 10 +g g -10 h y -20 +h 'y -20 +h :y -20 k o -15 -l y -15 +k 'o -15 +k ^o -15 +k :o -15 +k `o -15 +k /o -15 +k ~o -15 l w -15 -m y -30 +l y -15 +l 'y -15 +l :y -15 +/l w -15 +/l y -15 +/l 'y -15 +/l :y -15 m u -20 -n y -20 -n v -40 +m 'u -20 +m ^u -20 +m :u -20 +m `u -20 +m y -30 +m 'y -30 +m :y -30 n u -10 -o y -20 -o x -30 -o w -15 +n 'u -10 +n ^u -10 +n :u -10 +n `u -10 +n v -40 +n y -20 +n 'y -20 +n :y -20 +~n u -10 +~n 'u -10 +~n ^u -10 +~n :u -10 +~n `u -10 +~n v -40 +~n y -20 +~n 'y -20 +~n :y -20 o v -20 +o w -15 +o x -30 +o y -20 +o 'y -20 +o :y -20 +'o v -20 +'o w -15 +'o x -30 +'o y -20 +'o 'y -20 +'o :y -20 +^o v -20 +^o w -15 +^o x -30 +^o y -20 +^o 'y -20 +^o :y -20 +:o v -20 +:o w -15 +:o x -30 +:o y -20 +:o 'y -20 +:o :y -20 +`o v -20 +`o w -15 +`o x -30 +`o y -20 +`o 'y -20 +`o :y -20 +/o v -20 +/o w -15 +/o x -30 +/o y -20 +/o 'y -20 +/o :y -20 +~o v -20 +~o w -15 +~o x -30 +~o y -20 +~o 'y -20 +~o :y -20 p y -15 -. u0020 -40 +p 'y -15 +p :y -15 +. rq -120 . ' -120 . cq -120 -. rq -120 +. u0020 -40 rq u0020 -80 ` ` -46 ` oq -46 oq ` -46 oq oq -46 -' v -20 -cq v -20 -' u0020 -80 -cq u0020 -80 -' s -60 -cq s -60 -' r -40 -cq r -40 +' d -80 +cq d -80 +' l -20 +cq l -20 +' /l -20 +cq /l -20 ' ' -46 ' cq -46 cq ' -46 cq cq -46 -' l -20 -cq l -20 -' d -80 -cq d -80 -r y 10 -r v 10 -r t 20 -r s -15 -r q -20 -r . -60 -r o -20 +' r -40 +cq r -40 +' s -60 +cq s -60 +' vs -60 +cq vs -60 +' u0020 -80 +cq u0020 -80 +' v -20 +cq v -20 +r c -20 +r ,c -20 +r , -60 +r d -20 +r g -15 r - -20 r hy -20 -r g -15 -r d -20 -r , -60 -r c -20 +r o -20 +r 'o -20 +r ^o -20 +r :o -20 +r `o -20 +r /o -20 +r ~o -20 +r . -60 +r q -20 +r s -15 +r vs -15 +r t 20 +r v 10 +r y 10 +r 'y 10 +r :y 10 s w -15 +vs w -15 ; u0020 -40 +u0020 T -100 +u0020 V -80 +u0020 W -80 +u0020 Y -120 +u0020 'Y -120 +u0020 :Y -120 +u0020 lq -80 u0020 ` -60 u0020 oq -60 -u0020 lq -80 -u0020 Y -120 -u0020 W -80 -u0020 V -80 -u0020 T -100 -v . -80 -v o -30 -v , -80 v a -20 -w . -40 -w o -20 +v 'a -20 +v ^a -20 +v :a -20 +v `a -20 +v oa -20 +v ~a -20 +v , -80 +v o -30 +v 'o -30 +v ^o -30 +v :o -30 +v `o -30 +v /o -30 +v ~o -30 +v . -80 w , -40 +w o -20 +w 'o -20 +w ^o -20 +w :o -20 +w `o -20 +w /o -20 +w ~o -20 +w . -40 x e -10 -y . -80 -y o -25 -y e -10 -y , -80 +x 'e -10 +x ^e -10 +x :e -10 +x `e -10 y a -30 +y 'a -30 +y ^a -30 +y :a -30 +y `a -30 +y oa -30 +y ~a -30 +y , -80 +y e -10 +y 'e -10 +y ^e -10 +y :e -10 +y `e -10 +y o -25 +y 'o -25 +y ^o -25 +y :o -25 +y `o -25 +y /o -25 +y ~o -25 +y . -80 +'y a -30 +'y 'a -30 +'y ^a -30 +'y :a -30 +'y `a -30 +'y oa -30 +'y ~a -30 +'y , -80 +'y e -10 +'y 'e -10 +'y ^e -10 +'y :e -10 +'y `e -10 +'y o -25 +'y 'o -25 +'y ^o -25 +'y :o -25 +'y `o -25 +'y /o -25 +'y ~o -25 +'y . -80 +:y a -30 +:y 'a -30 +:y ^a -30 +:y :a -30 +:y `a -30 +:y oa -30 +:y ~a -30 +:y , -80 +:y e -10 +:y 'e -10 +:y ^e -10 +:y :e -10 +:y `e -10 +:y o -25 +:y 'o -25 +:y ^o -25 +:y :o -25 +:y `o -25 +:y /o -25 +:y ~o -25 +:y . -80 z e 10 +z 'e 10 +z ^e 10 +z :e 10 +z `e 10 +vz e 10 +vz 'e 10 +vz ^e 10 +vz :e 10 +vz `e 10 + charset -ha 479,698,0,55,-57,55 2 0 asciicircum +ha 479,698,0,56,-57,56 2 0 asciicircum ti 479,343,0,44,-44,44 0 1 asciitilde -vS 547,936,19,91,-16,90 2 2 Scaron -vZ 501,936,0,153,30,90 2 3 Zcaron -vs 456,750,14,98,-2,90 2 4 scaron +vS 547,936,19,92,-15,90 2 2 Scaron +vZ 501,936,0,154,30,90 2 3 Zcaron +vs 456,750,14,98,-1,90 2 4 scaron vz 410,750,0,121,34,90 2 5 zcaron :Y 547,915,0,164,-87,90 2 6 Ydieresis -tm 820,718,0,139,-96,90 2 7 trademark +tm 820,718,0,140,-96,90 2 7 trademark aq 195,718,0,118,-85,90 2 8 quotesingle +Eu 456,710,19,164,2,90 2 9 Euro space 228 0 32 space -! 273,718,0,102,-27,90 2 33 exclam -" 389,718,0,94,-108,90 2 34 quotedbl +! 273,718,0,103,-27,90 2 33 exclam +" 389,718,0,95,-108,90 2 34 quotedbl dq " -# 456,698,0,122,1,90 2 35 numbersign +# 456,698,0,123,1,90 2 35 numbersign sh " -$ 456,775,115,104,-5,90 2 36 dollar +$ 456,775,115,104,-4,90 2 36 dollar Do " -% 729,710,19,60,-62,60 2 37 percent -& 592,718,19,58,-23,58 2 38 ampersand -' 228,718,0,119,-87,90 2 39 quoteright +% 729,710,19,60,-61,60 2 37 percent +& 592,718,19,59,-22,59 2 38 ampersand +' 228,718,0,119,-86,90 2 39 quoteright cq " -( 273,734,208,162,-12,90 3 40 parenleft -) 273,734,208,79,71,79 3 41 parenright -* 319,718,0,125,-70,90 2 42 asterisk +( 273,734,208,163,-12,90 3 40 parenleft +) 273,734,208,80,71,80 3 41 parenright +* 319,718,0,126,-69,90 2 42 asterisk + 479,506,0,71,-17,71 0 43 plus , 228,146,168,23,27,23 0 44 comma -- 273,345,0,88,-10,88 0 45 hyphen +- 273,345,0,89,-9,89 0 45 hyphen hy " . 228,146,0,23,-2,23 0 46 period -/ 228,737,19,205,80,90 2 47 slash +/ 228,737,19,206,81,90 2 47 slash sl " -0 456,710,19,100,-21,90 2 48 zero -1 456,710,0,28,-92,28 2 49 one +0 456,710,19,100,-20,90 2 48 zero +1 456,710,0,28,-91,28 2 49 one 2 456,710,0,102,29,90 2 50 two -3 456,710,19,93,-4,90 2 51 three -4 456,710,0,84,0,84 2 52 four -5 456,698,19,116,-3,90 2 53 five -6 456,710,19,101,-20,90 2 54 six +3 456,710,19,93,-3,90 2 51 three +4 456,710,0,85,1,85 2 52 four +5 456,698,19,116,-2,90 2 53 five +6 456,710,19,102,-19,90 2 54 six 7 456,698,0,149,-52,90 2 55 seven -8 456,710,19,99,-7,90 2 56 eight -9 456,710,19,98,-14,90 2 57 nine +8 456,710,19,99,-6,90 2 56 eight +9 456,710,19,99,-13,90 2 57 nine : 273,512,0,65,-25,65 0 58 colon ; 273,512,168,65,4,65 0 59 semicolon -< 479,514,8,108,-17,90 0 60 less -= 479,419,0,90,2,90 0 61 equal -> 479,514,8,71,20,71 0 62 greater -? 501,727,0,99,-85,90 2 63 question +< 479,514,8,109,-17,90 0 60 less += 479,419,0,91,3,90 0 61 equal +> 479,514,8,71,21,71 0 62 greater +? 501,727,0,100,-85,90 2 63 question @ 800,737,19,32,-102,32 2 64 at at " A 592,718,0,34,34,34 2 65 A -B 592,718,0,84,-12,84 2 66 B -C 592,737,19,105,-38,90 2 67 C -D 592,718,0,95,-12,90 2 68 D -E 547,718,0,123,-12,90 2 69 E -F 501,718,0,155,-12,90 2 70 F -G 638,737,19,82,-39,82 2 71 G +B 592,718,0,85,-12,85 2 66 B +C 592,737,19,105,-37,90 2 67 C +D 592,718,0,96,-12,90 2 68 D +E 547,718,0,124,-12,90 2 69 E +F 501,718,0,156,-12,90 2 70 F +G 638,737,19,82,-38,82 2 71 G H 592,718,0,117,-8,90 2 72 H I 228,718,0,123,-2,90 2 73 I -J 456,718,18,116,1,90 2 74 J -K 592,718,0,161,-21,90 2 75 K +J 456,718,18,117,2,90 2 74 J +K 592,718,0,162,-21,90 2 75 K L 501,718,0,50,-12,50 2 76 L -M 683,718,0,119,-7,90 2 77 M -N 592,718,0,119,-7,90 2 78 N -O 638,737,19,87,-38,87 2 79 O +M 683,718,0,120,-6,90 2 77 M +N 592,718,0,120,-6,90 2 78 N +O 638,737,19,88,-37,88 2 79 O P 547,718,0,108,-12,90 2 80 P -Q 638,737,52,87,-38,87 2 81 Q -R 592,718,0,96,-12,90 2 82 R -S 547,737,19,91,-16,90 2 83 S -T 501,718,0,164,-64,90 2 84 T -U 592,718,19,117,-46,90 2 85 U -V 547,718,0,159,-91,90 2 86 V +Q 638,737,52,88,-37,88 2 81 Q +R 592,718,0,97,-12,90 2 82 R +S 547,737,19,92,-15,90 2 83 S +T 501,718,0,165,-64,90 2 84 T +U 592,718,19,117,-44,90 2 85 U +V 547,718,0,160,-90,90 2 86 V W 774,718,0,163,-88,90 2 87 W -X 547,718,0,151,39,90 2 88 X +X 547,718,0,152,39,90 2 88 X Y 547,718,0,164,-87,90 2 89 Y -Z 501,718,0,153,30,90 2 90 Z -[ 273,722,196,156,33,90 2 91 bracketleft +Z 501,718,0,154,30,90 2 90 Z +[ 273,722,196,157,33,90 2 91 bracketleft lB " \ 228,737,19,74,-51,74 2 92 backslash rs " -] 273,722,196,124,64,90 2 93 bracketright +] 273,722,196,125,65,90 2 93 bracketright rB " a^ 273,750,0,164,-47,90 2 94 circumflex ^ " _ 456,0,125,37,72,37 0 95 underscore -` 228,727,0,118,-86,90 2 96 quoteleft +` 228,727,0,118,-85,90 2 96 quoteleft oq " -a 456,546,14,72,5,72 0 97 a -b 501,718,14,78,0,78 2 98 b -c 456,546,14,85,-15,85 0 99 c +a 456,546,14,72,6,72 0 97 a +b 501,718,14,79,0,79 2 98 b +c 456,546,14,86,-14,86 0 99 c d 501,718,14,126,-17,90 2 100 d -e 456,546,14,80,-8,80 0 101 e +e 456,546,14,81,-7,81 0 101 e f 273,727,0,162,-21,90 2 102 f -g 501,546,217,95,19,90 1 103 g -h 501,718,0,65,-3,65 2 104 h -i 228,725,0,120,-7,90 2 105 i +g 501,546,217,96,19,90 1 103 g +h 501,718,0,66,-3,66 2 104 h +i 228,725,0,120,-6,90 2 105 i j 228,725,214,120,85,90 3 106 j -k 456,718,0,143,-7,90 2 107 k -l 228,718,0,119,-7,90 2 108 l +k 456,718,0,144,-6,90 2 107 k +l 228,718,0,119,-6,90 2 108 l m 729,546,0,67,-2,67 0 109 m -n 501,546,0,65,-3,65 0 110 n -o 501,546,14,76,-17,76 0 111 o -p 501,546,207,78,35,78 1 112 p -q 501,546,207,94,-16,90 1 113 q +n 501,546,0,66,-3,66 0 110 n +o 501,546,14,77,-17,77 0 111 o +p 501,546,207,79,36,79 1 112 p +q 501,546,207,95,-15,90 1 113 q r 319,546,0,132,-2,90 0 114 r -s 456,546,14,73,-2,73 0 115 s -t 273,676,6,123,-32,90 2 116 t +s 456,546,14,73,-1,73 0 115 s +t 273,676,6,124,-32,90 2 116 t u 501,532,14,89,-30,89 0 117 u v 456,532,0,132,-53,90 0 118 v -w 638,532,0,135,-51,90 0 119 w -x 456,532,0,125,38,90 0 120 x +w 638,532,0,136,-50,90 0 119 w +x 456,532,0,126,38,90 0 120 x y 456,532,214,129,16,90 1 121 y -z 410,532,0,118,34,90 0 122 z -lC 319,722,196,156,-27,90 2 123 braceleft +z 410,532,0,119,34,90 0 122 z +lC 319,722,196,157,-27,90 2 123 braceleft { " -ba 230,737,19,109,-16,90 2 124 bar +ba 230,775,225,116,21,90 3 124 bar | " -rC 319,722,196,64,64,64 2 125 braceright +rC 319,722,196,65,65,65 2 125 braceright } " -a~ 273,737,0,192,-42,90 2 126 tilde +a~ 273,737,0,193,-42,90 2 126 tilde ~ " -bq 228,127,146,16,16,16 0 128 quotesinglbase -Fo 456,484,0,62,-61,62 0 129 guillemotleft -Fc 456,484,0,37,-35,37 0 130 guillemotright -bu 287,524,0,108,-18,90 0 131 bullet -Fn 456,737,210,142,91,90 3 132 florin -f/ 137,710,19,312,193,90 2 133 fraction -%0 820,710,19,81,-12,81 2 134 perthousand -dg 456,718,171,107,-47,90 2 135 dagger -dd 456,718,171,109,12,90 2 136 daggerdbl -en 456,333,0,108,10,90 0 137 endash -em 820,333,0,108,10,90 0 138 emdash +bq 228,127,146,16,17,16 0 128 quotesinglbase +Fo 456,484,0,63,-60,63 0 129 guillemotleft +Fc 456,484,0,38,-35,38 0 130 guillemotright +bu 287,524,0,108,-17,90 0 131 bullet +Fn 456,737,210,143,92,90 3 132 florin +f/ 137,710,19,313,193,90 2 133 fraction +%0 820,710,19,82,-12,82 2 134 perthousand +dg 456,718,171,108,-46,90 2 135 dagger +dd 456,718,171,110,13,90 2 136 daggerdbl +en 456,333,0,108,11,90 0 137 endash +em 820,333,0,109,11,90 0 138 emdash fi 501,727,0,120,-21,90 2 140 fi fl 501,727,0,119,-21,90 2 141 fl -.i 228,532,0,86,-7,86 0 144 dotlessi -ga 273,750,0,67,-62,67 2 146 grave -a" 273,750,0,306,-63,90 2 147 hungarumlaut +.i 228,532,0,87,-6,87 0 144 dotlessi +ga 273,750,0,67,-61,67 2 146 grave +a" 273,750,0,307,-62,90 2 147 hungarumlaut a. 273,729,0,93,-142,90 2 148 dotaccent -ab 273,750,0,182,-78,90 2 149 breve -ah 273,750,0,189,-73,90 2 150 caron -ao 273,776,0,121,-114,90 2 151 ring +ab 273,750,0,183,-77,90 2 149 breve +ah 273,750,0,189,-72,90 2 150 caron +ao 273,776,0,122,-113,90 2 151 ring ho 273,0,228,0,17 1 152 ogonek -lq 410,727,0,122,-82,90 2 153 quotedblleft +lq 410,727,0,122,-81,90 2 153 quotedblleft rq 410,718,0,123,-82,90 2 154 quotedblright -oe 774,546,14,77,-17,77 0 155 oe -/l 228,718,0,156,17,90 2 156 lslash +oe 774,546,14,78,-17,78 0 155 oe +/l 228,718,0,156,18,90 2 156 lslash Bq 410,127,146,20,21,20 0 157 quotedblbase -OE 820,737,19,143,-31,90 2 158 OE +OE 820,737,19,144,-30,90 2 158 OE /L 501,718,0,50,22,50 2 159 Lslash r! 273,532,186,67,9,67 0 161 exclamdown -ct 456,628,118,85,-15,85 0 162 cent -Po 456,718,16,114,9,90 2 163 sterling +ct 456,628,118,86,-14,86 0 162 cent +Po 456,718,16,115,9,90 2 163 sterling Cs 456,636,0,152,28,90 0 164 currency -Ye 456,698,0,179,1,90 2 165 yen -bb 230,737,19,109,-16,90 2 166 brokenbar -sc 456,727,184,85,0,85 2 167 section -ad 273,729,0,172,-62,90 2 168 dieresis -co 604,737,19,131,4,90 2 169 copyright -Of 303,737,0,128,-25,90 2 170 ordfeminine -fo 273,484,0,66,-56,66 0 171 guilsinglleft -tno 479,419,0,90,-36,90 0 172 logicalnot +Ye 456,698,0,179,2,90 2 165 yen +bb 230,700,150,103,8,90 2 166 brokenbar +sc 456,727,184,85,1,85 2 167 section +ad 273,729,0,173,-61,90 2 168 dieresis +co 604,737,19,132,5,90 2 169 copyright +Of 303,737,0,129,-52,90 2 170 ordfeminine +fo 273,484,0,67,-56,67 0 171 guilsinglleft +tno 479,419,0,91,-36,90 0 172 logicalnot \- 479,309,0,71,-17,71 0 173 minus -rg 604,737,19,130,5,90 2 174 registered -a- 273,678,0,173,-50,90 2 175 macron -de 328,712,0,105,-93,90 2 176 degree -t+- 479,506,0,83,17,83 0 177 plusminus -S2 273,710,0,145,-7,90 2 178 twosuperior -S3 273,710,0,138,-25,90 2 179 threesuperior -aa 273,750,0,200,-144,90 2 180 acute -mc 501,532,207,89,32,89 1 181 mu +rg 604,737,19,131,5,90 2 174 registered +a- 273,678,0,174,-50,90 2 175 macron +de 328,712,0,106,-93,90 2 176 degree +t+- 479,506,0,84,18,84 0 177 plusminus +S2 273,710,0,145,-6,90 2 178 twosuperior +S3 273,710,0,139,-25,90 2 179 threesuperior +aa 273,750,0,200,-143,90 2 180 acute +mc 501,532,207,90,33,90 1 181 mu ps 456,700,191,158,-30,90 2 182 paragraph -pc 228,334,0,48,-40,48 0 183 periodcentered -ac 273,0,228,0,80 1 184 cedilla -S1 273,710,0,95,-71,90 2 185 onesuperior -Om 299,737,0,149,-25,90 2 186 ordmasculine -fc 273,484,0,41,-31,41 0 187 guilsinglright -14 684,710,19,27,-58,27 2 188 onequarter +pc 228,334,0,49,-40,49 0 183 periodcentered +ac 273,0,228,0,81 1 184 cedilla +S1 273,710,0,96,-71,90 2 185 onesuperior +Om 299,737,0,149,-50,90 2 186 ordmasculine +fc 273,484,0,42,-31,42 0 187 guilsinglright +14 684,710,19,28,-58,28 2 188 onequarter 12 684,710,19,70,-58,70 2 189 onehalf -34 684,710,19,54,-32,54 2 190 threequarters -r? 501,532,195,8,6,8 0 191 questiondown +34 684,710,19,55,-31,55 2 190 threequarters +r? 501,532,195,8,7,8 0 191 questiondown `A 592,936,0,34,34,34 2 192 Agrave 'A 592,936,0,73,34,73 2 193 Aacute ^A 592,936,0,37,34,37 2 194 Acircumflex @@ -422,61 +1414,61 @@ r? 501,532,195,8,6,8 0 191 questiondown :A 592,915,0,46,34,46 2 196 Adieresis oA 592,962,0,34,34,34 2 197 Aring AE 820,718,0,132,46,90 2 198 AE -,C 592,737,228,105,-38,90 3 199 Ccedilla -`E 547,936,0,123,-12,90 2 200 Egrave -'E 547,936,0,123,-12,90 2 201 Eacute -^E 547,936,0,123,-12,90 2 202 Ecircumflex -:E 547,915,0,123,-12,90 2 203 Edieresis +,C 592,737,228,105,-37,90 3 199 Ccedilla +`E 547,936,0,124,-12,90 2 200 Egrave +'E 547,936,0,124,-12,90 2 201 Eacute +^E 547,936,0,124,-12,90 2 202 Ecircumflex +:E 547,915,0,124,-12,90 2 203 Edieresis `I 228,936,0,123,-2,90 2 204 Igrave 'I 228,936,0,255,-2,90 2 205 Iacute ^I 228,936,0,219,-2,90 2 206 Icircumflex -:I 228,915,0,227,-2,90 2 207 Idieresis --D 592,718,0,95,-1,90 2 208 Eth -~N 592,923,0,119,-7,90 2 209 Ntilde -`O 638,936,19,87,-38,87 2 210 Ograve -'O 638,936,19,87,-38,87 2 211 Oacute -^O 638,936,19,87,-38,87 2 212 Ocircumflex -~O 638,923,19,87,-38,87 2 213 Otilde -:O 638,915,19,87,-38,87 2 214 Odieresis -tmu 479,505,0,91,3,90 0 215 multiply -/O 638,745,27,145,21,90 2 216 Oslash -`U 592,936,19,117,-46,90 2 217 Ugrave -'U 592,936,19,117,-46,90 2 218 Uacute -^U 592,936,19,117,-46,90 2 219 Ucircumflex -:U 592,915,19,117,-46,90 2 220 Udieresis +:I 228,915,0,228,-2,90 2 207 Idieresis +-D 592,718,0,96,0,90 2 208 Eth +~N 592,923,0,120,-6,90 2 209 Ntilde +`O 638,936,19,88,-37,88 2 210 Ograve +'O 638,936,19,88,-37,88 2 211 Oacute +^O 638,936,19,88,-37,88 2 212 Ocircumflex +~O 638,923,19,88,-37,88 2 213 Otilde +:O 638,915,19,88,-37,88 2 214 Odieresis +tmu 479,505,0,92,4,90 0 215 multiply +/O 638,745,27,146,22,90 2 216 Oslash +`U 592,936,19,117,-44,90 2 217 Ugrave +'U 592,936,19,117,-44,90 2 218 Uacute +^U 592,936,19,117,-44,90 2 219 Ucircumflex +:U 592,915,19,117,-44,90 2 220 Udieresis 'Y 547,936,0,164,-87,90 2 221 Yacute TP 547,718,0,91,-12,90 2 222 Thorn -ss 501,731,14,88,-7,88 2 223 germandbls -`a 456,750,14,72,5,72 2 224 agrave -'a 456,750,14,108,5,90 2 225 aacute -^a 456,750,14,72,5,72 2 226 acircumflex -~a 456,737,14,101,5,90 2 227 atilde -:a 456,729,14,81,5,81 2 228 adieresis -oa 456,776,14,72,5,72 2 229 aring -ae 729,546,14,78,4,78 0 230 ae -,c 456,546,228,85,-15,85 1 231 ccedilla -`e 456,750,14,80,-8,80 2 232 egrave -'e 456,750,14,108,-8,90 2 233 eacute -^e 456,750,14,80,-8,80 2 234 ecircumflex -:e 456,729,14,81,-8,81 2 235 edieresis -`i 228,750,0,90,-7,90 2 236 igrave -'i 228,750,0,222,-7,90 2 237 iacute -^i 228,750,0,186,-7,90 2 238 icircumflex -:i 228,729,0,195,-7,90 2 239 idieresis -Sd 501,737,14,98,-17,90 2 240 eth -~n 501,737,0,78,-3,78 2 241 ntilde -`o 501,750,14,76,-17,76 2 242 ograve +ss 501,731,14,88,-6,88 2 223 germandbls +`a 456,750,14,72,6,72 2 224 agrave +'a 456,750,14,109,6,90 2 225 aacute +^a 456,750,14,73,6,73 2 226 acircumflex +~a 456,737,14,102,6,90 2 227 atilde +:a 456,729,14,82,6,82 2 228 adieresis +oa 456,776,14,72,6,72 2 229 aring +ae 729,546,14,78,5,78 0 230 ae +,c 456,546,228,86,-14,86 1 231 ccedilla +`e 456,750,14,81,-7,81 2 232 egrave +'e 456,750,14,109,-7,90 2 233 eacute +^e 456,750,14,81,-7,81 2 234 ecircumflex +:e 456,729,14,82,-7,82 2 235 edieresis +`i 228,750,0,90,-6,90 2 236 igrave +'i 228,750,0,223,-6,90 2 237 iacute +^i 228,750,0,187,-6,90 2 238 icircumflex +:i 228,729,0,196,-6,90 2 239 idieresis +Sd 501,737,14,99,-16,90 2 240 eth +~n 501,737,0,79,-3,79 2 241 ntilde +`o 501,750,14,77,-17,77 2 242 ograve 'o 501,750,14,86,-17,86 2 243 oacute -^o 501,750,14,76,-17,76 2 244 ocircumflex -~o 501,737,14,78,-17,78 2 245 otilde -:o 501,729,14,76,-17,76 2 246 odieresis +^o 501,750,14,77,-17,77 2 244 ocircumflex +~o 501,737,14,79,-17,79 2 245 otilde +:o 501,729,14,77,-17,77 2 246 odieresis tdi 479,548,42,71,-17,71 0 247 divide -/o 501,560,29,124,32,90 0 248 oslash +/o 501,560,29,125,32,90 0 248 oslash `u 501,750,14,89,-30,89 2 249 ugrave 'u 501,750,14,89,-30,89 2 250 uacute ^u 501,750,14,89,-30,89 2 251 ucircumflex :u 501,729,14,89,-30,89 2 252 udieresis 'y 456,750,214,129,16,90 3 253 yacute -Tp 501,718,208,78,35,78 3 254 thorn +Tp 501,718,208,79,36,79 3 254 thorn :y 456,729,214,129,16,90 3 255 ydieresis -u2026 820,146,0,0,-25 0 256 ellipsis +u2026 820,146,0,1,-25,1 0 256 ellipsis diff --git a/contrib/groff/font/devps/HNI b/contrib/groff/font/devps/HNI index a9c39ed62a..889e0b9fe6 100644 --- a/contrib/groff/font/devps/HNI +++ b/contrib/groff/font/devps/HNI @@ -1,521 +1,1590 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Helvetica Narrow Oblique +# Version 003.001 +# FamilyName Helvetica +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 13:09:51 1999 +# Comment UniqueID 44714 +# Comment VMusage 11195 50629 + name HNI internalname Helvetica-Narrow-Oblique slant 12 spacewidth 228 encoding text.enc ligatures fi fl 0 + kernpairs -A y -40 -A w -40 -A v -40 -A u -30 -A Y -100 -A W -50 -A V -70 -A U -50 -A T -120 -A Q -30 -A O -30 -A G -30 A C -30 -B . -20 -B , -20 +A ,C -30 +A G -30 +A O -30 +A 'O -30 +A ^O -30 +A :O -30 +A `O -30 +A /O -30 +A ~O -30 +A Q -30 +A T -120 +A U -50 +A 'U -50 +A ^U -50 +A :U -50 +A `U -50 +A V -70 +A W -50 +A Y -100 +A 'Y -100 +A :Y -100 +A u -30 +A 'u -30 +A ^u -30 +A :u -30 +A `u -30 +A v -40 +A w -40 +A y -40 +A 'y -40 +A :y -40 +'A C -30 +'A ,C -30 +'A G -30 +'A O -30 +'A 'O -30 +'A ^O -30 +'A :O -30 +'A `O -30 +'A /O -30 +'A ~O -30 +'A Q -30 +'A T -120 +'A U -50 +'A 'U -50 +'A ^U -50 +'A :U -50 +'A `U -50 +'A V -70 +'A W -50 +'A Y -100 +'A 'Y -100 +'A :Y -100 +'A u -30 +'A 'u -30 +'A ^u -30 +'A :u -30 +'A `u -30 +'A v -40 +'A w -40 +'A y -40 +'A 'y -40 +'A :y -40 +^A C -30 +^A ,C -30 +^A G -30 +^A O -30 +^A 'O -30 +^A ^O -30 +^A :O -30 +^A `O -30 +^A /O -30 +^A ~O -30 +^A Q -30 +^A T -120 +^A U -50 +^A 'U -50 +^A ^U -50 +^A :U -50 +^A `U -50 +^A V -70 +^A W -50 +^A Y -100 +^A 'Y -100 +^A :Y -100 +^A u -30 +^A 'u -30 +^A ^u -30 +^A :u -30 +^A `u -30 +^A v -40 +^A w -40 +^A y -40 +^A 'y -40 +^A :y -40 +:A C -30 +:A ,C -30 +:A G -30 +:A O -30 +:A 'O -30 +:A ^O -30 +:A :O -30 +:A `O -30 +:A /O -30 +:A ~O -30 +:A Q -30 +:A T -120 +:A U -50 +:A 'U -50 +:A ^U -50 +:A :U -50 +:A `U -50 +:A V -70 +:A W -50 +:A Y -100 +:A 'Y -100 +:A :Y -100 +:A u -30 +:A 'u -30 +:A ^u -30 +:A :u -30 +:A `u -30 +:A v -40 +:A w -40 +:A y -40 +:A 'y -40 +:A :y -40 +`A C -30 +`A ,C -30 +`A G -30 +`A O -30 +`A 'O -30 +`A ^O -30 +`A :O -30 +`A `O -30 +`A /O -30 +`A ~O -30 +`A Q -30 +`A T -120 +`A U -50 +`A 'U -50 +`A ^U -50 +`A :U -50 +`A `U -50 +`A V -70 +`A W -50 +`A Y -100 +`A 'Y -100 +`A :Y -100 +`A u -30 +`A 'u -30 +`A ^u -30 +`A :u -30 +`A `u -30 +`A v -40 +`A w -40 +`A y -40 +`A 'y -40 +`A :y -40 +oA C -30 +oA ,C -30 +oA G -30 +oA O -30 +oA 'O -30 +oA ^O -30 +oA :O -30 +oA `O -30 +oA /O -30 +oA ~O -30 +oA Q -30 +oA T -120 +oA U -50 +oA 'U -50 +oA ^U -50 +oA :U -50 +oA `U -50 +oA V -70 +oA W -50 +oA Y -100 +oA 'Y -100 +oA :Y -100 +oA u -30 +oA 'u -30 +oA ^u -30 +oA :u -30 +oA `u -30 +oA v -40 +oA w -40 +oA y -40 +oA 'y -40 +oA :y -40 +~A C -30 +~A ,C -30 +~A G -30 +~A O -30 +~A 'O -30 +~A ^O -30 +~A :O -30 +~A `O -30 +~A /O -30 +~A ~O -30 +~A Q -30 +~A T -120 +~A U -50 +~A 'U -50 +~A ^U -50 +~A :U -50 +~A `U -50 +~A V -70 +~A W -50 +~A Y -100 +~A 'Y -100 +~A :Y -100 +~A u -30 +~A 'u -30 +~A ^u -30 +~A :u -30 +~A `u -30 +~A v -40 +~A w -40 +~A y -40 +~A 'y -40 +~A :y -40 B U -10 -C . -30 +B 'U -10 +B ^U -10 +B :U -10 +B `U -10 +B , -20 +B . -20 C , -30 -D . -70 -D , -70 -D Y -90 -D W -40 -D V -70 +C . -30 +,C , -30 +,C . -30 D A -40 -F r -45 -F . -150 -F o -30 -F e -30 -F , -150 -F a -50 +D 'A -40 +D ^A -40 +D :A -40 +D `A -40 +D oA -40 +D ~A -40 +D V -70 +D W -40 +D Y -90 +D 'Y -90 +D :Y -90 +D , -70 +D . -70 F A -80 -J u -20 -J . -30 -J , -30 -J a -20 +F 'A -80 +F ^A -80 +F :A -80 +F `A -80 +F oA -80 +F ~A -80 +F a -50 +F 'a -50 +F ^a -50 +F :a -50 +F `a -50 +F oa -50 +F ~a -50 +F , -150 +F e -30 +F 'e -30 +F ^e -30 +F :e -30 +F `e -30 +F o -30 +F 'o -30 +F ^o -30 +F :o -30 +F `o -30 +F /o -30 +F ~o -30 +F . -150 +F r -45 J A -20 -K y -50 -K u -30 -K o -40 -K e -40 +J 'A -20 +J ^A -20 +J :A -20 +J `A -20 +J oA -20 +J ~A -20 +J a -20 +J 'a -20 +J ^a -20 +J :a -20 +J `a -20 +J oa -20 +J ~a -20 +J , -30 +J . -30 +J u -20 +J 'u -20 +J ^u -20 +J :u -20 +J `u -20 K O -50 -L y -30 +K 'O -50 +K ^O -50 +K :O -50 +K `O -50 +K /O -50 +K ~O -50 +K e -40 +K 'e -40 +K ^e -40 +K :e -40 +K `e -40 +K o -40 +K 'o -40 +K ^o -40 +K :o -40 +K `o -40 +K /o -40 +K ~o -40 +K u -30 +K 'u -30 +K ^u -30 +K :u -30 +K `u -30 +K y -50 +K 'y -50 +K :y -50 +L T -110 +L V -110 +L W -70 +L Y -140 +L 'Y -140 +L :Y -140 +L rq -140 L ' -160 L cq -160 -L rq -140 -L Y -140 -L W -70 -L V -110 -L T -110 -O . -40 -O , -40 -O Y -70 -O X -60 -O W -30 -O V -50 -O T -40 +L y -30 +L 'y -30 +L :y -30 +/L T -110 +/L V -110 +/L W -70 +/L Y -140 +/L 'Y -140 +/L :Y -140 +/L rq -140 +/L ' -160 +/L cq -160 +/L y -30 +/L 'y -30 +/L :y -30 O A -20 -P . -180 -P o -50 -P e -50 -P , -180 -P a -40 +O 'A -20 +O ^A -20 +O :A -20 +O `A -20 +O oA -20 +O ~A -20 +O T -40 +O V -50 +O W -30 +O X -60 +O Y -70 +O 'Y -70 +O :Y -70 +O , -40 +O . -40 +'O A -20 +'O 'A -20 +'O ^A -20 +'O :A -20 +'O `A -20 +'O oA -20 +'O ~A -20 +'O T -40 +'O V -50 +'O W -30 +'O X -60 +'O Y -70 +'O 'Y -70 +'O :Y -70 +'O , -40 +'O . -40 +^O A -20 +^O 'A -20 +^O ^A -20 +^O :A -20 +^O `A -20 +^O oA -20 +^O ~A -20 +^O T -40 +^O V -50 +^O W -30 +^O X -60 +^O Y -70 +^O 'Y -70 +^O :Y -70 +^O , -40 +^O . -40 +:O A -20 +:O 'A -20 +:O ^A -20 +:O :A -20 +:O `A -20 +:O oA -20 +:O ~A -20 +:O T -40 +:O V -50 +:O W -30 +:O X -60 +:O Y -70 +:O 'Y -70 +:O :Y -70 +:O , -40 +:O . -40 +`O A -20 +`O 'A -20 +`O ^A -20 +`O :A -20 +`O `A -20 +`O oA -20 +`O ~A -20 +`O T -40 +`O V -50 +`O W -30 +`O X -60 +`O Y -70 +`O 'Y -70 +`O :Y -70 +`O , -40 +`O . -40 +/O A -20 +/O 'A -20 +/O ^A -20 +/O :A -20 +/O `A -20 +/O oA -20 +/O ~A -20 +/O T -40 +/O V -50 +/O W -30 +/O X -60 +/O Y -70 +/O 'Y -70 +/O :Y -70 +/O , -40 +/O . -40 +~O A -20 +~O 'A -20 +~O ^A -20 +~O :A -20 +~O `A -20 +~O oA -20 +~O ~A -20 +~O T -40 +~O V -50 +~O W -30 +~O X -60 +~O Y -70 +~O 'Y -70 +~O :Y -70 +~O , -40 +~O . -40 P A -120 +P 'A -120 +P ^A -120 +P :A -120 +P `A -120 +P oA -120 +P ~A -120 +P a -40 +P 'a -40 +P ^a -40 +P :a -40 +P `a -40 +P oa -40 +P ~a -40 +P , -180 +P e -50 +P 'e -50 +P ^e -50 +P :e -50 +P `e -50 +P o -50 +P 'o -50 +P ^o -50 +P :o -50 +P `o -50 +P /o -50 +P ~o -50 +P . -180 Q U -10 -R Y -50 -R W -30 -R V -50 -R U -40 -R T -30 +Q 'U -10 +Q ^U -10 +Q :U -10 +Q `U -10 R O -20 -S . -20 +R 'O -20 +R ^O -20 +R :O -20 +R `O -20 +R /O -20 +R ~O -20 +R T -30 +R U -40 +R 'U -40 +R ^U -40 +R :U -40 +R `U -40 +R V -50 +R W -30 +R Y -50 +R 'Y -50 +R :Y -50 S , -20 -T y -120 -T w -120 -T u -120 -T ; -20 -T r -120 -T . -120 -T o -120 +S . -20 +vS , -20 +vS . -20 +T A -120 +T 'A -120 +T ^A -120 +T :A -120 +T `A -120 +T oA -120 +T ~A -120 +T O -40 +T 'O -40 +T ^O -40 +T :O -40 +T `O -40 +T /O -40 +T ~O -40 +T a -120 +T 'a -120 +T ^a -120 +T :a -120 +T `a -120 +T oa -120 +T ~a -60 +T : -20 +T , -120 +T e -120 +T 'e -120 +T ^e -120 +T :e -120 +T `e -60 T - -140 T hy -140 -T e -120 -T , -120 -T : -20 -T a -120 -T O -40 -T A -120 -U . -40 -U , -40 +T o -120 +T 'o -120 +T ^o -120 +T :o -120 +T `o -120 +T /o -120 +T ~o -60 +T . -120 +T r -120 +T ; -20 +T u -120 +T 'u -120 +T ^u -120 +T :u -120 +T `u -120 +T w -120 +T y -120 +T 'y -120 +T :y -60 U A -40 -V u -70 -V ; -40 -V . -125 -V o -80 +U 'A -40 +U ^A -40 +U :A -40 +U `A -40 +U oA -40 +U ~A -40 +U , -40 +U . -40 +'U A -40 +'U 'A -40 +'U ^A -40 +'U :A -40 +'U `A -40 +'U oA -40 +'U ~A -40 +'U , -40 +'U . -40 +^U A -40 +^U 'A -40 +^U ^A -40 +^U :A -40 +^U `A -40 +^U oA -40 +^U ~A -40 +^U , -40 +^U . -40 +:U A -40 +:U 'A -40 +:U ^A -40 +:U :A -40 +:U `A -40 +:U oA -40 +:U ~A -40 +:U , -40 +:U . -40 +`U A -40 +`U 'A -40 +`U ^A -40 +`U :A -40 +`U `A -40 +`U oA -40 +`U ~A -40 +`U , -40 +`U . -40 +V A -80 +V 'A -80 +V ^A -80 +V :A -80 +V `A -80 +V oA -80 +V ~A -80 +V G -40 +V O -40 +V 'O -40 +V ^O -40 +V :O -40 +V `O -40 +V /O -40 +V ~O -40 +V a -70 +V 'a -70 +V ^a -70 +V :a -70 +V `a -70 +V oa -70 +V ~a -70 +V : -40 +V , -125 +V e -80 +V 'e -80 +V ^e -80 +V :e -80 +V `e -80 V - -80 V hy -80 -V e -80 -V , -125 -V : -40 -V a -70 -V O -40 -V G -40 -V A -80 -W y -20 -W u -30 -W . -80 -W o -30 +V o -80 +V 'o -80 +V ^o -80 +V :o -80 +V `o -80 +V /o -80 +V ~o -80 +V . -125 +V ; -40 +V u -70 +V 'u -70 +V ^u -70 +V :u -70 +V `u -70 +W A -50 +W 'A -50 +W ^A -50 +W :A -50 +W `A -50 +W oA -50 +W ~A -50 +W O -20 +W 'O -20 +W ^O -20 +W :O -20 +W `O -20 +W /O -20 +W ~O -20 +W a -40 +W 'a -40 +W ^a -40 +W :a -40 +W `a -40 +W oa -40 +W ~a -40 +W , -80 +W e -30 +W 'e -30 +W ^e -30 +W :e -30 +W `e -30 W - -40 W hy -40 -W e -30 -W , -80 -W a -40 -W O -20 -W A -50 -Y u -110 -Y ; -60 -Y . -140 -Y o -140 -Y i -20 +W o -30 +W 'o -30 +W ^o -30 +W :o -30 +W `o -30 +W /o -30 +W ~o -30 +W . -80 +W u -30 +W 'u -30 +W ^u -30 +W :u -30 +W `u -30 +W y -20 +W 'y -20 +W :y -20 +Y A -110 +Y 'A -110 +Y ^A -110 +Y :A -110 +Y `A -110 +Y oA -110 +Y ~A -110 +Y O -85 +Y 'O -85 +Y ^O -85 +Y :O -85 +Y `O -85 +Y /O -85 +Y ~O -85 +Y a -140 +Y 'a -140 +Y ^a -140 +Y :a -140 +Y `a -140 +Y oa -140 +Y ~a -140 +Y : -60 +Y , -140 +Y e -140 +Y 'e -140 +Y ^e -140 +Y :e -140 +Y `e -140 Y - -140 Y hy -140 -Y e -140 -Y , -140 -Y : -60 -Y a -140 -Y O -85 -Y A -110 -a y -30 -a w -20 +Y i -20 +Y 'i -20 +Y o -140 +Y 'o -140 +Y ^o -140 +Y :o -140 +Y `o -140 +Y /o -140 +Y ~o -140 +Y . -140 +Y ; -60 +Y u -110 +Y 'u -110 +Y ^u -110 +Y :u -110 +Y `u -110 +'Y A -110 +'Y 'A -110 +'Y ^A -110 +'Y :A -110 +'Y `A -110 +'Y oA -110 +'Y ~A -110 +'Y O -85 +'Y 'O -85 +'Y ^O -85 +'Y :O -85 +'Y `O -85 +'Y /O -85 +'Y ~O -85 +'Y a -140 +'Y 'a -140 +'Y ^a -140 +'Y :a -140 +'Y `a -140 +'Y oa -140 +'Y ~a -70 +'Y : -60 +'Y , -140 +'Y e -140 +'Y 'e -140 +'Y ^e -140 +'Y :e -140 +'Y `e -140 +'Y - -140 +'Y hy -140 +'Y i -20 +'Y 'i -20 +'Y o -140 +'Y 'o -140 +'Y ^o -140 +'Y :o -140 +'Y `o -140 +'Y /o -140 +'Y ~o -140 +'Y . -140 +'Y ; -60 +'Y u -110 +'Y 'u -110 +'Y ^u -110 +'Y :u -110 +'Y `u -110 +:Y A -110 +:Y 'A -110 +:Y ^A -110 +:Y :A -110 +:Y `A -110 +:Y oA -110 +:Y ~A -110 +:Y O -85 +:Y 'O -85 +:Y ^O -85 +:Y :O -85 +:Y `O -85 +:Y /O -85 +:Y ~O -85 +:Y a -140 +:Y 'a -140 +:Y ^a -140 +:Y :a -140 +:Y `a -140 +:Y oa -140 +:Y ~a -70 +:Y : -60 +:Y , -140 +:Y e -140 +:Y 'e -140 +:Y ^e -140 +:Y :e -140 +:Y `e -140 +:Y - -140 +:Y hy -140 +:Y i -20 +:Y 'i -20 +:Y o -140 +:Y 'o -140 +:Y ^o -140 +:Y :o -140 +:Y `o -140 +:Y /o -140 +:Y ~o -140 +:Y . -140 +:Y ; -60 +:Y u -110 +:Y 'u -110 +:Y ^u -110 +:Y :u -110 +:Y `u -110 a v -20 -b y -20 -b v -20 -b u -20 -b . -40 -b l -20 -b , -40 +a w -20 +a y -30 +a 'y -30 +a :y -30 +'a v -20 +'a w -20 +'a y -30 +'a 'y -30 +'a :y -30 +^a v -20 +^a w -20 +^a y -30 +^a 'y -30 +^a :y -30 +:a v -20 +:a w -20 +:a y -30 +:a 'y -30 +:a :y -30 +`a v -20 +`a w -20 +`a y -30 +`a 'y -30 +`a :y -30 +oa v -20 +oa w -20 +oa y -30 +oa 'y -30 +oa :y -30 +~a v -20 +~a w -20 +~a y -30 +~a 'y -30 +~a :y -30 b b -10 -c k -20 +b , -40 +b l -20 +b /l -20 +b . -40 +b u -20 +b 'u -20 +b ^u -20 +b :u -20 +b `u -20 +b v -20 +b y -20 +b 'y -20 +b :y -20 c , -15 +c k -20 +,c , -15 +,c k -20 : u0020 -50 +, rq -100 , ' -100 , cq -100 -, rq -100 -e y -20 -e x -30 -e w -20 -e v -30 -e . -15 e , -15 +e . -15 +e v -30 +e w -20 +e x -30 +e y -20 +e 'y -20 +e :y -20 +'e , -15 +'e . -15 +'e v -30 +'e w -20 +'e x -30 +'e y -20 +'e 'y -20 +'e :y -20 +^e , -15 +^e . -15 +^e v -30 +^e w -20 +^e x -30 +^e y -20 +^e 'y -20 +^e :y -20 +:e , -15 +:e . -15 +:e v -30 +:e w -20 +:e x -30 +:e y -20 +:e 'y -20 +:e :y -20 +`e , -15 +`e . -15 +`e v -30 +`e w -20 +`e x -30 +`e y -20 +`e 'y -20 +`e :y -20 +f a -30 +f 'a -30 +f ^a -30 +f :a -30 +f `a -30 +f oa -30 +f ~a -30 +f , -30 +f .i -28 +f e -30 +f 'e -30 +f ^e -30 +f :e -30 +f `e -30 +f o -30 +f 'o -30 +f ^o -30 +f :o -30 +f `o -30 +f /o -30 +f ~o -30 +f . -30 +f rq 60 f ' 50 f cq 50 -f rq 60 -f . -30 -f o -30 -f e -30 -f .i -28 -f , -30 -f a -30 g r -10 h y -30 -k o -20 +h 'y -30 +h :y -30 k e -20 -m y -15 +k 'e -20 +k ^e -20 +k :e -20 +k `e -20 +k o -20 +k 'o -20 +k ^o -20 +k :o -20 +k `o -20 +k /o -20 +k ~o -20 m u -10 -n y -15 -n v -20 +m 'u -10 +m ^u -10 +m :u -10 +m `u -10 +m y -15 +m 'y -15 +m :y -15 n u -10 -o y -30 -o x -30 -o w -15 -o v -15 -o . -40 +n 'u -10 +n ^u -10 +n :u -10 +n `u -10 +n v -20 +n y -15 +n 'y -15 +n :y -15 +~n u -10 +~n 'u -10 +~n ^u -10 +~n :u -10 +~n `u -10 +~n v -20 +~n y -15 +~n 'y -15 +~n :y -15 o , -40 -/o z -55 -/o y -70 -/o x -85 -/o w -70 -/o v -70 -/o u -55 -/o t -55 -/o s -55 -/o r -55 -/o q -55 -/o . -95 -/o p -55 -/o o -55 -/o n -55 -/o m -55 -/o l -55 -/o k -55 -/o j -55 -/o i -55 -/o h -55 -/o g -55 -/o f -55 -/o e -55 -/o d -55 -/o , -95 -/o c -55 -/o b -55 +o . -40 +o v -15 +o w -15 +o x -30 +o y -30 +o 'y -30 +o :y -30 +'o , -40 +'o . -40 +'o v -15 +'o w -15 +'o x -30 +'o y -30 +'o 'y -30 +'o :y -30 +^o , -40 +^o . -40 +^o v -15 +^o w -15 +^o x -30 +^o y -30 +^o 'y -30 +^o :y -30 +:o , -40 +:o . -40 +:o v -15 +:o w -15 +:o x -30 +:o y -30 +:o 'y -30 +:o :y -30 +`o , -40 +`o . -40 +`o v -15 +`o w -15 +`o x -30 +`o y -30 +`o 'y -30 +`o :y -30 /o a -55 -p y -30 -p . -35 +/o 'a -55 +/o ^a -55 +/o :a -55 +/o `a -55 +/o oa -55 +/o ~a -55 +/o b -55 +/o c -55 +/o ,c -55 +/o , -95 +/o d -55 +/o e -55 +/o 'e -55 +/o ^e -55 +/o :e -55 +/o `e -55 +/o f -55 +/o g -55 +/o h -55 +/o i -55 +/o 'i -55 +/o ^i -55 +/o :i -55 +/o `i -55 +/o j -55 +/o k -55 +/o l -55 +/o /l -55 +/o m -55 +/o n -55 +/o ~n -55 +/o o -55 +/o 'o -55 +/o ^o -55 +/o :o -55 +/o `o -55 +/o /o -55 +/o ~o -55 +/o p -55 +/o . -95 +/o q -55 +/o r -55 +/o s -55 +/o vs -55 +/o t -55 +/o u -55 +/o 'u -55 +/o ^u -55 +/o :u -55 +/o `u -55 +/o v -70 +/o w -70 +/o x -85 +/o y -70 +/o 'y -70 +/o :y -70 +/o z -55 +/o vz -55 +~o , -40 +~o . -40 +~o v -15 +~o w -15 +~o x -30 +~o y -30 +~o 'y -30 +~o :y -30 p , -35 -. u0020 -60 +p . -35 +p y -30 +p 'y -30 +p :y -30 +. rq -100 . ' -100 . cq -100 -. rq -100 +. u0020 -60 rq u0020 -40 ` ` -57 ` oq -57 oq ` -57 oq oq -57 -' u0020 -70 -cq u0020 -70 -' s -50 -cq s -50 -' r -50 -cq r -50 +' d -50 +cq d -50 ' ' -57 ' cq -57 cq ' -57 cq cq -57 -' d -50 -cq d -50 -r y 30 -r v 30 -r u 15 -r t 40 -r ; 30 -r . -50 -r p 30 -r n 25 -r m 25 -r l 15 -r k 15 -r i 15 -r , -50 -r : 30 +' r -50 +cq r -50 +' s -50 +cq s -50 +' vs -50 +cq vs -50 +' u0020 -70 +cq u0020 -70 r a -10 -s w -30 -s . -15 +r 'a -10 +r ^a -10 +r :a -10 +r `a -10 +r oa -10 +r ~a -10 +r : 30 +r , -50 +r i 15 +r 'i 15 +r ^i 15 +r :i 15 +r `i 15 +r k 15 +r l 15 +r /l 15 +r m 25 +r n 25 +r ~n 25 +r p 30 +r . -50 +r ; 30 +r t 40 +r u 15 +r 'u 15 +r ^u 15 +r :u 15 +r `u 15 +r v 30 +r y 30 +r 'y 30 +r :y 30 s , -15 +s . -15 +s w -30 +vs , -15 +vs . -15 +vs w -30 ; u0020 -50 +u0020 T -50 +u0020 V -50 +u0020 W -40 +u0020 Y -90 +u0020 'Y -90 +u0020 :Y -90 +u0020 lq -30 u0020 ` -60 u0020 oq -60 -u0020 lq -30 -u0020 Y -90 -u0020 W -40 -u0020 V -50 -u0020 T -50 -v . -80 -v o -25 -v e -25 -v , -80 v a -25 -w . -60 -w o -10 -w e -10 -w , -60 +v 'a -25 +v ^a -25 +v :a -25 +v `a -25 +v oa -25 +v ~a -25 +v , -80 +v e -25 +v 'e -25 +v ^e -25 +v :e -25 +v `e -25 +v o -25 +v 'o -25 +v ^o -25 +v :o -25 +v `o -25 +v /o -25 +v ~o -25 +v . -80 w a -15 +w 'a -15 +w ^a -15 +w :a -15 +w `a -15 +w oa -15 +w ~a -15 +w , -60 +w e -10 +w 'e -10 +w ^e -10 +w :e -10 +w `e -10 +w o -10 +w 'o -10 +w ^o -10 +w :o -10 +w `o -10 +w /o -10 +w ~o -10 +w . -60 x e -30 -y . -100 -y o -20 -y e -20 -y , -100 +x 'e -30 +x ^e -30 +x :e -30 +x `e -30 y a -20 -z o -15 +y 'a -20 +y ^a -20 +y :a -20 +y `a -20 +y oa -20 +y ~a -20 +y , -100 +y e -20 +y 'e -20 +y ^e -20 +y :e -20 +y `e -20 +y o -20 +y 'o -20 +y ^o -20 +y :o -20 +y `o -20 +y /o -20 +y ~o -20 +y . -100 +'y a -20 +'y 'a -20 +'y ^a -20 +'y :a -20 +'y `a -20 +'y oa -20 +'y ~a -20 +'y , -100 +'y e -20 +'y 'e -20 +'y ^e -20 +'y :e -20 +'y `e -20 +'y o -20 +'y 'o -20 +'y ^o -20 +'y :o -20 +'y `o -20 +'y /o -20 +'y ~o -20 +'y . -100 +:y a -20 +:y 'a -20 +:y ^a -20 +:y :a -20 +:y `a -20 +:y oa -20 +:y ~a -20 +:y , -100 +:y e -20 +:y 'e -20 +:y ^e -20 +:y :e -20 +:y `e -20 +:y o -20 +:y 'o -20 +:y ^o -20 +:y :o -20 +:y `o -20 +:y /o -20 +:y ~o -20 +:y . -100 z e -15 +z 'e -15 +z ^e -15 +z :e -15 +z `e -15 +z o -15 +z 'o -15 +z ^o -15 +z :o -15 +z `o -15 +z /o -15 +z ~o -15 +vz e -15 +vz 'e -15 +vz ^e -15 +vz :e -15 +vz `e -15 +vz o -15 +vz 'o -15 +vz ^o -15 +vz :o -15 +vz `o -15 +vz /o -15 +vz ~o -15 + charset -ha 385,688,0,107,15,89 2 0 asciicircum +ha 385,688,0,108,16,89 2 0 asciicircum ti 479,326,0,47,-41,47 0 1 asciitilde -vS 547,929,19,87,-24,87 2 2 Scaron -vZ 501,929,0,156,31,89 2 3 Zcaron -vs 410,734,15,93,-2,89 2 4 scaron -vz 410,734,0,108,25,89 2 5 zcaron -:Y 547,901,0,164,-87,89 2 6 Ydieresis +vS 547,929,19,88,-23,88 2 2 Scaron +vZ 501,929,0,157,32,89 2 3 Zcaron +vs 410,734,15,93,-1,89 2 4 scaron +vz 410,734,0,109,25,89 2 5 zcaron +:Y 547,901,0,164,-86,89 2 6 Ydieresis tm 820,718,0,96,-102,89 2 7 trademark -aq 157,718,0,126,-79,89 2 8 quotesingle +aq 157,718,0,127,-79,89 2 8 quotesingle +Eu 456,703,19,148,-9,89 2 9 Euro space 228 0 32 space -! 228,718,0,100,-24,89 2 33 exclam +! 228,718,0,101,-23,89 2 33 exclam " 291,718,0,118,-88,89 2 34 quotedbl dq " -# 456,688,0,111,-10,89 2 35 numbersign +# 456,688,0,112,-9,89 2 35 numbersign sh " -$ 456,775,115,100,-7,89 2 36 dollar +$ 456,775,115,101,-6,89 2 36 dollar Do " % 729,703,19,50,-70,50 2 37 percent -& 547,718,15,33,-13,33 2 38 ampersand +& 547,718,15,34,-13,34 2 38 ampersand ' 182,718,0,122,-74,89 2 39 quoteright cq " -( 273,733,207,149,-39,89 3 40 parenleft -) 273,733,207,53,57,53 3 41 parenright -* 319,718,0,120,-85,89 2 42 asterisk -+ 479,505,0,68,-20,68 0 43 plus -, 228,106,147,0,4 0 44 comma -- 273,322,0,70,-27,70 0 45 hyphen +( 273,733,207,150,-38,89 3 40 parenleft +) 273,733,207,54,58,54 3 41 parenright +* 319,718,0,121,-84,89 2 42 asterisk ++ 479,505,0,69,-19,69 0 43 plus +, 228,106,147,0,5 0 44 comma +- 273,322,0,71,-26,71 0 45 hyphen hy " . 228,106,0,0,-21 0 46 period -/ 228,737,19,192,67,89 2 47 slash +/ 228,737,19,193,68,89 2 47 slash sl " -0 456,703,19,93,-27,89 2 48 zero -1 456,703,0,11,-120,11 2 49 one -2 456,703,0,100,29,89 2 50 two +0 456,703,19,93,-26,89 2 48 zero +1 456,703,0,11,-119,11 2 49 one +2 456,703,0,101,29,89 2 50 two 3 456,703,19,94,-11,89 2 51 three 4 456,703,0,66,0,66 2 52 four -5 456,688,19,103,-5,89 2 53 five -6 456,703,19,98,-24,89 2 54 six +5 456,688,19,104,-5,89 2 53 five +6 456,703,19,99,-24,89 2 54 six 7 456,688,0,143,-62,89 2 55 seven -8 456,703,19,91,-10,89 2 56 eight -9 456,703,19,93,-17,89 2 57 nine +8 456,703,19,92,-10,89 2 56 eight +9 456,703,19,94,-17,89 2 57 nine : 228,516,0,69,-21,69 0 58 colon -; 228,516,147,69,4,69 0 59 semicolon +; 228,516,147,69,5,69 0 59 semicolon < 479,495,0,97,-27,89 0 60 less = 479,390,0,86,-2,86 0 61 equal > 479,495,0,61,9,61 0 62 greater -? 456,727,0,94,-82,89 2 63 question -@ 832,737,19,9,-126,9 2 64 at +? 456,727,0,95,-81,89 2 63 question +@ 832,737,19,10,-126,10 2 64 at at " -A 547,718,0,39,39,39 2 65 A -B 547,718,0,86,-11,86 2 66 B -C 592,737,19,98,-38,89 2 67 C -D 592,718,0,84,-16,84 2 68 D -E 547,718,0,128,-21,89 2 69 E -F 501,718,0,152,-21,89 2 70 F -G 638,737,19,67,-41,67 2 71 G +A 547,718,0,40,39,40 2 65 A +B 547,718,0,87,-10,87 2 66 B +C 592,737,19,100,-38,89 2 67 C +D 592,718,0,85,-16,85 2 68 D +E 547,718,0,128,-20,89 2 69 E +F 501,718,0,153,-20,89 2 70 F +G 638,737,19,68,-40,68 2 71 G H 592,718,0,113,-13,89 2 72 H -I 228,718,0,101,-25,89 2 73 I -J 410,718,19,116,11,89 2 74 J -K 547,718,0,165,-12,89 2 75 K -L 456,718,0,49,-12,49 2 76 L -M 683,718,0,116,-10,89 2 77 M +I 228,718,0,102,-24,89 2 73 I +J 410,718,19,117,12,89 2 74 J +K 547,718,0,166,-12,89 2 75 K +L 456,718,0,50,-12,50 2 76 L +M 683,718,0,117,-9,89 2 77 M N 592,718,0,113,-12,89 2 78 N -O 638,737,19,89,-36,89 2 79 O -P 547,718,0,107,-21,89 2 80 P -Q 638,737,56,89,-36,89 2 81 Q -R 592,718,0,92,-22,89 2 82 R -S 547,737,19,87,-24,87 2 83 S -T 501,718,0,164,-72,89 2 84 T -U 592,718,19,111,-51,89 2 85 U -V 547,718,0,159,-92,89 2 86 V -W 774,718,0,162,-88,89 2 87 W -X 547,718,0,150,34,89 2 88 X -Y 547,718,0,164,-87,89 2 89 Y -Z 501,718,0,156,31,89 2 90 Z +O 638,737,19,90,-36,89 2 79 O +P 547,718,0,108,-20,89 2 80 P +Q 638,737,56,90,-36,89 2 81 Q +R 592,718,0,93,-22,89 2 82 R +S 547,737,19,88,-23,88 2 83 S +T 501,718,0,164,-71,89 2 84 T +U 592,718,19,112,-50,89 2 85 U +V 547,718,0,159,-91,89 2 86 V +W 774,718,0,163,-88,89 2 87 W +X 547,718,0,151,35,89 2 88 X +Y 547,718,0,164,-86,89 2 89 Y +Z 501,718,0,157,32,89 2 90 Z [ 228,722,196,153,33,89 2 91 bracketleft lB " -\ 228,737,19,61,-65,61 2 92 backslash +\ 228,737,19,61,-64,61 2 92 backslash rs " -] 228,722,196,124,61,89 2 93 bracketright +] 228,722,196,125,62,89 2 93 bracketright rB " -a^ 273,734,0,136,-71,89 2 94 circumflex +a^ 273,734,0,137,-70,89 2 94 circumflex ^ " _ 456,0,125,37,72,37 0 95 underscore ` 182,725,0,133,-85,89 2 96 quoteleft oq " -a 456,538,15,52,0,52 0 97 a -b 456,718,15,73,2,73 2 98 b +a 456,538,15,53,0,53 0 97 a +b 456,718,15,74,3,74 2 98 b c 410,538,15,94,-11,89 0 99 c -d 456,718,15,128,-19,89 2 100 d -e 456,538,15,68,-19,68 0 101 e -f 228,728,0,163,-21,89 2 102 f -g 456,538,220,94,16,89 1 103 g +d 456,718,15,129,-18,89 2 100 d +e 456,538,15,69,-19,69 0 101 e +f 228,728,0,164,-20,89 2 102 f +g 456,538,220,95,16,89 1 103 g h 456,718,0,64,-3,64 2 104 h -i 182,718,0,120,-5,89 2 105 i -j 182,718,210,120,99,89 3 106 j -k 410,718,0,132,-5,89 2 107 k -l 182,718,0,120,-5,89 2 108 l +i 182,718,0,121,-4,89 2 105 i +j 182,718,210,121,100,89 3 106 j +k 410,718,0,133,-4,89 2 107 k +l 182,718,0,121,-4,89 2 108 l m 683,538,0,66,-3,66 0 109 m n 456,538,0,64,-3,64 0 110 n -o 456,538,14,73,-18,73 0 111 o -p 456,538,207,73,39,73 1 112 p -q 456,538,207,90,-19,89 1 113 q -r 273,538,0,142,-13,89 0 114 r -s 410,538,15,74,-2,74 0 115 s -t 228,669,7,124,-34,89 2 116 t -u 456,523,15,86,-27,86 0 117 u -v 410,523,0,135,-48,89 0 118 v -w 592,523,0,131,-53,89 0 119 w -x 410,523,0,127,41,89 0 120 x -y 410,523,214,132,38,89 1 121 y -z 410,523,0,108,25,89 0 122 z -lC 274,722,196,141,-25,89 2 123 braceleft +o 456,538,14,74,-17,74 0 111 o +p 456,538,207,74,39,74 1 112 p +q 456,538,207,91,-18,89 1 113 q +r 273,538,0,143,-13,89 0 114 r +s 410,538,15,75,-1,75 0 115 s +t 228,669,7,124,-33,89 2 116 t +u 456,523,15,87,-27,87 0 117 u +v 410,523,0,135,-47,89 0 118 v +w 592,523,0,131,-52,89 0 119 w +x 410,523,0,128,41,89 0 120 x +y 410,523,214,133,38,89 1 121 y +z 410,523,0,109,25,89 0 122 z +lC 274,722,196,142,-25,89 2 123 braceleft { " -ba 213,737,19,102,-24,89 2 124 bar +ba 213,775,225,110,13,89 3 124 bar | " rC 274,722,196,67,50,67 2 125 braceright } " -a~ 273,722,0,179,-52,89 2 126 tilde +a~ 273,722,0,180,-52,89 2 126 tilde ~ " -bq 182,106,149,15,33,15 0 128 quotesinglbase -Fo 456,446,0,48,-70,48 0 129 guillemotleft +bq 182,106,149,16,33,16 0 128 quotesinglbase +Fo 456,446,0,49,-69,49 0 129 guillemotleft Fc 456,446,0,27,-48,27 0 130 guillemotright bu 287,517,0,102,-24,89 0 131 bullet -Fn 456,737,207,131,93,89 3 132 florin -f/ 137,703,19,309,189,89 2 133 fraction +Fn 456,737,207,131,94,89 3 132 florin +f/ 137,703,19,309,190,89 2 133 fraction %0 820,703,19,74,-22,74 2 134 perthousand dg 456,718,159,104,-60,89 2 135 dagger -dd 456,718,159,105,7,89 2 136 daggerdbl -en 456,313,0,104,8,89 0 137 endash -em 820,313,0,105,8,89 0 138 emdash -fi 410,728,0,121,-21,89 2 140 fi -fl 410,728,0,119,-21,89 2 141 fl -.i 228,523,0,63,-28,63 0 144 dotlessi -ga 273,734,0,53,-89,53 2 146 grave -a" 273,734,0,240,-79,89 2 147 hungarumlaut +dd 456,718,159,106,8,89 2 136 daggerdbl +en 456,313,0,105,9,89 0 137 endash +em 820,313,0,105,9,89 0 138 emdash +fi 410,728,0,122,-20,89 2 140 fi +fl 410,728,0,120,-20,89 2 141 fl +.i 228,523,0,64,-27,64 0 144 dotlessi +ga 273,734,0,54,-89,54 2 146 grave +a" 273,734,0,241,-78,89 2 147 hungarumlaut a. 273,706,0,74,-154,74 2 148 dotaccent ab 273,731,0,168,-87,89 2 149 breve ah 273,734,0,161,-95,89 2 150 caron -ao 273,756,0,107,-125,89 2 151 ring +ao 273,756,0,108,-125,89 2 151 ring ho 273,0,225,0,15 1 152 ogonek -lq 273,725,0,155,-63,89 2 153 quotedblleft -rq 273,718,0,144,-52,89 2 154 quotedblright -oe 774,538,15,67,-18,67 0 155 oe -/l 182,718,0,152,16,89 2 156 lslash -Bq 273,106,149,37,55,37 0 157 quotedblbase +lq 273,725,0,156,-63,89 2 153 quotedblleft +rq 273,718,0,145,-52,89 2 154 quotedblright +oe 774,538,15,67,-17,67 0 155 oe +/l 182,718,0,153,17,89 2 156 lslash +Bq 273,106,149,38,55,38 0 157 quotedblbase OE 820,737,19,145,-30,89 2 158 OE -/L 456,718,0,49,16,49 2 159 Lslash -r! 273,523,195,44,-13,44 0 161 exclamdown -ct 456,623,115,73,-28,73 0 162 cent +/L 456,718,0,50,17,50 2 159 Lslash +r! 273,523,195,45,-12,45 0 161 exclamdown +ct 456,623,115,73,-27,73 0 162 cent Po 456,718,16,114,10,89 2 163 sterling -Cs 456,603,0,124,1,89 0 164 currency -Ye 456,688,0,167,-17,89 2 165 yen -bb 213,737,19,102,-24,89 2 166 brokenbar -sc 456,737,191,73,-13,73 2 167 section -ad 273,706,0,140,-88,89 2 168 dieresis +Cs 456,603,0,124,2,89 0 164 currency +Ye 456,688,0,168,-16,89 2 165 yen +bb 213,700,150,96,0,89 2 166 brokenbar +sc 456,737,191,73,-12,73 2 167 section +ad 273,706,0,141,-88,89 2 168 dieresis co 604,737,19,133,6,89 2 169 copyright -Of 303,737,0,115,-32,89 2 170 ordfeminine +Of 303,737,0,116,-54,89 2 170 ordfeminine fo 273,446,0,56,-62,56 0 171 guilsinglleft tno 479,390,0,86,-37,86 0 172 logicalnot -\- 479,289,0,68,-20,68 0 173 minus +\- 479,289,0,69,-19,69 0 173 minus rg 604,737,19,133,6,89 2 174 registered -a- 273,684,0,161,-67,89 2 175 macron +a- 273,684,0,162,-67,89 2 175 macron de 328,703,0,106,-88,89 2 176 degree -t+- 479,506,0,78,18,78 0 177 plusminus +t+- 479,506,0,79,19,79 0 177 plusminus S2 273,703,0,145,-2,89 2 178 twosuperior -S3 273,703,0,135,-24,89 2 179 threesuperior +S3 273,703,0,135,-23,89 2 179 threesuperior aa 273,734,0,167,-153,89 2 180 acute -mc 456,523,207,86,30,86 1 181 mu +mc 474,523,207,69,31,69 1 181 mu ps 440,718,173,143,-53,89 2 182 paragraph -pc 228,315,0,33,-56,33 0 183 periodcentered -ac 273,0,225,0,48 1 184 cedilla -S1 273,703,0,82,-86,82 2 185 onesuperior -Om 299,737,0,135,-32,89 2 186 ordmasculine -fc 273,446,0,34,-41,34 0 187 guilsinglright -14 684,703,19,24,-73,24 2 188 onequarter +pc 228,315,0,33,-55,33 0 183 periodcentered +ac 273,0,225,0,49 1 184 cedilla +S1 273,703,0,82,-85,82 2 185 onesuperior +Om 299,737,0,135,-65,89 2 186 ordmasculine +fc 273,446,0,35,-40,35 0 187 guilsinglright +14 684,703,19,24,-72,24 2 188 onequarter 12 684,703,19,54,-43,54 2 189 onehalf -34 684,703,19,72,-56,72 2 190 threequarters -r? 501,525,201,0,-20 0 191 questiondown -`A 547,929,0,39,39,39 2 192 Agrave -'A 547,929,0,63,39,63 2 193 Aacute -^A 547,929,0,39,39,39 2 194 Acircumflex -~A 547,917,0,76,39,76 2 195 Atilde -:A 547,901,0,39,39,39 2 196 Adieresis -oA 547,931,0,39,39,39 2 197 Aring -AE 820,718,0,129,43,89 2 198 AE -,C 592,737,225,98,-38,89 3 199 Ccedilla -`E 547,929,0,128,-21,89 2 200 Egrave -'E 547,929,0,128,-21,89 2 201 Eacute -^E 547,929,0,128,-21,89 2 202 Ecircumflex -:E 547,901,0,128,-21,89 2 203 Edieresis -`I 228,929,0,110,-25,89 2 204 Igrave -'I 228,929,0,223,-25,89 2 205 Iacute -^I 228,929,0,193,-25,89 2 206 Icircumflex -:I 228,901,0,197,-25,89 2 207 Idieresis --D 592,718,0,84,-7,84 2 208 Eth +34 684,703,19,73,-56,73 2 190 threequarters +r? 501,525,201,0,-19 0 191 questiondown +`A 547,929,0,40,39,40 2 192 Agrave +'A 547,929,0,64,39,64 2 193 Aacute +^A 547,929,0,40,39,40 2 194 Acircumflex +~A 547,917,0,77,39,77 2 195 Atilde +:A 547,901,0,40,39,40 2 196 Adieresis +oA 547,931,0,40,39,40 2 197 Aring +AE 820,718,0,130,44,89 2 198 AE +,C 592,737,225,100,-38,89 3 199 Ccedilla +`E 547,929,0,128,-20,89 2 200 Egrave +'E 547,929,0,128,-20,89 2 201 Eacute +^E 547,929,0,128,-20,89 2 202 Ecircumflex +:E 547,901,0,128,-20,89 2 203 Edieresis +`I 228,929,0,111,-24,89 2 204 Igrave +'I 228,929,0,224,-24,89 2 205 Iacute +^I 228,929,0,194,-24,89 2 206 Icircumflex +:I 228,901,0,198,-24,89 2 207 Idieresis +-D 592,718,0,85,-6,85 2 208 Eth ~N 592,917,0,113,-12,89 2 209 Ntilde -`O 638,929,19,89,-36,89 2 210 Ograve -'O 638,929,19,89,-36,89 2 211 Oacute -^O 638,929,19,89,-36,89 2 212 Ocircumflex -~O 638,917,19,89,-36,89 2 213 Otilde -:O 638,901,19,89,-36,89 2 214 Odieresis -tmu 479,506,0,97,9,89 0 215 multiply -/O 638,737,19,142,15,89 2 216 Oslash -`U 592,929,19,111,-51,89 2 217 Ugrave -'U 592,929,19,111,-51,89 2 218 Uacute -^U 592,929,19,111,-51,89 2 219 Ucircumflex -:U 592,901,19,111,-51,89 2 220 Udieresis -'Y 547,929,0,164,-87,89 2 221 Yacute -TP 547,718,0,87,-21,87 2 222 Thorn -ss 501,728,15,88,-5,88 2 223 germandbls -`a 456,734,15,52,0,52 2 224 agrave -'a 456,734,15,75,0,75 2 225 aacute -^a 456,734,15,52,0,52 2 226 acircumflex +`O 638,929,19,90,-36,89 2 210 Ograve +'O 638,929,19,90,-36,89 2 211 Oacute +^O 638,929,19,90,-36,89 2 212 Ocircumflex +~O 638,917,19,90,-36,89 2 213 Otilde +:O 638,901,19,90,-36,89 2 214 Odieresis +tmu 479,506,0,98,10,89 0 215 multiply +/O 638,737,19,143,15,89 2 216 Oslash +`U 592,929,19,112,-50,89 2 217 Ugrave +'U 592,929,19,112,-50,89 2 218 Uacute +^U 592,929,19,112,-50,89 2 219 Ucircumflex +:U 592,901,19,112,-50,89 2 220 Udieresis +'Y 547,929,0,164,-86,89 2 221 Yacute +TP 547,718,0,87,-20,87 2 222 Thorn +ss 501,728,15,89,-4,89 2 223 germandbls +`a 456,734,15,53,0,53 2 224 agrave +'a 456,734,15,76,0,76 2 225 aacute +^a 456,734,15,53,0,53 2 226 acircumflex ~a 456,722,15,80,0,80 2 227 atilde -:a 456,706,15,52,0,52 2 228 adieresis -oa 456,756,15,52,0,52 2 229 aring +:a 456,706,15,53,0,53 2 228 adieresis +oa 456,756,15,53,0,53 2 229 aring ae 729,538,15,67,0,67 0 230 ae -,c 410,538,225,94,-11,89 1 231 ccedilla -`e 456,734,15,68,-19,68 2 232 egrave -'e 456,734,15,75,-19,75 2 233 eacute -^e 456,734,15,68,-19,68 2 234 ecircumflex -:e 456,706,15,68,-19,68 2 235 edieresis -`i 228,734,0,76,-28,76 2 236 igrave -'i 228,734,0,189,-28,89 2 237 iacute -^i 228,734,0,159,-28,89 2 238 icircumflex -:i 228,706,0,163,-28,89 2 239 idieresis -Sd 456,737,15,100,-17,89 2 240 eth +,c 410,538,225,94,-10,89 1 231 ccedilla +`e 456,734,15,69,-19,69 2 232 egrave +'e 456,734,15,76,-19,76 2 233 eacute +^e 456,734,15,69,-19,69 2 234 ecircumflex +:e 456,706,15,69,-19,69 2 235 edieresis +`i 228,734,0,77,-27,77 2 236 igrave +'i 228,734,0,190,-27,89 2 237 iacute +^i 228,734,0,160,-27,89 2 238 icircumflex +:i 228,706,0,164,-27,89 2 239 idieresis +Sd 456,737,15,101,-16,89 2 240 eth ~n 456,722,0,80,-3,80 2 241 ntilde -`o 456,734,14,73,-18,73 2 242 ograve -'o 456,734,14,75,-18,75 2 243 oacute -^o 456,734,14,73,-18,73 2 244 ocircumflex -~o 456,722,14,88,-18,88 2 245 otilde -:o 456,706,14,73,-18,73 2 246 odieresis -tdi 479,524,19,68,-20,68 0 247 divide -/o 501,545,22,80,26,80 0 248 oslash -`u 456,734,15,86,-27,86 2 249 ugrave -'u 456,734,15,86,-27,86 2 250 uacute -^u 456,734,15,86,-27,86 2 251 ucircumflex -:u 456,706,15,86,-27,86 2 252 udieresis -'y 410,734,214,132,38,89 3 253 yacute -Tp 456,718,207,73,39,73 3 254 thorn -:y 410,706,214,132,38,89 3 255 ydieresis +`o 456,734,14,74,-17,74 2 242 ograve +'o 456,734,14,76,-17,76 2 243 oacute +^o 456,734,14,74,-17,74 2 244 ocircumflex +~o 456,722,14,89,-17,89 2 245 otilde +:o 456,706,14,74,-17,74 2 246 odieresis +tdi 479,524,19,69,-19,69 0 247 divide +/o 501,545,22,80,27,80 0 248 oslash +`u 456,734,15,87,-27,87 2 249 ugrave +'u 456,734,15,87,-27,87 2 250 uacute +^u 456,734,15,87,-27,87 2 251 ucircumflex +:u 456,706,15,87,-27,87 2 252 udieresis +'y 410,734,214,133,38,89 3 253 yacute +Tp 456,718,207,74,39,74 3 254 thorn +:y 410,706,214,133,38,89 3 255 ydieresis u2026 820,106,0,0,-44 0 256 ellipsis diff --git a/contrib/groff/font/devps/HNR b/contrib/groff/font/devps/HNR index 989bdf0427..c1178eebe0 100644 --- a/contrib/groff/font/devps/HNR +++ b/contrib/groff/font/devps/HNR @@ -1,280 +1,1348 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Helvetica Narrow +# Version 003.001 +# FamilyName Helvetica +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 13:07:10 1999 +# Comment UniqueID 44711 +# Comment VMusage 11195 50629 + name HNR internalname Helvetica-Narrow spacewidth 228 encoding text.enc ligatures fi fl 0 + kernpairs -A y -32 -A w -32 -A v -32 -A u -24 -A Y -81 -A W -40 -A V -56 -A U -40 -A T -97 -A Q -24 -A O -24 -A G -24 -A C -24 -B . -15 -B , -15 -B U -7 -C . -24 -C , -24 -D . -56 -D , -56 -D Y -73 -D W -32 -D V -56 -D A -32 -F r -36 -F . -122 -F o -24 -F e -24 -F , -122 -F a -40 -F A -65 -J u -15 -J . -24 -J , -24 -J a -15 -J A -15 -K y -40 -K u -24 -K o -32 -K e -32 -K O -40 -L y -24 -L ' -130 -L cq -130 -L rq -114 -L Y -114 -L W -56 -L V -89 -L T -89 -O . -32 -O , -32 -O Y -56 -O X -48 -O W -24 -O V -40 -O T -32 -O A -15 -P . -147 -P o -40 -P e -40 -P , -147 -P a -32 -P A -97 -Q U -7 -R Y -40 -R W -24 -R V -40 -R U -32 -R T -24 -R O -15 -S . -15 -S , -15 -T y -97 -T w -97 -T u -97 -T ; -15 -T r -97 -T . -97 -T o -97 -T - -114 -T hy -114 -T e -97 -T , -97 -T : -15 -T a -97 -T O -32 -T A -97 -U . -32 -U , -32 -U A -32 -V u -56 -V ; -32 -V . -102 -V o -65 -V - -65 -V hy -65 -V e -65 -V , -102 -V : -32 -V a -56 -V O -32 -V G -32 -V A -65 -W y -15 -W u -24 -W . -65 -W o -24 -W - -32 -W hy -32 -W e -24 -W , -65 -W a -32 -W O -15 -W A -40 -Y u -89 -Y ; -48 -Y . -114 -Y o -114 -Y i -15 -Y - -114 -Y hy -114 -Y e -114 -Y , -114 -Y : -48 -Y a -114 -Y O -69 -Y A -89 -a y -24 -a w -15 -a v -15 -b y -15 -b v -15 -b u -15 -b . -32 -b l -15 -b , -32 -b b -7 -c k -15 -c , -11 -: u0020 -40 -, ' -81 -, cq -81 -, rq -81 -e y -15 -e x -24 -e w -15 -e v -24 -e . -11 -e , -11 -f ' 41 -f cq 41 -f rq 49 -f . -24 -f o -24 -f e -24 -f .i -22 -f , -24 -f a -24 -g r -7 -h y -24 -k o -15 -k e -15 -m y -11 -m u -7 -n y -11 -n v -15 -n u -7 -o y -24 -o x -24 -o w -11 -o v -11 -o . -32 -o , -32 -/o z -44 -/o y -56 -/o x -69 -/o w -56 -/o v -56 -/o u -44 -/o t -44 -/o s -44 -/o r -44 -/o q -44 -/o . -77 -/o p -44 -/o o -44 -/o n -44 -/o m -44 -/o l -44 -/o k -44 -/o j -44 -/o i -44 -/o h -44 -/o g -44 -/o f -44 -/o e -44 -/o d -44 -/o , -77 -/o c -44 -/o b -44 -/o a -44 -p y -24 -p . -28 -p , -28 -. u0020 -48 -. ' -81 -. cq -81 -. rq -81 -rq u0020 -32 -` ` -46 -` oq -46 -oq ` -46 -oq oq -46 -' u0020 -56 -cq u0020 -56 -' s -40 -cq s -40 -' r -40 -cq r -40 -' ' -46 -' cq -46 -cq ' -46 -cq cq -46 -' d -40 -cq d -40 -r y 25 -r v 25 -r u 12 -r t 33 -r ; 25 -r . -40 -r p 25 -r n 21 -r m 21 -r l 12 -r k 12 -r i 12 -r , -40 -r : 25 -r a -7 -s w -24 -s . -11 -s , -11 -; u0020 -40 -u0020 ` -48 -u0020 oq -48 -u0020 lq -24 -u0020 Y -73 -u0020 W -32 -u0020 V -40 -u0020 T -40 -v . -65 -v o -20 -v e -20 -v , -65 -v a -20 -w . -48 -w o -7 -w e -7 -w , -48 -w a -11 -x e -24 -y . -81 -y o -15 -y e -15 -y , -81 -y a -15 -z o -11 -z e -11 +A C -30 +A ,C -30 +A G -30 +A O -30 +A 'O -30 +A ^O -30 +A :O -30 +A `O -30 +A /O -30 +A ~O -30 +A Q -30 +A T -120 +A U -50 +A 'U -50 +A ^U -50 +A :U -50 +A `U -50 +A V -70 +A W -50 +A Y -100 +A 'Y -100 +A :Y -100 +A u -30 +A 'u -30 +A ^u -30 +A :u -30 +A `u -30 +A v -40 +A w -40 +A y -40 +A 'y -40 +A :y -40 +'A C -30 +'A ,C -30 +'A G -30 +'A O -30 +'A 'O -30 +'A ^O -30 +'A :O -30 +'A `O -30 +'A /O -30 +'A ~O -30 +'A Q -30 +'A T -120 +'A U -50 +'A 'U -50 +'A ^U -50 +'A :U -50 +'A `U -50 +'A V -70 +'A W -50 +'A Y -100 +'A 'Y -100 +'A :Y -100 +'A u -30 +'A 'u -30 +'A ^u -30 +'A :u -30 +'A `u -30 +'A v -40 +'A w -40 +'A y -40 +'A 'y -40 +'A :y -40 +^A C -30 +^A ,C -30 +^A G -30 +^A O -30 +^A 'O -30 +^A ^O -30 +^A :O -30 +^A `O -30 +^A /O -30 +^A ~O -30 +^A Q -30 +^A T -120 +^A U -50 +^A 'U -50 +^A ^U -50 +^A :U -50 +^A `U -50 +^A V -70 +^A W -50 +^A Y -100 +^A 'Y -100 +^A :Y -100 +^A u -30 +^A 'u -30 +^A ^u -30 +^A :u -30 +^A `u -30 +^A v -40 +^A w -40 +^A y -40 +^A 'y -40 +^A :y -40 +:A C -30 +:A ,C -30 +:A G -30 +:A O -30 +:A 'O -30 +:A ^O -30 +:A :O -30 +:A `O -30 +:A /O -30 +:A ~O -30 +:A Q -30 +:A T -120 +:A U -50 +:A 'U -50 +:A ^U -50 +:A :U -50 +:A `U -50 +:A V -70 +:A W -50 +:A Y -100 +:A 'Y -100 +:A :Y -100 +:A u -30 +:A 'u -30 +:A ^u -30 +:A :u -30 +:A `u -30 +:A v -40 +:A w -40 +:A y -40 +:A 'y -40 +:A :y -40 +`A C -30 +`A ,C -30 +`A G -30 +`A O -30 +`A 'O -30 +`A ^O -30 +`A :O -30 +`A `O -30 +`A /O -30 +`A ~O -30 +`A Q -30 +`A T -120 +`A U -50 +`A 'U -50 +`A ^U -50 +`A :U -50 +`A `U -50 +`A V -70 +`A W -50 +`A Y -100 +`A 'Y -100 +`A :Y -100 +`A u -30 +`A 'u -30 +`A ^u -30 +`A :u -30 +`A `u -30 +`A v -40 +`A w -40 +`A y -40 +`A 'y -40 +`A :y -40 +oA C -30 +oA ,C -30 +oA G -30 +oA O -30 +oA 'O -30 +oA ^O -30 +oA :O -30 +oA `O -30 +oA /O -30 +oA ~O -30 +oA Q -30 +oA T -120 +oA U -50 +oA 'U -50 +oA ^U -50 +oA :U -50 +oA `U -50 +oA V -70 +oA W -50 +oA Y -100 +oA 'Y -100 +oA :Y -100 +oA u -30 +oA 'u -30 +oA ^u -30 +oA :u -30 +oA `u -30 +oA v -40 +oA w -40 +oA y -40 +oA 'y -40 +oA :y -40 +~A C -30 +~A ,C -30 +~A G -30 +~A O -30 +~A 'O -30 +~A ^O -30 +~A :O -30 +~A `O -30 +~A /O -30 +~A ~O -30 +~A Q -30 +~A T -120 +~A U -50 +~A 'U -50 +~A ^U -50 +~A :U -50 +~A `U -50 +~A V -70 +~A W -50 +~A Y -100 +~A 'Y -100 +~A :Y -100 +~A u -30 +~A 'u -30 +~A ^u -30 +~A :u -30 +~A `u -30 +~A v -40 +~A w -40 +~A y -40 +~A 'y -40 +~A :y -40 +B U -10 +B 'U -10 +B ^U -10 +B :U -10 +B `U -10 +B , -20 +B . -20 +C , -30 +C . -30 +,C , -30 +,C . -30 +D A -40 +D 'A -40 +D ^A -40 +D :A -40 +D `A -40 +D oA -40 +D ~A -40 +D V -70 +D W -40 +D Y -90 +D 'Y -90 +D :Y -90 +D , -70 +D . -70 +F A -80 +F 'A -80 +F ^A -80 +F :A -80 +F `A -80 +F oA -80 +F ~A -80 +F a -50 +F 'a -50 +F ^a -50 +F :a -50 +F `a -50 +F oa -50 +F ~a -50 +F , -150 +F e -30 +F 'e -30 +F ^e -30 +F :e -30 +F `e -30 +F o -30 +F 'o -30 +F ^o -30 +F :o -30 +F `o -30 +F /o -30 +F ~o -30 +F . -150 +F r -45 +J A -20 +J 'A -20 +J ^A -20 +J :A -20 +J `A -20 +J oA -20 +J ~A -20 +J a -20 +J 'a -20 +J ^a -20 +J :a -20 +J `a -20 +J oa -20 +J ~a -20 +J , -30 +J . -30 +J u -20 +J 'u -20 +J ^u -20 +J :u -20 +J `u -20 +K O -50 +K 'O -50 +K ^O -50 +K :O -50 +K `O -50 +K /O -50 +K ~O -50 +K e -40 +K 'e -40 +K ^e -40 +K :e -40 +K `e -40 +K o -40 +K 'o -40 +K ^o -40 +K :o -40 +K `o -40 +K /o -40 +K ~o -40 +K u -30 +K 'u -30 +K ^u -30 +K :u -30 +K `u -30 +K y -50 +K 'y -50 +K :y -50 +L T -110 +L V -110 +L W -70 +L Y -140 +L 'Y -140 +L :Y -140 +L rq -140 +L ' -160 +L cq -160 +L y -30 +L 'y -30 +L :y -30 +/L T -110 +/L V -110 +/L W -70 +/L Y -140 +/L 'Y -140 +/L :Y -140 +/L rq -140 +/L ' -160 +/L cq -160 +/L y -30 +/L 'y -30 +/L :y -30 +O A -20 +O 'A -20 +O ^A -20 +O :A -20 +O `A -20 +O oA -20 +O ~A -20 +O T -40 +O V -50 +O W -30 +O X -60 +O Y -70 +O 'Y -70 +O :Y -70 +O , -40 +O . -40 +'O A -20 +'O 'A -20 +'O ^A -20 +'O :A -20 +'O `A -20 +'O oA -20 +'O ~A -20 +'O T -40 +'O V -50 +'O W -30 +'O X -60 +'O Y -70 +'O 'Y -70 +'O :Y -70 +'O , -40 +'O . -40 +^O A -20 +^O 'A -20 +^O ^A -20 +^O :A -20 +^O `A -20 +^O oA -20 +^O ~A -20 +^O T -40 +^O V -50 +^O W -30 +^O X -60 +^O Y -70 +^O 'Y -70 +^O :Y -70 +^O , -40 +^O . -40 +:O A -20 +:O 'A -20 +:O ^A -20 +:O :A -20 +:O `A -20 +:O oA -20 +:O ~A -20 +:O T -40 +:O V -50 +:O W -30 +:O X -60 +:O Y -70 +:O 'Y -70 +:O :Y -70 +:O , -40 +:O . -40 +`O A -20 +`O 'A -20 +`O ^A -20 +`O :A -20 +`O `A -20 +`O oA -20 +`O ~A -20 +`O T -40 +`O V -50 +`O W -30 +`O X -60 +`O Y -70 +`O 'Y -70 +`O :Y -70 +`O , -40 +`O . -40 +/O A -20 +/O 'A -20 +/O ^A -20 +/O :A -20 +/O `A -20 +/O oA -20 +/O ~A -20 +/O T -40 +/O V -50 +/O W -30 +/O X -60 +/O Y -70 +/O 'Y -70 +/O :Y -70 +/O , -40 +/O . -40 +~O A -20 +~O 'A -20 +~O ^A -20 +~O :A -20 +~O `A -20 +~O oA -20 +~O ~A -20 +~O T -40 +~O V -50 +~O W -30 +~O X -60 +~O Y -70 +~O 'Y -70 +~O :Y -70 +~O , -40 +~O . -40 +P A -120 +P 'A -120 +P ^A -120 +P :A -120 +P `A -120 +P oA -120 +P ~A -120 +P a -40 +P 'a -40 +P ^a -40 +P :a -40 +P `a -40 +P oa -40 +P ~a -40 +P , -180 +P e -50 +P 'e -50 +P ^e -50 +P :e -50 +P `e -50 +P o -50 +P 'o -50 +P ^o -50 +P :o -50 +P `o -50 +P /o -50 +P ~o -50 +P . -180 +Q U -10 +Q 'U -10 +Q ^U -10 +Q :U -10 +Q `U -10 +R O -20 +R 'O -20 +R ^O -20 +R :O -20 +R `O -20 +R /O -20 +R ~O -20 +R T -30 +R U -40 +R 'U -40 +R ^U -40 +R :U -40 +R `U -40 +R V -50 +R W -30 +R Y -50 +R 'Y -50 +R :Y -50 +S , -20 +S . -20 +vS , -20 +vS . -20 +T A -120 +T 'A -120 +T ^A -120 +T :A -120 +T `A -120 +T oA -120 +T ~A -120 +T O -40 +T 'O -40 +T ^O -40 +T :O -40 +T `O -40 +T /O -40 +T ~O -40 +T a -120 +T 'a -120 +T ^a -120 +T :a -120 +T `a -120 +T oa -120 +T ~a -60 +T : -20 +T , -120 +T e -120 +T 'e -120 +T ^e -120 +T :e -120 +T `e -60 +T - -140 +T hy -140 +T o -120 +T 'o -120 +T ^o -120 +T :o -120 +T `o -120 +T /o -120 +T ~o -60 +T . -120 +T r -120 +T ; -20 +T u -120 +T 'u -120 +T ^u -120 +T :u -120 +T `u -120 +T w -120 +T y -120 +T 'y -120 +T :y -60 +U A -40 +U 'A -40 +U ^A -40 +U :A -40 +U `A -40 +U oA -40 +U ~A -40 +U , -40 +U . -40 +'U A -40 +'U 'A -40 +'U ^A -40 +'U :A -40 +'U `A -40 +'U oA -40 +'U ~A -40 +'U , -40 +'U . -40 +^U A -40 +^U 'A -40 +^U ^A -40 +^U :A -40 +^U `A -40 +^U oA -40 +^U ~A -40 +^U , -40 +^U . -40 +:U A -40 +:U 'A -40 +:U ^A -40 +:U :A -40 +:U `A -40 +:U oA -40 +:U ~A -40 +:U , -40 +:U . -40 +`U A -40 +`U 'A -40 +`U ^A -40 +`U :A -40 +`U `A -40 +`U oA -40 +`U ~A -40 +`U , -40 +`U . -40 +V A -80 +V 'A -80 +V ^A -80 +V :A -80 +V `A -80 +V oA -80 +V ~A -80 +V G -40 +V O -40 +V 'O -40 +V ^O -40 +V :O -40 +V `O -40 +V /O -40 +V ~O -40 +V a -70 +V 'a -70 +V ^a -70 +V :a -70 +V `a -70 +V oa -70 +V ~a -70 +V : -40 +V , -125 +V e -80 +V 'e -80 +V ^e -80 +V :e -80 +V `e -80 +V - -80 +V hy -80 +V o -80 +V 'o -80 +V ^o -80 +V :o -80 +V `o -80 +V /o -80 +V ~o -80 +V . -125 +V ; -40 +V u -70 +V 'u -70 +V ^u -70 +V :u -70 +V `u -70 +W A -50 +W 'A -50 +W ^A -50 +W :A -50 +W `A -50 +W oA -50 +W ~A -50 +W O -20 +W 'O -20 +W ^O -20 +W :O -20 +W `O -20 +W /O -20 +W ~O -20 +W a -40 +W 'a -40 +W ^a -40 +W :a -40 +W `a -40 +W oa -40 +W ~a -40 +W , -80 +W e -30 +W 'e -30 +W ^e -30 +W :e -30 +W `e -30 +W - -40 +W hy -40 +W o -30 +W 'o -30 +W ^o -30 +W :o -30 +W `o -30 +W /o -30 +W ~o -30 +W . -80 +W u -30 +W 'u -30 +W ^u -30 +W :u -30 +W `u -30 +W y -20 +W 'y -20 +W :y -20 +Y A -110 +Y 'A -110 +Y ^A -110 +Y :A -110 +Y `A -110 +Y oA -110 +Y ~A -110 +Y O -85 +Y 'O -85 +Y ^O -85 +Y :O -85 +Y `O -85 +Y /O -85 +Y ~O -85 +Y a -140 +Y 'a -140 +Y ^a -140 +Y :a -140 +Y `a -140 +Y oa -140 +Y ~a -140 +Y : -60 +Y , -140 +Y e -140 +Y 'e -140 +Y ^e -140 +Y :e -140 +Y `e -140 +Y - -140 +Y hy -140 +Y i -20 +Y 'i -20 +Y o -140 +Y 'o -140 +Y ^o -140 +Y :o -140 +Y `o -140 +Y /o -140 +Y ~o -140 +Y . -140 +Y ; -60 +Y u -110 +Y 'u -110 +Y ^u -110 +Y :u -110 +Y `u -110 +'Y A -110 +'Y 'A -110 +'Y ^A -110 +'Y :A -110 +'Y `A -110 +'Y oA -110 +'Y ~A -110 +'Y O -85 +'Y 'O -85 +'Y ^O -85 +'Y :O -85 +'Y `O -85 +'Y /O -85 +'Y ~O -85 +'Y a -140 +'Y 'a -140 +'Y ^a -140 +'Y :a -140 +'Y `a -140 +'Y oa -140 +'Y ~a -70 +'Y : -60 +'Y , -140 +'Y e -140 +'Y 'e -140 +'Y ^e -140 +'Y :e -140 +'Y `e -140 +'Y - -140 +'Y hy -140 +'Y i -20 +'Y 'i -20 +'Y o -140 +'Y 'o -140 +'Y ^o -140 +'Y :o -140 +'Y `o -140 +'Y /o -140 +'Y ~o -140 +'Y . -140 +'Y ; -60 +'Y u -110 +'Y 'u -110 +'Y ^u -110 +'Y :u -110 +'Y `u -110 +:Y A -110 +:Y 'A -110 +:Y ^A -110 +:Y :A -110 +:Y `A -110 +:Y oA -110 +:Y ~A -110 +:Y O -85 +:Y 'O -85 +:Y ^O -85 +:Y :O -85 +:Y `O -85 +:Y /O -85 +:Y ~O -85 +:Y a -140 +:Y 'a -140 +:Y ^a -140 +:Y :a -140 +:Y `a -140 +:Y oa -140 +:Y ~a -70 +:Y : -60 +:Y , -140 +:Y e -140 +:Y 'e -140 +:Y ^e -140 +:Y :e -140 +:Y `e -140 +:Y - -140 +:Y hy -140 +:Y i -20 +:Y 'i -20 +:Y o -140 +:Y 'o -140 +:Y ^o -140 +:Y :o -140 +:Y `o -140 +:Y /o -140 +:Y ~o -140 +:Y . -140 +:Y ; -60 +:Y u -110 +:Y 'u -110 +:Y ^u -110 +:Y :u -110 +:Y `u -110 +a v -20 +a w -20 +a y -30 +a 'y -30 +a :y -30 +'a v -20 +'a w -20 +'a y -30 +'a 'y -30 +'a :y -30 +^a v -20 +^a w -20 +^a y -30 +^a 'y -30 +^a :y -30 +:a v -20 +:a w -20 +:a y -30 +:a 'y -30 +:a :y -30 +`a v -20 +`a w -20 +`a y -30 +`a 'y -30 +`a :y -30 +oa v -20 +oa w -20 +oa y -30 +oa 'y -30 +oa :y -30 +~a v -20 +~a w -20 +~a y -30 +~a 'y -30 +~a :y -30 +b b -10 +b , -40 +b l -20 +b /l -20 +b . -40 +b u -20 +b 'u -20 +b ^u -20 +b :u -20 +b `u -20 +b v -20 +b y -20 +b 'y -20 +b :y -20 +c , -15 +c k -20 +,c , -15 +,c k -20 +: u0020 -50 +, rq -100 +, ' -100 +, cq -100 +e , -15 +e . -15 +e v -30 +e w -20 +e x -30 +e y -20 +e 'y -20 +e :y -20 +'e , -15 +'e . -15 +'e v -30 +'e w -20 +'e x -30 +'e y -20 +'e 'y -20 +'e :y -20 +^e , -15 +^e . -15 +^e v -30 +^e w -20 +^e x -30 +^e y -20 +^e 'y -20 +^e :y -20 +:e , -15 +:e . -15 +:e v -30 +:e w -20 +:e x -30 +:e y -20 +:e 'y -20 +:e :y -20 +`e , -15 +`e . -15 +`e v -30 +`e w -20 +`e x -30 +`e y -20 +`e 'y -20 +`e :y -20 +f a -30 +f 'a -30 +f ^a -30 +f :a -30 +f `a -30 +f oa -30 +f ~a -30 +f , -30 +f .i -28 +f e -30 +f 'e -30 +f ^e -30 +f :e -30 +f `e -30 +f o -30 +f 'o -30 +f ^o -30 +f :o -30 +f `o -30 +f /o -30 +f ~o -30 +f . -30 +f rq 60 +f ' 50 +f cq 50 +g r -10 +h y -30 +h 'y -30 +h :y -30 +k e -20 +k 'e -20 +k ^e -20 +k :e -20 +k `e -20 +k o -20 +k 'o -20 +k ^o -20 +k :o -20 +k `o -20 +k /o -20 +k ~o -20 +m u -10 +m 'u -10 +m ^u -10 +m :u -10 +m `u -10 +m y -15 +m 'y -15 +m :y -15 +n u -10 +n 'u -10 +n ^u -10 +n :u -10 +n `u -10 +n v -20 +n y -15 +n 'y -15 +n :y -15 +~n u -10 +~n 'u -10 +~n ^u -10 +~n :u -10 +~n `u -10 +~n v -20 +~n y -15 +~n 'y -15 +~n :y -15 +o , -40 +o . -40 +o v -15 +o w -15 +o x -30 +o y -30 +o 'y -30 +o :y -30 +'o , -40 +'o . -40 +'o v -15 +'o w -15 +'o x -30 +'o y -30 +'o 'y -30 +'o :y -30 +^o , -40 +^o . -40 +^o v -15 +^o w -15 +^o x -30 +^o y -30 +^o 'y -30 +^o :y -30 +:o , -40 +:o . -40 +:o v -15 +:o w -15 +:o x -30 +:o y -30 +:o 'y -30 +:o :y -30 +`o , -40 +`o . -40 +`o v -15 +`o w -15 +`o x -30 +`o y -30 +`o 'y -30 +`o :y -30 +/o a -55 +/o 'a -55 +/o ^a -55 +/o :a -55 +/o `a -55 +/o oa -55 +/o ~a -55 +/o b -55 +/o c -55 +/o ,c -55 +/o , -95 +/o d -55 +/o e -55 +/o 'e -55 +/o ^e -55 +/o :e -55 +/o `e -55 +/o f -55 +/o g -55 +/o h -55 +/o i -55 +/o 'i -55 +/o ^i -55 +/o :i -55 +/o `i -55 +/o j -55 +/o k -55 +/o l -55 +/o /l -55 +/o m -55 +/o n -55 +/o ~n -55 +/o o -55 +/o 'o -55 +/o ^o -55 +/o :o -55 +/o `o -55 +/o /o -55 +/o ~o -55 +/o p -55 +/o . -95 +/o q -55 +/o r -55 +/o s -55 +/o vs -55 +/o t -55 +/o u -55 +/o 'u -55 +/o ^u -55 +/o :u -55 +/o `u -55 +/o v -70 +/o w -70 +/o x -85 +/o y -70 +/o 'y -70 +/o :y -70 +/o z -55 +/o vz -55 +~o , -40 +~o . -40 +~o v -15 +~o w -15 +~o x -30 +~o y -30 +~o 'y -30 +~o :y -30 +p , -35 +p . -35 +p y -30 +p 'y -30 +p :y -30 +. rq -100 +. ' -100 +. cq -100 +. u0020 -60 +rq u0020 -40 +` ` -57 +` oq -57 +oq ` -57 +oq oq -57 +' d -50 +cq d -50 +' ' -57 +' cq -57 +cq ' -57 +cq cq -57 +' r -50 +cq r -50 +' s -50 +cq s -50 +' vs -50 +cq vs -50 +' u0020 -70 +cq u0020 -70 +r a -10 +r 'a -10 +r ^a -10 +r :a -10 +r `a -10 +r oa -10 +r ~a -10 +r : 30 +r , -50 +r i 15 +r 'i 15 +r ^i 15 +r :i 15 +r `i 15 +r k 15 +r l 15 +r /l 15 +r m 25 +r n 25 +r ~n 25 +r p 30 +r . -50 +r ; 30 +r t 40 +r u 15 +r 'u 15 +r ^u 15 +r :u 15 +r `u 15 +r v 30 +r y 30 +r 'y 30 +r :y 30 +s , -15 +s . -15 +s w -30 +vs , -15 +vs . -15 +vs w -30 +; u0020 -50 +u0020 T -50 +u0020 V -50 +u0020 W -40 +u0020 Y -90 +u0020 'Y -90 +u0020 :Y -90 +u0020 lq -30 +u0020 ` -60 +u0020 oq -60 +v a -25 +v 'a -25 +v ^a -25 +v :a -25 +v `a -25 +v oa -25 +v ~a -25 +v , -80 +v e -25 +v 'e -25 +v ^e -25 +v :e -25 +v `e -25 +v o -25 +v 'o -25 +v ^o -25 +v :o -25 +v `o -25 +v /o -25 +v ~o -25 +v . -80 +w a -15 +w 'a -15 +w ^a -15 +w :a -15 +w `a -15 +w oa -15 +w ~a -15 +w , -60 +w e -10 +w 'e -10 +w ^e -10 +w :e -10 +w `e -10 +w o -10 +w 'o -10 +w ^o -10 +w :o -10 +w `o -10 +w /o -10 +w ~o -10 +w . -60 +x e -30 +x 'e -30 +x ^e -30 +x :e -30 +x `e -30 +y a -20 +y 'a -20 +y ^a -20 +y :a -20 +y `a -20 +y oa -20 +y ~a -20 +y , -100 +y e -20 +y 'e -20 +y ^e -20 +y :e -20 +y `e -20 +y o -20 +y 'o -20 +y ^o -20 +y :o -20 +y `o -20 +y /o -20 +y ~o -20 +y . -100 +'y a -20 +'y 'a -20 +'y ^a -20 +'y :a -20 +'y `a -20 +'y oa -20 +'y ~a -20 +'y , -100 +'y e -20 +'y 'e -20 +'y ^e -20 +'y :e -20 +'y `e -20 +'y o -20 +'y 'o -20 +'y ^o -20 +'y :o -20 +'y `o -20 +'y /o -20 +'y ~o -20 +'y . -100 +:y a -20 +:y 'a -20 +:y ^a -20 +:y :a -20 +:y `a -20 +:y oa -20 +:y ~a -20 +:y , -100 +:y e -20 +:y 'e -20 +:y ^e -20 +:y :e -20 +:y `e -20 +:y o -20 +:y 'o -20 +:y ^o -20 +:y :o -20 +:y `o -20 +:y /o -20 +:y ~o -20 +:y . -100 +z e -15 +z 'e -15 +z ^e -15 +z :e -15 +z `e -15 +z o -15 +z 'o -15 +z ^o -15 +z :o -15 +z `o -15 +z /o -15 +z ~o -15 +vz e -15 +vz 'e -15 +vz ^e -15 +vz :e -15 +vz `e -15 +vz o -15 +vz 'o -15 +vz ^o -15 +vz :o -15 +vz `o -15 +vz /o -15 +vz ~o -15 + charset -ha 385,688,0,11,11 2 0 asciicircum +ha 385,688,0,12,12 2 0 asciicircum ti 479,326 0 1 asciitilde vS 547,929,19 2 2 Scaron vZ 501,929 2 3 Zcaron @@ -283,6 +1351,7 @@ vz 410,734 2 5 zcaron :Y 547,901 2 6 Ydieresis tm 820,718 2 7 trademark aq 157,718 2 8 quotesingle +Eu 456,703,19 2 9 Euro space 228 0 32 space ! 228,718 2 33 exclam " 291,718 2 34 quotedbl @@ -369,7 +1438,7 @@ f 228,728 2 102 f g 456,538,220 1 103 g h 456,718 2 104 h i 182,718 2 105 i -j 182,718,210,0,13 3 106 j +j 182,718,210,0,14 3 106 j k 410,718,0,1 2 107 k l 182,718 2 108 l m 683,538 0 109 m @@ -388,28 +1457,28 @@ y 410,523,214 1 121 y z 410,523 0 122 z lC 274,722,196 2 123 braceleft { " -ba 213,737,19 2 124 bar +ba 213,775,225 3 124 bar | " rC 274,722,196 2 125 braceright } " -a~ 273,722,0,3,3 2 126 tilde +a~ 273,722,0,4,4 2 126 tilde ~ " bq 182,106,149 0 128 quotesinglbase Fo 456,446 0 129 guillemotleft Fc 456,446 0 130 guillemotright bu 287,517 0 131 bullet -Fn 456,737,207,0,9 3 132 florin -f/ 137,703,19,136,136 2 133 fraction +Fn 456,737,207,0,10 3 132 florin +f/ 137,703,19,137,137 2 133 fraction %0 820,703,19 2 134 perthousand dg 456,718,159 2 135 dagger dd 456,718,159 2 136 daggerdbl en 456,313 0 137 endash -em 820,313 0 138 emdash +em 820,313,0,1 0 138 emdash fi 410,728 2 140 fi fl 410,728 2 141 fl .i 228,523 0 144 dotlessi ga 273,734 2 146 grave -a" 273,734,0,62 2 147 hungarumlaut +a" 273,734,0,63 2 147 hungarumlaut a. 273,706 2 148 dotaccent ab 273,731 2 149 breve ah 273,734 2 150 caron @@ -418,31 +1487,31 @@ ho 273,0,225 1 152 ogonek lq 273,725 2 153 quotedblleft rq 273,718 2 154 quotedblright oe 774,538,15 0 155 oe -/l 182,718,0,16,16 2 156 lslash +/l 182,718,0,17,17 2 156 lslash Bq 273,106,149 0 157 quotedblbase OE 820,737,19 2 158 OE -/L 456,718,0,0,16 2 159 Lslash +/L 456,718,0,0,17 2 159 Lslash r! 273,523,195 0 161 exclamdown ct 456,623,115 0 162 cent Po 456,718,16 2 163 sterling Cs 456,603 0 164 currency Ye 456,688 2 165 yen -bb 213,737,19 2 166 brokenbar +bb 213,700,150 2 166 brokenbar sc 456,737,191 2 167 section ad 273,706 2 168 dieresis -co 604,737,19,13,11 2 169 copyright +co 604,737,19,13,12 2 169 copyright Of 303,737 2 170 ordfeminine fo 273,446 0 171 guilsinglleft tno 479,390 0 172 logicalnot \- 479,289 0 173 minus -rg 604,737,19,13,11 2 174 registered +rg 604,737,19,13,12 2 174 registered a- 273,684 2 175 macron de 328,703 2 176 degree t+- 479,506 0 177 plusminus S2 273,703 2 178 twosuperior S3 273,703 2 179 threesuperior aa 273,734 2 180 acute -mc 456,523,207 1 181 mu +mc 474,523,207 1 181 mu ps 440,718,173 2 182 paragraph pc 228,315 0 183 periodcentered ac 273,0,225 1 184 cedilla @@ -466,7 +1535,7 @@ AE 820,718 2 198 AE ^E 547,929 2 202 Ecircumflex :E 547,901 2 203 Edieresis `I 228,929,0,0,11 2 204 Igrave -'I 228,929,0,11 2 205 Iacute +'I 228,929,0,12 2 205 Iacute ^I 228,929,0,6,5 2 206 Icircumflex :I 228,901 2 207 Idieresis -D 592,718 2 208 Eth @@ -498,7 +1567,7 @@ ae 729,538,15 0 230 ae ^e 456,734,15 2 234 ecircumflex :e 456,706,15 2 235 edieresis `i 228,734,0,0,11 2 236 igrave -'i 228,734,0,11 2 237 iacute +'i 228,734,0,12 2 237 iacute ^i 228,734,0,6,5 2 238 icircumflex :i 228,706 2 239 idieresis Sd 456,737,15 2 240 eth diff --git a/contrib/groff/font/devps/HR b/contrib/groff/font/devps/HR index cbf1ab80bc..b6d86a4b33 100644 --- a/contrib/groff/font/devps/HR +++ b/contrib/groff/font/devps/HR @@ -1,278 +1,1346 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Helvetica +# Version 003.001 +# FamilyName Helvetica +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 12:48:21 1999 +# Comment UniqueID 44701 +# Comment VMusage 28955 35891 + name HR internalname Helvetica spacewidth 278 encoding text.enc ligatures fi fl 0 + kernpairs -A y -40 -A w -40 -A v -40 -A u -30 -A Y -100 -A W -50 -A V -70 -A U -50 -A T -120 -A Q -30 -A O -30 -A G -30 A C -30 -B . -20 -B , -20 +A ,C -30 +A G -30 +A O -30 +A 'O -30 +A ^O -30 +A :O -30 +A `O -30 +A /O -30 +A ~O -30 +A Q -30 +A T -120 +A U -50 +A 'U -50 +A ^U -50 +A :U -50 +A `U -50 +A V -70 +A W -50 +A Y -100 +A 'Y -100 +A :Y -100 +A u -30 +A 'u -30 +A ^u -30 +A :u -30 +A `u -30 +A v -40 +A w -40 +A y -40 +A 'y -40 +A :y -40 +'A C -30 +'A ,C -30 +'A G -30 +'A O -30 +'A 'O -30 +'A ^O -30 +'A :O -30 +'A `O -30 +'A /O -30 +'A ~O -30 +'A Q -30 +'A T -120 +'A U -50 +'A 'U -50 +'A ^U -50 +'A :U -50 +'A `U -50 +'A V -70 +'A W -50 +'A Y -100 +'A 'Y -100 +'A :Y -100 +'A u -30 +'A 'u -30 +'A ^u -30 +'A :u -30 +'A `u -30 +'A v -40 +'A w -40 +'A y -40 +'A 'y -40 +'A :y -40 +^A C -30 +^A ,C -30 +^A G -30 +^A O -30 +^A 'O -30 +^A ^O -30 +^A :O -30 +^A `O -30 +^A /O -30 +^A ~O -30 +^A Q -30 +^A T -120 +^A U -50 +^A 'U -50 +^A ^U -50 +^A :U -50 +^A `U -50 +^A V -70 +^A W -50 +^A Y -100 +^A 'Y -100 +^A :Y -100 +^A u -30 +^A 'u -30 +^A ^u -30 +^A :u -30 +^A `u -30 +^A v -40 +^A w -40 +^A y -40 +^A 'y -40 +^A :y -40 +:A C -30 +:A ,C -30 +:A G -30 +:A O -30 +:A 'O -30 +:A ^O -30 +:A :O -30 +:A `O -30 +:A /O -30 +:A ~O -30 +:A Q -30 +:A T -120 +:A U -50 +:A 'U -50 +:A ^U -50 +:A :U -50 +:A `U -50 +:A V -70 +:A W -50 +:A Y -100 +:A 'Y -100 +:A :Y -100 +:A u -30 +:A 'u -30 +:A ^u -30 +:A :u -30 +:A `u -30 +:A v -40 +:A w -40 +:A y -40 +:A 'y -40 +:A :y -40 +`A C -30 +`A ,C -30 +`A G -30 +`A O -30 +`A 'O -30 +`A ^O -30 +`A :O -30 +`A `O -30 +`A /O -30 +`A ~O -30 +`A Q -30 +`A T -120 +`A U -50 +`A 'U -50 +`A ^U -50 +`A :U -50 +`A `U -50 +`A V -70 +`A W -50 +`A Y -100 +`A 'Y -100 +`A :Y -100 +`A u -30 +`A 'u -30 +`A ^u -30 +`A :u -30 +`A `u -30 +`A v -40 +`A w -40 +`A y -40 +`A 'y -40 +`A :y -40 +oA C -30 +oA ,C -30 +oA G -30 +oA O -30 +oA 'O -30 +oA ^O -30 +oA :O -30 +oA `O -30 +oA /O -30 +oA ~O -30 +oA Q -30 +oA T -120 +oA U -50 +oA 'U -50 +oA ^U -50 +oA :U -50 +oA `U -50 +oA V -70 +oA W -50 +oA Y -100 +oA 'Y -100 +oA :Y -100 +oA u -30 +oA 'u -30 +oA ^u -30 +oA :u -30 +oA `u -30 +oA v -40 +oA w -40 +oA y -40 +oA 'y -40 +oA :y -40 +~A C -30 +~A ,C -30 +~A G -30 +~A O -30 +~A 'O -30 +~A ^O -30 +~A :O -30 +~A `O -30 +~A /O -30 +~A ~O -30 +~A Q -30 +~A T -120 +~A U -50 +~A 'U -50 +~A ^U -50 +~A :U -50 +~A `U -50 +~A V -70 +~A W -50 +~A Y -100 +~A 'Y -100 +~A :Y -100 +~A u -30 +~A 'u -30 +~A ^u -30 +~A :u -30 +~A `u -30 +~A v -40 +~A w -40 +~A y -40 +~A 'y -40 +~A :y -40 B U -10 -C . -30 +B 'U -10 +B ^U -10 +B :U -10 +B `U -10 +B , -20 +B . -20 C , -30 -D . -70 -D , -70 -D Y -90 -D W -40 -D V -70 +C . -30 +,C , -30 +,C . -30 D A -40 -F r -45 -F . -150 -F o -30 -F e -30 -F , -150 -F a -50 +D 'A -40 +D ^A -40 +D :A -40 +D `A -40 +D oA -40 +D ~A -40 +D V -70 +D W -40 +D Y -90 +D 'Y -90 +D :Y -90 +D , -70 +D . -70 F A -80 -J u -20 -J . -30 -J , -30 -J a -20 +F 'A -80 +F ^A -80 +F :A -80 +F `A -80 +F oA -80 +F ~A -80 +F a -50 +F 'a -50 +F ^a -50 +F :a -50 +F `a -50 +F oa -50 +F ~a -50 +F , -150 +F e -30 +F 'e -30 +F ^e -30 +F :e -30 +F `e -30 +F o -30 +F 'o -30 +F ^o -30 +F :o -30 +F `o -30 +F /o -30 +F ~o -30 +F . -150 +F r -45 J A -20 -K y -50 -K u -30 -K o -40 -K e -40 +J 'A -20 +J ^A -20 +J :A -20 +J `A -20 +J oA -20 +J ~A -20 +J a -20 +J 'a -20 +J ^a -20 +J :a -20 +J `a -20 +J oa -20 +J ~a -20 +J , -30 +J . -30 +J u -20 +J 'u -20 +J ^u -20 +J :u -20 +J `u -20 K O -50 -L y -30 +K 'O -50 +K ^O -50 +K :O -50 +K `O -50 +K /O -50 +K ~O -50 +K e -40 +K 'e -40 +K ^e -40 +K :e -40 +K `e -40 +K o -40 +K 'o -40 +K ^o -40 +K :o -40 +K `o -40 +K /o -40 +K ~o -40 +K u -30 +K 'u -30 +K ^u -30 +K :u -30 +K `u -30 +K y -50 +K 'y -50 +K :y -50 +L T -110 +L V -110 +L W -70 +L Y -140 +L 'Y -140 +L :Y -140 +L rq -140 L ' -160 L cq -160 -L rq -140 -L Y -140 -L W -70 -L V -110 -L T -110 -O . -40 -O , -40 -O Y -70 -O X -60 -O W -30 -O V -50 -O T -40 +L y -30 +L 'y -30 +L :y -30 +/L T -110 +/L V -110 +/L W -70 +/L Y -140 +/L 'Y -140 +/L :Y -140 +/L rq -140 +/L ' -160 +/L cq -160 +/L y -30 +/L 'y -30 +/L :y -30 O A -20 -P . -180 -P o -50 -P e -50 -P , -180 -P a -40 +O 'A -20 +O ^A -20 +O :A -20 +O `A -20 +O oA -20 +O ~A -20 +O T -40 +O V -50 +O W -30 +O X -60 +O Y -70 +O 'Y -70 +O :Y -70 +O , -40 +O . -40 +'O A -20 +'O 'A -20 +'O ^A -20 +'O :A -20 +'O `A -20 +'O oA -20 +'O ~A -20 +'O T -40 +'O V -50 +'O W -30 +'O X -60 +'O Y -70 +'O 'Y -70 +'O :Y -70 +'O , -40 +'O . -40 +^O A -20 +^O 'A -20 +^O ^A -20 +^O :A -20 +^O `A -20 +^O oA -20 +^O ~A -20 +^O T -40 +^O V -50 +^O W -30 +^O X -60 +^O Y -70 +^O 'Y -70 +^O :Y -70 +^O , -40 +^O . -40 +:O A -20 +:O 'A -20 +:O ^A -20 +:O :A -20 +:O `A -20 +:O oA -20 +:O ~A -20 +:O T -40 +:O V -50 +:O W -30 +:O X -60 +:O Y -70 +:O 'Y -70 +:O :Y -70 +:O , -40 +:O . -40 +`O A -20 +`O 'A -20 +`O ^A -20 +`O :A -20 +`O `A -20 +`O oA -20 +`O ~A -20 +`O T -40 +`O V -50 +`O W -30 +`O X -60 +`O Y -70 +`O 'Y -70 +`O :Y -70 +`O , -40 +`O . -40 +/O A -20 +/O 'A -20 +/O ^A -20 +/O :A -20 +/O `A -20 +/O oA -20 +/O ~A -20 +/O T -40 +/O V -50 +/O W -30 +/O X -60 +/O Y -70 +/O 'Y -70 +/O :Y -70 +/O , -40 +/O . -40 +~O A -20 +~O 'A -20 +~O ^A -20 +~O :A -20 +~O `A -20 +~O oA -20 +~O ~A -20 +~O T -40 +~O V -50 +~O W -30 +~O X -60 +~O Y -70 +~O 'Y -70 +~O :Y -70 +~O , -40 +~O . -40 P A -120 +P 'A -120 +P ^A -120 +P :A -120 +P `A -120 +P oA -120 +P ~A -120 +P a -40 +P 'a -40 +P ^a -40 +P :a -40 +P `a -40 +P oa -40 +P ~a -40 +P , -180 +P e -50 +P 'e -50 +P ^e -50 +P :e -50 +P `e -50 +P o -50 +P 'o -50 +P ^o -50 +P :o -50 +P `o -50 +P /o -50 +P ~o -50 +P . -180 Q U -10 -R Y -50 -R W -30 -R V -50 -R U -40 -R T -30 +Q 'U -10 +Q ^U -10 +Q :U -10 +Q `U -10 R O -20 -S . -20 +R 'O -20 +R ^O -20 +R :O -20 +R `O -20 +R /O -20 +R ~O -20 +R T -30 +R U -40 +R 'U -40 +R ^U -40 +R :U -40 +R `U -40 +R V -50 +R W -30 +R Y -50 +R 'Y -50 +R :Y -50 S , -20 -T y -120 -T w -120 -T u -120 -T ; -20 -T r -120 -T . -120 -T o -120 +S . -20 +vS , -20 +vS . -20 +T A -120 +T 'A -120 +T ^A -120 +T :A -120 +T `A -120 +T oA -120 +T ~A -120 +T O -40 +T 'O -40 +T ^O -40 +T :O -40 +T `O -40 +T /O -40 +T ~O -40 +T a -120 +T 'a -120 +T ^a -120 +T :a -120 +T `a -120 +T oa -120 +T ~a -60 +T : -20 +T , -120 +T e -120 +T 'e -120 +T ^e -120 +T :e -120 +T `e -60 T - -140 T hy -140 -T e -120 -T , -120 -T : -20 -T a -120 -T O -40 -T A -120 -U . -40 -U , -40 +T o -120 +T 'o -120 +T ^o -120 +T :o -120 +T `o -120 +T /o -120 +T ~o -60 +T . -120 +T r -120 +T ; -20 +T u -120 +T 'u -120 +T ^u -120 +T :u -120 +T `u -120 +T w -120 +T y -120 +T 'y -120 +T :y -60 U A -40 -V u -70 -V ; -40 -V . -125 -V o -80 +U 'A -40 +U ^A -40 +U :A -40 +U `A -40 +U oA -40 +U ~A -40 +U , -40 +U . -40 +'U A -40 +'U 'A -40 +'U ^A -40 +'U :A -40 +'U `A -40 +'U oA -40 +'U ~A -40 +'U , -40 +'U . -40 +^U A -40 +^U 'A -40 +^U ^A -40 +^U :A -40 +^U `A -40 +^U oA -40 +^U ~A -40 +^U , -40 +^U . -40 +:U A -40 +:U 'A -40 +:U ^A -40 +:U :A -40 +:U `A -40 +:U oA -40 +:U ~A -40 +:U , -40 +:U . -40 +`U A -40 +`U 'A -40 +`U ^A -40 +`U :A -40 +`U `A -40 +`U oA -40 +`U ~A -40 +`U , -40 +`U . -40 +V A -80 +V 'A -80 +V ^A -80 +V :A -80 +V `A -80 +V oA -80 +V ~A -80 +V G -40 +V O -40 +V 'O -40 +V ^O -40 +V :O -40 +V `O -40 +V /O -40 +V ~O -40 +V a -70 +V 'a -70 +V ^a -70 +V :a -70 +V `a -70 +V oa -70 +V ~a -70 +V : -40 +V , -125 +V e -80 +V 'e -80 +V ^e -80 +V :e -80 +V `e -80 V - -80 V hy -80 -V e -80 -V , -125 -V : -40 -V a -70 -V O -40 -V G -40 -V A -80 -W y -20 -W u -30 -W . -80 -W o -30 +V o -80 +V 'o -80 +V ^o -80 +V :o -80 +V `o -80 +V /o -80 +V ~o -80 +V . -125 +V ; -40 +V u -70 +V 'u -70 +V ^u -70 +V :u -70 +V `u -70 +W A -50 +W 'A -50 +W ^A -50 +W :A -50 +W `A -50 +W oA -50 +W ~A -50 +W O -20 +W 'O -20 +W ^O -20 +W :O -20 +W `O -20 +W /O -20 +W ~O -20 +W a -40 +W 'a -40 +W ^a -40 +W :a -40 +W `a -40 +W oa -40 +W ~a -40 +W , -80 +W e -30 +W 'e -30 +W ^e -30 +W :e -30 +W `e -30 W - -40 W hy -40 -W e -30 -W , -80 -W a -40 -W O -20 -W A -50 -Y u -110 -Y ; -60 -Y . -140 -Y o -140 -Y i -20 +W o -30 +W 'o -30 +W ^o -30 +W :o -30 +W `o -30 +W /o -30 +W ~o -30 +W . -80 +W u -30 +W 'u -30 +W ^u -30 +W :u -30 +W `u -30 +W y -20 +W 'y -20 +W :y -20 +Y A -110 +Y 'A -110 +Y ^A -110 +Y :A -110 +Y `A -110 +Y oA -110 +Y ~A -110 +Y O -85 +Y 'O -85 +Y ^O -85 +Y :O -85 +Y `O -85 +Y /O -85 +Y ~O -85 +Y a -140 +Y 'a -140 +Y ^a -140 +Y :a -140 +Y `a -140 +Y oa -140 +Y ~a -140 +Y : -60 +Y , -140 +Y e -140 +Y 'e -140 +Y ^e -140 +Y :e -140 +Y `e -140 Y - -140 Y hy -140 -Y e -140 -Y , -140 -Y : -60 -Y a -140 -Y O -85 -Y A -110 -a y -30 -a w -20 +Y i -20 +Y 'i -20 +Y o -140 +Y 'o -140 +Y ^o -140 +Y :o -140 +Y `o -140 +Y /o -140 +Y ~o -140 +Y . -140 +Y ; -60 +Y u -110 +Y 'u -110 +Y ^u -110 +Y :u -110 +Y `u -110 +'Y A -110 +'Y 'A -110 +'Y ^A -110 +'Y :A -110 +'Y `A -110 +'Y oA -110 +'Y ~A -110 +'Y O -85 +'Y 'O -85 +'Y ^O -85 +'Y :O -85 +'Y `O -85 +'Y /O -85 +'Y ~O -85 +'Y a -140 +'Y 'a -140 +'Y ^a -140 +'Y :a -140 +'Y `a -140 +'Y oa -140 +'Y ~a -70 +'Y : -60 +'Y , -140 +'Y e -140 +'Y 'e -140 +'Y ^e -140 +'Y :e -140 +'Y `e -140 +'Y - -140 +'Y hy -140 +'Y i -20 +'Y 'i -20 +'Y o -140 +'Y 'o -140 +'Y ^o -140 +'Y :o -140 +'Y `o -140 +'Y /o -140 +'Y ~o -140 +'Y . -140 +'Y ; -60 +'Y u -110 +'Y 'u -110 +'Y ^u -110 +'Y :u -110 +'Y `u -110 +:Y A -110 +:Y 'A -110 +:Y ^A -110 +:Y :A -110 +:Y `A -110 +:Y oA -110 +:Y ~A -110 +:Y O -85 +:Y 'O -85 +:Y ^O -85 +:Y :O -85 +:Y `O -85 +:Y /O -85 +:Y ~O -85 +:Y a -140 +:Y 'a -140 +:Y ^a -140 +:Y :a -140 +:Y `a -140 +:Y oa -140 +:Y ~a -70 +:Y : -60 +:Y , -140 +:Y e -140 +:Y 'e -140 +:Y ^e -140 +:Y :e -140 +:Y `e -140 +:Y - -140 +:Y hy -140 +:Y i -20 +:Y 'i -20 +:Y o -140 +:Y 'o -140 +:Y ^o -140 +:Y :o -140 +:Y `o -140 +:Y /o -140 +:Y ~o -140 +:Y . -140 +:Y ; -60 +:Y u -110 +:Y 'u -110 +:Y ^u -110 +:Y :u -110 +:Y `u -110 a v -20 -b y -20 -b v -20 -b u -20 -b . -40 -b l -20 -b , -40 +a w -20 +a y -30 +a 'y -30 +a :y -30 +'a v -20 +'a w -20 +'a y -30 +'a 'y -30 +'a :y -30 +^a v -20 +^a w -20 +^a y -30 +^a 'y -30 +^a :y -30 +:a v -20 +:a w -20 +:a y -30 +:a 'y -30 +:a :y -30 +`a v -20 +`a w -20 +`a y -30 +`a 'y -30 +`a :y -30 +oa v -20 +oa w -20 +oa y -30 +oa 'y -30 +oa :y -30 +~a v -20 +~a w -20 +~a y -30 +~a 'y -30 +~a :y -30 b b -10 -c k -20 +b , -40 +b l -20 +b /l -20 +b . -40 +b u -20 +b 'u -20 +b ^u -20 +b :u -20 +b `u -20 +b v -20 +b y -20 +b 'y -20 +b :y -20 c , -15 +c k -20 +,c , -15 +,c k -20 : u0020 -50 +, rq -100 , ' -100 , cq -100 -, rq -100 -e y -20 -e x -30 -e w -20 -e v -30 -e . -15 e , -15 +e . -15 +e v -30 +e w -20 +e x -30 +e y -20 +e 'y -20 +e :y -20 +'e , -15 +'e . -15 +'e v -30 +'e w -20 +'e x -30 +'e y -20 +'e 'y -20 +'e :y -20 +^e , -15 +^e . -15 +^e v -30 +^e w -20 +^e x -30 +^e y -20 +^e 'y -20 +^e :y -20 +:e , -15 +:e . -15 +:e v -30 +:e w -20 +:e x -30 +:e y -20 +:e 'y -20 +:e :y -20 +`e , -15 +`e . -15 +`e v -30 +`e w -20 +`e x -30 +`e y -20 +`e 'y -20 +`e :y -20 +f a -30 +f 'a -30 +f ^a -30 +f :a -30 +f `a -30 +f oa -30 +f ~a -30 +f , -30 +f .i -28 +f e -30 +f 'e -30 +f ^e -30 +f :e -30 +f `e -30 +f o -30 +f 'o -30 +f ^o -30 +f :o -30 +f `o -30 +f /o -30 +f ~o -30 +f . -30 +f rq 60 f ' 50 f cq 50 -f rq 60 -f . -30 -f o -30 -f e -30 -f .i -28 -f , -30 -f a -30 g r -10 h y -30 -k o -20 +h 'y -30 +h :y -30 k e -20 -m y -15 +k 'e -20 +k ^e -20 +k :e -20 +k `e -20 +k o -20 +k 'o -20 +k ^o -20 +k :o -20 +k `o -20 +k /o -20 +k ~o -20 m u -10 -n y -15 -n v -20 +m 'u -10 +m ^u -10 +m :u -10 +m `u -10 +m y -15 +m 'y -15 +m :y -15 n u -10 -o y -30 -o x -30 -o w -15 -o v -15 -o . -40 +n 'u -10 +n ^u -10 +n :u -10 +n `u -10 +n v -20 +n y -15 +n 'y -15 +n :y -15 +~n u -10 +~n 'u -10 +~n ^u -10 +~n :u -10 +~n `u -10 +~n v -20 +~n y -15 +~n 'y -15 +~n :y -15 o , -40 -/o z -55 -/o y -70 -/o x -85 -/o w -70 -/o v -70 -/o u -55 -/o t -55 -/o s -55 -/o r -55 -/o q -55 -/o . -95 -/o p -55 -/o o -55 -/o n -55 -/o m -55 -/o l -55 -/o k -55 -/o j -55 -/o i -55 -/o h -55 -/o g -55 -/o f -55 -/o e -55 -/o d -55 -/o , -95 -/o c -55 -/o b -55 +o . -40 +o v -15 +o w -15 +o x -30 +o y -30 +o 'y -30 +o :y -30 +'o , -40 +'o . -40 +'o v -15 +'o w -15 +'o x -30 +'o y -30 +'o 'y -30 +'o :y -30 +^o , -40 +^o . -40 +^o v -15 +^o w -15 +^o x -30 +^o y -30 +^o 'y -30 +^o :y -30 +:o , -40 +:o . -40 +:o v -15 +:o w -15 +:o x -30 +:o y -30 +:o 'y -30 +:o :y -30 +`o , -40 +`o . -40 +`o v -15 +`o w -15 +`o x -30 +`o y -30 +`o 'y -30 +`o :y -30 /o a -55 -p y -30 -p . -35 +/o 'a -55 +/o ^a -55 +/o :a -55 +/o `a -55 +/o oa -55 +/o ~a -55 +/o b -55 +/o c -55 +/o ,c -55 +/o , -95 +/o d -55 +/o e -55 +/o 'e -55 +/o ^e -55 +/o :e -55 +/o `e -55 +/o f -55 +/o g -55 +/o h -55 +/o i -55 +/o 'i -55 +/o ^i -55 +/o :i -55 +/o `i -55 +/o j -55 +/o k -55 +/o l -55 +/o /l -55 +/o m -55 +/o n -55 +/o ~n -55 +/o o -55 +/o 'o -55 +/o ^o -55 +/o :o -55 +/o `o -55 +/o /o -55 +/o ~o -55 +/o p -55 +/o . -95 +/o q -55 +/o r -55 +/o s -55 +/o vs -55 +/o t -55 +/o u -55 +/o 'u -55 +/o ^u -55 +/o :u -55 +/o `u -55 +/o v -70 +/o w -70 +/o x -85 +/o y -70 +/o 'y -70 +/o :y -70 +/o z -55 +/o vz -55 +~o , -40 +~o . -40 +~o v -15 +~o w -15 +~o x -30 +~o y -30 +~o 'y -30 +~o :y -30 p , -35 -. u0020 -60 +p . -35 +p y -30 +p 'y -30 +p :y -30 +. rq -100 . ' -100 . cq -100 -. rq -100 +. u0020 -60 rq u0020 -40 ` ` -57 ` oq -57 oq ` -57 oq oq -57 -' u0020 -70 -cq u0020 -70 -' s -50 -cq s -50 -' r -50 -cq r -50 +' d -50 +cq d -50 ' ' -57 ' cq -57 cq ' -57 cq cq -57 -' d -50 -cq d -50 -r y 30 -r v 30 -r u 15 -r t 40 -r ; 30 -r . -50 -r p 30 -r n 25 -r m 25 -r l 15 -r k 15 -r i 15 -r , -50 -r : 30 +' r -50 +cq r -50 +' s -50 +cq s -50 +' vs -50 +cq vs -50 +' u0020 -70 +cq u0020 -70 r a -10 -s w -30 -s . -15 +r 'a -10 +r ^a -10 +r :a -10 +r `a -10 +r oa -10 +r ~a -10 +r : 30 +r , -50 +r i 15 +r 'i 15 +r ^i 15 +r :i 15 +r `i 15 +r k 15 +r l 15 +r /l 15 +r m 25 +r n 25 +r ~n 25 +r p 30 +r . -50 +r ; 30 +r t 40 +r u 15 +r 'u 15 +r ^u 15 +r :u 15 +r `u 15 +r v 30 +r y 30 +r 'y 30 +r :y 30 s , -15 +s . -15 +s w -30 +vs , -15 +vs . -15 +vs w -30 ; u0020 -50 +u0020 T -50 +u0020 V -50 +u0020 W -40 +u0020 Y -90 +u0020 'Y -90 +u0020 :Y -90 +u0020 lq -30 u0020 ` -60 u0020 oq -60 -u0020 lq -30 -u0020 Y -90 -u0020 W -40 -u0020 V -50 -u0020 T -50 -v . -80 -v o -25 -v e -25 -v , -80 v a -25 -w . -60 -w o -10 -w e -10 -w , -60 +v 'a -25 +v ^a -25 +v :a -25 +v `a -25 +v oa -25 +v ~a -25 +v , -80 +v e -25 +v 'e -25 +v ^e -25 +v :e -25 +v `e -25 +v o -25 +v 'o -25 +v ^o -25 +v :o -25 +v `o -25 +v /o -25 +v ~o -25 +v . -80 w a -15 +w 'a -15 +w ^a -15 +w :a -15 +w `a -15 +w oa -15 +w ~a -15 +w , -60 +w e -10 +w 'e -10 +w ^e -10 +w :e -10 +w `e -10 +w o -10 +w 'o -10 +w ^o -10 +w :o -10 +w `o -10 +w /o -10 +w ~o -10 +w . -60 x e -30 -y . -100 -y o -20 -y e -20 -y , -100 +x 'e -30 +x ^e -30 +x :e -30 +x `e -30 y a -20 -z o -15 +y 'a -20 +y ^a -20 +y :a -20 +y `a -20 +y oa -20 +y ~a -20 +y , -100 +y e -20 +y 'e -20 +y ^e -20 +y :e -20 +y `e -20 +y o -20 +y 'o -20 +y ^o -20 +y :o -20 +y `o -20 +y /o -20 +y ~o -20 +y . -100 +'y a -20 +'y 'a -20 +'y ^a -20 +'y :a -20 +'y `a -20 +'y oa -20 +'y ~a -20 +'y , -100 +'y e -20 +'y 'e -20 +'y ^e -20 +'y :e -20 +'y `e -20 +'y o -20 +'y 'o -20 +'y ^o -20 +'y :o -20 +'y `o -20 +'y /o -20 +'y ~o -20 +'y . -100 +:y a -20 +:y 'a -20 +:y ^a -20 +:y :a -20 +:y `a -20 +:y oa -20 +:y ~a -20 +:y , -100 +:y e -20 +:y 'e -20 +:y ^e -20 +:y :e -20 +:y `e -20 +:y o -20 +:y 'o -20 +:y ^o -20 +:y :o -20 +:y `o -20 +:y /o -20 +:y ~o -20 +:y . -100 z e -15 +z 'e -15 +z ^e -15 +z :e -15 +z `e -15 +z o -15 +z 'o -15 +z ^o -15 +z :o -15 +z `o -15 +z /o -15 +z ~o -15 +vz e -15 +vz 'e -15 +vz ^e -15 +vz :e -15 +vz `e -15 +vz o -15 +vz 'o -15 +vz ^o -15 +vz :o -15 +vz `o -15 +vz /o -15 +vz ~o -15 + charset ha 469,688,0,14,14 2 0 asciicircum ti 584,326 0 1 asciitilde @@ -283,6 +1351,7 @@ vz 500,734 2 5 zcaron :Y 667,901 2 6 Ydieresis tm 1000,718 2 7 trademark aq 191,718 2 8 quotesingle +Eu 556,703,19 2 9 Euro space 278 0 32 space ! 278,718 2 33 exclam " 355,718 2 34 quotedbl @@ -388,7 +1457,7 @@ y 500,523,214 1 121 y z 500,523 0 122 z lC 334,722,196 2 123 braceleft { " -ba 260,737,19 2 124 bar +ba 260,775,225 3 124 bar | " rC 334,722,196 2 125 braceright } " @@ -427,7 +1496,7 @@ ct 556,623,115 0 162 cent Po 556,718,16 2 163 sterling Cs 556,603 0 164 currency Ye 556,688 2 165 yen -bb 260,737,19 2 166 brokenbar +bb 260,700,150 2 166 brokenbar sc 556,737,191 2 167 section ad 333,706 2 168 dieresis co 737,737,19,15,14 2 169 copyright @@ -442,7 +1511,7 @@ t+- 584,506 0 177 plusminus S2 333,703 2 178 twosuperior S3 333,703 2 179 threesuperior aa 333,734 2 180 acute -mc 556,523,207 1 181 mu +mc 578,523,207 1 181 mu ps 537,718,173 2 182 paragraph pc 278,315 0 183 periodcentered ac 333,0,225 1 184 cedilla diff --git a/contrib/groff/font/devps/NB b/contrib/groff/font/devps/NB index bc81dd0131..529a41fe6f 100644 --- a/contrib/groff/font/devps/NB +++ b/contrib/groff/font/devps/NB @@ -1,150 +1,682 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName New Century Schoolbook Bold +# Version 003.001 +# FamilyName New Century Schoolbook +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1988, 1991, 1992, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Copyright (c) 1985, 1987, 1988, 1991, 1992, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 13:51:41 1999 +# Comment UniqueID 44730 +# Comment VMusage 34691 41627 + name NB internalname NewCenturySchlbk-Bold spacewidth 287 encoding text.enc ligatures fi fl 0 + kernpairs -A y -18 -A w -18 -A v -18 +A T -55 +A U -18 +A 'U -18 +A ^U -18 +A :U -18 +A `U -18 +A V -74 +A W -74 +A Y -91 +A 'Y -91 +A :Y -91 +A rq -74 A ' -74 A cq -74 -A rq -74 -A Y -91 -A W -74 -A V -74 -A U -18 -A T -55 -C . -18 +A v -18 +A w -18 +A y -18 +A 'y -18 +A :y -18 +'A T -55 +'A U -18 +'A 'U -18 +'A ^U -18 +'A :U -18 +'A `U -18 +'A V -74 +'A W -74 +'A Y -91 +'A 'Y -91 +'A :Y -91 +'A rq -74 +'A ' -74 +'A cq -74 +'A v -18 +'A w -18 +'A y -18 +'A 'y -18 +'A :y -18 +^A T -55 +^A U -18 +^A 'U -18 +^A ^U -18 +^A :U -18 +^A `U -18 +^A V -74 +^A W -74 +^A Y -91 +^A 'Y -91 +^A :Y -91 +^A rq -74 +^A ' -74 +^A cq -74 +^A v -18 +^A w -18 +^A y -18 +^A 'y -18 +^A :y -18 +:A T -55 +:A U -18 +:A 'U -18 +:A ^U -18 +:A :U -18 +:A `U -18 +:A V -74 +:A W -74 +:A Y -91 +:A 'Y -91 +:A :Y -91 +:A rq -74 +:A ' -74 +:A cq -74 +:A v -18 +:A w -18 +:A y -18 +:A 'y -18 +:A :y -18 +`A T -55 +`A U -18 +`A 'U -18 +`A ^U -18 +`A :U -18 +`A `U -18 +`A V -74 +`A W -74 +`A Y -91 +`A 'Y -91 +`A :Y -91 +`A rq -74 +`A ' -74 +`A cq -74 +`A v -18 +`A w -18 +`A y -18 +`A 'y -18 +`A :y -18 +oA T -55 +oA U -18 +oA 'U -18 +oA ^U -18 +oA :U -18 +oA `U -18 +oA V -74 +oA W -74 +oA Y -91 +oA 'Y -91 +oA :Y -91 +oA rq -74 +oA ' -74 +oA cq -74 +oA v -18 +oA w -18 +oA y -18 +oA 'y -18 +oA :y -18 +~A T -55 +~A U -18 +~A 'U -18 +~A ^U -18 +~A :U -18 +~A `U -18 +~A V -74 +~A W -74 +~A Y -91 +~A 'Y -91 +~A :Y -91 +~A rq -74 +~A ' -74 +~A cq -74 +~A v -18 +~A w -18 +~A y -18 +~A 'y -18 +~A :y -18 C , -18 -D . -25 +C . -18 +,C , -18 +,C . -18 D , -25 -F r -18 -F . -125 -F o -55 -F i -18 -F e -55 -F , -125 +D . -25 F a -74 -J u -18 -J . -55 -J o -18 -J e -18 -J , -55 -J a -18 +F 'a -74 +F ^a -74 +F :a -74 +F `a -74 +F oa -74 +F ~a -74 +F , -125 +F e -55 +F 'e -55 +F ^e -55 +F :e -55 +F `e -55 +F i -18 +F 'i -18 +F ^i -18 +F :i -18 +F `i -18 +F o -55 +F 'o -55 +F ^o -55 +F :o -55 +F `o -55 +F /o -55 +F ~o -55 +F . -125 +F r -18 J A -18 -K y -25 +J 'A -18 +J ^A -18 +J :A -18 +J `A -18 +J oA -18 +J ~A -18 +J a -18 +J 'a -18 +J ^a -18 +J :a -18 +J `a -18 +J oa -18 +J ~a -18 +J , -55 +J e -18 +J 'e -18 +J ^e -18 +J :e -18 +J `e -18 +J o -18 +J 'o -18 +J ^o -18 +J :o -18 +J `o -18 +J /o -18 +J ~o -18 +J . -55 +J u -18 +J 'u -18 +J ^u -18 +J :u -18 +J `u -18 K u -18 -L y -25 +K 'u -18 +K ^u -18 +K :u -18 +K `u -18 +K y -25 +K 'y -25 +K :y -25 +L T -100 +L V -100 +L W -74 +L Y -74 +L 'Y -74 +L :Y -74 +L rq -100 L ' -100 L cq -100 -L rq -100 -L Y -74 -L W -74 -L V -100 -L T -100 -N . -18 +L y -25 +L 'y -25 +L :y -25 +/L T -100 +/L V -100 +/L W -74 +/L Y -74 +/L 'Y -74 +/L :Y -74 +/L rq -100 +/L ' -100 +/L cq -100 +/L y -25 +/L 'y -25 +/L :y -25 N , -18 -O . -25 -O , -25 +N . -18 +~N , -18 +~N . -18 O T 10 -P . -150 -P o -55 -P e -55 -P , -150 -P a -55 +O , -25 +O . -25 +'O T 10 +'O , -25 +'O . -25 +^O T 10 +^O , -25 +^O . -25 +:O T 10 +:O , -25 +:O . -25 +`O T 10 +`O , -25 +`O . -25 +/O T 10 +/O , -25 +/O . -25 +~O T 10 +~O , -25 +~O . -25 P A -74 -S . -18 +P 'A -74 +P ^A -74 +P :A -74 +P `A -74 +P oA -74 +P ~A -74 +P a -55 +P 'a -55 +P ^a -55 +P :a -55 +P `a -55 +P oa -55 +P ~a -55 +P , -150 +P e -55 +P 'e -55 +P ^e -55 +P :e -55 +P `e -55 +P o -55 +P 'o -55 +P ^o -55 +P :o -55 +P `o -55 +P /o -55 +P ~o -55 +P . -150 S , -18 -T u -18 -T r -18 -T . -100 -T o -74 -T i -18 +S . -18 +vS , -18 +vS . -18 +T A -55 +T 'A -55 +T ^A -55 +T :A -55 +T `A -55 +T oA -55 +T ~A -55 +T O 10 +T 'O 10 +T ^O 10 +T :O 10 +T `O 10 +T /O 10 +T ~O 10 +T a -74 +T 'a -74 +T ^a -74 +T :a -74 +T `a -74 +T oa -74 +T ~a -74 +T , -100 +T e -74 +T 'e -74 +T ^e -74 +T :e -74 +T `e -74 T - -125 T hy -125 -T e -74 -T , -100 -T a -74 -T O 10 -T A -55 -U . -25 -U , -25 +T i -18 +T 'i -18 +T ^i -18 +T :i -18 +T `i -18 +T o -74 +T 'o -74 +T ^o -74 +T :o -74 +T `o -74 +T /o -74 +T ~o -74 +T . -100 +T r -18 +T u -18 +T 'u -18 +T ^u -18 +T :u -18 +T `u -18 U A -18 -V u -55 -V ; -37 -V . -125 -V o -74 -V i -18 +U 'A -18 +U ^A -18 +U :A -18 +U `A -18 +U oA -18 +U ~A -18 +U , -25 +U . -25 +'U A -18 +'U 'A -18 +'U ^A -18 +'U :A -18 +'U `A -18 +'U oA -18 +'U ~A -18 +'U , -25 +'U . -25 +^U A -18 +^U 'A -18 +^U ^A -18 +^U :A -18 +^U `A -18 +^U oA -18 +^U ~A -18 +^U , -25 +^U . -25 +:U A -18 +:U 'A -18 +:U ^A -18 +:U :A -18 +:U `A -18 +:U oA -18 +:U ~A -18 +:U , -25 +:U . -25 +`U A -18 +`U 'A -18 +`U ^A -18 +`U :A -18 +`U `A -18 +`U oA -18 +`U ~A -18 +`U , -25 +`U . -25 +V A -74 +V 'A -74 +V ^A -74 +V :A -74 +V `A -74 +V oA -74 +V ~A -74 +V a -74 +V 'a -74 +V ^a -74 +V :a -74 +V `a -74 +V oa -74 +V ~a -74 +V : -37 +V , -125 +V e -74 +V 'e -74 +V ^e -74 +V :e -74 +V `e -74 V - -100 V hy -100 -V e -74 -V , -125 -V : -37 -V a -74 -V A -74 -W y -25 -W u -37 -W ; -55 -W . -100 -W o -74 -W i -18 +V i -18 +V 'i -18 +V ^i -18 +V :i -18 +V `i -18 +V o -74 +V 'o -74 +V ^o -74 +V :o -74 +V `o -74 +V /o -74 +V ~o -74 +V . -125 +V ; -37 +V u -55 +V 'u -55 +V ^u -55 +V :u -55 +V `u -55 +W A -74 +W 'A -74 +W ^A -74 +W :A -74 +W `A -74 +W oA -74 +W ~A -74 +W a -74 +W 'a -74 +W ^a -74 +W :a -74 +W `a -74 +W oa -74 +W ~a -74 +W : -55 +W , -100 +W e -74 +W 'e -74 +W ^e -74 +W :e -74 +W `e -74 W - -100 W hy -100 -W e -74 -W , -100 -W : -55 -W a -74 -W A -74 -Y u -55 -Y ; -25 -Y . -100 -Y o -100 -Y i -18 +W i -18 +W 'i -18 +W ^i -18 +W :i -18 +W `i -18 +W o -74 +W 'o -74 +W ^o -74 +W :o -74 +W `o -74 +W /o -74 +W ~o -74 +W . -100 +W ; -55 +W u -37 +W 'u -37 +W ^u -37 +W :u -37 +W `u -37 +W y -25 +W 'y -25 +W :y -25 +Y A -91 +Y 'A -91 +Y ^A -91 +Y :A -91 +Y `A -91 +Y oA -91 +Y ~A -91 +Y a -100 +Y 'a -100 +Y ^a -100 +Y :a -100 +Y `a -100 +Y oa -100 +Y ~a -100 +Y : -25 +Y , -100 +Y e -100 +Y 'e -100 +Y ^e -100 +Y :e -40 +Y `e -40 Y - -125 Y hy -125 -Y e -100 -Y , -100 -Y : -25 -Y a -100 -Y A -91 +Y i -18 +Y 'i -18 +Y ^i -18 +Y o -100 +Y 'o -100 +Y ^o -100 +Y :o -40 +Y `o -40 +Y /o -100 +Y ~o -100 +Y . -100 +Y ; -25 +Y u -55 +Y 'u -55 +Y ^u -55 +Y :u -55 +Y `u -55 +'Y A -91 +'Y 'A -91 +'Y ^A -91 +'Y :A -91 +'Y `A -91 +'Y oA -91 +'Y ~A -91 +'Y a -100 +'Y 'a -100 +'Y ^a -100 +'Y :a -100 +'Y `a -100 +'Y oa -100 +'Y ~a -100 +'Y : -25 +'Y , -100 +'Y e -100 +'Y 'e -100 +'Y ^e -100 +'Y :e -40 +'Y `e -40 +'Y - -125 +'Y hy -125 +'Y i -18 +'Y 'i -18 +'Y ^i -18 +'Y o -100 +'Y 'o -100 +'Y ^o -100 +'Y :o -40 +'Y `o -40 +'Y /o -100 +'Y ~o -100 +'Y . -100 +'Y ; -25 +'Y u -55 +'Y 'u -55 +'Y ^u -55 +'Y :u -55 +'Y `u -55 +:Y A -91 +:Y 'A -91 +:Y ^A -91 +:Y :A -91 +:Y `A -91 +:Y oA -91 +:Y ~A -91 +:Y a -100 +:Y 'a -100 +:Y ^a -100 +:Y :a -100 +:Y `a -100 +:Y oa -100 +:Y ~a -100 +:Y : -25 +:Y , -100 +:Y e -100 +:Y 'e -100 +:Y ^e -100 +:Y :e -40 +:Y `e -40 +:Y - -125 +:Y hy -125 +:Y i -18 +:Y 'i -18 +:Y ^i -18 +:Y o -100 +:Y 'o -100 +:Y ^o -100 +:Y :o -40 +:Y `o -40 +:Y /o -100 +:Y ~o -100 +:Y . -100 +:Y ; -25 +:Y u -55 +:Y 'u -55 +:Y ^u -55 +:Y :u -55 +:Y `u -55 : u0020 -18 -, u0020 -18 +, rq -18 , ' -18 , cq -18 -, rq -18 +, u0020 -18 +f rq 75 f ' 75 f cq 75 -f rq 75 -. u0020 -18 +. rq -18 . ' -18 . cq -18 -. rq -18 +. u0020 -18 lq A -74 +lq 'A -74 +lq ^A -74 +lq :A -74 +lq `A -74 +lq oA -74 +lq ~A -74 rq u0020 -18 ` A -74 oq A -74 -' s -25 -cq s -25 +` 'A -74 +oq 'A -74 +` ^A -74 +oq ^A -74 +` :A -74 +oq :A -74 +` `A -74 +oq `A -74 +` oA -74 +oq oA -74 +` ~A -74 +oq ~A -74 ' d -25 cq d -25 -r . -74 +' s -25 +cq s -25 +' vs -25 +cq vs -25 r , -74 +r . -74 ; u0020 -18 +u0020 A -18 +u0020 'A -18 +u0020 ^A -18 +u0020 :A -18 +u0020 `A -18 +u0020 oA -18 +u0020 ~A -18 +u0020 T -18 +u0020 V -18 +u0020 W -18 +u0020 Y -18 +u0020 'Y -18 +u0020 :Y -18 +u0020 lq -18 u0020 ` -18 u0020 oq -18 -u0020 lq -18 -u0020 Y -18 -u0020 W -18 -u0020 V -18 -u0020 T -18 -u0020 A -18 -v . -100 v , -100 -w . -100 +v . -100 w , -100 -y . -100 +w . -100 y , -100 +y . -100 +'y , -100 +'y . -100 +:y , -100 +:y . -100 + charset ha 606,690 2 0 asciicircum ti 606,346 0 1 asciitilde @@ -155,6 +687,7 @@ vz 537,725 2 5 zcaron :Y 722,921,0,12,12 2 6 Ydieresis tm 1000,722 2 7 trademark aq 241,737 2 8 quotesingle +Eu 574,705,15 2 9 Euro space 287 0 32 space ! 296,737,15 2 33 exclam " 333,737 2 34 quotedbl @@ -282,11 +815,11 @@ fl 685,737 2 141 fl .i 370,475 0 144 dotlessi ga 333,737 2 146 grave a" 333,737,0,98,16 2 147 hungarumlaut -a. 333,694 2 148 dotaccent +a. 333,737 2 148 dotaccent ab 333,714 2 149 breve ah 333,725,0,11,10 2 150 caron ao 333,761 2 151 ring -ho 333,3,163,13 0 152 ogonek +ho 333,4,220 1 152 ogonek lq 481,737 2 153 quotedblleft rq 481,737 2 154 quotedblright oe 907,485,15 0 155 oe @@ -301,7 +834,7 @@ Cs 574,605 0 164 currency Ye 574,690,0,10,10 2 165 yen bb 606,675,175 2 166 brokenbar sc 500,737,86 2 167 section -ad 333,694,0,12,12 2 168 dieresis +ad 333,707,0,12,12 2 168 dieresis co 747,737,15,3,2 2 169 copyright Of 367,705,0,26 2 170 ordfeminine fo 333,397 0 171 guilsinglleft @@ -317,7 +850,7 @@ aa 333,737 2 180 acute mc 685,475,205 1 181 mu ps 747,722,71 2 182 paragraph pc 278,372 0 183 periodcentered -ac 333,0,224 1 184 cedilla +ac 333,2,224 1 184 cedilla S1 344,705 2 185 onesuperior Om 367,705 2 186 ordmasculine fc 333,397 0 187 guilsinglright diff --git a/contrib/groff/font/devps/NBI b/contrib/groff/font/devps/NBI index aa4b09e2b3..e3b679b380 100644 --- a/contrib/groff/font/devps/NBI +++ b/contrib/groff/font/devps/NBI @@ -1,268 +1,1325 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName New Century Schoolbook Bold Italic +# Version 003.001 +# FamilyName New Century Schoolbook +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1991, 1992, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Copyright (c) 1985, 1987, 1989, 1991, 1992, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 13:54:27 1999 +# Comment UniqueID 44731 +# Comment VMusage 35376 42312 + name NBI internalname NewCenturySchlbk-BoldItalic slant 16 spacewidth 287 encoding text.enc ligatures fi fl 0 + kernpairs -A y -33 -A w -25 -A v -10 -A u -15 +A C 5 +A ,C 5 +A G 5 +A O 5 +A 'O 5 +A ^O 5 +A :O 5 +A `O 5 +A /O 5 +A ~O 5 +A Q 5 +A T 5 +A U -32 +A 'U -32 +A ^U -32 +A :U -32 +A `U -32 +A V -100 +A W -84 +A Y -70 +A 'Y -70 +A :Y -70 +A rq -95 A ' -95 A cq -95 -A rq -95 -A Y -70 -A W -84 -A V -100 -A U -32 -A T 5 -A Q 5 -A O 5 -A G 5 -A C 5 -B . 15 -B , 15 -B U 15 +A u -15 +A 'u -15 +A ^u -15 +A :u -15 +A `u -15 +A v -10 +A w -25 +A y -33 +A 'y -33 +A :y -33 +'A C 5 +'A ,C 5 +'A G 5 +'A O 5 +'A 'O 5 +'A ^O 5 +'A :O 5 +'A `O 5 +'A /O 5 +'A ~O 5 +'A Q 5 +'A T 5 +'A U -32 +'A 'U -32 +'A ^U -32 +'A :U -32 +'A `U -32 +'A V -100 +'A W -84 +'A Y -70 +'A 'Y -70 +'A :Y -70 +'A rq -95 +'A ' -95 +'A cq -95 +'A u -15 +'A 'u -15 +'A ^u -15 +'A :u -15 +'A `u -15 +'A v -10 +'A w -25 +'A y -33 +'A 'y -33 +'A :y -33 +^A C 5 +^A ,C 5 +^A G 5 +^A O 5 +^A 'O 5 +^A ^O 5 +^A :O 5 +^A `O 5 +^A /O 5 +^A ~O 5 +^A Q 5 +^A T 5 +^A U -32 +^A 'U -32 +^A ^U -32 +^A :U -32 +^A `U -32 +^A V -100 +^A W -84 +^A Y -70 +^A 'Y -70 +^A :Y -70 +^A rq -95 +^A ' -95 +^A cq -95 +^A u -15 +^A 'u -15 +^A ^u -15 +^A :u -15 +^A `u -15 +^A v -10 +^A w -25 +^A y -33 +^A 'y -33 +^A :y -33 +:A C 5 +:A ,C 5 +:A G 5 +:A O 5 +:A 'O 5 +:A ^O 5 +:A :O 5 +:A `O 5 +:A /O 5 +:A ~O 5 +:A Q 5 +:A T 5 +:A U -32 +:A 'U -32 +:A ^U -32 +:A :U -32 +:A `U -32 +:A V -100 +:A W -84 +:A Y -70 +:A 'Y -70 +:A :Y -70 +:A rq -95 +:A ' -95 +:A cq -95 +:A u -15 +:A 'u -15 +:A ^u -15 +:A :u -15 +:A `u -15 +:A v -10 +:A w -25 +:A y -33 +:A 'y -33 +:A :y -33 +`A C 5 +`A ,C 5 +`A G 5 +`A O 5 +`A 'O 5 +`A ^O 5 +`A :O 5 +`A `O 5 +`A /O 5 +`A ~O 5 +`A Q 5 +`A T 5 +`A U -32 +`A 'U -32 +`A ^U -32 +`A :U -32 +`A `U -32 +`A V -100 +`A W -84 +`A Y -70 +`A 'Y -70 +`A :Y -70 +`A rq -95 +`A ' -95 +`A cq -95 +`A u -15 +`A 'u -15 +`A ^u -15 +`A :u -15 +`A `u -15 +`A v -10 +`A w -25 +`A y -33 +`A 'y -33 +`A :y -33 +oA C 5 +oA ,C 5 +oA G 5 +oA O 5 +oA 'O 5 +oA ^O 5 +oA :O 5 +oA `O 5 +oA /O 5 +oA ~O 5 +oA Q 5 +oA T 5 +oA U -32 +oA 'U -32 +oA ^U -32 +oA :U -32 +oA `U -32 +oA V -100 +oA W -84 +oA Y -70 +oA 'Y -70 +oA :Y -70 +oA rq -95 +oA ' -95 +oA cq -95 +oA u -15 +oA 'u -15 +oA ^u -15 +oA :u -15 +oA `u -15 +oA v -10 +oA w -25 +oA y -33 +oA 'y -33 +oA :y -33 +~A C 5 +~A ,C 5 +~A G 5 +~A O 5 +~A 'O 5 +~A ^O 5 +~A :O 5 +~A `O 5 +~A /O 5 +~A ~O 5 +~A Q 5 +~A T 5 +~A U -32 +~A 'U -32 +~A ^U -32 +~A :U -32 +~A `U -32 +~A V -100 +~A W -84 +~A Y -70 +~A 'Y -70 +~A :Y -70 +~A rq -95 +~A ' -95 +~A cq -95 +~A u -15 +~A 'u -15 +~A ^u -15 +~A :u -15 +~A `u -15 +~A v -10 +~A w -25 +~A y -33 +~A 'y -33 +~A :y -33 B A -11 +B 'A -11 +B ^A -11 +B :A -11 +B `A -11 +B oA -11 +B ~A -11 +B U 15 +B 'U 15 +B ^U 15 +B :U 15 +B `U 15 +B , 15 +B . 15 C A -5 -D . -11 -D , -11 -D Y 6 -D W -11 +C 'A -5 +C ^A -5 +C :A -5 +C `A -5 +C oA -5 +C ~A -5 +,C A -5 +,C 'A -5 +,C ^A -5 +,C :A -5 +,C `A -5 +,C oA -5 +,C ~A -5 D V -18 -F r -27 -F . -91 -F o -47 -F i -41 -F e -41 -F , -91 -F a -47 +D W -11 +D Y 6 +D 'Y 6 +D :Y 6 +D , -11 +D . -11 F A -79 -J u -39 -J . -74 -J o -40 -J e -33 -J , -74 -J a -40 +F 'A -79 +F ^A -79 +F :A -79 +F `A -79 +F oA -79 +F ~A -79 +F a -47 +F 'a -47 +F ^a -47 +F :a -47 +F `a -47 +F oa -47 +F ~a -47 +F , -91 +F e -41 +F 'e -41 +F ^e -41 +F :e -41 +F `e -41 +F i -41 +F 'i -41 +F ^i -41 +F :i -41 +F `i -41 +F o -47 +F 'o -47 +F ^o -47 +F :o -47 +F `o -47 +F /o -47 +F ~o -47 +F . -91 +F r -27 J A -30 -K y -48 -K u -4 -K o -4 +J 'A -30 +J ^A -30 +J :A -30 +J `A -30 +J oA -30 +J ~A -30 +J a -40 +J 'a -40 +J ^a -40 +J :a -40 +J `a -40 +J oa -40 +J ~a -40 +J , -74 +J e -33 +J 'e -33 +J ^e -33 +J :e -33 +J `e -33 +J o -40 +J 'o -40 +J ^o -40 +J :o -40 +J `o -40 +J /o -40 +J ~o -40 +J . -74 +J u -39 +J 'u -39 +J ^u -39 +J :u -39 +J `u -39 K e 18 -L y -30 +K 'e 18 +K ^e 18 +K :e 18 +K `e 18 +K o -4 +K 'o -4 +K ^o -4 +K :o -4 +K `o -4 +K /o -4 +K ~o -4 +K u -4 +K 'u -4 +K ^u -4 +K :u -4 +K `u -4 +K y -48 +K 'y -48 +K :y -48 +L T -75 +L V -97 +L W -69 +L Y -55 +L 'Y -55 +L :Y -55 +L rq -100 L ' -100 L cq -100 -L rq -100 -L Y -55 -L W -69 -L V -97 -L T -75 -N . -49 +L y -30 +L 'y -30 +L :y -30 +/L T -75 +/L V -97 +/L W -69 +/L Y -55 +/L 'Y -55 +/L :Y -55 +/L rq -100 +/L ' -100 +/L cq -100 +/L y -30 +/L 'y -30 +/L :y -30 N , -49 -O . -18 -O , -18 -O X -18 -O W -15 -O V -24 +N . -49 +~N , -49 +~N . -49 O A -5 -P . -100 -P o -40 -P e -33 -P , -100 -P a -40 +O 'A -5 +O ^A -5 +O :A -5 +O `A -5 +O oA -5 +O ~A -5 +O V -24 +O W -15 +O X -18 +O , -18 +O . -18 +'O A -5 +'O 'A -5 +'O ^A -5 +'O :A -5 +'O `A -5 +'O oA -5 +'O ~A -5 +'O V -24 +'O W -15 +'O X -18 +'O , -18 +'O . -18 +^O A -5 +^O 'A -5 +^O ^A -5 +^O :A -5 +^O `A -5 +^O oA -5 +^O ~A -5 +^O V -24 +^O W -15 +^O X -18 +^O , -18 +^O . -18 +:O A -5 +:O 'A -5 +:O ^A -5 +:O :A -5 +:O `A -5 +:O oA -5 +:O ~A -5 +:O V -24 +:O W -15 +:O X -18 +:O , -18 +:O . -18 +`O A -5 +`O 'A -5 +`O ^A -5 +`O :A -5 +`O `A -5 +`O oA -5 +`O ~A -5 +`O V -24 +`O W -15 +`O X -18 +`O , -18 +`O . -18 +/O A -5 +/O 'A -5 +/O ^A -5 +/O :A -5 +/O `A -5 +/O oA -5 +/O ~A -5 +/O V -24 +/O W -15 +/O X -18 +/O , -18 +/O . -18 +~O A -5 +~O 'A -5 +~O ^A -5 +~O :A -5 +~O `A -5 +~O oA -5 +~O ~A -5 +~O V -24 +~O W -15 +~O X -18 +~O , -18 +~O . -18 P A -80 -R W -14 +P 'A -80 +P ^A -80 +P :A -80 +P `A -80 +P oA -80 +P ~A -80 +P a -40 +P 'a -40 +P ^a -40 +P :a -40 +P `a -40 +P oa -40 +P ~a -40 +P , -100 +P e -33 +P 'e -33 +P ^e -33 +P :e -33 +P `e -33 +P o -40 +P 'o -40 +P ^o -40 +P :o -40 +P `o -40 +P /o -40 +P ~o -40 +P . -100 R V -24 -S . -18 +R W -14 S , -18 -T y -30 -T w -30 -T u -22 -T r -9 -T . -55 -T o -40 -T i -22 +S . -18 +vS , -18 +vS . -18 +T A -60 +T 'A -60 +T ^A -60 +T :A -60 +T `A -60 +T oA -60 +T ~A -60 +T O 11 +T 'O 11 +T ^O 11 +T :O 11 +T `O 11 +T /O 11 +T ~O 11 +T a -40 +T 'a -40 +T ^a -40 +T :a -40 +T `a -40 +T oa -40 +T ~a -40 +T , -55 +T e -33 +T 'e -33 +T ^e -33 +T :e -33 +T `e -33 +T h -9 T - -75 T hy -75 -T h -9 -T e -33 -T , -55 -T a -40 -T O 11 -T A -60 -U . -25 -U , -25 +T i -22 +T 'i -22 +T ^i -22 +T :i -22 +T `i -22 +T o -40 +T 'o -40 +T ^o -40 +T :o -40 +T `o -40 +T /o -40 +T ~o -40 +T . -55 +T r -9 +T u -22 +T 'u -22 +T ^u -22 +T :u -22 +T `u -22 +T w -30 +T y -30 +T 'y -30 +T :y -30 U A -42 -V u -70 -V ; 6 -V . -94 -V o -71 -V i -35 +U 'A -42 +U ^A -42 +U :A -42 +U `A -42 +U oA -42 +U ~A -42 +U , -25 +U . -25 +'U A -42 +'U 'A -42 +'U ^A -42 +'U :A -42 +'U `A -42 +'U oA -42 +'U ~A -42 +'U , -25 +'U . -25 +^U A -42 +^U 'A -42 +^U ^A -42 +^U :A -42 +^U `A -42 +^U oA -42 +^U ~A -42 +^U , -25 +^U . -25 +:U A -42 +:U 'A -42 +:U ^A -42 +:U :A -42 +:U `A -42 +:U oA -42 +:U ~A -42 +:U , -25 +:U . -25 +`U A -42 +`U 'A -42 +`U ^A -42 +`U :A -42 +`U `A -42 +`U oA -42 +`U ~A -42 +`U , -25 +`U . -25 +V A -100 +V 'A -100 +V ^A -100 +V :A -100 +V `A -100 +V oA -100 +V ~A -100 +V G -12 +V O -19 +V 'O -19 +V ^O -19 +V :O -19 +V `O -19 +V /O -19 +V ~O -19 +V a -55 +V 'a -55 +V ^a -55 +V :a -55 +V `a -55 +V oa -55 +V ~a -55 +V : -49 +V , -94 +V e -66 +V 'e -66 +V ^e -66 +V :e -66 +V `e -66 V - -94 V hy -94 -V e -66 -V , -94 -V : -49 -V a -55 -V O -19 -V G -12 -V A -100 -W y -41 -W u -25 -W ; -22 -W . -86 -W o -33 -W i -27 +V i -35 +V 'i -35 +V o -71 +V 'o -71 +V ^o -71 +V :o -71 +V `o -71 +V /o -71 +V ~o -71 +V . -94 +V ; 6 +V u -70 +V 'u -70 +V ^u -70 +V :u -70 +V `u -70 +W A -66 +W 'A -66 +W ^A -66 +W :A -66 +W `A -66 +W oA -66 +W ~A -66 +W O -11 +W 'O -11 +W ^O -11 +W :O -11 +W `O -11 +W /O -11 +W ~O -11 +W a -33 +W 'a -33 +W ^a -33 +W :a -33 +W `a -33 +W oa -33 +W ~a -33 +W : -22 +W , -86 +W e -39 +W 'e -39 +W ^e -39 +W :e -39 +W `e -39 +W h 5 W - -61 W hy -61 -W h 5 -W e -39 -W , -86 -W : -22 -W a -33 -W O -11 -W A -66 -Y u -58 -Y ; -55 -Y . -91 -Y o -77 -Y i -22 +W i -27 +W 'i -27 +W o -33 +W 'o -33 +W ^o -33 +W :o -33 +W `o -33 +W /o -33 +W ~o -33 +W . -86 +W ; -22 +W u -25 +W 'u -25 +W ^u -25 +W :u -25 +W `u -25 +W y -41 +W 'y -41 +W :y -41 +Y A -79 +Y 'A -79 +Y ^A -79 +Y :A -79 +Y `A -79 +Y oA -79 +Y ~A -79 +Y a -77 +Y 'a -77 +Y ^a -77 +Y :a -77 +Y `a -77 +Y oa -77 +Y ~a -77 +Y : -55 +Y , -91 +Y e -71 +Y 'e -71 +Y ^e -71 +Y :e -31 +Y `e -31 Y - -91 Y hy -91 -Y e -71 -Y , -91 -Y : -55 -Y a -77 -Y A -79 -a y -8 -a w -8 +Y i -22 +Y 'i -22 +Y ^i -22 +Y o -77 +Y 'o -77 +Y ^o -77 +Y :o -77 +Y `o -77 +Y /o -77 +Y ~o -77 +Y . -91 +Y ; -55 +Y u -58 +Y 'u -58 +Y ^u -58 +Y :u -58 +Y `u -58 +'Y A -79 +'Y 'A -79 +'Y ^A -79 +'Y :A -79 +'Y `A -79 +'Y oA -79 +'Y ~A -79 +'Y a -77 +'Y 'a -77 +'Y ^a -77 +'Y :a -77 +'Y `a -77 +'Y oa -77 +'Y ~a -77 +'Y : -55 +'Y , -91 +'Y e -71 +'Y 'e -71 +'Y ^e -71 +'Y :e -31 +'Y `e -31 +'Y - -91 +'Y hy -91 +'Y i -22 +'Y 'i -22 +'Y ^i -22 +'Y o -77 +'Y 'o -77 +'Y ^o -77 +'Y :o -77 +'Y `o -77 +'Y /o -77 +'Y ~o -77 +'Y . -91 +'Y ; -55 +'Y u -58 +'Y 'u -58 +'Y ^u -58 +'Y :u -58 +'Y `u -58 +:Y A -79 +:Y 'A -79 +:Y ^A -79 +:Y :A -79 +:Y `A -79 +:Y oA -79 +:Y ~A -79 +:Y a -77 +:Y 'a -77 +:Y ^a -77 +:Y :a -77 +:Y `a -77 +:Y oa -77 +:Y ~a -77 +:Y : -55 +:Y , -91 +:Y e -71 +:Y 'e -71 +:Y ^e -71 +:Y :e -31 +:Y `e -31 +:Y - -91 +:Y hy -91 +:Y i -22 +:Y 'i -22 +:Y ^i -22 +:Y o -77 +:Y 'o -77 +:Y ^o -77 +:Y :o -77 +:Y `o -77 +:Y /o -77 +:Y ~o -77 +:Y . -91 +:Y ; -55 +:Y u -58 +:Y 'u -58 +:Y ^u -58 +:Y :u -58 +:Y `u -58 a v 6 -b y -6 -b v 8 -b . 6 +a w -8 +a y -8 +a 'y -8 +a :y -8 +'a v 6 +'a w -8 +'a y -8 +'a 'y -8 +'a :y -8 +^a v 6 +^a w -8 +^a y -8 +^a 'y -8 +^a :y -8 +:a v 6 +:a w -8 +:a y -8 +:a 'y -8 +:a :y -8 +`a v 6 +`a w -8 +`a y -8 +`a 'y -8 +`a :y -8 +oa v 6 +oa w -8 +oa y -8 +oa 'y -8 +oa :y -8 +~a v 6 +~a w -8 +~a y -8 +~a 'y -8 +~a :y -8 b , 6 -c y -20 -c . -8 -c l -13 -c k -8 -c h -18 +b . 6 +b v 8 +b y -6 +b 'y -6 +b :y -6 c , -8 +c h -18 +c k -8 +c l -13 +c /l -13 +c . -8 +c y -20 +c 'y -20 +c :y -20 +,c , -8 +,c h -18 +,c k -8 +,c l -13 +,c /l -13 +,c . -8 +,c y -20 +,c 'y -20 +,c :y -20 : u0020 -18 -, u0020 -18 +, rq -18 , ' -18 , cq -18 -, rq -18 -d y -15 +, u0020 -18 d w -15 -e y -15 -e x -5 -e w -15 -e p -11 -e g -4 +d y -15 +d 'y -15 +d :y -15 e b -8 +e g -4 +e p -11 +e w -15 +e x -5 +e y -15 +e 'y -15 +e :y -15 +'e b -8 +'e g -4 +'e p -11 +'e w -15 +'e x -5 +'e y -15 +'e 'y -15 +'e :y -15 +^e b -8 +^e g -4 +^e p -11 +^e w -15 +^e x -5 +^e y -15 +^e 'y -15 +^e :y -15 +:e b -8 +:e g -4 +:e p -11 +:e w -15 +:e x -5 +:e y -15 +:e 'y -15 +:e :y -15 +`e b -8 +`e g -4 +`e p -11 +`e w -15 +`e x -5 +`e y -15 +`e 'y -15 +`e :y -15 +f a 8 +f 'a 8 +f ^a 8 +f :a 8 +f `a 8 +f oa 8 +f ~a 8 +f , -28 +f .i 7 +f e 14 +f 'e 14 +f ^e 34 +f :e 34 +f `e 34 +f i 7 +f 'i 27 +f ^i 27 +f :i 27 +f `i 27 +f l 7 +f /l 7 +f o 7 +f 'o 7 +f ^o 7 +f :o 7 +f `o 7 +f /o 7 +f ~o 7 +f . -28 +f rq 105 f ' 105 f cq 105 -f rq 105 -f . -28 -f o 7 -f l 7 -f i 7 -f e 14 -f .i 7 -f , -28 -f a 8 -g y -11 -g r 11 -g . -5 g , -5 +g . -5 +g r 11 +g y -11 +g 'y -11 +g :y -11 h y -20 +h 'y -20 +h :y -20 i v 7 -k y -15 -k o -22 +'i v 7 +^i v 7 +:i v 7 +`i v 7 k e -16 -l y -7 +k 'e -16 +k ^e -16 +k :e -16 +k `e -16 +k o -22 +k 'o -22 +k ^o -22 +k :o -22 +k `o -22 +k /o -22 +k ~o -22 +k y -15 +k 'y -15 +k :y -15 l w -7 -m y -20 +l y -7 +l 'y -7 +l :y -7 +/l w -7 +/l y -7 +/l 'y -7 +/l :y -7 m u -11 -n y -20 -n v -7 +m 'u -11 +m ^u -11 +m :u -11 +m `u -11 +m y -20 +m 'y -20 +m :y -20 n u -11 -o y -11 -o w -8 +n 'u -11 +n ^u -11 +n :u -11 +n `u -11 +n v -7 +n y -20 +n 'y -20 +n :y -20 +~n u -11 +~n 'u -11 +~n ^u -11 +~n :u -11 +~n `u -11 +~n v -7 +~n y -20 +~n 'y -20 +~n :y -20 o v 6 -p y -4 -p . 8 +o w -8 +o y -11 +o 'y -11 +o :y -11 +'o v 6 +'o w -8 +'o y -11 +'o 'y -11 +'o :y -11 +^o v 6 +^o w -8 +^o y -11 +^o 'y -11 +^o :y -11 +:o v 6 +:o w -8 +:o y -11 +:o 'y -11 +:o :y -11 +`o v 6 +`o w -8 +`o y -11 +`o 'y -11 +`o :y -11 +/o v 6 +/o w -8 +/o y -11 +/o 'y -11 +/o :y -11 +~o v 6 +~o w -8 +~o y -11 +~o 'y -11 +~o :y -11 p , 8 -. u0020 -18 +p . 8 +p y -4 +p 'y -4 +p :y -4 +. rq -18 . ' -18 . cq -18 -. rq -18 +. u0020 -18 +lq A -60 +lq 'A -60 +lq ^A -60 +lq :A -60 +lq `A -60 +lq oA -60 +lq ~A -60 lq ` 20 lq oq 20 -lq A -60 rq u0020 -18 ` A -80 oq A -80 -' v -16 -cq v -16 -' t -22 -cq t -22 -' s -46 -cq s -46 -' r -9 -cq r -9 -' l -22 -cq l -22 +` 'A -80 +oq 'A -80 +` ^A -80 +oq ^A -80 +` :A -80 +oq :A -80 +` `A -80 +oq `A -80 +` oA -80 +oq oA -80 +` ~A -80 +oq ~A -80 ' d -41 cq d -41 -r y -20 -r v -7 -r u -11 -r t -11 -r ; 9 -r s -20 -r ' 9 -r cq 9 -r . -90 -r p -17 -r o -11 -r l -14 -r k 9 -r i -14 +' l -22 +cq l -22 +' /l -22 +cq /l -22 +' r -9 +cq r -9 +' s -46 +cq s -46 +' vs -46 +cq vs -46 +' t -22 +cq t -22 +' v -16 +cq v -16 +r a -11 +r 'a -11 +r ^a -11 +r :a -11 +r `a -11 +r oa -11 +r ~a -11 +r : 9 +r , -90 +r d -7 +r e -7 +r 'e -7 +r ^e -7 +r :e -7 +r `e -7 +r g -11 r - -16 r hy -16 -r g -11 -r e -7 -r d -7 -r , -90 -r : 9 -r a -11 -s . 11 +r i -14 +r 'i -14 +r ^i -14 +r :i -14 +r `i -14 +r k 9 +r l -14 +r /l -14 +r o -11 +r 'o -11 +r ^o -11 +r :o -11 +r `o -11 +r /o -11 +r ~o -11 +r p -17 +r . -90 +r ' 9 +r cq 9 +r s -20 +r vs -20 +r ; 9 +r t -11 +r u -11 +r 'u -11 +r ^u -11 +r :u -11 +r `u -11 +r v -7 +r y -20 +r 'y -20 +r :y -20 s , 11 +s . 11 +vs , 11 +vs . 11 ; u0020 -18 -u0020 lq -18 -u0020 Y -18 -u0020 W -33 -u0020 V -24 -u0020 T -18 u0020 A -22 -v . -11 -v o -6 -v , -11 +u0020 'A -22 +u0020 ^A -22 +u0020 :A -22 +u0020 `A -22 +u0020 oA -22 +u0020 ~A -22 +u0020 T -18 +u0020 V -24 +u0020 W -33 +u0020 Y -18 +u0020 'Y -18 +u0020 :Y -18 +u0020 lq -18 v a -6 -w . -17 -w o -14 -w e -8 -w , -17 +v 'a -6 +v ^a -6 +v :a -6 +v `a -6 +v oa -6 +v ~a -6 +v , -11 +v o -6 +v 'o -6 +v ^o -6 +v :o -6 +v `o -6 +v /o -6 +v ~o -6 +v . -11 w a -14 +w 'a -14 +w ^a -14 +w :a -14 +w `a -14 +w oa -14 +w ~a -14 +w , -17 +w e -8 +w 'e -8 +w ^e -8 +w :e -8 +w `e -8 +w o -14 +w 'o -14 +w ^o -14 +w :o -14 +w `o -14 +w /o -14 +w ~o -14 +w . -17 x e 5 -y . -25 -y o 8 -y e 15 -y , -25 +x 'e 5 +x ^e 5 +x :e 5 +x `e 5 y a 8 +y 'a 8 +y ^a 8 +y :a 8 +y `a 8 +y oa 8 +y ~a 8 +y , -25 +y e 15 +y 'e 15 +y ^e 15 +y :e 15 +y `e 15 +y o 8 +y 'o 8 +y ^o 8 +y :o 8 +y `o 8 +y /o 8 +y ~o 8 +y . -25 +'y a 8 +'y 'a 8 +'y ^a 8 +'y :a 8 +'y `a 8 +'y oa 8 +'y ~a 8 +'y , -25 +'y e 15 +'y 'e 15 +'y ^e 15 +'y :e 15 +'y `e 15 +'y o 8 +'y 'o 8 +'y ^o 8 +'y :o 8 +'y `o 8 +'y /o 8 +'y ~o 8 +'y . -25 +:y a 8 +:y 'a 8 +:y ^a 8 +:y :a 8 +:y `a 8 +:y oa 8 +:y ~a 8 +:y , -25 +:y e 15 +:y 'e 15 +:y ^e 15 +:y :e 15 +:y `e 15 +:y o 8 +:y 'o 8 +:y ^o 8 +:y :o 8 +:y `o 8 +:y /o 8 +:y ~o 8 +:y . -25 z e 4 +z 'e 4 +z ^e 4 +z :e 4 +z `e 4 +vz e 4 +vz 'e 4 +vz ^e 4 +vz :e 4 +vz `e 4 + charset ha 606,690,0,0,-16 2 0 asciicircum ti 606,346,0,0,-22 0 1 asciitilde @@ -273,6 +1330,7 @@ vz 519,695,15,4,69,4 2 5 zcaron :Y 704,915,0,121,37,109 2 6 Ydieresis tm 950,722,0,117,8,109 2 7 trademark aq 287,737,0,13,-62,13 2 8 quotesingle +Eu 574,705,15,117,68,109 2 9 Euro space 287 0 32 space ! 333,737,15,50,50,50 2 33 exclam " 400,737,0,78,-16,78 2 34 quotedbl @@ -400,15 +1458,15 @@ fl 685,737,205,36,120,36 3 141 fl .i 389,477,15,6,18,6 0 144 dotlessi ga 333,722,0,11,-24,11 2 146 grave a" 333,722,0,197,35,109 2 147 hungarumlaut -a. 333,690,0,6,-95,6 2 148 dotaccent +a. 333,737,0,28,-95,28 2 148 dotaccent ab 333,698,0,107,-17,107 2 149 breve ah 333,705,0,120,-10,109 2 150 caron ao 333,746,0,52,-61,52 2 151 ring -ho 333,0,155,0,-18 0 152 ogonek +ho 333,4,220,55,14,55 1 152 ogonek lq 481,737,0,90,-4,90 2 153 quotedblleft rq 481,737,0,79,7,79 2 154 quotedblright oe 852,477,15,10,56,10 0 155 oe -/l 389,737,15,51,45,51 2 156 lslash +/l 389,737,15,48,26,48 2 156 lslash Bq 481,157,192,0,107 0 157 quotedblbase OE 963,722,0,76,21,76 2 158 OE /L 704,722,0,16,91,16 2 159 Lslash @@ -419,7 +1477,7 @@ Cs 574,605,0,23,23,23 0 164 currency Ye 574,690,0,105,33,105 2 165 yen bb 606,675,175,0,-199 2 166 brokenbar sc 500,737,146,65,80,65 2 167 section -ad 333,690,0,110,17,109 2 168 dieresis +ad 333,715,0,110,17,109 2 168 dieresis co 747,737,15,53,52,53 2 169 copyright Of 412,705,0,98,3,98 2 170 ordfeminine fo 278,407,0,16,75,16 0 171 guilsinglleft @@ -432,7 +1490,7 @@ t+- 606,506 0 177 plusminus S2 344,705,0,68,67,68 2 178 twosuperior S3 344,705,0,67,47,67 2 179 threesuperior aa 333,722,0,89,-73,89 2 180 acute -mc 685,477,205,0,139 1 181 mu +mc 685,477,205,0,178 1 181 mu ps 650,722,131,81,25,81 2 182 paragraph pc 287,372,0,0,-7 0 183 periodcentered ac 333,3,220,0,71 1 184 cedilla @@ -490,7 +1548,7 @@ ae 815,477,15,10,68,10 0 230 ae `i 389,715,15,6,18,6 2 236 igrave 'i 389,715,15,31,18,31 2 237 iacute ^i 389,698,15,24,29,24 2 238 icircumflex -:i 389,683,15,52,19,52 2 239 idieresis +:i 389,690,15,52,19,52 2 239 idieresis Sd 574,752,15,6,50,6 2 240 eth ~n 685,690,15,4,50,4 2 241 ntilde `o 574,722,15,6,50,6 2 242 ograve diff --git a/contrib/groff/font/devps/NI b/contrib/groff/font/devps/NI index aab0a0b67b..c458c56251 100644 --- a/contrib/groff/font/devps/NI +++ b/contrib/groff/font/devps/NI @@ -1,211 +1,917 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName New Century Schoolbook Italic +# Version 003.001 +# FamilyName New Century Schoolbook +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1991, 1992, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Copyright (c) 1985, 1987, 1989, 1991, 1992, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 13:48:41 1999 +# Comment UniqueID 44729 +# Comment VMusage 35170 42106 + name NI internalname NewCenturySchlbk-Italic slant 16 spacewidth 278 encoding text.enc ligatures fi fl 0 + kernpairs -A y -55 -A w -18 -A v -18 -A u -18 +A C -18 +A ,C -18 +A G -18 +A O -18 +A 'O -18 +A ^O -18 +A :O -18 +A `O -18 +A /O -18 +A ~O -18 +A Q -18 +A T -30 +A U -37 +A 'U -37 +A ^U -37 +A :U -37 +A `U -37 +A V -74 +A W -74 +A Y -55 +A 'Y -55 +A :Y -55 +A rq -125 A ' -125 A cq -125 -A rq -125 -A Y -55 -A W -74 -A V -74 -A U -37 -A T -30 -A Q -18 -A O -18 -A G -18 -A C -18 -B . -50 +A u -18 +A 'u -18 +A ^u -18 +A :u -18 +A `u -18 +A v -18 +A w -18 +A y -55 +A 'y -55 +A :y -55 +'A C -18 +'A ,C -18 +'A G -18 +'A O -18 +'A 'O -18 +'A ^O -18 +'A :O -18 +'A `O -18 +'A /O -18 +'A ~O -18 +'A Q -18 +'A T -30 +'A U -37 +'A 'U -37 +'A ^U -37 +'A :U -37 +'A `U -37 +'A V -74 +'A W -74 +'A Y -55 +'A 'Y -55 +'A :Y -55 +'A rq -125 +'A ' -125 +'A cq -125 +'A u -18 +'A 'u -18 +'A ^u -18 +'A :u -18 +'A `u -18 +'A v -18 +'A w -18 +'A y -55 +'A 'y -55 +'A :y -55 +^A C -18 +^A ,C -18 +^A G -18 +^A O -18 +^A 'O -18 +^A ^O -18 +^A :O -18 +^A `O -18 +^A /O -18 +^A ~O -18 +^A Q -18 +^A T -30 +^A U -37 +^A 'U -37 +^A ^U -37 +^A :U -37 +^A `U -37 +^A V -74 +^A W -74 +^A Y -55 +^A 'Y -55 +^A :Y -55 +^A rq -125 +^A ' -125 +^A cq -125 +^A u -18 +^A 'u -18 +^A ^u -18 +^A :u -18 +^A `u -18 +^A v -18 +^A w -18 +^A y -55 +^A 'y -55 +^A :y -55 +:A C -18 +:A ,C -18 +:A G -18 +:A O -18 +:A 'O -18 +:A ^O -18 +:A :O -18 +:A `O -18 +:A /O -18 +:A ~O -18 +:A Q -18 +:A T -30 +:A U -37 +:A 'U -37 +:A ^U -37 +:A :U -37 +:A `U -37 +:A V -74 +:A W -74 +:A Y -55 +:A 'Y -55 +:A :Y -55 +:A rq -125 +:A ' -125 +:A cq -125 +:A u -18 +:A 'u -18 +:A ^u -18 +:A :u -18 +:A `u -18 +:A v -18 +:A w -18 +:A y -55 +:A 'y -55 +:A :y -55 +`A C -18 +`A ,C -18 +`A G -18 +`A O -18 +`A 'O -18 +`A ^O -18 +`A :O -18 +`A `O -18 +`A /O -18 +`A ~O -18 +`A Q -18 +`A T -30 +`A U -37 +`A 'U -37 +`A ^U -37 +`A :U -37 +`A `U -37 +`A V -74 +`A W -74 +`A Y -55 +`A 'Y -55 +`A :Y -55 +`A rq -125 +`A ' -125 +`A cq -125 +`A u -18 +`A 'u -18 +`A ^u -18 +`A :u -18 +`A `u -18 +`A v -18 +`A w -18 +`A y -55 +`A 'y -55 +`A :y -55 +oA C -18 +oA ,C -18 +oA G -18 +oA O -18 +oA 'O -18 +oA ^O -18 +oA :O -18 +oA `O -18 +oA /O -18 +oA ~O -18 +oA Q -18 +oA T -30 +oA U -37 +oA 'U -37 +oA ^U -37 +oA :U -37 +oA `U -37 +oA V -74 +oA W -74 +oA Y -55 +oA 'Y -55 +oA :Y -55 +oA rq -125 +oA ' -125 +oA cq -125 +oA u -18 +oA 'u -18 +oA ^u -18 +oA :u -18 +oA `u -18 +oA v -18 +oA w -18 +oA y -55 +oA 'y -55 +oA :y -55 +~A C -18 +~A ,C -18 +~A G -18 +~A O -18 +~A 'O -18 +~A ^O -18 +~A :O -18 +~A `O -18 +~A /O -18 +~A ~O -18 +~A Q -18 +~A T -30 +~A U -37 +~A 'U -37 +~A ^U -37 +~A :U -37 +~A `U -37 +~A V -74 +~A W -74 +~A Y -55 +~A 'Y -55 +~A :Y -55 +~A rq -125 +~A ' -125 +~A cq -125 +~A u -18 +~A 'u -18 +~A ^u -18 +~A :u -18 +~A `u -18 +~A v -18 +~A w -18 +~A y -55 +~A 'y -55 +~A :y -55 B , -50 -C . -50 +B . -50 C , -50 -D . -50 -D , -50 -D Y -18 -D W -18 +C . -50 +,C , -50 +,C . -50 D V -18 -F r -55 -F . -125 -F o -55 -F i -10 -F e -55 -F , -125 -F a -55 +D W -18 +D Y -18 +D 'Y -18 +D :Y -18 +D , -50 +D . -50 F A -35 -G . -50 +F 'A -35 +F ^A -35 +F :A -35 +F `A -35 +F oA -35 +F ~A -35 +F a -55 +F 'a -55 +F ^a -55 +F :a -55 +F `a -55 +F oa -55 +F ~a -55 +F , -125 +F e -55 +F 'e -55 +F ^e -55 +F :e -55 +F `e -55 +F i -10 +F 'i -10 +F ^i -10 +F :i -10 +F `i -10 +F o -55 +F 'o -55 +F ^o -55 +F :o -55 +F `o -55 +F /o -55 +F ~o -55 +F . -125 +F r -55 G , -50 -J u -18 -J . -100 -J o -37 -J e -37 -J , -100 -J a -37 +G . -50 J A -18 -L y -50 +J 'A -18 +J ^A -18 +J :A -18 +J `A -18 +J oA -18 +J ~A -18 +J a -37 +J 'a -37 +J ^a -37 +J :a -37 +J `a -37 +J oa -37 +J ~a -37 +J , -100 +J e -37 +J 'e -37 +J ^e -37 +J :e -37 +J `e -37 +J o -37 +J 'o -37 +J ^o -37 +J :o -37 +J `o -37 +J /o -37 +J ~o -37 +J . -100 +J u -18 +J 'u -18 +J ^u -18 +J :u -18 +J `u -18 +L T -100 +L V -100 +L W -100 +L Y -100 +L 'Y -100 +L :Y -100 +L rq -125 L ' -125 L cq -125 -L rq -125 -L Y -100 -L W -100 -L V -100 -L T -100 -N . -60 +L y -50 +L 'y -50 +L :y -50 +/L T -100 +/L V -100 +/L W -100 +/L Y -100 +/L 'Y -100 +/L :Y -100 +/L rq -125 +/L ' -125 +/L cq -125 +/L y -50 +/L 'y -50 +/L :y -50 N , -60 -O . -50 -O , -50 -O Y -18 -O X -18 -O V -18 +N . -60 +~N , -60 +~N . -60 O T 18 -P . -125 -P o -55 -P e -55 -P , -125 -P a -55 +O V -18 +O X -18 +O Y -18 +O 'Y -18 +O :Y -18 +O , -50 +O . -50 +'O T 18 +'O V -18 +'O X -18 +'O Y -18 +'O 'Y -18 +'O :Y -18 +'O , -50 +'O . -50 +^O T 18 +^O V -18 +^O X -18 +^O Y -18 +^O 'Y -18 +^O :Y -18 +^O , -50 +^O . -50 +:O T 18 +:O V -18 +:O X -18 +:O Y -18 +:O 'Y -18 +:O :Y -18 +:O , -50 +:O . -50 +`O T 18 +`O V -18 +`O X -18 +`O Y -18 +`O 'Y -18 +`O :Y -18 +`O , -50 +`O . -50 +/O T 18 +/O V -18 +/O X -18 +/O Y -18 +/O 'Y -18 +/O :Y -18 +/O , -50 +/O . -50 +~O T 18 +~O V -18 +~O X -18 +~O Y -18 +~O 'Y -18 +~O :Y -18 +~O , -50 +~O . -50 P A -50 -Q . -20 +P 'A -50 +P ^A -50 +P :A -50 +P `A -50 +P oA -50 +P ~A -50 +P a -55 +P 'a -55 +P ^a -55 +P :a -55 +P `a -55 +P oa -55 +P ~a -55 +P , -125 +P e -55 +P 'e -55 +P ^e -55 +P :e -55 +P `e -55 +P o -55 +P 'o -55 +P ^o -55 +P :o -55 +P `o -55 +P /o -55 +P ~o -55 +P . -125 Q , -20 -R Y -18 -R W -18 -R V -18 +Q . -20 R U -18 -S . -50 +R 'U -18 +R ^U -18 +R :U -18 +R `U -18 +R V -18 +R W -18 +R Y -18 +R 'Y -18 +R :Y -18 S , -50 -T y -50 -T w -50 -T u -50 -T ; -50 -T r -50 -T . -100 -T o -74 -T i -18 +S . -50 +vS , -50 +vS . -50 +T O 18 +T 'O 18 +T ^O 18 +T :O 18 +T `O 18 +T /O 18 +T ~O 18 +T a -74 +T 'a -74 +T ^a -74 +T :a -74 +T `a -74 +T oa -74 +T ~a -74 +T : -50 +T , -100 +T e -74 +T 'e -74 +T ^e -34 +T :e -34 +T `e -34 +T h -25 T - -100 T hy -100 -T h -25 -T e -74 -T , -100 -T : -50 -T a -74 -T O 18 -U . -100 -U , -100 +T i -18 +T 'i -18 +T ^i -18 +T o -74 +T 'o -74 +T ^o -74 +T :o -34 +T `o -34 +T /o -74 +T ~o -34 +T . -100 +T r -50 +T ; -50 +T u -50 +T 'u -50 +T ^u -50 +T :u -50 +T `u -50 +T w -50 +T y -50 +T 'y -50 +T :y -50 U A -18 -V u -75 -V ; -75 -V . -100 -V o -75 -V i -50 +U 'A -18 +U ^A -18 +U :A -18 +U `A -18 +U oA -18 +U ~A -18 +U , -100 +U . -100 +'U A -18 +'U 'A -18 +'U ^A -18 +'U :A -18 +'U `A -18 +'U oA -18 +'U ~A -18 +'U , -100 +'U . -100 +^U A -18 +^U 'A -18 +^U ^A -18 +^U :A -18 +^U `A -18 +^U oA -18 +^U ~A -18 +^U , -100 +^U . -100 +:U A -18 +:U 'A -18 +:U ^A -18 +:U :A -18 +:U `A -18 +:U oA -18 +:U ~A -18 +:U , -100 +:U . -100 +`U A -18 +`U 'A -18 +`U ^A -18 +`U :A -18 +`U `A -18 +`U oA -18 +`U ~A -18 +`U , -100 +`U . -100 +V A -37 +V 'A -37 +V ^A -37 +V :A -37 +V `A -37 +V oA -37 +V ~A -37 +V a -75 +V 'a -75 +V ^a -75 +V :a -75 +V `a -75 +V oa -75 +V ~a -75 +V : -75 +V , -100 +V e -75 +V 'e -75 +V ^e -35 +V :e -35 +V `e -35 V - -100 V hy -100 -V e -75 -V , -100 -V : -75 -V a -75 -V A -37 -W y -55 -W u -55 -W ; -75 -W . -100 -W o -55 -W i -20 +V i -50 +V 'i -50 +V ^i -10 +V :i -10 +V `i -10 +V o -75 +V 'o -75 +V ^o -75 +V :o -35 +V `o -35 +V /o -75 +V ~o -35 +V . -100 +V ; -75 +V u -75 +V 'u -75 +V ^u -75 +V :u -75 +V `u -75 +W A -55 +W 'A -55 +W ^A -55 +W :A -55 +W `A -55 +W oA -55 +W ~A -55 +W a -55 +W 'a -55 +W ^a -55 +W :a -55 +W `a -55 +W oa -55 +W ~a -55 +W : -75 +W , -100 +W e -55 +W 'e -55 +W ^e -55 +W :e -35 +W `e -35 +W h -20 W - -75 W hy -75 -W h -20 -W e -55 -W , -100 -W : -75 -W a -55 -W A -55 -Y u -100 -Y ; -75 -Y . -100 -Y o -100 -Y i -25 +W i -20 +W 'i -20 +W ^i -20 +W o -55 +W 'o -55 +W ^o -55 +W :o -55 +W `o -55 +W /o -55 +W ~o -55 +W . -100 +W ; -75 +W u -55 +W 'u -55 +W ^u -55 +W :u -55 +W `u -55 +W y -55 +W 'y -55 +W :y -55 +Y A -55 +Y 'A -55 +Y ^A -55 +Y :A -55 +Y `A -55 +Y oA -55 +Y ~A -55 +Y a -100 +Y 'a -100 +Y ^a -100 +Y :a -60 +Y `a -60 +Y oa -100 +Y ~a -100 +Y : -75 +Y , -100 +Y e -100 +Y 'e -100 +Y ^e -60 +Y :e -60 +Y `e -60 Y - -100 Y hy -100 -Y e -100 -Y , -100 -Y : -75 -Y a -100 -Y A -55 -b . -50 -b , -50 +Y i -25 +Y 'i -25 +Y o -100 +Y 'o -100 +Y ^o -100 +Y :o -60 +Y `o -60 +Y /o -100 +Y ~o -60 +Y . -100 +Y ; -75 +Y u -100 +Y 'u -100 +Y ^u -100 +Y :u -100 +Y `u -100 +'Y A -55 +'Y 'A -55 +'Y ^A -55 +'Y :A -55 +'Y `A -55 +'Y oA -55 +'Y ~A -55 +'Y a -100 +'Y 'a -100 +'Y ^a -100 +'Y :a -60 +'Y `a -60 +'Y oa -100 +'Y ~a -100 +'Y : -75 +'Y , -100 +'Y e -100 +'Y 'e -100 +'Y ^e -60 +'Y :e -60 +'Y `e -60 +'Y - -100 +'Y hy -100 +'Y i -25 +'Y 'i -25 +'Y o -100 +'Y 'o -100 +'Y ^o -60 +'Y :o -60 +'Y `o -60 +'Y /o -100 +'Y ~o -60 +'Y . -100 +'Y ; -75 +'Y u -100 +'Y 'u -100 +'Y ^u -100 +'Y :u -100 +'Y `u -100 +:Y A -55 +:Y 'A -55 +:Y ^A -55 +:Y :A -55 +:Y `A -55 +:Y oA -55 +:Y ~A -55 +:Y a -100 +:Y 'a -100 +:Y ^a -100 +:Y :a -60 +:Y `a -60 +:Y oa -100 +:Y ~a -100 +:Y : -75 +:Y , -100 +:Y e -100 +:Y 'e -100 +:Y ^e -60 +:Y :e -60 +:Y `e -60 +:Y - -100 +:Y hy -100 +:Y i -25 +:Y 'i -25 +:Y o -100 +:Y 'o -100 +:Y ^o -100 +:Y :o -60 +:Y `o -60 +:Y /o -100 +:Y ~o -60 +:Y . -100 +:Y ; -75 +:Y u -100 +:Y 'u -100 +:Y ^u -100 +:Y :u -100 +:Y `u -100 b b -10 -c . -50 -c k -18 -c h -18 +b , -50 +b . -50 c , -50 +c h -18 +c k -18 +c . -50 +,c , -50 +,c h -18 +,c k -18 +,c . -50 : u0020 -37 -, u0020 -37 +, rq -37 , ' -37 , cq -37 -, rq -37 -e . -37 +, u0020 -37 e , -37 +e . -37 +'e , -37 +'e . -37 +^e , -37 +^e . -37 +:e , -37 +:e . -37 +`e , -37 +`e . -37 +f , -75 +f o -10 +f 'o -10 +f ^o -10 +f :o -10 +f `o -10 +f /o -10 +f ~o -10 +f . -75 +f rq 75 f ' 75 f cq 75 -f rq 75 -f . -75 -f o -10 -f , -75 -g . -50 g , -50 +g . -50 l y -10 -o . -50 +l 'y -10 +l :y -10 +/l y -10 +/l 'y -10 +/l :y -10 o , -50 -p . -50 +o . -50 +'o , -50 +'o . -50 +^o , -50 +^o . -50 +:o , -50 +:o . -50 +`o , -50 +`o . -50 +/o , -50 +/o . -50 +~o , -50 +~o . -50 p , -50 -. u0020 -37 +p . -50 +. rq -37 . ' -37 . cq -37 -. rq -37 +. u0020 -37 lq A -75 +lq 'A -75 +lq ^A -75 +lq :A -75 +lq `A -75 +lq oA -75 +lq ~A -75 rq u0020 -37 +` A -75 +oq A -75 +` 'A -75 +oq 'A -75 +` ^A -75 +oq ^A -75 +` :A -75 +oq :A -75 +` `A -75 +oq `A -75 +` oA -75 +oq oA -75 +` ~A -75 +oq ~A -75 ` ` -37 ` oq -37 oq ` -37 oq oq -37 -` A -75 -oq A -75 -' s -25 -cq s -25 +' d -37 +cq d -37 ' ' -37 ' cq -37 cq ' -37 cq cq -37 -' d -37 -cq d -37 -r ; -25 -r s -10 -r . -125 -r k -18 +' s -25 +cq s -25 +' vs -25 +cq vs -25 +r : -25 +r , -125 r - -75 r hy -75 -r , -125 -r : -25 -s . -50 +r k -18 +r . -125 +r s -10 +r vs -10 +r ; -25 s , -50 +s . -50 +vs , -50 +vs . -50 ; u0020 -37 +u0020 A -37 +u0020 'A -37 +u0020 ^A -37 +u0020 :A -37 +u0020 `A -37 +u0020 oA -37 +u0020 ~A -37 +u0020 T -37 +u0020 V -37 +u0020 W -37 +u0020 Y -37 +u0020 'Y -37 +u0020 :Y -37 +u0020 lq -37 u0020 ` -37 u0020 oq -37 -u0020 lq -37 -u0020 Y -37 -u0020 W -37 -u0020 V -37 -u0020 T -37 -u0020 A -37 -v . -75 v , -75 -w . -75 +v . -75 w , -75 -y . -75 +w . -75 y , -75 +y . -75 +'y , -75 +'y . -75 +:y , -75 +:y . -75 + charset ha 606,690,0,0,-39 2 0 asciicircum ti 606,322,0,0,-22 0 1 asciitilde @@ -216,6 +922,7 @@ vz 463,690,15,30,83,30 2 5 zcaron :Y 685,902,0,125,19,107 2 6 Ydieresis tm 950,722,0,68,18,68 2 7 trademark aq 278,737,0,9,-101,9 2 8 quotesingle +Eu 556,705,16,101,75,101 2 9 Euro space 278 0 32 space ! 333,737,15,20,33,20 2 33 exclam " 400,737,0,13,-77,13 2 34 quotedbl @@ -343,15 +1050,15 @@ fl 611,737,205,26,118,26 3 141 fl .i 333,466,15,0,21 0 144 dotlessi ga 333,690,0,0,-21 2 146 grave a" 333,690,0,172,18,107 2 147 hungarumlaut -a. 333,646,0,0,-96 2 148 dotaccent +a. 333,715,0,0,-96 2 148 dotaccent ab 333,677,0,87,-19,87 2 149 breve ah 333,690,0,95,-23,95 2 150 caron ao 333,712,0,31,-64,31 2 151 ring -ho 333,0,215,0,-18 1 152 ogonek +ho 333,4,220,51,4,51 1 152 ogonek lq 389,737,0,67,11,67 2 153 quotedblleft rq 389,737,0,67,11,67 2 154 quotedblright oe 778,466,15,0,48 0 155 oe -/l 333,737,15,57,75,57 2 156 lslash +/l 333,737,15,11,52,11 2 156 lslash Bq 389,109,165,0,128 0 157 quotedblbase OE 981,722,0,44,10,44 2 158 OE /L 667,722,0,10,83,10 2 159 Lslash @@ -362,7 +1069,7 @@ Cs 556,597,0,24,24,24 0 164 currency Ye 556,690,0,118,10,107 2 165 yen bb 606,675,175,0,-217 2 166 brokenbar sc 500,737,147,30,60,30 2 167 section -ad 333,646,0,76,-9,76 2 168 dieresis +ad 333,708,0,76,-9,76 2 168 dieresis co 747,737,15,53,52,53 2 169 copyright Of 422,705,0,48,-22,48 2 170 ordfeminine fo 333,402,0,0,10 0 171 guilsinglleft @@ -375,7 +1082,7 @@ t+- 606,506 0 177 plusminus S2 333,705,0,76,50,76 2 178 twosuperior S3 333,705,0,76,28,76 2 179 threesuperior aa 333,690,0,72,-82,72 2 180 acute -mc 611,466,205,0,110 1 181 mu +mc 611,466,205,0,150 1 181 mu ps 650,722,132,65,2,65 2 182 paragraph pc 278,374,0,0,-21 0 183 periodcentered ac 333,0,215,0,47 1 184 cedilla diff --git a/contrib/groff/font/devps/NR b/contrib/groff/font/devps/NR index 0f4a683d5a..cfda72642b 100644 --- a/contrib/groff/font/devps/NR +++ b/contrib/groff/font/devps/NR @@ -1,198 +1,870 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName New Century Schoolbook Roman +# Version 003.001 +# FamilyName New Century Schoolbook +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1991, 1992, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Copyright (c) 1985, 1987, 1989, 1991, 1992, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 13:45:59 1999 +# Comment UniqueID 44728 +# Comment VMusage 33757 40693 + name NR internalname NewCenturySchlbk-Roman spacewidth 278 encoding text.enc ligatures fi fl 0 + kernpairs -A y -37 -A w -25 -A v -37 +A T -18 +A U -30 +A 'U -30 +A ^U -30 +A :U -30 +A `U -30 +A V -75 +A W -50 +A Y -75 +A 'Y -75 +A :Y -75 +A rq -74 A ' -74 A cq -74 -A rq -74 -A Y -75 -A W -50 -A V -75 -A U -30 -A T -18 -B . -37 -B , -37 +A v -37 +A w -25 +A y -37 +A 'y -37 +A :y -37 +'A T -18 +'A U -30 +'A 'U -30 +'A ^U -30 +'A :U -30 +'A `U -30 +'A V -75 +'A W -50 +'A Y -75 +'A 'Y -75 +'A :Y -75 +'A rq -74 +'A ' -74 +'A cq -74 +'A v -37 +'A w -25 +'A y -37 +'A 'y -37 +'A :y -37 +^A T -18 +^A U -30 +^A 'U -30 +^A ^U -30 +^A :U -30 +^A `U -30 +^A V -75 +^A W -50 +^A Y -75 +^A 'Y -75 +^A :Y -75 +^A rq -74 +^A ' -74 +^A cq -74 +^A v -37 +^A w -25 +^A y -37 +^A 'y -37 +^A :y -37 +:A T -18 +:A U -30 +:A 'U -30 +:A ^U -30 +:A :U -30 +:A `U -30 +:A V -75 +:A W -50 +:A Y -75 +:A 'Y -75 +:A :Y -75 +:A rq -74 +:A ' -74 +:A cq -74 +:A v -37 +:A w -25 +:A y -37 +:A 'y -37 +:A :y -37 +`A T -18 +`A U -30 +`A 'U -30 +`A ^U -30 +`A :U -30 +`A `U -30 +`A V -75 +`A W -50 +`A Y -75 +`A 'Y -75 +`A :Y -75 +`A rq -74 +`A ' -74 +`A cq -74 +`A v -37 +`A w -25 +`A y -37 +`A 'y -37 +`A :y -37 +oA T -18 +oA U -30 +oA 'U -30 +oA ^U -30 +oA :U -30 +oA `U -30 +oA V -75 +oA W -50 +oA Y -75 +oA 'Y -75 +oA :Y -75 +oA rq -74 +oA ' -74 +oA cq -74 +oA v -37 +oA w -25 +oA y -37 +oA 'y -37 +oA :y -37 +~A T -18 +~A U -30 +~A 'U -30 +~A ^U -30 +~A :U -30 +~A `U -30 +~A V -75 +~A W -50 +~A Y -75 +~A 'Y -75 +~A :Y -75 +~A rq -74 +~A ' -74 +~A cq -74 +~A v -37 +~A w -25 +~A y -37 +~A 'y -37 +~A :y -37 B A -18 -C . -37 -C , -37 +B 'A -18 +B ^A -18 +B :A -18 +B `A -18 +B oA -18 +B ~A -18 +B , -37 +B . -37 C A -18 -D . -37 -D , -37 -D Y -18 +C 'A -18 +C ^A -18 +C :A -18 +C `A -18 +C oA -18 +C ~A -18 +C , -37 +C . -37 +,C A -18 +,C 'A -18 +,C ^A -18 +,C :A -18 +,C `A -18 +,C oA -18 +,C ~A -18 +,C , -37 +,C . -37 D V -18 -F r -10 -F . -125 -F o -55 -F i -10 -F e -55 -F , -125 -F a -65 +D Y -18 +D 'Y -18 +D :Y -18 +D , -37 +D . -37 F A -50 -G . -37 +F 'A -50 +F ^A -50 +F :A -50 +F `A -50 +F oA -50 +F ~A -50 +F a -65 +F 'a -65 +F ^a -65 +F :a -65 +F `a -65 +F oa -65 +F ~a -65 +F , -125 +F e -55 +F 'e -55 +F ^e -55 +F :e -55 +F `e -55 +F i -10 +F 'i -10 +F ^i -10 +F :i -10 +F `i -10 +F o -55 +F 'o -55 +F ^o -55 +F :o -55 +F `o -55 +F /o -55 +F ~o -55 +F . -125 +F r -10 G , -37 -J u -25 -J . -74 -J o -25 -J e -25 -J , -74 -J a -25 +G . -37 J A -18 -K y -25 -K o 10 +J 'A -18 +J ^A -18 +J :A -18 +J `A -18 +J oA -18 +J ~A -18 +J a -25 +J 'a -25 +J ^a -25 +J :a -25 +J `a -25 +J oa -25 +J ~a -25 +J , -74 +J e -25 +J 'e -25 +J ^e -25 +J :e -25 +J `e -25 +J o -25 +J 'o -25 +J ^o -25 +J :o -25 +J `o -25 +J /o -25 +J ~o -25 +J . -74 +J u -25 +J 'u -25 +J ^u -25 +J :u -25 +J `u -25 K e 10 -L y -25 +K 'e 10 +K ^e 10 +K :e 10 +K `e 10 +K o 10 +K 'o 10 +K ^o 10 +K :o 10 +K `o 10 +K /o 10 +K ~o 10 +K y -25 +K 'y -25 +K :y -25 +L T -75 +L V -91 +L W -74 +L Y -74 +L 'Y -74 +L :Y -74 +L rq -100 L ' -100 L cq -100 -L rq -100 -L Y -74 -L W -74 -L V -91 -L T -75 -N . -55 +L y -25 +L 'y -25 +L :y -25 +/L T -75 +/L V -91 +/L W -74 +/L Y -74 +/L 'Y -74 +/L :Y -74 +/L rq -100 +/L ' -100 +/L cq -100 +/L y -25 +/L 'y -25 +/L :y -25 N , -55 -O . -37 -O , -37 -O Y -18 -O V -18 +N . -55 +~N , -55 +~N . -55 O T 10 -P . -125 -P o -37 -P e -37 -P , -125 -P a -37 +O V -18 +O Y -18 +O 'Y -18 +O :Y -18 +O , -37 +O . -37 +'O T 10 +'O V -18 +'O Y -18 +'O 'Y -18 +'O :Y -18 +'O , -37 +'O . -37 +^O T 10 +^O V -18 +^O Y -18 +^O 'Y -18 +^O :Y -18 +^O , -37 +^O . -37 +:O T 10 +:O V -18 +:O Y -18 +:O 'Y -18 +:O :Y -18 +:O , -37 +:O . -37 +`O T 10 +`O V -18 +`O Y -18 +`O 'Y -18 +`O :Y -18 +`O , -37 +`O . -37 +/O T 10 +/O V -18 +/O Y -18 +/O 'Y -18 +/O :Y -18 +/O , -37 +/O . -37 +~O T 10 +~O V -18 +~O Y -18 +~O 'Y -18 +~O :Y -18 +~O , -37 +~O . -37 P A -55 -Q . -25 +P 'A -55 +P ^A -55 +P :A -55 +P `A -55 +P oA -55 +P ~A -55 +P a -37 +P 'a -37 +P ^a -37 +P :a -37 +P `a -37 +P oa -37 +P ~a -37 +P , -125 +P e -37 +P 'e -37 +P ^e -37 +P :e -37 +P `e -37 +P o -37 +P 'o -37 +P ^o -37 +P :o -37 +P `o -37 +P /o -37 +P ~o -37 +P . -125 Q , -25 -S . -37 +Q . -25 S , -37 -T ; -37 -T . -125 -T o -55 +S . -37 +vS , -37 +vS . -37 +T A -18 +T 'A -18 +T ^A -18 +T :A -18 +T `A -18 +T oA -18 +T ~A -18 +T O 10 +T 'O 10 +T ^O 10 +T :O 10 +T `O 10 +T /O 10 +T ~O 10 +T a -55 +T 'a -55 +T ^a -55 +T :a -55 +T `a -55 +T oa -55 +T ~a -55 +T : -37 +T , -125 +T e -55 +T 'e -55 +T ^e -55 +T :e -55 +T `e -55 T - -100 T hy -100 -T e -55 -T , -125 -T : -37 -T a -55 -T O 10 -T A -18 -U . -100 -U , -100 +T o -55 +T 'o -55 +T ^o -55 +T :o -55 +T `o -55 +T /o -55 +T ~o -55 +T . -125 +T ; -37 U A -30 -V u -75 -V ; -75 -V . -125 -V o -75 -V i -18 +U 'A -30 +U ^A -30 +U :A -30 +U `A -30 +U oA -30 +U ~A -30 +U , -100 +U . -100 +'U A -30 +'U 'A -30 +'U ^A -30 +'U :A -30 +'U `A -30 +'U oA -30 +'U ~A -30 +'U , -100 +'U . -100 +^U A -30 +^U 'A -30 +^U ^A -30 +^U :A -30 +^U `A -30 +^U oA -30 +^U ~A -30 +^U , -100 +^U . -100 +:U A -30 +:U 'A -30 +:U ^A -30 +:U :A -30 +:U `A -30 +:U oA -30 +:U ~A -30 +:U , -100 +:U . -100 +`U A -30 +`U 'A -30 +`U ^A -30 +`U :A -30 +`U `A -30 +`U oA -30 +`U ~A -30 +`U , -100 +`U . -100 +V A -74 +V 'A -74 +V ^A -74 +V :A -74 +V `A -74 +V oA -74 +V ~A -74 +V O -18 +V 'O -18 +V ^O -18 +V :O -18 +V `O -18 +V /O -18 +V ~O -18 +V a -85 +V 'a -85 +V ^a -85 +V :a -85 +V `a -85 +V oa -85 +V ~a -85 +V : -75 +V , -125 +V e -75 +V 'e -75 +V ^e -75 +V :e -75 +V `e -75 V - -100 V hy -100 -V e -75 -V , -125 -V : -75 -V a -85 -V O -18 -V A -74 -W y -55 -W u -55 -W ; -100 -W . -125 -W o -60 -W i -18 +V i -18 +V 'i -18 +V ^i -18 +V o -75 +V 'o -75 +V ^o -75 +V :o -75 +V `o -75 +V /o -75 +V ~o -75 +V . -125 +V ; -75 +V u -75 +V 'u -75 +V ^u -75 +V :u -75 +V `u -75 +W A -50 +W 'A -50 +W ^A -50 +W :A -50 +W `A -50 +W oA -50 +W ~A -50 +W a -75 +W 'a -75 +W ^a -75 +W :a -75 +W `a -75 +W oa -75 +W ~a -75 +W : -100 +W , -125 +W e -60 +W 'e -60 +W ^e -60 +W :e -60 +W `e -60 W - -100 W hy -100 -W e -60 -W , -125 -W : -100 -W a -75 -W A -50 -Y u -91 -Y ; -75 -Y . -100 -Y o -100 -Y i -18 +W i -18 +W 'i -18 +W ^i -18 +W o -60 +W 'o -60 +W ^o -60 +W :o -60 +W `o -60 +W /o -60 +W ~o -60 +W . -125 +W ; -100 +W u -55 +W 'u -55 +W ^u -55 +W :u -55 +W `u -55 +W y -55 +W 'y -55 +W :y -55 +Y A -75 +Y 'A -75 +Y ^A -75 +Y :A -75 +Y `A -75 +Y oA -75 +Y ~A -75 +Y O -18 +Y 'O -18 +Y ^O -18 +Y :O -18 +Y `O -18 +Y /O -18 +Y ~O -18 +Y a -100 +Y 'a -100 +Y ^a -100 +Y :a -100 +Y `a -60 +Y oa -100 +Y ~a -100 +Y : -75 +Y , -100 +Y e -100 +Y 'e -100 +Y ^e -100 +Y :e -60 +Y `e -60 Y - -125 Y hy -125 -Y e -100 -Y , -100 -Y : -75 -Y a -100 -Y O -18 -Y A -75 -a y -10 -a w -10 +Y i -18 +Y 'i -18 +Y ^i -18 +Y o -100 +Y 'o -100 +Y ^o -100 +Y :o -60 +Y `o -60 +Y /o -100 +Y ~o -100 +Y . -100 +Y ; -75 +Y u -91 +Y 'u -91 +Y ^u -91 +Y :u -91 +Y `u -91 +'Y A -75 +'Y 'A -75 +'Y ^A -75 +'Y :A -75 +'Y `A -75 +'Y oA -75 +'Y ~A -75 +'Y O -18 +'Y 'O -18 +'Y ^O -18 +'Y :O -18 +'Y `O -18 +'Y /O -18 +'Y ~O -18 +'Y a -100 +'Y 'a -100 +'Y ^a -100 +'Y :a -100 +'Y `a -60 +'Y oa -100 +'Y ~a -100 +'Y : -75 +'Y , -100 +'Y e -100 +'Y 'e -100 +'Y ^e -100 +'Y :e -60 +'Y `e -60 +'Y - -125 +'Y hy -125 +'Y i -18 +'Y 'i -18 +'Y ^i -18 +'Y o -100 +'Y 'o -100 +'Y ^o -100 +'Y :o -60 +'Y `o -60 +'Y /o -100 +'Y ~o -100 +'Y . -100 +'Y ; -75 +'Y u -91 +'Y 'u -91 +'Y ^u -91 +'Y :u -91 +'Y `u -91 +:Y A -75 +:Y 'A -75 +:Y ^A -75 +:Y :A -75 +:Y `A -75 +:Y oA -75 +:Y ~A -75 +:Y O -18 +:Y 'O -18 +:Y ^O -18 +:Y :O -18 +:Y `O -18 +:Y /O -18 +:Y ~O -18 +:Y a -100 +:Y 'a -100 +:Y ^a -100 +:Y :a -100 +:Y `a -60 +:Y oa -100 +:Y ~a -100 +:Y : -75 +:Y , -100 +:Y e -100 +:Y 'e -100 +:Y ^e -100 +:Y :e -60 +:Y `e -60 +:Y - -125 +:Y hy -125 +:Y i -18 +:Y 'i -18 +:Y ^i -18 +:Y o -100 +:Y 'o -100 +:Y ^o -100 +:Y :o -60 +:Y `o -60 +:Y /o -100 +:Y ~o -100 +:Y . -100 +:Y ; -75 +:Y u -91 +:Y 'u -91 +:Y ^u -91 +:Y :u -91 +:Y `u -91 a v -10 -b . -18 +a w -10 +a y -10 +a 'y -10 +a :y -10 +'a v -10 +'a w -10 +'a y -10 +'a 'y -10 +'a :y -10 +^a v -10 +^a w -10 +^a y -10 +^a 'y -10 +^a :y -10 +:a v -10 +:a w -10 +:a y -10 +:a 'y -10 +:a :y -10 +`a v -10 +`a w -10 +`a y -10 +`a 'y -10 +`a :y -10 +oa v -10 +oa w -10 +oa y -10 +oa 'y -10 +oa :y -10 +~a v -10 +~a w -10 +~a y -10 +~a 'y -10 +~a :y -10 b , -18 -c . -18 -c l -7 -c k -7 -c h -7 +b . -18 c , -18 +c h -7 +c k -7 +c l -7 +c /l -7 +c . -18 +,c , -18 +,c h -7 +,c k -7 +,c l -7 +,c /l -7 +,c . -18 : u0020 -37 -, u0020 -37 +, rq -37 , ' -37 , cq -37 -, rq -37 -e . -18 +, u0020 -37 e , -18 +e . -18 +'e , -18 +'e . -18 +^e , -18 +^e . -18 +:e , -18 +:e . -18 +`e , -18 +`e . -18 +f , -37 +f . -37 +f rq 100 f ' 100 f cq 100 -f rq 100 -f . -37 -f , -37 -g . -25 g , -25 -o . -18 +g . -25 o , -18 -p . -18 +o . -18 +'o , -18 +'o . -18 +^o , -18 +^o . -18 +:o , -18 +:o . -18 +`o , -18 +`o . -18 +/o , -18 +/o . -18 +~o , -18 +~o . -18 p , -18 -. u0020 -37 +p . -18 +. rq -37 . ' -37 . cq -37 -. rq -37 +. u0020 -37 lq A -74 +lq 'A -74 +lq ^A -74 +lq :A -74 +lq `A -74 +lq oA -74 +lq ~A -74 rq u0020 -37 +` A -74 +oq A -74 +` 'A -74 +oq 'A -74 +` ^A -74 +oq ^A -74 +` :A -74 +oq :A -74 +` `A -74 +oq `A -74 +` oA -74 +oq oA -74 +` ~A -74 +oq ~A -74 ` ` -25 ` oq -25 oq ` -25 oq oq -25 -` A -74 -oq A -74 -' s -25 -cq s -25 +' d -37 +cq d -37 ' ' -25 ' cq -25 cq ' -25 cq cq -25 -' d -37 -cq d -37 -r . -100 +' s -25 +cq s -25 +' vs -25 +cq vs -25 +r , -100 r - -37 r hy -37 -r , -100 -s . -25 +r . -100 s , -25 +s . -25 +vs , -25 +vs . -25 ; u0020 -37 +u0020 A -37 +u0020 'A -37 +u0020 ^A -37 +u0020 :A -37 +u0020 `A -37 +u0020 oA -37 +u0020 ~A -37 +u0020 T -37 +u0020 V -37 +u0020 W -37 +u0020 Y -37 +u0020 'Y -37 +u0020 :Y -37 +u0020 lq -37 u0020 ` -37 u0020 oq -37 -u0020 lq -37 -u0020 Y -37 -u0020 W -37 -u0020 V -37 -u0020 T -37 -u0020 A -37 -v . -125 v , -125 -w . -125 -w , -125 +v . -125 w a -18 -y . -125 +w 'a -18 +w ^a -18 +w :a -18 +w `a -18 +w oa -18 +w ~a -18 +w , -125 +w . -125 y , -125 +y . -125 +'y , -125 +'y . -125 +:y , -125 +:y . -125 + charset ha 606,690 2 0 asciicircum ti 606,322 0 1 asciitilde @@ -203,6 +875,7 @@ vz 481,695 2 5 zcaron :Y 704,883,0,11,11 2 6 Ydieresis tm 1000,722 2 7 trademark aq 204,737 2 8 quotesingle +Eu 556,705,15 2 9 Euro space 278 0 32 space ! 296,737,15 2 33 exclam " 389,737 2 34 quotedbl @@ -330,11 +1003,11 @@ fl 611,737 2 141 fl .i 315,464 0 144 dotlessi ga 333,699 2 146 grave a" 333,699,0,83,9 2 147 hungarumlaut -a. 333,645 0 148 dotaccent +a. 333,704 2 148 dotaccent ab 333,685 2 149 breve ah 333,695 2 150 caron ao 333,722 2 151 ring -ho 333,0,215 1 152 ogonek +ho 333,4,220 1 152 ogonek lq 389,737 2 153 quotedblleft rq 389,737 2 154 quotedblright oe 833,479,15 0 155 oe @@ -349,7 +1022,7 @@ Cs 556,597 0 164 currency Ye 556,690,0,1,1 2 165 yen bb 606,675,175 2 166 brokenbar sc 500,737,147 2 167 section -ad 333,645 0 168 dieresis +ad 333,704 2 168 dieresis co 737,737,15,7,8 2 169 copyright Of 334,705,0,4,4 2 170 ordfeminine fo 259,398 0 171 guilsinglleft @@ -421,7 +1094,7 @@ ae 796,479,15 0 230 ae 'i 315,699 2 237 iacute ^i 315,695 2 238 icircumflex :i 315,645 0 239 idieresis -Sd 500,752,15 2 240 eth +Sd 500,737,15 2 240 eth ~n 611,655 0 241 ntilde `o 500,699,15 2 242 ograve 'o 500,699,15 2 243 oacute diff --git a/contrib/groff/font/devps/PB b/contrib/groff/font/devps/PB index bed42bf0a1..9c79124008 100644 --- a/contrib/groff/font/devps/PB +++ b/contrib/groff/font/devps/PB @@ -1,138 +1,481 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Palatino Bold +# Version 003.001 +# FamilyName Palatino +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1992, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Palatino is a trademark of Linotype-Hell AG and/or its subsidiaries. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1992, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 13:21:36 1999 +# Comment UniqueID 44717 +# Comment VMusage 41560 52496 + name PB internalname Palatino-Bold spacewidth 250 encoding text.enc ligatures fi fl 0 + kernpairs -A y -70 -A w -70 -A v -70 -A u0020 -18 +A T -92 +A V -129 +A W -90 +A Y -111 +A 'Y -111 +A :Y -111 A ' -92 A cq -92 -A Y -111 -A W -90 -A V -129 -A T -92 -F . -111 -F , -111 +A u0020 -18 +A v -70 +A w -70 +A y -70 +A 'y -70 +A :y -70 +'A T -92 +'A V -129 +'A W -90 +'A Y -111 +'A 'Y -111 +'A :Y -111 +'A ' -92 +'A cq -92 +'A u0020 -18 +'A v -70 +'A w -70 +'A y -70 +'A 'y -70 +'A :y -70 +^A T -92 +^A V -129 +^A W -90 +^A Y -111 +^A 'Y -111 +^A :Y -111 +^A ' -92 +^A cq -92 +^A u0020 -18 +^A v -70 +^A w -70 +^A y -70 +^A 'y -70 +^A :y -70 +:A T -92 +:A V -129 +:A W -90 +:A Y -111 +:A 'Y -111 +:A :Y -111 +:A ' -92 +:A cq -92 +:A u0020 -18 +:A v -70 +:A w -70 +:A y -70 +:A 'y -70 +:A :y -70 +`A T -92 +`A V -129 +`A W -90 +`A Y -111 +`A 'Y -111 +`A :Y -111 +`A ' -92 +`A cq -92 +`A u0020 -18 +`A v -70 +`A w -70 +`A y -70 +`A 'y -70 +`A :y -70 +oA T -92 +oA V -129 +oA W -90 +oA Y -111 +oA 'Y -111 +oA :Y -111 +oA ' -92 +oA cq -92 +oA u0020 -18 +oA v -70 +oA w -70 +oA y -70 +oA 'y -70 +oA :y -70 +~A T -92 +~A V -129 +~A W -90 +~A Y -111 +~A 'Y -111 +~A :Y -111 +~A ' -92 +~A cq -92 +~A u0020 -18 +~A v -70 +~A w -70 +~A y -70 +~A 'y -70 +~A :y -70 F A -55 -L y -74 -L u0020 -18 +F 'A -55 +F ^A -55 +F :A -55 +F `A -55 +F oA -55 +F ~A -55 +F , -111 +F . -111 +L T -74 +L V -92 +L W -92 +L Y -92 +L 'Y -92 +L :Y -92 L ' -74 L cq -74 -L Y -92 -L W -92 -L V -92 -L T -74 -P . -129 -P , -129 +L u0020 -18 +L y -74 +L 'y -74 +L :y -74 +/L T -74 +/L V -92 +/L W -92 +/L Y -92 +/L 'Y -92 +/L :Y -92 +/L ' -74 +/L cq -74 +/L u0020 -18 +/L y -74 +/L 'y -74 +/L :y -74 P A -74 -R y -30 -R Y -55 -R W -37 -R V -74 +P 'A -74 +P ^A -74 +P :A -74 +P `A -74 +P oA -74 +P ~A -74 +P , -129 +P . -129 R T -55 -T y -90 -T w -90 -T u -129 -T ; -74 -T s -111 -T r -111 -T . -92 -T o -111 -T i -55 +R V -74 +R W -37 +R Y -55 +R 'Y -55 +R :Y -55 +R y -30 +R 'y -30 +R :y -30 +T A -92 +T 'A -92 +T ^A -92 +T :A -92 +T `A -92 +T oA -92 +T ~A -92 +T a -111 +T 'a -111 +T ^a -71 +T :a -71 +T `a -71 +T oa -111 +T ~a -111 +T c -129 +T ,c -129 +T : -74 +T , -92 +T e -111 +T 'e -111 +T ^e -71 +T :e -71 +T `e -71 T - -92 T hy -92 -T e -111 -T , -92 -T : -74 -T c -129 -T a -111 -T A -92 -V y -90 -V u -92 -V ; -74 -V r -111 -V . -129 -V o -111 -V i -55 +T i -55 +T 'i -55 +T o -111 +T 'o -111 +T ^o -111 +T :o -111 +T `o -111 +T /o -111 +T ~o -111 +T . -92 +T r -111 +T s -111 +T vs -71 +T ; -74 +T u -129 +T 'u -129 +T ^u -129 +T :u -129 +T `u -129 +T w -90 +T y -90 +T 'y -90 +T :y -90 +V A -129 +V 'A -129 +V ^A -129 +V :A -129 +V `A -129 +V oA -129 +V ~A -129 +V a -111 +V 'a -111 +V ^a -111 +V :a -111 +V `a -111 +V oa -111 +V ~a -71 +V : -74 +V , -129 +V e -111 +V 'e -111 +V ^e -111 +V :e -111 +V `e -111 V - -92 V hy -92 -V e -111 -V , -129 -V : -74 -V a -111 -V A -129 -W y -74 -W u -74 -W ; -37 -W r -74 -W . -37 -W o -74 -W i -37 +V i -55 +V 'i -55 +V o -111 +V 'o -111 +V ^o -111 +V :o -111 +V `o -111 +V /o -111 +V ~o -111 +V . -129 +V r -111 +V ; -74 +V u -92 +V 'u -92 +V ^u -92 +V :u -92 +V `u -92 +V y -90 +V 'y -90 +V :y -90 +W A -90 +W 'A -90 +W ^A -90 +W :A -90 +W `A -90 +W oA -90 +W ~A -90 +W a -74 +W 'a -74 +W ^a -74 +W :a -74 +W `a -74 +W oa -74 +W ~a -74 +W : -37 +W , -92 +W e -74 +W 'e -74 +W ^e -74 +W :e -74 +W `e -74 W - -37 W hy -37 -W e -74 -W , -92 -W : -37 -W a -74 -W A -90 -Y v -74 -Y u -74 -Y ; -55 -Y q -92 -Y . -74 -Y p -74 -Y o -74 -Y i -55 +W i -37 +W 'i -37 +W o -74 +W 'o -74 +W ^o -74 +W :o -74 +W `o -74 +W /o -74 +W ~o -74 +W . -37 +W r -74 +W ; -37 +W u -74 +W 'u -74 +W ^u -74 +W :u -74 +W `u -74 +W y -74 +W 'y -74 +W :y -74 +Y A -55 +Y 'A -55 +Y ^A -55 +Y :A -55 +Y `A -55 +Y oA -55 +Y ~A -55 +Y a -74 +Y 'a -74 +Y ^a -74 +Y :a -74 +Y `a -74 +Y oa -74 +Y ~a -74 +Y : -55 +Y , -74 +Y e -74 +Y 'e -74 +Y ^e -74 +Y :e -74 +Y `e -74 Y - -74 Y hy -74 -Y e -74 -Y , -74 -Y : -55 -Y a -74 -Y A -55 +Y i -55 +Y 'i -55 +Y o -74 +Y 'o -74 +Y ^o -74 +Y :o -74 +Y `o -74 +Y /o -74 +Y ~o -74 +Y p -74 +Y . -74 +Y q -92 +Y ; -55 +Y u -74 +Y 'u -74 +Y ^u -74 +Y :u -74 +Y `u -74 +Y v -74 +'Y A -55 +'Y 'A -55 +'Y ^A -55 +'Y :A -55 +'Y `A -55 +'Y oA -55 +'Y ~A -55 +'Y a -74 +'Y 'a -74 +'Y ^a -74 +'Y :a -74 +'Y `a -74 +'Y oa -74 +'Y ~a -74 +'Y : -55 +'Y , -74 +'Y e -74 +'Y 'e -74 +'Y ^e -74 +'Y :e -74 +'Y `e -74 +'Y - -74 +'Y hy -74 +'Y i -55 +'Y 'i -55 +'Y o -74 +'Y 'o -74 +'Y ^o -74 +'Y :o -74 +'Y `o -74 +'Y /o -74 +'Y ~o -74 +'Y p -74 +'Y . -74 +'Y q -92 +'Y ; -55 +'Y u -74 +'Y 'u -74 +'Y ^u -74 +'Y :u -74 +'Y `u -74 +'Y v -74 +:Y A -55 +:Y 'A -55 +:Y ^A -55 +:Y :A -55 +:Y `A -55 +:Y oA -55 +:Y ~A -55 +:Y a -74 +:Y 'a -74 +:Y ^a -74 +:Y :a -74 +:Y `a -74 +:Y oa -74 +:Y ~a -74 +:Y : -55 +:Y , -74 +:Y e -74 +:Y 'e -74 +:Y ^e -74 +:Y :e -74 +:Y `e -74 +:Y - -74 +:Y hy -74 +:Y i -55 +:Y 'i -55 +:Y o -74 +:Y 'o -74 +:Y ^o -74 +:Y :o -74 +:Y `o -74 +:Y /o -74 +:Y ~o -74 +:Y p -74 +:Y . -74 +:Y q -92 +:Y ; -55 +:Y u -74 +:Y 'u -74 +:Y ^u -74 +:Y :u -74 +:Y `u -74 +:Y v -74 +f f -18 f ' 37 f cq 37 -f f -18 1 1 -37 ` ` -55 ` oq -55 oq ` -55 oq oq -55 -' t -18 -cq t -18 -' u0020 -55 -cq u0020 -55 -' s -55 -cq s -55 ' ' -55 ' cq -55 cq ' -55 cq cq -55 -r ' 55 -r cq 55 -r . -55 +' s -55 +cq s -55 +' vs -55 +cq vs -55 +' u0020 -55 +cq u0020 -55 +' t -18 +cq t -18 +r , -55 r - -18 r hy -18 -r , -55 -v . -111 +r . -55 +r ' 55 +r cq 55 v , -111 -w . -92 +v . -111 w , -92 -y . -92 +w . -92 y , -92 +y . -92 +'y , -92 +'y . -92 +:y , -92 +:y . -92 + charset ha 606,678 2 0 asciicircum ti 606,342 0 1 asciitilde vS 611,909,17 2 2 Scaron vZ 667,909,3 2 3 Zcaron -vs 444,693,17 2 4 scaron -vz 500,693,3 2 5 zcaron +vs 444,705,17 2 4 scaron +vz 500,705,3 2 5 zcaron :Y 667,895,3 2 6 Ydieresis tm 998,678 2 7 trademark aq 227,695 2 8 quotesingle +Eu 500,660,17,8 2 9 Euro space 250 0 32 space ! 278,688,12 2 33 exclam " 402,695 2 34 quotedbl @@ -177,8 +520,8 @@ A 778,686,3 2 65 A B 667,681,3 2 66 B C 722,695,17 2 67 C D 833,681,3 2 68 D -E 611,681,4 2 69 E -F 556,681,3 2 70 F +E 611,682,4 2 69 E +F 556,682,3 2 70 F G 833,695,17 2 71 G H 833,681,3 2 72 H I 389,681,3 2 73 I @@ -238,7 +581,7 @@ y 556,459,266 1 121 y z 500,459,3 0 122 z lC 310,725,117 2 123 braceleft { " -ba 606,720 2 124 bar +ba 606,750,250 2 124 bar | " rC 310,725,117 2 125 braceright } " @@ -260,11 +603,11 @@ fl 611,720,3 2 141 fl .i 333,471,3 0 144 dotlessi ga 333,691 2 146 grave a" 333,691,0,57,56 2 147 hungarumlaut -a. 333,671 2 148 dotaccent +a. 333,706 2 148 dotaccent ab 333,669 2 149 breve ah 333,685,0,2,2 2 150 caron ao 333,700 2 151 ring -ho 333,0,246 0 152 ogonek +ho 333,0,225 0 152 ogonek lq 500,695 2 153 quotedblleft rq 500,695 2 154 quotedblright oe 833,471,17 0 155 oe @@ -277,9 +620,9 @@ ct 500,554,106 0 162 cent Po 500,676,19,1,2 2 163 sterling Cs 500,533 0 164 currency Ye 500,695,3 2 165 yen -bb 606,720 2 166 brokenbar +bb 606,675,175 2 166 brokenbar sc 500,695,217 2 167 section -ad 333,671,0,8,8 2 168 dieresis +ad 333,690,0,8,8 2 168 dieresis co 747,695,17 2 169 copyright Of 438,660 2 170 ordfeminine fo 389,438 0 171 guilsinglleft @@ -292,7 +635,7 @@ t+- 606,505 0 177 plusminus S2 300,660 2 178 twosuperior S3 300,667 2 179 threesuperior aa 333,691 2 180 acute -mc 611,471,225 0 181 mu +mc 611,471,211 0 181 mu ps 641,683,161 2 182 paragraph pc 250,335 0 183 periodcentered ac 333,0,225 0 184 cedilla @@ -309,7 +652,7 @@ r? 444,471,231 0 191 questiondown ~A 778,885,3 2 195 Atilde :A 778,895,3 2 196 Adieresis oA 778,924,3 2 197 Aring -AE 1000,681,4 2 198 AE +AE 1000,682,4 2 198 AE ,C 722,695,225 2 199 Ccedilla `E 611,915,4 2 200 Egrave 'E 611,915,4 2 201 Eacute @@ -338,33 +681,33 @@ ss 611,720,17 2 223 germandbls `a 500,711,17 2 224 agrave 'a 500,711,17 2 225 aacute ^a 500,701,17 2 226 acircumflex -~a 500,673,17 2 227 atilde +~a 500,693,17 2 227 atilde :a 500,691,17 2 228 adieresis -oa 500,700,17 2 229 aring +oa 500,720,17 2 229 aring ae 778,471,17 0 230 ae ,c 444,471,225 0 231 ccedilla `e 500,711,17 2 232 egrave 'e 500,711,17 2 233 eacute -^e 500,701,17 2 234 ecircumflex +^e 500,721,17 2 234 ecircumflex :e 500,691,17 2 235 edieresis `i 333,711,3 2 236 igrave 'i 333,711,3 2 237 iacute ^i 333,701,3,2,2 2 238 icircumflex -:i 333,691,3,8,8 2 239 idieresis +:i 333,710,3,8,8 2 239 idieresis Sd 556,720,17 2 240 eth -~n 611,673,3 2 241 ntilde +~n 611,693,3 2 241 ntilde `o 556,711,17 2 242 ograve 'o 556,711,17 2 243 oacute ^o 556,701,17 2 244 ocircumflex -~o 556,673,17 2 245 otilde -:o 556,691,17 2 246 odieresis +~o 556,693,17 2 245 otilde +:o 556,710,17 2 246 odieresis tdi 606,510 0 247 divide /o 556,471,18 0 248 oslash `u 611,711,17 2 249 ugrave 'u 611,711,17 2 250 uacute ^u 611,701,17 2 251 ucircumflex -:u 611,691,17 2 252 udieresis +:u 611,710,17 2 252 udieresis 'y 556,711,266 3 253 yacute Tp 611,720,258 3 254 thorn -:y 556,691,266 3 255 ydieresis +:y 556,710,266 3 255 ydieresis u2026 1000,144,12 0 256 ellipsis diff --git a/contrib/groff/font/devps/PBI b/contrib/groff/font/devps/PBI index 602c4e457e..4fa1c0eb05 100644 --- a/contrib/groff/font/devps/PBI +++ b/contrib/groff/font/devps/PBI @@ -1,144 +1,507 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Palatino Bold Italic +# Version 003.001 +# FamilyName Palatino +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1992, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Palatino is a trademark of Linotype-Hell AG and/or its subsidiaries. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1992, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 13:25:04 1999 +# Comment UniqueID 44718 +# Comment VMusage 42609 53545 + name PBI internalname Palatino-BoldItalic slant 10 spacewidth 250 encoding text.enc ligatures fi fl 0 + kernpairs -A y -55 -A w -37 -A v -55 -A u0020 -55 +A T -55 +A V -74 +A W -74 +A Y -74 +A 'Y -74 +A :Y -74 A ' -55 A cq -55 -A Y -74 -A W -74 -A V -74 -A T -55 -F u0020 -18 -F . -111 -F , -111 +A u0020 -55 +A v -55 +A w -37 +A y -55 +A 'y -55 +A :y -55 +'A T -55 +'A V -74 +'A W -74 +'A Y -74 +'A 'Y -74 +'A :Y -74 +'A ' -55 +'A cq -55 +'A u0020 -55 +'A v -55 +'A w -37 +'A y -55 +'A 'y -55 +'A :y -55 +^A T -55 +^A V -74 +^A W -74 +^A Y -74 +^A 'Y -74 +^A :Y -74 +^A ' -55 +^A cq -55 +^A u0020 -55 +^A v -55 +^A w -37 +^A y -55 +^A 'y -55 +^A :y -55 +:A T -55 +:A V -74 +:A W -74 +:A Y -74 +:A 'Y -74 +:A :Y -74 +:A ' -55 +:A cq -55 +:A u0020 -55 +:A v -55 +:A w -37 +:A y -55 +:A 'y -55 +:A :y -55 +`A T -55 +`A V -74 +`A W -74 +`A Y -74 +`A 'Y -74 +`A :Y -74 +`A ' -55 +`A cq -55 +`A u0020 -55 +`A v -55 +`A w -37 +`A y -55 +`A 'y -55 +`A :y -55 +oA T -55 +oA V -74 +oA W -74 +oA Y -74 +oA 'Y -74 +oA :Y -74 +oA ' -55 +oA cq -55 +oA u0020 -55 +oA v -55 +oA w -37 +oA y -55 +oA 'y -55 +oA :y -55 +~A T -55 +~A V -74 +~A W -74 +~A Y -74 +~A 'Y -74 +~A :Y -74 +~A ' -55 +~A cq -55 +~A u0020 -55 +~A v -55 +~A w -37 +~A y -55 +~A 'y -55 +~A :y -55 F A -74 -L y -37 -L u0020 -18 +F 'A -74 +F ^A -74 +F :A -74 +F `A -74 +F oA -74 +F ~A -74 +F , -111 +F . -111 +F u0020 -18 +L T -74 +L V -74 +L W -74 +L Y -74 +L 'Y -74 +L :Y -74 L ' -55 L cq -55 -L Y -74 -L W -74 -L V -74 -L T -74 -P u0020 -55 -P . -129 -P , -129 +L u0020 -18 +L y -37 +L 'y -37 +L :y -37 +/L T -74 +/L V -74 +/L W -74 +/L Y -74 +/L 'Y -74 +/L :Y -74 +/L ' -55 +/L cq -55 +/L u0020 -18 +/L y -37 +/L 'y -37 +/L :y -37 P A -92 -R y -20 -R Y -37 -R W -55 -R V -55 +P 'A -92 +P ^A -92 +P :A -92 +P `A -92 +P oA -92 +P ~A -92 +P , -129 +P . -129 +P u0020 -55 R T -37 -T y -80 -T w -50 -T u -92 -T ; -55 -T s -92 -T r -92 -T . -55 -T o -111 -T i -74 +R V -55 +R W -55 +R Y -37 +R 'Y -37 +R :Y -37 +R y -20 +R 'y -20 +R :y -20 +T A -55 +T 'A -55 +T ^A -55 +T :A -55 +T `A -55 +T oA -55 +T ~A -55 +T O -18 +T 'O -18 +T ^O -18 +T :O -18 +T `O -18 +T /O -18 +T ~O -18 +T a -111 +T 'a -111 +T ^a -111 +T :a -111 +T `a -111 +T oa -111 +T ~a -111 +T c -92 +T ,c -92 +T : -55 +T , -55 +T e -111 +T 'e -111 +T ^e -71 +T :e -71 +T `e -71 T - -92 T hy -92 -T e -111 -T , -55 -T : -55 -T c -92 -T a -111 -T O -18 -T A -55 -V y -50 -V u -50 -V ; -37 -V r -74 -V . -111 -V o -74 -V i -50 +T i -74 +T 'i -74 +T ^i -34 +T :i -34 +T `i -34 +T o -111 +T 'o -111 +T ^o -111 +T :o -111 +T `o -111 +T /o -111 +T ~o -111 +T . -55 +T r -92 +T s -92 +T vs -92 +T ; -55 +T u -92 +T 'u -92 +T ^u -92 +T :u -92 +T `u -92 +T w -50 +T y -80 +T 'y -80 +T :y -80 +V A -74 +V 'A -74 +V ^A -74 +V :A -74 +V `A -74 +V oA -74 +V ~A -74 +V a -92 +V 'a -92 +V ^a -92 +V :a -92 +V `a -92 +V oa -92 +V ~a -92 +V : -37 +V , -111 +V e -74 +V 'e -74 +V ^e -74 +V :e -74 +V `e -34 V - -37 V hy -37 -V e -74 -V , -111 -V : -37 -V a -92 -V A -74 -W y -30 -W u -30 -W ; -18 -W r -30 -W . -55 -W o -55 -W i -30 -W e -55 -W , -55 -W : -28 -W a -74 +V i -50 +V 'i -50 +V o -74 +V 'o -74 +V ^o -74 +V :o -74 +V `o -74 +V /o -74 +V ~o -74 +V . -111 +V r -74 +V ; -37 +V u -50 +V 'u -50 +V ^u -50 +V :u -50 +V `u -50 +V y -50 +V 'y -50 +V :y -50 W A -74 -Y v -30 -Y u -50 -Y ; -55 -Y q -92 -Y . -55 -Y p -74 -Y o -111 -Y i -54 +W 'A -74 +W ^A -74 +W :A -74 +W `A -74 +W oA -74 +W ~A -74 +W a -74 +W 'a -74 +W ^a -74 +W :a -74 +W `a -74 +W oa -74 +W ~a -74 +W : -28 +W , -55 +W e -55 +W 'e -55 +W ^e -55 +W :e -55 +W `e -55 +W i -30 +W 'i -30 +W o -55 +W 'o -55 +W ^o -55 +W :o -55 +W `o -55 +W /o -55 +W ~o -55 +W . -55 +W r -30 +W ; -18 +W u -30 +W 'u -30 +W ^u -30 +W :u -30 +W `u -30 +W y -30 +W 'y -30 +W :y -30 +Y A -55 +Y 'A -55 +Y ^A -55 +Y :A -55 +Y `A -55 +Y oA -55 +Y ~A -55 +Y a -111 +Y 'a -111 +Y ^a -111 +Y :a -111 +Y `a -111 +Y oa -111 +Y ~a -111 +Y : -55 +Y , -55 +Y e -92 +Y 'e -92 +Y ^e -92 +Y :e -92 +Y `e -92 Y - -55 Y hy -55 -Y e -92 -Y , -55 -Y : -55 -Y a -111 -Y A -55 +Y i -54 +Y 'i -54 +Y o -111 +Y 'o -111 +Y ^o -111 +Y :o -111 +Y `o -111 +Y /o -111 +Y ~o -111 +Y p -74 +Y . -55 +Y q -92 +Y ; -55 +Y u -50 +Y 'u -50 +Y ^u -50 +Y :u -50 +Y `u -50 +Y v -30 +'Y A -55 +'Y 'A -55 +'Y ^A -55 +'Y :A -55 +'Y `A -55 +'Y oA -55 +'Y ~A -55 +'Y a -111 +'Y 'a -111 +'Y ^a -111 +'Y :a -111 +'Y `a -111 +'Y oa -111 +'Y ~a -111 +'Y : -55 +'Y , -55 +'Y e -92 +'Y 'e -92 +'Y ^e -92 +'Y :e -92 +'Y `e -92 +'Y - -55 +'Y hy -55 +'Y i -54 +'Y 'i -54 +'Y o -111 +'Y 'o -111 +'Y ^o -111 +'Y :o -111 +'Y `o -111 +'Y /o -111 +'Y ~o -111 +'Y p -74 +'Y . -55 +'Y q -92 +'Y ; -55 +'Y u -50 +'Y 'u -50 +'Y ^u -50 +'Y :u -50 +'Y `u -50 +'Y v -30 +:Y A -55 +:Y 'A -55 +:Y ^A -55 +:Y :A -55 +:Y `A -55 +:Y oA -55 +:Y ~A -55 +:Y a -111 +:Y 'a -111 +:Y ^a -111 +:Y :a -111 +:Y `a -111 +:Y oa -111 +:Y ~a -111 +:Y : -55 +:Y , -55 +:Y e -92 +:Y 'e -92 +:Y ^e -92 +:Y :e -92 +:Y `e -92 +:Y - -55 +:Y hy -55 +:Y i -54 +:Y 'i -54 +:Y o -111 +:Y 'o -111 +:Y ^o -111 +:Y :o -111 +:Y `o -111 +:Y /o -111 +:Y ~o -111 +:Y p -74 +:Y . -55 +:Y q -92 +:Y ; -55 +:Y u -50 +:Y 'u -50 +:Y ^u -50 +:Y :u -50 +:Y `u -50 +:Y v -30 +f f -37 f ' 37 f cq 37 -f f -37 1 1 -55 ` ` -55 ` oq -55 oq ` -55 oq oq -55 -' t -18 -cq t -18 -' u0020 -37 -cq u0020 -37 -' s -37 -cq s -37 ' ' -55 ' cq -55 cq ' -55 cq cq -55 +' s -37 +cq s -37 +' vs -37 +cq vs -37 +' u0020 -37 +cq u0020 -37 +' t -18 +cq t -18 +r c -18 +r ,c -18 +r , -55 +r e -18 +r 'e -18 +r ^e -18 +r :e -18 +r `e -18 +r g -18 +r h -18 +r o -18 +r 'o -18 +r ^o -18 +r :o -18 +r `o -18 +r /o -18 +r ~o -18 +r . -55 +r q -18 r ' 55 r cq 55 -r q -18 -r . -55 -r o -18 -r h -18 -r g -18 -r e -18 -r , -55 -r c -18 -v . -55 v , -55 -w . -55 +v . -55 w , -55 -y . -37 +w . -55 y , -37 +y . -37 +'y , -37 +'y . -37 +:y , -37 +:y . -37 + charset ha 606,678,0,0,-13 2 0 asciicircum ti 606,346,0,0,-1 0 1 asciitilde -vS 556,896,17,51,0,51 2 2 Scaron -vZ 667,896,3,59,49,59 2 3 Zcaron -vs 444,692,17,95,25,66 2 4 scaron -vz 500,692,17,67,19,66 2 5 zcaron +vS 556,904,17,51,0,51 2 2 Scaron +vZ 667,904,3,59,49,59 2 3 Zcaron +vs 444,712,17,95,25,66 2 4 scaron +vz 500,712,17,67,19,66 2 5 zcaron :Y 611,880,3,114,-4,66 2 6 Ydieresis tm 1000,678,0,11,12,11 2 7 trademark aq 250,720,0,93,-77,66 2 8 quotesingle +Eu 500,683,18,118,58,66 2 9 Euro space 250 0 32 space ! 333,695,17,39,-8,39 2 33 exclam " 500,720,0,43,-87,43 2 34 quotedbl @@ -211,7 +574,7 @@ lB " rs " ] 333,723,102,32,71,32 2 93 bracketright rB " -a^ 333,684,0,132,-38,66 2 94 circumflex +a^ 333,692,0,132,-38,66 2 94 circumflex ^ " _ 500,0,125,50,50,50 0 95 underscore ` 278,720,0,63,-15,63 2 96 quoteleft @@ -244,11 +607,11 @@ y 556,469,271,35,37,35 1 121 y z 500,469,17,20,19,20 0 122 z lC 333,720,105,51,32,51 2 123 braceleft { " -ba 606,720,0,0,-209 2 124 bar +ba 606,750,250,0,-209 2 124 bar | " rC 333,720,105,32,51,32 2 125 braceright } " -a~ 333,654,0,158,-32,66 2 126 tilde +a~ 333,656,0,158,-32,66 2 126 tilde ~ " bq 250,145,144,20,53,20 0 128 quotesinglbase Fo 500,446,0,8,15,8 0 129 guillemotleft @@ -266,11 +629,11 @@ fl 611,726,271,70,180,66 3 141 fl .i 333,469,17,10,24,10 0 144 dotlessi ga 333,699,0,39,-60,39 2 146 grave a" 333,699,0,126,78,66 2 147 hungarumlaut -a. 333,668,0,42,-152,42 2 148 dotaccent +a. 333,695,0,42,-152,42 2 148 dotaccent ab 333,680,0,129,-46,66 2 149 breve -ah 333,684,0,162,-63,66 2 150 caron +ah 333,692,0,162,-63,66 2 150 caron ao 556,714,0,0,-227 2 151 ring -ho 333,0,206,0,18 0 152 ogonek +ho 333,0,226,0,-26 0 152 ogonek lq 500,720,0,61,-15,61 2 153 quotedblleft rq 500,720,0,69,-23,66 2 154 quotedblright oe 778,469,17,27,2,27 0 155 oe @@ -283,9 +646,9 @@ ct 500,547,105,6,-2,6 0 162 cent Po 500,683,5,51,29,51 2 163 sterling Cs 500,533,0,18,18,18 0 164 currency Ye 500,695,3,88,39,66 2 165 yen -bb 606,720,0,0,-209 2 166 brokenbar +bb 606,675,175,0,-209 2 166 brokenbar sc 556,695,151,0,3 2 167 section -ad 333,668,0,143,-40,66 2 168 dieresis +ad 333,695,0,143,-40,66 2 168 dieresis co 747,695,17,23,24,23 2 169 copyright Of 333,684,0,72,3,66 2 170 ordfeminine fo 333,446,0,9,-10,9 0 171 guilsinglleft @@ -298,7 +661,7 @@ t+- 606,501 0 177 plusminus S2 300,683,0,71,24,66 2 178 twosuperior S3 300,683,0,60,27,60 2 179 threesuperior aa 333,699,0,109,-103,66 2 180 acute -mc 556,469,232,15,65,15 0 181 mu +mc 541,465,212,15,97,15 0 181 mu ps 556,681,204,123,36,66 2 182 paragraph pc 250,324,0,6,-17,6 0 183 periodcentered ac 333,5,218,0,38 0 184 cedilla @@ -311,66 +674,66 @@ fc 333,443,0,0,15 0 187 guilsinglright r? 444,479,226,0,62 0 191 questiondown `A 722,911,3,13,85,13 2 192 Agrave 'A 722,911,3,13,85,13 2 193 Aacute -^A 722,896,3,13,85,13 2 194 Acircumflex -~A 722,866,3,13,85,13 2 195 Atilde +^A 722,904,3,13,85,13 2 194 Acircumflex +~A 722,868,3,13,85,13 2 195 Atilde :A 722,880,3,13,85,13 2 196 Adieresis oA 722,926,3,13,85,13 2 197 Aring AE 944,681,3,33,79,33 2 198 AE ,C 685,695,218,60,-19,60 2 199 Ccedilla `E 611,911,3,45,39,45 2 200 Egrave 'E 611,911,3,45,39,45 2 201 Eacute -^E 611,896,3,45,39,45 2 202 Ecircumflex +^E 611,904,3,45,39,45 2 202 Ecircumflex :E 611,880,3,45,39,45 2 203 Edieresis `I 389,911,3,73,51,66 2 204 Igrave 'I 389,911,3,81,51,66 2 205 Iacute -^I 389,896,3,104,51,66 2 206 Icircumflex +^I 389,904,3,104,51,66 2 206 Icircumflex :I 389,880,3,115,51,66 2 207 Idieresis -D 778,682,3,19,50,19 2 208 Eth -~N 778,866,3,101,52,66 2 209 Ntilde +~N 778,868,3,101,52,66 2 209 Ntilde `O 833,911,17,11,-26,11 2 210 Ograve 'O 833,911,17,11,-26,11 2 211 Oacute -^O 833,896,17,11,-26,11 2 212 Ocircumflex -~O 833,866,17,11,-26,11 2 213 Otilde +^O 833,904,17,11,-26,11 2 212 Ocircumflex +~O 833,868,17,11,-26,11 2 213 Otilde :O 833,880,17,11,-26,11 2 214 Odieresis tmu 606,479,0,0,-22 0 215 multiply /O 833,730,54,14,-7,14 2 216 Oslash `U 778,911,17,97,-33,66 2 217 Ugrave 'U 778,911,17,97,-33,66 2 218 Uacute -^U 778,896,17,97,-33,66 2 219 Ucircumflex +^U 778,904,17,97,-33,66 2 219 Ucircumflex :U 778,880,17,97,-33,66 2 220 Udieresis 'Y 611,911,3,114,-4,66 2 221 Yacute TP 667,681,3,27,39,27 2 222 Thorn ss 556,726,271,43,181,43 3 223 germandbls `a 556,719,17,13,6,13 2 224 agrave 'a 556,719,17,13,6,13 2 225 aacute -^a 556,704,17,21,6,21 2 226 acircumflex -~a 556,666,17,47,6,47 2 227 atilde +^a 556,712,17,21,6,21 2 226 acircumflex +~a 556,676,17,47,6,47 2 227 atilde :a 556,688,17,32,6,32 2 228 adieresis -oa 556,714,17,13,6,13 2 229 aring +oa 556,734,17,13,6,13 2 229 aring ae 738,469,17,23,6,23 0 230 ae -,c 444,469,218,42,18,42 0 231 ccedilla +,c 444,469,218,42,23,42 0 231 ccedilla `e 444,719,17,24,22,24 2 232 egrave 'e 444,719,17,54,22,54 2 233 eacute -^e 444,704,17,77,22,66 2 234 ecircumflex -:e 444,688,17,88,22,66 2 235 edieresis +^e 444,712,17,77,22,66 2 234 ecircumflex +:e 444,668,17,88,22,66 2 235 edieresis `i 333,719,17,39,24,39 2 236 igrave 'i 333,719,17,109,24,66 2 237 iacute -^i 333,704,17,120,24,66 2 238 icircumflex -:i 333,688,17,143,24,66 2 239 idieresis +^i 333,712,17,120,24,66 2 238 icircumflex +:i 333,668,17,143,24,66 2 239 idieresis Sd 556,726,17,40,2,40 2 240 eth -~n 556,666,17,47,33,47 2 241 ntilde +~n 556,676,17,47,33,47 2 241 ntilde `o 556,719,17,0,2 2 242 ograve 'o 556,719,17,0,2 2 243 oacute -^o 556,704,17,9,2,9 2 244 ocircumflex -~o 556,666,17,47,2,47 2 245 otilde -:o 556,688,17,32,2,32 2 246 odieresis +^o 556,712,17,21,2,21 2 244 ocircumflex +~o 556,676,17,47,2,47 2 245 otilde +:o 556,668,17,32,2,32 2 246 odieresis tdi 606,501,5 0 247 divide /o 556,506,50,16,36,16 0 248 oslash `u 556,719,17,15,28,15 2 249 ugrave 'u 556,719,17,15,28,15 2 250 uacute -^u 556,704,17,15,28,15 2 251 ucircumflex -:u 556,688,17,32,28,32 2 252 udieresis +^u 556,712,17,15,28,15 2 251 ucircumflex +:u 556,668,17,32,28,32 2 252 udieresis 'y 556,719,271,35,37,35 3 253 yacute Tp 556,726,271,10,71,10 3 254 thorn -:y 556,688,271,35,37,35 3 255 ydieresis +:y 556,668,271,35,37,35 3 255 ydieresis u2026 1000,135,17,0,-41 0 256 ellipsis diff --git a/contrib/groff/font/devps/PI b/contrib/groff/font/devps/PI index 53bc30346f..499c731ef8 100644 --- a/contrib/groff/font/devps/PI +++ b/contrib/groff/font/devps/PI @@ -1,100 +1,444 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Palatino Italic +# Version 003.001 +# FamilyName Palatino +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1992, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Palatino is a trademark of Linotype-Hell AG and/or its subsidiaries. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1992, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 13:17:38 1999 +# Comment UniqueID 44716 +# Comment VMusage 44424 55360 + name PI internalname Palatino-Italic slant 10 spacewidth 250 encoding text.enc ligatures fi fl 0 + kernpairs -A y -55 -A w -37 -A v -37 -A u0020 -37 +A T -55 +A V -74 +A W -55 +A Y -55 +A 'Y -55 +A :Y -55 A ' -55 A cq -55 -A Y -55 -A W -55 -A V -74 -A T -55 -F . -111 -F , -111 +A u0020 -37 +A v -37 +A w -37 +A y -55 +A 'y -55 +A :y -55 +'A T -55 +'A V -74 +'A W -55 +'A Y -55 +'A 'Y -55 +'A :Y -55 +'A ' -55 +'A cq -55 +'A u0020 -37 +'A v -37 +'A w -37 +'A y -55 +'A 'y -55 +'A :y -55 +^A T -55 +^A V -74 +^A W -55 +^A Y -55 +^A 'Y -55 +^A :Y -55 +^A ' -55 +^A cq -55 +^A u0020 -37 +^A v -37 +^A w -37 +^A y -55 +^A 'y -55 +^A :y -55 +:A T -55 +:A V -74 +:A W -55 +:A Y -55 +:A 'Y -55 +:A :Y -55 +:A ' -55 +:A cq -55 +:A u0020 -37 +:A v -37 +:A w -37 +:A y -55 +:A 'y -55 +:A :y -55 +`A T -55 +`A V -74 +`A W -55 +`A Y -55 +`A 'Y -55 +`A :Y -55 +`A ' -55 +`A cq -55 +`A u0020 -37 +`A v -37 +`A w -37 +`A y -55 +`A 'y -55 +`A :y -55 +oA T -55 +oA V -74 +oA W -55 +oA Y -55 +oA 'Y -55 +oA :Y -55 +oA ' -55 +oA cq -55 +oA u0020 -37 +oA v -37 +oA w -37 +oA y -55 +oA 'y -55 +oA :y -55 +~A T -55 +~A V -74 +~A W -55 +~A Y -55 +~A 'Y -55 +~A :Y -55 +~A ' -55 +~A cq -55 +~A u0020 -37 +~A v -37 +~A w -37 +~A y -55 +~A 'y -55 +~A :y -55 F A -111 -L y -37 -L u0020 -18 +F 'A -111 +F ^A -111 +F :A -111 +F `A -111 +F oA -111 +F ~A -111 +F , -111 +F . -111 +L T -74 +L V -74 +L W -74 +L Y -74 +L 'Y -74 +L :Y -74 L ' -37 L cq -37 -L Y -74 -L W -74 -L V -74 -L T -74 -P . -129 -P , -129 +L u0020 -18 +L y -37 +L 'y -37 +L :y -37 +/L T -74 +/L V -74 +/L W -74 +/L Y -74 +/L 'Y -74 +/L :Y -74 +/L ' -37 +/L cq -37 +/L u0020 -18 +/L y -37 +/L 'y -37 +/L :y -37 P A -129 -R y -37 -R Y -55 -R W -55 -R V -74 +P 'A -129 +P ^A -129 +P :A -129 +P `A -129 +P oA -129 +P ~A -129 +P , -129 +P . -129 R T -55 -T y -92 -T w -92 -T u -111 -T ; -74 -T s -111 -T r -111 -T . -74 -T o -111 -T i -55 +R V -74 +R W -55 +R Y -55 +R 'Y -55 +R :Y -55 +R y -37 +R 'y -37 +R :y -37 +T A -92 +T 'A -92 +T ^A -92 +T :A -92 +T `A -92 +T oA -92 +T ~A -92 +T O -18 +T 'O -18 +T ^O -18 +T :O -18 +T `O -18 +T /O -18 +T ~O -18 +T a -111 +T 'a -111 +T ^a -71 +T :a -71 +T `a -71 +T oa -71 +T ~a -71 +T c -111 +T ,c -111 +T : -74 +T , -74 +T e -111 +T 'e -111 +T ^e -71 +T :e -71 +T `e -71 T - -55 T hy -55 -T e -111 -T , -74 -T : -74 -T c -111 -T a -111 -T O -18 -T A -92 -V y -74 -V u -74 -V ; -37 -V r -92 -V . -129 -V o -74 -V i -74 +T i -55 +T 'i -55 +T o -111 +T 'o -111 +T ^o -71 +T :o -71 +T `o -71 +T /o -111 +T ~o -71 +T . -74 +T r -111 +T s -111 +T vs -71 +T ; -74 +T u -111 +T 'u -111 +T ^u -111 +T :u -111 +T `u -111 +T w -92 +T y -92 +T 'y -92 +T :y -92 +V A -210 +V 'A -210 +V ^A -210 +V :A -210 +V `A -210 +V oA -210 +V ~A -210 +V a -74 +V 'a -74 +V ^a -74 +V :a -74 +V `a -74 +V oa -74 +V ~a -74 +V : -37 +V , -129 +V e -92 +V 'e -92 +V ^e -52 +V :e -52 +V `e -52 V - -55 V hy -55 -V e -92 -V , -129 -V : -37 -V a -74 -V A -210 -W y -20 -W u -20 -W ; -18 -W r -20 -W . -55 -W o -20 -W i -20 +V i -74 +V 'i -74 +V ^i -34 +V :i -34 +V `i -34 +V o -74 +V 'o -74 +V ^o -74 +V :o -74 +V `o -74 +V /o -74 +V ~o -74 +V . -129 +V r -92 +V ; -37 +V u -74 +V 'u -74 +V ^u -74 +V :u -74 +V `u -74 +V y -74 +V 'y -74 +V :y -74 +W A -92 +W 'A -92 +W ^A -92 +W :A -92 +W `A -92 +W oA -92 +W ~A -92 +W a -20 +W 'a -20 +W ^a -20 +W :a -20 +W `a -20 +W oa -20 +W ~a -20 +W : -18 +W , -55 +W e -20 +W 'e -20 +W ^e -20 +W :e -20 +W `e -20 W - -18 W hy -18 -W e -20 -W , -55 -W : -18 -W a -20 -W A -92 -Y v -74 -Y u -92 -Y ; -74 -Y q -92 -Y . -92 -Y p -74 -Y o -111 -Y i -55 +W i -20 +W 'i -20 +W o -20 +W 'o -20 +W ^o -20 +W :o -20 +W `o -20 +W /o -20 +W ~o -20 +W . -55 +W r -20 +W ; -18 +W u -20 +W 'u -20 +W ^u -20 +W :u -20 +W `u -20 +W y -20 +W 'y -20 +W :y -20 +Y A -92 +Y 'A -92 +Y ^A -92 +Y :A -92 +Y `A -92 +Y oA -92 +Y ~A -92 +Y a -92 +Y 'a -92 +Y ^a -92 +Y :a -92 +Y `a -92 +Y oa -92 +Y ~a -92 +Y : -74 +Y , -92 +Y e -111 +Y 'e -111 +Y ^e -71 +Y :e -71 +Y `e -71 Y - -74 Y hy -74 -Y e -111 -Y , -92 -Y : -74 -Y a -92 -Y A -92 +Y i -55 +Y 'i -55 +Y o -111 +Y 'o -111 +Y ^o -111 +Y :o -111 +Y `o -111 +Y /o -111 +Y ~o -111 +Y p -74 +Y . -92 +Y q -92 +Y ; -74 +Y u -92 +Y 'u -92 +Y ^u -92 +Y :u -92 +Y `u -92 +Y v -74 +'Y A -92 +'Y 'A -92 +'Y ^A -92 +'Y :A -92 +'Y `A -92 +'Y oA -92 +'Y ~A -92 +'Y a -92 +'Y 'a -92 +'Y ^a -92 +'Y :a -92 +'Y `a -92 +'Y oa -92 +'Y ~a -92 +'Y : -74 +'Y , -92 +'Y e -111 +'Y 'e -111 +'Y ^e -71 +'Y :e -71 +'Y `e -71 +'Y - -74 +'Y hy -74 +'Y i -55 +'Y 'i -55 +'Y o -111 +'Y 'o -111 +'Y ^o -111 +'Y :o -111 +'Y `o -111 +'Y /o -111 +'Y ~o -111 +'Y p -74 +'Y . -92 +'Y q -92 +'Y ; -74 +'Y u -92 +'Y 'u -92 +'Y ^u -92 +'Y :u -92 +'Y `u -92 +'Y v -74 +:Y A -92 +:Y 'A -92 +:Y ^A -92 +:Y :A -92 +:Y `A -92 +:Y oA -92 +:Y ~A -92 +:Y a -92 +:Y 'a -92 +:Y ^a -92 +:Y :a -92 +:Y `a -92 +:Y oa -92 +:Y ~a -92 +:Y : -74 +:Y , -92 +:Y e -111 +:Y 'e -111 +:Y ^e -71 +:Y :e -71 +:Y `e -71 +:Y - -74 +:Y hy -74 +:Y i -55 +:Y 'i -55 +:Y o -111 +:Y 'o -111 +:Y ^o -111 +:Y :o -111 +:Y `o -111 +:Y /o -111 +:Y ~o -111 +:Y p -74 +:Y . -92 +:Y q -92 +:Y ; -74 +:Y u -92 +:Y 'u -92 +:Y ^u -92 +:Y :u -92 +:Y `u -92 +:Y v -74 f ' 55 f cq 55 1 1 -55 @@ -102,42 +446,61 @@ f cq 55 ` oq -74 oq ` -74 oq oq -74 -' t -37 -cq t -37 -' u0020 -55 -cq u0020 -55 -' s -55 -cq s -55 ' ' -74 ' cq -74 cq ' -74 cq cq -74 +' s -55 +cq s -55 +' vs -55 +cq vs -55 +' u0020 -55 +cq u0020 -55 +' t -37 +cq t -37 +r c -18 +r ,c -18 +r , -74 +r e -18 +r 'e -18 +r ^e -18 +r :e -18 +r `e -18 +r g -18 +r h -18 +r o -18 +r 'o -18 +r ^o -18 +r :o -18 +r `o -18 +r /o -18 +r ~o -18 +r . -74 +r q -18 r ' 37 r cq 37 -r q -18 -r . -74 -r o -18 -r h -18 -r g -18 -r e -18 -r , -74 -r c -18 -v . -55 v , -55 -w . -55 +v . -55 w , -55 -y . -37 +w . -55 y , -37 +y . -37 +'y , -37 +'y . -37 +:y , -37 +:y . -37 + charset ha 606,689,0,0,-1 2 0 asciicircum ti 606,339,0,0,-1 0 1 asciitilde -vS 556,907,18,33,8,33 2 2 Scaron -vZ 667,907,3,20,30,20 2 3 Zcaron -vs 389,687,11,80,41,68 2 4 scaron -vz 444,687,11,53,51,53 2 5 zcaron +vS 556,889,18,33,8,33 2 2 Scaron +vZ 667,889,3,20,30,20 2 3 Zcaron +vs 389,699,11,50,41,50 2 4 scaron +vz 444,699,11,53,51,53 2 5 zcaron :Y 667,847,3,58,-2,58 2 6 Ydieresis tm 1000,689,0,1,-2,1 2 7 trademark aq 333,733,0,5,-90,5 2 8 quotesingle +Eu 500,699,12,97,39,68 2 9 Euro space 250 0 32 space ! 333,733,8,9,-26,9 2 33 exclam " 500,733,0,5,-90,5 2 34 quotedbl @@ -216,7 +579,7 @@ _ 500,0,125,50,50,50 0 95 underscore ` 278,733,0,30,-28,30 2 96 quoteleft oq " a 444,482,11,12,46,12 0 97 a -b 463,733,11,20,13,20 2 98 b +b 463,733,11,20,14,20 2 98 b c 407,482,11,32,25,32 0 99 c d 500,733,11,33,33,33 2 100 d e 389,482,11,35,35,35 0 101 e @@ -243,7 +606,7 @@ y 500,482,276,40,58,40 1 121 y z 444,482,11,22,51,22 0 122 z lC 333,733,100,36,35,36 2 123 braceleft { " -ba 606,733,0,0,-225 2 124 bar +ba 606,750,250,0,-225 2 124 bar | " rC 333,733,100,35,36,35 2 125 braceright } " @@ -264,12 +627,12 @@ fi 528,733,276,24,212,24 3 140 fi fl 545,733,276,25,212,25 3 141 fl .i 278,482,9,13,16,13 0 144 dotlessi ga 333,687,0,27,-36,27 2 146 grave -a" 333,730,0,102,4,68 2 147 hungarumlaut -a. 333,645,0,0,-125 2 148 dotaccent +a" 333,687,0,124,34,68 2 147 hungarumlaut +a. 333,712,0,0,-139 2 148 dotaccent ab 333,677,0,110,-42,68 2 149 breve ah 333,679,0,126,-54,68 2 150 caron ao 333,708,0,76,-109,68 2 151 ring -ho 333,0,207,0,12 0 152 ogonek +ho 333,0,226,0,19 0 152 ogonek lq 500,733,0,25,-48,25 2 153 quotedblleft rq 500,733,0,25,-48,25 2 154 quotedblright oe 669,482,11,35,33,35 0 155 oe @@ -282,9 +645,9 @@ ct 500,551,96,0,-6 0 162 cent Po 500,708,18,29,48,29 2 163 sterling Cs 500,577,0,36,36,36 0 164 currency Ye 500,699,3,62,15,62 2 165 yen -bb 606,733,0,0,-225 2 166 brokenbar +bb 606,675,175,0,-225 2 166 brokenbar sc 500,706,220,13,36,13 2 167 section -ad 333,637,0,95,-28,68 0 168 dieresis +ad 333,712,0,99,-38,68 2 168 dieresis co 747,706,18,39,39,39 2 169 copyright Of 333,699,0,38,-10,38 2 170 ordfeminine fo 333,440,0,0,-7 0 171 guilsinglleft @@ -297,7 +660,7 @@ t+- 606,504,0,0,-1 0 177 plusminus S2 300,699,0,40,37,40 2 178 twosuperior S3 300,699,0,54,22,54 2 179 threesuperior aa 333,687,0,63,-72,63 2 180 acute -mc 556,482,226,6,35,6 0 181 mu +mc 504,482,211,21,110,21 0 181 mu ps 500,692,224,161,17,68 2 182 paragraph pc 250,312,0,0,-3 0 183 periodcentered ac 333,0,216,0,59 0 184 cedilla @@ -311,7 +674,7 @@ r? 500,467,246,0,-7 0 191 questiondown `A 722,897,3,5,69,5 2 192 Agrave 'A 722,897,3,5,69,5 2 193 Aacute ^A 722,889,3,5,69,5 2 194 Acircumflex -~A 722,866,3,5,69,5 2 195 Atilde +~A 722,848,3,5,69,5 2 195 Atilde :A 722,847,3,5,69,5 2 196 Adieresis oA 722,918,3,5,69,5 2 197 Aring AE 941,692,3,11,54,11 2 198 AE @@ -323,13 +686,13 @@ AE 941,692,3,11,54,11 2 198 AE `I 333,897,3,71,43,68 2 204 Igrave 'I 333,897,3,123,43,68 2 205 Iacute ^I 333,889,3,107,43,68 2 206 Icircumflex -:I 333,847,3,135,43,68 2 207 Idieresis +:I 333,847,3,139,43,68 2 207 Idieresis -D 778,692,3,13,31,13 2 208 Eth -~N 778,866,11,76,48,68 2 209 Ntilde +~N 778,848,11,76,48,68 2 209 Ntilde `O 778,897,18,20,-3,20 2 210 Ograve 'O 778,897,18,20,-3,20 2 211 Oacute ^O 778,889,18,20,-3,20 2 212 Ocircumflex -~O 778,866,18,20,-3,20 2 213 Otilde +~O 778,848,18,20,-3,20 2 213 Otilde :O 778,847,18,20,-3,20 2 214 Odieresis tmu 606,474,0,0,-33 0 215 multiply /O 778,721,39,34,18,34 2 216 Oslash @@ -343,33 +706,33 @@ ss 500,733,276,38,210,38 3 223 germandbls `a 444,707,11,12,46,12 2 224 agrave 'a 444,707,11,20,46,20 2 225 aacute ^a 444,699,11,12,46,12 2 226 acircumflex -~a 444,650,11,52,46,52 2 227 atilde -:a 444,657,11,40,46,40 2 228 adieresis +~a 444,658,11,52,46,52 2 227 atilde +:a 444,657,11,44,46,44 2 228 adieresis oa 444,728,11,12,46,12 2 229 aring ae 638,482,11,35,49,35 0 230 ae -,c 407,482,216,32,25,32 0 231 ccedilla +,c 407,482,216,32,31,32 0 231 ccedilla `e 389,707,11,35,35,35 2 232 egrave 'e 389,707,11,55,35,55 2 233 eacute ^e 389,699,11,59,35,59 2 234 ecircumflex -:e 389,657,11,67,35,67 2 235 edieresis -`i 278,707,9,43,16,43 2 236 igrave -'i 278,707,9,103,16,68 2 237 iacute +:e 389,657,11,71,35,68 2 235 edieresis +`i 278,707,9,42,16,42 2 236 igrave +'i 278,707,9,102,16,68 2 237 iacute ^i 278,699,9,95,21,68 2 238 icircumflex -:i 278,657,9,123,16,68 2 239 idieresis +:i 278,657,9,127,16,68 2 239 idieresis Sd 444,733,11,84,33,68 2 240 eth -~n 556,650,9,8,26,8 2 241 ntilde +~n 556,658,9,8,26,8 2 241 ntilde `o 444,707,11,17,33,17 2 242 ograve 'o 444,707,11,20,33,20 2 243 oacute ^o 444,699,11,17,33,17 2 244 ocircumflex -~o 444,650,11,52,33,52 2 245 otilde -:o 444,657,11,40,33,40 2 246 odieresis +~o 444,658,11,52,33,52 2 245 otilde +:o 444,657,11,44,33,44 2 246 odieresis tdi 606,504,0,0,-1 0 247 divide /o 444,510,24,66,68,66 0 248 oslash `u 556,707,11,6,18,6 2 249 ugrave -'u 556,707,11,6,18,6 2 250 uacute +'u 556,707,11,14,18,14 2 250 uacute ^u 556,699,11,6,18,6 2 251 ucircumflex :u 556,657,11,6,18,6 2 252 udieresis -'y 500,707,276,40,58,40 3 253 yacute +'y 500,707,276,42,58,42 3 253 yacute Tp 500,733,276,0,89 3 254 thorn :y 500,657,276,40,58,40 3 255 ydieresis u2026 1000,112,5,0,-52 0 256 ellipsis diff --git a/contrib/groff/font/devps/PR b/contrib/groff/font/devps/PR index 2f005e7bf3..94972baa5a 100644 --- a/contrib/groff/font/devps/PR +++ b/contrib/groff/font/devps/PR @@ -1,104 +1,450 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Palatino Roman +# Version 003.001 +# FamilyName Palatino +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1992, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Palatino is a trademark of Linotype-Hell AG and/or its subsidiaries. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1992, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 13:13:46 1999 +# Comment UniqueID 44715 +# Comment VMusage 42362 53298 + name PR internalname Palatino-Roman spacewidth 250 encoding text.enc ligatures fi fl 0 + kernpairs -A y -74 -A w -74 -A v -92 -A u0020 -55 +A T -74 +A V -111 +A W -74 +A Y -111 +A 'Y -111 +A :Y -111 A ' -74 A cq -74 -A Y -111 -A W -74 -A V -111 -A T -74 -F . -92 -F , -92 +A u0020 -55 +A v -92 +A w -74 +A y -74 +A 'y -74 +A :y -74 +'A T -74 +'A V -111 +'A W -74 +'A Y -111 +'A 'Y -111 +'A :Y -111 +'A ' -74 +'A cq -74 +'A u0020 -55 +'A v -92 +'A w -74 +'A y -74 +'A 'y -74 +'A :y -74 +^A T -74 +^A V -111 +^A W -74 +^A Y -111 +^A 'Y -111 +^A :Y -111 +^A ' -74 +^A cq -74 +^A u0020 -55 +^A v -92 +^A w -74 +^A y -74 +^A 'y -74 +^A :y -74 +:A T -74 +:A V -111 +:A W -74 +:A Y -111 +:A 'Y -111 +:A :Y -111 +:A ' -74 +:A cq -74 +:A u0020 -55 +:A v -92 +:A w -74 +:A y -74 +:A 'y -74 +:A :y -74 +`A T -74 +`A V -111 +`A W -74 +`A Y -111 +`A 'Y -111 +`A :Y -111 +`A ' -74 +`A cq -74 +`A u0020 -55 +`A v -92 +`A w -74 +`A y -74 +`A 'y -74 +`A :y -74 +oA T -74 +oA V -111 +oA W -74 +oA Y -111 +oA 'Y -111 +oA :Y -111 +oA ' -74 +oA cq -74 +oA u0020 -55 +oA v -92 +oA w -74 +oA y -74 +oA 'y -74 +oA :y -74 +~A T -74 +~A V -111 +~A W -74 +~A Y -111 +~A 'Y -111 +~A :Y -111 +~A ' -74 +~A cq -74 +~A u0020 -55 +~A v -92 +~A w -74 +~A y -74 +~A 'y -74 +~A :y -74 F A -74 -L y -55 -L u0020 -37 +F 'A -74 +F ^A -74 +F :A -74 +F `A -74 +F oA -74 +F ~A -74 +F , -92 +F . -92 +L T -74 +L V -92 +L W -74 +L Y -92 +L 'Y -92 +L :Y -92 L ' -74 L cq -74 -L Y -92 -L W -74 -L V -92 -L T -74 -P u0020 -18 -P . -129 -P , -129 +L u0020 -37 +L y -55 +L 'y -55 +L :y -55 +/L T -74 +/L V -92 +/L W -74 +/L Y -92 +/L 'Y -92 +/L :Y -92 +/L ' -74 +/L cq -74 +/L u0020 -37 +/L y -55 +/L 'y -55 +/L :y -55 P A -92 -R y -37 -R Y -37 -R W -37 -R V -55 +P 'A -92 +P ^A -92 +P :A -92 +P `A -92 +P oA -92 +P ~A -92 +P , -129 +P . -129 +P u0020 -18 R T -37 -T y -90 -T w -90 -T u -90 -T ; -55 -T s -90 -T r -90 -T . -74 -T o -92 -T i -55 +R V -55 +R W -37 +R Y -37 +R 'Y -37 +R :Y -37 +R y -37 +R 'y -37 +R :y -37 +T A -74 +T 'A -74 +T ^A -74 +T :A -74 +T `A -74 +T oA -74 +T ~A -74 +T O -18 +T 'O -18 +T ^O -18 +T :O -18 +T `O -18 +T /O -18 +T ~O -18 +T a -92 +T 'a -92 +T ^a -92 +T :a -52 +T `a -52 +T oa -92 +T ~a -52 +T c -111 +T ,c -111 +T : -55 +T , -74 +T e -92 +T 'e -92 +T ^e -92 +T :e -52 +T `e -92 T - -55 T hy -55 -T e -92 -T , -74 -T : -55 -T c -111 -T a -92 -T O -18 -T A -74 -V y -92 -V u -92 -V ; -55 -V r -92 -V . -129 -V o -111 -V i -55 +T i -55 +T 'i -55 +T o -92 +T 'o -92 +T ^o -92 +T :o -92 +T `o -92 +T /o -92 +T ~o -92 +T . -74 +T r -90 +T s -90 +T vs -50 +T ; -55 +T u -90 +T 'u -90 +T ^u -90 +T :u -90 +T `u -90 +T w -90 +T y -90 +T 'y -90 +T :y -90 +V A -111 +V 'A -111 +V ^A -111 +V :A -111 +V `A -111 +V oA -111 +V ~A -111 +V a -92 +V 'a -92 +V ^a -92 +V :a -92 +V `a -92 +V oa -92 +V ~a -92 +V : -55 +V , -129 +V e -111 +V 'e -111 +V ^e -111 +V :e -71 +V `e -71 V - -74 V hy -74 -V e -111 -V , -129 -V : -55 -V a -92 -V A -111 -W y -50 -W u -50 -W ; -18 -W r -74 -W . -92 -W o -92 -W i -55 +V i -55 +V 'i -55 +V o -111 +V 'o -111 +V ^o -111 +V :o -111 +V `o -71 +V /o -111 +V ~o -111 +V . -129 +V r -92 +V ; -55 +V u -92 +V 'u -92 +V ^u -92 +V :u -92 +V `u -92 +V y -92 +V 'y -92 +V :y -92 +W A -92 +W 'A -92 +W ^A -92 +W :A -92 +W `A -92 +W oA -92 +W ~A -92 +W a -92 +W 'a -92 +W ^a -92 +W :a -92 +W `a -92 +W oa -92 +W ~a -92 +W : -18 +W , -92 +W e -92 +W 'e -92 +W ^e -92 +W :e -92 +W `e -92 W - -55 W hy -55 -W e -92 -W , -92 -W : -18 -W a -92 -W A -92 -Y v -90 -Y u -90 -Y u0020 -18 -Y ; -74 -Y q -90 -Y . -111 -Y p -111 -Y o -92 -Y i -55 +W i -55 +W 'i -55 +W ^i -55 +W :i -55 +W `i -55 +W o -92 +W 'o -92 +W ^o -92 +W :o -92 +W `o -92 +W /o -92 +W ~o -92 +W . -92 +W r -74 +W ; -18 +W u -50 +W 'u -50 +W ^u -50 +W :u -50 +W `u -50 +W y -50 +W 'y -50 +W :y -50 +Y A -92 +Y 'A -92 +Y ^A -92 +Y :A -92 +Y `A -92 +Y oA -92 +Y ~A -92 +Y a -92 +Y 'a -92 +Y ^a -92 +Y :a -92 +Y `a -92 +Y oa -92 +Y ~a -92 +Y : -74 +Y , -111 +Y e -92 +Y 'e -92 +Y ^e -92 +Y :e -92 +Y `e -92 Y - -92 Y hy -92 -Y e -92 -Y , -111 -Y : -74 -Y a -92 -Y A -92 +Y i -55 +Y 'i -55 +Y o -92 +Y 'o -92 +Y ^o -92 +Y :o -92 +Y `o -92 +Y /o -92 +Y ~o -92 +Y p -111 +Y . -111 +Y q -90 +Y ; -74 +Y u0020 -18 +Y u -90 +Y 'u -90 +Y ^u -90 +Y :u -90 +Y `u -90 +Y v -90 +'Y A -92 +'Y 'A -92 +'Y ^A -92 +'Y :A -92 +'Y `A -92 +'Y oA -92 +'Y ~A -92 +'Y a -92 +'Y 'a -92 +'Y ^a -92 +'Y :a -92 +'Y `a -92 +'Y oa -92 +'Y ~a -92 +'Y : -74 +'Y , -111 +'Y e -92 +'Y 'e -92 +'Y ^e -92 +'Y :e -92 +'Y `e -92 +'Y - -92 +'Y hy -92 +'Y i -55 +'Y 'i -55 +'Y o -92 +'Y 'o -92 +'Y ^o -92 +'Y :o -92 +'Y `o -92 +'Y /o -92 +'Y ~o -92 +'Y p -111 +'Y . -111 +'Y q -90 +'Y ; -74 +'Y u0020 -18 +'Y u -90 +'Y 'u -90 +'Y ^u -90 +'Y :u -90 +'Y `u -90 +'Y v -90 +:Y A -92 +:Y 'A -92 +:Y ^A -92 +:Y :A -92 +:Y `A -92 +:Y oA -92 +:Y ~A -92 +:Y a -92 +:Y 'a -92 +:Y ^a -92 +:Y :a -92 +:Y `a -92 +:Y oa -92 +:Y ~a -92 +:Y : -74 +:Y , -111 +:Y e -92 +:Y 'e -92 +:Y ^e -92 +:Y :e -92 +:Y `e -92 +:Y - -92 +:Y hy -92 +:Y i -55 +:Y 'i -55 +:Y o -92 +:Y 'o -92 +:Y ^o -92 +:Y :o -92 +:Y `o -92 +:Y /o -92 +:Y ~o -92 +:Y p -111 +:Y . -111 +:Y q -90 +:Y ; -74 +:Y u0020 -18 +:Y u -90 +:Y 'u -90 +:Y ^u -90 +:Y :u -90 +:Y `u -90 +:Y v -90 +f f -18 f ' 55 f cq 55 -f f -18 1 1 -55 ` ` -37 ` oq -37 @@ -108,38 +454,67 @@ oq oq -37 ' cq -37 cq ' -37 cq cq -37 -r u -8 -r ' 74 -r cq 74 -r q -18 -r . -74 -r o -18 +r c -18 +r ,c -18 +r , -74 +r d -18 +r e -18 +r 'e -18 +r ^e -18 +r :e -18 +r `e -18 +r g -18 +r h -18 r - -18 r hy -18 -r h -18 -r g -18 -r e -18 -r d -18 -r , -74 -r c -18 -u0020 Y -18 +r o -18 +r 'o -18 +r ^o -18 +r :o -18 +r `o -18 +r /o -18 +r ~o -18 +r . -74 +r q -18 +r ' 74 +r cq 74 +r u -8 +r 'u -8 +r ^u -8 +r :u -8 +r `u -8 u0020 A -37 -v . -111 +u0020 'A -37 +u0020 ^A -37 +u0020 :A -37 +u0020 `A -37 +u0020 oA -37 +u0020 ~A -37 +u0020 Y -18 +u0020 'Y -18 +u0020 :Y -18 v , -111 -w . -92 +v . -111 w , -92 -y . -111 +w . -92 y , -111 +y . -111 +'y , -111 +'y . -111 +:y , -111 +:y . -111 + charset ha 606,689 2 0 asciicircum ti 606,347 0 1 asciitilde vS 525,908,20 2 2 Scaron vZ 667,908,3 2 3 Zcaron -vs 424,685,20 2 4 scaron -vz 500,685,3 2 5 zcaron +vs 424,697,20 2 4 scaron +vz 500,697,3 2 5 zcaron :Y 667,868,3 2 6 Ydieresis tm 979,689 2 7 trademark aq 208,709 2 8 quotesingle +Eu 500,689,20,1,2 2 9 Euro space 250 0 32 space ! 278,694,5 2 33 exclam " 371,709 2 34 quotedbl @@ -204,7 +579,7 @@ U 778,692,20 2 85 U V 722,692,9 2 86 V W 1000,700,9 2 87 W X 667,700,3 2 88 X -Y 667,704,3 2 89 Y +Y 667,705,3 2 89 Y Z 667,692,3 2 90 Z [ 333,726,184 2 91 bracketleft lB " @@ -245,7 +620,7 @@ y 556,459,283 1 121 y z 500,462,3 0 122 z lC 333,726,175 2 123 braceleft { " -ba 606,726 2 124 bar +ba 606,750,250 2 124 bar | " rC 333,726,175 2 125 braceright } " @@ -267,11 +642,11 @@ fl 608,728,3 2 141 fl .i 287,469,3 0 144 dotlessi ga 333,677 2 146 grave a" 380,687 2 147 hungarumlaut -a. 250,637 2 148 dotaccent +a. 250,687 2 148 dotaccent ab 333,664 2 149 breve ah 333,677 2 150 caron ao 333,696 2 151 ring -ho 313,0,165 0 152 ogonek +ho 313,0,225 0 152 ogonek lq 500,709 2 153 quotedblleft rq 500,709 2 154 quotedblright oe 827,469,20 0 155 oe @@ -284,9 +659,9 @@ ct 500,562,101 0 162 cent Po 500,694,13 2 163 sterling Cs 500,531 0 164 currency Ye 500,701,3 2 165 yen -bb 606,726 2 166 brokenbar +bb 606,675,175 2 166 brokenbar sc 500,709,219 2 167 section -ad 333,637 2 168 dieresis +ad 333,687 2 168 dieresis co 747,706,18 2 169 copyright Of 333,709 2 170 ordfeminine fo 331,428 0 171 guilsinglleft @@ -299,7 +674,7 @@ t+- 606,512 0 177 plusminus S2 300,689,0,1 2 178 twosuperior S3 300,689 2 179 threesuperior aa 333,677 2 180 acute -mc 603,469,236 0 181 mu +mc 574,470,216 0 181 mu ps 628,694,150 2 182 paragraph pc 250,319 0 183 periodcentered ac 333,0,225 0 184 cedilla @@ -345,7 +720,7 @@ ss 556,731,9 2 223 germandbls `a 500,697,12 2 224 agrave 'a 500,697,12 2 225 aacute ^a 500,697,12 2 226 acircumflex -~a 500,652,12 2 227 atilde +~a 500,672,12 2 227 atilde :a 500,657,12 2 228 adieresis oa 500,716,12 2 229 aring ae 758,469,20 0 230 ae @@ -357,13 +732,13 @@ ae 758,469,20 0 230 ae `i 287,697,3 2 236 igrave 'i 287,697,3 2 237 iacute ^i 287,697,3,13,12 2 238 icircumflex -:i 287,657,3,6,6 2 239 idieresis +:i 287,657,3,12,11 2 239 idieresis Sd 546,728,20 2 240 eth -~n 582,652,3 2 241 ntilde +~n 582,672,3 2 241 ntilde `o 546,697,20 2 242 ograve 'o 546,697,20 2 243 oacute ^o 546,697,20 2 244 ocircumflex -~o 546,652,20 2 245 otilde +~o 546,672,20 2 245 otilde :o 546,657,20 2 246 odieresis tdi 606,512 0 247 divide /o 556,474,23 0 248 oslash diff --git a/contrib/groff/font/devps/S b/contrib/groff/font/devps/S index 7ed54bce73..9e81421512 100644 --- a/contrib/groff/font/devps/S +++ b/contrib/groff/font/devps/S @@ -1,7 +1,22 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Symbol +# Version 001.008 +# FamilyName Symbol +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved. +# Comment Creation Date: Thu May 1 15:12:25 1997 +# Comment UniqueID 43064 +# Comment VMusage 30820 39997 + name S internalname Symbol special spacewidth 250 + charset space 250 0 32 space ! 333,672,17 3 33 exclam @@ -23,15 +38,15 @@ mi " . 250,95,17 3 46 period / 278,646,18 3 47 slash sl " -0 500,685,17 3 48 zero +0 500,685,14 3 48 zero 1 500,673 3 49 one -2 500,686 3 50 two -3 500,685,17 3 51 three +2 500,685 3 50 two +3 500,685,14 3 51 three 4 500,685 3 52 four -5 500,685,17 3 53 five -6 500,685,17 3 54 six +5 500,690,14 3 53 five +6 500,685,14 3 54 six 7 500,673,16 3 55 seven -8 500,685,18 3 56 eight +8 500,685,14 3 56 eight 9 500,685,18 3 57 nine : 278,460,17 3 58 colon ; 278,460,152 3 59 semicolon @@ -69,19 +84,19 @@ ts 439,500,233 3 86 sigma1 *Z 611,673,0,25 3 90 Zeta [ 333,674,155 3 91 bracketleft lB " -3d 863,478 3 92 therefore +3d 863,487 3 92 therefore tf " ] 333,674,155 3 93 bracketright rB " pp 658,674 3 94 perpendicular -_ 500,0,252,2,2 3 95 underscore +_ 500,0,125,2,2 3 95 underscore radicalex 500,917,0,590 3 96 radicalex *a 631,500,18 3 97 alpha *b 549,741,223 3 98 beta *x 549,499,231 3 99 chi *d 494,740,19 3 100 delta *e 439,502,19 3 101 epsilon -*f 521,671,224 3 102 phi +*f 521,673,224 3 102 phi *g 411,499,225,73 3 103 gamma *y 603,514,202 3 104 eta *i 329,503,17 3 105 iota @@ -105,11 +120,12 @@ mc 576,500,223 3 109 mu *z 494,756,225 3 122 zeta lC 480,673,183 3 123 braceleft { " -ba 200,673,177 3 124 bar +ba 200,707,293 3 124 bar | " rC 480,673,183 3 125 braceright } " ap 549,307 3 126 similar +Eu 750,685,12 3 160 Euro *U 620,685,0,0,2 3 161 Upsilon1 fm 247,735 3 162 minute <= 549,639 3 163 lessequal @@ -209,12 +225,12 @@ bv " ra 329,746,198 3 241 angleright is 274,916,107,67,52,-10 3 242 integral integral " -u2320 686,921,83,29 3 243 integraltp +u2320 686,920,88 3 243 integraltp u23AE 686,975,88 3 244 integralex -u2321 686,921,81 3 245 integralbt -parenrighttp 384,926,293,66 3 246 parenrighttp -parenrightex 384,920,80,66 3 247 parenrightex -parenrightbt 384,920,293,66 3 248 parenrightbt +u2321 686,921,87 3 245 integralbt +parenrighttp 384,926,293,82 3 246 parenrighttp +parenrightex 384,920,80,82 3 247 parenrightex +parenrightbt 384,920,293,82 3 248 parenrightbt bracketrighttp 384,925,75 3 249 bracketrighttp rc " bracketrightex 384,925,75 3 250 bracketrightex diff --git a/contrib/groff/font/devps/SS b/contrib/groff/font/devps/SS index 92c3c54fd0..0782672b61 100644 --- a/contrib/groff/font/devps/SS +++ b/contrib/groff/font/devps/SS @@ -1,53 +1,68 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Symbol Slanted +# Version 001.008 +# FamilyName Symbol +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved. +# Comment Creation Date: Thu May 1 15:12:25 1997 +# Comment UniqueID 43064 +# Comment VMusage 30820 39997 + name SS internalname Symbol-Slanted special slant 15.5 spacewidth 223 + charset space 223 0 32 space ---- 296,599,15,137,-72,99 3 33 exclam ---- 635,627,0,216,-173,99 3 34 universal ---- 445,599,15,162,-21,99 3 35 numbersign ---- 489,629,0,183,28,99 3 36 existential +--- 296,598,15,137,-73,99 3 33 exclam +--- 635,627,0,217,-173,99 3 34 universal +--- 445,599,14,162,-21,99 3 35 numbersign +--- 489,629,0,182,28,99 3 36 existential --- 741,583,32,75,-97,75 3 37 percent --- 692,589,16,103,-18,99 3 38 ampersand ---- 391,444,15,109,6,99 3 39 suchthat +--- 391,445,15,109,6,99 3 39 suchthat --- 296,599,170,203,-39,99 3 40 parenleft ---- 296,600,170,93,72,93 3 41 parenright +--- 296,599,170,93,72,93 3 41 parenright --- 445,490,0,105,-76,99 3 42 asteriskmath --- 489,474,0,123,-26,99 3 43 plus --- 223,93,136,10,41,10 3 44 comma --- 489,256,0,117,-24,99 3 45 minus --- 223,85,15,1,-20,1 3 46 period ---- 247,575,15,208,55,99 3 47 slash ---- 445,610,15,142,-40,99 3 48 zero +--- 247,575,16,208,55,99 3 47 slash +--- 445,610,12,147,-39,99 3 48 zero --- 445,599,0,56,-57,56 3 49 one ---- 445,611,0,129,28,99 3 50 two ---- 445,611,16,115,-6,99 3 51 three ---- 445,610,0,135,-8,99 3 52 four ---- 445,610,15,188,14,99 3 53 five ---- 445,610,16,193,-37,99 3 54 six ---- 445,599,15,190,-101,99 3 55 seven ---- 445,611,16,141,-32,99 3 56 eight ---- 445,609,15,140,-2,99 3 57 nine +--- 445,610,0,129,28,99 3 50 two +--- 445,610,12,116,1,99 3 51 three +--- 445,610,0,135,-7,99 3 52 four +--- 445,614,12,191,10,99 3 53 five +--- 445,610,12,191,-39,99 3 54 six +--- 445,599,14,190,-101,99 3 55 seven +--- 445,610,12,139,-34,99 3 56 eight +--- 445,610,16,141,2,99 3 57 nine --- 247,409,15,89,-31,89 3 58 colon --- 247,409,136,99,17,99 3 59 semicolon ---- 489,464,0,171,-37,99 3 60 less +--- 489,465,0,171,-37,99 3 60 less --- 489,347,0,147,1,99 3 61 equal ---- 489,464,0,108,27,99 3 62 greater ---- 395,610,15,172,-113,99 3 63 question +--- 489,465,0,107,27,99 3 62 greater +--- 395,611,15,172,-114,99 3 63 question --- 489,423,0,158,40,99 3 64 congruent ---- 643,599,0,21,47,21 3 65 Alpha ---- 594,598,0,101,24,99 3 66 Beta +--- 643,599,0,21,46,21 3 65 Alpha +--- 594,599,0,104,24,99 3 66 Beta --- 643,599,0,205,58,99 3 67 Chi --- 545,612,0,46,45,46 3 68 Delta --- 544,599,0,194,22,99 3 69 Epsilon ---- 679,598,0,132,-55,99 3 70 Phi +--- 679,599,0,133,-56,99 3 70 Phi --- 537,599,0,227,19,99 3 71 Gamma ---- 643,599,0,243,15,99 3 72 Eta +--- 643,599,0,242,15,99 3 72 Eta --- 296,599,0,222,22,99 3 73 Iota -+h 562,614,15,133,-58,99 3 74 theta1 ---- 643,598,0,185,19,99 3 75 Kappa ++h 562,614,16,133,-58,99 3 74 theta1 +--- 643,599,0,185,19,99 3 75 Kappa --- 611,612,0,49,45,49 3 76 Lambda --- 791,599,0,233,22,99 3 77 Mu --- 643,599,7,234,24,99 3 78 Nu @@ -55,56 +70,57 @@ space 223 0 32 space --- 684,599,0,213,28,99 3 80 Pi --- 659,610,15,138,-62,99 3 81 Theta --- 495,599,0,200,25,99 3 82 Rho ---- 527,599,0,186,45,99 3 83 Sigma ---- 544,599,0,229,-109,99 3 84 Tau +--- 527,599,0,186,46,99 3 83 Sigma +--- 544,599,0,228,-108,99 3 84 Tau --- 614,599,0,240,-125,99 3 85 Upsilon ts 391,445,208,151,-28,99 3 86 sigma1 --- 684,612,0,126,20,99 3 87 Omega ---- 574,598,0,176,14,99 3 88 Xi ---- 708,608,0,227,-138,99 3 89 Psi +--- 574,599,0,176,14,99 3 88 Xi +--- 708,609,0,227,-138,99 3 89 Psi --- 544,599,0,231,11,99 3 90 Zeta ---- 296,599,138,207,16,99 3 91 bracketleft ---- 768,426,0,0,-110 3 92 therefore ---- 296,599,138,159,64,99 3 93 bracketright +--- 296,600,138,207,16,99 3 91 bracketleft +--- 768,433,0,0,-111 3 92 therefore +--- 296,600,138,160,64,99 3 93 bracketright --- 586,600,0,60,37,60 3 94 perpendicular ---- 445,0,224,0,122 3 95 underscore +--- 445,0,111,31,86,31 3 95 underscore --- 445,816,0,829,-622,99 3 96 radicalex -*a 562,445,15,146,-34,99 3 97 alpha -*b 489,659,198,139,57,99 3 98 beta +*a 562,445,16,145,-34,99 3 97 alpha +*b 489,659,198,139,58,99 3 98 beta *x 489,445,206,134,98,99 3 99 chi -*d 440,658,16,181,-33,99 3 100 delta +*d 440,658,17,181,-32,99 3 100 delta *e 391,447,17,127,1,99 3 101 epsilon -*f 464,596,200,103,-28,99 3 102 phi +*f 464,599,199,106,-28,99 3 102 phi *g 366,444,200,252,-42,99 3 103 gamma *y 537,457,180,68,-50,68 3 104 eta -*i 293,448,16,53,-47,53 3 105 iota +*i 293,448,15,53,-47,53 3 105 iota +f 537,444,199,117,-42,99 3 106 phi1 -*k 489,447,0,182,-56,99 3 107 kappa -*l 489,658,16,91,29,91 3 108 lambda +*k 489,446,0,182,-56,99 3 107 kappa +*l 489,658,15,91,29,91 3 108 lambda *m 513,445,198,70,68,70 3 109 mu -*n 464,451,15,134,-69,99 3 110 nu -*o 489,444,17,87,-36,87 3 111 omicron -*p 489,433,18,160,-8,99 3 112 pi -*h 464,614,16,140,-53,99 3 113 theta +*n 464,451,14,134,-69,99 3 110 nu +*o 489,444,17,86,-36,86 3 111 omicron +*p 489,433,17,161,-8,99 3 112 pi +*h 464,614,15,140,-53,99 3 113 theta *r 489,444,205,82,69,82 3 114 rho *s 537,445,19,175,-37,99 3 115 sigma -*t 391,445,16,170,-45,99 3 116 tau -*u 513,451,15,95,-55,95 3 117 upsilon -+p 635,519,15,173,-28,99 3 118 omega1 -*w 611,445,16,126,-35,99 3 119 omega +*t 391,445,17,170,-45,99 3 116 tau +*u 513,451,16,95,-55,95 3 117 upsilon ++p 635,519,16,173,-28,99 3 118 omega1 +*w 611,445,15,126,-35,99 3 119 omega *c 439,681,200,126,-20,99 3 120 xi *q 611,445,203,198,-91,99 3 121 psi *z 440,673,200,190,-50,99 3 122 zeta --- 427,599,163,163,-66,99 3 123 braceleft ---- 178,599,158,179,41,99 3 124 bar ---- 427,599,163,67,31,67 3 125 braceright +--- 178,629,261,188,73,99 3 124 bar +--- 427,599,163,67,30,67 3 125 braceright --- 489,273,0,110,-28,99 3 126 similar ---- 552,609,0,208,-84,99 3 161 Upsilon1 +--- 668,610,11,179,-35,99 3 160 Euro +--- 552,610,0,208,-84,99 3 161 Upsilon1 --- 220,654,0,223,-106,99 3 162 minute --- 489,569,0,206,24,99 3 163 lessequal --- 149,603,11,391,214,99 3 164 fraction --- 635,360,0,107,-41,99 3 165 infinity ---- 445,612,172,219,86,99 3 166 florin +--- 445,611,172,219,86,99 3 166 florin --- 670,474,23,25,-69,25 3 167 club --- 670,490,32,0,-148 3 168 diamond --- 670,473,29,59,-155,59 3 169 heart @@ -114,7 +130,7 @@ ts 391,445,208,151,-28,99 3 86 sigma1 --- 537,810,0,204,-173,99 3 173 arrowup --- 878,455,13,94,-55,94 3 174 arrowright --- 537,790,20,85,-54,85 3 175 arrowdown ---- 356,609,0,160,-137,99 3 176 degree +--- 356,610,0,160,-136,99 3 176 degree --- 489,574,0,154,41,99 3 177 plusminus --- 366,656,0,244,-100,99 3 178 second --- 489,569,0,143,24,99 3 179 greaterequal @@ -134,7 +150,7 @@ ts 391,445,208,151,-28,99 3 86 sigma1 --- 611,659,47,123,24,99 3 193 Ifraktur --- 708,653,13,175,-21,99 3 194 Rfraktur --- 878,510,188,50,-62,50 3 195 weierstrass ---- 684,599,15,124,-64,99 3 196 circlemultiply +--- 684,599,15,124,-65,99 3 196 circlemultiply --- 684,601,13,125,-65,99 3 197 circleplus --- 732,640,21,202,12,99 3 198 emptyset --- 684,453,0,80,14,80 3 199 intersection @@ -145,18 +161,18 @@ ts 391,445,208,151,-28,99 3 86 sigma1 --- 635,418,0,159,-37,99 3 204 propersubset --- 635,418,111,159,34,99 3 205 reflexsubset --- 635,417,0,0,-43 3 206 element ---- 635,494,52,0,-24 3 207 notelement +--- 635,494,52,0,-25 3 207 notelement --- 684,599,0,199,27,99 3 208 angle --- 635,639,17,220,-181,99 3 209 gradient ---- 703,596,18,110,-70,99 3 210 registerserif +--- 703,599,15,111,-71,99 3 210 registerserif --- 703,601,13,113,-72,99 3 211 copyrightserif --- 792,599,0,205,-119,99 3 212 trademarkserif --- 732,668,90,238,56,99 3 213 product --- 489,816,34,272,-84,99 3 214 radical ---- 223,276,0,52,-81,52 3 215 dotmath +--- 223,276,0,51,-82,51 3 215 dotmath --- 635,256,0,100,-28,99 3 216 logicalnot ---- 537,404,0,32,29,32 3 217 logicaland ---- 537,424,0,152,-101,99 3 218 logicalor +--- 537,404,0,32,30,32 3 217 logicaland +--- 537,425,0,152,-101,99 3 218 logicalor --- 927,454,18,101,-42,99 3 219 arrowdblboth --- 878,457,13,114,-46,99 3 220 arrowdblleft --- 537,811,0,201,-102,99 3 221 arrowdblup @@ -168,27 +184,27 @@ ts 391,445,208,151,-28,99 3 86 sigma1 --- 703,601,13,111,-70,99 3 227 copyrightsans --- 700,599,0,182,-129,99 3 228 trademarksans --- 635,669,96,171,65,99 3 229 summation ---- 342,824,261,350,96,99 3 230 parenlefttp ---- 342,823,76,46,38,46 3 231 parenleftex ---- 342,824,261,47,-63,47 3 232 parenleftbt ---- 342,824,71,268,72,99 3 233 bracketlefttp ---- 342,823,70,13,72,13 3 234 bracketleftex ---- 342,824,71,14,72,14 3 235 bracketleftbt ---- 440,824,67,258,-108,99 3 236 bracelefttp ---- 440,832,76,96,-76,96 3 237 braceleftmid ---- 440,824,62,94,-169,94 3 238 braceleftbt ---- 440,832,71,96,-107,96 3 239 braceex +--- 342,824,261,350,110,99 3 230 parenlefttp +--- 342,823,76,61,52,61 3 231 parenleftex +--- 342,824,261,61,-53,61 3 232 parenleftbt +--- 342,824,71,275,72,99 3 233 bracketlefttp +--- 342,823,70,33,72,33 3 234 bracketleftex +--- 342,824,71,33,72,33 3 235 bracketleftbt +--- 440,823,76,263,-112,99 3 236 bracelefttp +--- 440,832,76,122,-82,99 3 237 braceleftmid +--- 440,832,67,122,-147,99 3 238 braceleftbt +--- 440,832,76,122,-112,99 3 239 braceex --- 293,664,176,102,79,99 3 241 angleright --- 244,815,95,305,63,99 3 242 integral ---- 611,820,74,312,-222,99 3 243 integraltp ---- 611,868,78,79,-221,79 3 244 integralex ---- 611,820,72,64,20,64 3 245 integralbt ---- 342,824,261,206,-223,99 3 246 parenrighttp ---- 342,823,76,365,-281,99 3 247 parenrightex ---- 342,824,261,365,80,99 3 248 parenrightbt ---- 342,824,71,285,-199,99 3 249 bracketrighttp ---- 342,823,70,285,-200,99 3 250 bracketrightex ---- 342,824,71,285,54,99 3 251 bracketrightbt ---- 440,824,67,35,-108,35 3 252 bracerighttp ---- 440,832,76,127,-105,99 3 253 bracerightmid ---- 440,824,62,94,54,94 3 254 bracerightbt +--- 611,819,78,277,-200,99 3 243 integraltp +--- 611,868,78,46,-200,46 3 244 integralex +--- 611,820,77,31,47,31 3 245 integralbt +--- 342,824,261,217,-209,99 3 246 parenrighttp +--- 342,823,76,379,-266,99 3 247 parenrightex +--- 342,824,261,380,80,99 3 248 parenrightbt +--- 342,824,71,295,-189,99 3 249 bracketrighttp +--- 342,823,70,295,-190,99 3 250 bracketrightex +--- 342,824,71,295,53,99 3 251 bracketrightbt +--- 440,823,76,87,-112,87 3 252 bracerighttp +--- 440,832,76,153,-112,99 3 253 bracerightmid +--- 440,832,67,122,28,99 3 254 bracerightbt diff --git a/contrib/groff/font/devps/TB b/contrib/groff/font/devps/TB index e9f11c790b..eb0c69e581 100644 --- a/contrib/groff/font/devps/TB +++ b/contrib/groff/font/devps/TB @@ -1,218 +1,309 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Times Bold +# Version 003.001 +# FamilyName Times +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 12:58:13 1999 +# Comment UniqueID 44707 +# Comment VMusage 33130 40066 + name TB internalname Times-Bold spacewidth 250 encoding text.enc ligatures fi fl 0 + kernpairs -A y -74 -A w -90 -A v -100 -A u -50 +A C -55 +A ,C -55 +A G -55 +A O -45 +A /O -45 +A Q -45 +A T -95 +A U -50 +A V -145 +A W -130 +A Y -100 +A p -25 A ' -74 A cq -74 -A p -25 -A Y -100 -A W -130 -A V -145 -A U -50 -A T -95 -A Q -45 -A O -45 -A G -55 -A C -55 -B U -10 +A u -50 +A v -100 +A w -90 +A y -74 +oA C -55 +oA ,C -55 +oA G -55 +oA O -45 +oA /O -45 +oA Q -45 +oA T -95 +oA U -50 +oA V -145 +oA W -130 +oA Y -100 +oA p -25 +oA ' -74 +oA cq -74 +oA u -50 +oA v -100 +oA w -90 +oA y -74 B A -30 -D . -20 -D Y -40 -D W -40 -D V -40 +B oA -30 +B U -10 D A -35 -F . -110 -F o -25 -F e -25 -F , -92 -F a -25 +D oA -35 +D V -40 +D W -40 +D Y -40 +D . -20 F A -90 -J u -15 -J . -20 -J o -15 -J e -15 -J a -15 +F oA -90 +F a -25 +F oa -25 +F , -92 +F e -25 +F o -25 +F /o -25 +F . -110 J A -30 -K y -45 -K u -15 -K o -25 -K e -25 +J oA -30 +J a -15 +J oa -15 +J e -15 +J o -15 +J /o -15 +J . -20 +J u -15 K O -30 -L y -55 +K /O -30 +K e -25 +K o -25 +K /o -25 +K u -15 +K y -45 +L T -92 +L V -92 +L W -92 +L Y -92 +L rq -20 L ' -110 L cq -110 -L rq -20 -L Y -92 -L W -92 -L V -92 -L T -92 +L y -55 +/L T -92 +/L V -92 +/L W -92 +/L Y -92 +/L rq -20 +/L ' -110 +/L cq -110 +/L y -55 N A -20 -O Y -50 -O X -40 -O W -50 -O V -50 -O T -40 +N oA -20 O A -40 -P . -110 -P o -20 -P e -20 -P , -92 -P a -10 +O oA -40 +O T -40 +O V -50 +O W -50 +O X -40 +O Y -50 +/O A -40 +/O oA -40 +/O T -40 +/O V -50 +/O W -50 +/O X -40 +/O Y -50 P A -74 -Q . -20 +P oA -74 +P a -10 +P oa -10 +P , -92 +P e -20 +P o -20 +P /o -20 +P . -110 Q U -10 -R Y -35 -R W -35 -R V -55 -R U -30 -R T -40 +Q . -20 R O -30 -T y -74 -T w -74 -T u -92 -T ; -74 -T r -74 -T . -90 -T o -92 -T i -18 +R /O -30 +R T -40 +R U -30 +R V -55 +R W -35 +R Y -35 +T A -90 +T oA -90 +T O -18 +T /O -18 +T a -92 +T oa -92 +T : -74 +T , -74 +T e -92 T - -92 T hy -92 -T e -92 -T , -74 -T : -74 -T a -92 -T O -18 -T A -90 -U . -50 -U , -50 +T i -18 +T o -92 +T /o -92 +T . -90 +T r -74 +T ; -74 +T u -92 +T w -74 +T y -34 U A -60 -V u -92 -V ; -92 -V . -145 -V o -100 -V i -37 +U oA -60 +U , -50 +U . -50 +V A -135 +V oA -135 +V G -30 +V O -45 +V /O -45 +V a -92 +V oa -92 +V : -92 +V , -129 +V e -100 V - -74 V hy -74 -V e -100 -V , -129 -V : -92 -V a -92 -V O -45 -V G -30 -V A -135 -W y -60 -W u -50 -W ; -55 -W . -92 -W o -75 -W i -18 +V i -37 +V o -100 +V /o -100 +V . -145 +V ; -92 +V u -92 +W A -120 +W oA -120 +W O -10 +W /O -10 +W a -65 +W oa -65 +W : -55 +W , -92 +W e -65 W - -37 W hy -37 -W e -65 -W , -92 -W : -55 -W a -65 -W O -10 -W A -120 -Y u -92 -Y ; -92 -Y . -92 -Y o -111 -Y i -37 +W i -18 +W o -75 +W /o -75 +W . -92 +W ; -55 +W u -50 +W y -60 +Y A -110 +Y oA -110 +Y O -35 +Y /O -35 +Y a -85 +Y oa -85 +Y : -92 +Y , -92 +Y e -111 Y - -92 Y hy -92 -Y e -111 -Y , -92 -Y : -92 -Y a -85 -Y O -35 -Y A -110 +Y i -37 +Y o -111 +Y /o -111 +Y . -92 +Y ; -92 +Y u -92 a v -25 -b v -15 -b u -20 -b . -40 +oa v -25 b b -10 +b . -40 +b u -20 +b v -15 +, rq -45 , ' -55 , cq -55 -, rq -45 d w -15 e v -15 +f , -15 +f .i -35 +f i -25 +f o -25 +f /o -25 +f . -15 +f rq 50 f ' 55 f cq 55 -f rq 50 -f . -15 -f o -25 -f i -25 -f .i -35 -f , -15 g . -15 h y -15 i v -10 -k y -15 -k o -15 k e -10 +k o -15 +k /o -15 +k y -15 n v -40 -o w -10 o v -10 +o w -10 +/o v -10 +/o w -10 +. rq -55 . ' -55 . cq -55 -. rq -55 lq A -10 +lq oA -10 +` A -10 +oq A -10 +` oA -10 +oq oA -10 ` ` -63 ` oq -63 oq ` -63 oq oq -63 -` A -10 -oq A -10 -' v -20 -cq v -20 -' u0020 -74 -cq u0020 -74 -' s -37 -cq s -37 -' r -20 -cq r -20 +' d -20 +cq d -20 ' ' -63 ' cq -63 cq ' -63 cq cq -63 -' d -20 -cq d -20 -r v -10 -r q -18 -r . -100 -r p -10 -r o -18 -r n -15 +' r -20 +cq r -20 +' s -37 +cq s -37 +' v -20 +cq v -20 +r c -18 +r ,c -18 +r , -92 +r e -18 +r g -10 r - -37 r hy -37 -r g -10 -r e -18 -r , -92 -r c -18 -u0020 Y -55 -u0020 W -30 -u0020 V -45 -u0020 T -30 -u0020 A -55 -v . -70 -v o -10 -v e -10 -v , -55 +r n -15 +r o -18 +r /o -18 +r p -10 +r . -100 +r q -18 +r v -10 v a -10 -w . -70 -w o -10 +v oa -10 +v , -55 +v e -10 +v o -10 +v /o -10 +v . -70 w , -55 -y . -70 -y o -25 -y e -10 +w o -10 +w /o -10 +w . -70 y , -55 +y e -10 +y o -25 +y /o -25 +y . -70 + charset ha 581,676 2 0 asciicircum ti 520,333 0 1 asciitilde @@ -223,6 +314,7 @@ vz 444,704 2 5 zcaron :Y 722,877 2 6 Ydieresis tm 1000,676 2 7 trademark aq 278,691 2 8 quotesingle +Eu 500,688,13 2 9 Euro space 250 0 32 space ! 333,691,13 2 33 exclam " 555,691 2 34 quotedbl @@ -328,7 +420,7 @@ y 500,461,205 1 121 y z 444,461 0 122 z lC 394,698,175 2 123 braceleft { " -ba 220,691,19 2 124 bar +ba 220,782,218 3 124 bar | " rC 394,698,175 2 125 braceright } " @@ -350,11 +442,11 @@ fl 556,691 2 141 fl .i 278,461 0 144 dotlessi ga 333,713 2 146 grave a" 333,713,0,92,13 2 147 hungarumlaut -a. 333,667 2 148 dotaccent +a. 333,691 2 148 dotaccent ab 333,691 2 149 breve ah 333,704,0,2,2 2 150 caron ao 333,740 2 151 ring -ho 333,44,173 0 152 ogonek +ho 333,24,193 0 152 ogonek lq 500,691 2 153 quotedblleft rq 500,691 2 154 quotedblright oe 722,473,14 0 155 oe @@ -367,7 +459,7 @@ ct 500,588,140 0 162 cent Po 500,684,14 2 163 sterling Cs 500,613,0,26,26 0 164 currency Ye 500,676,0,47,64 2 165 yen -bb 220,691,19 2 166 brokenbar +bb 220,707,143 2 166 brokenbar sc 500,691,132 2 167 section ad 333,667,0,2,2 2 168 dieresis co 747,691,19 2 169 copyright @@ -382,7 +474,7 @@ t+- 570,506 0 177 plusminus S2 300,688 2 178 twosuperior S3 300,688 2 179 threesuperior aa 333,713 2 180 acute -mc 556,461,206 1 181 mu +mc 601,461,212 1 181 mu ps 540,676,186 2 182 paragraph pc 250,417 0 183 periodcentered ac 333,0,218 1 184 cedilla @@ -422,7 +514,7 @@ tmu 570,490 0 215 multiply 'U 722,923,19 2 218 Uacute ^U 722,914,19 2 219 Ucircumflex :U 722,877,19 2 220 Udieresis -'Y 722,928 2 221 Yacute +'Y 722,923 2 221 Yacute TP 611,676 2 222 Thorn ss 556,691,12 2 223 germandbls `a 500,713,14 2 224 agrave @@ -437,10 +529,10 @@ ae 722,473,14 0 230 ae 'e 444,713,14 2 233 eacute ^e 444,704,14 2 234 ecircumflex :e 444,667,14 2 235 edieresis -`i 278,713,0,0,26 2 236 igrave -'i 278,713,0,12 2 237 iacute -^i 278,704,0,23,36 2 238 icircumflex -:i 278,667,0,23,36 2 239 idieresis +`i 278,713,0,0,27 2 236 igrave +'i 278,713,0,11 2 237 iacute +^i 278,704,0,22,37 2 238 icircumflex +:i 278,667,0,22,37 2 239 idieresis Sd 500,691,14 2 240 eth ~n 556,674 2 241 ntilde `o 500,713,14 2 242 ograve diff --git a/contrib/groff/font/devps/TBI b/contrib/groff/font/devps/TBI index abda491892..947e1ea446 100644 --- a/contrib/groff/font/devps/TBI +++ b/contrib/groff/font/devps/TBI @@ -1,211 +1,299 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Times Bold Italic +# Version 003.001 +# FamilyName Times +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 13:00:52 1999 +# Comment UniqueID 44708 +# Comment VMusage 36699 43635 + name TBI internalname Times-BoldItalic slant 15 spacewidth 250 encoding text.enc ligatures fi fl 0 + kernpairs -A y -74 -A w -74 -A v -74 -A u -30 +A C -65 +A ,C -65 +A G -60 +A O -50 +A /O -50 +A Q -55 +A T -55 +A U -50 +A V -95 +A W -100 +A Y -70 A ' -74 A cq -74 -A Y -70 -A W -100 -A V -95 -A U -50 -A T -55 -A Q -55 -A O -50 -A G -60 -A C -65 -B U -10 +A u -30 +A v -74 +A w -74 +A y -74 +oA C -65 +oA ,C -65 +oA G -60 +oA O -50 +oA /O -50 +oA Q -55 +oA T -55 +oA U -50 +oA V -95 +oA W -100 +oA Y -70 +oA ' -74 +oA cq -74 +oA u -30 +oA v -74 +oA w -74 +oA y -74 B A -25 -D Y -50 -D W -40 -D V -50 +B oA -25 +B U -10 D A -25 -F r -50 -F . -129 -F o -70 -F i -40 -F e -100 -F , -129 -F a -95 +D oA -25 +D V -50 +D W -40 +D Y -50 F A -100 -J u -40 -J . -10 -J o -40 -J e -40 -J , -10 -J a -40 +F oA -100 +F a -95 +F oa -95 +F , -129 +F e -100 +F i -40 +F o -70 +F /o -70 +F . -129 +F r -50 J A -25 -K y -20 -K u -20 -K o -25 -K e -25 +J oA -25 +J a -40 +J oa -40 +J , -10 +J e -40 +J o -40 +J /o -40 +J . -10 +J u -40 K O -30 -L y -37 +K /O -30 +K e -25 +K o -25 +K /o -25 +K u -20 +K y -20 +L T -18 +L V -37 +L W -37 +L Y -37 L ' -55 L cq -55 -L Y -37 -L W -37 -L V -37 -L T -18 +L y -37 +/L T -18 +/L V -37 +/L W -37 +/L Y -37 +/L ' -55 +/L cq -55 +/L y -37 N A -30 -O Y -50 -O X -40 -O W -50 -O V -50 -O T -40 +N oA -30 O A -40 -P . -129 -P o -55 -P e -50 -P , -129 -P a -40 +O oA -40 +O T -40 +O V -50 +O W -50 +O X -40 +O Y -50 +/O A -40 +/O oA -40 +/O T -40 +/O V -50 +/O W -50 +/O X -40 +/O Y -50 P A -85 +P oA -85 +P a -40 +P oa -40 +P , -129 +P e -50 +P o -55 +P /o -55 +P . -129 Q U -10 -R Y -18 -R W -18 -R V -18 -R U -40 -R T -30 R O -40 -T y -37 -T w -37 -T u -37 -T ; -74 -T r -37 -T . -92 -T o -95 -T i -37 +R /O -40 +R T -30 +R U -40 +R V -18 +R W -18 +R Y -18 +T A -55 +T oA -55 +T O -18 +T /O -18 +T a -92 +T oa -92 +T : -74 +T , -92 +T e -92 T - -92 T hy -92 -T e -92 -T , -92 -T : -74 -T a -92 -T O -18 -T A -55 +T i -37 +T o -95 +T /o -95 +T . -92 +T r -37 +T ; -74 +T u -37 +T w -37 +T y -37 U A -45 -V u -55 -V ; -74 -V . -129 -V o -111 -V i -55 +U oA -45 +V A -85 +V oA -85 +V G -10 +V O -30 +V /O -30 +V a -111 +V oa -111 +V : -74 +V , -129 +V e -111 V - -70 V hy -70 -V e -111 -V , -129 -V : -74 -V a -111 -V O -30 -V G -10 -V A -85 -W y -55 -W u -55 -W ; -55 -W . -74 -W o -80 -W i -37 +V i -55 +V o -111 +V /o -111 +V . -129 +V ; -74 +V u -55 +W A -74 +W oA -74 +W O -15 +W /O -15 +W a -85 +W oa -85 +W : -55 +W , -74 +W e -90 W - -50 W hy -50 -W e -90 -W , -74 -W : -55 -W a -85 -W O -15 -W A -74 -Y u -92 -Y ; -92 -Y . -74 -Y o -111 -Y i -55 +W i -37 +W o -80 +W /o -80 +W . -74 +W ; -55 +W u -55 +W y -55 +Y A -74 +Y oA -74 +Y O -25 +Y /O -25 +Y a -92 +Y oa -92 +Y : -92 +Y , -92 +Y e -111 Y - -92 Y hy -92 -Y e -111 -Y , -92 -Y : -92 -Y a -92 -Y O -25 -Y A -74 -b u -20 -b . -40 +Y i -55 +Y o -111 +Y /o -111 +Y . -74 +Y ; -92 +Y u -92 b b -10 -c k -10 +b . -40 +b u -20 c h -10 +c k -10 +,c h -10 +,c k -10 +, rq -95 , ' -95 , cq -95 -, rq -95 e b -10 +f , -10 +f .i -30 +f e -10 +f f -18 +f o -10 +f /o -10 +f . -10 f ' 55 f cq 55 -f . -10 -f o -10 -f f -18 -f e -10 -f .i -30 -f , -10 -k o -10 k e -30 +k o -10 +k /o -10 n v -40 -o y -10 -o x -10 -o w -25 o v -15 +o w -25 +o x -10 +o y -10 +/o v -15 +/o w -25 +/o x -10 +/o y -10 +. rq -95 . ' -95 . cq -95 -. rq -95 ` ` -74 ` oq -74 oq ` -74 oq oq -74 -' v -15 -cq v -15 -' t -37 -cq t -37 -' u0020 -74 -cq u0020 -74 -' s -74 -cq s -74 -' r -15 -cq r -15 +' d -15 +cq d -15 ' ' -74 ' cq -74 cq ' -74 cq cq -74 -' d -15 -cq d -15 -r . -65 +' r -15 +cq r -15 +' s -74 +cq s -74 +' t -37 +cq t -37 +' v -15 +cq v -15 r , -65 -u0020 Y -70 -u0020 W -70 -u0020 V -70 -u0020 A -37 -v . -37 -v o -15 -v e -15 +r . -65 v , -37 -w . -37 -w o -15 -w e -10 -w , -37 +v e -15 +v o -15 +v /o -15 +v . -37 w a -10 +w oa -10 +w , -37 +w e -10 +w o -15 +w /o -15 +w . -37 x e -10 -y . -37 y , -37 +y . -37 + charset ha 570,669,0,0,-17 2 0 asciicircum ti 570,333,0,0,-4 0 1 asciitilde -vS 556,897,18,20,48,20 2 2 Scaron +vS 556,897,18,47,48,47 2 2 Scaron vZ 611,897,0,29,61,29 2 3 Zcaron -vs 389,690,13,100,69,99 2 4 scaron +vs 389,690,13,85,69,85 2 4 scaron vz 389,690,78,85,93,85 2 5 zcaron :Y 611,862,0,98,-23,98 2 6 Ydieresis tm 1000,669,0,18,18,18 2 7 trademark aq 278,685,0,40,-78,40 2 8 quotesingle +Eu 500,686,20,92,41,92 2 9 Euro space 250 0 32 space ! 389,684,13,31,-17,31 2 33 exclam " 555,685,0,31,-86,31 2 34 quotedbl @@ -311,7 +399,7 @@ y 444,462,205,0,144 1 121 y z 389,449,78,29,93,29 0 122 z lC 348,686,187,138,45,99 2 123 braceleft { " -ba 220,685,18,0,-16 2 124 bar +ba 220,782,218,0,-16 3 124 bar | " rC 348,686,187,4,179,4 2 125 braceright } " @@ -333,15 +421,15 @@ fl 556,704,205,47,236,47 3 141 fl .i 278,462,9,10,48,10 0 144 dotlessi ga 333,697,0,14,-35,14 2 146 grave a" 333,697,0,215,-19,99 2 147 hungarumlaut -a. 333,655,0,10,-113,10 2 148 dotaccent +a. 333,684,0,15,-113,15 2 148 dotaccent ab 333,678,0,104,-21,99 2 149 breve ah 333,690,0,128,-29,99 2 150 caron ao 333,729,0,57,-77,57 2 151 ring -ho 333,44,173,0,90 0 152 ogonek +ho 333,34,183,0,35 0 152 ogonek lq 500,685,0,63,-3,63 2 153 quotedblleft rq 500,685,0,63,-3,63 2 154 quotedblright oe 722,462,13,2,44,2 0 155 oe -/l 278,699,9,73,63,73 2 156 lslash +/l 278,699,9,79,57,79 2 156 lslash Bq 500,134,182,0,107 0 157 quotedblbase OE 944,677,8,52,27,52 2 158 OE /L 611,669,0,29,72,29 2 159 Lslash @@ -350,9 +438,9 @@ ct 500,576,143,0,8 0 162 cent Po 500,683,12,60,82,60 2 163 sterling Cs 500,586,0,76,76,76 0 164 currency Ye 500,669,0,178,17,99 2 165 yen -bb 220,685,18,0,-16 2 166 brokenbar +bb 220,707,143,0,-16 2 166 brokenbar sc 500,685,143,9,14,9 2 167 section -ad 333,655,0,114,-5,99 2 168 dieresis +ad 333,684,0,119,-5,99 2 168 dieresis co 747,685,18,21,20,21 2 169 copyright Of 266,685,0,114,34,99 2 170 ordfeminine fo 333,415,0,20,18,20 0 171 guilsinglleft @@ -365,7 +453,7 @@ t+- 570,506,0,17,17,17 0 177 plusminus S2 300,683,0,63,48,63 2 178 twosuperior S3 300,683,0,71,33,71 2 179 threesuperior aa 333,697,0,96,-89,96 2 180 acute -mc 576,449,207,0,110 1 181 mu +mc 532,449,206,0,155 1 181 mu ps 500,669,193,112,107,99 2 182 paragraph pc 250,405,0,0,-1 0 183 periodcentered ac 333,5,218,0,130 1 184 cedilla @@ -389,9 +477,9 @@ AE 944,669,0,24,114,24 2 198 AE ^E 667,897,0,36,77,36 2 202 Ecircumflex :E 667,862,0,36,77,36 2 203 Edieresis `I 389,904,0,67,82,67 2 204 Igrave -'I 389,904,0,73,82,73 2 205 Iacute -^I 389,897,0,81,82,81 2 206 Icircumflex -:I 389,862,0,106,82,99 2 207 Idieresis +'I 389,904,0,93,82,93 2 205 Iacute +^I 389,897,0,111,82,99 2 206 Icircumflex +:I 389,862,0,111,82,99 2 207 Idieresis -D 722,669,0,28,81,28 2 208 Eth ~N 722,862,15,76,77,76 2 209 Ntilde `O 722,904,18,19,23,19 2 210 Ograve @@ -412,25 +500,25 @@ ss 500,705,200,23,250,23 2 223 germandbls 'a 500,697,14,13,71,13 2 225 aacute ^a 500,690,14,5,71,5 2 226 acircumflex ~a 500,655,14,41,71,41 2 227 atilde -:a 500,655,14,21,71,21 2 228 adieresis +:a 500,655,14,26,71,26 2 228 adieresis oa 500,729,14,5,71,5 2 229 aring ae 722,462,13,1,55,1 0 230 ae -,c 444,462,218,0,74 1 231 ccedilla +,c 444,462,218,0,55 1 231 ccedilla `e 444,697,13,4,45,4 2 232 egrave 'e 444,697,13,41,45,41 2 233 eacute ^e 444,690,13,29,45,29 2 234 ecircumflex -:e 444,655,13,49,45,49 2 235 edieresis -`i 278,697,9,32,48,32 2 236 igrave +:e 444,655,13,54,45,54 2 235 edieresis +`i 278,697,9,31,48,31 2 236 igrave 'i 278,697,9,124,48,99 2 237 iacute -^i 278,690,9,97,52,97 2 238 icircumflex -:i 278,655,9,132,48,99 2 239 idieresis +^i 278,690,9,96,53,96 2 238 icircumflex +:i 278,655,9,136,48,99 2 239 idieresis Sd 500,699,13,4,53,4 2 240 eth ~n 556,655,9,0,56 2 241 ntilde `o 500,697,13,0,53 2 242 ograve 'o 500,697,13,13,53,13 2 243 oacute ^o 500,690,13,1,53,1 2 244 ocircumflex ~o 500,655,13,41,53,41 2 245 otilde -:o 500,655,13,16,53,16 2 246 odieresis +:o 500,655,13,21,53,21 2 246 odieresis tdi 570,535,29,17,17,17 0 247 divide /o 500,560,119,0,53 0 248 oslash `u 556,697,9,0,35 2 249 ugrave @@ -439,5 +527,5 @@ tdi 570,535,29,17,17,17 0 247 divide :u 556,655,9,0,35 2 252 udieresis 'y 444,697,205,41,144,41 3 253 yacute Tp 500,699,205,0,170 3 254 thorn -:y 444,655,205,44,144,44 3 255 ydieresis +:y 444,655,205,49,144,49 3 255 ydieresis u2026 1000,135,13,0,10 0 256 ellipsis diff --git a/contrib/groff/font/devps/TI b/contrib/groff/font/devps/TI index c5dc3af043..29b29a31f6 100644 --- a/contrib/groff/font/devps/TI +++ b/contrib/groff/font/devps/TI @@ -1,214 +1,298 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Times Italic +# Version 003.001 +# FamilyName Times +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 13:03:40 1999 +# Comment UniqueID 44709 +# Comment VMusage 38051 44987 + name TI internalname Times-Italic slant 7 spacewidth 250 encoding text.enc ligatures fi fl 0 + kernpairs -A y -55 -A w -55 -A v -55 -A u -20 +A C -30 +A ,C -30 +A G -35 +A O -40 +A /O -40 +A Q -40 +A T -37 +A U -50 +A V -105 +A W -95 +A Y -55 A ' -37 A cq -37 -A Y -55 -A W -95 -A V -105 -A U -50 -A T -37 -A Q -40 -A O -40 -A G -35 -A C -30 -B U -10 +A u -20 +A v -55 +A w -55 +A y -55 +oA C -30 +oA ,C -30 +oA G -35 +oA O -40 +oA /O -40 +oA Q -40 +oA T -37 +oA U -50 +oA V -105 +oA W -95 +oA Y -55 +oA ' -37 +oA cq -37 +oA u -20 +oA v -55 +oA w -55 +oA y -55 B A -25 -D Y -40 -D W -40 -D V -40 +B oA -25 +B U -10 D A -35 -F r -55 -F . -135 -F o -105 -F i -45 -F e -75 -F , -135 -F a -75 +D oA -35 +D V -40 +D W -40 +D Y -40 F A -115 -J u -35 -J . -25 -J o -25 -J e -25 -J , -25 -J a -35 +F oA -115 +F a -75 +F oa -75 +F , -135 +F e -75 +F i -45 +F o -105 +F /o -105 +F . -135 +F r -55 J A -40 -K y -40 -K u -40 -K o -40 -K e -35 +J oA -40 +J a -35 +J oa -35 +J , -25 +J e -25 +J o -25 +J /o -25 +J . -25 +J u -35 K O -50 -L y -30 +K /O -50 +K e -35 +K o -40 +K /o -40 +K u -40 +K y -40 +L T -20 +L V -55 +L W -55 +L Y -20 L ' -37 L cq -37 -L Y -20 -L W -55 -L V -55 -L T -20 +L y -30 +/L T -20 +/L V -55 +/L W -55 +/L Y -20 +/L ' -37 +/L cq -37 +/L y -30 N A -27 -O Y -50 -O X -40 -O W -50 -O V -50 -O T -40 +N oA -27 O A -55 -P . -135 -P o -80 -P e -80 -P , -135 -P a -80 +O oA -55 +O T -40 +O V -50 +O W -50 +O X -40 +O Y -50 +/O A -55 +/O oA -55 +/O T -40 +/O V -50 +/O W -50 +/O X -40 +/O Y -50 P A -90 +P oA -90 +P a -80 +P oa -80 +P , -135 +P e -80 +P o -80 +P /o -80 +P . -135 Q U -10 -R Y -18 -R W -18 -R V -18 -R U -40 R O -40 -T y -74 -T w -74 -T u -55 -T ; -65 -T r -55 -T . -74 -T o -92 -T i -55 +R /O -40 +R U -40 +R V -18 +R W -18 +R Y -18 +T A -50 +T oA -50 +T O -18 +T /O -18 +T a -92 +T oa -92 +T : -55 +T , -74 +T e -92 T - -74 T hy -74 -T e -92 -T , -74 -T : -55 -T a -92 -T O -18 -T A -50 -U . -25 -U , -25 +T i -55 +T o -92 +T /o -92 +T . -74 +T r -55 +T ; -65 +T u -55 +T w -74 +T y -74 U A -40 -V u -74 -V ; -74 -V . -129 -V o -111 -V i -74 +U oA -40 +U , -25 +U . -25 +V A -60 +V oA -60 +V O -30 +V /O -30 +V a -111 +V oa -111 +V : -65 +V , -129 +V e -111 V - -55 V hy -55 -V e -111 -V , -129 -V : -65 -V a -111 -V O -30 -V A -60 -W y -70 -W u -55 -W ; -65 -W . -92 -W o -92 -W i -55 +V i -74 +V o -111 +V /o -111 +V . -129 +V ; -74 +V u -74 +W A -60 +W oA -60 +W O -25 +W /O -25 +W a -92 +W oa -92 +W : -65 +W , -92 +W e -92 W - -37 W hy -37 -W e -92 -W , -92 -W : -65 -W a -92 -W O -25 -W A -60 -Y u -92 -Y ; -65 -Y . -92 -Y o -92 -Y i -74 +W i -55 +W o -92 +W /o -92 +W . -92 +W ; -65 +W u -55 +W y -70 +Y A -50 +Y oA -50 +Y O -15 +Y /O -15 +Y a -92 +Y oa -92 +Y : -65 +Y , -92 +Y e -92 Y - -74 Y hy -74 -Y e -92 -Y , -92 -Y : -65 -Y a -92 -Y O -15 -Y A -50 +Y i -74 +Y o -92 +Y /o -92 +Y . -92 +Y ; -65 +Y u -92 a g -10 -b u -20 +oa g -10 b . -40 -c k -20 +b u -20 c h -15 +c k -20 +,c h -15 +,c k -20 +, rq -140 , ' -140 , cq -140 -, rq -140 -e y -30 -e x -20 -e w -15 -e v -15 -e . -15 -e g -40 e , -10 +e g -40 +e . -15 +e v -15 +e w -15 +e x -20 +e y -30 +f , -10 +f .i -60 +f f -18 +f i -20 +f . -15 f ' 92 f cq 92 -f . -15 -f i -20 -f f -18 -f .i -60 -f , -10 -g . -15 -g g -10 -g e -10 g , -10 -k y -10 -k o -10 +g e -10 +g g -10 +g . -15 k e -10 +k o -10 +k /o -10 +k y -10 n v -40 -o v -10 o g -10 +o v -10 +/o g -10 +/o v -10 +. rq -140 . ' -140 . cq -140 -. rq -140 ` ` -111 ` oq -111 oq ` -111 oq oq -111 -' v -10 -cq v -10 -' t -30 -cq t -30 -' u0020 -111 -cq u0020 -111 -' s -40 -cq s -40 -' r -25 -cq r -25 +' d -25 +cq d -25 ' ' -111 ' cq -111 cq ' -111 cq cq -111 -' d -25 -cq d -25 -r s -10 -r q -37 -r . -111 -r o -45 +' r -25 +cq r -25 +' s -40 +cq s -40 +' t -30 +cq t -30 +' v -10 +cq v -10 +r a -15 +r oa -15 +r c -37 +r ,c -37 +r , -111 +r d -37 +r e -37 +r g -37 r - -20 r hy -20 -r g -37 -r e -37 -r d -37 -r , -111 -r c -37 -r a -15 -u0020 Y -75 -u0020 W -40 -u0020 V -35 -u0020 T -18 -u0020 A -18 -v . -74 +r o -45 +r /o -45 +r . -111 +r q -37 +r s -10 v , -74 -w . -74 +v . -74 w , -74 -y . -55 +w . -74 y , -55 +y . -55 + charset ha 422,666,0,50,50,43 2 0 asciicircum ti 541,323,0,11,10,11 0 1 asciitilde @@ -219,6 +303,7 @@ vz 389,661,81,95,52,43 2 5 zcaron :Y 556,818,0,127,-28,43 2 6 Ydieresis tm 980,653,0,27,20,27 2 7 trademark aq 214,666,0,77,-82,43 2 8 quotesingle +Eu 500,676,7,128,27,43 2 9 Euro space 250 0 32 space ! 333,667,11,19,11,19 2 33 exclam " 420,666,0,62,-94,43 2 34 quotedbl @@ -324,7 +409,7 @@ y 444,441,206,32,74,32 1 121 y z 389,428,81,41,52,41 0 122 z lC 400,687,177,57,-1,43 2 123 braceleft { " -ba 275,666,18,0,-55 2 124 bar +ba 275,783,217,0,-55 3 124 bar | " rC 400,687,177,0,57 2 125 braceright } " @@ -346,15 +431,15 @@ fl 500,682,204,68,191,43 3 141 fl .i 278,441,11,7,1,7 0 144 dotlessi ga 333,664,0,28,-71,28 2 146 grave a" 333,664,0,203,-43,43 2 147 hungarumlaut -a. 333,606,0,22,-157,22 2 148 dotaccent +a. 333,646,0,22,-157,22 2 148 dotaccent ab 333,650,0,135,-67,43 2 149 breve ah 333,661,0,143,-71,43 2 150 caron ao 333,691,0,72,-105,43 2 151 ring -ho 333,40,169,0,70 0 152 ogonek +ho 333,40,169,0,30 0 152 ogonek lq 556,666,0,8,-116,8 2 153 quotedblleft rq 556,666,0,0,-101 2 154 quotedblright oe 667,441,12,29,30,29 0 155 oe -/l 278,683,11,79,13,43 2 156 lslash +/l 278,683,11,84,9,43 2 156 lslash Bq 556,101,129,0,-7 0 157 quotedblbase OE 944,666,8,70,1,43 2 158 OE /L 556,653,0,53,58,43 2 159 Lslash @@ -363,9 +448,9 @@ ct 500,560,143,22,-27,22 2 162 cent Po 500,670,6,67,40,43 2 163 sterling Cs 500,597,0,72,72,43 2 164 currency Ye 500,653,0,153,23,43 2 165 yen -bb 275,666,18,0,-55 2 166 brokenbar +bb 275,708,142,0,-55 2 166 brokenbar sc 500,666,162,11,-3,11 2 167 section -ad 333,606,0,122,-57,43 2 168 dieresis +ad 333,646,0,122,-57,43 2 168 dieresis co 760,666,18,9,9,9 2 169 copyright Of 276,676,0,126,8,43 2 170 ordfeminine fo 333,403,0,0,-1 0 171 guilsinglleft @@ -378,7 +463,7 @@ t+- 675,506,0,0,-36 0 177 plusminus S2 300,676,0,74,17,43 2 178 twosuperior S3 300,676,0,89,7,43 2 179 threesuperior aa 333,664,0,120,-130,43 2 180 acute -mc 500,428,209,47,80,43 1 181 mu +mc 514,428,208,15,93,15 1 181 mu ps 523,653,123,143,-5,43 2 182 paragraph pc 250,310,0,0,-20 0 183 periodcentered ac 333,0,217,0,80 1 184 cedilla @@ -402,7 +487,7 @@ AE 889,653,0,72,77,43 2 198 AE ^E 611,873,0,73,51,43 2 202 Ecircumflex :E 611,818,0,73,51,43 2 203 Edieresis `I 333,876,0,101,58,43 2 204 Igrave -'I 333,876,0,130,58,43 2 205 Iacute +'I 333,876,0,150,58,43 2 205 Iacute ^I 333,873,0,142,58,43 2 206 Icircumflex :I 333,818,0,152,58,43 2 207 Idieresis -D 722,653,0,28,58,28 2 208 Eth @@ -428,15 +513,15 @@ ss 500,679,207,43,218,43 3 223 germandbls :a 500,606,11,39,33,39 2 228 adieresis oa 500,691,11,26,33,26 2 229 aring ae 667,441,11,23,27,23 0 230 ae -,c 444,441,217,31,24,31 1 231 ccedilla +,c 444,441,217,31,20,31 1 231 ccedilla `e 444,664,11,18,19,18 2 232 egrave 'e 444,664,11,65,19,43 2 233 eacute ^e 444,661,11,47,19,43 2 234 ecircumflex :e 444,606,11,57,19,43 2 235 edieresis `i 278,664,11,56,1,43 2 236 igrave -'i 278,664,11,128,1,43 2 237 iacute -^i 278,661,11,100,16,43 2 238 icircumflex -:i 278,606,11,125,1,43 2 239 idieresis +'i 278,664,11,127,1,43 2 237 iacute +^i 278,661,11,99,17,43 2 238 icircumflex +:i 278,606,11,124,1,43 2 239 idieresis Sd 500,683,11,32,23,32 2 240 eth ~n 500,624,9,26,36,26 2 241 ntilde `o 500,664,11,18,23,18 2 242 ograve diff --git a/contrib/groff/font/devps/TR b/contrib/groff/font/devps/TR index 5096c945cc..53c11c807d 100644 --- a/contrib/groff/font/devps/TR +++ b/contrib/groff/font/devps/TR @@ -1,206 +1,296 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName Times Roman +# Version 003.001 +# FamilyName Times +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries. +# Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997, 1998, 1999 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Mon Aug 23 13:06:12 1999 +# Comment UniqueID 44710 +# Comment VMusage 35112 42048 + name TR internalname Times-Roman spacewidth 250 encoding text.enc ligatures fi fl 0 + kernpairs -A y -92 -A w -92 -A v -74 +A C -40 +A ,C -40 +A G -40 +A O -55 +A /O -55 +A Q -55 +A T -111 +A U -55 +A V -135 +A W -90 +A Y -105 A ' -111 A cq -111 -A Y -105 -A W -90 -A V -135 -A U -55 -A T -111 -A Q -55 -A O -55 -A G -40 -A C -40 -B U -10 +A v -74 +A w -92 +A y -92 +oA C -40 +oA ,C -40 +oA G -40 +oA O -55 +oA /O -55 +oA Q -55 +oA T -111 +oA U -55 +oA V -135 +oA W -90 +oA Y -105 +oA ' -111 +oA cq -111 +oA v -74 +oA w -92 +oA y -92 B A -35 -D Y -55 -D W -30 -D V -40 +B oA -35 +B U -10 D A -40 -F . -80 -F o -15 -F , -80 -F a -15 +D oA -40 +D V -40 +D W -30 +D Y -55 F A -74 +F oA -74 +F a -15 +F oa -15 +F , -80 +F o -15 +F /o -15 +F . -80 J A -60 -K y -25 -K u -15 -K o -35 -K e -25 +J oA -60 K O -30 -L y -55 +K /O -30 +K e -25 +K o -35 +K /o -35 +K u -15 +K y -25 +L T -92 +L V -100 +L W -74 +L Y -100 L ' -92 L cq -92 -L Y -100 -L W -74 -L V -100 -L T -92 +L y -55 +/L T -92 +/L V -100 +/L W -74 +/L Y -100 +/L ' -92 +/L cq -92 +/L y -55 N A -35 -O Y -50 -O X -40 -O W -35 -O V -50 -O T -40 +N oA -35 O A -35 -P . -111 -P , -111 -P a -15 +O oA -35 +O T -40 +O V -50 +O W -35 +O X -40 +O Y -50 +/O A -35 +/O oA -35 +/O T -40 +/O V -50 +/O W -35 +/O X -40 +/O Y -50 P A -92 +P oA -92 +P a -15 +P oa -15 +P , -111 +P . -111 Q U -10 -R Y -65 -R W -55 -R V -80 -R U -40 -R T -60 R O -40 -T y -80 -T w -80 -T u -45 -T ; -55 -T r -35 -T . -74 -T o -80 -T i -35 +R /O -40 +R T -60 +R U -40 +R V -80 +R W -55 +R Y -65 +T A -93 +T oA -93 +T O -18 +T /O -18 +T a -80 +T oa -80 +T : -50 +T , -74 +T e -70 T - -92 T hy -92 -T e -70 -T , -74 -T : -50 -T a -80 -T O -18 -T A -93 +T i -35 +T o -80 +T /o -80 +T . -74 +T r -35 +T ; -55 +T u -45 +T w -80 +T y -80 U A -40 -V u -75 -V ; -74 -V . -129 -V o -129 -V i -60 +U oA -40 +V A -135 +V oA -135 +V G -15 +V O -40 +V /O -40 +V a -111 +V oa -111 +V : -74 +V , -129 +V e -111 V - -100 V hy -100 -V e -111 -V , -129 -V : -74 -V a -111 -V O -40 -V G -15 -V A -135 -W y -73 -W u -50 -W ; -37 -W . -92 -W o -80 -W i -40 +V i -60 +V o -129 +V /o -129 +V . -129 +V ; -74 +V u -75 +W A -120 +W oA -120 +W O -10 +W /O -10 +W a -80 +W oa -80 +W : -37 +W , -92 +W e -80 W - -65 W hy -65 -W e -80 -W , -92 -W : -37 -W a -80 -W O -10 -W A -120 -Y u -111 -Y ; -92 -Y . -129 -Y o -110 -Y i -55 +W i -40 +W o -80 +W /o -80 +W . -92 +W ; -37 +W u -50 +W y -73 +Y A -120 +Y oA -120 +Y O -30 +Y /O -30 +Y a -100 +Y oa -100 +Y : -92 +Y , -129 +Y e -100 Y - -111 Y hy -111 -Y e -100 -Y , -129 -Y : -92 -Y a -100 -Y O -30 -Y A -120 -a w -15 +Y i -55 +Y o -110 +Y /o -110 +Y . -129 +Y ; -92 +Y u -111 a v -20 -b v -15 -b u -20 +a w -15 +oa v -20 +oa w -15 b . -40 +b u -20 +b v -15 c y -15 +,c y -15 +, rq -70 , ' -70 , cq -70 -, rq -70 -e y -15 -e x -15 -e w -25 -e v -25 e g -15 +e v -25 +e w -25 +e x -15 +e y -15 +f a -10 +f oa -10 +f .i -50 +f f -25 +f i -20 f ' 55 f cq 55 -f i -20 -f f -25 -f .i -50 -f a -10 g a -5 +g oa -5 h y -5 i v -25 -k y -15 -k o -10 k e -10 +k o -10 +k /o -10 +k y -15 l w -10 -n y -15 +/l w -10 n v -40 -o y -10 -o w -25 +n y -15 o v -15 +o w -25 +o y -10 +/o v -15 +/o w -25 +/o y -10 p y -10 +. rq -70 . ' -70 . cq -70 -. rq -70 lq A -80 +lq oA -80 +` A -80 +oq A -80 +` oA -80 +oq oA -80 ` ` -74 ` oq -74 oq ` -74 oq oq -74 -` A -80 -oq A -80 -' v -50 -cq v -50 -' t -18 -cq t -18 -' u0020 -74 -cq u0020 -74 -' s -55 -cq s -55 -' r -50 -cq r -50 +' d -50 +cq d -50 +' l -10 +cq l -10 +' /l -10 +cq /l -10 ' ' -74 ' cq -74 cq ' -74 cq cq -74 -' l -10 -cq l -10 -' d -50 -cq d -50 -r . -55 +' r -50 +cq r -50 +' s -55 +cq s -55 +' t -18 +cq t -18 +' v -50 +cq v -50 +r , -40 +r g -18 r - -20 r hy -20 -r g -18 -r , -40 -u0020 Y -90 -u0020 W -30 -u0020 V -50 -u0020 T -18 -u0020 A -55 -v . -65 -v o -20 -v e -15 -v , -65 +r . -55 v a -25 -w . -65 -w o -10 -w , -65 +v oa -25 +v , -65 +v e -15 +v o -20 +v /o -20 +v . -65 w a -10 +w oa -10 +w , -65 +w o -10 +w /o -10 +w . -65 x e -15 -y . -65 y , -65 +y . -65 + charset ha 469,662 2 0 asciicircum ti 541,323 0 1 asciitilde @@ -211,6 +301,7 @@ vz 444,674 2 5 zcaron :Y 722,835 2 6 Ydieresis tm 980,662 2 7 trademark aq 180,676 2 8 quotesingle +Eu 500,676,14 2 9 Euro space 250 0 32 space ! 333,676,9 2 33 exclam " 408,676 2 34 quotedbl @@ -316,7 +407,7 @@ y 500,450,218 1 121 y z 444,450 0 122 z lC 480,680,181 2 123 braceleft { " -ba 200,676,14 2 124 bar +ba 200,782,218 3 124 bar | " rC 480,680,181 2 125 braceright } " @@ -338,7 +429,7 @@ fl 556,683 2 141 fl .i 278,460 0 144 dotlessi ga 333,678 2 146 grave a" 333,678,0,44,3 2 147 hungarumlaut -a. 333,623 2 148 dotaccent +a. 333,681 2 148 dotaccent ab 333,664 2 149 breve ah 333,674 2 150 caron ao 333,711 2 151 ring @@ -355,9 +446,9 @@ ct 500,579,138 2 162 cent Po 500,676,8 2 163 sterling Cs 500,602,0,22,22 2 164 currency Ye 500,662,0,12,53 2 165 yen -bb 200,676,14 2 166 brokenbar +bb 200,707,143 2 166 brokenbar sc 500,676,148 2 167 section -ad 333,623 2 168 dieresis +ad 333,681 2 168 dieresis co 760,676,14 2 169 copyright Of 276,676 2 170 ordfeminine fo 333,416 0 171 guilsinglleft @@ -370,7 +461,7 @@ t+- 564,506 0 177 plusminus S2 300,676 2 178 twosuperior S3 300,676 2 179 threesuperior aa 333,678 2 180 acute -mc 500,450,218,12 1 181 mu +mc 510,450,210 0 181 mu ps 453,662,154,0,22 2 182 paragraph pc 250,310 0 183 periodcentered ac 333,0,215 0 184 cedilla diff --git a/contrib/groff/font/devps/ZCMI b/contrib/groff/font/devps/ZCMI index b73175a65f..bbe9de1176 100644 --- a/contrib/groff/font/devps/ZCMI +++ b/contrib/groff/font/devps/ZCMI @@ -1,9 +1,24 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName ITC Zapf Chancery Medium Italic +# Version 001.007 +# FamilyName ITC Zapf Chancery +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1989, 1990 Adobe Systems Incorporated. All Rights Reserved.ITC Zapf Chancery is a registered trademark of International Typeface Corporation. +# Comment Copyright (c) 1985, 1987, 1989, 1990 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Fri Dec 28 16:35:46 1990 +# Comment UniqueID 33936 +# Comment VMusage 34559 41451 + name ZCMI internalname ZapfChancery-MediumItalic slant 14 spacewidth 220 encoding text.enc ligatures fi fl 0 + kernpairs A ' -40 A cq -40 @@ -156,6 +171,7 @@ w . -30 w o 10 w h 20 w , -20 + charset ha 520,594,0,62,-82,62 2 0 asciicircum ti 520,320,0,69,-73,69 0 1 asciitilde diff --git a/contrib/groff/font/devps/ZD b/contrib/groff/font/devps/ZD index 83f30d715a..7b4ae752cb 100644 --- a/contrib/groff/font/devps/ZD +++ b/contrib/groff/font/devps/ZD @@ -1,7 +1,22 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName ITC Zapf Dingbats +# Version 002.000 +# FamilyName ITC Zapf Dingbats +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.ITC Zapf Dingbats is a registered trademark of International Typeface Corporation. +# Comment Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Thu May 1 15:14:13 1997 +# Comment UniqueID 43082 +# Comment VMusage 45775 55535 + name ZD internalname ZapfDingbats special spacewidth 278 + charset space 278 0 32 space --- 974,621 3 33 a1 @@ -98,6 +113,20 @@ OK 755,705,13 3 51 a19 --- 392,705 3 124 a98 --- 668,705 3 125 a99 --- 668,705 3 126 a100 +--- 390,705,14 3 128 a89 +--- 390,705,14 3 129 a90 +--- 317,692 3 130 a93 +--- 317,692 3 131 a94 +--- 276,692 3 132 a91 +--- 276,692 3 133 a92 +--- 509,692 3 134 a205 +--- 509,692 3 135 a85 +--- 410,692 3 136 a206 +--- 410,692 3 137 a86 +--- 234,705,14 3 138 a87 +--- 234,705,14 3 139 a88 +--- 334,692 3 140 a95 +--- 334,692 3 141 a96 --- 732,806,143 3 161 a101 --- 544,706,14 3 162 a102 --- 544,705,14 3 163 a103 @@ -191,17 +220,3 @@ OK 755,705,13 3 51 a19 --- 927,542 3 252 a189 --- 970,616 3 253 a190 --- 918,593 3 254 a191 ---- 509,692 3 256 a85 ---- 410,692 3 257 a86 ---- 234,705,14 3 258 a87 ---- 234,705,14 3 259 a88 ---- 390,705,14 3 260 a89 ---- 509,692 3 261 a205 ---- 410,692 3 262 a206 ---- 390,705,14 3 263 a90 ---- 276,692 3 264 a91 ---- 276,692 3 265 a92 ---- 317,692 3 266 a93 ---- 317,692 3 267 a94 ---- 334,692 3 268 a95 ---- 334,692 3 269 a96 diff --git a/contrib/groff/font/devps/ZDR b/contrib/groff/font/devps/ZDR index ef2ae44d36..d2c6af02f7 100644 --- a/contrib/groff/font/devps/ZDR +++ b/contrib/groff/font/devps/ZDR @@ -1,7 +1,22 @@ +# This file has been generated with GNU afmtodit (groff) version 1.20 +# +# FullName ITC Zapf Dingbats Reverse +# Version 002.000 +# FamilyName ITC Zapf Dingbats +# +# The original AFM file contains the following comments: +# +# Notice Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.ITC Zapf Dingbats is a registered trademark of International Typeface Corporation. +# Comment Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved. +# Comment Creation Date: Thu May 1 15:14:13 1997 +# Comment UniqueID 43082 +# Comment VMusage 45775 55535 + name ZDR internalname ZapfDingbats-Reverse special spacewidth 278 + charset space 278 0 32 space --- 974,621 3 33 a1 @@ -98,6 +113,20 @@ lh 939,559 3 43 a12 --- 392,705 3 124 a98 --- 668,705 3 125 a99 --- 668,705 3 126 a100 +--- 390,705,14 3 128 a89 +--- 390,705,14 3 129 a90 +--- 317,692 3 130 a93 +--- 317,692 3 131 a94 +--- 276,692 3 132 a91 +--- 276,692 3 133 a92 +--- 509,692 3 134 a205 +--- 509,692 3 135 a85 +--- 410,692 3 136 a206 +--- 410,692 3 137 a86 +--- 234,705,14 3 138 a87 +--- 234,705,14 3 139 a88 +--- 334,692 3 140 a95 +--- 334,692 3 141 a96 --- 732,806,143 3 161 a101 --- 544,706,14 3 162 a102 --- 544,705,14 3 163 a103 @@ -191,17 +220,3 @@ lh 939,559 3 43 a12 --- 927,542 3 252 a189 --- 970,616 3 253 a190 --- 918,593 3 254 a191 ---- 509,692 3 256 a85 ---- 410,692 3 257 a86 ---- 234,705,14 3 258 a87 ---- 234,705,14 3 259 a88 ---- 390,705,14 3 260 a89 ---- 509,692 3 261 a205 ---- 410,692 3 262 a206 ---- 390,705,14 3 263 a90 ---- 276,692 3 264 a91 ---- 276,692 3 265 a92 ---- 317,692 3 266 a93 ---- 317,692 3 267 a94 ---- 334,692 3 268 a95 ---- 334,692 3 269 a96 diff --git a/contrib/groff/font/devps/freeeuro.afm b/contrib/groff/font/devps/freeeuro.afm index 189330880a..7a8c9ff671 100644 --- a/contrib/groff/font/devps/freeeuro.afm +++ b/contrib/groff/font/devps/freeeuro.afm @@ -1,6 +1,6 @@ StartFontMetrics 2.0 -Comment Generated by pfaedit -Comment Creation Date: Sat Dec 7 00:17:28 2002 +Comment Generated by FontForge 20060105 +Comment Creation Date: Sun Jan 8 10:14:22 2006 FontName FreeEuro FullName FreeEuro FamilyName FreeEuro @@ -10,7 +10,7 @@ ItalicAngle 0 IsFixedPitch false UnderlinePosition -100 UnderlineThickness 50 -Version 001.000 +Version 001.001 EncodingScheme FontSpecific FontBBox 4 -23 903 710 StartCharMetrics 16 diff --git a/contrib/groff/font/devps/freeeuro.pfa b/contrib/groff/font/devps/freeeuro.pfa index 1891d4ffc5..1a7c433b1e 100644 --- a/contrib/groff/font/devps/freeeuro.pfa +++ b/contrib/groff/font/devps/freeeuro.pfa @@ -1,23 +1,26 @@ -%!PS-AdobeFont-1.0: FreeEuro 001.000 +%!PS-AdobeFont-1.0: FreeEuro 001.001 %%Title: FreeEuro -%%CreationDate: Sat Dec 7 00:17:28 2002 -%%Creator: cjk -%%DocumentSuppliedResources: font FreeEuro -% Created by Werner Lemberg with PfaEdit 1.0 (http://pfaedit.sf.net); th -% Generated by PfaEdit 1.0 (http://pfaedit.sf.net/) +%Version: 001.001 +%%CreationDate: Sun Jan 8 10:14:22 2006 +%%Creator: root +%Copyright: Created by Werner Lemberg with PfaEdit 1.0 +%Copyright: (http://pfaedit.sf.net); the serif shapes are based on the +%Copyright: Omega fonts created by Yannis Haralambous. +% Generated by FontForge 20060105 (http://fontforge.sf.net/) %%EndComments + FontDirectory/FreeEuro known{/FreeEuro findfont dup/UniqueID known{dup -/UniqueID get 4214375 eq exch/FontType get 1 eq and}{pop false}ifelse +/UniqueID get 4166882 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /FreeEuro def -/FontBBox [4 -23 903 710 ]readonly def -/UniqueID 4214375 def +/FontBBox {4 -23 903 710 }readonly def +/UniqueID 4166882 def /PaintType 0 def /FontInfo 10 dict dup begin - /version (001.000) readonly def + /version (001.001) readonly def /Notice (Created by Werner Lemberg with PfaEdit 1.0 \050http://pfaedit.sf.net\051; the serif shapes are based on the Omega fonts created by Yannis Haralambous.) readonly def /FullName (FreeEuro) readonly def /FamilyName (FreeEuro) readonly def @@ -49,261 +52,263 @@ dup 15/Euro.mono.bold.slanted put readonly def currentdict end currentfile eexec -743F8413F3636CA85A9FFEFB50B4BB27302A5F6C876586CCC1670A7EF5521E6ADE15AAB4 -DD2DDDB83735311FC63DB80D2C96AECFA05BB67F865EA35934B4B79A203A8DD489B09C79 -FF6EB9DBCFD889C3E73F8C94BC342AF671D6F688870A62EE1A0DF216E150FFEC64A8C2B7 -509AD05C011599C1AD84E6C4B668E07EA219BD72663D8AF4CA8EC8E23AA90DE90BE940C6 -6DB849CEDB3B64961365A7CCE47F4FC9E30FDEE4B14B90C2E0D8C344EBC974EABF417B3D -28251A78ACEE2BFC4212B1E3E9C7EBC3262821EE98E538713C64DF0BC13C19337B63F916 -071CB6A5AC8BFC2DC3788EFE6757CBCB8F6C6B0964E5B8B64E298260DCF69D22544C4C9A -AAB2694F2BC33A988936E3419205B0776C4F4C10DA085BB58EDB9040578A7C542326FA48 -21346944DDE5011ED6C593867701528ADFAC1A81310F107E53D7E80D380AB29406EC81A6 -B1E3AB7A256AB446730F845C2AE0A9E5BC7D1B95E98239326BEE43352A8CBAA2938ABC8F -CA71A312A4CA623CE886F872E8BB8DEC0FE2DD61157735BE411D22655E7F6B32B7F17F06 -3F9D197C0A6DC6D751E75EC06CF908DD78ABDCDC462D74FB774644B8C65A3652BE990BEA -3DCA0E713CF0F97262C55AF252E7A5CEB5F8F1614565FF088A38106F7AC63CE031F3D290 -DC08D216C170295D553776062AC3801F18D2F1D5F5CBD4A70659E299DE13D4D9A12F39BA -F4A51643F0677019235AC25DC2B29169D38308F2170A1AA0FDCC59EA2DE35ECB2E59AEF4 -26712D65FC6E009D511502BAB674960650F7E863E287FC366F03EA9FBCC7E725239D121A -A8E7049E59D220D39D790DC7AD4C38E1738DD4D7DDA27071E79360B636071004FE9DD730 -A07E015588BAF90E19ADB3601854DB4F1E60D1739C7012FBA34FFB67C2E46A0BA81897B9 -52B9B58EBF3316F6CDA6F86B9229B6D097AF9F9D4A721CE75AED8898DD2A42E1776EDDAB -466F2587F72BCC3BE89B1D130C9E7CA61CA17BF0C2C3F83DD310DC3C56955D9ADE4956A6 -CFB4DBCEE8FA354C27EE57ACF334C0E91BF7952EB7E3D4E452880C5F2BF9ACF9BB58FA39 -9F0F0AE89DEBC053B6EEBD52A6330BC1F0BE0CFD13E1EB04803407CE40EF22585405F487 -C2BE46742F3224F33103A0B171F1677174E7A8E655F0CA9B111C69433F5DBDB36948C7FE -0D9099AD8FBFDEB70AAF63ABE825A828B29E7166B23359730147748F9B6F38F29503D9F8 -DA5AABDEE13F5E4DE80BCCD9200FC2207C26E99BDF0A3F8200C0FAE266D7F136B673B0BB -93C6E76EEA685EA6383F3E62BF3F55FE3DB8180EA998FC892856D82B86AE02E44D1938E8 -1D4F2E63716B311DEB6E1D3DD2049A3EE6D68965EDCC4FF457A92F2E47C432608A1161D9 -7AD9008EBC54787C6E5163D49019CCA728B50ED47B576B733936DD31311B5734B98A3F92 -8B79D6EA5F2C0228D14A087491CBA8C0DD37C92FB93B545239D8A776664B74D081E15BAD -3F44B162DC2ABCF7D44656E67BB00AF2D7FA83D8C94F636D4ABC7F722B84D6B31D5E1AA5 -8B565C02C041873F155C1C0F4CEEE19D9B9D129FCF4A6D530AEC02EE8A003E529CB72865 -5352A44F12DB9108A413C974535D645719357AA5B40B092C237C758DB720DBC2CA88614C -4B78209A7917C2409C7F6754D0FC14B3FF2EA76340158F8CE8AB6B6BC084BDAB16D75442 -0F879F39C072EDCA91AB38113E3E5E5587750D1EE53342924203890EA97A6081894BBC01 -BB8331687ED0FD1D0AECE0833B7C8ED7C502AFA836130061A6580673E2B2D2AD5427033E -FF14BF2118EDE74F495358571A69778502693C47F5361EEE27958AF7DC1B8193A1CE5DD0 -6F98F56A7DBB0786DBD6DDF121B6328C97E48AA189FC5AF35D9809A1D4E859F3C2C36DF6 -CE2E3A5D1E07BDC25F95BE1E8E4351D14BE6BEC66004FFD619CAAD555330C0853DEA3E47 -5D346A924D14F4F2964CF56D1520BF4B49DD1AB6629BD1CAAA43AC18CA12E420863C4F02 -29AAF36D75DCBBBA34AAF0D802098F411CCBF9527EFD06B42DB0D7A33B7CA8AB95A11F93 -56A1A905E4740572CAB4CF683522B62224A251964B1DD39EC873B0F79138414B3B1429F4 -B89618B94C0651F6CAA8017EB3407C8D2CBF2F01C75081CC580D3C6821351B4BE90213CD -0010D0D66050F98D5365E34E6B2ED87AFBE756B98D470D2DF72E5CA7D8FA5AC997A27472 -CF1D2F9B00124CE73F4118811A33158A53ABA3F9A50BE3BE4D99E771EEABC64299780F7D -F716A28E356A707F6D356093E82BAF0F7B48029A264FF00FD9CA6BE5FC5567E0E165726F -0CEF4D14BF7A3C06C41035CC24D2BB27D910595080CD1FD7E188CF3B5725CF2418C55F42 -050C24F59F845A2AE8A774AA2DE18C7D46A148FB94512E85EEF1B17FFBF7419337D4F839 -4C7DFF5AA3A9C15A0D4CC3057B01F76DA752C2D1D504EE2EFB864ABDFC20EDAB64CDE513 -40166400E4A234DF428B83BB3EC5047BA10412905C0F4460496B763C22C79131C3267B6C -39C009CF01853FC39C8C350E86279F116F00E40E1A4016004B904B7462BE236336D197E9 -8E93C9890F942433398E541A32EAC543620BDD57D39BBF6869E0E30B02E871A6ECBC2FBE -1668ADC19FFD974B9282E96F55EA3C2E57D8758CB55469B67C5E3D1EB2FCD97B014DD592 -A5FF102CC98BDB42AD0A8D151D816C621C32459E74C422C39FDC7F5BF261804DEDAA856C -8768DEB3FFF8B6970B6175A5BEB048FAA910650E865E16FF6672ADE59FB29D16EB104B90 -3F912AF4107F4BD9076B90D21B1E11A940BAD3A99C66D78F3CE377940DBCBB646B4E320E -C2F9CAFA016708BCFDCEED11F528B4641A0C38FD220A9A991D198542CD7287671DBC7764 -DEAD19E775E1B88F13B9935A022ADD244F080CC29C6C6238E60BDF7FD339D97CEEA33A3C -DA86A2DB8D2A02C1A6330F28759BB47E41916295EC645275A9736BD4BC738839B3EB13FC -3E8E085DA24F6DC3B5DBC270D2AF741AD70690172FAE865C252AA7A131D196DA287755EB -5A1E0E8AAE93EB40B84AD249FF8F7C947ABE3B3A7D7DB21AAB547EAFF14DF357C95E24BF -72922C80ECE27FB6BC2E6A355A4EE321FD3C72C57D89779D81EA394E4C2050FB173A12B5 -02140F8CDC659EC2B5A6D14E604A4D4002218BAEE8FF000CB4E9BA22B0A2871AED1D46B6 -FC72054ACE8AF56297F688AB383BBDC7A90F4466D44F35A58D21913B1560E8B7DF6CD686 -38D872330412E04014B081CF280A64DB4888538B401FDC739457482B83CFE87DF74336D8 -535B124F600EBB34BE727C3BC5E289D141716BAF510A6551E5EA6BA43E770211B80853CB -0435C0F67E8A857788EEBAF47394F62328A493D44B4B2DC33BB8C748EE82F6866C424DFD -93D62BA22A8F4D30E976FB9FAE45F0D7F93FDFF41232BA60CAC314097FC7DCE9627CE249 -57E783A9ED3F496A45B17D815B326A415976B122A7238247D38CAFED1018A951FF9B1941 -7E305D3698B38BAEA4C15D57E7A9BA26568ACDD0CD723C16CE3914D52566E04764FE810A -6AF84AA2F0DB871946A400FB9BA23A579830A50528C786EF0CE14583761FA58702E45EBF -0B72CDFB6F1DAED7A551D0E43CD23DF336560A87915F101EFB11B2F136CA998488907950 -ECEDC2F737BCB90824F0490EFB2A50BDF21B35C381EF73ACA08D20505B15469459C00261 -0AD4DF6ADD5E31B877EEA14D2884C0D31476B97CFA80A63ED8115300B03A0B8E8F02B8E6 -F56609D0CEEF1279A1D37DD713A6AC2372430C056E0D31ACA80202E2C71829CBE1A9A417 -69F8C1C19FB96F19518A69207BF35F38CBCF76FB89D9C8CEBDCA13FCD79320898C541CC5 -1376AF391ABADE82346FE51F3B365D042380F2A059A25D078FB3022CE752EC9E20EDE640 -28BE9853A159786462E59701EBB5F9AFDE1D84F5682B82B7198647E5B189CEB1A7B0FB55 -337C67CC4DB08D48E843A8FBCB6A8B967D9D225CFE66C81B8E87C3EAA6AB16C36A376FA4 -2641CAA75A77407CCF25CC112CBB9FECF1C8878E84623BCD03003AEC832A80FFCD39A246 -8195A4F8740AF2499AA2FBFB2A48BA3D95D42E10FF6D72004D878D9E8BE5AF08151EAB6F -3E1343ED64D18B07F7AF6E575D75B1F0E3E72041B2D7A21E400F2173AABA5AC981A2D132 -327EEA3CD7B434355B43669FFC74EC7B04AC48EED15EE1A6466398CB246FD54A5E072487 -0CF731812341144511F777FDD08EB4FCE0A5FCFF6FD37A8053CF993FE5276BFD1DB17D3F -10CE419F10C975351148F108FE9FEBB9DEC326EA7CC30066920BA941B7191E852B91ADD0 -9A1F6539E74DC949DF7F23E54DAADF018E86B158439C8BBD9E4628F4ADC9F6BF776CB6B6 -888E5E0752FE92A53E0F3D8738A3ACBD58B7748FDCBC9EFADC49C1D5853C41A582D07E2B -8DCF8D3F8E7ECD79C1D7C44981FF8D6DB49FE7F976C6F9B448D0CFD0448A631D874C69C0 -408828257777A6D9CCB32395139AB20962323C1D38F5A81903E6389E784D560E5F72221B -AE4AAE68C29FCCBD8E4D7739E8C1489301D80D2F8CBAA951CA9EBA8BB2B7AAA80A30B7C4 -C9D2356DD2E6B1E5A66E3652243DC521A77CFE0E8260E3814F4197C1407866ACB9A799F4 -D2B7B6BAFCAC660AD28452B1175C808815144F01F99DDB7F7A19CCFDD522E89A1CF4EF9F -E986CEB8F80011C4763F29DE90C76ECE678D42783B4C9402B7CB270AB0B8681469FA5C2C -DB3651C61F1AFBC441F456533B2C0F4FBAE9A7571F2A90FFDF33587C480DA43FCF29CEBA -FCFA080B5A44F2BABDA2044212588001E47EFE55D91ABA7EAA7C261D02027301EA28AC65 -687B3681CEBF7CB08C0D2EBA3167075B61EF0C7791A5C818028AB0CB08E56FBC45B027C7 -416FF0E6EAA615963408C5EA295BE0673C493E9903D95CFB010FCFD094F03192A9538FCA -259B48347D79F40F3023731DE72ADA10E9038A79B9F7E2A93041AAC1F268F9439DD0BA6C -77559ECB955103085C3900C11A926B889D8E8275D96BE1E74ADC3C95E50D9CBC9E3925F2 -3FBDF75C7117DF74F2A56F173AAB79A5B38D4E17508D85FB4E1238CCCCE2AC989009C633 -B00EA1A69DB9A9A2E7B7A97BD9E9CF7E6E1F314DAED20648034C47A0F75722072EF97745 -924A16A58D4CA4B928F334200C2B2FE463C798F1CD657F2A53B9F13B9D7B9A207F9CD12A -A1CE977533FBAD9B2C6DFEBE1141B96786DD79169C4AD3D27B49D96F1A5ACABADE98346B -F663DDE31A38AFB1CA50BAC527DB023DE87E06FCCB71B28106D25AF54D20897BDBC78727 -C904C638B060085637BEB4B891FC150DE1B03BF1D857C4F987E8C26941673C55D37BB64C -9F9B1D1E66A830C33179EDAD3780AAC1A2974C240FF753E8E59B99B0B2606CF03B364317 -562C705F9107FDD892DFF9EBB3844C2E3C919B641DBAC0E2F89ACC57CB38A341CD643BB2 -47863FD8504FE8216E21F78F88B110F88BE618AB8F4D4ECB62710B811214B5906A62E385 -CD5BFB483F856560E99FEC2C962A8615FD30A9BF24E719C36FA39E6B5149BAA33E9DEC5F -BAE0A930C2D6A1AAF801C7B7117CFC33F16DA58DCD1040C0C30B6B3C54552DB2252E2759 -7C0D86E017ECCE5E37E45FA9581C886DF5417B6DF5CC143E71C7B9ED6379A717330D763F -4D817D66956D321B0418482C10AFA32125F79D0B57E90E54CDAC58F808D38276949007CD -A0D8717CB3B6B1C382CE1ADCC33174EF75BFD861D568E11FDFC5A738B3CB2703A1487A23 -D662B9BB3931E8232FB3A8CAEAC02D2CFB3196357FD7692BB8A9ADAC4EFC62E55567C77F -78D085BBB1A509506F7750791EC5AE9F21F4BE17DAECFE19CC3FE46DD8F66AB8565CC43C -4AA4EC4D2571C238777D81F910E9E6EF9FC45482489C657591DD9727887C6B03393D095B -914374FBFB365471B160B8C9BA13190BCE16A610D8465F6D4DAFE8866CC1611B0617550C -D3A2209CA2D66EB64DB1098ED0080DC64D6357404EEF153A9B7592C4D25ACCBEF7A2CA34 -9CEF81963C7BAA1F24B1AC2E17D70CA2A57551216E4CC533E615D36B2E15B3400B15D29B -89DF7881DB682DD3E4CC8C2D83FB8AE43845185C18938C4643EA356A9B9C2769094382F8 -3E1672BD0247897FD8896ECB5E850789C03840DEBBAA59F6B7D5B828D81AAE78F18711D0 -1A51F7B51BEC544C3BE6E42C3EE6CAB4008BD375319F19307760DEFDA659C11E1D0937BD -528468C0AF9221C165616AC7C2F59551593ACEBC6D7E2EB7619AC3F34A1C704E5371EAAD -1C0ED311416677FCED438F764C8065468F2E75C14100345766170E46CC4C82D774B3DA7B -D1AF304235966183ECF184D2A808C2E01A79EB89C11033D5ACB3012195EE1FA6F040619F -620045DC68049F0488B30EC6CA4193E6146FC06477960701646737690EB5F9D613548AF5 -3FB99A11560AF27C50DE034DDA6517C449953608D326A35DDBA2707C2603BE5CD32E8C23 -AB80B9A25B97DADAF3F6C3A31B3F7300D37AABF812FD3F7D07FD41DB3EFB7B4EA062F68D -D6EAE9FCE68AB4B4890F8A65F62FB3ADFA6F9A8BE6F99542CF9C1A0C79FFC320BC992590 -E912BA10918F218A8A50E1415E8946596BC2282AA9D2549F06E4E915633CE6DABA8E5726 -99F96A04AC9C350BA4554DCE7497FA0242AA1F0A5F66978D852EE175D35D38BD89C99D59 -4150198769AF67B2E2A9E7BA5CB0E685EC0E5B9532C9338249142C7D51CBBC6D0A0C2314 -869F61B162BC7B0783831B7EB1104A3DEFB7E6304D8E77A69CADC48005E1DB0A9A8E0D63 -DF98831D291A045831A6F95820C130957011A209625C270430EF9A4D54033F97B0EBB0A6 -B2D3D7B64D02764A8D4DDFDAC7598A3E5FF505D150F074C52A927851C37C1DEE34217D23 -F59DCEC4F863556EB6C62E0236AE398C5F27F2926CBC38463FE7D3DBDAD0A8113FD9B0F4 -D93ADD64162451778D570ABFC58ABDF8FEE553E014233B11E1E30CBAAA4AAE1900F02BD6 -F3431C0E843CA6285E4AD421D71D8EB69CEA07F23D727EF5FBF7BCCD6D8598FE68A873F0 -6399306A375F9A449056BCE40B4A5756D71883F2EF7FD916C7A886F244A2C0348AA95E73 -AFDDE842E885FB89B303B7F7BE4FFC96E94D449566F199B6405C85A3F0B7F9F1514CC3A4 -40CFCB2BB97EB08AF617BC6777ECD3593C8AF65F24A7F79D438EA4996E0443E542A45115 -AB0A23A6AD9B3397C2165F9F752A57A6DA58A59396087D3ED59673B1A2FAEAAA4AAED5DE -68FC0F75CBC05789880D1318E1DEAB239873C10495E8A861299ED082D1968A51295B3ECE -4079D775106352FE27F00130BA4B9BED34AC5056CD1111C3BFE982DDAFA872559EAAF186 -FD3F717373EE463EB56A3A2A17653723EB24DC7E74DDF22F0EBC93BEBD7A19938D51C04D -FF8E4F8E2539CC784840FEF56DE6B041BF8DA3617E2AECFAECEEDFC0FC7F45E18D549511 -A18E93400E5F874E54E43DDB16DC53D546AED588C8004ECDDFC88E2948CB467F88025571 -2C5ABA26CE47AC4877AAE9429300A19B4C0EB2FCC918B3DE7CDB3C38A45F2486C6B0A57B -34F5CC21CDB809217C1577E85D8D40BAD0864A12A934E818975307AC3C6AD91B80A3BE19 -A888B6DA3910024BB94FFE3BD371887B6AF40FDF3B3A77925D16CEEA259F1C99330D5201 -80CB5ED33876C0057A160B9CA16E9401046154FD92F85F6386036067D9ECA976A504CA7D -4278765BEE4E5D08A8832A45D3DEA2CF21AB2BEEEB74DE3263ACD8915700E10C9CD72C9E -AB0A5DA11EF61413B33652AAA3ED73B445FD3A517F4C3FC537021726A949D70F522B3987 -938DB3D02B7029E5AE1B506FB08E73E08C09AEAD5106368D0F93C4E2551F1D792AA318A0 -F01B5891334DE63C4B63DE11A30BA6976F13CF99211438E9C1F87A857E09AD944172D38A -DBA4247D402879D27461E5740E2DD7FECD3FB1C17911034895D24367FEAB97FCD335BAE5 -78E606D3DDBE223348EC816C29ACEA1172E7AEEEC705A0172D108D49FCD5BFA64EE7E107 -808F8EB78D4ACE4CC6121344F96EA46F9AE4289399D1C0C3274C1602CCA6E9AB0C6CF045 -DD18C4F66FA3F87D4B2F34F0B24EB4DD38D3B4088AFB1C4378C886E53F1B297A7351413A -7D6B6023D12799BDD6E80FD9C6FBE8A8A313DDA621A4F3BD5706F28BCACE60380DFCAD8D -818DFEB230FE4FCCDE10B8278492227826287342E3C2D8F5B4ED0F29A336562B6679E79A -7171C5B77C576A272B008D04BFB626A5F7DDDC74DD72BAF2B735B45EA9AC33C26E33FB0C -C87EF1743927DA31893D690E9DFBFE84D245B520D15726BCB913898C5AA7DECA2A274492 -033C03543B00DA691383798A4B5537387CAD74BB91CF1BCFDE0E315F7F661437C3E7395D -D3DA366932BE297F25C6B2BBE0F76CEB16E107D109BA27B5FABEEDF05D1A5255DF61A325 -BEEE633F564797639EDB22D84A2ABE85B7BC3AFA1B38559DAB8ABC54F6829A16B2FE24CF -EB4568BF63B57FD44C032DA5CF2D36717A857D99B0A8A2421BB2B20312808C4F2F049E06 -050CE4C54DE5DD872A035725AE7292824975265018D65EED0EAD72495C50506D38AD29D8 -9D379215F3A4D74F5E2C9002C4CC09F6CB1DAD731C229656977FD22CF7CCE89B325D1CF9 -344BE186517AEFC7CC0FF762AF7634C96433A846BF9493D8A2C660E78763DAE28D52F42A -041026E22EF60CE1FFE3CB29CC5E6A39B9EEAB0B165C71705CE9C4B50D7EBBCD6C0CF1BB -0E52F1CD1A72A63983F905458F54425A74D6389C877D252E749D7D8A9C31531D28EFBE15 -BA50F4B5085D365ECEF98A867B6D282AC4E522AA657C7607E57F71B9A8C8C309B4DFE8AF -E949CC09A56BE3998DF780F4660AA71224EF405A644B463FBF571F0E5DFAAE229C4C8005 -E8651C7348120EE658BF6BBC236AC9439BF11852E11E066D1BA8DFD7076DB128CA90A0B0 -C9DBB9CC88E469F890E93875F21822D26A953D01E2FA00E5657A242CE0A92963E4ECA460 -784CB43806238C72280433BB5CF797A99AFDAAA022FA421A344E93CEECCA58FF39A1E856 -E9BCB2583016696484B071A1B199FFDEB29BCF6855101C4EA271A39750F368E54533089F -EFA0EFC81B0A79DA70408E5AEE18F793BE39791C541BEC63023069CC70D9CDF618ED29F4 -2037393F69668A7358EFA69D2A7AC8722BF1FF999CA768BBF08EE757E133B01E63D5D809 -519B97CDCE80701790E558737C6F8B00B0E1341633987A842C0907979D24AA41428267D2 -2C692A1D93A0686307D79563D6264E5BD5A40F6EEEA9B91E0D98F868D2A6D43A6C909D9E -514500C10ADCD062528AC54B4CDAD6DDB466B655EE8EC4314A16880BF009C7E4A9FBEA5F -63AAB8A17016250D80308FCF8AD5E5BAA53F17ED902872FF01A6FD6651B7B343A73777D7 -2090F1B08554422EAE4DAB73B22F714A9E236AC2329D092400FA031883BA9E118FC2397E -8773D8CDF7EDFEDD7BB716419C7D95A7EF9BD2E44BE071014335866A7B273252F694D0A8 -644764303EE238F0369DC9A47EC3523A48986FA44ED642FA4109FE1E87984E994C3F0D5F -3E9B0764A8D25FAF6318CE48203A0049CA2DB950DEB8B493F66247FC9B36D80D995756A6 -8014E98A00CB1EECBCFDFA4C3E9A0A2A5B831E0B4B823542D4B4CD70630CEAAEFDF5862E -6D09F1D0EFDD1CC7CCC1F8EF7E5619B5F5C24D0F6F65458D62354E8E2C7ACB617F275D8C -F8048980BEEE183BDCC404443726C9309FB58D1739D57D046906CB0A8A358AEF8793CE5E -5710BA4BD661A25C345706013E51622631217D4A5E8D0E0D349C52D1D85DD3AE715D8710 -FC51D4780572E07543A0A9E5C3C538247079B16F5FC764CA72C5B3297CB032CC9E3F3999 -AB6A1C135EA731B57219B8B32C2461F116C0402786012C6DBC39C20E3E764DA41378B602 -CE5D9E0F68B4FD5936DEF0D6271E47CB14BD2C730C9F330CEF26D141144519AEF903EE52 -8739E1FD8D338AC74F43B4B7FFC0D62FB5055610C553BC056B67C4B79BF8CB5244F1D585 -2DECFDA75EA2CAA71DACCB893BB498B22AB3E1DF96D7BBD102367DFBFF02C135C42040D0 -155BD95DA0C4AA8F0D4F5F60F2A035829B6134CDD9CBEC37DAC58568BC58756177662F43 -5DD3EEA732A8A6448CBC6D4CACCA4444E9B2ABF1C54A1E30DAA5DA323B48250B70699479 -6DFA8BD2160AC41E82B3AD3A8E592DC3246B50AF4589BE7994D06F50A93C31BEF0608DB1 -4E2E138355A23BAB7796FCEF61A2495868B1D388F211514C73F639A1ECEC450E2CD0ECE4 -2687DFF5D25965E5B727306FAB8580465A74D81E5590F27C76FA05DC7C6DFAAAE841B99D -3CA11A614EDDCA91410C90421E5BA23092E4563BE97153F2385ABD2C37672688028FAA55 -1168C9EDDF69E1B8FA511A56BA6DB831538B3E0B59148E6EF69CC65A243FCD643906ED3B -07FB3AFCD850688D4CA8FD6CACCE1D4B55ABCD16680387251999F558327C57AE761B0CBB -AB668E8D555ADA713699DC39F3FA0E68D7FB005FF628342C36A1BC0E9A5EFA6896DF4D58 -E547FCEE7ED610FC5D32C8C72C24B6FA766A14BDF23F5AC9321C6908EE3B9376425E7298 -00B731FF0FBB3E5EE589F0C8037CDADB72D10C2124A14FB45D45C94C8F5EF2A40B81538C -538BC7DEC4823B3537BB9DA406345A80EF9B132455935C90D54E1C9D35B2C25DA45B00C6 -914FE04EF91C874325D8DBC10D1F30A7BD4E9CC5E70A3519CD6CC94F52433CE636E46F62 -0083A91FDD6FECF6CCE1D9FE0546741EDC4FF0C34C79C7114C1812DC389FE9DA6E4F5F43 -F166CBB4845DD1644DB6E2243277C029AEB6336392427E1793339ECDB8BD4C156C49CAD3 -9E1231153C35503CFA86E23CFD81BBABFF24D9DB287F63D110969F71D737747013D3EA59 -7792927261F837E5F4467843297B61D754E9617B1D2EAB47BAA5D4E205E777130D625841 -8902DC1259D91624CC7DA37CE6AB44B8A951346EB2EA4AE1AAFEA05CB873E68F2C38752E -B01B2DA0823E7BBCCE05BA73E4A01D9BB4F0A93387E4B8CF71A72F4D677072EC92714848 -A658C4FC971E3EE4958E1A7C6765A9FC7AA63793A1D371F35A9CAFFD5AFE891E8CD4B38A -9369E3C96B2EC604AA83E8DD9C0374C4F417AE3301FF8EF9DD08D5CFBFB7718339047C1A -88227B978D0D91AB3D20C465FD2E35634B8A36F4FBCA67207EB3018D05C7A6E68B73DC9E -C1D3C88599DD0B11988E6AD73F39C5607CA9DD96FF81B6709F76C11683E7149572F97E67 -D2D23332B11205CBEEDDF904048334FC859F8B7A204B65E39B09C55CDDC86B8D359BDA2C -89483BF30BACE74F95B981E37EB0065A3C1A3583B25E78498E98DD181E08E6017B72C9CC -B471867010D3564561DC5CE90286163783F1FC3C5FD75845457BCDA205E992ED1F7BCF9D -21252FFE5C2A90ECC12E907CC686D9AF3C57F3DBEC3D1E08C417A0811181E1D33821DC6F -1E7F68AC0613D55289C1A94D7F1308BB27E93D7CD952E3831AA55D76DB69891C0FA49DA2 -8C237CC650E1023BB18F4E96A66B6A9EAF7D074D9BD22B9713A61C659159564DB7FBADB0 -6F15A7E107989F27482C41A96F67950EFF8012C9FC287D6AE31E87BCD8E59FDA8439F691 -12A0F0637227B92FC4EA69B84A8D923B763E445308485B5C32C18F6604B6B30FED2775B6 -88B3089B0B681B6DB87EB4EE386E9D514C3BBA853EA767ED1223BB4AFFFC648918111932 -288547788BDE5CDBB17EC628321C24E0C013DDA78F24381B2A984BA655791FC791BE162F -60D87530E3DAB5C150E048BDA24DA97126676B948D1879FEECB2A2E304475A078CFC27B9 -E14D4A0060F1254CBE65E4864BDD242A0339B1ACC4717DB134E7764433C03F916B9F4CDA -0A1FF1EB33F1E0FFC667594FD23EB58288AC827C247C4AE6F8F3CAA30C7D0E9DB9F23BF0 -9C81580C20B4B367B7BE85E2F48557C00353756669FE34E543FED5438C52B2F132840140 -E548F948CF9AD2B734D895539F7D4CBE52A221614F5666FFB110A1BF0B8B3A9F478BF056 -FB1080C94005310175607A3E2AB73B9A810B50838F31481707C0B2CAC918086AB06ABDF0 -A7200AD28E443E23B34B61649B19D0F834ADDC3B18937807B43C2C258532AEBD615DD853 -38394F3581E6B8A98E86057F5288FCDE9DB3107126858CB9863A19C3B765E345C816E795 -053645E472FB47304CB57B536C683EA8E74DB0E8A286363DE7456BDFBC1C75FE6943DD01 -7F62A61F0C0DF19C1C5F53C483D82647023D9043ADB1B5247A532281BFE7B3C42BBAF6AE -883EA3CE43CF5CE4CF51FEB90575CA233084C5A2BF4498A6EFDC9C8DBA1B3992C61DA729 -2E64D1214C28D0FFCF644BFFF1BB5F61852F04AEA89C1A888AF5B45F8E2F86B362EDD544 -7AAB5338207EEBE69461DE06538E63FF050DD92DAF297FB6365234306D1910D1D7D43F55 -38116B5634F5885F98343E5D6559298CE4D7F91FF569A1D0B34CCA2A8229A98A400F23B3 -8519190109BE258672BDEF4C1038FC0621D5003588C697ECACEF2A287D5BA465D95D330F -050119D5273DE92A6C9F324E59579BA2A5A39FC845DA4F38CEF1A47DD185CBB82D559D14 -913F16D99D3086A733A48E5056667BB858F821609D27DB01A4BBD3D1B2959B679B4D1536 -B4A2E989FD94FD94DF7A401BB241EEA7E4F83FB6BEAAF4135A836D5A3D01D0A36D0C907D -B9B8E57F11F22D1EEE3C041BFFC4DF6D004B1554FDA6CD542CF19F8F2E082AE2C0C1DCE6 -B0648C6759895783BA7C81550E94308A8E504963D76E56673FC2597077361F9545FB2537 -66737079EFFB2F30E8E62602E7E37F7048D3E391C18E3D44394351B235985E6EF2AF267C -B92BCE81ED8EC8DB2E2D6A56BA310F01575482366A032B003EEB72B22F677AAD0EB9E2A9 -6EB9017ABAF963F8FD8EAE59EF0283DD7733052680E42AB23BD98D10682B29869E7EFC15 -C9D6570A610D0248D548AA7DA39FDE4A19B7B5D6131FF06AC674B622725BBA0A8E9B257E -986EEB3773A57BBE0A96C2C7C899509292775680F72BF1A084123F6172D7C210F53C385D -644A139333B4767CD6E3347572AD +743F8413F3636CA85A9FFEFB50B4BB27302A5A63F932884E18BF5153AD36053037D1C6CD +04294AF6A35612DB9108AC8514CB5C4A8469971B75A09F9E662068B0685490EA8C73F2DE +2FBBCF85D15AB9385E529DAB15A40D408002E88D0C107F711BC66BF0F2E92FDDC6B188F9 +1EEB6B86050D5032E6ABCB11E343C6D795217B5973972E99A9420651ACF3B8FD4CAD1DA4 +B00642AD077A5B86240F89F2BC011009CB2CF173FF68E9A88F0018F187D5E036FE8D904F +211842FF01AA7CAADDEB9E5A534FA3F90BDB8F6FFE24F7AC6E7BD0A74CF29EBBA51871F0 +D1FF3262EA3CAFF583545FAB762B8D9BF14C8845C4EDB387B1248A4BCCB70AEDC6C67CF6 +C4648FA00124C44166D66DE1573C926CD9C6AE4F8B89E5987035D23195432204B648D458 +39F1769201B7C68828B3E49DFEF3065D705C2EBFFFB05B8A865CE4888872146C99671EFA +EE1F514B94B86A47AAA5F21A39786E77D443FA4CF8B525C98FC02459528C08410C679440 +CC3A160C40B14E03FAB3E267943E1FBACDD4C082777B31AD3591DAEA25DC60E0EE11AB59 +52C58879FCB35A54009A156730AF209A8D4F00CF7DD9870C8DC3E48C19BED68742376268 +0408FFD4A34A0D8659D44FADC9FC9D3084601C93FD9FCA770B1191500ECB12C8DBDB2032 +007CECE3C6A2CC8593386DC1464B94A09EA2A83438C71ACC7CAD72D074ABF6FB98EFC81B +6A3D672D2DCC637F34ACF18D469ED29FE2C49062380E6A32850F696834FC8E46A924164A +C64DF8F848D4D000EB6FD06A44D0320975A8EEE85173E4D7E39EC9DB03A8ED20DAED86D2 +73CE5762A5D35D1A81987F9CD9921E39C2C5CEDD661C3B3EE86B703C101C410E41648347 +7599C4CCB91234510ABAC16898D9D10E30B5FC1BABE78DF2A009E09E52816F2413899184 +AB8F942A496B56C9FDE630B13AD9F0996ADE29CABAF1443452B427A2280AD00B85F4657C +65B47E929FB0A2A31F257B24FE4ECBAFC878C306094088E00DB2DA6D36CECE30971846B6 +39DA9BA989109507FF21FD7198736278ED1CD021BFE7689D93B425D8B6CCCF07D37C22D7 +966FB87EFBE8F6A86D4F0C4BD38F5F3A41DCEDA924FD5F0D8FF089A0F44DFD37498507D3 +2A383FC717537744CC6868EB913D5C08CD0A3F935145FD5D811F01870F6136F4EFF757C5 +D03E73FC22F88624116C08C225C1711C96A01656999AAF7414163E75548AB89F8AA85F20 +9FA6EC242ECDA0953DC61EAE4107610380DFE2807101BDBA51391685990B3D1FFEFEC97E +0F0DE04283920370575AC06B8597EE756EEF7A3543A3E5F1B74343702A201C43411E7B76 +DC6422E2529E740A6BC6BD44ABAACD955406734AF0852471CC7B49325286AFFD2F9CFD04 +BB9CA4D0F6F0494CED1D2984E2C607FD2CE5C5A1F538CF9107771E691FAD51AE5DA70748 +F14F2FF7CE61292F6FA50D4510E4100360A4A2EBF7F9A03F7A4DAC981C6DE582BAFEBC23 +AD97EB56656A218B24D47C4345B398C14ECF5B76037D83FEB71E65F89C01133A5228496C +DF4BCC8BD4C615C9725511A2376A01C80F1EF38757CF104DD0809121EF1A2B9F11B5BDC7 +8E4F5A1463F37E952891370E1887644D26751A261FB5EE78BEA745F4F44A9B00098EDC4E +3547F5AE50DCBF29EF5BF82D653A148D340BC600EB411F4EA8A6A2D0B548D0B217E78943 +BDAED70072716A4406D685B55C2C0F490D2B472C49B278DB78E9914C3623825E595A541F +509F0E7BB1A827F4E6B0EA42C668932AB48D7B4A21AC0DA7451924D1AA7CDBE80C94F109 +1A4D91C3B908060FEB07D1B454A4CE4A60F8FACA6930313E09D5F11D1D8437E6B65EEE5B +B5570C3B66ABC491BD8CF63C2C62BC7B38A0CDFFE9D75627E6D3B23B608C7EEBD8FC655C +D197D28E8EB319814EA71B6AD63A966DB61D9C3C7D788683559C49338D037A235FD56FA0 +059DDC6017F0919926C323327C204139F07810575A8749877FB2C0C53AF4E3962613A0E8 +7D7C37A9974105992FC6B754CF23017C2E5851BCC90F48D6847EF1EF59E42032AFE03A98 +DB363827CA07E337A5852BE832772A2981864B8C1EDAD8759ACBC132ADD0BB360F40BAFD +FC7E5D32D724CF82FD3342D431F8F4CD9BDE2B07C8D8EED411E3A5889A8163CD1E2C2786 +F78AD3C1D9879FD6E93BD1FD8949DE47A8BCD219422B2F1316950B72E1E5170701795A0A +80709E894C218AA64DF5684719830066B995785AB9F1603FFDCEA945FEC09F57BF886F01 +A95811C7D4200E11C7CB373AAA4301E58F74E77519E11A89751A338B38D115B365547271 +DB19E51B85B30D1EB8E3E0B95436262D52471D65BBCF5DD94F6FF1210BF09628191F8F04 +3ED7109DE2AD284954564A1C80811B9AF1686DB799D36B50EB095AF37B9117992BB6B8F9 +0CE43ED10F9D0CE4B8ED76549239A626809ECA3D5A90E23D3CFBC776D6D816A293F2A80B +7267D1842FA102BAD77A2A775CB55473F40D3976AFC77ECDA131FF663A12795528A7EC15 +1D7854E759321709A8F4750716C949D71D332F9B0B80130916826F07E0165A5A1C5F3D8E +EF8CDB4EE3F688867FDDD47B4D67AD677F3134D90E07A1F0A8690169AC2E176BCB7CF260 +A70E374F3EC834E3B83D19CE3A52883024D2976E8E02C0B320CFD7B8BF66D11FBBF49353 +647AC4AB23A2A5689506AB83AD60AF8783E04815CABE60A3243FC633FD12D6DA50036691 +D3A0FBD4AD1309289565FC0C449510AD58085356AD829538B97A501FA73CEB693F09D551 +8FEAE6DE59FD7871AAED96A27127286C09FDD5A1EAE421CC38F56A4AF6AD5FA9BF96BF00 +2BE0A49BE6F27636DEB364A0762BCFF054020850C9222940B0E8A08E6A77240E1A0F42DC +07DAD0283BCD9DAC20E2A7542F5D74FC90D2661AD95350566F27125160C0525364D8B764 +E06FBC0F85531185F8B92B4ADE928B2CF0DD4736CAA76F6659D128E416E9792F24CB6B41 +CF369FF2BF9C360FA006938067DA606B2B19C8599FB28306FDACBF29841A169F6368384E +32B6BAD4179E345AB2B3CAB35E29E154228DCDC3D4C3317295A050A8AA86273BF7178A07 +65B598EE7061AE13B11B670F2E5F90F9FDD2F09A84F247DF9C90698A44A29BEC87B3C606 +E46A35D94986363CFEB26524FD7FB88092978128B0D246934D93BF90CDD94F7D243113C0 +8BDD1E09E4AC9F6E7A5A4FDB89150632CA41E3320D6B5AC722B27984D238D29A20F69BFD +1AB94BFA39EE52371CBEC64E16E37319ED189F2CC3992EC03A780AE4AFAEAC4FFB7A8340 +36F307F1BAB17477BF14809DA90E0AFBD0E3182D7E40A1EB1AABA8C64D9CA02044E85A82 +7FDB6C215F77FADC0443A04083E23DF21523DE178DF165F369E93AD21F34B4D72C24D5F4 +D6D19BE8F5B01AFCBBEC537C509FD7B388AA66A3E4CBCAA85601C20BEBBD2D3F11CE1CBC +E7D8FA53FA83710A80D8795AA5FF3C2E7F063DC05DC002E8278DCC1FAF9909FFE55A633D +86BE4C570BD9820327490CA61CA4FDDE381CDF70D97FF279F6A458E5D7B8DE5E1384F894 +3064F4F17D369F014D5A68C9F2E170BB59634AF060678CB4DC84450B94E34CA704B5DCE3 +67125FEE35A1B0A27F40E38D00CB779ACB34284080D5D78E30DE6233F0AD3FC22D170A60 +E2B7D4F206862D1890D16E3C9D720CCA05930814E00337AD8607098C68CBEB919504277D +B3AB769CD77745B375945BC4246B813F828099DAB82512936FE106B368F189ACE1A2EAE1 +4CF5FE1C91BD0D79CE179D34A0E85F8F1BFDEF9F28C1F26924D630E845CAA19BADC44B7B +ED9C6452C0AD01D108967D85E0779AEE557A9207164D22DFF7BCCE92D5CB9809ADFD332F +9567C92510CFC94796AA5A312C4484183B66C44DED8476F974CE6FEBFE86178B99F1820B +07B3D7C80F5CCCAE591BD8920814B4398A502756D3C945D07C6CD9FC2414086434151E87 +30C14D38764C532BDD5830E24C16BFF8CC19181621DD26E67259711E6CC43ED8AAE343B4 +B728BFD242C6C314B3D453DD3B3BC3986E736B4085C8D7498C9778538AC0F2DE17B9F89A +60082B571BE433119A9522F93A4C1222A26F94A199D71F50FA5BA94CDA733E26A43A3002 +564A841FCCC267EF8F1556CF85C8AF4A649F0AC533E0E859E3E2723525FCEC1B6E6A3CE9 +0B66D585B1E7C4B953ECF941B12D3003FE14852B7978126BE4B58DF8924651697B79F333 +F2D5BC34458DFD36826F8DFD374D0D59DD01FFC2C455B1A12AC80380F48A742013D0C3D9 +C7E040364633F0476D1ECE1870386871CE95099A30F881EBE00F6E140FE58F8C1D5F2B37 +35D12A9FF60157F8691DD64E60EF9B957C586D4E2E9D5474634F7AA44D50B11B001C66CC +F283185C6E65E32D2F2B8127B986CF62455067A5E621738C8A381D2B6A033F6C389BE878 +3179A54AD38D69223AD779A159B2D7D0AD1670A03171EB4C27930E1878037813CBC46214 +7486F3B8E9F7016C9E2E4C60B03A4C976D48EE3A20131AA00F4B79707FD801B3F7A7759A +3AFF3F6CEE749F2B32B01A582DC408384B8749307794914EAF7A0300E1C9AEF42DFFD828 +C5EE7D9730CE489F0A98C81E166B2B1EED3BCFACC370709947CFD29DEAD86C58FCF6AEA4 +8D670583BCA7018853B781340D7F4D1F2FA5703EDA8F1815F74407B4617016AD9BDF1F49 +340E7D89AF7CB5818B996201512968AA2B3D71C468C69DB46E514EC3CCBA360B3E80972D +86145148DC0BDD4ADDDFDC7D835DAAC0AA9B96DDD91973288B3A2A28BD6BB415C2A79818 +7F58F3402DA53B0600FA53A01AEEBCE5081BCC0645348BD1772C54A608E88499CE0103EA +C4ABC7FD74256C4F16A977BDF7F13843BFC6CCF16092740D9C1E7561EFD4EC6A3A30460E +A434D1921727FA26D9F56627DCD6AF95951E602936C4AC6C7A6F6DFEF2C0CE0571458B27 +BB31DA11C9E09DD3917F61140EFC4F059AC2FAC839BDDC0695B293C42BD17B1895A6B2B2 +F955821C5CE356B1AA33C5F361BB0F43828A20B9F193E71E057F45B6CC8ABE53EEFF801F +2B6CFB31B6DEB5D84EB8525B938AC424B3486DEA14982E5CF7F2D2C92F2D9B28033DE0C3 +4B610505771E0B1BE6AF03552EB8B44EC1190DAEB15DAAF21E7F2D437780484F0535D8ED +941A8FA13D379B911FC7AC99E4657DABD37891C467E8854DEAD2E34E05962F0EEC30B5D4 +B8FA6EBA42C102564A2FCDF679AFB7FC145C98EDCC81BF33DCFEB593CF8E7C2F6E9E22B7 +8B1DEE3B75C0E87AB95C6341A1D09948BF338B682F515D89230F8CDBFC72D56A00003EAD +F5BC0A6CC1A802A80480D6CEBA34631C7892909E049473E8328295069C0845571ECC9980 +CD8BCEB4C930C06601BFBE690FA0BB34631C7FF64D91A31BDF9035EC6E44EA12A79DF384 +FD82092DEAFB2D2E1B0C8ED903BCA55382F98FA5346ACC20900D86E64FF528C604D6815E +3DEFC5F71EBBBAC2B5787B2F25AE820AFDD4038CD58B0F1710C1EEC7DA521071DCCFB9BF +24C9EA1049EF59E61D20BFD50BCB5D8CBD0DC266B8836F34EB94858A54CE0C9E6088188A +EDE0BE39FAFE697AA6C8805CAD63DEE8A0CA226C91405DE5FE7FE8820124D6D79EA5F956 +8C5CBFEA24C4F3D601428329453F226C4C3E3E429E429C2E96DF25EE1DD7B5B12B2C1DA7 +CB0EE6EB0D018C2DD437A6883D2C2E57B9CB264CD3369C20AB831CDDAC5F57E550727C0B +CC9715B2C87C26C0A9A6A2F173C7B03F12F993B217466E7896E4764C6AF20CDF0634205F +3E38E6C8C6DE3A4269C5C6CF03E49D60F0E2F3D7B3ED302C3BDA4EC6332867A19C9CE8FD +6E2D0F2C597E11896A3E6EDC4B616F76B3355DFBF26DB2199963252C93AE423F1AE6683F +115E9B68672BFF4C9134EED4C51AE587CC859F742A283F3C9B6088B0B9E65A1EA521578A +E67D7396907129B83C1C9E2302D5FF46FCBF408E0FA69AA8F6E7193AE9E9DD5254201317 +B3D304BDCA689B683568BCAD9539C4D6BDA50814D8F251A70E76E7A5EECF719DD1655DA0 +605D9EFC940A8CF0FDEBC7146DE12F108959280903C34C69DC92F8205F2EE1D52F483AA7 +7E02F277A1186849056036CB24AB238AF08C903C4CEB4851991C24A8158EAE8D8F3BE56C +355FC26D7BBD2849B7ED9E1A25DFE98BC62A6797615BCE59DEAAFD5B6D08298E2DDAA611 +3DE60AB83FF7687B7ADD6706822270ECA925B559F2F9EC59C9AB0F365868DEC3122EE67F +BAFE7EBFACEC14D4D40C55F94ABBE8CE82CEA67FC1415D127786071CC06DCB653CCDED0B +40A9D49994865CF45BA494AC11543A0546DC37417BD01DB100273EE3F0E7D12093E50FD0 +E71B9A0326E8F35FCD86B3285781008ED03FCA1850D685CA5B62518C9194A0C7E8CFD5A9 +FF6A0EF508ADBCEDAB7C7144272F8C7DB274CE7AA09CFABCCA3E6967EF259A72C3B8F4FD +4605CBB99CE88B679F3EC9486C442B05D776B9D7FA8C04203DBDF33C0CF45B15E68C9376 +168229CC5176BC1E9707853192BD0C394E2D8880050594675F5B83488026791AEB1E6D79 +A424B8F90149F4855EF1BDF6CF0137D459D2A22DA3FF00743B52B2F9C316262EE53AE760 +43E2F267C2598CE66CFEAEF1459C307CA9B3FD8E897C93426545B80834EA16764633B2C5 +5B31557E6B5398F17D0BE5CC1348FE71014EF3BA2F917589AE4A4C9D8EF22A6D0A288557 +C4B2F2ABF2C30E778A5F21AA16BDD04CD8433514FBC7F81583F5D9CE3DE38542DCA55FFC +9142EB3B797946A7A121C134C82DAED820D3FF0E7053B40134353012A44B15506385533D +0702662BC8545130B7717B5E99BDC18E8473D2920C80CAD8F61D352C2B3718567B0BDFDF +F063D2E1A568D6B17412149E4C9AFE3FD3F8186A8274FC01CA07504BE6751A7BDE74719E +970A9F1744917E3521C4988E547EC1B63D33AD86390DB6CDBA9436884CEAA6064E383B61 +68BD405523A23D32B571E534354E1BD4EA3EDB7D1BBF2D0F6D6B36993DB0DF94C18BEBE2 +6F4B6475306784C091E139A759F627843CED43666D95AE257E650DDA0F6C0458CF27885F +25D59FE5601777ADCCB42ABC20F960B17A2669B4277AEE51A3D33BB1914FC5985236A6E0 +0C32956A1CAB55DD020DAFA2BAE36638E5F5866AEAB8E3439EFEA9266CB28B9DBA4B1746 +046A71E3BF05F37FF84CEFD66479640C3BB43D915BFA3AF6F3916F2AAAE39DD4317563C2 +26E361EE278E9FE076EE6B4733720C53918CA5CC9C5F4C6C7A36D8E49A591074AEFF0363 +09E5834A3978ACEB9016F116D20B6854BC59484F344D069768C6DFC503EB95C9FEA0521B +FD6E1C99FCD1268D18C1DD428C66DE9145071190FB17464C8C4FE87D9C0F3DA5FC3E933D +7375E88DC3BA96858D671A6616F52E70EC6B5795114C3F03F8C78CC388AC01866B347196 +40705C2EA04CC1369A88B3A242FFCB32B48024742A03C94A6E715EF09F06CC999CA1E593 +AB6013B7E25685C4FA93429EE0613E3DA07C94D82B9A739B954BD6EA1E2A9DE55461211B +4FBCCFF6BD480C845DC4B075B33551C760FE3D8F5EDB1201269AF48C8F8E96AFB5C7F767 +20AD3F9BDB225AF317770F1C2644589EDB5639376E30DB053930511FEE7C9FF81F6B76ED +57E4C6CF157AF5EE0D8E05F0B9F1276385B3C4EF779593B0120AAE0073880C0DE6F76906 +8B96E92133050EF7BA0A6585AB37880501F42477E0AB8A5D314F7A5A1B760142A42A40F2 +2A12F0F79C747F8C57C688C5937BCCF9B217647EA1D7C16936055814F9260C647045F3C8 +997D40B7BB690B654B9F243D2FC9343C7BAEC4F79AC5CA9C8A43E414B4BC6A6B02828CC2 +1432BBC6E49EAB7DAE35926C6B0BFBC6AC3831834CF54A732E8531AC7D0A3AF62A5FF8F2 +4B59EF71698824E2AC5E4DC2D5C58B9FFA80817C4DA7638CE5B6F0F33164FCCDA6F82933 +AE42A26BA9AA939A7DBD55F35C29BB9D192251E945D9890F48F63D7BB58269031899F7D5 +A52C1747CBEE945D55154AD30301FCC6345DF34A177E9CAB110D7A52B63B131A1F7D7165 +BB5AC4B1842B9A1F3D86F521E4107B40963BB34CC61B10F79D936736DEAC7F25BBDEC228 +E7838F1032154ADF35F333077483AFCDD50410C07707A47F9306BF794A15B5452EEB34FA +48A8C1BAA627EBB16BEBE9369AE7D100CF8D14E5B70613C8C8A53CA82495E8BAE8990ABE +0ACC0B2E9CC44191A50417657662385821B1C897C88AB2A0B149090CE11B940AC6DDB64D +0BF745858A1A56F811F1DE81458F50A704EA30F5F1918D9B5481E6E4681B389C447A65E3 +56A12C8592C8709C09135B06994590DD0B87D2952C871EF0B7365D04928A7B19AB3A10EF +40B0BA1DAB4D3DC5789EBDB23E98698963FBD74DAAB6C8885A88634E9857CBCB163B1D0E +32DF259DFEF7217D6744CC6F34E0D96C7BC93CC0A19F4EFBDAB6338CB56B46E538EE92B4 +353AA6663AC42A2EF78E4A228886577678FF36E5ED221A807E009D33A737F89F80461FA5 +5741EEF636D19FAD5870AF6F436DFCEA130C102156F134F77DFE4933628DBE64B477555D +81CE6131866AA5712347043CF70634F92D5B984445D32A545607B62BA1C12D37FB6B17F3 +84838E274818032AD7A07CDF1F504B3CB5C5C9D8D16342CAB18697A5821B2E219D14F15C +AAFB33A44E4E6D18C4DC64F79DDCBF2BFF7B3FE05709420DBBC24B8C23822755062B9784 +69AF6B01CDC9C45E55A71BC5BE1EDFDC23C430D61FF776BB4B2AB69BD391758462A9700E +21B81CE478207D443C5A868946969DA1E63AA939D3563605C83C2AB2C5E7551169F466D7 +41FDCEE57EEE7897C41F0409AB61E86C947C83850C23DE579ED1A7EF7F941522F41337A7 +F2FF06D4D5CC4A9436A2CEB91B1D9218F46BCC3A1A5C57539BD6A56C6755A8ADD89884F1 +2FF46C13248D02EACB04008BCE1CCC3DA9CB7D4EF0AF02A97734C95D8C45CC360AAA467E +97858E0B66978BB46353E9C0A653E49CC1E63C119FA50441846E5AE38D551BDF3A7CBD2B +8E51C2C088A617B68E21DD2F44EF5033CD252A75C80F16F6C45EBC84E17FA58F8DA6800B +8F61B060F54124F1B1F12AE75059159AF036C25DD06F4EEF5D8048079AC6CCB1BD5DA270 +005EC1428BC3F7A6369EC13EC8F99F77892D163FE605B8609940E1B27D784C57B7842BD7 +10C78480BF7EE7CF9BC29064CBCBE8B3B584C453C29851C39438E10BB9CAD4B2776B0899 +EDFF8CC4D35C8DF827743DC5D85681F4A7B9EAB43E133384B072F0D7A86EC6BFD5989503 +A95AA4DFF2FCB6BCEC468DFF75D20F9FD35015D4F98D65160E9EF8E1AE723433114B5458 +7B0A7314D320A942440D3D37F3BE4164C5D796C5D3597222EC88C7A14503EF964643B095 +E2F113FA22EA7999905633109628F97982451A9810D6A1DD84EB108D7A26E04C1C00488D +322774F47B555B28D24732E6C0D4D701933C9506D379B3E5BC10609B167C1064F34A4327 +A50D0D2FB470994714FB881EE3B88B054633BFF034650C0C4E4AE5720C35C7F3E4CD30E3 +6B26D8CD1813A7703867952488E01B23FDF799AE3AB35E4880E41B4DDBCF8CB4FA68423E +2D5E122264F8378BB8EA414C83D95A4A6D85995CE64A50B39C8E5F94955CDDBD88804D42 +279515FC1129FD2F50A170B214BED20695CCE59EAE0ACE91FCE6DD217B3A737A9DCAE11E +A0C746306AA9447F469BE68D8488E392D00583BAF1E63782C73D5201359CE7A768F24489 +0FA50098398CB006F74E9877E9E4373228269506F44931115C0E44654AFD6B48E3E2F6DD +47E738DE4CDC5344E1C26FAE5B73B9844F5CB2292D675CE88C2078DBDA11C2A9A58F4B10 +42850802766C9387734F22288F12E1F0D211FE150294FDD1744D8001AB95D9D63FD5C916 +B7886A1D6A076D14AD0B6D65E63D49CBC825E85CCFE3E6119DD05D6450980900600A0A07 +4BE3EE6801DAA9670D1BD6F7FE3332BF9B16C9D7DF782547006BF79DD5286A899E1153F1 +077B7AD8CDAC2724E1689A95B958D24566EA5759AF2276E2558AC8A110EA5CAB9C1BE598 +4031BBCA618B7EA15E87379927AF1D58AF01217B45B9CC67F79D96977624A9A01B1AA7A3 +1D0E4B61F6FC96A620867BAB29A7331DE35BC73E29DD89DEC1B5CA163679017FD5D52D6E +F359C8ACD7D149B509EB1E9EA1EBDDD572720F11A390AC61F898295FCCA27F466787CE24 +3C889A45EB97AE0AD87B5DB995DECB80D8A73592C9E17F02ED6BEFD6CFC5E56275366022 +E3EE687762FDB605B7221C7004DA9E8B594D6CA0B0AA5AD97D0231C228E38D21F2652470 +2524A76555EA690062A1C811C7708F33A432E4B93683D416BC6BFD9A3A9CD114ECEAD652 +98376657CFC1B1826B77B533314A3962ABA6137CF6502713BDA51FFC763CF78C7A0AFC99 +CD496DFE069FACD2669351BED17106952A3E55A13210C5024885CAF002343A31D1E64745 +E973853B94DE520B204922CE2063140C7403D7E038EA2D21D86A72E417DEF576BC60ED61 +B74A8237ABEBD176625ADC0B1475EF4D985D05148D0233041FB5F02920F4F4C769E2DF96 +8463AB7054465464844A2A1F1C427B9369BBF6221B0D557C1F1AFF62F710BA060FAA89D7 +3C6E7F5B09B2D1E192F47743BE288AB84682254C54ECDB6FB52E1013CFD075D0430D321D +C0A9B30AA8D1BF0676816E3FB7BB53E19B9C782E3B15732AF9A233408CD12FCBB1D3A963 +3910D9E4F84F1D89B0A26AFC1DF439654005CEDFD46A9B5FC815C91E72631D255475710A +CADB424EC5D2A86681422B36B8A6BE4DCA28EA5A919D9EE1B4F722518925484A59C6A972 +F68A0BC736BEBEF281DFA37F4F51BE2746644CAAC585DE766DCDF6443263C9A403E4E110 +32721D8C79C005B982D7B1A3E19AEAF0C89A2AB06841D677F79C3152E4B130B122BFC8ED +D6EFFAC69BA8C66C47F3D5321FB8A9C7156CFA2F0F577DF1CA2D8E9C6D854B401FF8DCF3 +BFBA7C98B11B3F128EA81DD1BB7B4FC24943B43772A6E731876CF46608CB88EB143AE9B1 +7D72DE503210705410B26CF1D70D7D4B98A2C4AC6F7AEBCE59BAB09F1C4D4E97EC3A9D91 +15554C98E2FC7DF130D4548875C0ECF16614BFDAC96E9230FAAB82C6EBDAA0EBCCD1ABC9 +F9DB0B987DF58240B927A6AF8BF1CA62C39DA2DFDF36DA884F67553F058CE4718777EDED +34E30501AC3DD9B8F9008463A33AA8612595E855D009CF9F7C1BDAC1DBD1483BCFF8A7DD +346DC22F31646C0CF07C753596AFC285F6136BF7E3C83B0FB75D9BDFA9979C0930A245D2 +7899ECA0F64F12C390EA7293E5EFA7A1D0721AAF72B313E6A14FD20B1B5AD9F3BE0F071E +33E89D4F5CC7111B4C06F18782A5A8F840CF27EE20B8BDC0B16E295D4AC30C2E079F75CB +23A338BB99D059095BE8E7D2FEE1BC421BEAFC536D2E2C40E05B6EF3CF483A34CE506816 +2CE04C4F2D9F17748F9FAFB67F046A168F4545D80ECF05266556DA6E75B018F790D5B821 +B5F9D115BA8E3A7B273B92E6E111CD257A6B12F4F25956AF908C8CEC671DBB796FA93893 +18D5B8473A04B63E0F751744D8050A1D266A15656A016697A9CA765660B5728E9BAC77CE +F7EFA339B522C2C52E6C678C550388136C678B2CD1027214D0D086028A29DD4785EEB512 +BD60CF2132746757559BE4C6B802792700B911D098F4A95A758B6E30285F906B6EE7B60D +991F86B1961FDC2BD5A9FA8F68E488AD57494765D9822A469FCAC1BDCE3F3685B09550D4 +49CE97D9FA83F187923C4DE772464EFE98A9789B93E5691C621E9B79F227041D22CB05A0 +22282BAA61BFC04863CEB7BA282CE68AE91CCDC2717747B3BCD808136F779DADFDBEECFF +E610CEE002874E4B33EF0ED4602073C56693BA2479D885F53FE4F5C68DF9C6B09D021342 +C117F488BFC7F2A7BADC2E059F0BF05AED5F6B8467CBE018D7AC442BC3526F8566A71B4A +69E93874F74F3B751B8C6811992D47DC4D080461269C6EB18AE76ECC66479B6A53E1984F +A17E13F546FD4AC12024A1ACE29C9BDCD47274E480017759381B2081349FF3AC5BAA1902 +2D9EB3DDC8471B0D2D58E3717973F7B7CD8E8AEAA301A676579AD57D112CF6D8F659B8CC +E055A155AB0F6C6B8A3254ADBD5E6BBAA336327F3AE20C109CA8C46EF35814473457E3F2 +EC80EE99547B84377DF391B0A9B2F60B818A0A3D49D5E36A2D7A05F4F77F964F81CC51D2 +272CD30B52AFB7AEE06129977A0AF98BFF236EADF92CD7508A2F3FE853EE26530922A59B +639571AA10FA5FC0E1315B7215B76045E18141403E4B0B2A9EB724E69BB40AC1AB479216 +1686D2B0DF545D0FA08CFACB8C8145AA9FB982222EE247B7DF2D5F2B33A9B6AE29CC6166 +3F642883EB6757DB8F1845E1727B7AADAE2FD8E560922467E79EF1803A03C9D51F649DD4 +16C75835F9EEB1FA6FAE978B1B7B7792FB24EDFD9EF55E67CB02D5C23C9628F126BD3A12 +31869DAE5FBBCE60133DEB7D33F1E0ADFD9927A3E9E42B6AB0E5D703BD7271A179985FC3 +D91C2D161B76F70987073647B26542C83A34172663F6793DE8B8D9BCD72CCD48DF5563C0 +FBFA6CC45D99AB78CD6ED8B861948E54DFE9C99E169E35A88D03C1C9A7C84720A3956B00 +0842CF8C515E3A722DDD0B6627926110B335744866564CC638901758FE0EFA98F4E3F4CF +DF911E5E395EC3D17807D7483008A95BA603AB80FB6A359BA3F0A8ADFE60F9CBADF67441 +1D0BE41B802B3EC9075DC1EB375EDCD27E113B4B1EA3C8ED0B1BBB2A3DB934CDC5CDA9B6 +0F85B33DD71FCA5B25B0AAA6B528229D84E1E7B97CB72C0F20248509A2B6CC53E5B7B694 +24FD8BFAE39C66E86DCEE0B602C9102A0575F15693B3C0A268C1C3F897F57E1CC5A58ADA +4222A57B2A53B234BA19ADA37208C16B1B757E106D5D8AF0AFFD6BBA6E753805BBC2E9A4 +450A78025400D18B8FDCA54A18440331E48E52E3C4CA80FC171B02293CED081E887215EA +D34DCF1D6FC2FE86502262006977878E4960326634F1A1EC8D2D96CF51EECDDD6D7CB410 +6D2B37136A13B4D2B67A2DCC74365A27E72B263FCF506B34116BB93BF76DA0C813CE6F63 +639BA86D000BEEED941AC2096A7F1C714615CE20F920BC4427BBB157105FC8FCC3D5FA6C +9C0D797AB7ECA5DA2B5DF210C4523E406821B704383C63055EB87E8C82E68ABB062487C8 +834EB35BA973902999E27D9A7D143536CB253195A3801FAF741C1588C808A1 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 @@ -313,4 +318,4 @@ C9D6570A610D0248D548AA7DA39FDE4A19B7B5D6131FF06AC674B622725BBA0A8E9B257E 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark -{restore}if \ No newline at end of file +{restore}if diff --git a/contrib/groff/font/devps/generate/Makefile b/contrib/groff/font/devps/generate/Makefile index 739fd8e59b..fe7d5b9b20 100644 --- a/contrib/groff/font/devps/generate/Makefile +++ b/contrib/groff/font/devps/generate/Makefile @@ -1,21 +1,21 @@ -# Copyright (C) 1989-2000, 2002, 2003 Free Software Foundation, Inc. +# Copyright (C) 1989-2000, 2002, 2003, 2006, 2009 +# Free Software Foundation, Inc. # Written by James Clark (jjc@jclark.com) # # This file is part of groff. # # groff is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free -# Software Foundation; either version 2, or (at your option) any later -# version. +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. # # groff is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # for more details. # -# You should have received a copy of the GNU General Public License along -# with groff; see the file COPYING. If not, write to the Free Software -# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . # This is set up so you can do # make -f generate/Makefile @@ -29,6 +29,13 @@ SHELL = /bin/sh # Either long names (eg Times-Roman.afm) or short names (eg timesr.afm) # may be used. See the afmname script. afmdir=/usr/local/lib/afm + +# The symbol font which fits to `Symbol.afm'. For the creation of +# `symbolsl.afm' we need the `printafm' script from ghostscript. +symbolfont=/usr/local/lib/fonts/Symbol.pfb + +PRINTAFM=printafm + srcdir=generate SPECIALFONTS=S @@ -40,7 +47,7 @@ TEXTFONTS=AB ABI AI AR BMB BMBI BMI BMR CB CBI CI CR HB HBI HI HR HNB HNBI \ FONTS=$(TEXTFONTS) $(SPECIALFONTS) $(GREEKFONTS) $(DINGBATSFONTS) EURO DESC=$(srcdir)/../DESC -AFMTODIT=afmtodit -d$(DESC) +AFMTODIT=afmtodit -c -d$(DESC) IFLAG=-i 50 RFLAG=-i 0 -m NOLIGFLAG=-n @@ -53,164 +60,177 @@ all: $(FONTS) TR: $(AFMTODIT) $(EFLAG) $(RFLAG) \ - `$(AFMNAME) $(afmdir)/Times-Roman.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Times-Roman.afm` $(TEXTMAP) $@ TB: $(AFMTODIT) $(EFLAG) $(RFLAG) \ - `$(AFMNAME) $(afmdir)/Times-Bold.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Times-Bold.afm` $(TEXTMAP) $@ TI: $(AFMTODIT) $(EFLAG) $(IFLAG) -a 7 \ - `$(AFMNAME) $(afmdir)/Times-Italic.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Times-Italic.afm` $(TEXTMAP) $@ TBI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ - `$(AFMNAME) $(afmdir)/Times-BoldItalic.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Times-BoldItalic.afm` $(TEXTMAP) $@ HR: $(AFMTODIT) $(EFLAG) $(RFLAG) \ - `$(AFMNAME) $(afmdir)/Helvetica.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Helvetica.afm` $(TEXTMAP) $@ HB: $(AFMTODIT) $(EFLAG) $(RFLAG) \ - `$(AFMNAME) $(afmdir)/Helvetica-Bold.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Helvetica-Bold.afm` $(TEXTMAP) $@ HI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ - `$(AFMNAME) $(afmdir)/Helvetica-Oblique.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Helvetica-Oblique.afm` $(TEXTMAP) $@ HBI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ - `$(AFMNAME) $(afmdir)/Helvetica-BoldOblique.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Helvetica-BoldOblique.afm` $(TEXTMAP) $@ CR: $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) $(RFLAG) \ - `$(AFMNAME) $(afmdir)/Courier.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Courier.afm` $(TEXTMAP) $@ CB: $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) $(RFLAG) \ - `$(AFMNAME) $(afmdir)/Courier-Bold.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Courier-Bold.afm` $(TEXTMAP) $@ CI: $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) $(IFLAG) \ - `$(AFMNAME) $(afmdir)/Courier-Oblique.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Courier-Oblique.afm` $(TEXTMAP) $@ CBI: $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) $(IFLAG) \ - `$(AFMNAME) $(afmdir)/Courier-BoldOblique.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Courier-BoldOblique.afm` $(TEXTMAP) $@ PR: $(AFMTODIT) $(EFLAG) $(RFLAG) \ - `$(AFMNAME) $(afmdir)/Palatino-Roman.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Palatino-Roman.afm` $(TEXTMAP) $@ PB: $(AFMTODIT) $(EFLAG) $(RFLAG) \ - `$(AFMNAME) $(afmdir)/Palatino-Bold.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Palatino-Bold.afm` $(TEXTMAP) $@ PI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ - `$(AFMNAME) $(afmdir)/Palatino-Italic.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Palatino-Italic.afm` $(TEXTMAP) $@ PBI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ - `$(AFMNAME) $(afmdir)/Palatino-BoldItalic.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Palatino-BoldItalic.afm` $(TEXTMAP) $@ NR: $(AFMTODIT) $(EFLAG) $(RFLAG) \ - `$(AFMNAME) $(afmdir)/NewCenturySchlbk-Roman.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/NewCenturySchlbk-Roman.afm` $(TEXTMAP) $@ NB: $(AFMTODIT) $(EFLAG) $(RFLAG) \ - `$(AFMNAME) $(afmdir)/NewCenturySchlbk-Bold.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/NewCenturySchlbk-Bold.afm` $(TEXTMAP) $@ NI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ - `$(AFMNAME) $(afmdir)/NewCenturySchlbk-Italic.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/NewCenturySchlbk-Italic.afm` $(TEXTMAP) $@ NBI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ - `$(AFMNAME) $(afmdir)/NewCenturySchlbk-BoldItalic.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/NewCenturySchlbk-BoldItalic.afm` $(TEXTMAP) $@ BMR: $(AFMTODIT) $(EFLAG) $(RFLAG) \ - `$(AFMNAME) $(afmdir)/Bookman-Light.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Bookman-Light.afm` $(TEXTMAP) $@ BMB: $(AFMTODIT) $(EFLAG) $(RFLAG) \ - `$(AFMNAME) $(afmdir)/Bookman-Demi.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Bookman-Demi.afm` $(TEXTMAP) $@ BMI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ - `$(AFMNAME) $(afmdir)/Bookman-LightItalic.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Bookman-LightItalic.afm` $(TEXTMAP) $@ BMBI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ - `$(AFMNAME) $(afmdir)/Bookman-DemiItalic.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Bookman-DemiItalic.afm` $(TEXTMAP) $@ AR: $(AFMTODIT) $(EFLAG) $(RFLAG) \ - `$(AFMNAME) $(afmdir)/AvantGarde-Book.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/AvantGarde-Book.afm` $(TEXTMAP) $@ AB: $(AFMTODIT) $(EFLAG) $(RFLAG) \ - `$(AFMNAME) $(afmdir)/AvantGarde-Demi.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/AvantGarde-Demi.afm` $(TEXTMAP) $@ AI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ - `$(AFMNAME) $(afmdir)/AvantGarde-BookOblique.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/AvantGarde-BookOblique.afm` $(TEXTMAP) $@ ABI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ - `$(AFMNAME) $(afmdir)/AvantGarde-DemiOblique.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/AvantGarde-DemiOblique.afm` $(TEXTMAP) $@ HNR: $(AFMTODIT) $(EFLAG) $(RFLAG) \ - `$(AFMNAME) $(afmdir)/Helvetica-Narrow.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Helvetica-Narrow.afm` $(TEXTMAP) $@ HNB: $(AFMTODIT) $(EFLAG) $(RFLAG) \ - `$(AFMNAME) $(afmdir)/Helvetica-Narrow-Bold.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Helvetica-Narrow-Bold.afm` $(TEXTMAP) $@ HNI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ - `$(AFMNAME) $(afmdir)/Helvetica-Narrow-Oblique.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Helvetica-Narrow-Oblique.afm` $(TEXTMAP) $@ HNBI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ - `$(AFMNAME) $(afmdir)/Helvetica-Narrow-BoldOblique.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/Helvetica-Narrow-BoldOblique.afm` $(TEXTMAP) $@ ZCMI: $(AFMTODIT) $(EFLAG) $(IFLAG) \ - `$(AFMNAME) $(afmdir)/ZapfChancery-MediumItalic.afm` $(TEXTMAP) $@ + `$(AFMNAME) $(afmdir)/ZapfChancery-MediumItalic.afm` $(TEXTMAP) $@ ZD: $(AFMTODIT) -s $(RFLAG) \ - `$(AFMNAME) $(afmdir)/ZapfDingbats.afm` $(srcdir)/dingbats.map $@ + `$(AFMNAME) $(afmdir)/ZapfDingbats.afm` $(srcdir)/dingbats.map $@ -SS: $(srcdir)/symbolsl.afm +SS: symbolsl.afm $(AFMTODIT) -s -x $(IFLAG) \ - $(srcdir)/symbolsl.afm $(srcdir)/lgreekmap $@ + symbolsl.afm $(srcdir)/lgreekmap $@ S: symbol.afm - $(AFMTODIT) -s $(RFLAG) symbol.afm symbolmap $@ + $(AFMTODIT) -s $(RFLAG) \ + symbol.afm symbolmap $@ ZDR: zapfdr.afm - $(AFMTODIT) -s $(RFLAG) zapfdr.afm $(srcdir)/dingbats.rmap $@ + $(AFMTODIT) -s $(RFLAG) \ + zapfdr.afm $(srcdir)/dingbats.rmap $@ # the map is just a dummy EURO: freeeuro.afm - $(AFMTODIT) $(RFLAG) freeeuro.afm symbolmap $@ + $(AFMTODIT) $(RFLAG) \ + freeeuro.afm symbolmap $@ -freeeuro.afm freeeuro.pfa: generate/freeeuro.sfd - pfaedit -script generate/sfdtopfa.pe generate/freeeuro.sfd +freeeuro.afm freeeuro.pfa: $(srcdir)/freeeuro.sfd + fontforge -script $(srcdir)/sfdtopfa.pe $(srcdir)/freeeuro.sfd symbol.afm: $(srcdir)/symbol.sed -rm -f $@ sed -f $(srcdir)/symbol.sed `$(AFMNAME) $(afmdir)/Symbol.afm` >$@ -zapfdr.afm: +symbolsl.afm: $(srcdir)/symbolsl.awk $(srcdir)/../symbolsl.ps + -rm -f $@ + -rm -f Fontmap + echo "/Symbol-Slanted ($(srcdir)/../symbolsl.ps) ;" > Fontmap + echo "/Symbol ($(symbolfont)) ;" >> Fontmap + $(PRINTAFM) Symbol-Slanted > tmp.afm + awk -f $(srcdir)/symbolsl.awk -v SYMAFM=`$(AFMNAME) \ + $(afmdir)/Symbol.afm` tmp.afm >$@ + -rm -f Fontmap tmp.afm + +zapfdr.afm: $(srcdir)/zapfdr.sed -rm -f $@ - sed -e '/^FontName /s/ZapfDingbats/ZapfDingbats-Reverse/' \ + sed -f $(srcdir)/zapfdr.sed \ `$(AFMNAME) $(afmdir)/ZapfDingbats.afm` >$@ ZD: $(srcdir)/dingbats.map @@ -227,7 +247,7 @@ symbolmap: $(TEXTMAP) $(srcdir)/symbolchars cat $(TEXTMAP) $(srcdir)/symbolchars >>$@ clean: - -rm -f symbolmap symbol.afm zapfdr.afm + -rm -f symbolmap symbol.afm realclean: clean -rm -f $(FONTS) diff --git a/contrib/groff/font/devps/generate/freeeuro.sfd b/contrib/groff/font/devps/generate/freeeuro.sfd index d40e684734..882d5dbe78 100644 --- a/contrib/groff/font/devps/generate/freeeuro.sfd +++ b/contrib/groff/font/devps/generate/freeeuro.sfd @@ -4,7 +4,7 @@ FullName: FreeEuro FamilyName: FreeEuro Weight: Medium Copyright: Created by Werner Lemberg with PfaEdit 1.0 (http://pfaedit.sf.net); the serif shapes are based on the Omega fonts created by Yannis Haralambous. -Version: 001.000 +Version: 001.001 ItalicAngle: 0 UnderlinePosition: -100 UnderlineWidth: 50 @@ -15,19 +15,36 @@ FSType: 12 PfmFamily: 65 TTFWeight: 500 TTFWidth: 5 -Panose: 3 0 6 3 0 0 0 0 0 0 LineGap: 90 VLineGap: 0 - -Encoding: custom +Panose: 3 0 6 3 0 0 0 0 0 0 +OS2TypoAscent: 0 +OS2TypoAOffset: 1 +OS2TypoDescent: 0 +OS2TypoDOffset: 1 +OS2TypoLinegap: 0 +OS2WinAscent: 0 +OS2WinAOffset: 1 +OS2WinDescent: 0 +OS2WinDOffset: 1 +HheadAscent: 0 +HheadAOffset: 1 +HheadDescent: 0 +HheadDOffset: 1 +OS2Vendor: 'PfEd' +Encoding: Custom +UnicodeInterp: none DisplaySize: -96 AntiAlias: 1 +FitToEm: 1 +WinInfo: 0 8 2 BeginChars: 256 16 StartChar: Euro.symbol -Encoding: 0 8364 +Encoding: 0 8364 0 Width: 750 -Flags: MW -HStem: -12 58<447 497> 250 57<55 124 195 580> 366 57<55 124 195 628> 627 58<447 497> +Flags: W +HStem: -12 58<398.5 519.5> 250 57<56 134 183 580> 366 57<56 134 183 628> 627 58<383.5 543.5> +VStem: 124 58<332 341.5> Fore 134 250 m 9 32 250 l 17 @@ -45,7 +62,7 @@ Fore 334 627 230 534 195 423 c 1 652 423 l 9 628 366 l 25 - 183 366 l 17 + 183 366 l 273 182 356 182 346 182 337 c 0 182 327 182 317 183 307 c 1 604 307 l 9 @@ -57,19 +74,19 @@ Fore 639 23 562 -12 472 -12 c 1 325 -12 177 83 134 250 c 9 EndSplineSet -MinimumDistance: x16,-1 EndChar StartChar: Euro.symbol.bold -Encoding: 1 8364 +Encoding: 1 8364 1 Width: 750 -Flags: MW -HStem: -12 87<473 507> 220 87<59 141 254 578> 366 87<59 141 254 634> 598 87<473 507> +Flags: W +HStem: -12 87<406 533> 220 87<60 160 230 578> 366 87<60 142 254 634> 598 87<404 542> +VStem: 140 88<329.5 341.5> Fore 254 220 m 9 578 220 l 25 612 307 l 17 230 307 l 1 - 228 316 228 325 228 334 c 0 + 228 316 228 325 228 334 c 256 228 345 228 356 230 366 c 9 634 366 l 25 670 453 l 17 @@ -93,13 +110,12 @@ Fore 642 116 576 75 490 75 c 0 414 75 312 110 254 220 c 9 EndSplineSet -MinimumDistance: x4,-1 EndChar StartChar: Euro.symbol.slanted -Encoding: 2 8364 +Encoding: 2 8364 2 Width: 750 -Flags: HW -HStem: -12 58<467 486> 250 57<120 187 248 633> 366 57<145 203 285 706> 627 58<596 621> +Flags: W +HStem: -12 58<395.5 529.5> 250 57<121 190 248 633> 366 57<146 224 261 706> 627 58<529.5 689.5> Fore 187 250 m 9 85 250 l 17 @@ -129,10 +145,10 @@ Fore EndSplineSet EndChar StartChar: Euro.symbol.bold.slanted -Encoding: 3 8364 +Encoding: 3 8364 3 Width: 750 Flags: W -HStem: -12 87<488 507> 220 87<125 207 301 625> 366 87<156 218 351 712> 598 87<614 636> +HStem: -12 87<404 548.5> 220 87<126 207 295 625> 366 87<157 219 351 712> 598 87<550 670> Fore 301 220 m 9 625 220 l 25 @@ -162,10 +178,10 @@ Fore EndSplineSet EndChar StartChar: Euro.serif -Encoding: 4 8364 +Encoding: 4 8364 4 Width: 741 -Flags: MW -HStem: -14 44<435 463> 253 46<53 102 224 568> 369 46<53 104 224 618> 636 40<433 467> +Flags: W +HStem: -14 44<346.5 509> 253 46<54 109 219 568> 369 46<54 111 219 618> 636 40<357 497> Fore 224 253 m 1 245 130 319 30 463 30 c 0 @@ -189,20 +205,19 @@ Fore 256 534 234 476 224 415 c 1 638 415 l 1 618 369 l 1 - 219 369 l 1 + 219 369 l 257 218 356 218 342 218 329 c 0 218 319 218 309 219 299 c 1 588 299 l 1 568 253 l 1 224 253 l 1 EndSplineSet -MinimumDistance: x22,-1 EndChar StartChar: Euro.serif.bold -Encoding: 5 8364 +Encoding: 5 8364 5 Width: 800 -Flags: MW -HStem: -19 48<486 510> 231 69<72 129 313 612> 368 69<72 131 312 669> 649 42<476 510> +Flags: W +HStem: -19 48<394 552> 231 69<73 142 307 612> 368 69<73 143 307 669> 649 42<396.5 547> Fore 142 231 m 1 45 231 l 1 @@ -220,7 +235,7 @@ Fore 377 649 328 560 312 437 c 1 697 437 l 1 669 368 l 1 - 307 368 l 1 + 307 368 l 257 306 359 306 348 306 336 c 0 306 325 306 312 307 300 c 1 640 300 l 1 @@ -233,13 +248,13 @@ Fore 694 44 616 -19 488 -19 c 0 300 -19 181 89 142 231 c 1 EndSplineSet -MinimumDistance: x16,-1 EndChar StartChar: Euro.serif.italic -Encoding: 6 8364 +Encoding: 6 8364 6 Width: 734 Flags: W -HStem: -18 45<403 426> 253 46<85 140 257 565> 369 46<117 161 289 636> 630 36<544 567> +HStem: -18 45<344 482.5> 253 46<86 143 252 565> 369 46<118 179 272 636> 630 36<463 620> +VStem: 140 112<152.5 253> Fore 143 299 m 1 147 322 152 346 161 369 c 1 @@ -269,10 +284,10 @@ Fore EndSplineSet EndChar StartChar: Euro.serif.bold.italic -Encoding: 7 8364 +Encoding: 7 8364 7 Width: 800 Flags: W -HStem: -19 48<400 427> 231 69<60 114 295 584> 368 69<92 135 332 673> 649 42<544 586> +HStem: -19 48<307 465> 231 69<61 118 285 584> 368 69<93 163 311 673> 649 42<476.5 627> Fore 114 231 m 1 17 231 l 1 @@ -303,15 +318,16 @@ Fore EndSplineSet EndChar StartChar: Euro.sansserif -Encoding: 8 8364 +Encoding: 8 8364 8 Width: 756 -Flags: MW -HStem: -23 79<485 519> 225 84<68 156 263 585> 378 84<68 156 264 643> 630 79<469 503> +Flags: W +HStem: -23 79<405 536.5> 225 84<69 171 246 585> 378 84<69 157 264 643> 630 79<395 543> +VStem: 156 89<338 355> Fore 263 225 m 9 585 225 l 25 617 309 l 17 - 246 309 l 1 + 246 309 l 257 245 320 245 332 245 344 c 0 245 356 245 369 246 378 c 9 643 378 l 25 @@ -336,20 +352,19 @@ Fore 620 72 579 56 494 56 c 0 389 56 300 118 263 225 c 9 EndSplineSet -MinimumDistance: x3,-1 EndChar StartChar: Euro.sansserif.bold -Encoding: 9 8364 +Encoding: 9 8364 9 Width: 796 -Flags: MW -HStem: -22 123<531 565> 218 100<67 141 310 619> 372 98<68 141 310 669> 587 123<515 565> +Flags: W +HStem: -22 123<436 594.5> 218 100<68 161 284 619> 372 98<69 161 284 669> 587 123<413.5 587> Fore 724 540 m 1 665 577 617 587 537 587 c 0 489 587 364 571 310 470 c 1 701 470 l 9 669 372 l 25 - 284 372 l 17 + 284 372 l 273 284 362 283 354 283 345 c 0 283 337 284 329 284 318 c 1 651 318 l 9 @@ -372,13 +387,12 @@ Fore 630 710 703 692 763 660 c 0 724 540 l 1 EndSplineSet -MinimumDistance: x5,-1 EndChar StartChar: Euro.sansserif.slanted -Encoding: 10 8364 +Encoding: 10 8364 10 Width: 756 -Flags: WO -HStem: -23 79<485 519> 225 84<134 219 312 633> 378 84<166 237 362 723> 630 79<620 647> +Flags: W +HStem: -23 79<400 548.5> 225 84<135 219 312 633> 378 84<167 237 362 723> 630 79<546 678> Fore 311 225 m 9 633 225 l 25 @@ -408,10 +422,10 @@ Fore EndSplineSet EndChar StartChar: Euro.sansserif.bold.slanted -Encoding: 11 8364 +Encoding: 11 8364 11 Width: 796 -Flags: HW -HStem: -22 123<534 567> 218 100<135 207 356 666> 372 98<168 220 410 749> 587 123<660 697> +Flags: W +HStem: -22 123<431 615.5> 218 100<136 209 352 665> 372 98<169 261 363 748> 587 123<564.5 738> Fore 839 540 m 1 788 577 742 587 662 587 c 0 @@ -441,21 +455,22 @@ Fore EndSplineSet EndChar StartChar: Euro.mono -Encoding: 12 8364 +Encoding: 12 8364 12 Width: 600 -Flags: MW -HStem: -16 41<314 332> 217 37<26 63 106 385> 314 37<26 63 106 430> 535 41<314 332> +Flags: W +HStem: -16 41<259 356.5> 217 37<33 65 104 383> 314 37<24.5 65 104 436> 535 41<259 356.5> +VStem: 63 41<254 314> Fore 322 576 m 0 196 576 80 480 65 351 c 1 - 33 351 l 2 + 33 351 l 258 16 351 11 346 11 333 c 0 - 11 319 17 314 33 314 c 2 - 63 314 l 1 - 63 254 l 1 - 33 254 l 2 + 11 319 17 314 33 314 c 258 + 63 314 l 257 + 63 254 l 257 + 33 254 l 258 17 254 11 249 11 236 c 0 - 11 222 17 217 33 217 c 2 + 11 222 17 217 33 217 c 258 65 217 l 1 80 89 196 -16 322 -16 c 0 386 -16 446 9 496 55 c 0 @@ -464,14 +479,14 @@ Fore 507 125 503 123 496 115 c 0 442 51 391 25 322 25 c 0 216 25 124 107 106 217 c 1 - 383 217 l 2 + 383 217 l 258 398 217 404 222 404 236 c 0 - 404 249 399 254 383 254 c 2 - 104 254 l 1 - 104 314 l 1 - 428 314 l 2 + 404 249 399 254 383 254 c 258 + 104 254 l 257 + 104 314 l 257 + 428 314 l 258 444 314 450 319 450 333 c 0 - 450 346 444 351 428 351 c 2 + 450 346 444 351 428 351 c 258 106 351 l 1 124 460 216 535 322 535 c 0 391 535 442 509 496 445 c 0 @@ -480,13 +495,12 @@ Fore 534 464 522 481 496 505 c 0 446 551 386 576 322 576 c 0 EndSplineSet -MinimumDistance: x23,-1 x22,25 x22,23 x21,18 x21,20 x6,9 x6,7 x5,2 x5,4 EndChar StartChar: Euro.mono.bold -Encoding: 13 8364 +Encoding: 13 8364 13 Width: 600 Flags: W -HStem: -14 100<307.635 341> 205 56<22.3275 59 174 388> 303 56<22.3275 59 173 426> 497 100<323 341> +HStem: -14 100<256 357> 205 56<22 62 169 395> 303 56<31 62 169 424> 497 100<256 361.5> Fore 173 359 m 1 424 359 l 2 @@ -524,10 +538,10 @@ Fore EndSplineSet EndChar StartChar: Euro.mono.slanted -Encoding: 14 8364 +Encoding: 14 8364 14 Width: 600 -Flags: MW -HStem: -16 41<316 334> 217 37<78 112 158 438> 314 37<98 130 181 504> 535 41<428 457> +Flags: W +HStem: -16 41<258.5 362.5> 217 37<72.5 117 153 444> 314 37<92.5 140 171 511> 535 41<382 477> Fore 541 125 m 0 534 125 530 123 521 115 c 0 @@ -537,7 +551,7 @@ Fore 445 217 455 225 455 241 c 0 455 250 451 254 437 254 c 2 158 254 l 1 - 171 314 l 1 + 171 314 l 257 496 314 l 2 520 314 522 333 522 339 c 0 522 348 518 351 504 351 c 2 @@ -563,13 +577,12 @@ Fore 538 78 557 96 557 108 c 0 557 123 547 125 541 125 c 0 EndSplineSet -MinimumDistance: x8,-1 EndChar StartChar: Euro.mono.bold.slanted -Encoding: 15 8364 +Encoding: 15 8364 15 Width: 600 Flags: W -HStem: -14 100<322 348> 205 56<85 107 226 438> 303 56<101 124 250 495> 497 100<429 455> +HStem: -14 100<249.5 375.5> 205 56<76 116 219 443> 303 56<96 139 234 501> 497 100<384 485> Fore 250 359 m 1 501 359 l 2 diff --git a/contrib/groff/font/devps/generate/make-zapfdr b/contrib/groff/font/devps/generate/make-zapfdr new file mode 100644 index 0000000000..b653802881 --- /dev/null +++ b/contrib/groff/font/devps/generate/make-zapfdr @@ -0,0 +1,90 @@ +#! /bin/sh +# +# make-zapfdr -- script for creating the file zapfdr.ps +# +# Copyright (C) 2006, 2009 +# Free Software Foundation, Inc. +# Written by Werner Lemberg +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# +# usage: +# +# make-zapfdr < ZapfDingbats.afm > zapfdr.ps +# + + +# Write preamble. +cat < 0) { + if (/^CharacterSet / || /^EncodingScheme / || /^Comment /) { print } + } + next +} +/^ItalicAngle 0$/ { + print "ItalicAngle -15.5" + next +} +/^FullName / { + print $0 " Slanted" + next +} +/^FSType / { + next +} +{ print } diff --git a/contrib/groff/font/devps/generate/textmap b/contrib/groff/font/devps/generate/textmap index 485705c3b2..b1174c32a6 100644 --- a/contrib/groff/font/devps/generate/textmap +++ b/contrib/groff/font/devps/generate/textmap @@ -223,7 +223,6 @@ lslash /l macron a- minus \- minute fm -mu mc nine 9 notelement nm notequal != @@ -372,3 +371,64 @@ arrowhorizex an multiply tmu divide tdi plusminus t+- +Alpha *A +Beta *B +Chi *X +Delta *D +Epsilon *E +Eta *Y +Gamma *G +Iota *I +Kappa *K +Lambda *L +Mu *M +Nu *N +Omega *W +Omicron *O +Phi *F +Pi *P +Psi *Q +Rho *R +Sigma *S +Tau *T +Theta *H +Upsilon *U +Xi *C +Zeta *Z +alpha *a +beta *b +chi *x +delta *d +epsilon *e +uni03F5 +e +eta *y +gamma *g +iota *i +kappa *k +lambda *l +mu *m +nu *n +omega *w +omega1 +p +omicron *o +phi *f +phi1 +f +pi *p +psi *q +rho *r +sigma *s +sigma1 ts +tau *t +theta *h +theta1 +h +upsilon *u +xi *c +zeta *z +overline rn +uni21D5 vA +uni226A >> +uni226B << +SF110000 br +mu1 mc +# if there is "mu1" glyph in the font - comment out the following line +mu mc diff --git a/contrib/groff/font/devps/generate/zapfdr.sed b/contrib/groff/font/devps/generate/zapfdr.sed new file mode 100644 index 0000000000..157ddff256 --- /dev/null +++ b/contrib/groff/font/devps/generate/zapfdr.sed @@ -0,0 +1,2 @@ +/^FontName /s/$/-Reverse/ +/^FullName /s/$/ Reverse/ diff --git a/contrib/groff/font/devps/CB b/contrib/groff/font/devps/old/CB similarity index 100% copy from contrib/groff/font/devps/CB copy to contrib/groff/font/devps/old/CB diff --git a/contrib/groff/font/devps/CBI b/contrib/groff/font/devps/old/CBI similarity index 100% copy from contrib/groff/font/devps/CBI copy to contrib/groff/font/devps/old/CBI diff --git a/contrib/groff/font/devps/CI b/contrib/groff/font/devps/old/CI similarity index 100% copy from contrib/groff/font/devps/CI copy to contrib/groff/font/devps/old/CI diff --git a/contrib/groff/font/devps/CR b/contrib/groff/font/devps/old/CR similarity index 100% copy from contrib/groff/font/devps/CR copy to contrib/groff/font/devps/old/CR diff --git a/contrib/groff/font/devps/HB b/contrib/groff/font/devps/old/HB similarity index 100% copy from contrib/groff/font/devps/HB copy to contrib/groff/font/devps/old/HB diff --git a/contrib/groff/font/devps/HBI b/contrib/groff/font/devps/old/HBI similarity index 100% copy from contrib/groff/font/devps/HBI copy to contrib/groff/font/devps/old/HBI diff --git a/contrib/groff/font/devps/HI b/contrib/groff/font/devps/old/HI similarity index 100% copy from contrib/groff/font/devps/HI copy to contrib/groff/font/devps/old/HI diff --git a/contrib/groff/font/devps/HNB b/contrib/groff/font/devps/old/HNB similarity index 100% copy from contrib/groff/font/devps/HNB copy to contrib/groff/font/devps/old/HNB diff --git a/contrib/groff/font/devps/HNBI b/contrib/groff/font/devps/old/HNBI similarity index 100% copy from contrib/groff/font/devps/HNBI copy to contrib/groff/font/devps/old/HNBI diff --git a/contrib/groff/font/devps/HNI b/contrib/groff/font/devps/old/HNI similarity index 100% copy from contrib/groff/font/devps/HNI copy to contrib/groff/font/devps/old/HNI diff --git a/contrib/groff/font/devps/HNR b/contrib/groff/font/devps/old/HNR similarity index 100% copy from contrib/groff/font/devps/HNR copy to contrib/groff/font/devps/old/HNR diff --git a/contrib/groff/font/devps/HR b/contrib/groff/font/devps/old/HR similarity index 100% copy from contrib/groff/font/devps/HR copy to contrib/groff/font/devps/old/HR diff --git a/contrib/groff/font/devps/NB b/contrib/groff/font/devps/old/NB similarity index 100% copy from contrib/groff/font/devps/NB copy to contrib/groff/font/devps/old/NB diff --git a/contrib/groff/font/devps/NBI b/contrib/groff/font/devps/old/NBI similarity index 100% copy from contrib/groff/font/devps/NBI copy to contrib/groff/font/devps/old/NBI diff --git a/contrib/groff/font/devps/NI b/contrib/groff/font/devps/old/NI similarity index 100% copy from contrib/groff/font/devps/NI copy to contrib/groff/font/devps/old/NI diff --git a/contrib/groff/font/devps/NR b/contrib/groff/font/devps/old/NR similarity index 100% copy from contrib/groff/font/devps/NR copy to contrib/groff/font/devps/old/NR diff --git a/contrib/groff/font/devps/PB b/contrib/groff/font/devps/old/PB similarity index 100% copy from contrib/groff/font/devps/PB copy to contrib/groff/font/devps/old/PB diff --git a/contrib/groff/font/devps/PBI b/contrib/groff/font/devps/old/PBI similarity index 100% copy from contrib/groff/font/devps/PBI copy to contrib/groff/font/devps/old/PBI diff --git a/contrib/groff/font/devps/PI b/contrib/groff/font/devps/old/PI similarity index 100% copy from contrib/groff/font/devps/PI copy to contrib/groff/font/devps/old/PI diff --git a/contrib/groff/font/devps/PR b/contrib/groff/font/devps/old/PR similarity index 100% copy from contrib/groff/font/devps/PR copy to contrib/groff/font/devps/old/PR diff --git a/contrib/groff/font/devps/S b/contrib/groff/font/devps/old/S similarity index 100% copy from contrib/groff/font/devps/S copy to contrib/groff/font/devps/old/S diff --git a/contrib/groff/font/devps/SS b/contrib/groff/font/devps/old/SS similarity index 100% copy from contrib/groff/font/devps/SS copy to contrib/groff/font/devps/old/SS diff --git a/contrib/groff/font/devps/TB b/contrib/groff/font/devps/old/TB similarity index 100% copy from contrib/groff/font/devps/TB copy to contrib/groff/font/devps/old/TB diff --git a/contrib/groff/font/devps/TBI b/contrib/groff/font/devps/old/TBI similarity index 100% copy from contrib/groff/font/devps/TBI copy to contrib/groff/font/devps/old/TBI diff --git a/contrib/groff/font/devps/TI b/contrib/groff/font/devps/old/TI similarity index 100% copy from contrib/groff/font/devps/TI copy to contrib/groff/font/devps/old/TI diff --git a/contrib/groff/font/devps/TR b/contrib/groff/font/devps/old/TR similarity index 100% copy from contrib/groff/font/devps/TR copy to contrib/groff/font/devps/old/TR diff --git a/contrib/groff/font/devps/symbol.afm b/contrib/groff/font/devps/old/symbol.afm similarity index 100% copy from contrib/groff/font/devps/symbol.afm copy to contrib/groff/font/devps/old/symbol.afm diff --git a/contrib/groff/font/devps/generate/symbolsl.afm b/contrib/groff/font/devps/old/symbolsl.afm similarity index 100% copy from contrib/groff/font/devps/generate/symbolsl.afm copy to contrib/groff/font/devps/old/symbolsl.afm diff --git a/contrib/groff/font/devps/zapfdr.afm b/contrib/groff/font/devps/old/zapfdr.afm similarity index 100% copy from contrib/groff/font/devps/zapfdr.afm copy to contrib/groff/font/devps/old/zapfdr.afm diff --git a/contrib/groff/font/devps/zapfdr.ps b/contrib/groff/font/devps/old/zapfdr.ps similarity index 99% copy from contrib/groff/font/devps/zapfdr.ps copy to contrib/groff/font/devps/old/zapfdr.ps index 8283be26db..d7ec0863ef 100644 --- a/contrib/groff/font/devps/zapfdr.ps +++ b/contrib/groff/font/devps/old/zapfdr.ps @@ -1,6 +1,6 @@ %!PS-Adobe-3.0 Resource-Font %%DocumentNeededResources: font ZapfDingbats - +%%EndComments %%IncludeResource: font ZapfDingbats /ZapfDingbats findfont [-1 0 0 1 0 0] makefont diff --git a/contrib/groff/font/devps/prologue.ps b/contrib/groff/font/devps/prologue.ps index 1ec2df775f..c2cbd1e795 100644 --- a/contrib/groff/font/devps/prologue.ps +++ b/contrib/groff/font/devps/prologue.ps @@ -79,6 +79,7 @@ /level0 save def 1 setlinecap 1 setlinejoin + DEFS /BPhook known { DEFS begin BPhook end } if 72 RES div dup scale LS { 90 rotate @@ -188,7 +189,10 @@ findfont dup maxlength 1 index /FontName known not { 1 add } if dict begin { - 1 index /FID ne { def } { pop pop } ifelse + 1 index /FID ne + 2 index /UniqueID ne + and + { def } { pop pop } ifelse } forall /Encoding exch def dup /FontName exch def @@ -240,9 +244,11 @@ % See: http://www.w-beer.de/doc/ps/. % /setpagedevice {} def + mark } bind def /PEND { + cleartomark countdictstack CNT sub { end } repeat level1 restore } bind def diff --git a/contrib/groff/font/devps/symbol.afm b/contrib/groff/font/devps/symbol.afm index 33cba6a487..c39c2d9714 100644 --- a/contrib/groff/font/devps/symbol.afm +++ b/contrib/groff/font/devps/symbol.afm @@ -1,21 +1,23 @@ -StartFontMetrics 2.0 -Comment Copyright (c) 1985, 1987, 1989, 1990 Adobe Systems Incorporated. All rights reserved. -Comment Creation Date: Wed Jan 17 21:48:26 1990 -Comment UniqueID 27004 -Comment VMusage 28489 37622 +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved. +Comment Creation Date: Thu May 1 15:12:25 1997 +Comment UniqueID 43064 +Comment VMusage 30820 39997 FontName Symbol FullName Symbol FamilyName Symbol Weight Medium ItalicAngle 0 IsFixedPitch false -FontBBox -180 -293 1090 1010 -UnderlinePosition -98 -UnderlineThickness 54 -Version 001.007 -Notice Copyright (c) 1985, 1987, 1989, 1990 Adobe Systems Incorporated. All rights reserved. +FontBBox -180 -293 1090 1010 +UnderlinePosition -100 +UnderlineThickness 50 +Version 001.008 +Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved. EncodingScheme FontSpecific -StartCharMetrics 189 +StdHW 92 +StdVW 85 +StartCharMetrics 190 C 32 ; WX 250 ; N space ; B 0 0 0 0 ; C 33 ; WX 333 ; N exclam ; B 128 -17 240 672 ; C 34 ; WX 713 ; N universal ; B 31 0 681 705 ; @@ -32,16 +34,16 @@ C 44 ; WX 250 ; N comma ; B 56 -152 194 104 ; C 45 ; WX 549 ; N minus ; B 11 233 535 288 ; C 46 ; WX 250 ; N period ; B 69 -17 181 95 ; C 47 ; WX 278 ; N slash ; B 0 -18 254 646 ; -C 48 ; WX 500 ; N zero ; B 23 -17 471 685 ; +C 48 ; WX 500 ; N zero ; B 24 -14 476 685 ; C 49 ; WX 500 ; N one ; B 117 0 390 673 ; -C 50 ; WX 500 ; N two ; B 25 0 475 686 ; -C 51 ; WX 500 ; N three ; B 39 -17 435 685 ; -C 52 ; WX 500 ; N four ; B 16 0 469 685 ; -C 53 ; WX 500 ; N five ; B 29 -17 443 685 ; -C 54 ; WX 500 ; N six ; B 36 -17 467 685 ; +C 50 ; WX 500 ; N two ; B 25 0 475 685 ; +C 51 ; WX 500 ; N three ; B 43 -14 435 685 ; +C 52 ; WX 500 ; N four ; B 15 0 469 685 ; +C 53 ; WX 500 ; N five ; B 32 -14 445 690 ; +C 54 ; WX 500 ; N six ; B 34 -14 468 685 ; C 55 ; WX 500 ; N seven ; B 24 -16 448 673 ; -C 56 ; WX 500 ; N eight ; B 54 -18 440 685 ; -C 57 ; WX 500 ; N nine ; B 31 -18 460 685 ; +C 56 ; WX 500 ; N eight ; B 56 -14 445 685 ; +C 57 ; WX 500 ; N nine ; B 30 -18 459 685 ; C 58 ; WX 278 ; N colon ; B 81 -17 193 460 ; C 59 ; WX 278 ; N semicolon ; B 83 -152 221 460 ; C 60 ; WX 549 ; N less ; B 26 0 523 522 ; @@ -76,17 +78,17 @@ C 88 ; WX 645 ; N Xi ; B 40 0 599 673 ; C 89 ; WX 795 ; N Psi ; B 15 0 781 684 ; C 90 ; WX 611 ; N Zeta ; B 44 0 636 673 ; C 91 ; WX 333 ; N bracketleft ; B 86 -155 299 674 ; -C 92 ; WX 863 ; N therefore ; B 163 0 701 478 ; +C 92 ; WX 863 ; N therefore ; B 163 0 701 487 ; C 93 ; WX 333 ; N bracketright ; B 33 -155 246 674 ; C 94 ; WX 658 ; N perpendicular ; B 15 0 652 674 ; -C 95 ; WX 500 ; N underscore ; B -2 -252 502 -206 ; +C 95 ; WX 500 ; N underscore ; B -2 -125 502 -75 ; C 96 ; WX 500 ; N radicalex ; B 480 881 1090 917 ; C 97 ; WX 631 ; N alpha ; B 41 -18 622 500 ; C 98 ; WX 549 ; N beta ; B 61 -223 515 741 ; C 99 ; WX 549 ; N chi ; B 12 -231 522 499 ; C 100 ; WX 494 ; N delta ; B 40 -19 481 740 ; C 101 ; WX 439 ; N epsilon ; B 22 -19 427 502 ; -C 102 ; WX 521 ; N phi ; B 27 -224 490 671 ; +C 102 ; WX 521 ; N phi ; B 28 -224 492 673 ; C 103 ; WX 411 ; N gamma ; B 5 -225 484 499 ; C 104 ; WX 603 ; N eta ; B 0 -202 527 514 ; C 105 ; WX 329 ; N iota ; B 0 -17 301 503 ; @@ -108,9 +110,10 @@ C 120 ; WX 493 ; N xi ; B 27 -224 469 766 ; C 121 ; WX 686 ; N psi ; B 12 -228 701 500 ; C 122 ; WX 494 ; N zeta ; B 60 -225 467 756 ; C 123 ; WX 480 ; N braceleft ; B 58 -183 397 673 ; -C 124 ; WX 200 ; N bar ; B 65 -177 135 673 ; +C 124 ; WX 200 ; N bar ; B 65 -293 135 707 ; C 125 ; WX 480 ; N braceright ; B 79 -183 418 673 ; C 126 ; WX 549 ; N similar ; B 17 203 529 307 ; +C 160 ; WX 750 ; N Euro ; B 20 -12 714 685 ; C 161 ; WX 620 ; N Upsilon1 ; B -2 0 610 685 ; C 162 ; WX 247 ; N minute ; B 27 459 228 735 ; C 163 ; WX 549 ; N lessequal ; B 29 0 526 639 ; @@ -180,30 +183,30 @@ C 226 ; WX 790 ; N registersans ; B 50 -20 740 670 ; C 227 ; WX 790 ; N copyrightsans ; B 49 -15 739 675 ; C 228 ; WX 786 ; N trademarksans ; B 5 293 725 673 ; C 229 ; WX 713 ; N summation ; B 14 -108 695 752 ; -C 230 ; WX 384 ; N parenlefttp ; B 40 -293 436 926 ; -C 231 ; WX 384 ; N parenleftex ; B 40 -80 92 920 ; -C 232 ; WX 384 ; N parenleftbt ; B 40 -293 436 920 ; -C 233 ; WX 384 ; N bracketlefttp ; B 0 -75 341 925 ; -C 234 ; WX 384 ; N bracketleftex ; B 0 -75 55 925 ; -C 235 ; WX 384 ; N bracketleftbt ; B 0 -75 340 925 ; -C 236 ; WX 494 ; N bracelefttp ; B 201 -75 439 925 ; -C 237 ; WX 494 ; N braceleftmid ; B 14 -75 255 925 ; -C 238 ; WX 494 ; N braceleftbt ; B 201 -75 439 925 ; -C 239 ; WX 494 ; N braceex ; B 201 -75 255 925 ; +C 230 ; WX 384 ; N parenlefttp ; B 24 -293 436 926 ; +C 231 ; WX 384 ; N parenleftex ; B 24 -80 108 920 ; +C 232 ; WX 384 ; N parenleftbt ; B 24 -293 436 920 ; +C 233 ; WX 384 ; N bracketlefttp ; B 0 -75 349 925 ; +C 234 ; WX 384 ; N bracketleftex ; B 0 -75 77 925 ; +C 235 ; WX 384 ; N bracketleftbt ; B 0 -75 349 925 ; +C 236 ; WX 494 ; N bracelefttp ; B 209 -75 445 925 ; +C 237 ; WX 494 ; N braceleftmid ; B 20 -75 284 925 ; +C 238 ; WX 494 ; N braceleftbt ; B 209 -75 445 925 ; +C 239 ; WX 494 ; N braceex ; B 209 -75 284 925 ; C 241 ; WX 329 ; N angleright ; B 21 -198 302 746 ; C 242 ; WX 274 ; N integral ; B 2 -107 291 916 ; -C 243 ; WX 686 ; N integraltp ; B 332 -83 715 921 ; -C 244 ; WX 686 ; N integralex ; B 332 -88 415 975 ; -C 245 ; WX 686 ; N integralbt ; B 39 -81 415 921 ; -C 246 ; WX 384 ; N parenrighttp ; B 54 -293 450 926 ; -C 247 ; WX 384 ; N parenrightex ; B 398 -80 450 920 ; -C 248 ; WX 384 ; N parenrightbt ; B 54 -293 450 920 ; -C 249 ; WX 384 ; N bracketrighttp ; B 22 -75 360 925 ; -C 250 ; WX 384 ; N bracketrightex ; B 305 -75 360 925 ; -C 251 ; WX 384 ; N bracketrightbt ; B 20 -75 360 925 ; -C 252 ; WX 494 ; N bracerighttp ; B 17 -75 255 925 ; -C 253 ; WX 494 ; N bracerightmid ; B 201 -75 442 925 ; -C 254 ; WX 494 ; N bracerightbt ; B 17 -75 255 925 ; +C 243 ; WX 686 ; N integraltp ; B 308 -88 675 920 ; +C 244 ; WX 686 ; N integralex ; B 308 -88 378 975 ; +C 245 ; WX 686 ; N integralbt ; B 11 -87 378 921 ; +C 246 ; WX 384 ; N parenrighttp ; B 54 -293 466 926 ; +C 247 ; WX 384 ; N parenrightex ; B 382 -80 466 920 ; +C 248 ; WX 384 ; N parenrightbt ; B 54 -293 466 920 ; +C 249 ; WX 384 ; N bracketrighttp ; B 22 -75 371 925 ; +C 250 ; WX 384 ; N bracketrightex ; B 294 -75 371 925 ; +C 251 ; WX 384 ; N bracketrightbt ; B 22 -75 371 925 ; +C 252 ; WX 494 ; N bracerighttp ; B 48 -75 284 925 ; +C 253 ; WX 494 ; N bracerightmid ; B 209 -75 473 925 ; +C 254 ; WX 494 ; N bracerightbt ; B 48 -75 284 925 ; C -1 ; WX 790 ; N apple ; B 56 -3 733 808 ; EndCharMetrics italicCorrection integral 67 diff --git a/contrib/groff/font/devps/symbolsl.ps b/contrib/groff/font/devps/symbolsl.ps index d384203e2c..ac3810eaa1 100644 --- a/contrib/groff/font/devps/symbolsl.ps +++ b/contrib/groff/font/devps/symbolsl.ps @@ -1,5 +1,6 @@ %!PS-Adobe-3.0 Resource-Font %%DocumentNeededResources: font Symbol +%%EndComments % newfontname matrix oldfontname MakeTransformedFont diff --git a/contrib/groff/font/devps/zapfdr.afm b/contrib/groff/font/devps/zapfdr.afm index ce216de44a..67c73f2043 100644 --- a/contrib/groff/font/devps/zapfdr.afm +++ b/contrib/groff/font/devps/zapfdr.afm @@ -1,20 +1,22 @@ -StartFontMetrics 2.0 -Comment Copyright (c) 1985, 1987, 1988, 1989 Adobe Systems Incorporated. All rights reserved. -Comment Creation Date: Fri Dec 1 12:57:42 1989 -Comment UniqueID 26200 -Comment VMusage 39281 49041 +StartFontMetrics 4.1 +Comment Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved. +Comment Creation Date: Thu May 1 15:14:13 1997 +Comment UniqueID 43082 +Comment VMusage 45775 55535 FontName ZapfDingbats-Reverse -FullName ITC Zapf Dingbats +FullName ITC Zapf Dingbats Reverse FamilyName ITC Zapf Dingbats Weight Medium ItalicAngle 0 IsFixedPitch false -FontBBox -1 -143 981 820 -UnderlinePosition -98 -UnderlineThickness 54 -Version 001.004 -Notice Copyright (c) 1985, 1987, 1988, 1989 Adobe Systems Incorporated. All rights reserved.ITC Zapf Dingbats is a registered trademark of International Typeface Corporation. +FontBBox -1 -143 981 820 +UnderlinePosition -100 +UnderlineThickness 50 +Version 002.000 +Notice Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.ITC Zapf Dingbats is a registered trademark of International Typeface Corporation. EncodingScheme FontSpecific +StdHW 28 +StdVW 90 StartCharMetrics 202 C 32 ; WX 278 ; N space ; B 0 0 0 0 ; C 33 ; WX 974 ; N a1 ; B 35 72 939 621 ; @@ -25,7 +27,7 @@ C 37 ; WX 719 ; N a4 ; B 34 139 685 566 ; C 38 ; WX 789 ; N a5 ; B 35 -14 755 705 ; C 39 ; WX 790 ; N a119 ; B 35 -14 755 705 ; C 40 ; WX 791 ; N a118 ; B 35 -13 761 705 ; -C 41 ; WX 690 ; N a117 ; B 35 138 655 553 ; +C 41 ; WX 690 ; N a117 ; B 34 138 655 553 ; C 42 ; WX 960 ; N a11 ; B 35 123 925 568 ; C 43 ; WX 939 ; N a12 ; B 35 134 904 559 ; C 44 ; WX 549 ; N a13 ; B 29 -11 516 705 ; @@ -111,6 +113,20 @@ C 123 ; WX 392 ; N a97 ; B 35 263 357 705 ; C 124 ; WX 392 ; N a98 ; B 34 263 357 705 ; C 125 ; WX 668 ; N a99 ; B 35 263 633 705 ; C 126 ; WX 668 ; N a100 ; B 36 263 634 705 ; +C 128 ; WX 390 ; N a89 ; B 35 -14 356 705 ; +C 129 ; WX 390 ; N a90 ; B 35 -14 355 705 ; +C 130 ; WX 317 ; N a93 ; B 35 0 283 692 ; +C 131 ; WX 317 ; N a94 ; B 35 0 283 692 ; +C 132 ; WX 276 ; N a91 ; B 35 0 242 692 ; +C 133 ; WX 276 ; N a92 ; B 35 0 242 692 ; +C 134 ; WX 509 ; N a205 ; B 35 0 475 692 ; +C 135 ; WX 509 ; N a85 ; B 35 0 475 692 ; +C 136 ; WX 410 ; N a206 ; B 35 0 375 692 ; +C 137 ; WX 410 ; N a86 ; B 35 0 375 692 ; +C 138 ; WX 234 ; N a87 ; B 35 -14 199 705 ; +C 139 ; WX 234 ; N a88 ; B 35 -14 199 705 ; +C 140 ; WX 334 ; N a95 ; B 35 0 299 692 ; +C 141 ; WX 334 ; N a96 ; B 35 0 299 692 ; C 161 ; WX 732 ; N a101 ; B 35 -143 697 806 ; C 162 ; WX 544 ; N a102 ; B 56 -14 488 706 ; C 163 ; WX 544 ; N a103 ; B 34 -14 508 705 ; @@ -204,19 +220,5 @@ C 251 ; WX 873 ; N a188 ; B 36 118 838 578 ; C 252 ; WX 927 ; N a189 ; B 35 150 891 542 ; C 253 ; WX 970 ; N a190 ; B 35 76 931 616 ; C 254 ; WX 918 ; N a191 ; B 34 99 884 593 ; -C -1 ; WX 410 ; N a86 ; B 35 0 375 692 ; -C -1 ; WX 509 ; N a85 ; B 35 0 475 692 ; -C -1 ; WX 334 ; N a95 ; B 35 0 299 692 ; -C -1 ; WX 509 ; N a205 ; B 35 0 475 692 ; -C -1 ; WX 390 ; N a89 ; B 35 -14 356 705 ; -C -1 ; WX 234 ; N a87 ; B 35 -14 199 705 ; -C -1 ; WX 276 ; N a91 ; B 35 0 242 692 ; -C -1 ; WX 390 ; N a90 ; B 35 -14 355 705 ; -C -1 ; WX 410 ; N a206 ; B 35 0 375 692 ; -C -1 ; WX 317 ; N a94 ; B 35 0 283 692 ; -C -1 ; WX 317 ; N a93 ; B 35 0 283 692 ; -C -1 ; WX 276 ; N a92 ; B 35 0 242 692 ; -C -1 ; WX 334 ; N a96 ; B 35 0 299 692 ; -C -1 ; WX 234 ; N a88 ; B 35 -14 199 705 ; EndCharMetrics EndFontMetrics diff --git a/contrib/groff/font/devps/zapfdr.ps b/contrib/groff/font/devps/zapfdr.ps index 8283be26db..406ee5a27b 100644 --- a/contrib/groff/font/devps/zapfdr.ps +++ b/contrib/groff/font/devps/zapfdr.ps @@ -1,6 +1,6 @@ %!PS-Adobe-3.0 Resource-Font %%DocumentNeededResources: font ZapfDingbats - +%%EndComments %%IncludeResource: font ZapfDingbats /ZapfDingbats findfont [-1 0 0 1 0 0] makefont @@ -17,67 +17,67 @@ dup length 1 add dict begin /FontName /ZapfDingbats-Reverse def /Metrics 202 dict dup begin - /space [0 -278] def + /space [-0 -278] def /a1 [-939 -974] def - /a2 [-926 -961] def + /a2 [-927 -961] def /a202 [-939 -974] def /a3 [-945 -980] def /a4 [-685 -719] def - /a5 [-754 -789] def + /a5 [-755 -789] def /a119 [-755 -790] def - /a118 [-756 -791] def + /a118 [-761 -791] def /a117 [-655 -690] def /a11 [-925 -960] def /a12 [-904 -939] def - /a13 [-520 -549] def - /a14 [-821 -855] def + /a13 [-516 -549] def + /a14 [-820 -855] def /a15 [-876 -911] def - /a16 [-898 -933] def + /a16 [-899 -933] def /a105 [-876 -911] def - /a17 [-910 -945] def - /a18 [-939 -974] def + /a17 [-909 -945] def + /a18 [-938 -974] def /a19 [-721 -755] def /a20 [-811 -846] def /a21 [-727 -762] def - /a22 [-726 -761] def - /a23 [-572 -571] def - /a24 [-641 -677] def + /a22 [-727 -761] def + /a23 [-571 -571] def + /a24 [-642 -677] def /a25 [-728 -763] def - /a26 [-725 -760] def - /a27 [-724 -759] def - /a28 [-719 -754] def - /a6 [-459 -494] def + /a26 [-726 -760] def + /a27 [-725 -759] def + /a28 [-720 -754] def + /a6 [-460 -494] def /a7 [-517 -552] def - /a8 [-502 -537] def + /a8 [-503 -537] def /a9 [-542 -577] def /a10 [-657 -692] def /a29 [-751 -786] def - /a30 [-753 -788] def + /a30 [-752 -788] def /a31 [-753 -788] def - /a32 [-755 -790] def - /a33 [-758 -793] def + /a32 [-756 -790] def + /a33 [-759 -793] def /a34 [-759 -794] def - /a35 [-781 -816] def - /a36 [-788 -823] def + /a35 [-782 -816] def + /a36 [-787 -823] def /a37 [-754 -789] def - /a38 [-806 -841] def - /a39 [-788 -823] def + /a38 [-807 -841] def + /a39 [-789 -823] def /a40 [-798 -833] def - /a41 [-781 -816] def + /a41 [-782 -816] def /a42 [-796 -831] def /a43 [-888 -923] def - /a44 [-709 -744] def + /a44 [-710 -744] def /a45 [-688 -723] def /a46 [-714 -749] def /a47 [-756 -790] def - /a48 [-757 -792] def - /a49 [-660 -695] def + /a48 [-758 -792] def + /a49 [-661 -695] def /a50 [-741 -776] def - /a51 [-733 -768] def + /a51 [-734 -768] def /a52 [-757 -792] def - /a53 [-724 -759] def + /a53 [-725 -759] def /a54 [-672 -707] def - /a55 [-673 -708] def + /a55 [-672 -708] def /a56 [-647 -682] def /a57 [-666 -701] def /a58 [-791 -826] def @@ -87,138 +87,138 @@ dup length 1 add dict begin /a62 [-673 -707] def /a63 [-651 -687] def /a64 [-661 -696] def - /a65 [-654 -689] def - /a66 [-752 -786] def + /a65 [-655 -689] def + /a66 [-751 -786] def /a67 [-752 -787] def /a68 [-678 -713] def /a69 [-756 -791] def - /a70 [-749 -785] def - /a71 [-756 -791] def + /a70 [-751 -785] def + /a71 [-757 -791] def /a72 [-838 -873] def /a73 [-726 -761] def /a74 [-727 -762] def /a203 [-727 -762] def - /a75 [-724 -759] def - /a204 [-724 -759] def - /a76 [-857 -892] def - /a77 [-857 -892] def - /a78 [-753 -788] def + /a75 [-725 -759] def + /a204 [-725 -759] def + /a76 [-858 -892] def + /a77 [-858 -892] def + /a78 [-754 -788] def /a79 [-749 -784] def /a81 [-403 -438] def - /a82 [-103 -138] def + /a82 [-104 -138] def /a83 [-242 -277] def /a84 [-380 -415] def /a97 [-357 -392] def - /a98 [-358 -392] def + /a98 [-357 -392] def /a99 [-633 -668] def - /a100 [-632 -668] def + /a100 [-634 -668] def + /a89 [-356 -390] def + /a90 [-355 -390] def + /a93 [-283 -317] def + /a94 [-283 -317] def + /a91 [-242 -276] def + /a92 [-242 -276] def + /a205 [-475 -509] def + /a85 [-475 -509] def + /a206 [-375 -410] def + /a86 [-375 -410] def + /a87 [-199 -234] def + /a88 [-199 -234] def + /a95 [-299 -334] def + /a96 [-299 -334] def /a101 [-697 -732] def /a102 [-488 -544] def - /a103 [-510 -544] def + /a103 [-508 -544] def /a104 [-875 -910] def - /a106 [-632 -667] def - /a107 [-725 -760] def - /a108 [-760 -760] def + /a106 [-633 -667] def + /a107 [-726 -760] def + /a108 [-758 -760] def /a112 [-741 -776] def - /a111 [-561 -595] def + /a111 [-560 -595] def /a110 [-659 -694] def - /a109 [-592 -626] def - /a120 [-753 -788] def - /a121 [-753 -788] def - /a122 [-753 -788] def - /a123 [-753 -788] def - /a124 [-753 -788] def - /a125 [-753 -788] def - /a126 [-753 -788] def - /a127 [-753 -788] def - /a128 [-753 -788] def - /a129 [-753 -788] def - /a130 [-753 -788] def - /a131 [-753 -788] def - /a132 [-753 -788] def - /a133 [-753 -788] def - /a134 [-753 -788] def - /a135 [-753 -788] def - /a136 [-753 -788] def - /a137 [-753 -788] def - /a138 [-753 -788] def - /a139 [-753 -788] def - /a140 [-753 -788] def - /a141 [-753 -788] def - /a142 [-753 -788] def - /a143 [-753 -788] def - /a144 [-753 -788] def - /a145 [-753 -788] def - /a146 [-753 -788] def - /a147 [-753 -788] def - /a148 [-753 -788] def - /a149 [-753 -788] def - /a150 [-753 -788] def - /a151 [-753 -788] def - /a152 [-753 -788] def - /a153 [-753 -788] def - /a154 [-753 -788] def - /a155 [-753 -788] def - /a156 [-753 -788] def - /a157 [-753 -788] def - /a158 [-753 -788] def - /a159 [-753 -788] def - /a160 [-859 -894] def + /a109 [-591 -626] def + /a120 [-754 -788] def + /a121 [-754 -788] def + /a122 [-754 -788] def + /a123 [-754 -788] def + /a124 [-754 -788] def + /a125 [-754 -788] def + /a126 [-754 -788] def + /a127 [-754 -788] def + /a128 [-754 -788] def + /a129 [-754 -788] def + /a130 [-754 -788] def + /a131 [-754 -788] def + /a132 [-754 -788] def + /a133 [-754 -788] def + /a134 [-754 -788] def + /a135 [-754 -788] def + /a136 [-754 -788] def + /a137 [-754 -788] def + /a138 [-754 -788] def + /a139 [-754 -788] def + /a140 [-754 -788] def + /a141 [-754 -788] def + /a142 [-754 -788] def + /a143 [-754 -788] def + /a144 [-754 -788] def + /a145 [-754 -788] def + /a146 [-754 -788] def + /a147 [-754 -788] def + /a148 [-754 -788] def + /a149 [-754 -788] def + /a150 [-754 -788] def + /a151 [-754 -788] def + /a152 [-754 -788] def + /a153 [-754 -788] def + /a154 [-754 -788] def + /a155 [-754 -788] def + /a156 [-754 -788] def + /a157 [-754 -788] def + /a158 [-754 -788] def + /a159 [-754 -788] def + /a160 [-860 -894] def /a161 [-803 -838] def - /a163 [-982 -1016] def - /a164 [-423 -458] def - /a196 [-713 -748] def - /a165 [-889 -924] def - /a192 [-713 -748] def - /a166 [-883 -918] def + /a163 [-981 -1016] def + /a164 [-422 -458] def + /a196 [-698 -748] def + /a165 [-890 -924] def + /a192 [-698 -748] def + /a166 [-884 -918] def /a167 [-892 -927] def - /a168 [-893 -928] def + /a168 [-891 -928] def /a169 [-893 -928] def /a170 [-799 -834] def /a171 [-838 -873] def - /a172 [-793 -828] def + /a172 [-791 -828] def /a173 [-889 -924] def /a162 [-889 -924] def /a174 [-882 -917] def - /a175 [-895 -930] def + /a175 [-896 -930] def /a176 [-896 -931] def - /a177 [-428 -463] def + /a177 [-429 -463] def /a178 [-848 -883] def - /a179 [-801 -836] def - /a193 [-801 -836] def + /a179 [-802 -836] def + /a193 [-802 -836] def /a180 [-832 -867] def /a199 [-832 -867] def /a181 [-661 -696] def /a200 [-661 -696] def - /a182 [-839 -874] def - /a201 [-839 -874] def + /a182 [-840 -874] def + /a201 [-840 -874] def /a183 [-725 -760] def /a184 [-911 -946] def - /a197 [-737 -771] def + /a197 [-736 -771] def /a185 [-830 -865] def - /a194 [-737 -771] def - /a198 [-854 -888] def + /a194 [-736 -771] def + /a198 [-853 -888] def /a186 [-932 -967] def - /a195 [-854 -888] def + /a195 [-853 -888] def /a187 [-796 -831] def - /a188 [-837 -873] def - /a189 [-892 -927] def - /a190 [-935 -970] def + /a188 [-838 -873] def + /a189 [-891 -927] def + /a190 [-931 -970] def /a191 [-884 -918] def - /a205 [-474 -509] def - /a206 [-375 -410] def - /a85 [-474 -509] def - /a86 [-375 -410] def - /a87 [-199 -234] def - /a88 [-199 -234] def - /a89 [-355 -390] def - /a90 [-355 -390] def - /a91 [-241 -276] def - /a92 [-241 -276] def - /a93 [-282 -317] def - /a94 [-282 -317] def - /a95 [-299 -334] def - /a96 [-299 -334] def end def diff --git a/contrib/groff/font/devutf8/DESC.proto b/contrib/groff/font/devutf8/DESC.proto index 88399ab16d..8cb978d503 100644 --- a/contrib/groff/font/devutf8/DESC.proto +++ b/contrib/groff/font/devutf8/DESC.proto @@ -6,3 +6,4 @@ sizes 10 0 fonts 4 R I B BI tcommand postpro grotty +unicode diff --git a/contrib/groff/font/devutf8/R.in b/contrib/groff/font/devutf8/R.in new file mode 100644 index 0000000000..1df5e30cd0 --- /dev/null +++ b/contrib/groff/font/devutf8/R.in @@ -0,0 +1,4 @@ +name R +internalname 0 +spacewidth 24 +charset diff --git a/contrib/groff/font/devutf8/R.proto b/contrib/groff/font/devutf8/R.proto index ac0828fe49..a8e81a99af 100644 --- a/contrib/groff/font/devutf8/R.proto +++ b/contrib/groff/font/devutf8/R.proto @@ -2,641 +2,320 @@ 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_0300 24 0 0x00C0 +u0041_0301 24 0 0x00C1 +u0041_0302 24 0 0x00C2 +u0041_0303 24 0 0x00C3 +u0041_0308 24 0 0x00C4 +u0041_030A 24 0 0x00C5 +u0043_0327 24 0 0x00C7 +u0045_0300 24 0 0x00C8 +u0045_0301 24 0 0x00C9 +u0045_0302 24 0 0x00CA +u0045_0308 24 0 0x00CB +u0049_0300 24 0 0x00CC +u0049_0301 24 0 0x00CD +u0049_0302 24 0 0x00CE +u0049_0308 24 0 0x00CF +u004E_0303 24 0 0x00D1 +u004F_0300 24 0 0x00D2 +u004F_0301 24 0 0x00D3 +u004F_0302 24 0 0x00D4 +u004F_0303 24 0 0x00D5 +u004F_0308 24 0 0x00D6 +u0055_0300 24 0 0x00D9 +u0055_0301 24 0 0x00DA +u0055_0302 24 0 0x00DB +u0055_0308 24 0 0x00DC +u0059_0301 24 0 0x00DD +u0061_0300 24 0 0x00E0 +u0061_0301 24 0 0x00E1 +u0061_0302 24 0 0x00E2 +u0061_0303 24 0 0x00E3 +u0061_0308 24 0 0x00E4 +u0061_030A 24 0 0x00E5 +u0063_0327 24 0 0x00E7 +u0065_0300 24 0 0x00E8 +u0065_0301 24 0 0x00E9 +u0065_0302 24 0 0x00EA +u0065_0308 24 0 0x00EB +u0069_0300 24 0 0x00EC +u0069_0301 24 0 0x00ED +u0069_0302 24 0 0x00EE +u0069_0308 24 0 0x00EF +u006E_0303 24 0 0x00F1 +u006F_0300 24 0 0x00F2 +u006F_0301 24 0 0x00F3 +u006F_0302 24 0 0x00F4 +u006F_0303 24 0 0x00F5 +u006F_0308 24 0 0x00F6 +u0075_0300 24 0 0x00F9 +u0075_0301 24 0 0x00FA +u0075_0302 24 0 0x00FB +u0075_0308 24 0 0x00FC +u0079_0301 24 0 0x00FD +u0079_0308 24 0 0x00FF +u0041_0304 24 0 0x0100 +u0061_0304 24 0 0x0101 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_0301 24 0 0x0106 +u0063_0301 24 0 0x0107 +u0043_0302 24 0 0x0108 +u0063_0302 24 0 0x0109 +u0043_0307 24 0 0x010A +u0063_0307 24 0 0x010B 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_0304 24 0 0x0112 +u0065_0304 24 0 0x0113 +u0045_0306 24 0 0x0114 +u0065_0306 24 0 0x0115 +u0045_0307 24 0 0x0116 +u0065_0307 24 0 0x0117 u0045_0328 24 0 0x0118 u0065_0328 24 0 0x0119 -u0045_030C 24 0 0x011A +u0045_030C 24 0 0x011A u0065_030C 24 0 0x011B +u0047_0302 24 0 0x011C +u0067_0302 24 0 0x011D u0047_0306 24 0 0x011E u0067_0306 24 0 0x011F +u0047_0307 24 0 0x0120 +u0067_0307 24 0 0x0121 +u0047_0327 24 0 0x0122 +u0067_0327 24 0 0x0123 +u0048_0302 24 0 0x0124 +u0068_0302 24 0 0x0125 +u0049_0303 24 0 0x0128 +u0069_0303 24 0 0x0129 +u0049_0304 24 0 0x012A +u0069_0304 24 0 0x012B +u0049_0306 24 0 0x012C +u0069_0306 24 0 0x012D +u0049_0328 24 0 0x012E +u0069_0328 24 0 0x012F u0049_0307 24 0 0x0130 -.i 24 0 0x0131 -IJ 24 0 0x0132 -ij 24 0 0x0133 +u004A_0302 24 0 0x0134 +u006A_0302 24 0 0x0135 +u004B_0327 24 0 0x0136 +u006B_0327 24 0 0x0137 u004C_0301 24 0 0x0139 u006C_0301 24 0 0x013A +u004C_0327 24 0 0x013B +u006C_0327 24 0 0x013C 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_0327 24 0 0x0145 +u006E_0327 24 0 0x0146 u004E_030C 24 0 0x0147 u006E_030C 24 0 0x0148 +u004F_0304 24 0 0x014C +u006F_0304 24 0 0x014D +u004F_0306 24 0 0x014E +u006F_0306 24 0 0x014F 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_0327 24 0 0x0156 +u0072_0327 24 0 0x0157 u0052_030C 24 0 0x0158 u0072_030C 24 0 0x0159 u0053_0301 24 0 0x015A u0073_0301 24 0 0x015B +u0053_0302 24 0 0x015C +u0073_0302 24 0 0x015D u0053_0327 24 0 0x015E u0073_0327 24 0 0x015F -vS 24 0 0x0160 -vs 24 0 0x0161 +u0053_030C 24 0 0x0160 +u0073_030C 24 0 0x0161 u0054_0327 24 0 0x0162 u0074_0327 24 0 0x0163 u0054_030C 24 0 0x0164 u0074_030C 24 0 0x0165 +u0055_0303 24 0 0x0168 +u0075_0303 24 0 0x0169 +u0055_0304 24 0 0x016A +u0075_0304 24 0 0x016B +u0055_0306 24 0 0x016C +u0075_0306 24 0 0x016D u0055_030A 24 0 0x016E u0075_030A 24 0 0x016F u0055_030B 24 0 0x0170 u0075_030B 24 0 0x0171 -:Y 24 0 0x0178 +u0055_0328 24 0 0x0172 +u0075_0328 24 0 0x0173 +u0057_0302 24 0 0x0174 +u0077_0302 24 0 0x0175 +u0059_0302 24 0 0x0176 +u0079_0302 24 0 0x0177 +u0059_0308 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 +u005A_030C 24 0 0x017D +u007A_030C 24 0 0x017E +u004F_031B 24 0 0x01A0 +u006F_031B 24 0 0x01A1 +u0055_031B 24 0 0x01AF +u0075_031B 24 0 0x01B0 +u0041_030C 24 0 0x01CD +u0061_030C 24 0 0x01CE +u0049_030C 24 0 0x01CF +u0069_030C 24 0 0x01D0 +u004F_030C 24 0 0x01D1 +u006F_030C 24 0 0x01D2 +u0055_030C 24 0 0x01D3 +u0075_030C 24 0 0x01D4 +u0055_0308_0304 24 0 0x01D5 +u0075_0308_0304 24 0 0x01D6 +u0055_0308_0301 24 0 0x01D7 +u0075_0308_0301 24 0 0x01D8 +u0055_0308_030C 24 0 0x01D9 +u0075_0308_030C 24 0 0x01DA +u0055_0308_0300 24 0 0x01DB +u0075_0308_0300 24 0 0x01DC +u0041_0308_0304 24 0 0x01DE +u0061_0308_0304 24 0 0x01DF +u0041_0307_0304 24 0 0x01E0 +u0061_0307_0304 24 0 0x01E1 +u00C6_0304 24 0 0x01E2 +u00E6_0304 24 0 0x01E3 +u0047_030C 24 0 0x01E6 +u0067_030C 24 0 0x01E7 +u004B_030C 24 0 0x01E8 +u006B_030C 24 0 0x01E9 +u004F_0328 24 0 0x01EA +u006F_0328 24 0 0x01EB +u004F_0328_0304 24 0 0x01EC +u006F_0328_0304 24 0 0x01ED +u01B7_030C 24 0 0x01EE +u0292_030C 24 0 0x01EF +u006A_030C 24 0 0x01F0 +u0047_0301 24 0 0x01F4 +u0067_0301 24 0 0x01F5 +u004E_0300 24 0 0x01F8 +u006E_0300 24 0 0x01F9 +u0041_030A_0301 24 0 0x01FA +u0061_030A_0301 24 0 0x01FB +u00C6_0301 24 0 0x01FC +u00E6_0301 24 0 0x01FD +u00D8_0301 24 0 0x01FE +u00F8_0301 24 0 0x01FF +u0041_030F 24 0 0x0200 +u0061_030F 24 0 0x0201 +u0041_0311 24 0 0x0202 +u0061_0311 24 0 0x0203 +u0045_030F 24 0 0x0204 +u0065_030F 24 0 0x0205 +u0045_0311 24 0 0x0206 +u0065_0311 24 0 0x0207 +u0049_030F 24 0 0x0208 +u0069_030F 24 0 0x0209 +u0049_0311 24 0 0x020A +u0069_0311 24 0 0x020B +u004F_030F 24 0 0x020C +u006F_030F 24 0 0x020D +u004F_0311 24 0 0x020E +u006F_0311 24 0 0x020F +u0052_030F 24 0 0x0210 +u0072_030F 24 0 0x0211 +u0052_0311 24 0 0x0212 +u0072_0311 24 0 0x0213 +u0055_030F 24 0 0x0214 +u0075_030F 24 0 0x0215 +u0055_0311 24 0 0x0216 +u0075_0311 24 0 0x0217 +u0053_0326 24 0 0x0218 +u0073_0326 24 0 0x0219 +u0054_0326 24 0 0x021A +u0074_0326 24 0 0x021B +u0048_030C 24 0 0x021E +u0068_030C 24 0 0x021F +u0041_0307 24 0 0x0226 +u0061_0307 24 0 0x0227 +u0045_0327 24 0 0x0228 +u0065_0327 24 0 0x0229 +u004F_0308_0304 24 0 0x022A +u006F_0308_0304 24 0 0x022B +u004F_0303_0304 24 0 0x022C +u006F_0303_0304 24 0 0x022D +u004F_0307 24 0 0x022E +u006F_0307 24 0 0x022F +u004F_0307_0304 24 0 0x0230 +u006F_0307_0304 24 0 0x0231 +u0059_0304 24 0 0x0232 +u0079_0304 24 0 0x0233 +u0308_0301 24 0 0x0344 +u00A8_0301 24 0 0x0385 +u0391_0301 24 0 0x0386 +u0395_0301 24 0 0x0388 +u0397_0301 24 0 0x0389 +u0399_0301 24 0 0x038A +u039F_0301 24 0 0x038C +u03A5_0301 24 0 0x038E +u03A9_0301 24 0 0x038F +u03B9_0308_0301 24 0 0x0390 +u0399_0308 24 0 0x03AA +u03A5_0308 24 0 0x03AB +u03B1_0301 24 0 0x03AC +u03B5_0301 24 0 0x03AD +u03B7_0301 24 0 0x03AE +u03B9_0301 24 0 0x03AF +u03C5_0308_0301 24 0 0x03B0 +u03B9_0308 24 0 0x03CA +u03C5_0308 24 0 0x03CB +u03BF_0301 24 0 0x03CC +u03C5_0301 24 0 0x03CD +u03C9_0301 24 0 0x03CE +u03D2_0301 24 0 0x03D3 +u03D2_0308 24 0 0x03D4 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 @@ -651,169 +330,695 @@ 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 +u0627_0653 24 0 0x0622 +u0627_0654 24 0 0x0623 +u0648_0654 24 0 0x0624 +u0627_0655 24 0 0x0625 +u064A_0654 24 0 0x0626 +u06D5_0654 24 0 0x06C0 +u06C1_0654 24 0 0x06C2 +u06D2_0654 24 0 0x06D3 +u0928_093C 24 0 0x0929 +u0930_093C 24 0 0x0931 +u0933_093C 24 0 0x0934 +u0915_093C 24 0 0x0958 +u0916_093C 24 0 0x0959 +u0917_093C 24 0 0x095A +u091C_093C 24 0 0x095B +u0921_093C 24 0 0x095C +u0922_093C 24 0 0x095D +u092B_093C 24 0 0x095E +u092F_093C 24 0 0x095F +u09C7_09BE 24 0 0x09CB +u09C7_09D7 24 0 0x09CC +u09A1_09BC 24 0 0x09DC +u09A2_09BC 24 0 0x09DD +u09AF_09BC 24 0 0x09DF +u0A32_0A3C 24 0 0x0A33 +u0A38_0A3C 24 0 0x0A36 +u0A16_0A3C 24 0 0x0A59 +u0A17_0A3C 24 0 0x0A5A +u0A1C_0A3C 24 0 0x0A5B +u0A2B_0A3C 24 0 0x0A5E +u0B47_0B56 24 0 0x0B48 +u0B47_0B3E 24 0 0x0B4B +u0B47_0B57 24 0 0x0B4C +u0B21_0B3C 24 0 0x0B5C +u0B22_0B3C 24 0 0x0B5D +u0B92_0BD7 24 0 0x0B94 +u0BC6_0BBE 24 0 0x0BCA +u0BC7_0BBE 24 0 0x0BCB +u0BC6_0BD7 24 0 0x0BCC +u0C46_0C56 24 0 0x0C48 +u0CBF_0CD5 24 0 0x0CC0 +u0CC6_0CD5 24 0 0x0CC7 +u0CC6_0CD6 24 0 0x0CC8 +u0CC6_0CC2 24 0 0x0CCA +u0CC6_0CC2_0CD5 24 0 0x0CCB +u0D46_0D3E 24 0 0x0D4A +u0D47_0D3E 24 0 0x0D4B +u0D46_0D57 24 0 0x0D4C +u0DD9_0DCA 24 0 0x0DDA +u0DD9_0DCF 24 0 0x0DDC +u0DD9_0DCF_0DCA 24 0 0x0DDD +u0DD9_0DDF 24 0 0x0DDE +u0F42_0FB7 24 0 0x0F43 +u0F4C_0FB7 24 0 0x0F4D +u0F51_0FB7 24 0 0x0F52 +u0F56_0FB7 24 0 0x0F57 +u0F5B_0FB7 24 0 0x0F5C +u0F40_0FB5 24 0 0x0F69 +u0F71_0F72 24 0 0x0F73 +u0F71_0F74 24 0 0x0F75 +u0FB2_0F80 24 0 0x0F76 +u0FB3_0F80 24 0 0x0F78 +u0F71_0F80 24 0 0x0F81 +u0F92_0FB7 24 0 0x0F93 +u0F9C_0FB7 24 0 0x0F9D +u0FA1_0FB7 24 0 0x0FA2 +u0FA6_0FB7 24 0 0x0FA7 +u0FAB_0FB7 24 0 0x0FAC +u0F90_0FB5 24 0 0x0FB9 +u1025_102E 24 0 0x1026 +u0041_0325 24 0 0x1E00 +u0061_0325 24 0 0x1E01 +u0042_0307 24 0 0x1E02 +u0062_0307 24 0 0x1E03 +u0042_0323 24 0 0x1E04 +u0062_0323 24 0 0x1E05 +u0042_0331 24 0 0x1E06 +u0062_0331 24 0 0x1E07 +u0043_0327_0301 24 0 0x1E08 +u0063_0327_0301 24 0 0x1E09 +u0044_0307 24 0 0x1E0A +u0064_0307 24 0 0x1E0B +u0044_0323 24 0 0x1E0C +u0064_0323 24 0 0x1E0D +u0044_0331 24 0 0x1E0E +u0064_0331 24 0 0x1E0F +u0044_0327 24 0 0x1E10 +u0064_0327 24 0 0x1E11 +u0044_032D 24 0 0x1E12 +u0064_032D 24 0 0x1E13 +u0045_0304_0300 24 0 0x1E14 +u0065_0304_0300 24 0 0x1E15 +u0045_0304_0301 24 0 0x1E16 +u0065_0304_0301 24 0 0x1E17 +u0045_032D 24 0 0x1E18 +u0065_032D 24 0 0x1E19 +u0045_0330 24 0 0x1E1A +u0065_0330 24 0 0x1E1B +u0045_0327_0306 24 0 0x1E1C +u0065_0327_0306 24 0 0x1E1D +u0046_0307 24 0 0x1E1E +u0066_0307 24 0 0x1E1F +u0047_0304 24 0 0x1E20 +u0067_0304 24 0 0x1E21 +u0048_0307 24 0 0x1E22 +u0068_0307 24 0 0x1E23 +u0048_0323 24 0 0x1E24 +u0068_0323 24 0 0x1E25 +u0048_0308 24 0 0x1E26 +u0068_0308 24 0 0x1E27 +u0048_0327 24 0 0x1E28 +u0068_0327 24 0 0x1E29 +u0048_032E 24 0 0x1E2A +u0068_032E 24 0 0x1E2B +u0049_0330 24 0 0x1E2C +u0069_0330 24 0 0x1E2D +u0049_0308_0301 24 0 0x1E2E +u0069_0308_0301 24 0 0x1E2F +u004B_0301 24 0 0x1E30 +u006B_0301 24 0 0x1E31 +u004B_0323 24 0 0x1E32 +u006B_0323 24 0 0x1E33 +u004B_0331 24 0 0x1E34 +u006B_0331 24 0 0x1E35 +u004C_0323 24 0 0x1E36 +u006C_0323 24 0 0x1E37 +u004C_0323_0304 24 0 0x1E38 +u006C_0323_0304 24 0 0x1E39 +u004C_0331 24 0 0x1E3A +u006C_0331 24 0 0x1E3B +u004C_032D 24 0 0x1E3C +u006C_032D 24 0 0x1E3D +u004D_0301 24 0 0x1E3E +u006D_0301 24 0 0x1E3F +u004D_0307 24 0 0x1E40 +u006D_0307 24 0 0x1E41 +u004D_0323 24 0 0x1E42 +u006D_0323 24 0 0x1E43 +u004E_0307 24 0 0x1E44 +u006E_0307 24 0 0x1E45 +u004E_0323 24 0 0x1E46 +u006E_0323 24 0 0x1E47 +u004E_0331 24 0 0x1E48 +u006E_0331 24 0 0x1E49 +u004E_032D 24 0 0x1E4A +u006E_032D 24 0 0x1E4B +u004F_0303_0301 24 0 0x1E4C +u006F_0303_0301 24 0 0x1E4D +u004F_0303_0308 24 0 0x1E4E +u006F_0303_0308 24 0 0x1E4F +u004F_0304_0300 24 0 0x1E50 +u006F_0304_0300 24 0 0x1E51 +u004F_0304_0301 24 0 0x1E52 +u006F_0304_0301 24 0 0x1E53 +u0050_0301 24 0 0x1E54 +u0070_0301 24 0 0x1E55 +u0050_0307 24 0 0x1E56 +u0070_0307 24 0 0x1E57 +u0052_0307 24 0 0x1E58 +u0072_0307 24 0 0x1E59 +u0052_0323 24 0 0x1E5A +u0072_0323 24 0 0x1E5B +u0052_0323_0304 24 0 0x1E5C +u0072_0323_0304 24 0 0x1E5D +u0052_0331 24 0 0x1E5E +u0072_0331 24 0 0x1E5F +u0053_0307 24 0 0x1E60 +u0073_0307 24 0 0x1E61 +u0053_0323 24 0 0x1E62 +u0073_0323 24 0 0x1E63 +u0053_0301_0307 24 0 0x1E64 +u0073_0301_0307 24 0 0x1E65 +u0053_030C_0307 24 0 0x1E66 +u0073_030C_0307 24 0 0x1E67 +u0053_0323_0307 24 0 0x1E68 +u0073_0323_0307 24 0 0x1E69 +u0054_0307 24 0 0x1E6A +u0074_0307 24 0 0x1E6B +u0054_0323 24 0 0x1E6C +u0074_0323 24 0 0x1E6D +u0054_0331 24 0 0x1E6E +u0074_0331 24 0 0x1E6F +u0054_032D 24 0 0x1E70 +u0074_032D 24 0 0x1E71 +u0055_0324 24 0 0x1E72 +u0075_0324 24 0 0x1E73 +u0055_0330 24 0 0x1E74 +u0075_0330 24 0 0x1E75 +u0055_032D 24 0 0x1E76 +u0075_032D 24 0 0x1E77 +u0055_0303_0301 24 0 0x1E78 +u0075_0303_0301 24 0 0x1E79 +u0055_0304_0308 24 0 0x1E7A +u0075_0304_0308 24 0 0x1E7B +u0056_0303 24 0 0x1E7C +u0076_0303 24 0 0x1E7D +u0056_0323 24 0 0x1E7E +u0076_0323 24 0 0x1E7F +u0057_0300 24 0 0x1E80 +u0077_0300 24 0 0x1E81 +u0057_0301 24 0 0x1E82 +u0077_0301 24 0 0x1E83 +u0057_0308 24 0 0x1E84 +u0077_0308 24 0 0x1E85 +u0057_0307 24 0 0x1E86 +u0077_0307 24 0 0x1E87 +u0057_0323 24 0 0x1E88 +u0077_0323 24 0 0x1E89 +u0058_0307 24 0 0x1E8A +u0078_0307 24 0 0x1E8B +u0058_0308 24 0 0x1E8C +u0078_0308 24 0 0x1E8D +u0059_0307 24 0 0x1E8E +u0079_0307 24 0 0x1E8F +u005A_0302 24 0 0x1E90 +u007A_0302 24 0 0x1E91 +u005A_0323 24 0 0x1E92 +u007A_0323 24 0 0x1E93 +u005A_0331 24 0 0x1E94 +u007A_0331 24 0 0x1E95 +u0068_0331 24 0 0x1E96 +u0074_0308 24 0 0x1E97 +u0077_030A 24 0 0x1E98 +u0079_030A 24 0 0x1E99 +u017F_0307 24 0 0x1E9B +u0041_0323 24 0 0x1EA0 +u0061_0323 24 0 0x1EA1 +u0041_0309 24 0 0x1EA2 +u0061_0309 24 0 0x1EA3 +u0041_0302_0301 24 0 0x1EA4 +u0061_0302_0301 24 0 0x1EA5 +u0041_0302_0300 24 0 0x1EA6 +u0061_0302_0300 24 0 0x1EA7 +u0041_0302_0309 24 0 0x1EA8 +u0061_0302_0309 24 0 0x1EA9 +u0041_0302_0303 24 0 0x1EAA +u0061_0302_0303 24 0 0x1EAB +u0041_0323_0302 24 0 0x1EAC +u0061_0323_0302 24 0 0x1EAD +u0041_0306_0301 24 0 0x1EAE +u0061_0306_0301 24 0 0x1EAF +u0041_0306_0300 24 0 0x1EB0 +u0061_0306_0300 24 0 0x1EB1 +u0041_0306_0309 24 0 0x1EB2 +u0061_0306_0309 24 0 0x1EB3 +u0041_0306_0303 24 0 0x1EB4 +u0061_0306_0303 24 0 0x1EB5 +u0041_0323_0306 24 0 0x1EB6 +u0061_0323_0306 24 0 0x1EB7 +u0045_0323 24 0 0x1EB8 +u0065_0323 24 0 0x1EB9 +u0045_0309 24 0 0x1EBA +u0065_0309 24 0 0x1EBB +u0045_0303 24 0 0x1EBC +u0065_0303 24 0 0x1EBD +u0045_0302_0301 24 0 0x1EBE +u0065_0302_0301 24 0 0x1EBF +u0045_0302_0300 24 0 0x1EC0 +u0065_0302_0300 24 0 0x1EC1 +u0045_0302_0309 24 0 0x1EC2 +u0065_0302_0309 24 0 0x1EC3 +u0045_0302_0303 24 0 0x1EC4 +u0065_0302_0303 24 0 0x1EC5 +u0045_0323_0302 24 0 0x1EC6 +u0065_0323_0302 24 0 0x1EC7 +u0049_0309 24 0 0x1EC8 +u0069_0309 24 0 0x1EC9 +u0049_0323 24 0 0x1ECA +u0069_0323 24 0 0x1ECB +u004F_0323 24 0 0x1ECC +u006F_0323 24 0 0x1ECD +u004F_0309 24 0 0x1ECE +u006F_0309 24 0 0x1ECF +u004F_0302_0301 24 0 0x1ED0 +u006F_0302_0301 24 0 0x1ED1 +u004F_0302_0300 24 0 0x1ED2 +u006F_0302_0300 24 0 0x1ED3 +u004F_0302_0309 24 0 0x1ED4 +u006F_0302_0309 24 0 0x1ED5 +u004F_0302_0303 24 0 0x1ED6 +u006F_0302_0303 24 0 0x1ED7 +u004F_0323_0302 24 0 0x1ED8 +u006F_0323_0302 24 0 0x1ED9 +u004F_031B_0301 24 0 0x1EDA +u006F_031B_0301 24 0 0x1EDB +u004F_031B_0300 24 0 0x1EDC +u006F_031B_0300 24 0 0x1EDD +u004F_031B_0309 24 0 0x1EDE +u006F_031B_0309 24 0 0x1EDF +u004F_031B_0303 24 0 0x1EE0 +u006F_031B_0303 24 0 0x1EE1 +u004F_031B_0323 24 0 0x1EE2 +u006F_031B_0323 24 0 0x1EE3 +u0055_0323 24 0 0x1EE4 +u0075_0323 24 0 0x1EE5 +u0055_0309 24 0 0x1EE6 +u0075_0309 24 0 0x1EE7 +u0055_031B_0301 24 0 0x1EE8 +u0075_031B_0301 24 0 0x1EE9 +u0055_031B_0300 24 0 0x1EEA +u0075_031B_0300 24 0 0x1EEB +u0055_031B_0309 24 0 0x1EEC +u0075_031B_0309 24 0 0x1EED +u0055_031B_0303 24 0 0x1EEE +u0075_031B_0303 24 0 0x1EEF +u0055_031B_0323 24 0 0x1EF0 +u0075_031B_0323 24 0 0x1EF1 +u0059_0300 24 0 0x1EF2 +u0079_0300 24 0 0x1EF3 +u0059_0323 24 0 0x1EF4 +u0079_0323 24 0 0x1EF5 +u0059_0309 24 0 0x1EF6 +u0079_0309 24 0 0x1EF7 +u0059_0303 24 0 0x1EF8 +u0079_0303 24 0 0x1EF9 +u03B1_0313 24 0 0x1F00 +u03B1_0314 24 0 0x1F01 +u03B1_0313_0300 24 0 0x1F02 +u03B1_0314_0300 24 0 0x1F03 +u03B1_0313_0301 24 0 0x1F04 +u03B1_0314_0301 24 0 0x1F05 +u03B1_0313_0342 24 0 0x1F06 +u03B1_0314_0342 24 0 0x1F07 +u0391_0313 24 0 0x1F08 +u0391_0314 24 0 0x1F09 +u0391_0313_0300 24 0 0x1F0A +u0391_0314_0300 24 0 0x1F0B +u0391_0313_0301 24 0 0x1F0C +u0391_0314_0301 24 0 0x1F0D +u0391_0313_0342 24 0 0x1F0E +u0391_0314_0342 24 0 0x1F0F +u03B5_0313 24 0 0x1F10 +u03B5_0314 24 0 0x1F11 +u03B5_0313_0300 24 0 0x1F12 +u03B5_0314_0300 24 0 0x1F13 +u03B5_0313_0301 24 0 0x1F14 +u03B5_0314_0301 24 0 0x1F15 +u0395_0313 24 0 0x1F18 +u0395_0314 24 0 0x1F19 +u0395_0313_0300 24 0 0x1F1A +u0395_0314_0300 24 0 0x1F1B +u0395_0313_0301 24 0 0x1F1C +u0395_0314_0301 24 0 0x1F1D +u03B7_0313 24 0 0x1F20 +u03B7_0314 24 0 0x1F21 +u03B7_0313_0300 24 0 0x1F22 +u03B7_0314_0300 24 0 0x1F23 +u03B7_0313_0301 24 0 0x1F24 +u03B7_0314_0301 24 0 0x1F25 +u03B7_0313_0342 24 0 0x1F26 +u03B7_0314_0342 24 0 0x1F27 +u0397_0313 24 0 0x1F28 +u0397_0314 24 0 0x1F29 +u0397_0313_0300 24 0 0x1F2A +u0397_0314_0300 24 0 0x1F2B +u0397_0313_0301 24 0 0x1F2C +u0397_0314_0301 24 0 0x1F2D +u0397_0313_0342 24 0 0x1F2E +u0397_0314_0342 24 0 0x1F2F +u03B9_0313 24 0 0x1F30 +u03B9_0314 24 0 0x1F31 +u03B9_0313_0300 24 0 0x1F32 +u03B9_0314_0300 24 0 0x1F33 +u03B9_0313_0301 24 0 0x1F34 +u03B9_0314_0301 24 0 0x1F35 +u03B9_0313_0342 24 0 0x1F36 +u03B9_0314_0342 24 0 0x1F37 +u0399_0313 24 0 0x1F38 +u0399_0314 24 0 0x1F39 +u0399_0313_0300 24 0 0x1F3A +u0399_0314_0300 24 0 0x1F3B +u0399_0313_0301 24 0 0x1F3C +u0399_0314_0301 24 0 0x1F3D +u0399_0313_0342 24 0 0x1F3E +u0399_0314_0342 24 0 0x1F3F +u03BF_0313 24 0 0x1F40 +u03BF_0314 24 0 0x1F41 +u03BF_0313_0300 24 0 0x1F42 +u03BF_0314_0300 24 0 0x1F43 +u03BF_0313_0301 24 0 0x1F44 +u03BF_0314_0301 24 0 0x1F45 +u039F_0313 24 0 0x1F48 +u039F_0314 24 0 0x1F49 +u039F_0313_0300 24 0 0x1F4A +u039F_0314_0300 24 0 0x1F4B +u039F_0313_0301 24 0 0x1F4C +u039F_0314_0301 24 0 0x1F4D +u03C5_0313 24 0 0x1F50 +u03C5_0314 24 0 0x1F51 +u03C5_0313_0300 24 0 0x1F52 +u03C5_0314_0300 24 0 0x1F53 +u03C5_0313_0301 24 0 0x1F54 +u03C5_0314_0301 24 0 0x1F55 +u03C5_0313_0342 24 0 0x1F56 +u03C5_0314_0342 24 0 0x1F57 +u03A5_0314 24 0 0x1F59 +u03A5_0314_0300 24 0 0x1F5B +u03A5_0314_0301 24 0 0x1F5D +u03A5_0314_0342 24 0 0x1F5F +u03C9_0313 24 0 0x1F60 +u03C9_0314 24 0 0x1F61 +u03C9_0313_0300 24 0 0x1F62 +u03C9_0314_0300 24 0 0x1F63 +u03C9_0313_0301 24 0 0x1F64 +u03C9_0314_0301 24 0 0x1F65 +u03C9_0313_0342 24 0 0x1F66 +u03C9_0314_0342 24 0 0x1F67 +u03A9_0313 24 0 0x1F68 +u03A9_0314 24 0 0x1F69 +u03A9_0313_0300 24 0 0x1F6A +u03A9_0314_0300 24 0 0x1F6B +u03A9_0313_0301 24 0 0x1F6C +u03A9_0314_0301 24 0 0x1F6D +u03A9_0313_0342 24 0 0x1F6E +u03A9_0314_0342 24 0 0x1F6F +u03B1_0300 24 0 0x1F70 +u03B1_0301 24 0 0x1F71 +u03B5_0300 24 0 0x1F72 +u03B5_0301 24 0 0x1F73 +u03B7_0300 24 0 0x1F74 +u03B7_0301 24 0 0x1F75 +u03B9_0300 24 0 0x1F76 +u03B9_0301 24 0 0x1F77 +u03BF_0300 24 0 0x1F78 +u03BF_0301 24 0 0x1F79 +u03C5_0300 24 0 0x1F7A +u03C5_0301 24 0 0x1F7B +u03C9_0300 24 0 0x1F7C +u03C9_0301 24 0 0x1F7D +u03B1_0313_0345 24 0 0x1F80 +u03B1_0314_0345 24 0 0x1F81 +u03B1_0313_0300_0345 24 0 0x1F82 +u03B1_0314_0300_0345 24 0 0x1F83 +u03B1_0313_0301_0345 24 0 0x1F84 +u03B1_0314_0301_0345 24 0 0x1F85 +u03B1_0313_0342_0345 24 0 0x1F86 +u03B1_0314_0342_0345 24 0 0x1F87 +u0391_0313_0345 24 0 0x1F88 +u0391_0314_0345 24 0 0x1F89 +u0391_0313_0300_0345 24 0 0x1F8A +u0391_0314_0300_0345 24 0 0x1F8B +u0391_0313_0301_0345 24 0 0x1F8C +u0391_0314_0301_0345 24 0 0x1F8D +u0391_0313_0342_0345 24 0 0x1F8E +u0391_0314_0342_0345 24 0 0x1F8F +u03B7_0313_0345 24 0 0x1F90 +u03B7_0314_0345 24 0 0x1F91 +u03B7_0313_0300_0345 24 0 0x1F92 +u03B7_0314_0300_0345 24 0 0x1F93 +u03B7_0313_0301_0345 24 0 0x1F94 +u03B7_0314_0301_0345 24 0 0x1F95 +u03B7_0313_0342_0345 24 0 0x1F96 +u03B7_0314_0342_0345 24 0 0x1F97 +u0397_0313_0345 24 0 0x1F98 +u0397_0314_0345 24 0 0x1F99 +u0397_0313_0300_0345 24 0 0x1F9A +u0397_0314_0300_0345 24 0 0x1F9B +u0397_0313_0301_0345 24 0 0x1F9C +u0397_0314_0301_0345 24 0 0x1F9D +u0397_0313_0342_0345 24 0 0x1F9E +u0397_0314_0342_0345 24 0 0x1F9F +u03C9_0313_0345 24 0 0x1FA0 +u03C9_0314_0345 24 0 0x1FA1 +u03C9_0313_0300_0345 24 0 0x1FA2 +u03C9_0314_0300_0345 24 0 0x1FA3 +u03C9_0313_0301_0345 24 0 0x1FA4 +u03C9_0314_0301_0345 24 0 0x1FA5 +u03C9_0313_0342_0345 24 0 0x1FA6 +u03C9_0314_0342_0345 24 0 0x1FA7 +u03A9_0313_0345 24 0 0x1FA8 +u03A9_0314_0345 24 0 0x1FA9 +u03A9_0313_0300_0345 24 0 0x1FAA +u03A9_0314_0300_0345 24 0 0x1FAB +u03A9_0313_0301_0345 24 0 0x1FAC +u03A9_0314_0301_0345 24 0 0x1FAD +u03A9_0313_0342_0345 24 0 0x1FAE +u03A9_0314_0342_0345 24 0 0x1FAF +u03B1_0306 24 0 0x1FB0 +u03B1_0304 24 0 0x1FB1 +u03B1_0300_0345 24 0 0x1FB2 +u03B1_0345 24 0 0x1FB3 +u03B1_0301_0345 24 0 0x1FB4 +u03B1_0342 24 0 0x1FB6 +u03B1_0342_0345 24 0 0x1FB7 +u0391_0306 24 0 0x1FB8 +u0391_0304 24 0 0x1FB9 +u0391_0300 24 0 0x1FBA +u0391_0301 24 0 0x1FBB +u0391_0345 24 0 0x1FBC +u00A8_0342 24 0 0x1FC1 +u03B7_0300_0345 24 0 0x1FC2 +u03B7_0345 24 0 0x1FC3 +u03B7_0301_0345 24 0 0x1FC4 +u03B7_0342 24 0 0x1FC6 +u03B7_0342_0345 24 0 0x1FC7 +u0395_0300 24 0 0x1FC8 +u0395_0301 24 0 0x1FC9 +u0397_0300 24 0 0x1FCA +u0397_0301 24 0 0x1FCB +u0397_0345 24 0 0x1FCC +u1FBF_0300 24 0 0x1FCD +u1FBF_0301 24 0 0x1FCE +u1FBF_0342 24 0 0x1FCF +u03B9_0306 24 0 0x1FD0 +u03B9_0304 24 0 0x1FD1 +u03B9_0308_0300 24 0 0x1FD2 +u03B9_0308_0301 24 0 0x1FD3 +u03B9_0342 24 0 0x1FD6 +u03B9_0308_0342 24 0 0x1FD7 +u0399_0306 24 0 0x1FD8 +u0399_0304 24 0 0x1FD9 +u0399_0300 24 0 0x1FDA +u0399_0301 24 0 0x1FDB +u1FFE_0300 24 0 0x1FDD +u1FFE_0301 24 0 0x1FDE +u1FFE_0342 24 0 0x1FDF +u03C5_0306 24 0 0x1FE0 +u03C5_0304 24 0 0x1FE1 +u03C5_0308_0300 24 0 0x1FE2 +u03C5_0308_0301 24 0 0x1FE3 +u03C1_0313 24 0 0x1FE4 +u03C1_0314 24 0 0x1FE5 +u03C5_0342 24 0 0x1FE6 +u03C5_0308_0342 24 0 0x1FE7 +u03A5_0306 24 0 0x1FE8 +u03A5_0304 24 0 0x1FE9 +u03A5_0300 24 0 0x1FEA +u03A5_0301 24 0 0x1FEB +u03A1_0314 24 0 0x1FEC +u00A8_0300 24 0 0x1FED +u00A8_0301 24 0 0x1FEE +u03C9_0300_0345 24 0 0x1FF2 +u03C9_0345 24 0 0x1FF3 +u03C9_0301_0345 24 0 0x1FF4 +u03C9_0342 24 0 0x1FF6 +u03C9_0342_0345 24 0 0x1FF7 +u039F_0300 24 0 0x1FF8 +u039F_0301 24 0 0x1FF9 +u03A9_0300 24 0 0x1FFA +u03A9_0301 24 0 0x1FFB +u03A9_0345 24 0 0x1FFC +u0041_030A 24 0 0x212B +u2190_0338 24 0 0x219A +u2192_0338 24 0 0x219B +u2194_0338 24 0 0x21AE +u21D0_0338 24 0 0x21CD +u21D4_0338 24 0 0x21CE +u21D2_0338 24 0 0x21CF +u2203_0338 24 0 0x2204 +u2208_0338 24 0 0x2209 +u220B_0338 24 0 0x220C +u2223_0338 24 0 0x2224 +u2225_0338 24 0 0x2226 +u223C_0338 24 0 0x2241 +u2243_0338 24 0 0x2244 +u2245_0338 24 0 0x2247 +u2248_0338 24 0 0x2249 +u003D_0338 24 0 0x2260 +u2261_0338 24 0 0x2262 +u224D_0338 24 0 0x226D +u003C_0338 24 0 0x226E +u003E_0338 24 0 0x226F +u2264_0338 24 0 0x2270 +u2265_0338 24 0 0x2271 +u2272_0338 24 0 0x2274 +u2273_0338 24 0 0x2275 +u2276_0338 24 0 0x2278 +u2277_0338 24 0 0x2279 +u227A_0338 24 0 0x2280 +u227B_0338 24 0 0x2281 +u2282_0338 24 0 0x2284 +u2283_0338 24 0 0x2285 +u2286_0338 24 0 0x2288 +u2287_0338 24 0 0x2289 +u22A2_0338 24 0 0x22AC +u22A8_0338 24 0 0x22AD +u22A9_0338 24 0 0x22AE +u22AB_0338 24 0 0x22AF +u227C_0338 24 0 0x22E0 +u227D_0338 24 0 0x22E1 +u2291_0338 24 0 0x22E2 +u2292_0338 24 0 0x22E3 +u22B2_0338 24 0 0x22EA +u22B3_0338 24 0 0x22EB +u22B4_0338 24 0 0x22EC +u22B5_0338 24 0 0x22ED +u2ADD_0338 24 0 0x2ADC +u304B_3099 24 0 0x304C +u304D_3099 24 0 0x304E +u304F_3099 24 0 0x3050 +u3051_3099 24 0 0x3052 +u3053_3099 24 0 0x3054 +u3055_3099 24 0 0x3056 +u3057_3099 24 0 0x3058 +u3059_3099 24 0 0x305A +u305B_3099 24 0 0x305C +u305D_3099 24 0 0x305E +u305F_3099 24 0 0x3060 +u3061_3099 24 0 0x3062 +u3064_3099 24 0 0x3065 +u3066_3099 24 0 0x3067 +u3068_3099 24 0 0x3069 +u306F_3099 24 0 0x3070 +u306F_309A 24 0 0x3071 +u3072_3099 24 0 0x3073 +u3072_309A 24 0 0x3074 +u3075_3099 24 0 0x3076 +u3075_309A 24 0 0x3077 +u3078_3099 24 0 0x3079 +u3078_309A 24 0 0x307A +u307B_3099 24 0 0x307C +u307B_309A 24 0 0x307D +u3046_3099 24 0 0x3094 +u309D_3099 24 0 0x309E +u30AB_3099 24 0 0x30AC +u30AD_3099 24 0 0x30AE +u30AF_3099 24 0 0x30B0 +u30B1_3099 24 0 0x30B2 +u30B3_3099 24 0 0x30B4 +u30B5_3099 24 0 0x30B6 +u30B7_3099 24 0 0x30B8 +u30B9_3099 24 0 0x30BA +u30BB_3099 24 0 0x30BC +u30BD_3099 24 0 0x30BE +u30BF_3099 24 0 0x30C0 +u30C1_3099 24 0 0x30C2 +u30C4_3099 24 0 0x30C5 +u30C6_3099 24 0 0x30C7 +u30C8_3099 24 0 0x30C9 +u30CF_3099 24 0 0x30D0 +u30CF_309A 24 0 0x30D1 +u30D2_3099 24 0 0x30D3 +u30D2_309A 24 0 0x30D4 +u30D5_3099 24 0 0x30D6 +u30D5_309A 24 0 0x30D7 +u30D8_3099 24 0 0x30D9 +u30D8_309A 24 0 0x30DA +u30DB_3099 24 0 0x30DC +u30DB_309A 24 0 0x30DD +u30A6_3099 24 0 0x30F4 +u30EF_3099 24 0 0x30F7 +u30F0_3099 24 0 0x30F8 +u30F1_3099 24 0 0x30F9 +u30F2_3099 24 0 0x30FA +u30FD_3099 24 0 0x30FE +u05D9_05B4 24 0 0xFB1D +u05F2_05B7 24 0 0xFB1F +u05E9_05C1 24 0 0xFB2A +u05E9_05C2 24 0 0xFB2B +u05E9_05BC_05C1 24 0 0xFB2C +u05E9_05BC_05C2 24 0 0xFB2D +u05D0_05B7 24 0 0xFB2E +u05D0_05B8 24 0 0xFB2F +u05D0_05BC 24 0 0xFB30 +u05D1_05BC 24 0 0xFB31 +u05D2_05BC 24 0 0xFB32 +u05D3_05BC 24 0 0xFB33 +u05D4_05BC 24 0 0xFB34 +u05D5_05BC 24 0 0xFB35 +u05D6_05BC 24 0 0xFB36 +u05D8_05BC 24 0 0xFB38 +u05D9_05BC 24 0 0xFB39 +u05DA_05BC 24 0 0xFB3A +u05DB_05BC 24 0 0xFB3B +u05DC_05BC 24 0 0xFB3C +u05DE_05BC 24 0 0xFB3E +u05E0_05BC 24 0 0xFB40 +u05E1_05BC 24 0 0xFB41 +u05E3_05BC 24 0 0xFB43 +u05E4_05BC 24 0 0xFB44 +u05E6_05BC 24 0 0xFB46 +u05E7_05BC 24 0 0xFB47 +u05E8_05BC 24 0 0xFB48 +u05E9_05BC 24 0 0xFB49 +u05EA_05BC 24 0 0xFB4A +u05D5_05B9 24 0 0xFB4B +u05D1_05BF 24 0 0xFB4C +u05DB_05BF 24 0 0xFB4D +u05E4_05BF 24 0 0xFB4E +u1D157_1D165 24 0 0x1D15E +u1D158_1D165 24 0 0x1D15F +u1D158_1D165_1D16E 24 0 0x1D160 +u1D158_1D165_1D16F 24 0 0x1D161 +u1D158_1D165_1D170 24 0 0x1D162 +u1D158_1D165_1D171 24 0 0x1D163 +u1D158_1D165_1D172 24 0 0x1D164 +u1D1B9_1D165 24 0 0x1D1BB +u1D1BA_1D165 24 0 0x1D1BC +u1D1B9_1D165_1D16E 24 0 0x1D1BD +u1D1BA_1D165_1D16E 24 0 0x1D1BE +u1D1B9_1D165_1D16F 24 0 0x1D1BF +u1D1BA_1D165_1D16F 24 0 0x1D1C0 diff --git a/contrib/groff/font/util/make-Rproto b/contrib/groff/font/util/make-Rproto new file mode 100644 index 0000000000..4e2470563c --- /dev/null +++ b/contrib/groff/font/util/make-Rproto @@ -0,0 +1,48 @@ +#! /bin/sh +# +# make-Rproto -- script for creating an R.proto file +# +# Copyright (C) 2006, 2009 +# Free Software Foundation, Inc. +# Written by Werner Lemberg +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# +# usage: +# +# make-Rproto R.proto.in < uniuni.cpp > R.proto +# +# `R.proto.in' contains the device specific part of the R.proto file; it +# should end with a line containing the word `charset'. +# +# `uniuni.cpp' is located in directory `src/libs/libgroff'. + +prog="$0" + +if test $# -ne 1; then + echo "usage: $0 R.proto.in < uniuni.cpp > R.proto" + exit 1 +fi + +# Emit preamble. +cat "$1" + +# Extract composite characters. +grep '^ { ".*", ".*_.*" },' \ +| sed 's/ { "\(.*\)", ".\(.*\)" },/u\2 24 0 0x\1/' + +# EOF diff --git a/contrib/groff/m4/codeset.m4 b/contrib/groff/m4/codeset.m4 new file mode 100644 index 0000000000..de4181d7d2 --- /dev/null +++ b/contrib/groff/m4/codeset.m4 @@ -0,0 +1,21 @@ +# codeset.m4 serial 3 (gettext-0.18) +dnl Copyright (C) 2000-2002, 2006, 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([AM_LANGINFO_CODESET], +[ + AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset], + [AC_TRY_LINK([#include ], + [char* cs = nl_langinfo(CODESET); return !cs;], + [am_cv_langinfo_codeset=yes], + [am_cv_langinfo_codeset=no]) + ]) + if test $am_cv_langinfo_codeset = yes; then + AC_DEFINE([HAVE_LANGINFO_CODESET], 1, + [Define if you have and nl_langinfo(CODESET).]) + fi +]) diff --git a/contrib/groff/m4/glibc21.m4 b/contrib/groff/m4/glibc21.m4 new file mode 100644 index 0000000000..93fbf47459 --- /dev/null +++ b/contrib/groff/m4/glibc21.m4 @@ -0,0 +1,30 @@ +# glibc21.m4 serial 4 +dnl Copyright (C) 2000-2002, 2004, 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Test for the GNU C Library, version 2.1 or newer. +# From Bruno Haible. + +AC_DEFUN([gl_GLIBC21], + [ + AC_CACHE_CHECK([whether we are using the GNU C Library 2.1 or newer], + [ac_cv_gnu_library_2_1], + [AC_EGREP_CPP([Lucky GNU user], + [ +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif + ], + [ac_cv_gnu_library_2_1=yes], + [ac_cv_gnu_library_2_1=no]) + ] + ) + AC_SUBST([GLIBC21]) + GLIBC21="$ac_cv_gnu_library_2_1" + ] +) diff --git a/contrib/groff/m4/groff.m4 b/contrib/groff/m4/groff.m4 new file mode 100644 index 0000000000..c2c58cc5d0 --- /dev/null +++ b/contrib/groff/m4/groff.m4 @@ -0,0 +1,1195 @@ +# Autoconf macros for groff. +# Copyright (C) 1989-1995, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 +# Free Software Foundation, Inc. +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +AC_DEFUN([GROFF_PRINT], + [if test -z "$PSPRINT"; then + AC_CHECK_PROGS([LPR], [lpr]) + AC_CHECK_PROGS([LP], [lp]) + if test -n "$LPR" && test -n "$LP"; then + # HP-UX provides an lpr command that emulates lpr using lp, + # but it doesn't have lpq; in this case we want to use lp + # rather than lpr. + AC_CHECK_PROGS([LPQ], [lpq]) + test -n "$LPQ" || LPR= + fi + if test -n "$LPR"; then + PSPRINT="$LPR" + elif test -n "$LP"; then + PSPRINT="$LP" + fi + fi + AC_SUBST([PSPRINT]) + AC_MSG_CHECKING([for command to use for printing PostScript files]) + AC_MSG_RESULT([$PSPRINT]) + + # Figure out DVIPRINT from PSPRINT. + AC_MSG_CHECKING([for command to use for printing dvi files]) + if test -n "$PSPRINT" && test -z "$DVIPRINT"; then + if test "x$PSPRINT" = "xlpr"; then + DVIPRINT="lpr -d" + else + DVIPRINT="$PSPRINT" + fi + fi + AC_SUBST([DVIPRINT]) + AC_MSG_RESULT([$DVIPRINT])]) + +# Bison generated parsers have problems with C++ compilers other than g++. +# So byacc is preferred over bison. + +AC_DEFUN([GROFF_PROG_YACC], + [AC_CHECK_PROGS([YACC], [byacc 'bison -y'], [yacc])]) + +# We need makeinfo 4.8 or newer. + +AC_DEFUN([GROFF_MAKEINFO], + [missing= + AC_CHECK_PROG([MAKEINFO], [makeinfo], [makeinfo]) + if test -z "$MAKEINFO"; then + missing="\`makeinfo' is missing." + else + AC_MSG_CHECKING([for makeinfo version]) + # We need an additional level of quoting to make sed's regexps work. + [makeinfo_version=`$MAKEINFO --version 2>&1 \ + | sed -e 's/^.* \([^ ][^ ]*\)$/\1/' -e '1q'`] + AC_MSG_RESULT([$makeinfo_version]) + # Consider only the first two numbers in version number string. + makeinfo_version_major=`IFS=.; set x $makeinfo_version; echo 0${2}` + makeinfo_version_minor=`IFS=.; set x $makeinfo_version; echo 0${3}` + makeinfo_version_numeric=` + expr ${makeinfo_version_major}000 \+ ${makeinfo_version_minor}` + if test $makeinfo_version_numeric -lt 4008; then + missing="\`makeinfo' is too old." + fi + fi + + if test -n "$missing"; then + infofile=doc/groff.info + test -f ${infofile} || infofile=${srcdir}/${infofile} + if test ! -f ${infofile} \ + || test ${srcdir}/doc/groff.texinfo -nt ${infofile}; then + AC_MSG_ERROR($missing +[Get the `texinfo' package version 4.8 or newer.]) + else + AC_MSG_WARN($missing +[Get the `texinfo' package version 4.8 or newer if you want to convert +`groff.texinfo' into a PDF or HTML document.]) + fi + fi + AC_SUBST([MAKEINFO])]) + +# The following programs are needed for grohtml. + +AC_DEFUN([GROFF_HTML_PROGRAMS], + [AC_REQUIRE([GROFF_GHOSTSCRIPT_PATH]) + make_html=html + make_install_html=install_html + + missing= + AC_FOREACH([groff_prog], + [pnmcut pnmcrop pnmtopng psselect pnmtops], + [AC_CHECK_PROG(groff_prog, groff_prog, [found], [missing]) + if test $[]groff_prog = missing; then + missing="$missing \`groff_prog'" + fi;]) + + test "$GHOSTSCRIPT" = "missing" && missing="$missing \`gs'" + + if test -n "$missing"; then + plural=`set $missing; test $[#] -gt 1 && echo s` + missing=`set $missing + missing="" + while test $[#] -gt 0 + do + case $[#] in + 1) missing="$missing$[1]" ;; + 2) missing="$missing$[1] and " ;; + *) missing="$missing$[1], " ;; + esac + shift + done + echo $missing` + + make_html= + make_install_html= + + AC_MSG_WARN([missing program$plural: + + The program$plural + $missing + cannot be found in the PATH. + Consequently, groff's HTML backend (grohtml) will not work properly; + therefore, it will neither be possible to prepare, nor to install, + documentation in HTML format. + ]) + fi + + AC_SUBST([make_html]) + AC_SUBST([make_install_html])]) + +# To produce PDF docs, we need both awk and ghostscript. + +AC_DEFUN([GROFF_PDFDOC_PROGRAMS], + [AC_REQUIRE([GROFF_AWK_PATH]) + AC_REQUIRE([GROFF_GHOSTSCRIPT_PATH]) + + make_pdfdoc=pdfdoc + make_install_pdfdoc=install_pdfdoc + + missing="" + test "$AWK" = missing && missing="\`awk'" + test "$GHOSTSCRIPT" = missing && missing="$missing \`gs'" + if test -n "$missing"; then + plural=`set $missing; test $[#] -eq 2 && echo s` + test x$plural = xs \ + && missing=`set $missing; echo "$[1] and $[2]"` \ + || missing=`echo $missing` + + make_pdfdoc= + make_install_pdfdoc= + + AC_MSG_WARN([missing program$plural: + + The program$plural $missing cannot be found in the PATH. + Consequently, groff's PDF formatter (pdfroff) will not work properly; + therefore, it will neither be possible to prepare, nor to install, + documentation in PDF format. + ]) + fi + + AC_SUBST([make_pdfdoc]) + AC_SUBST([make_install_pdfdoc])]) + +# Check whether pnmtops can handle the -nosetpage option. + +AC_DEFUN([GROFF_PNMTOPS_NOSETPAGE], + [AC_MSG_CHECKING([whether pnmtops can handle the -nosetpage option]) + if echo P2 2 2 255 0 1 2 0 | pnmtops -nosetpage > /dev/null 2>&1 ; then + AC_MSG_RESULT([yes]) + pnmtops_nosetpage="pnmtops -nosetpage" + else + AC_MSG_RESULT([no]) + pnmtops_nosetpage="pnmtops" + fi + AC_SUBST([pnmtops_nosetpage])]) + +# Check location of `gs'; allow `--with-gs=PROG' option to override. + +AC_DEFUN([GROFF_GHOSTSCRIPT_PATH], + [AC_REQUIRE([GROFF_GHOSTSCRIPT_PREFS]) + AC_ARG_WITH([gs], + [AS_HELP_STRING([--with-gs=PROG], + [actual [/path/]name of ghostscript executable])], + [GHOSTSCRIPT=$withval], + [AC_CHECK_TOOLS(GHOSTSCRIPT, [$ALT_GHOSTSCRIPT_PROGS], [missing])]) + test "$GHOSTSCRIPT" = "no" && GHOSTSCRIPT=missing]) + +# Preferences for choice of `gs' program... +# (allow --with-alt-gs="LIST" to override). + +AC_DEFUN([GROFF_GHOSTSCRIPT_PREFS], + [AC_ARG_WITH([alt-gs], + [AS_HELP_STRING([--with-alt-gs=LIST], + [alternative names for ghostscript executable])], + [ALT_GHOSTSCRIPT_PROGS="$withval"], + [ALT_GHOSTSCRIPT_PROGS="gs gswin32c gsos2"]) + AC_SUBST([ALT_GHOSTSCRIPT_PROGS])]) + +# Check location of `awk'; allow `--with-awk=PROG' option to override. + +AC_DEFUN([GROFF_AWK_PATH], + [AC_REQUIRE([GROFF_AWK_PREFS]) + AC_ARG_WITH([awk], + [AS_HELP_STRING([--with-awk=PROG], + [actual [/path/]name of awk executable])], + [AWK=$withval], + [AC_CHECK_TOOLS(AWK, [$ALT_AWK_PROGS], [missing])]) + test "$AWK" = "no" && AWK=missing]) + +# Preferences for choice of `awk' program; allow --with-alt-awk="LIST" +# to override. + +AC_DEFUN([GROFF_AWK_PREFS], + [AC_ARG_WITH([alt-awk], + [AS_HELP_STRING([--with-alt-awk=LIST], + [alternative names for awk executable])], + [ALT_AWK_PROGS="$withval"], + [ALT_AWK_PROGS="gawk mawk nawk awk"]) + AC_SUBST([ALT_AWK_PROGS])]) + +# GROFF_CSH_HACK(if hack present, if not present) + +AC_DEFUN([GROFF_CSH_HACK], + [AC_MSG_CHECKING([for csh hash hack]) + +cat <conftest.sh +#! /bin/sh +true || exit 0 +export PATH || exit 0 +exit 1 +EOF + + chmod +x conftest.sh + if echo ./conftest.sh | (csh >/dev/null 2>&1) >/dev/null 2>&1; then + AC_MSG_RESULT([yes]) + $1 + else + AC_MSG_RESULT([no]) + $2 + fi + rm -f conftest.sh]) + +# From udodo!hans@relay.NL.net (Hans Zuidam) + +AC_DEFUN([GROFF_ISC_SYSV3], + [AC_MSG_CHECKING([for ISC 3.x or 4.x]) + if grep ['[34]\.'] /usr/options/cb.name >/dev/null 2>&1 + then + AC_MSG_RESULT([yes]) + AC_DEFINE([_SYSV3], [1], [Define if you have ISC 3.x or 4.x.]) + else + AC_MSG_RESULT([no]) + fi]) + +AC_DEFUN([GROFF_POSIX], + [AC_MSG_CHECKING([whether -D_POSIX_SOURCE is necessary]) + AC_LANG_PUSH([C++]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + +#include +extern "C" { void fileno(int); } + + ]]) + ], + [AC_MSG_RESULT([yes]) + AC_DEFINE([_POSIX_SOURCE], [1], + [Define if -D_POSIX_SOURCE is necessary.])], + [AC_MSG_RESULT([no])]) + AC_LANG_POP([C++])]) + +# srand() of SunOS 4.1.3 has return type int instead of void + +AC_DEFUN([GROFF_SRAND], + [AC_LANG_PUSH([C++]) + AC_MSG_CHECKING([for return type of srand]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + +#include +extern "C" { void srand(unsigned int); } + + ]]) + ], + [AC_MSG_RESULT([void]) + AC_DEFINE([RET_TYPE_SRAND_IS_VOID], [1], + [Define if srand() returns void not int.])], + [AC_MSG_RESULT([int])]) + AC_LANG_POP([C++])]) + +# In April 2005, autoconf's AC_TYPE_SIGNAL is still broken. + +AC_DEFUN([GROFF_TYPE_SIGNAL], + [AC_MSG_CHECKING([for return type of signal handlers]) + for groff_declaration in \ + 'extern "C" void (*signal (int, void (*)(int)))(int);' \ + 'extern "C" void (*signal (int, void (*)(int)) throw ())(int);' \ + 'void (*signal ()) ();' + do + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + +#include +#include +#ifdef signal +# undef signal +#endif +$groff_declaration + + ]], + [[ + +int i; + + ]]) + ], + [break], + [continue]) + done + + if test -n "$groff_declaration"; then + AC_MSG_RESULT([void]) + AC_DEFINE([RETSIGTYPE], [void], + [Define as the return type of signal handlers + (`int' or `void').]) + else + AC_MSG_RESULT([int]) + AC_DEFINE([RETSIGTYPE], [int], + [Define as the return type of signal handlers + (`int' or `void').]) + fi]) + +AC_DEFUN([GROFF_SYS_NERR], + [AC_LANG_PUSH([C++]) + AC_MSG_CHECKING([for sys_nerr in , , or ]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + +#include +#include +#include + + ]], + [[ + +int k; +k = sys_nerr; + + ]]) + ], + [AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_SYS_NERR], [1], + [Define if you have sys_nerr in , , or .])], + [AC_MSG_RESULT([no])]) + AC_LANG_POP([C++])]) + +AC_DEFUN([GROFF_SYS_ERRLIST], + [AC_MSG_CHECKING([for sys_errlist[] in , , or ]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + +#include +#include +#include + + ]], + [[ + +int k; +k = (int)sys_errlist[0]; + + ]]) + ], + [AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_SYS_ERRLIST], [1], + [Define if you have sys_errlist in , , or .])], + [AC_MSG_RESULT([no])])]) + +AC_DEFUN([GROFF_OSFCN_H], + [AC_LANG_PUSH([C++]) + AC_MSG_CHECKING([C++ ]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + +#include + + ]], + [[ + +read(0, 0, 0); +open(0, 0); + + ]]) + ], + [AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_CC_OSFCN_H], [1], + [Define if you have a C++ .])], + [AC_MSG_RESULT([no])]) + AC_LANG_POP([C++])]) + +AC_DEFUN([GROFF_LIMITS_H], + [AC_LANG_PUSH([C++]) + AC_MSG_CHECKING([C++ ]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + +#include + + ]], + [[ + +int x = INT_MIN; +int y = INT_MAX; +int z = UCHAR_MAX; + + ]]) + ], + [AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_CC_LIMITS_H], [1], + [Define if you have a C++ .])], + [AC_MSG_RESULT([no])]) + AC_LANG_POP([C++])]) + +AC_DEFUN([GROFF_TIME_T], + [AC_LANG_PUSH([C++]) + AC_MSG_CHECKING([for declaration of time_t]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + +#include + + ]], + [[ + +time_t t = time(0); +struct tm *p = localtime(&t); + + ]]) + ], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + AC_DEFINE([LONG_FOR_TIME_T], [1], + [Define if localtime() takes a long * not a time_t *.])]) + AC_LANG_POP([C++])]) + +AC_DEFUN([GROFF_STRUCT_EXCEPTION], + [AC_MSG_CHECKING([struct exception]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + +#include + + ]], + [[ + +struct exception e; + + ]]) + ], + [AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_STRUCT_EXCEPTION], [1], + [Define if defines struct exception.])], + [AC_MSG_RESULT([no])])]) + +AC_DEFUN([GROFF_ARRAY_DELETE], + [AC_LANG_PUSH([C++]) + AC_MSG_CHECKING([whether ANSI array delete syntax is supported]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM(, [[ + +char *p = new char[5]; +delete [] p; + + ]]) + ], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + AC_DEFINE([ARRAY_DELETE_NEEDS_SIZE], [1], + [Define if your C++ doesn't understand `delete []'.])]) + AC_LANG_POP([C++])]) + +AC_DEFUN([GROFF_TRADITIONAL_CPP], + [AC_LANG_PUSH([C++]) + AC_MSG_CHECKING([traditional preprocessor]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + +#define name2(a, b) a/**/b + + ]], + [[ + +int name2(foo, bar); + + ]]) + ], + [AC_MSG_RESULT([yes]) + AC_DEFINE([TRADITIONAL_CPP], [1], + [Define if your C++ compiler uses a traditional (Reiser) preprocessor.])], + [AC_MSG_RESULT([no])]) + AC_LANG_POP([C++])]) + +AC_DEFUN([GROFF_WCOREFLAG], + [AC_MSG_CHECKING([w_coredump]) + AC_RUN_IFELSE([ + AC_LANG_PROGRAM([[ + +#include +#include + + ]], + [[ + +main() +{ +#ifdef WCOREFLAG + exit(1); +#else + int i = 0; + ((union wait *)&i)->w_coredump = 1; + exit(i != 0200); +#endif +} + + ]]) + ], + [AC_MSG_RESULT([yes]) + AC_DEFINE(WCOREFLAG, 0200, + [Define if the 0200 bit of the status returned by wait() indicates + whether a core image was produced for a process that was terminated + by a signal.])], + [AC_MSG_RESULT([no])], + [AC_MSG_RESULT([no])])]) + +AC_DEFUN([GROFF_BROKEN_SPOOLER_FLAGS], + [AC_MSG_CHECKING([default value for grops -b option]) + test -n "${BROKEN_SPOOLER_FLAGS}" || BROKEN_SPOOLER_FLAGS=0 + AC_MSG_RESULT([$BROKEN_SPOOLER_FLAGS]) + AC_SUBST([BROKEN_SPOOLER_FLAGS])]) + +AC_DEFUN([GROFF_PAGE], + [AC_MSG_CHECKING([default paper size]) + groff_prefix=$prefix + test "x$prefix" = "xNONE" && groff_prefix=$ac_default_prefix + if test -z "$PAGE"; then + descfile= + if test -r $groff_prefix/share/groff/font/devps/DESC; then + descfile=$groff_prefix/share/groff/font/devps/DESC + elif test -r $groff_prefix/lib/groff/font/devps/DESC; then + descfile=$groff_prefix/lib/groff/font/devps/DESC + else + for f in $groff_prefix/share/groff/*/font/devps/DESC; do + if test -r $f; then + descfile=$f + break + fi + done + fi + + if test -n "$descfile"; then + if grep ['^paperlength[ ]\+841890'] $descfile >/dev/null 2>&1; then + PAGE=A4 + elif grep ['^papersize[ ]\+[aA]4'] $descfile >/dev/null 2>&1; then + PAGE=A4 + fi + fi + fi + + if test -z "$PAGE"; then + dom=`awk '([$]1 == "dom" || [$]1 == "search") { print [$]2; exit}' \ + /etc/resolv.conf 2>/dev/null` + if test -z "$dom"; then + dom=`(domainname) 2>/dev/null | tr -d '+'` + if test -z "$dom" \ + || test "$dom" = '(none)'; then + dom=`(hostname) 2>/dev/null | grep '\.'` + fi + fi + # If the top-level domain is two letters and it's not `us' or `ca' + # then they probably use A4 paper. + case "$dom" in + [*.[Uu][Ss]|*.[Cc][Aa])] + ;; + [*.[A-Za-z][A-Za-z])] + PAGE=A4 ;; + esac + fi + + test -n "$PAGE" || PAGE=letter + if test "x$PAGE" = "xA4"; then + AC_DEFINE([PAGEA4], [1], + [Define if the printer's page size is A4.]) + fi + AC_MSG_RESULT([$PAGE]) + AC_SUBST([PAGE])]) + +AC_DEFUN([GROFF_CXX_CHECK], + [AC_REQUIRE([AC_PROG_CXX]) + AC_LANG_PUSH([C++]) + if test "$cross_compiling" = no; then + AC_MSG_CHECKING([that C++ compiler can compile simple program]) + fi + AC_RUN_IFELSE([ + AC_LANG_SOURCE([[ + +int main() { + return 0; +} + + ]]) + ], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([a working C++ compiler is required])], + [:]) + + if test "$cross_compiling" = no; then + AC_MSG_CHECKING([that C++ static constructors and destructors are called]) + fi + AC_RUN_IFELSE([ + AC_LANG_SOURCE([[ + +extern "C" { + void _exit(int); +} + +int i; +struct A { + char dummy; + A() { i = 1; } + ~A() { if (i == 1) _exit(0); } +}; + +A a; + +int main() +{ + return 1; +} + + ]]) + ], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([a working C++ compiler is required])], + [:]) + + AC_MSG_CHECKING([that header files support C++]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + +#include + + ]], + [[ + +fopen(0, 0); + + ]]) + ], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([header files do not support C++ + (if you are using a version of gcc/g++ earlier than 2.5, + you should install libg++)])]) + AC_LANG_POP([C++])]) + +AC_DEFUN([GROFF_TMAC], + [AC_MSG_CHECKING([for prefix of system macro packages]) + sys_tmac_prefix= + sys_tmac_file_prefix= + for d in /usr/share/lib/tmac /usr/lib/tmac; do + for t in "" tmac.; do + for m in an s m; do + f=$d/$t$m + if test -z "$sys_tmac_prefix" \ + && test -f $f \ + && grep '^\.if' $f >/dev/null 2>&1; then + sys_tmac_prefix=$d/$t + sys_tmac_file_prefix=$t + fi + done + done + done + AC_MSG_RESULT([$sys_tmac_prefix]) + AC_SUBST([sys_tmac_prefix]) + + AC_MSG_CHECKING([which system macro packages should be made available]) + tmac_wrap= + if test "x$sys_tmac_file_prefix" = "xtmac."; then + for f in $sys_tmac_prefix*; do + suff=`echo $f | sed -e "s;$sys_tmac_prefix;;"` + case "$suff" in + e) + ;; + *) + grep "Copyright.*Free Software Foundation" $f >/dev/null \ + || tmac_wrap="$tmac_wrap $suff" ;; + esac + done + elif test -n "$sys_tmac_prefix"; then + files=`echo $sys_tmac_prefix*` + grep "\\.so" $files >conftest.sol + for f in $files; do + case "$f" in + ${sys_tmac_prefix}e) + ;; + *.me) + ;; + */ms.*) + ;; + *) + b=`basename $f` + if grep "\\.so.*/$b\$" conftest.sol >/dev/null \ + || grep -l "Copyright.*Free Software Foundation" $f >/dev/null; then + : + else + suff=`echo $f | sed -e "s;$sys_tmac_prefix;;"` + case "$suff" in + tmac.*) + ;; + *) + tmac_wrap="$tmac_wrap $suff" ;; + esac + fi + esac + done + rm -f conftest.sol + fi + AC_MSG_RESULT([$tmac_wrap]) + AC_SUBST([tmac_wrap])]) + +AC_DEFUN([GROFF_G], + [AC_MSG_CHECKING([for existing troff installation]) + if test "x`(echo .tm '|n(.g' | tr '|' '\\\\' | troff -z -i 2>&1) 2>/dev/null`" = x0; then + AC_MSG_RESULT([yes]) + g=g + else + AC_MSG_RESULT([no]) + g= + fi + AC_SUBST([g])]) + +# We need the path to install-sh to be absolute. + +AC_DEFUN([GROFF_INSTALL_SH], + [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) + ac_dir=`cd $ac_aux_dir; pwd` + ac_install_sh="$ac_dir/install-sh -c"]) + +# Test whether install-info is available. + +AC_DEFUN([GROFF_INSTALL_INFO], + [AC_CHECK_PROGS([INSTALL_INFO], [install-info], [:])]) + +# At least one UNIX system, Apple Macintosh Rhapsody 5.5, +# does not have -lm ... + +AC_DEFUN([GROFF_LIBM], + [AC_CHECK_LIB([m], [sin], [LIBM=-lm]) + AC_SUBST([LIBM])]) + +# ... while the MinGW implementation of GCC for Microsoft Win32 +# does not seem to have -lc. + +AC_DEFUN([GROFF_LIBC], + [AC_CHECK_LIB([c], [main], [LIBC=-lc]) + AC_SUBST([LIBC])]) + +# Check for EBCDIC -- stolen from the OS390 Unix LYNX port + +AC_DEFUN([GROFF_EBCDIC], + [AC_MSG_CHECKING([whether character set is EBCDIC]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + +/* Treat any failure as ASCII for compatibility with existing art. + Use compile-time rather than run-time tests for cross-compiler + tolerance. */ +#if '0' != 240 +make an error "Character set is not EBCDIC" +#endif + + ]]) + ], + [groff_cv_ebcdic="yes" + TTYDEVDIRS="font/devcp1047" + AC_MSG_RESULT([yes]) + AC_DEFINE(IS_EBCDIC_HOST, 1, + [Define if the host's encoding is EBCDIC.])], + [groff_cv_ebcdic="no" + TTYDEVDIRS="font/devascii font/devlatin1" + OTHERDEVDIRS="font/devlj4 font/devlbp" + AC_MSG_RESULT([no])]) + AC_SUBST([TTYDEVDIRS]) + AC_SUBST([OTHERDEVDIRS])]) + +# Check for OS/390 Unix. We test for EBCDIC also -- the Linux port (with +# gcc) to OS/390 uses ASCII internally. + +AC_DEFUN([GROFF_OS390], + [if test "$groff_cv_ebcdic" = "yes"; then + AC_MSG_CHECKING([for OS/390 Unix]) + case `uname` in + OS/390) + CFLAGS="$CFLAGS -D_ALL_SOURCE" + AC_MSG_RESULT([yes]) ;; + *) + AC_MSG_RESULT([no]) ;; + esac + fi]) + +# Check whether we need a declaration for a function. +# +# Stolen from GNU bfd. + +AC_DEFUN([GROFF_NEED_DECLARATION], + [AC_MSG_CHECKING([whether $1 must be declared]) + AC_LANG_PUSH([C++]) + AC_CACHE_VAL([groff_cv_decl_needed_$1], + [AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + +#include +#ifdef HAVE_STRING_H +#include +#endif +#ifdef HAVE_STRINGS_H +#include +#endif +#ifdef HAVE_STDLIB_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_UNISTD_H +#include +#endif +#ifdef HAVE_MATH_H +#include +#endif + + ]], + [[ + +#ifndef $1 + char *p = (char *) $1; +#endif + + ]]) + ], + [groff_cv_decl_needed_$1=no], + [groff_cv_decl_needed_$1=yes])]) + AC_MSG_RESULT([$groff_cv_decl_needed_$1]) + if test $groff_cv_decl_needed_$1 = yes; then + AC_DEFINE([NEED_DECLARATION_]translit($1, [a-z], [A-Z]), [1], + [Define if your C++ doesn't declare ]$1[().]) + fi + AC_LANG_POP([C++])]) + +# If mkstemp() isn't available, use our own mkstemp.cpp file. + +AC_DEFUN([GROFF_MKSTEMP], + [AC_MSG_CHECKING([for mkstemp]) + AC_LANG_PUSH([C++]) + AC_LIBSOURCE([mkstemp.cpp]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + +#include +#include +int (*f) (char *); + + ]], + [[ + +f = mkstemp; + + ]]) + ], + [AC_MSG_RESULT([yes]) + AC_DEFINE([HAVE_MKSTEMP], [1], [Define if you have mkstemp().])], + [AC_MSG_RESULT([no]) + _AC_LIBOBJ([mkstemp])]) + AC_LANG_POP([C++])]) + +# Test whether exists, doesn't clash with , +# and declares uintmax_t. Taken from the fileutils package. + +AC_DEFUN([GROFF_INTTYPES_H], + [AC_LANG_PUSH([C++]) + AC_MSG_CHECKING([C++ ]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + +#include +#include + + ]], + [[ + +uintmax_t i = (uintmax_t)-1; + + ]]) + ], + [groff_cv_header_inttypes_h=yes + AC_DEFINE([HAVE_CC_INTTYPES_H], [1], + [Define if you have a C++ .])], + [groff_cv_header_inttypes_h=no]) + AC_MSG_RESULT([$groff_cv_header_inttypes_h]) + AC_LANG_POP([C++])]) + +# Test for working `unsigned long long'. Taken from the fileutils package. + +AC_DEFUN([GROFF_UNSIGNED_LONG_LONG], + [AC_LANG_PUSH([C++]) + AC_MSG_CHECKING([for unsigned long long]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + +unsigned long long ull = 1; +int i = 63; +unsigned long long ullmax = (unsigned long long)-1; + + ]], + [[ + +return ull << i | ull >> i | ullmax / ull | ullmax % ull; + + ]]) + ], + [groff_cv_type_unsigned_long_long=yes], + [groff_cv_type_unsigned_long_long=no]) + AC_MSG_RESULT([$groff_cv_type_unsigned_long_long]) + AC_LANG_POP([C++])]) + +# Define uintmax_t to `unsigned long' or `unsigned long long' +# if does not exist. Taken from the fileutils package. + +AC_DEFUN([GROFF_UINTMAX_T], + [AC_REQUIRE([GROFF_INTTYPES_H]) + if test $groff_cv_header_inttypes_h = no; then + AC_REQUIRE([GROFF_UNSIGNED_LONG_LONG]) + test $groff_cv_type_unsigned_long_long = yes \ + && ac_type='unsigned long long' \ + || ac_type='unsigned long' + AC_DEFINE_UNQUOTED([uintmax_t], [$ac_type], + [Define uintmax_t to `unsigned long' or `unsigned long long' if + does not exist.]) + fi]) + +# Identify PATH_SEPARATOR character to use in GROFF_FONT_PATH and +# GROFF_TMAC_PATH which is appropriate for the target system (POSIX=':', +# MS-DOS/Win32=';'). +# +# The logic to resolve this test is already encapsulated in +# `${srcdir}/src/include/nonposix.h'. + +AC_DEFUN([GROFF_TARGET_PATH_SEPARATOR], + [AC_MSG_CHECKING([separator character to use in groff search paths]) + cp ${srcdir}/src/include/nonposix.h conftest.h + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + +#include +#include "conftest.h" + + ]], + [[ + +#if PATH_SEP_CHAR == ';' +make an error "Path separator is ';'" +#endif + + ]]) + ], + [GROFF_PATH_SEPARATOR=":"], + [GROFF_PATH_SEPARATOR=";"]) + AC_MSG_RESULT([$GROFF_PATH_SEPARATOR]) + AC_SUBST(GROFF_PATH_SEPARATOR)]) + +# Check for X11. + +AC_DEFUN([GROFF_X11], + [AC_REQUIRE([AC_PATH_XTRA]) + groff_no_x=$no_x + if test -z "$groff_no_x"; then + OLDCFLAGS=$CFLAGS + OLDLDFLAGS=$LDFLAGS + OLDLIBS=$LIBS + CFLAGS="$CFLAGS $X_CFLAGS" + LDFLAGS="$LDFLAGS $X_LIBS" + LIBS="$LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS" + + LIBS="$LIBS -lXaw" + AC_MSG_CHECKING([for Xaw library and header files]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + +#include +#include + + ]], + []) + ], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + groff_no_x="yes"]) + + LIBS="$LIBS -lXmu" + AC_MSG_CHECKING([for Xmu library and header files]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + +#include +#include + + ]], + []) + ], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + groff_no_x="yes"]) + + CFLAGS=$OLDCFLAGS + LDFLAGS=$OLDLDFLAGS + LIBS=$OLDLIBS + fi + + if test "x$groff_no_x" = "xyes"; then + AC_MSG_NOTICE([gxditview and xtotroff won't be built]) + else + XDEVDIRS="font/devX75 font/devX75-12 font/devX100 font/devX100-12" + XPROGDIRS="src/devices/xditview src/utils/xtotroff" + XLIBDIRS="src/libs/libxutil" + fi + + AC_SUBST([XDEVDIRS]) + AC_SUBST([XPROGDIRS]) + AC_SUBST([XLIBDIRS])]) + +# Set up the `--with-appresdir' command line option. + +# Don't quote AS_HELP_STRING! +AC_DEFUN([GROFF_APPRESDIR_OPTION], + [AC_ARG_WITH([appresdir], + AS_HELP_STRING([--with-appresdir=DIR], + [X11 application resource files]))]) + +# Get a default value for the application resource directory. +# +# We ignore the `XAPPLRES' and `XUSERFILESEARCHPATH' environment variables. +# +# The goal is to find the `root' of X11. Under most systems this is +# `/usr/X11/lib'. Application default files are then in +# `/usr/X11/lib/X11/app-defaults'. +# +# Based on autoconf's AC_PATH_X macro. + +AC_DEFUN([GROFF_APPRESDIR_DEFAULT], + [if test -z "$groff_no_x"; then + # Create an Imakefile, run `xmkmf', then `make'. + rm -f -r conftest.dir + if mkdir conftest.dir; then + cd conftest.dir + # Make sure to not put `make' in the Imakefile rules, + # since we grep it out. + cat >Imakefile <<'EOF' + +xlibdirs: + @echo 'groff_x_usrlibdir="${USRLIBDIR}"; groff_x_libdir="${LIBDIR}"' +EOF + + if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then + # GNU make sometimes prints "make[1]: Entering...", + # which would confuse us. + eval `${MAKE-make} xlibdirs 2>/dev/null | grep -v make` + + # Open Windows `xmkmf' reportedly sets LIBDIR instead of USRLIBDIR. + for groff_extension in a so sl; do + if test ! -f $groff_x_usrlibdir/libX11.$groff_extension && + test -f $groff_x_libdir/libX11.$groff_extension; then + groff_x_usrlibdir=$groff_x_libdir + break + fi + done + fi + + cd .. + rm -f -r conftest.dir + fi + + # In case the test with `xmkmf' wasn't successful, try a suite of + # standard directories. Check `X11' before `X11Rn' because it is often + # a symlink to the current release. + groff_x_libdirs=' + /usr/X11/lib + /usr/X11R6/lib + /usr/X11R5/lib + /usr/X11R4/lib + + /usr/lib/X11 + /usr/lib/X11R6 + /usr/lib/X11R5 + /usr/lib/X11R4 + + /usr/local/X11/lib + /usr/local/X11R6/lib + /usr/local/X11R5/lib + /usr/local/X11R4/lib + + /usr/local/lib/X11 + /usr/local/lib/X11R6 + /usr/local/lib/X11R5 + /usr/local/lib/X11R4 + + /usr/X386/lib + /usr/x386/lib + /usr/XFree86/lib/X11 + + /usr/lib + /usr/local/lib + /usr/unsupported/lib + /usr/athena/lib + /usr/local/x11r5/lib + /usr/lpp/Xamples/lib + + /usr/openwin/lib + /usr/openwin/share/lib' + + if test -z "$groff_x_usrlibdir"; then + # We only test whether libX11 exists. + for groff_dir in $groff_x_libdirs; do + for groff_extension in a so sl; do + if test ! -r $groff_dir/libX11.$groff_extension; then + groff_x_usrlibdir=$groff_dir + break 2 + fi + done + done + fi + + if test "x$with_appresdir" = "x"; then + appresdir=$groff_x_usrlibdir/X11/app-defaults + else + appresdir=$with_appresdir + fi + fi + AC_SUBST([appresdir])]) + + +# Emit warning if --with-appresdir hasn't been used. + +AC_DEFUN([GROFF_APPRESDIR_CHECK], + [if test -z "$groff_no_x"; then + if test "x$with_appresdir" = "x"; then + AC_MSG_NOTICE([ + + The application resource files for gxditview will be installed as + + $appresdir/GXditview + + and + + $appresdir/GXditview-color + + (existing files will be saved by appending `.old' to the file + name). + + To install them into a different directory, say, `/etc/gxditview', + add `--with-appresdir=/etc/gxditview' to the configure script + command line options and rerun it. The environment variable + `APPLRESDIR' must then be set to `/etc/' (note the trailing slash), + omitting the `gxditview' part which is automatically appended by + the X11 searching routines for resource files. More details can be + found in the X(7) manual page. + ]) + fi + fi]) diff --git a/contrib/groff/m4/iconv.m4 b/contrib/groff/m4/iconv.m4 new file mode 100644 index 0000000000..848b2f85c3 --- /dev/null +++ b/contrib/groff/m4/iconv.m4 @@ -0,0 +1,180 @@ +# iconv.m4 serial AM6 (gettext-0.18) +dnl Copyright (C) 2000-2002, 2007-2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], +[ + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([iconv]) +]) + +AC_DEFUN([AM_ICONV_LINK], +[ + dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and + dnl those with the standalone portable GNU libiconv installed). + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + + dnl Add $INCICONV to CPPFLAGS before performing the following checks, + dnl because if the user has installed libiconv and not disabled its use + dnl via --without-libiconv-prefix, he wants to use it. The first + dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. + am_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) + + AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + AC_TRY_LINK([#include +#include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + [am_cv_func_iconv=yes]) + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + AC_TRY_LINK([#include +#include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + [am_cv_lib_iconv=yes] + [am_cv_func_iconv=yes]) + LIBS="$am_save_LIBS" + fi + ]) + if test "$am_cv_func_iconv" = yes; then + AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ + dnl This tests against bugs in AIX 5.1 and HP-UX 11.11. + am_save_LIBS="$LIBS" + if test $am_cv_lib_iconv = yes; then + LIBS="$LIBS $LIBICONV" + fi + AC_TRY_RUN([ +#include +#include +int main () +{ + /* Test against AIX 5.1 bug: Failures are not distinguishable from successful + returns. */ + { + iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); + if (cd_utf8_to_88591 != (iconv_t)(-1)) + { + static const char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + return 1; + } + } +#if 0 /* This bug could be worked around by the caller. */ + /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_88591_to_utf8, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if ((int)res > 0) + return 1; + } + } +#endif + /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is + provided. */ + if (/* Try standardized names. */ + iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) + /* Try IRIX, OSF/1 names. */ + && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) + /* Try AIX names. */ + && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) + /* Try HP-UX names. */ + && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) + return 1; + return 0; +}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], + [case "$host_os" in + aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; + *) am_cv_func_iconv_works="guessing yes" ;; + esac]) + LIBS="$am_save_LIBS" + ]) + case "$am_cv_func_iconv_works" in + *no) am_func_iconv=no am_cv_lib_iconv=no ;; + *) am_func_iconv=yes ;; + esac + else + am_func_iconv=no am_cv_lib_iconv=no + fi + if test "$am_func_iconv" = yes; then + AC_DEFINE([HAVE_ICONV], 1, + [Define if you have the iconv() function and it works.]) + fi + if test "$am_cv_lib_iconv" = yes; then + AC_MSG_CHECKING([how to link with libiconv]) + AC_MSG_RESULT([$LIBICONV]) + else + dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV + dnl either. + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + AC_SUBST([LIBICONV]) + AC_SUBST([LTLIBICONV]) +]) + +AC_DEFUN([AM_ICONV], +[ + AM_ICONV_LINK + if test "$am_cv_func_iconv" = yes; then + AC_MSG_CHECKING([for iconv declaration]) + AC_CACHE_VAL([am_cv_proto_iconv], [ + AC_TRY_COMPILE([ +#include +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif +], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"]) + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) + am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + AC_MSG_RESULT([${ac_t:- + }$am_cv_proto_iconv]) + AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], + [Define as const if the declaration of iconv() needs const.]) + fi +]) diff --git a/contrib/groff/m4/lib-ld.m4 b/contrib/groff/m4/lib-ld.m4 new file mode 100644 index 0000000000..96c4e2c339 --- /dev/null +++ b/contrib/groff/m4/lib-ld.m4 @@ -0,0 +1,110 @@ +# lib-ld.m4 serial 3 (gettext-0.13) +dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Subroutines of libtool.m4, +dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision +dnl with libtool.m4. + +dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. +AC_DEFUN([AC_LIB_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by GCC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]* | [A-Za-z]:[\\/]*)] + [re_direlt='/[^/][^/]*/\.\./'] + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(acl_cv_path_LD, +[if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break ;; + *) + test "$with_gnu_ld" != yes && break ;; + esac + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$acl_cv_path_LD" +if test -n "$LD"; then + AC_MSG_RESULT($LD) +else + AC_MSG_RESULT(no) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +AC_LIB_PROG_LD_GNU +]) diff --git a/contrib/groff/m4/lib-link.m4 b/contrib/groff/m4/lib-link.m4 new file mode 100644 index 0000000000..e29eead276 --- /dev/null +++ b/contrib/groff/m4/lib-link.m4 @@ -0,0 +1,758 @@ +# lib-link.m4 serial 17 (gettext-0.18) +dnl Copyright (C) 2001-2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_PREREQ(2.54) + +dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and +dnl augments the CPPFLAGS variable. +dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname +dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + pushdef([Name],[translit([$1],[./-], [___])]) + pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + ac_cv_lib[]Name[]_libs="$LIB[]NAME" + ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" + ac_cv_lib[]Name[]_cppflags="$INC[]NAME" + ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" + ]) + LIB[]NAME="$ac_cv_lib[]Name[]_libs" + LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" + INC[]NAME="$ac_cv_lib[]Name[]_cppflags" + LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + AC_SUBST([LIB]NAME[_PREFIX]) + dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the + dnl results of this search when this library appears as a dependency. + HAVE_LIB[]NAME=yes + popdef([NAME]) + popdef([Name]) +]) + +dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) +dnl searches for libname and the libraries corresponding to explicit and +dnl implicit dependencies, together with the specified include files and +dnl the ability to compile and link the specified testcode. If found, it +dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and +dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and +dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs +dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. +dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname +dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + pushdef([Name],[translit([$1],[./-], [___])]) + pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + + dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + + dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, + dnl because if the user has installed lib[]Name and not disabled its use + dnl via --without-lib[]Name-prefix, he wants to use it. + ac_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + + AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ + ac_save_LIBS="$LIBS" + LIBS="$LIBS $LIB[]NAME" + AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) + LIBS="$ac_save_LIBS" + ]) + if test "$ac_cv_lib[]Name" = yes; then + HAVE_LIB[]NAME=yes + AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) + AC_MSG_CHECKING([how to link with lib[]$1]) + AC_MSG_RESULT([$LIB[]NAME]) + else + HAVE_LIB[]NAME=no + dnl If $LIB[]NAME didn't lead to a usable library, we don't need + dnl $INC[]NAME either. + CPPFLAGS="$ac_save_CPPFLAGS" + LIB[]NAME= + LTLIB[]NAME= + LIB[]NAME[]_PREFIX= + fi + AC_SUBST([HAVE_LIB]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + AC_SUBST([LIB]NAME[_PREFIX]) + popdef([NAME]) + popdef([Name]) +]) + +dnl Determine the platform dependent parameters needed to use rpath: +dnl acl_libext, +dnl acl_shlibext, +dnl acl_hardcode_libdir_flag_spec, +dnl acl_hardcode_libdir_separator, +dnl acl_hardcode_direct, +dnl acl_hardcode_minus_L. +AC_DEFUN([AC_LIB_RPATH], +[ + dnl Tell automake >= 1.10 to complain if config.rpath is missing. + m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) + AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS + AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld + AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host + AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir + AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + ]) + wl="$acl_cv_wl" + acl_libext="$acl_cv_libext" + acl_shlibext="$acl_cv_shlibext" + acl_libname_spec="$acl_cv_libname_spec" + acl_library_names_spec="$acl_cv_library_names_spec" + acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + acl_hardcode_direct="$acl_cv_hardcode_direct" + acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + dnl Determine whether the user wants rpath handling at all. + AC_ARG_ENABLE(rpath, + [ --disable-rpath do not hardcode runtime library paths], + :, enable_rpath=yes) +]) + +dnl AC_LIB_FROMPACKAGE(name, package) +dnl declares that libname comes from the given package. The configure file +dnl will then not have a --with-libname-prefix option but a +dnl --with-package-prefix option. Several libraries can come from the same +dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar +dnl macro call that searches for libname. +AC_DEFUN([AC_LIB_FROMPACKAGE], +[ + pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + define([acl_frompackage_]NAME, [$2]) + popdef([NAME]) + pushdef([PACK],[$2]) + pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + define([acl_libsinpackage_]PACKUP, + m4_ifdef([acl_libsinpackage_]PACKUP, [acl_libsinpackage_]PACKUP[[, ]],)[lib$1]) + popdef([PACKUP]) + popdef([PACK]) +]) + +dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. +dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found +dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_LINKFLAGS_BODY], +[ + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + pushdef([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) + pushdef([PACKUP],[translit(PACK,[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) + dnl Autoconf >= 2.61 supports dots in --with options. + pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit(PACK,[.],[_])],PACK)]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_ARG_WITH(P_A_C_K[-prefix], +[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib + --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi +]) + dnl Search the library and its dependencies in $additional_libdir and + dnl $LDFLAGS. Using breadth-first-seach. + LIB[]NAME= + LTLIB[]NAME= + INC[]NAME= + LIB[]NAME[]_PREFIX= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='$1 $2' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + dnl See if it was already located by an earlier AC_LIB_LINKFLAGS + dnl or AC_LIB_HAVE_LINKFLAGS call. + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" + else + dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined + dnl that this library doesn't exist. So just drop it. + : + fi + else + dnl Search the library lib$name in $additional_libdir and $LDFLAGS + dnl and the already constructed $LIBNAME/$LTLIBNAME. + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + dnl The same code as in the loop below: + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + dnl Found the library. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + dnl Linking with a shared library. We attempt to hardcode its + dnl directory into the executable's runpath, unless it's the + dnl standard /usr/lib. + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + dnl No hardcoding is needed. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + dnl The hardcoding into $LIBNAME is system dependent. + if test "$acl_hardcode_direct" = yes; then + dnl Using DIR/libNAME.so during linking hardcodes DIR into the + dnl resulting binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + dnl Rely on "-L$found_dir". + dnl But don't add it if it's already contained in the LDFLAGS + dnl or the already constructed $LIBNAME + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH + dnl here, because this doesn't fit in flags passed to the + dnl compiler. So give up. No hardcoding. This affects only + dnl very old systems. + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + dnl Linking with a static library. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" + else + dnl We shouldn't come here, but anyway it's good to have a + dnl fallback. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" + fi + fi + dnl Assume the include files are nearby. + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + dnl Potentially add $additional_includedir to $INCNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's /usr/local/include and we are using GCC on Linux, + dnl 3. if it's already present in $CPPFLAGS or the already + dnl constructed $INCNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INC[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $INCNAME. + INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + dnl Look for dependencies. + if test -n "$found_la"; then + dnl Read the .la file. It defines the variables + dnl dlname, library_names, old_library, dependency_libs, current, + dnl age, revision, installed, dlopen, dlpreopen, libdir. + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + dnl We use only dependency_libs. + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's /usr/local/lib and we are using GCC on Linux, + dnl 3. if it's already present in $LDFLAGS or the already + dnl constructed $LIBNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LIBNAME. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LTLIBNAME. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + dnl Handle this in the next round. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + dnl Handle this in the next round. Throw away the .la's + dnl directory; it is already contained in a preceding -L + dnl option. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + dnl Most likely an immediate library name. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" + ;; + esac + done + fi + else + dnl Didn't find the library; assume it is in the system directories + dnl known to the linker and runtime loader. (All the system + dnl directories known to the linker should also be known to the + dnl runtime loader, otherwise the system is severely misconfigured.) + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user must + dnl pass all path elements in one option. We can arrange that for a + dnl single library, but not when more than one $LIBNAMEs are used. + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + else + dnl The -rpath options are cumulative. + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + dnl When using libtool, the option that works for both libraries and + dnl executables is -R. The -R options are cumulative. + for found_dir in $ltrpathdirs; do + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" + done + fi + popdef([P_A_C_K]) + popdef([PACKLIBS]) + popdef([PACKUP]) + popdef([PACK]) + popdef([NAME]) +]) + +dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, +dnl unless already present in VAR. +dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes +dnl contains two or three consecutive elements that belong together. +AC_DEFUN([AC_LIB_APPENDTOVAR], +[ + for element in [$2]; do + haveit= + for x in $[$1]; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + [$1]="${[$1]}${[$1]:+ }$element" + fi + done +]) + +dnl For those cases where a variable contains several -L and -l options +dnl referring to unknown libraries and directories, this macro determines the +dnl necessary additional linker options for the runtime path. +dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) +dnl sets LDADDVAR to linker options needed together with LIBSVALUE. +dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, +dnl otherwise linking without libtool is assumed. +AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], +[ + AC_REQUIRE([AC_LIB_RPATH]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + $1= + if test "$enable_rpath" != no; then + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode directories into the resulting + dnl binary. + rpathdirs= + next= + for opt in $2; do + if test -n "$next"; then + dir="$next" + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem" \ + && test "X$dir" != "X/usr/$acl_libdirstem2"; then + rpathdirs="$rpathdirs $dir" + fi + next= + else + case $opt in + -L) next=yes ;; + -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem" \ + && test "X$dir" != "X/usr/$acl_libdirstem2"; then + rpathdirs="$rpathdirs $dir" + fi + next= ;; + *) next= ;; + esac + fi + done + if test "X$rpathdirs" != "X"; then + if test -n ""$3""; then + dnl libtool is used for linking. Use -R options. + for dir in $rpathdirs; do + $1="${$1}${$1:+ }-R$dir" + done + else + dnl The linker is used for linking directly. + if test -n "$acl_hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user + dnl must pass all path elements in one option. + alldirs= + for dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="$flag" + else + dnl The -rpath options are cumulative. + for dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="${$1}${$1:+ }$flag" + done + fi + fi + fi + fi + fi + AC_SUBST([$1]) +]) diff --git a/contrib/groff/m4/lib-prefix.m4 b/contrib/groff/m4/lib-prefix.m4 new file mode 100644 index 0000000000..3bdc0fc574 --- /dev/null +++ b/contrib/groff/m4/lib-prefix.m4 @@ -0,0 +1,221 @@ +# lib-prefix.m4 serial 6 (gettext-0.18) +dnl Copyright (C) 2001-2005, 2008 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and +dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't +dnl require excessive bracketing. +ifdef([AC_HELP_STRING], +[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], +[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) + +dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed +dnl to access previously installed libraries. The basic assumption is that +dnl a user will want packages to use other packages he previously installed +dnl with the same --prefix option. +dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate +dnl libraries, but is otherwise very convenient. +AC_DEFUN([AC_LIB_PREFIX], +[ + AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib-prefix], +[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib + --without-lib-prefix don't search for libraries in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi +]) + if test $use_additional = yes; then + dnl Potentially add $additional_includedir to $CPPFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's already present in $CPPFLAGS, + dnl 3. if it's /usr/local/include and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + for x in $CPPFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $CPPFLAGS. + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" + fi + fi + fi + fi + dnl Potentially add $additional_libdir to $LDFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's already present in $LDFLAGS, + dnl 3. if it's /usr/local/lib and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + for x in $LDFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LDFLAGS. + LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" + fi + fi + fi + fi + fi +]) + +dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, +dnl acl_final_exec_prefix, containing the values to which $prefix and +dnl $exec_prefix will expand at the end of the configure script. +AC_DEFUN([AC_LIB_PREPARE_PREFIX], +[ + dnl Unfortunately, prefix and exec_prefix get only finally determined + dnl at the end of configure. + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the +dnl variables prefix and exec_prefix bound to the values they will have +dnl at the end of the configure script. +AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], +[ + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + $1 + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_PREPARE_MULTILIB creates +dnl - a variable acl_libdirstem, containing the basename of the libdir, either +dnl "lib" or "lib64" or "lib/64", +dnl - a variable acl_libdirstem2, as a secondary possible value for +dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or +dnl "lib/amd64". +AC_DEFUN([AC_LIB_PREPARE_MULTILIB], +[ + dnl There is no formal standard regarding lib and lib64. + dnl On glibc systems, the current practice is that on a system supporting + dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under + dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine + dnl the compiler's default mode by looking at the compiler's library search + dnl path. If at least one of its elements ends in /lib64 or points to a + dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. + dnl Otherwise we use the default, namely "lib". + dnl On Solaris systems, the current practice is that on a system supporting + dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under + dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or + dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. + AC_REQUIRE([AC_CANONICAL_HOST]) + acl_libdirstem=lib + acl_libdirstem2= + case "$host_os" in + solaris*) + dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment + dnl . + dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." + dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the + dnl symlink is missing, so we set acl_libdirstem2 too. + AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], + [AC_EGREP_CPP([sixtyfour bits], [ +#ifdef _LP64 +sixtyfour bits +#endif + ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) + ]) + if test $gl_cv_solaris_64bit = yes; then + acl_libdirstem=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem2=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + esac + fi + ;; + *) + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" +]) diff --git a/contrib/groff/man/ditroff.man b/contrib/groff/man/ditroff.man index ea3bb86c46..91efa396dd 100644 --- a/contrib/groff/man/ditroff.man +++ b/contrib/groff/man/ditroff.man @@ -1,16 +1,15 @@ .ig ditroff.man -Last update: 2 Jul 2004 - This file is part of groff, the GNU roff type-setting system. -Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc. +Copyright (C) 2001, 2002, 2004, 2007, 2008, 2009 + Free Software Foundation, Inc. written by Bernd Warken maintained by Werner Lemberg Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being this .ig-section and AUTHORS, with no Front-Cover Texts, and with no Back-Cover Texts. @@ -19,28 +18,14 @@ A copy of the Free Documentation License is included as a file called FDL in the main directory of the groff source package. .. . -.\" -------------------------------------------------------------------- -.\" Setup -.\" -------------------------------------------------------------------- -. -.mso www.tmac -. -.if n \{\ -. mso tty-char.tmac -. ftr CR R -. ftr CI I -. ftr CB B -.\} -. -.if '\*[.T]'dvi' \ -. ftr CB CW -. . .\" -------------------------------------------------------------------- .\" Title .\" -------------------------------------------------------------------- . .TH DITROFF @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@" +. +. .SH NAME ditroff \- classical device independent roff . @@ -63,7 +48,7 @@ is used as a synonym for .IR ditroff . . .P -The first roff system was written by Joe Osanna around 1973. +The first roff system was written by Joe Ossanna around 1973. . It supported only two output devices, the .B nroff @@ -82,11 +67,11 @@ Kernighan's version marks what is known as .I classical troff today. . -In order to distinguish it from Osanna's original mono-device version, +In order to distinguish it from Ossanna's original mono-device version, it was called .I ditroff (\c -.IR d\/ evice\~ i\/ ndependent\~ troff\/\c +.IR d\/ "evice " i\/ "ndependent " troff\/\c ) on some systems, though this naming isn't mentioned in the classical documentation. @@ -128,13 +113,13 @@ that automatically handles postprocessing. The 1992 revision of the .I Nroff/Troff User's Manual by -.I J. F. Osanna +.I J.\& F.\& Ossanna and .IR "Brian Kernighan" , see -.br -.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz \ - "Bell Labs CSTR\~#54" . +.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz +Bell Labs CSTR\~#54 +.UE . . .TP .I [CSTR\~#97] @@ -144,9 +129,9 @@ by is the original documentation of the first multi-device troff .RI ( ditroff\/ ), see -.br -.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:97.ps.gz \ - "Bell Labs CSTR\~#97" . +.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:97.ps.gz +Bell Labs CSTR\~#97 +.UE . . .TP .BR roff (@MAN7EXT@) @@ -171,15 +156,18 @@ multi-devicing. .SH "AUTHORS" .\" -------------------------------------------------------------------- . -Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc. +Copyright (C) 2001, 2002, 2004, 2007, 2008, 2009 +Free Software Foundation, Inc. . .P This document is distributed under the terms of the FDL (GNU Free -Documentation License) version 1.1 or later. +Documentation License) version 1.3 or later. . You should have received a copy of the FDL on your system, it is also available on-line at the -.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" . +.UR http://\:www.gnu.org/\:copyleft/\:fdl.html +GNU copyleft site +.UE . . .P This document is part of @@ -187,9 +175,13 @@ This document is part of the GNU roff distribution. . It was written by -.MTO bwarken@mayn.de "Bernd Warken" +.MT bwarken@\:mayn.de +Bernd Warken +.ME and is maintained by -.MTO wl@gnu.org "Werner Lemberg" . +.MT wl@\:gnu.org +Werner Lemberg +.ME . . . .\" -------------------------------------------------------------------- diff --git a/contrib/groff/man/groff.man b/contrib/groff/man/groff.man index 2e0bfc74fe..b5790b1e42 100644 --- a/contrib/groff/man/groff.man +++ b/contrib/groff/man/groff.man @@ -2,17 +2,16 @@ .ig groff.man -Last update: 17 Feb 2005 - This file is part of groff, the GNU roff type-setting system. -Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 +Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, + 2009 Free Software Foundation, Inc. written by Bernd Warken maintained by Werner Lemberg Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being this .ig-section and AUTHORS, with no Front-Cover Texts, and with no Back-Cover Texts. @@ -28,292 +27,198 @@ FDL in the main directory of the groff source package. .do nr groff_C \n[.C] .cp 0 . -.mso www.tmac -. -.if n \{\ -. mso tty-char.tmac -. ftr CR R -. ftr CI I -. ftr CB B -.\} -. -.if '\*[.T]'dvi' \{\ -. ftr CB CW -.\} -. -. .\" -------------------------------------------------------------------- .\" start of macro definitions -.eo -. -.de c -.. . .de TPx . TP 10n .. -.c --------------------------------------------------------------------- -.c .Text anything ... -.c -.c All arguments are printed as text. -.c +.\" --------------------------------------------------------------------- +.\" .Text anything ... +.\" +.\" All arguments are printed as text. +.\" .de Text -. nop \)\$* -.. -.c --------------------------------------------------------------------- -.c .ExecFF macro font1 font2 text1 text2 text1 text2 ... -.c -.c Concat text arguments using alternating fonts and feed into macro. -.c For a trailing punctuation, terminate the call with \c. -.c -.de ExecFF -. if (\n[.$] < 4) \ -. return -. ds @a\" -. ds @m \$1\" -. ds @f1 \$2\" -. ds @f2 \$3\" -. shift 3 -. ds @s\" -. while 1 \{\ -. if (\n[.$] = 0) \ -. break -. ds @a \$1\" -. as @s \f[\*[@f1]]\*[@a]\f[]\" -. shift -. if (\n[.$] = 0) \ -. break -. ds @a \$1\" -. as @s \f[\*[@f2]]\*[@a]\f[]\" -. shift -. \} -. \*[@m] "\*[@s]\f[R]" -. ft P \" to make \c happy -. rm @m -. rm @s -. rm @a -. rm @f1 -. rm @f2 +. nop \)\\$* .. . -.c --------- command line option --------- +.\" --------- command line option --------- . .de option -. Text \f[CB]\$* +. Text \f[CB]\\$* . ft P .. . -.c --------- characters --------- +.\" --------- characters --------- . -.de character -. ExecFF Text CB R \$* -.. .de squoted_char -. ds @1 \$1\" -. shift -. ExecFF Text R CB \[oq] \*[@1] "\[cq]\$*" -. rm @1 +. Text \[oq]\f[CB]\\$1\f[]\[cq]\\$2 .. .de dquoted_char -. ds @1 \$1\" -. shift -. ExecFF Text R CB \[lq] \*[@1] "\[rq]\$*" -. rm @1 +. Text \[lq]\f[CB]\\$1\f[]\[rq]\\$2 .. -.c --------- requests --------- +.\" --------- requests --------- . -.c synopsis of a request +.\" synopsis of a request .de REQ -. if (\n[.$] = 0) \ -. return -. ds @1 \$1\" -. shift 1 -. ie (\n[.$] = 0) \{\ -. TP 10n -. Text \f[CB]\*[@1]\f[] +. ie \n[.$]=1 \{\ +. Text \f[CB]\\$1\f[] . \} . el \{\ -. TP 10n -. Text \f[CB]\*[@1]\~\f[]\f[I]\$*\f[] +. Text \f[CB]\\$1\~\f[]\f[I]\\$2\f[] . \} -. rm @1 .. -.c reference of a request +. +.\" reference of a request .de request -. BR \$* +. BR \\$* .. . -.c --------- numerical elements --------- +.\" --------- numerical elements --------- . -.c number with a trailing unit +.\" number with a trailing unit .de scalednumber -. Text \$1\^\f[CB]\$2\f[]\$3\f[R] +. Text \\$1\^\f[CB]\\$2\f[]\\$3\f[R] . ft P .. . -.c representation of units within the text +.\" representation of units within the text .de scaleindicator -. Text \f[CB]\$1\f[]\$2\f[R] +. Text \f[CB]\\$1\f[]\\$2\f[R] . ft P .. . -.c representation of mathematical operators within the text +.\" representation of mathematical operators within the text .de operator -. squoted_char \$@ +. squoted_char \\$@ .. . . -.c --------- escape sequences --------- +.\" --------- escape sequences --------- . -.c --------------------------------------------------------------------- -.c .ESC name [arg] -.c -.c Synopsis of an escape sequence, optionally with argument -.c Args : 1 or 2; `name' obligatory, `arg' optional -.c name : suitable name for an escape sequence (c, (xy, [long]) -.c arg : arbitrary word -.c Result : prints \namearg, where `name' is in CB, `arg' in I -.c +.\" --------------------------------------------------------------------- +.\" .ESC name [arg] +.\" +.\" Synopsis of an escape sequence, optionally with argument +.\" Args : 1 or 2; `name' obligatory, `arg' optional +.\" name : suitable name for an escape sequence (c, (xy, [long]) +.\" arg : arbitrary word +.\" Result : prints \namearg, where `name' is in CB, `arg' in I +.\" .de ESC -. if (\n[.$] < 1) -. ab .ESC needs 1 or 2 arguments. -. ExecFF IP CB I "\[rs]\$1" "\,\$2\/" +. Text "\f[CB]\[rs]\\$1\,\f[I]\\$2\/\fR" .. -.c --------------------------------------------------------------------- -.c .ESC[] name arg -.c -.c Synopsis for escape sequence with a bracketed long argument -.c Args : 2 obligatory -.c name : suitable name for an escape sequence (c, (xy, [long]) -.c arg : arbitrary text -.c Result : prints \name[arg], where `name' is in CB, `arg' in I -.c +.\" --------------------------------------------------------------------- +.\" .ESC[] name arg +.\" +.\" Synopsis for escape sequence with a bracketed long argument +.\" Args : 2 obligatory +.\" name : suitable name for an escape sequence (c, (xy, [long]) +.\" arg : arbitrary text +.\" Result : prints \name[arg], where `name' is in CB, `arg' in I +.\" .de ESC[] -. if !(\n[.$] = 2) \ -. ab .ESC[] needs exactly 2 arguments. -. ExecFF IP CB I "\[rs]\$1\[lB]" "\h'-0.2m'\$2\h'-0.15m'" \[rB] +. Text "\f[CB]\[rs]\\$1\[lB]\f[]\f[I]\\$2\f[]\f[CB]\[rB]\f[]" .. -.c --------------------------------------------------------------------- -.c .ESCq name arg -.c -.c Synopsis for escape sequence with a bracketed long argument -.c Args : 2 obligatory -.c name : suitable name for an escape sequence (c, (xy, [long]) -.c arg : arbitrary text -.c Result : prints \name'arg', where `name' is in CB, `arg' in I -.c +.\" --------------------------------------------------------------------- +.\" .ESCq name arg +.\" +.\" Synopsis for escape sequence with a bracketed long argument +.\" Args : 2 obligatory +.\" name : suitable name for an escape sequence (c, (xy, [long]) +.\" arg : arbitrary text +.\" Result : prints \name'arg', where `name' is in CB, `arg' in I +.\" .de ESCq -. if !(\n[.$] = 2) \ -. ab .ESCq needs exactly 2 argument. -. ExecFF IP CB I "\[rs]\$1\[cq]" "\h'-0.3m'\$2" \[cq] +. Text "\f[CB]\[rs]\\$1\[cq]\f[]\f[I]\\$2\f[]\f[CB]\[cq]\f[]" .. -.c --------------------------------------------------------------------- -.c .ESC? arg -.c -.c Synopsis for escape sequence with a bracketed long argument -.c Args : 1 obligatory -.c arg : arbitrary text -.c Result : prints `\?arg?', where the `?' are in CB, `arg' in I -.c +.\" --------------------------------------------------------------------- +.\" .ESC? arg +.\" +.\" Synopsis for escape sequence with a bracketed long argument +.\" Args : 1 obligatory +.\" arg : arbitrary text +.\" Result : prints `\?arg?', where the `?' are in CB, `arg' in I +.\" .de ESC? -. if !(\n[.$] = 1) \ -. ab .ESC? needs exactly 1 arguments. -. ExecFF IP CB I \[rs]? "\$1" ? +. Text "\f[CB]\[rs]?\f[I]\\$1\f[CB]?\f[R]" .. -.c --------------------------------------------------------------------- -.c .esc name [punct] -.c -.c Reference of an escape sequence (no args), possibly punctuation -.c Args : 1 obligatory -.c name : suitable name for an escape sequence (c, (xy, [long]) -.c punct : arbitrary -.c Result : prints \name, where `name' is in B, `punct' in R -.c +.\" --------------------------------------------------------------------- +.\" .esc name [punct] +.\" +.\" Reference of an escape sequence (no args), possibly punctuation +.\" Args : 1 obligatory +.\" name : suitable name for an escape sequence (c, (xy, [long]) +.\" punct : arbitrary +.\" Result : prints \name, where `name' is in B, `punct' in R +.\" .de esc -. if (\n[.$] < 1) \ -. ab .esc needs 1 or 2 arguments. -. BR "\[rs]\$1" \$2 +. BR "\[rs]\\$1" \\$2 .. -.c --------------------------------------------------------------------- -.c .escarg name arg [punct] -.c -.c Reference of an escape sequence (no args) -.c Args : 1 obligatory, 1 optional -.c name : suitable name for an escape sequence (c, (xy, [long]) -.c arg : arbitrary word -.c Result : prints \namearg, where -.c `name' is in B, `arg' in I -.c +.\" --------------------------------------------------------------------- +.\" .escarg name arg [punct] +.\" +.\" Reference of an escape sequence (no args) +.\" Args : 1 obligatory, 1 optional +.\" name : suitable name for an escape sequence (c, (xy, [long]) +.\" arg : arbitrary word +.\" Result : prints \namearg, where +.\" `name' is in B, `arg' in I +.\" .de escarg -. if (\n[.$] < 2) \ -. ab .esc needs 2 or 3 arguments. -. Text \f[B]\[rs]\$1\f[]\f[I]\$2\f[]\$3 +. Text \f[B]\[rs]\\$1\f[]\f[I]\\$2\f[]\\$3 .. -.c --------------------------------------------------------------------- -.c .esc[] name arg [punct] -.c -.c Reference for escape sequence with a bracketed long argument -.c Args : 2 obligatory -.c name : suitable name for an escape sequence (c, (xy, [long]) -.c arg : arbitrary text -.c Result : prints \name[arg], where `name' is in CB, `arg' in CI -.c +.\" --------------------------------------------------------------------- +.\" .esc[] name arg [punct] +.\" +.\" Reference for escape sequence with a bracketed long argument +.\" Args : 2 obligatory +.\" name : suitable name for an escape sequence (c, (xy, [long]) +.\" arg : arbitrary text +.\" Result : prints \name[arg], where `name' is in CB, `arg' in CI +.\" .de esc[] -. if (\n[.$] < 2) \ -. ab .esc[] needs 2 or 3 arguments. -. Text \f[B]\[rs]\$1\[lB]\f[]\f[I]\$2\f[]\f[B]\[rB]\f[]\$3 +. Text \f[B]\[rs]\\$1\[lB]\f[]\f[I]\\$2\f[]\f[B]\[rB]\f[]\\$3 .. . -.c --------------------------------------------------------------------- -.c .escq name arg -.c -.c Reference for escape sequence with a bracketed long argument -.c Args : 2 obligatory -.c name : suitable name for an escape sequence (c, (xy, [long]) -.c arg : arbitrary text -.c Result : prints \name'arg', where `name' is in CB, `arg' in CI -.c +.\" --------------------------------------------------------------------- +.\" .escq name arg +.\" +.\" Reference for escape sequence with a bracketed long argument +.\" Args : 2 obligatory +.\" name : suitable name for an escape sequence (c, (xy, [long]) +.\" arg : arbitrary text +.\" Result : prints \name'arg', where `name' is in CB, `arg' in CI +.\" .de escq -. if (\n[.$] < 2) \ -. ab .escq needs 2 arguments. -. Text \f[B]\[rs]\$1\[cq]\f[]\f[I]\$2\f[]\f[B]\[cq]\f[]\$3 +. Text \f[B]\[rs]\\$1\[cq]\f[]\f[I]\\$2\f[]\f[B]\[cq]\f[]\\$3 .. . -.c --------- strings --------- +.\" --------- strings --------- . -.c synopsis for string, with \*[] +.\" synopsis for string, with \*[] .de STRING -. ds @1 \$1\" -. shift 1 -. TP 10n -. ExecFF Text R CB \[rs]*[ \*[@1]\f[]\f[R]] \$* -. rm @1 +. Text \[rs]*[\f[CB]\\$1\f[]] \\$2 .. -.c synopsis for a long string +.\" synopsis for a long string .de string -. if (\n[.$] = 0) \ +. if \n[.$]=0 \ . return -. Text \f[CB]\[rs]*\[lB]\$1\[rB]\f[]\$2 +. Text \f[CB]\[rs]*\[lB]\\$1\[rB]\f[]\\$2 .. . +.\" --------- registers --------- . -.c --------- registers --------- -. -.c synopsis for registers, with \n[] +.\" synopsis for registers, with \n[] .de REG -. ds @1 \$1\" -. shift 1 -. TP 10n -. ExecFF Text R CB \[rs]n[ \*[@1]\f[]\f[R]] \$* -. rm @1 +. Text \[rs]n[\f[CB]\\$1\f[]] .. -.c reference of a register, without decoration +.\" reference of a register, without decoration .de register . Text register -. BR \$* +. BR \\$* .. . -.ec .\" end of macro definitions . . @@ -399,8 +304,8 @@ represent commands, optionally with arguments. They have the following syntax. . The leading control character can be followed by a command name; -arguments, if any, are separated by blanks from the command name and -among themselves, for example, +arguments, if any, are separated by spaces (but not tab characters) +from the command name and among themselves, for example, .RS . .P @@ -414,7 +319,7 @@ control character must be on the first position of the line. . .P .B Text lines -represent the parts that will be printed. +represent the parts that is printed. They can be modified by escape sequences, which are recognized by a leading backslash .squoted_char \[rs] . @@ -579,14 +484,31 @@ of these fonts, .BR CI , and .BR CB . -On text devices, all characters have a constant width anyway. +On text devices, all glyphs have a constant width anyway. +. +.P +.B Glyphs +are visual representation forms of +.BR characters . +In groff, the distinction between those two elements is not always +obvious (and a full discussion is beyond the scope of this man page). +. +A first approximation is that glyphs have a specific size and +colour and are taken from a specific font; they can't be modified any +more \[en] characters are the input, and glyphs are the output. +. +As soon as an output line has been generated, it no longer contains +characters but glyphs. +. +In this man page, we use either `glyph' or `character', whatever is +more appropriate. . .P Moreover, there are some advanced roff elements. . A .B diversion -stores information into a macro for later usage. +stores (formatted) information into a macro for later usage. . A .B trap @@ -609,7 +531,7 @@ There is a small set of characters that have a special controlling task in certain conditions. . .TP -.character . +\&\f[CB].\f[] A dot is only special at the beginning of a line or after the condition in the requests .request if , @@ -636,7 +558,7 @@ In text paragraphs, it is advantageous to start each sentence at a line of its own. . .TP -.character ' +\&\f[CB]'\f[] The single quote has two controlling tasks. . At the beginning of a line and in the conditional requests it is the @@ -653,7 +575,7 @@ character. .IP "" As a second task, it is the most commonly used argument separator in some functional escape sequences (but any pair of characters not part -of the argument will work). +of the argument do work). . In all other positions, it denotes the single quote or apostrophe character. @@ -663,15 +585,15 @@ Groff provides a printable representation with the escape sequence. . .TP -.character \[dq] -The double quote is used to enclose arguments in requests, macros, and -strings. +\&\f[CB]\[dq]\f[] +The double quote is used to enclose arguments in macros (but not in +requests and strings). . In the .request ds and .request as -requests, a leading double quote in the argument will be stripped off, +requests, a leading double quote in the argument is stripped off, making everything else afterwards the string to be defined (enabling leading whitespace). . @@ -686,7 +608,7 @@ Groff provides a printable representation with the escape sequence. . .TP -.character \[rs] +\&\f[CB]\[rs]\f[] The backslash usually introduces an escape sequence (this can be changed with the .request ec @@ -697,20 +619,20 @@ A printed version of the escape character is the escape; a backslash glyph can be obtained by .esc (rs . .TP -.character ( +\&\f[CB](\f[] The open parenthesis is only special in escape sequences when introducing an escape name or argument consisting of exactly two characters. . In groff, this behavior can be replaced by the \f[CB][]\f[] construct. .TP -.character [ +\&\f[CB][\f[] The opening bracket is only special in groff escape sequences; there it is used to introduce a long escape name or long escape argument. . Otherwise, it is non-special, e.g.\& in macro calls. .TP -.character ] +\&\f[CB]]\f[] The closing bracket is only special in groff escape sequences; there it terminates a long escape name or long escape argument. . @@ -793,7 +715,8 @@ Point\ \[eq]\ 1/72\ inch . .TPx .B m -Em\ \[eq]\ \f[R]the font size in points (width of letter `\f[CR]m\f[R]') +Em\ \[eq]\ \f[R]the font size in points (approx.\& width of letter +`\f[CR]m\f[R]') . .TPx .B M @@ -905,21 +828,21 @@ added the following operators for numerical expressions: .RS . .TPx -.ExecFF Text I CB e1 >? e2 +\f[I]e1\f[CB]>?\f[I]e2\f[R] The maximum of .I e1 and .IR e2 . . .TPx -.ExecFF Text I CB e1 0. . +.TPx .REQ .ll Change to previous line length. . -.REQ .ll \[+-]N +.TPx +.REQ .ll "\[+-]N" Set line length according to .I \[+-]N -(default size +(default length .scalednumber 6.5 i , default scaling indicator\~\c .scaleindicator m ). . +.TPx .REQ .ls Change to the previous value of additional intra-line skip. . -.REQ .ls N +.TPx +.REQ .ls "N" Set additional intra-line skip value to .IR N , i.e., .IR N -1 blank lines are inserted after each text output line. . -.REQ .lt \[+-]N +.TPx +.REQ .lt "\[+-]N" Length of title (default scaling indicator\~\c .scaleindicator m ). . +.TPx .REQ .mc -Margin character off. +Margin glyph off. . -.REQ .mc c -Print character +.TPx +.REQ .mc "c" +Print glyph\~\c .I c after each text line at actual distance from right margin. . -.REQ .mc c N -Set margin character to +.TPx +.REQ .mc "c N" +Set margin glyph to\~\c .I c -and distance to +and distance to\~\c .I N from right margin (default scaling indicator\~\c .scaleindicator m ). . -.REQ .mk register +.TPx +.REQ .mk "register" Mark current vertical position in .IR register . . -.REQ .mso file -The same as the .so request except that +.TPx +.REQ .mso "file" +The same as +.request .so +except that .I file is searched in the tmac directories. . +.TPx .REQ .na No output-line adjusting. . +.TPx .REQ .ne Need a one-line vertical space. . -.REQ .ne N +.TPx +.REQ .ne "N" Need .I N vertical space (default scaling indicator\~\c .scaleindicator v ). . +.TPx .REQ .nf No filling or adjusting of output-lines. . +.TPx .REQ .nh No hyphenation. . +.TPx .REQ .nm Number mode off. . -.REQ .nm \[+-]N \fR[\fPM \fR[\fPS \fR[\fPI\fR]]]\fP -In line number mode, set number, multiple, spacing, and indent. +.TPx +.REQ .nm "\[+-]N \fR[\fPM \fR[\fPS \fR[\fPI\fR]]]\fP" +In line number mode, set number, multiple, spacing, and indentation. . +.TPx .REQ .nn Do not number next line. . -.REQ .nn N +.TPx +.REQ .nn "N" Do not number next .I N lines. . -.REQ .nop anything -Always execute +.TPx +.REQ .nop "anything" +Always process .IR anything . . -.REQ .nr register \[+-]N M +.TPx +.REQ .nr "register \[+-]N \fR[\fPM\fR]\fP" Define or modify .I register using @@ -1881,216 +1976,268 @@ using with auto-increment .IR M . . +.TPx .REQ .nroff -Make the built-in condition +Make the built-in conditions .B n true and .B t false. . +.TPx .REQ .ns -Turn no-space mode on. +Turn on no-space mode. . +.TPx .REQ .nx Immediately jump to end of current file. . -.REQ .nx filename -Next file. +.TPx +.REQ .nx "filename" +Immediately continue processing with file +.IR file . . -.REQ .open stream filename +.TPx +.REQ .open "stream filename" Open -.register filename +.I filename for writing and associate the stream named -.register stream +.I stream with it. . -.REQ .opena stream filename +.TPx +.REQ .opena "stream filename" Like .request .open but append to it. . +.TPx .REQ .os Output vertical distance that was saved by the .request sv request. . -.REQ .output string +.TPx +.REQ .output "string" Emit .I string directly to intermediate output, allowing leading whitespace if .I string starts with -.character \[dq] -(which will be stripped off). +\&\f[CB]\[dq]\f[] +(which is stripped off). . +.TPx .REQ .pc Reset page number character to\~\c .squoted_char % . . -.REQ .pc c +.TPx +.REQ .pc "c" Page number character. . -.REQ .pi program +.TPx +.REQ .pev +Print the current environment and each defined environment +state to stderr. +. +.TPx +.REQ .pi "program" Pipe output to .I program (nroff only). . +.TPx .REQ .pl Set page length to default .scalednumber 11 i . The current page length is stored in .register .p . . -.REQ .pl \[+-]N +.TPx +.REQ .pl "\[+-]N" Change page length to .I \[+-]N (default scaling indicator\~\c .scaleindicator v ). . +.TPx .REQ .pm Print macro names and sizes (number of blocks of 128 bytes). . -.REQ ".pm t" +.TPx +.REQ .pm "t" Print only total of sizes of macros (number of 128 bytes blocks). . -.REQ .pn \[+-]N +.TPx +.REQ .pn "\[+-]N" Next page number .IR N . . +.TPx .REQ .pnr Print the names and contents of all currently defined number registers on stderr. . +.TPx .REQ .po Change to previous page offset. . The current page offset is available in .register .o . . -.REQ .po \[+-]N +.TPx +.REQ .po "\[+-]N" Page offset .IR N . . +.TPx .REQ .ps -Return to previous point-size. -.REQ .ps \[+-]N +Return to previous point size. +.TPx +.REQ .ps "\[+-]N" Point size; same as .esc[] s \[+-]N . . -.REQ .psbb filename +.TPx +.REQ .psbb "filename" Get the bounding box of a PostScript image .IR filename . . -.REQ .pso command +.TPx +.REQ .pso "command" This behaves like the .request so request except that input comes from the standard output of .IR command . . +.TPx .REQ .ptr Print the names and positions of all traps (not including input line traps and diversion traps) on stderr. . +.TPx .REQ .pvs Change to previous post-vertical line spacing. . -.REQ .pvs \[+-]N +.TPx +.REQ .pvs "\[+-]N" Change post-vertical line spacing according to .I \[+-]N (default scaling indicator\~\c .scaleindicator p ). . -.REQ .rchar c1 c2 .\|.\|.\& -Remove the definitions of characters +.TPx +.REQ .rchar "c1 c2 .\|.\|.\&" +Remove the definitions of entities .IR c1 , .IR c2 , .I .\|.\|.\& . -.REQ .rd prompt +.TPx +.REQ .rd "prompt" Read insertion. . +.TPx .REQ .return Return from a macro. . -.REQ .return anything +.TPx +.REQ .return "anything" Return twice, namely from the macro at the current level and from the macro one level higher. . -.REQ .rfschar f c1 c2 .\|.\|.\& -Remove the definitions of characters +.TPx +.REQ .rfschar "f c1 c2 .\|.\|.\&" +Remove the definitions of entities .IR c1 , .IR c2 , .I .\|.\|.\& for font .IR f . . -.REQ .rj n +.TPx +.REQ .rj "n" Right justify the next .I n input lines. . -.REQ .rm name +.TPx +.REQ .rm "name" Remove request, macro, or string .IR name . . -.REQ .rn old new +.TPx +.REQ .rn "old new" Rename request, macro, or string .I old to .IR new . . -.REQ .rnn reg1 reg2 +.TPx +.REQ .rnn "reg1 reg2" Rename register .I reg1 to .IR reg2 . . -.REQ .rr register +.TPx +.REQ .rr "register" Remove .IR register . . +.TPx .REQ .rs Restore spacing; turn no-space mode off. . -.REQ .rt \[+-]N +.TPx +.REQ .rt "\[+-]N" Return .I (upward only) to marked vertical place (default scaling indicator\~\c .scaleindicator v ). . -.REQ .schar c anything -Define global fallback character +.TPx +.REQ .schar "c anything" +Define global fallback character (or glyph)\~\c .I c as string .IR anything . . +.TPx .REQ .shc -Reset soft hyphen character to +Reset soft hyphen glyph to .esc (hy . . -.REQ .shc c -Set the soft hyphen character to +.TPx +.REQ .shc "c" +Set the soft hyphen glyph to\~\c .IR c . . -.REQ .shift n +.TPx +.REQ .shift "n" In a macro, shift the arguments by .IR n \~\c positions. . -.REQ .sizes s1 s2 .\|.\|.\& sn \fB[0]\fP +.TPx +.REQ .sizes "s1 s2 .\|.\|.\& sn \fB[0]\fP" Set available font sizes similar to the .B sizes command in a .B DESC file. . -.REQ .so filename +.TPx +.REQ .so "filename" Include source file. . +.TPx .REQ .sp Skip one line vertically. . -.REQ .sp N +.TPx +.REQ .sp "N" Space vertical distance .I N up or down according to sign of @@ -2098,44 +2245,52 @@ up or down according to sign of (default scaling indicator\~\c .scaleindicator v ). . +.TPx .REQ .special Reset global list of special fonts to be empty. . -.REQ .special s1 s2 .\|.\|.\& +.TPx +.REQ .special "s1 s2 .\|.\|.\&" Fonts .IR s1 , .IR s2 , -etc.\& are special and will be searched for characters not in the +etc.\& are special and are searched for glyphs not in the current font. . +.TPx .REQ .spreadwarn Toggle the spread warning on and off without changing its value. . -.REQ .spreadwarn limit +.TPx +.REQ .spreadwarn "limit" Emit a warning if each space in an output line is widened by .I limit or more (default scaling indicator\~\c .scaleindicator m ). . -.REQ .ss N -Space-character size set to +.TPx +.REQ .ss "N" +Set space glyph size to .IR N /12 -of the spacewidth in the current font. +of the space width in the current font. . -.REQ .ss N M -Space-character size set to +.TPx +.REQ .ss "N M" +Set space glyph size to .IR N /12 and sentence space size set to .IR M /12 -of the spacewidth in the current font (\f[CR]\[eq]1/3 em\f[]). +of the space width in the current font. . -.REQ .sty n style +.TPx +.REQ .sty "n style" Associate .I style with font position .IR n . . -.REQ .substring xx n1 n2 +.TPx +.REQ .substring "xx n1 n2" Replace the string named .I xx with the substring defined by the indices @@ -2143,28 +2298,33 @@ with the substring defined by the indices and .IR n2 . . +.TPx .REQ .sv Save -.scalednumber 1 v +.scalednumber "1 v" of vertical space. -. -.REQ .sv N +.TPx +.REQ .sv "N" Save the vertical distance .I N for later output with .request os -request. +request (default scaling indicator\~\c +.scaleindicator v ). . -.REQ .sy command-line +.TPx +.REQ .sy "command-line" Execute program .IR command-line . . -.REQ ".ta T" N +.TPx +.REQ .ta "T N" Set tabs after every position that is a multiple of .I N (default scaling indicator\~\c .scaleindicator m ). -.REQ .ta n1 n2 .\|.\|.\& nn \f[CB]T\f[] r1 r2 .\|.\|.\& rn +.TPx +.REQ .ta "n1 n2 .\|.\|.\& nn \f[CB]T\f[] r1 r2 .\|.\|.\& rn" Set tabs at positions .IR n1 , .IR n2 , @@ -2182,50 +2342,60 @@ then at .IR nn + rn + rn , and so on. . +.\".TPx .\".REQ .tar .\"Restore internally saved tab positions. .\". +.\".TPx .\".REQ .tas .\"Save tab positions internally. . +.TPx .REQ .tc -Remove tab repition character. -.REQ .tc c -Set tab repetition character to\~\c +Remove tab repetition glyph. +.TPx +.REQ .tc "c" +Set tab repetition glyph to\~\c .IR c . . -.REQ .ti \[+-]N +.TPx +.REQ .ti "\[+-]N" Temporary indent next line (default scaling indicator\~\c .scaleindicator m ). . -.REQ .tkf font s1 n1 s2 n2 +.TPx +.REQ .tkf "font s1 n1 s2 n2" Enable track kerning for .IR font . . -.REQ .tl \f[CB]\[cq]\f[]left\f[CB]\[cq]\f[]center\f[CB]\[cq]\f[]right\f[CB]\[cq]\f[] +.TPx +.REQ .tl "\f[CB]\[cq]\f[]left\f[CB]\[cq]\f[]center\f[CB]\[cq]\f[]right\f[CB]\[cq]\f[]" Three-part title. . -.REQ .tm anything +.TPx +.REQ .tm "anything" Print .I anything -on terminal (UNIX standard message output). +on stdout. . -.REQ .tm1 anything +.TPx +.REQ .tm1 "anything" Print .I anything -on terminal (UNIX standard message output), allowing leading -whitespace if +on stdout, allowing leading whitespace if .I anything starts with -.character \[dq] -(which will be stripped off). +\&\f[CB]\[dq]\f[] +(which is stripped off). . -.REQ .tmc anything +.TPx +.REQ .tmc "anything" Similar to .request .tm1 without emitting a final newline. . -.REQ .tr abcd.\|.\|.\& +.TPx +.REQ .tr "abcd.\|.\|.\&" Translate .I a to @@ -2235,96 +2405,113 @@ to .IR d , etc.\& on output. . -.REQ .trf filename +.TPx +.REQ .trf "filename" Transparently output the contents of file .IR filename . . -.REQ .trin abcd.\|.\|.\& +.TPx +.REQ .trin "abcd.\|.\|.\&" This is the same as the .request tr request except that the .B asciify -request will use the character code (if any) before the character +request uses the character code (if any) before the character translation. . -.REQ .trnt abcd.\|.\|.\& +.TPx +.REQ .trnt "abcd.\|.\|.\&" This is the same as the .request tr request except that the translations do not apply to text that is transparently throughput into a diversion with .esc ! . . +.TPx .REQ .troff -Make the built-in condition +Make the built-in conditions .B t true and .B n false. . -.REQ .uf font -Underline font set to +.TPx +.REQ .uf "font" +Set underline font to .I font (to be switched to by .request .ul ). . -.REQ .ul N +.TPx +.REQ .ul "N" Underline (italicize in troff) .I N input lines. . -.REQ .unformat diversion -Unformat space characters and tabs, preserving font information in -.IR diversion . -.REQ .vpt n +.TPx +.REQ .unformat "diversion" +Unformat space characters and tabs in +.IR diversion , +preserving font information. +.TPx +.REQ .vpt "n" Enable vertical position traps if .I n is non-zero, disable them otherwise. . +.TPx .REQ .vs Change to previous vertical base line spacing. . -.REQ .vs \[+-]N -Set vertical base line spacing according to +.TPx +.REQ .vs "\[+-]N" +Set vertical base line spacing to .I \[+-]N (default scaling indicator\~\c .scaleindicator p ). -Default value is -.scalednumber 12 p . . -.REQ .warn n +.TPx +.REQ .warn "n" Set warnings code to .IR n . . -.REQ .warnscale si +.TPx +.REQ .warnscale "si" Set scaling indicator used in warnings to .IR si . . -.REQ .wh N +.TPx +.REQ .wh "N" Remove (first) trap at position .IR N . . -.REQ .wh N trap +.TPx +.REQ .wh "N trap" Set location trap; negative means from page bottom. . -.REQ .while cond anything +.TPx +.REQ .while "cond anything" While condition .I cond is true, accept .I anything as input. . -.REQ .write stream anything +.TPx +.REQ .write "stream anything" Write .I anything to the stream named .IR stream . . -.REQ .writec stream anything +.TPx +.REQ .writec "stream anything" Similar to .request .write without emitting a final newline. . -.REQ .writem stream xx +.TPx +.REQ .writem "stream xx" Write contents of macro or string .I xx to the stream named @@ -2351,7 +2538,7 @@ c | c | c CfCB | CfCB | CfCB. preprocessor@start macro@ end macro = -eqn@.PS@.PE +eqn@.EQ@.EN grap@.G1@.G2 grn@.GS@.GE pic@.PS@.PE @@ -2372,7 +2559,7 @@ backslash and followed by an escape name and sometimes by a required argument. . Input processing is continued directly after the escaped character or -the argument resp.\& without an intervening separation character. +the argument (without an intervening separation character). . So there must be a way to determine the end of the escape name and the end of the argument. @@ -2388,48 +2575,53 @@ apostrophes (ASCII 0x27) like .P There are abbreviations for short names. . -Two character escape names can be specified by an opening parenthesis +Two-character escape names can be specified by an opening parenthesis like .esc ( xy +or +.esc *( xy without a closing counterpart. . And all one-character names different from the special characters .squoted_char [ and .squoted_char ( -can even be specified without a marker in the form -.esc c . +can even be specified without a marker, for example +.esc n c +or +.esc $ c. . .P Constant arguments of length\~1 can omit the marker apostrophes, too, but there is no two-character analogue. . .P -While 1-character escape sequences are mainly used for in-line -functions and system related tasks, the 2-letter names following the +While one-character escape sequences are mainly used for in-line +functions and system related tasks, the two-letter names following the .esc ( -construct are used for special characters predefined by the roff system. +construct are glyphs predefined by the roff system; these are called +`Special Characters' in the classical documentation. . -Escapes sequences with names of more than two characters +Escapes sequences of the form .esc[] "" name -denote user defined named characters (see the -.request char -request). +denote glyphs too. . . .\" -------------------------------------------------------------------- -.SS "Single Character Escapes" +.SS "Single-Character Escapes" .\" -------------------------------------------------------------------- . .PD 0 . .\" --------- comments --------- . +.TP .ESC \[dq] -Beginning of a comment. +Start of a comment. . Everything up to the end of the line is ignored. . +.TP .ESC # Everything up to and including the next newline is ignored. . @@ -2441,16 +2633,25 @@ except that the terminating newline is ignored as well. . .\" --------- strings --------- . +.TP .ESC *\f[I]s\f[] -The string stored in the string variable with 1-character name +The string stored in the string variable with one-character name\~\c .IR s . . +.TP .ESC *(\f[I]st\f[] -The string stored in the string variable with 2-character name +The string stored in the string variable with two-character name .IR st . . +.TP +.ESC[] * string +The string stored in the string variable with name +.I string +(with arbitrary length). +. +.TP .ESC[] * "stringvar arg1 arg2 .\|.\|." -The string stored in the string variable with arbitrary length name +The string stored in the string variable with arbitrarily long name .IR stringvar , taking .IR arg1 , @@ -2460,6 +2661,7 @@ as arguments. . .\" --------- macro arguments --------- . +.TP .ESC $0 The name by which the current macro was invoked. . @@ -2467,17 +2669,19 @@ The .request als request can make a macro have more than one name. . +.TP .ESC $ x -Macro or string argument with 1-place number -.IR x , -where +Macro or string argument with one-digit number\~\c .I x -is a digit between 1 and 9. +in the range 1 to\~9. . +.TP .ESC $( xy -Macro or string argument with 2-digit number -.IR xy . +Macro or string argument with two-digit number +.I xy +(larger than zero). . +.TP .ESC[] $ nexp Macro or string argument with number .IR nexp , @@ -2485,16 +2689,26 @@ where .I nexp is a numerical expression evaluating to an integer \[>=]1. . +.TP .ESC $* In a macro or string, the concatenation of all the arguments separated by spaces. . +.TP .ESC $@ In a macro or string, the concatenation of all the arguments with each surrounded by double quotes, and separated by spaces. . +.TP +.ESC $^ +In a macro, the representation of all parameters as if they were an +argument to the +.request ds +request. +. .\" --------- escaped characters --------- . +.TP .ESC \[rs] reduces to a single backslash; useful to delay its interpretation as escape character in copy mode. @@ -2505,30 +2719,43 @@ or even better .esc [rs] , to be independent from the current escape character. . +.TP .ESC \[cq] The acute accent \[aa]; same as .esc (aa . Unescaped: apostrophe, right quotation mark, single quote (ASCII 0x27). . +.TP .ESC ` The grave accent \[ga]; same as .esc (ga . Unescaped: left quote, backquote (ASCII 0x60). . -.ESC \- -The \- sign in the current font. +.TP +.ESC - +The \- (minus) sign in the current font. +. +.TP +.ESC _ +The same as +.esc (ul , +the underline character. . +.TP .ESC . An uninterpreted dot (period), even at start of line. . +.TP .ESC % Default optional hyphenation character. . +.TP .ESC ! Transparent line indicator. . +.TP .ESC? anything -In a diversion, this will transparently embed +In a diversion, this transparently embeds .I anything in the diversion. .I anything @@ -2542,70 +2769,88 @@ and . .\" --------- spacing --------- . +.TP .ESC \& space -Unpaddable space-size space character (no line break). +Unpaddable space size space glyph (no line break). . +.TP .ESC 0 -Digit width. +Digit-width space. . +.TP .ESC | -1/6\ em narrow space character; zero width in nroff. +1/6\ em narrow space glyph; zero width in nroff. . +.TP .ESC ^ -1/12\ em half-narrow space character; zero width in nroff. +1/12\ em half-narrow space glyph; zero width in nroff. . +.TP .ESC & -Non-printable, zero width character. +Non-printable, zero-width glyph. . +.TP .ESC ) Like .esc & -except that it behaves like a character declared with the cflags -request to be transparent for the purposes of end of sentence +except that it behaves like a glyph declared with the +.request cflags +request to be transparent for the purposes of end-of-sentence recognition. . +.TP .ESC / -Increases the width of the preceding character so that the spacing -between that character and the following character will be correct if -the following character is a roman character. +Increases the width of the preceding glyph so that the spacing +between that glyph and the following glyph is correct if +the following glyph is a roman glyph. . +.TP .ESC , -Modifies the spacing of the following character so that the spacing -between that character and the preceding character will correct if the -preceding character is a roman character. +Modifies the spacing of the following glyph so that the spacing +between that glyph and the preceding glyph is correct if the +preceding glyph is a roman glyph. . +.TP .ESC ~ Unbreakable space that stretches like a normal inter-word space when a line is adjusted. . +.TP .ESC : Inserts a zero-width break point (similar to .esc % but without a soft hyphen character). . +.TP .ESC "" newline Ignored newline, for continuation lines. . .\" --------- structuring --------- . +.TP .ESC { Begin conditional input. . +.TP .ESC } End conditional input. . .\" --------- longer escape names --------- . +.TP .ESC ( sc -The special character with 2-character name -.IR sc , +A glyph with two-character name +.IR sc ; see section .BR "Special Characters" . . +.TP .ESC[] "" name -The named character (or rather glyph) with arbitrary length name -.IR name . +A glyph with name +.I name +(of arbitrary length). . +.TP .ESC[] "" "comp1 comp2 .\|.\|." A composite glyph with components .IR comp1 , @@ -2614,267 +2859,384 @@ A composite glyph with components . .\" --------- alphabetical escapes --------- . +.TP .ESC a Non-interpreted leader character. . +.TP .ESCq A anything If .I anything is acceptable as a name of a string, macro, diversion, register, environment or font it expands to\~1, and to\~0 otherwise. . +.TP .ESCq b abc.\|.\|.\& Bracket building function. . +.TP .ESCq B anything If .I anything is acceptable as a valid numeric expression it expands to\~1, and to\~0 otherwise. . +.TP .ESC c Interrupt text processing. . -.ESCq C char -The character called -.IR char ; +.TP +.ESCq C glyph +The glyph called +.IR glyph ; same as -.esc[] "" char , +.esc[] "" glyph , but compatible to other roff versions. . +.TP .ESC d -Forward (down) 1/2 em vertical unit (1/2 line in nroff). +Forward (down) 1/2 em (1/2 line in nroff). . +.TP .ESCq D charseq Draw a graphical element defined by the characters in .IR charseq ; -see groff info file for details. +see the groff info file for details. . +.TP .ESC e Printable version of the current escape character. . +.TP .ESC E -Equivalent to an escape character, but is not interpreted in copy-mode. +Equivalent to an escape character, but is not interpreted in copy mode. . +.TP .ESC f F -Change to font with 1-character name or 1-digit number +Change to font with one-character name or one-digit number\~\c .IR F . . +.TP .ESC fP Switch back to previous font. . +.TP .ESC f( fo -Change to font with 2-character name or 2-digit number +Change to font with two-character name or two-digit number .IR fo . . +.TP .ESC[] f font -Change to font with arbitrary length name or number expression +Change to font with arbitrarily long name or number expression .IR font . . +.TP .ESC[] f "" Switch back to previous font. . +.TP .ESC F f -Change to font family with 1-character name +Change to font family with one-character name\~\c .IR f . . +.TP .ESC F( fm -Change to font family with 2-character name +Change to font family with two-character name .IR fm . . +.TP .ESC[] F fam -Change to font family with arbitrary length name +Change to font family with arbitrarily long name .IR fam . . +.TP .ESC[] F "" Switch back to previous font family. . +.TP +.ESC g r +Return format of register with one-character name\~\c +.I r +suitable for +.request af +request. +. +.TP +.ESC g( rg +Return format of register with two-character name +.I rg +suitable for +.request af +request. +. +.TP .ESC[] g reg -Return format of register with name +Return format of register with arbitrarily long name .I reg suitable for -.request .af . -. -Alternative forms -.escarg g( xy -and -.escarg g x . +.request af +request. . +.TP .ESCq h N Local horizontal motion; move right .I N (left if negative). . +.TP .ESCq H N Set height of current font to .IR N . . +.TP +.ESC k r +Mark horizontal input place in one-character register\~\c +.IR r . +. +.TP +.ESC k( rg +Mark horizontal input place in two-character register +.IR rg . +. +.TP .ESC[] k reg -Mark horizontal input place in register with arbitrary length name +Mark horizontal input place in register with arbitrarily long name .IR reg . -Alternative forms -.escarg k( xy -and -.escarg k x . . +.TP .ESCq l Nc Horizontal line drawing function (optionally using character .IR c ). . +.TP .ESCq L Nc Vertical line drawing function (optionally using character .IR c ). . +.TP +.ESC m c +Change to color with one-character name\~\c +.IR c . +. +.TP +.ESC m( cl +Change to color with two-character name +.IR cl . +. +.TP .ESC[] m color -Change to color +Change to color with arbitrarily long name .IR color . . -Alternative forms -.escarg m( co -and -.escarg m c . -. +.TP .ESC[] m "" Switch back to previous color. . +.TP +.ESC M c +Change filling color for closed drawn objects to color with +one-character name\~\c +.IR c . +. +.TP +.ESC M( cl +Change filling color for closed drawn objects to color with +two-character name +.IR cl . +. +.TP .ESC[] M color -Change filling color for closed drawn objects to color +Change filling color for closed drawn objects to color with +arbitrarily long name .IR color . . -Alternative forms -.escarg M( co -and -.escarg M c . -. +.TP .ESC[] M "" Switch to previous fill color. . +.TP .ESC n r The numerical value stored in the register variable with the -1-character name +one-character name\~\c .IR r . . +.TP .ESC n( re The numerical value stored in the register variable with the -2-character name +two-character name .IR re . . +.TP .ESC[] n reg -The numerical value stored in the register variable with arbitrary -length name +The numerical value stored in the register variable with arbitrarily +long name .IR reg . . +.TP .ESCq N n -Typeset the character with code +Typeset the glyph with index\~\c .I n -in the current font, no special fonts are searched. +in the current font. . -Useful for adding characters to a font using the +No special fonts are searched. +. +Useful for adding (named) entities to a document using the .request char -request. +request and friends. . +.TP .ESCq o abc.\|.\|.\& -Overstrike characters +Overstrike glyphs .IR a , .IR b , .IR c , etc. . -.ESC O 0 +.TP +.ESC O0 Disable glyph output. . Mainly for internal use. . -.ESC O 1 +.TP +.ESC O1 Enable glyph output. . Mainly for internal use. . +.TP .ESC p Break and spread output line. . +.TP .ESC r Reverse 1\ em vertical motion (reverse line in nroff). . +.TP .ESCq R "name\~\[+-]n" The same as .request .nr .I name .IR \[+-]n . . +.TP +.ESC s \[+-]N +Set/increase/decrease the point size to/by +.I N +scaled points; +.I N +is a one-digit number in the range 1 to\~9. +. +Same as +.request ps +request. +. +.TP +.ESC s( \[+-]N +.TQ +.ESC s\[+-]( N +Set/increase/decrease the point size to/by +.I N +scaled points; +.I N +is a two-digit number \[>=]1. +. +Same as +.request ps +request. +. +.TP .ESC[] s \[+-]N -Set the point size to +.TQ +.ESC[] s\[+-] N +.TQ +.ESCq s \[+-]N +.TQ +.ESCq s\[+-] N +Set/increase/decrease the point size to/by .I N scaled points. . -Note the alternative forms -.BI \[rs]s \[+-] [ N ]\c -, -.BI \[rs]s' \[+-]N '\c -.Text , -.BI \[rs]s \[+-] ' N '\c -.Text , -.escarg s( \[+-]xy\c -.Text , -.BI \[rs]s \[+-] ( xy\c -.Text , -.escarg s \[+-]x . Same as .request ps request. . +.TP .ESCq S N -Slant output +Slant output by .I N degrees. . +.TP .ESC t Non-interpreted horizontal tab. . +.TP .ESC u Reverse (up) 1/2 em vertical motion (1/2 line in nroff). . +.TP .ESCq v N Local vertical motion; move down .I N (up if negative). . +.TP +.ESC V e +The contents of the environment variable with one-character +name\~\c +.IR e . +. +.TP +.ESC V( ev +The contents of the environment variable with two-character name +.IR ev . +. +.TP .ESC[] V env -The contents of the environment variable +The contents of the environment variable with arbitrarily long name .IR env . . -Alternative forms -.escarg V( xy -and -.escarg V x . -. +.TP .ESCq w string -The width of the character sequence +The width of the glyph sequence .IR string . . +.TP .ESCq x N Extra line-space function (negative before, positive after). . +.TP .ESCq X string Output .I string as device control function. . +.TP +.ESC Y n +Output string variable or macro with one-character name\~\c +.I n +uninterpreted as device control function. +. +.TP +.ESC Y( nm +Output string variable or macro with two-character name +.I nm +uninterpreted as device control function. +. +.TP .ESC[] Y name -Output string variable or macro +Output string variable or macro with arbitrarily long name .I name uninterpreted as device control function. . -Alternative forms -.escarg Y( xy -and -.escarg Y x . -. +.TP .ESC z c Print .I c with zero width (without spacing). . +.TP .ESCq Z anything Print .I anything @@ -2908,7 +3270,7 @@ names with two or more characters. . .P If a backslash is followed by a character that does not constitute a -defined escape sequence the backslash is silently ignored and the +defined escape sequence, the backslash is silently ignored and the character maps to itself. . . @@ -2916,6 +3278,10 @@ character maps to itself. .SS "Special Characters" .\" -------------------------------------------------------------------- . +[Note: `Special Characters' is a misnomer; those entities are (output) +glyphs, not (input) characters.] +. +.P Common special characters are predefined by escape sequences of the form .BI \[rs]( xy @@ -2927,51 +3293,71 @@ and Some of these exist in the usual font while most of them are only available in the special font. . -Below you'll find a selection of the most important glyphs; a complete +Below you can find a selection of the most important glyphs; a complete list can be found in .BR groff_char (@MAN7EXT@). .RS .P .PD 0 . +.TP .ESC (bu Bullet sign +.TP .ESC (co Copyright +.TP .ESC (ct Cent +.TP .ESC (dd Double dagger +.TP .ESC (de Degree +.TP .ESC (dg Dagger -.ESC (rs +.TP +.ESC (rq Printable double quote +.TP .ESC (em Em-dash +.TP .ESC (hy Hyphen +.TP .ESC (rg Registered sign +.TP .ESC (rs Printable backslash character +.TP .ESC (sc Section sign +.TP .ESC (ul Underline character +.TP .ESC (== Identical +.TP .ESC (>= Larger or equal +.TP .ESC (<= Less or equal +.TP .ESC (!= Not equal +.TP .ESC (-> Right arrow +.TP .ESC (<- Left arrow +.TP .ESC (+- Plus-minus sign .PD @@ -2995,11 +3381,12 @@ So strings and macros without arguments are roughly equivalent; it is possible to call a string like a macro and vice-versa, but this often leads to unpredictable results. . -The following strings are predefined in groff. +The following string is the only one predefined in groff. . +.TPx .STRING .T The name of the current output device as specified by the -.option -T +.option \-T command line option. . . @@ -3014,9 +3401,9 @@ above), but some can also hold a string value. . .P Each register is given a name. -Arbitrary registers can be defined and set with the request +Arbitrary registers can be defined and set with the .request nr -.IR register . +request. . .P The value stored in a register can be retrieved by the escape sequences @@ -3028,7 +3415,7 @@ Most useful are predefined registers. . In the following the notation .I name -is used to refer to a register called +is used to refer to .register name to make clear that we speak about registers. . @@ -3051,154 +3438,201 @@ results from request calls. .P .PD 0 . +.TPx .REG .$ Number of arguments in the current macro or string. . +.TPx .REG .a Post-line extra line-space most recently utilized using -.escq x N . +.esc x . . +.TPx .REG .A Set to\~1 in .B troff if option -.B \-A +.option \-A is used; always\~1 in .BR nroff . . +.TPx +.REG .br +Within a macro, set to\~1 if macro called with the `normal' control +character, and to\~0 otherwise. +. +.TPx .REG .c Current input line number. . +.TPx .REG .C 1\~if compatibility mode is in effect, 0\~otherwise. . +.TPx .REG .cdp -The depth of the last character added to the current environment. -It is positive if the character extends below the baseline. +The depth of the last glyph added to the current environment. . +It is positive if the glyph extends below the baseline. +. +.TPx .REG .ce The number of lines remaining to be centered, as set by the .request ce request. . +.TPx .REG .cht -The height of the last character added to the current environment. -It is positive if the character extends above the baseline. +The height of the last glyph added to the current environment. . +It is positive if the glyph extends above the baseline. +. +.TPx .REG .color 1\~if colors are enabled, 0\~otherwise. . +.TPx .REG .csk -The skew of the last character added to the current environment. -The skew of a character is how far to the right of the center of a character -the center of an accent over that character should be placed. +The skew of the last glyph added to the current environment. +. +The skew of a glyph is how far to the right of the center of a glyph +the center of an accent over that glyph should be placed. . +.TPx .REG .d Current vertical place in current diversion; equal to .register nl . . +.TPx .REG .ev The name or number of the current environment (string-valued). . +.TPx .REG .f Current font number. . +.TPx .REG .fam The current font family (string-valued). . +.TPx .REG .fn The current (internal) real font name (string-valued). . +.TPx .REG .fp The number of the next free font position. . +.TPx .REG .g Always 1 in GNU troff. . Macros should use it to test if running under groff. . +.TPx .REG .h Text base-line high-water mark on current page or diversion. . +.TPx .REG .H Available horizontal resolution in basic units. . +.TPx .REG .height The current font height as set with .request \[rs]H . . +.TPx .REG .hla The current hyphenation language as set by the -.B .hla +.request hla request. . +.TPx .REG .hlc The number of immediately preceding consecutive hyphenated lines. . +.TPx .REG .hlm The maximum allowed number of consecutive hyphenated lines, as set by the .request hlm request. . +.TPx .REG .hy The current hyphenation flags (as set by the .request hy request). . +.TPx .REG .hym The current hyphenation margin (as set by the .request hym request). . +.TPx .REG .hys The current hyphenation space (as set by the .request hys request). . +.TPx .REG .i -Current ident. +Current indentation. . +.TPx .REG .in -The indent that applies to the current output line. +The indentation that applies to the current output line. . +.TPx .REG .int Positive if last output line contains .esc c . . +.TPx .REG .kern 1\~if pairwise kerning is enabled, 0\~otherwise. . +.TPx .REG .l Current line length. . +.TPx .REG .lg The current ligature mode (as set by the .request lg request). . +.TPx .REG .linetabs The current line-tabs mode (as set by the .request linetabs request). . +.TPx .REG .ll The line length that applies to the current output line. . +.TPx .REG .lt The title length (as set by the .request lt request). . +.TPx .REG .m The current drawing color (string-valued). . +.TPx .REG .M The current background color (string-valued). . +.TPx .REG .n Length of text portion on previous output line. . +.TPx .REG .ne The amount of space that was needed in the last .request ne @@ -3207,74 +3641,95 @@ request that caused a trap to be sprung. Useful in conjunction with .register .trunc . . +.TPx .REG .ns 1\~if in no-space mode, 0\~otherwise. . +.TPx .REG .o Current page offset. . +.TPx .REG .p Current page length. . +.TPx .REG .pe 1\~during page ejection, 0\~otherwise. . +.TPx .REG .pn The number of the next page: either the value set by a .request pn request, or the number of the current page plus\ 1. . +.TPx .REG .ps -The current pointsize in scaled points. +The current point size in scaled points. . +.TPx .REG .psr -The last-requested pointsize in scaled points. +The last-requested point size in scaled points. . +.TPx .REG .pvs The current post-vertical line spacing. . +.TPx .REG .rj -The number of lines to be right-justified as set by the rj request. +The number of lines to be right-justified as set by the +.request rj +request. . +.TPx .REG .s Current point size as a decimal fraction. . +.TPx .REG .slant The slant of the current font as set with .request \[rs]S . . +.TPx .REG .sr -The last requested pointsize in points as a decimal fraction +The last requested point size in points as a decimal fraction (string-valued). . +.TPx .REG .ss The value of the parameters set by the first argument of the .request ss request. . +.TPx .REG .sss The value of the parameters set by the second argument of the .request ss request. . +.TPx .REG .sty The current font style (string-valued). . +.TPx .REG .t -Distance to the next trap. +Vertical distance to the next trap. . +.TPx .REG .T Set to\~1 if option -.B \-T +.option \-T is used. . +.TPx .REG .tabs A string representation of the current tab settings suitable for use as an argument to the .request ta request. . +.TPx .REG .trunc The amount of vertical space truncated by the most recently sprung vertical position trap, or, if the trap was sprung by a @@ -3282,45 +3737,57 @@ vertical position trap, or, if the trap was sprung by a request, minus the amount of vertical motion produced by .request .ne . . -In other words, at the point a trap is sprung, it represents -the difference of what the vertical position would have been but for -the trap, and what the vertical position actually is. -. Useful in conjunction with the .register .ne . . +.TPx .REG .u -Equal to 1 in fill mode and 0 in nofill mode. +Equal to 1 in fill mode and 0 in no-fill mode. . +.TPx .REG .U Equal to 1 in safer mode and 0 in unsafe mode. . +.TPx .REG .v Current vertical line spacing. . +.TPx .REG .V Available vertical resolution in basic units. . +.TPx .REG .vpt -1\~ if vertical position traps are enabled, 0\~otherwise. +1\~if vertical position traps are enabled, 0\~otherwise. . +.TPx .REG .w -Width of previous character. +Width of previous glyph. . +.TPx .REG .warn The sum of the number codes of the currently enabled warnings. . +.TPx .REG .x The major version number. . +.TPx .REG .y The minor version number. . +.TPx .REG .Y The revision number of groff. . +.TPx .REG .z Name of current diversion. +. +.TPx +.REG .zoom +Zoom factor for current font (in multiples of 1/1000th; zero if no +magnification). .PD . . @@ -3334,100 +3801,124 @@ customizing a document. . .P .PD 0 +.TPx .REG % Current page number. . +.TPx .REG c. Current input line number. . +.TPx .REG ct Character type (set by width function .esc w ). . +.TPx .REG dl Maximal width of last completed diversion. . +.TPx .REG dn Height of last completed diversion. . +.TPx .REG dw Current day of week (1-7). . +.TPx .REG dy Current day of month (1-31). . +.TPx .REG hours The number of hours past midnight. . Initialized at start-up. . +.TPx .REG hp Current horizontal position at input line. . +.TPx .REG llx Lower left x-coordinate (in PostScript units) of a given PostScript image (set by .request .psbb ). . +.TPx .REG lly Lower left y-coordinate (in PostScript units) of a given PostScript image (set by .request .psbb ). . +.TPx .REG ln Output line number. . +.TPx .REG minutes The number of minutes after the hour. . Initialized at start-up. . +.TPx .REG mo Current month (1-12). . +.TPx .REG nl Vertical position of last printed text base-line. . +.TPx .REG rsb Like .register sb , -but takes account of the heights and depths of characters. +but takes account of the heights and depths of glyphs. . +.TPx .REG rst Like .register st , -but takes account of the heights and depths of characters. +but takes account of the heights and depths of glyphs. . +.TPx .REG sb Depth of string below base line (generated by width function .esc w ). . +.TPx .REG seconds The number of seconds after the minute. . Initialized at start-up. . +.TPx .REG skw -Right skip width from the center of the last character in the +Right skip width from the center of the last glyph in the .esc w argument. . +.TPx .REG slimit If greater than 0, the maximum number of objects on the input stack. . If \[<=]0 there is no limit, i.e., recursion can continue until virtual memory is exhausted. . +.TPx .REG ssc The amount of horizontal space (possibly negative) that should be -added to the last character before a subscript (generated by width +added to the last glyph before a subscript (generated by width function .esc w ). . +.TPx .REG st Height of string above base line (generated by width function .esc w ). . +.TPx .REG systat The return value of the .I system() @@ -3435,19 +3926,23 @@ function executed by the last .request sy request. . +.TPx .REG urx Upper right x-coordinate (in PostScript units) of a given PostScript image (set by .request .psbb ). . +.TPx .REG ury Upper right y-coordinate (in PostScript units) of a given PostScript image (set by .request .psbb ). . +.TPx .REG year The current year (year 2000 compliant). . +.TPx .REG yr Current year minus 1900. . @@ -3479,7 +3974,9 @@ on how to invoke this. .\" -------------------------------------------------------------------- . Report bugs to the -.MTO bug-groff@gnu.org "groff bug mailing list" . +.MT bug-groff@gnu.org +groff bug mailing list +.ME . Include a complete, self-contained example that will allow the bug to be reproduced, and say which version of groff you are using. . @@ -3488,16 +3985,18 @@ be reproduced, and say which version of groff you are using. .SH AUTHORS .\" -------------------------------------------------------------------- . -Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 +Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. . .P This document is distributed under the terms of the FDL (GNU Free -Documentation License) version 1.1 or later. +Documentation License) version 1.3 or later. . You should have received a copy of the FDL on your system, it is also available on-line at the -.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" . +.UR http://\:www.gnu.org/\:copyleft/\:fdl.html +GNU copyleft site +.UE . . .P This document is part of @@ -3505,9 +4004,13 @@ This document is part of the GNU roff distribution. . It was written by -.MTO bwarken@mayn.de "Bernd Warken" ; +.MT bwarken@mayn.de +Bernd Warken +.ME ; it is maintained by -.MTO wl@gnu.org "Werner Lemberg" . +.MT wl@gnu.org +Werner Lemberg +.ME . . . .\" -------------------------------------------------------------------- @@ -3536,7 +4039,7 @@ elements that are specific to groff. . .TP .BR groff_char (@MAN7EXT@) -the predefined groff characters (glyphs). +the predefined groff special characters (glyphs). . .TP .BR groff_font (@MAN5EXT@) @@ -3549,8 +4052,9 @@ pointers to further documentation. . .TP .I [CSTR\~#54] -.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:54.ps \ - "Nroff/\:Troff User's Manual by Osanna & Kernighan" +.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz +Nroff/\:Troff User's Manual by Ossanna & Kernighan +.UE \[em] the bible for classical troff. . .cp \n[groff_C] diff --git a/contrib/groff/man/groff_char.man b/contrib/groff/man/groff_char.man index c38690039c..d8e10c2d56 100644 --- a/contrib/groff/man/groff_char.man +++ b/contrib/groff/man/groff_char.man @@ -17,14 +17,14 @@ groff_char(7) This file is part of groff (GNU roff). File position: /man/groff_char.man -Last update: 05 Dec 2004 -Copyright (C) 1989-2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. written by Werner Lemberg with additions by Bernd Warken Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being this .ig-section and AUTHOR, with no Front-Cover Texts, and with no Back-Cover Texts. @@ -41,7 +41,6 @@ FDL in the main directory of the groff source package. .cp 0 . .\" groff only -.if \n(.g .mso www.tmac .\".if \n(.g .ne 2v .\".if \n(.g .sv 2v . @@ -357,9 +356,9 @@ FDL in the main directory of the groff source package. . This manual page lists the standard .B groff -glyph names and the default input mapping, \%latin-1. +glyph names and the default input mapping, \%latin1. . -The glyphs in this document will look different depending +The glyphs in this document look different depending on which output device was chosen (with option .B \-T for the @@ -367,7 +366,7 @@ for the program or the roff formatter). . Glyphs not available for the device that -is being used to print or view this manual page will be marked with +is being used to print or view this manual page are marked with .ie \n(.g `(N/A)'; the device currently used is `\*(.T'. .el `(N/A)'. . @@ -381,7 +380,7 @@ for further glyphs. On ASCII platforms, input character codes in the range 0 to 127 (decimal) represent the usual \%7-bit ASCII characters, while codes between 127 and 255 are interpreted as the corresponding characters in the -.I \%Latin-1 +.I \%latin1 .RI ( \%ISO-8859-1 ) code set by default. . @@ -393,20 +392,12 @@ Note that some of the input characters are reserved by either for internal use or for special input purposes. . On EBCDIC platforms, only code page -.B cp1047 -is supported (which contains the same characters as \%Latin-1; the +.I cp1047 +is supported (which contains the same characters as \%latin1; the input encoding file is called \f(CWcp1047.tmac\fP). . Again, some input characters are reserved for internal and special purposes. . -It is rather straightforward (for the experienced user) to set up other -\%8-bit encodings like -.IR \%Latin-2 ; -since -.B groff -will use Unicode in the next major version, no additional encodings -are provided. -. . .P All roff systems provide the concept of named glyphs. @@ -420,7 +411,7 @@ character representations outside of the printable \%7-bit ASCII range. . .P Some of the predefined groff escape sequences (with names of length\ 1) -also produce single characters; these exist for historical reasons or +also produce single glyphs; these exist for historical reasons or are printable versions of syntactical characters. . They include `\f(CW\e\e\fP', `\f(CW\e\'\fP', `\f(CW\e`\fP', `\f(CW\e-\fP', @@ -459,7 +450,7 @@ keyboard, or by a groff escape sequence. .TP .I "Input code" applies to glyphs which can be input with a single character, and -gives the ISO \%Latin-1 decimal code of that input character. +gives the ISO \%latin1 decimal code of that input character. . Note that this code is equivalent to the lowest 256 Unicode characters, including \%7-bit ASCII in the range 0 to\ 127. @@ -483,8 +474,8 @@ is the glyph name used in composite glyph names. These are the basic glyphs having 7-bit ASCII code values assigned. . They are identical to the printable characters of the -character standards \%ISO-8859-1 (\%Latin-1) and Unicode (range -.IR "C0 Controls and Basic Latin" ). +character standards \%ISO-8859-1 (\%latin1) and Unicode (range +.IR "Basic Latin" ). . The glyph names used in composite glyph names are `u0020' up to `u007E'. . @@ -523,31 +514,31 @@ themselves; the only exceptions are the following characters: . .TP .B \` -the ISO \%Latin-1 `Grave Accent' (code\ 96) prints as `, a left single +the ISO \%latin1 `Grave Accent' (code\ 96) prints as `, a left single quotation mark; the original character can be obtained with `\f(CW\e`\fP'. . . .TP .B \*(aq -the ISO \%Latin-1 `Apostrophe' (code\ 39) prints as ', a right single +the ISO \%latin1 `Apostrophe' (code\ 39) prints as ', a right single quotation mark; the original character can be obtained with `\f(CW\e(aq\fP'. . . .TP .B - -the ISO \%Latin-1 `Hyphen, Minus Sign' (code\ 45) prints as a hyphen; a +the ISO \%latin1 `Hyphen, Minus Sign' (code\ 45) prints as a hyphen; a minus sign can be obtained with `\f(CW\e-\fP'. . . .TP .B ~ -the ISO \%Latin-1 `Tilde' (code\ 126) is reduced in size to be usable as +the ISO \%latin1 `Tilde' (code\ 126) is reduced in size to be usable as a diacritic; a larger glyph can be obtained with `\f(CW\e(ti\fP'. . . .TP .B ^ -the ISO \%Latin-1 `Circumflex Accent' (code\ 94) is reduced in size to be +the ISO \%latin1 `Circumflex Accent' (code\ 94) is reduced in size to be usable as a diacritic; a larger glyph can be obtained with `\f(CW\e(ha\fP'. . . @@ -602,10 +593,10 @@ usable as a diacritic; a larger glyph can be obtained with `\f(CW\e(ha\fP'. .\" -------------------------------------------------------------------- . They are interpreted as printable characters according to the -.I Latin-1 -.RI ( iso-8859-1 ) +.I latin1 +.RI ( ISO-8859-1 ) code set, being identical to the Unicode range -.IR "C1 Controls and Latin-1 Supplement" . +.IR "Latin-1 Supplement" . . . .P @@ -616,7 +607,7 @@ characters. .TP 160 . -the ISO \%Latin-1 +the ISO \%latin1 .I no-break space is mapped to `\f(CW\e~\fP', the stretchable space character. . @@ -636,7 +627,7 @@ The remaining ranges (\%161\-172, \%174\-255) are printable characters that print as themselves. . Although they can be specified directly with the keyboard on systems -with a \%Latin-1 code page, it is better to use their glyph names; +with a \%latin1 code page, it is better to use their glyph names; see next section. . .P @@ -749,17 +740,11 @@ sequences. describes how these escape sequences look. . Glyph names can consist of quite arbitrary characters from the -ASCII or \%Latin-1 code set, not only alphanumeric characters. +ASCII or \%latin1 code set, not only alphanumeric characters. . Here some examples: . .TP -\f(CW\e\fP\fIc\fP -A glyph having the name -.IR c , -which consists of a single character (length\ 1). -. -.TP \f(CW\e(\fP\fIch\fP A glyph having the 2-character name .IR ch . @@ -770,6 +755,14 @@ A glyph having the name .I char_name (having length 1, 2, 3, .\|.\|.). . +Note that `\fIc\fP' is not the same as +`\f(CW\e[\fP\fIc\fP\f(CW]\fP' (\fIc\fP\ a single character): +The latter is internally mapped to glyph name `\e\fIc\fP'. +. +By default, groff defines a single glyph name starting with a backslash, +namely \%`\e-', which can be either accessed as `\f(CW\e\-\fP' or +`\f(CW\e[-]\fP'. +. .TP \f(CW\e[\fP\fIbase_glyph composite_1 composite_2 .\|.\|.\fP\f(CW]\fP A composite glyph; see below for a more detailed description. @@ -797,6 +790,11 @@ In the following, a plus sign in the `Notes' column indicates that this particular glyph name appears in the PS version of the original troff documentation, CSTR\ 54. . +.P +Entries marked with `***' denote glyphs for mathematical purposes (mainly +used for DVI output). Normally, such glyphs have metrics which make them +unusable in normal text. +. . .P .CT "\fIOutput" "\f(CW\e[-D]" "" "Ocircumflex" "u0066_0066_006C" @@ -1260,7 +1258,7 @@ square root sign. .2e hbar uni210F u210F . .Pa -.I Greek characters +.I Greek glyphs .P These glyphs are intended for technical use, not for real Greek; normally, the uppercase letters have upright shape, and the lowercase ones are @@ -1274,12 +1272,12 @@ only the glyph shapes in the Unicode book could be used as a reference. . Starting with Unicode\ 3.0, the reference glyphs have been exchanged and described verbally also: In mathematical context, U+03D5 is the stroked -variant and U+03C5 the curly glyph. +variant and U+03C6 the curly glyph. . Unfortunately, most font vendors didn't update their fonts to this (incompatible) change in Unicode. . -At the time of this writing (February 2003), it is not clear yet whether +At the time of this writing (January 2006), it is not clear yet whether the Adobe Glyph Names `phi' and `phi1' also change its meaning if used for mathematics, thus compatibility problems are likely to happen \(en being conservative, groff currently assumes that `phi' in a PostScript symbol @@ -1358,17 +1356,17 @@ phi, and `\f(CW\e[+f]\fP' the curly variant. .\" -------------------------------------------------------------------- . Copyright \(co 1989-2000, 2001, 2002, 2003, -2004 Free Software Foundation, Inc. +2004, 2006, 2008, 2009 Free Software Foundation, Inc. . .P This document is distributed under the terms of the FDL (GNU Free -Documentation License) version 1.1 or later. +Documentation License) version 1.3 or later. . You should have received a copy of the FDL on your system, it is also available on-line at the -.ie \n(.g \ -. URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" . -.el GNU copyleft site . +.UR http://\:www.gnu.org/\:copyleft/\:fdl.html +GNU copyleft site +.UE . . .P This document is part of @@ -1376,17 +1374,17 @@ This document is part of the GNU roff distribution. . It was written by -.ie \n(.g \ -. MTO jjc@jclark.com "James Clark" -.el James Clark +.MT jjc@jclark.com +James Clark +.ME with additions by -.ie \n(.g \ -. MTO wl@gnu.org "Werner Lemberg" -.el Werner Lemberg +.MT wl@gnu.org +Werner Lemberg +.ME and -.ie \n(.g \ -. MTO bwarken@mayn.de "Bernd Warken" . -.el Bernd Warken . +.MT bwarken@mayn.de +Bernd Warken +.ME . . . .\" -------------------------------------------------------------------- @@ -1395,11 +1393,11 @@ and . .TP .BR groff (@MAN1EXT@) -the GNU roff formatter. +the GNU roff formatter . .TP .BR groff (@MAN7EXT@) -a short reference of the groff formatting language. +a short reference of the groff formatting language . . .P @@ -1409,8 +1407,9 @@ No. 2, Summer 1989 . . .P -.ie \n(.g .URL http://\:www.unicode.org "The Unicode Standard" -.el The Unicode Standard +.UR http://\:www.unicode.org +The Unicode Standard +.UE . .cp \n[groff_char_C] . diff --git a/contrib/groff/man/groff_diff.man b/contrib/groff/man/groff_diff.man index 94873dd639..7f39a50a73 100644 --- a/contrib/groff/man/groff_diff.man +++ b/contrib/groff/man/groff_diff.man @@ -3,19 +3,18 @@ .ig groff_diff.man -Last update : 26 Jul 2004 - This file is part of groff, the GNU roff type-setting system. It is the source of the man-page groff_diff(7). -Copyright (C) 1989, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +Copyright (C) 1989, 2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. written by James Clark modified by Werner Lemberg Bernd Warken Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being this .ig-section and AUTHORS, with no Front-Cover Texts, and with no Back-Cover Texts. @@ -24,83 +23,16 @@ A copy of the Free Documentation License is included as a file called FDL in the main directory of the groff source package. .. . +. .\" -------------------------------------------------------------------- -.\" Setup +.\" Local definitions .\" -------------------------------------------------------------------- . -.do nr groff_diff_C \n[.C] -.cp 0 -. -.mso www.tmac -. -.if n \{\ -. mso tty-char.tmac -. ftr CR R -. ftr CI I -. ftr CB B -.\} -. -.if '\*[.T]'dvi' \ -. ftr CB CW -. .\" define a string tx for the TeX logo .ie t .ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X .el .ds tx TeX . . -.\" -------------------------------------------------------------------- -.\" start of macro definitions -. -.eo -. -.de c -.. -. -.de TQ -. br -. ns -. TP \$1 -.. -.de Text -. RI "\$*" -.. -.de Topic -. TP 2m -. Text \[bu] -.. -.de squoted -. ds @arg1 \$1 -. shift -.\" Text \[oq]\f[CB]\*[@arg1]\f[]\[cq]\$* -. Text \[oq]\f[B]\*[@arg1]\f[]\[cq]\$* -. rm @arg1 -.. -.c A shell command line -.de ShellCommand -. br -. IR "shell#" "\h'1m'\f[CB]\$*\f[]\/" -.. -.c reference of a request or macro -.de request -. ds @arg1 \$1 -. shift 1 -.\" Text \f[CB]\*[@arg1]\f[]\$* -. Text \f[B]\*[@arg1]\f[]\$* -. rm @arg1 -.. -.als option request -. -.c representation of an escape sequence -.de esc -. ds @arg1 \$1 -. shift -.\" Text \f[CB]\[rs]\*[@arg1]\f[]\$* -. Text \f[B]\[rs]\*[@arg1]\&\f[]\$* -. rm @arg1 -.. -.ec -.\" end of macro definitions -. .\" from old groff_out.man .ie \n(.g \ . ds ic \/ @@ -125,13 +57,13 @@ This manual page describes the language differences between .IR groff , the GNU .I roff -text processing system and the classical +text processing system, and the classical .I roff formatter of the freely available Unix\~7 of the 1970s, documented in the .I Troff User's Manual by -.I Osanna +.I Ossanna and .IR Kernighan . This inludes the roff language as well as the intermediate output @@ -165,11 +97,9 @@ are described in detail. The names of number registers, fonts, strings/\:macros/\:diversions, special characters (glyphs), and colors can be of any length. . -In escape sequences, additionally to the classical -.BI ( xx -construction for a two-character name, you can use -.BI [ xxx ] -for a name of arbitrary length. +In escape sequences, additionally to the classical `\fB(\fP\fIxx\fP' +construction for a two-character glyph name, you can use +`\fB[\fP\fIxxx\fP\fB]\fP' for a name of arbitrary length. . .TP .BI \[rs][ xxx ] @@ -187,7 +117,7 @@ See the .I groff info file for details how a glyph name for a composite glyph is constructed, and .BR groff_char (@MAN7EXT@) -for list of glyph name components used composite glyph names. +for a list of glyph name components used in composite glyph names. . .TP .BI \[rs]f[ xxx ] @@ -196,7 +126,7 @@ Set font . Additionally, .B \[rs]f[] -is a new syntax equal to +is a new syntax form equal to .BR \[rs]fP , i.e., to return to the previous font. . @@ -217,7 +147,7 @@ Interpolate number register . . .\" -------------------------------------------------------------------- -.SS "Fractional pointsizes" +.SS "Fractional point sizes" .\" -------------------------------------------------------------------- . A @@ -230,13 +160,13 @@ is specified in the .B DESC file (1 by default). . -There is a new scale indicator +There is a new scale indicator\~\c .B z that has the effect of multiplying by sizescale. . Requests and escape sequences in troff interpret arguments that -represent a pointsize as being in units of scaled points, but they -evaluate each such argument using a default scale indicator of +represent a point size as being in units of scaled points, but they +evaluate each such argument using a default scale indicator of\~\c .BR z . Arguments treated in this way are the argument to the .B ps @@ -251,30 +181,30 @@ escape sequence, and those variants of the escape sequence that take a numeric expression as their argument. . .P -For example, suppose sizescale is 1000; then a scaled point will be +For example, suppose sizescale is 1000; then a scaled point is equivalent to a millipoint; the call .B .ps\ 10.25 is equivalent to .B .ps\ 10.25z -and so sets the pointsize to 10250 scaled points, which is equal to +and so sets the point size to 10250 scaled points, which is equal to 10.25 points. . .P The number register .B \[rs]n[.s] -returns the pointsize in points as decimal fraction. +returns the point size in points as decimal fraction. . There is also a new number register .B \[rs]n[.ps] -that returns the pointsize in scaled points. +that returns the point size in scaled points. . .P It would make no sense to use the -.B z +.BR z \~\c scale indicator in a numeric expression whose default scale indicator was neither .B u -nor +nor\~\c .BR z , and so .B troff @@ -282,9 +212,9 @@ disallows this. . Similarly it would make no sense to use a scaling indicator other than .B z -or +or\~\c .B u -in a numeric expression whose default scale indicator was +in a numeric expression whose default scale indicator was\~\c .BR z , and so .B troff @@ -302,7 +232,7 @@ is equal to Be sure not to confuse the .B s and -.B z +.BR z \~\c scale indicators. . . @@ -347,7 +277,7 @@ as the default scaling indicator. . If .I c -is missing, ignore scaling indicators in the evaluation of +is missing, ignore scaling indicators in the evaluation of\~\c .IR e . . . @@ -359,32 +289,32 @@ is missing, ignore scaling indicators in the evaluation of .BI \[rs]A' anything ' This expands to .B 1 -or -.B 0 -resp., depending on whether +or\~\c +.BR 0 , +depending on whether .I anything is or is not acceptable as the name of a string, macro, diversion, number register, environment, font, or color. -It will return\~\c +It returns\~\c .B 0 if .I anything is empty. . -This is useful if you want to lookup user input in some sort of +This is useful if you want to look up user input in some sort of associative table. . .TP .BI \[rs]B' anything ' This expands to .B 1 -or -.B 0 -resp., depending on whether +or\~\c +.BR 0 , +depending on whether .I anything is or is not a valid numeric expression. . -It will return\~\c +It returns\~\c .B 0 if .I anything @@ -405,25 +335,25 @@ and is available in compatibility mode. .TP .B \[rs]E This is equivalent to an escape character, but it is not interpreted in -copy-mode. +copy mode. . For example, strings to start and end superscripting could be defined like this . .RS .IP -.ft CB -.Text .ds { \[rs]v'\-.3m'\[rs]s'\[rs]En[.s]*6u/10u' -.br -.Text .ds } \[rs]s0\[rs]v'.3m' -.ft +.EX +\&.ds { \[rs]v'\-.3m'\[rs]s'\[rs]En[.s]*6u/10u' +\&.ds } \[rs]s0\[rs]v'.3m' +.EE +.RE . -.P +.IP The use of .B \[rs]E -ensures that these definitions will work even if +ensures that these definitions work even if .B \[rs]*{ -gets interpreted in copy-mode (for example, by being used in a macro +gets interpreted in copy mode (for example, by being used in a macro argument). .RE . @@ -468,18 +398,18 @@ switches back to the previous color. . .TP .BI \[rs]N' n ' -Typeset the glyph with index +Typeset the glyph with index\~\c .I n in the current font. -.I n +.IR n \~\c can be any integer. . Most devices only have glyphs with indices between 0 and 255. . If the current font does not contain a glyph with that code, -special fonts will +special fonts are .I not -be searched. +searched. . The .B \[rs]N @@ -488,10 +418,10 @@ escape sequence can be conveniently used in conjunction with the request, for example . .RS -.ft CB .IP -.Text .char \[rs][phone] \[rs]f(ZD\[rs]N'37' -.ft +.EX +\&.char \[rs][phone] \[rs]f(ZD\[rs]N'37' +.EE .RE . .IP @@ -511,10 +441,10 @@ escape sequence is the only way to use these. .BI \[rs]O n .TQ .BI \[rs]O[ n ] -Suppressing troff output. +Suppress troff output. . The escapes -.BR \[rs]02 , +.BR \[rs]O2 , .BR \[rs]O3 , .BR \[rs]O4 , and @@ -545,7 +475,7 @@ also reset the registers .BR \[rs]n[opmaxx] , and .B \[rs]n[opmaxy] -to\~-1. +to\~\-1. . These four registers mark the top left and bottom right hand corners of a box which encompasses all written glyphs. @@ -577,7 +507,7 @@ to produce images in PNG format. . The .B \[rs]O3 -escape will start a new page if the device is not html (to reduce the +escape starts a new page if the device is not html (to reduce the possibility of images crossing a page boundary). . .TP @@ -596,11 +526,16 @@ to stderr. . The position of the image, .IR P , -must be specified and must be one of l, r, c, or i (left, right, -centered, inline). +must be specified and must be one of +.BR l , +.BR r , +.BR c , +or +.B i +(left, right, centered, inline). . .I filename -will be associated with the production of the next inline image. +is associated with the production of the next inline image. .RE . .TP @@ -648,7 +583,7 @@ Interpolate the contents of the environment variable as returned by .BR getenv (3). .B \[rs]V -is interpreted in copy-mode. +is interpreted in copy mode. . .TP .BI \[rs]Y x @@ -668,7 +603,7 @@ permitted for the argument to to contain newlines). . The inclusion of newlines requires an extension to the UNIX troff -output format, and will confuse drivers that do not know about this +output format, and confuses drivers that do not know about this extension. . .TP @@ -696,6 +631,13 @@ In a macro or string, the concatenation of all the arguments with each surrounded by double quotes, and separated by spaces. . .TP +.B \[rs]$^ +In a macro, the representation of all parameters as if they were an +argument to the +.B ds +request. +. +.TP .BI \[rs]$( nn .TQ .BI \[rs]$[ nnn ] @@ -709,7 +651,7 @@ Macros and strings can have an unlimited number of arguments. . .TP .BI \[rs]? anything \[rs]? -When used in a diversion, this will transparently embed +When used in a diversion, this transparently embeds .I anything in the diversion. .I anything @@ -717,7 +659,7 @@ is read in copy mode. . When the diversion is reread, .I anything -will be interpreted. +is interpreted. .I anything may not contain newlines; use .B \[rs]!\& @@ -725,50 +667,48 @@ if you want to embed newlines in a diversion. . The escape sequence .B \[rs]?\& -is also recognised in copy mode and turned into a single internal +is also recognized in copy mode and turned into a single internal code; it is this code that terminates .IR anything . Thus . .RS .IP +.EX .ne 14v+\n(.Vu -.ft CB -.nf -.Text .nr x 1 -.Text .nf -.Text .di d -.Text \[rs]?\[rs]\[rs]?\[rs]\[rs]\[rs]\[rs]?\[rs]\[rs]\[rs]\[rs]\[rs]\[rs]\[rs]\c -.Text \[rs]nx\[rs]\[rs]\[rs]\[rs]?\[rs]\[rs]?\[rs]? -.Text .di -.Text .nr x 2 -.Text .di e -.Text .d -.Text .di -.Text .nr x 3 -.Text .di f -.Text .e -.Text .di -.Text .nr x 4 -.Text .f -.fi -.ft +\&.nr x 1 +\&.nf +\&.di d +\&\[rs]?\[rs]\[rs]?\[rs]\[rs]\[rs]\[rs]?\[rs]\[rs]\[rs]\[rs]\[rs]\[rs]\[rs]\c +\&\[rs]nx\[rs]\[rs]\[rs]\[rs]?\[rs]\[rs]?\[rs]? +\&.di +\&.nr x 2 +\&.di e +\&.d +\&.di +\&.nr x 3 +\&.di f +\&.e +\&.di +\&.nr x 4 +\&.f +.EE .RE . .IP -will print\~\c +prints\~\c .BR 4 . . .TP .B \[rs]/ This increases the width of the preceding glyph so that the -spacing between that glyph and the following glyph will be +spacing between that glyph and the following glyph is correct if the following glyph is a roman glyph. . .if t \{\ -. nop For example, if an italic f is immediately followed by a roman +. nop For example, if an italic\~f is immediately followed by a roman . nop right parenthesis, then in many fonts the top right portion of -. nop the f will overlap the top left of the right parenthesis +. nop the\~f overlaps the top left of the right parenthesis . nop producing \f[I]f\f[R])\f[R], which is ugly. . nop Inserting . B \[rs]/ @@ -784,13 +724,13 @@ intervening space. .TP .B \[rs], This modifies the spacing of the following glyph so that the -spacing between that glyph and the preceding glyph will +spacing between that glyph and the preceding glyph is correct if the preceding glyph is a roman glyph. . .if t \{\ . nop For example, inserting . B \[rs], -. nop between the parenthesis and the f changes +. nop between the parenthesis and the\~f changes . nop \f[R](\f[I]f\f[R] to . ie \n(.g \f[R](\,\f[I]f\f[R]. . el \f[R](\^\f[I]f\f[R]. @@ -819,7 +759,7 @@ This causes the insertion of a zero-width break point. . It is equal to .B \[rs]% -within a word but without insertion of a soft hyphen character. +within a word but without insertion of a soft hyphen glyph. . .TP .B \[rs]# @@ -844,13 +784,13 @@ Create an alias .I xx for number register object named .IR yy . -The new name and the old name will be exactly equivalent. +The new name and the old name are exactly equivalent. . If .I yy is undefined, a warning of type .B reg -will be generated, and the request will be ignored. +is generated, and the request is ignored. . .TP .BI .als\ xx\ yy @@ -859,14 +799,14 @@ Create an alias for request, string, macro, or diversion object named .IR yy . . -The new name and the old name will be exactly equivalent (it is +The new name and the old name are exactly equivalent (it is similar to a hard rather than a soft link). . If .I yy is undefined, a warning of type .B mac -will be generated, and the request will be ignored. +is generated, and the request is ignored. . The .BR de , @@ -877,7 +817,7 @@ The and .B as requests only create a new object if the name of the macro, diversion -or string diversion is currently undefined or if it is defined to be a +or string is currently undefined or if it is defined to be a request; normally they modify the value of an existing object. . .TP @@ -946,34 +886,32 @@ in such a way that and space characters (and some escape sequences) that were formatted and diverted into .I xx -will be treated like ordinary input characters when +are treated like ordinary input characters when .I xx is reread. Useful for diversions in conjunction with the -.B .writem +.B writem request. . It can be also used for gross hacks; for example, this . .RS .IP +.EX .ne 7v+\n(.Vu -.ft CB -.nf -.Text .tr @. -.Text .di x -.Text @nr n 1 -.Text .br -.Text .di -.Text .tr @@ -.Text .asciify x -.Text .x -.fi -.ft +\&.tr @. +\&.di x +\&@nr n 1 +\&.br +\&.di +\&.tr @@ +\&.asciify x +\&.x +.EE .RE . .IP -will set register\~\c +sets register\~\c .B n to\~1. . @@ -990,7 +928,7 @@ Print a backtrace of the input stack on stderr. .BI .blm\ xx Set the blank line macro to .IR xx . -If there is a blank line macro, it will be invoked when a blank line +If there is a blank line macro, it is invoked when a blank line is encountered instead of the usual troff behaviour. . .TP @@ -1001,9 +939,9 @@ These requests are similar to the .B di and .B da -requests with the exception that a partially filled line will not +requests with the exception that a partially filled line does not become part of the diversion (i.e., the diversion always starts with a -new line) but restored after ending the diversion, discarding the +new line) but is restored after ending the diversion, discarding the partially filled line which possibly comes from the diversion. . .TP @@ -1042,81 +980,103 @@ have this property). . .IP 2 Lines can be broken before the character (initially no characters have -this property); a line will not be broken at a character with this -property unless the characters on each side both have non-zero -hyphenation codes. +this property); a line is not broken at a character with this property +unless the characters on each side both have non-zero hyphenation +codes. +This can be overridden with value 64. . .IP 4 Lines can be broken after the character (initially characters .B \-\[rs][hy]\[rs][em] -have this property); a line will not be broken at a character with -this property unless the characters on each side both have non-zero +have this property); a line is not broken at a character with this +property unless the characters on each side both have non-zero hyphenation codes. + +This can be overridden with value 64. . .IP 8 -The character overlaps horizontally (initially characters +The glyph associated with this character overlaps horizontally +(initially characters .B \[rs][ul]\[rs][rn]\[rs][ru]\[rs][radicalex]\[rs][sqrtex] have this property). . .IP 16 -The character overlaps vertically (initially character +The glyph associated with this character overlaps vertically +(initially glyph .B \[rs][br] has this property). . .IP 32 An end-of-sentence character followed by any number of characters with -this property will be treated as the end of a sentence if followed by -a newline or two spaces; in other words the character is transparent -for the purposes of end-of-sentence recognition; this is the same as -having a zero space factor in \*[tx] (initially characters -.B \[dq]')]*\[rs](dg\[rs](rq +this property is treated as the end of a sentence if followed by a +newline or two spaces; in other words the character is transparent for +the purposes of end-of-sentence recognition; this is the same as having +a zero space factor in \*[tx] (initially characters +.B \[dq]')]*\[rs][dg]\[rs][rq] +have this property). +. +.IP 64 +Ignore hyphenation code values of the surrounding characters. +Use this in combination with values 2 and\~4 (initially no characters have this property). .RE . .TP .BI .char\ c\ string -Define glyph +[This request can both define characters and glyphs.] +. +.IP +Define entity\~\c .I c to be .IR string . -Every time glyph +. +To be more precise, define (or even override) a groff entity which +can be accessed with name\~\c +.I c +on the input side, and which uses +.I string +on the output side. +. +Every time glyph\~\c .I c needs to be printed, .I string -will be processed in a temporary environment and the result will be +is processed in a temporary environment and the result is wrapped up into a single object. . -Compatibility mode will be turned off and the escape character will be -set to +Compatibility mode is turned off and the escape character is +set to\~\c .B \[rs] while .I string is being processed. . -Any emboldening, constant spacing or track kerning will be applied to +Any emboldening, constant spacing or track kerning is applied to this object rather than to individual glyphs in .IR string . . .IP -A glyph defined by this request can be used just like a normal -glyph provided by the output device. +A groff object defined by this request can be used just like a +normal glyph provided by the output device. . In particular other characters can be translated to it with the .B tr -request; it can be made the leader character by the +request; it can be made the leader glyph by the .B lc -request; repeated patterns can be drawn with the character using the +request; repeated patterns can be drawn with the glyph using the .B \[rs]l and .B \[rs]L -escape sequences; words containing the character can be hyphenated -correctly, if the +escape sequences; words containing\~\c +.I c +can be hyphenated correctly, if the .B hcode -request is used to give the character a hyphenation code. +request is used to give the object a hyphenation code. . .IP There is a special anti-recursion feature: Use of glyph within the -glyph's definition will be handled like normal glyphs not +glyph's definition is handled like normal glyphs not defined with .BR char . .IP @@ -1151,7 +1111,7 @@ Map glyph name to glyph name .I glyph2 if it is used in -.BI \[rs][ ... ] +.BI \[rs][ .\|.\|. ] with more than one component. . .TP @@ -1178,17 +1138,18 @@ If is non-zero or missing, enable compatibility mode, otherwise disable it. . -In compatibility mode, long names are not recognised, and the +In compatibility mode, long names are not recognized, and the incompatibilities caused by long names do not arise. . .TP .BI .defcolor\ xxx\ scheme\ color_components -Define color. +Define color +.IR xxx . .I scheme can be one of the following values: .B rgb (three components), -.B cym +.B cmy (three components), .B cmyk (four components), and @@ -1220,10 +1181,9 @@ Example: . .RS .IP -.ft CB -.Text .defcolor darkgreen rgb 0.1f 0.5f 0.2f -.br -.ft +.EX +\&.defcolor darkgreen rgb 0.1f 0.5f 0.2f +.EE .RE . .IP @@ -1235,10 +1195,9 @@ request, thus the above statement is equivalent to . .RS .IP -.ft CB -.Text .defcolor darkgreen rgb 0.1 0.5 0.2 -.br -.ft +.EX +\&.defcolor darkgreen rgb 0.1 0.5 0.2 +.EE .RE . .IP @@ -1247,9 +1206,9 @@ The color named (which is device-specific) can't be redefined. . It is possible that the default color for -.esc M +.B \[rs]M and -.esc m +.B \[rs]m is not the same. . .TP @@ -1269,13 +1228,11 @@ The following example .RS .IP .ne 2v+\n(.Vu -.ft CB -.nf -.Text .ds xx aa -.Text .ds yy bb -.Text .dei xx yy -.fi -.ft +.EX +\&.ds xx aa +\&.ds yy bb +\&.dei xx yy +.EE .RE . .IP @@ -1283,10 +1240,9 @@ is equivalent to . .RS .IP -.ft CB -.Text .de aa bb -.br -.ft +.EX +\&.de aa bb +.EE .RE . .TP @@ -1296,6 +1252,23 @@ Similar to the request but compatibility mode is switched off during execution. . .TP +.BI .device\ anything +This is (almost) the same as the +.B \[rs]X +escape. +.I anything +is read in copy mode; a leading\~\c +.B \[dq] +is stripped. +. +.TP +.BI .devicem\ xx +This is the same as the +.B \[rs]Y +escape (to embed the contents of a macro into the intermediate +output preceded with `x\~X'). +. +.TP .BI .do\ xxx Interpret .I .xxx @@ -1306,19 +1279,17 @@ For example, .RS . .IP -.ft CB -.Text .do fam T -.br -.ft +.EX +\&.do fam T +.EE . .P would have the same effect as . .IP -.ft CB -.Text .fam T -.br -.ft +.EX +\&.fam T +.EE . .P except that it would work even if compatibility mode had been enabled. @@ -1358,7 +1329,7 @@ Copy the contents of environment .I xx to the current environment. . -No pushing or popping of environments will be done. +No pushing or popping of environments is done. . .TP .BI .fam\ xx @@ -1377,7 +1348,7 @@ request for more information on font families. . .TP .BI .fchar\ c\ string -Define fallback glyph +Define fallback character (or glyph)\~\c .I c to be .IR string . @@ -1395,7 +1366,7 @@ This test happens before checking special fonts. . .TP .BI .fcolor\ c -Set the fill color to +Set the fill color to\~\c .IR c . If .I c @@ -1404,9 +1375,9 @@ switch to the previous fill color. . .TP .BI .fschar\ f\ c\ string -Define fallback glyph +Define fallback character (or glyph)\~\c .I c -for font +for font\~\c .I f to be .IR string . @@ -1419,21 +1390,21 @@ defined with is searched after the list of fonts declared with the .B fspecial request but before the list of fonts declared with -.BR special . +.BR .special . . .TP .BI .fspecial\ f\ s1\ s2\|.\|.\|.\& -When the current font is +When the current font is\~\c .IR f , fonts .IR s1 , .IR s2 ,\|.\|.\|.\& -will be special, that is, they will searched for glyphs not in +are special, that is, they are searched for glyphs not in the current font. . Any fonts specified in the .B special -request will be searched after fonts specified in the +request are searched after fonts specified in the .B fspecial request. . @@ -1441,11 +1412,11 @@ Without argument, reset the list of global special fonts to be empty. . .TP .BI .ftr\ f\ g -Translate font +Translate font\~\c .I f -to +to\~\c .IR g . -Whenever a font named +Whenever a font named\~\c .I f is referred to in an .B \[rs]f @@ -1464,20 +1435,33 @@ conditional operators, or in the .BR fp , or .BR sty -requests, font +requests, font\~\c .I g -will be used. +is used. If .I g -is missing, or equal to +is missing, or equal to\~\c .I f -then font +then font\~\c .I f -will not be translated. +is not translated. +. +.TP +.BI .fzoom\ f\ zoom +Set zoom factor +.I zoom +for font\~\c +.IR f . +.I zoom +must a non-negative integer multiple of 1/1000th. +If it is missing or is equal to zero, it means the same as 1000, namely no +magnification. +.IR f \~\c +must be a real font name, not a style. . .TP .BI .gcolor\ c -Set the glyph color to +Set the glyph color to\~\c .IR c . If .I c @@ -1519,7 +1503,7 @@ The .B hla request is usually invoked by the .B troffrc -file. +file to set up a default language. . .TP .BI .hlm\ n @@ -1544,7 +1528,7 @@ are counted; explicit hyphens are not. .BI .hpf\ file Read hyphenation patterns from .IR file ; -this will be searched for in the same way that +this is searched for in the same way that .IB name .tmac is searched for when the .BI \-m name @@ -1570,7 +1554,7 @@ is 0-9 or a-f) and .BI ^^ x (character code of\~\c .I x -in the range 0-127) are recognized; other use of +in the range 0-127) are recognized; other use of\~\c .B ^ causes an error. . @@ -1580,20 +1564,20 @@ No macro expansion. .IP \[bu] .B hpf checks for the expression -.B \[rs]patterns{.\|.\|.} +.BR \[rs]patterns{ .\|.\|. } (possibly with whitespace before and after the braces). . Everything between the braces is taken as hyphenation patterns. . Consequently, -.B { -and +.BR { \~\c +and\~\c .B } are not allowed in patterns. . .IP \[bu] Similarly, -.B \[rs]hyphenation{.\|.\|.} +.BR \[rs]hyphenation{ .\|.\|. } gives a list of hyphenation exceptions. . .IP \[bu] @@ -1669,14 +1653,14 @@ to\~\c .IR n : when the current adjustment mode is not\~\c .BR b , -the line will not be hyphenated if the line is no more than +the line is not hyphenated if the line is no more than .I n short. . The default hyphenation margin is\~0. . The default scaling indicator for this request is\~\c -.IR m . +.BR m . The hyphenation margin is associated with the current environment. . The current hyphenation margin is available in the @@ -1689,7 +1673,7 @@ Set the .I hyphenation space to\~\c .IR n : -when the current adjustment mode is\~\c +When the current adjustment mode is\~\c .B b don't hyphenate the line if the line can be justified by adding no more than @@ -1745,17 +1729,15 @@ For example, the following .RS .IP .ne 6v+\n(.Vu -.ft CB -.nf -.Text .ds x a\[rs]t\[rs]c -.Text .ds y b\[rs]t\[rs]c -.Text .ds z c -.Text .ta 1i 3i -.Text \[rs]*x -.Text \[rs]*y -.Text \[rs]*z -.fi -.ft +.EX +\&.ds x a\[rs]t\[rs]c +\&.ds y b\[rs]t\[rs]c +\&.ds z c +\&.ta 1i 3i +\&\[rs]*x +\&\[rs]*y +\&\[rs]*z +.EE .RE . .IP @@ -1763,7 +1745,9 @@ yields . .RS .IP +.EX a b c +.EE .RE . .IP @@ -1771,13 +1755,15 @@ In line-tabs mode, the same code gives . .RS .IP +.EX a b c +.EE .RE . .IP Line-tabs mode is associated with the current environment; the read-only number register -.B \\[rs]n[.linetabs] +.B \[rs]n[.linetabs] is set to\~1 if in line-tabs mode, and 0 otherwise. . .TP @@ -1844,7 +1830,7 @@ Emit .I string directly to the intermediate output (subject to copy-mode interpretation); this is similar to -.B \[rs]! +.B \[rs]!\& used at the top level. . An initial double quote in @@ -1852,6 +1838,11 @@ An initial double quote in is stripped off to allow initial blanks. . .TP +.B .pev +Print the current environment and each defined environment state on +stderr. +. +.TP .B .pnr Print the names and contents of all currently defined number registers on stderr. @@ -1893,12 +1884,12 @@ can affect the priority of subsequently planted traps. . .TP .BI .pvs \ \[+-]n -Set the post-vertical line space to +Set the post-vertical line space to\~\c .IR n ; default scale indicator is\~\c .BR p . . -This value will be added to each line after it has been output. +This value is added to each line after it has been output. . With no argument, the post-vertical line space is set to its previous value. @@ -1956,11 +1947,11 @@ The number of lines to be right justified is available in the register. . This implicitly does -.BR .ce \~0 . +.BR .ce\~0 . The .B ce request implicitly does -.BR .rj \~0 . +.BR .rj\~0 . . .TP .BI .rnn \ xx\ yy @@ -1971,7 +1962,7 @@ to . .TP .BI .schar\ c\ string -Define global fallback glyph +Define global fallback character (or glyph)\~\c .I c to be .IR string . @@ -1986,18 +1977,18 @@ request but before the mounted special fonts. . .TP .BI .shc\ c -Set the soft hyphen character to +Set the soft hyphen character to\~\c .IR c . If .I c -is omitted, the soft hyphen character will be set to the default -.BR \[rs](hy . -The soft hyphen character is the glyph which will be inserted when +is omitted, the soft hyphen character is set to the default +.BR \[rs][hy] . +The soft hyphen character is the glyph which is inserted when a word is hyphenated at a line break. . If the soft hyphen character does not exist in the font of the glyph immediately preceding a potential break point, then the line -will not be broken at that point. +is not broken at that point. . Neither definitions (specified with the .B char @@ -2012,14 +2003,14 @@ In a macro, shift the arguments by positions: argument\~\c .I i becomes argument -.IR i \- n ; +.IR i \|\-\| n ; arguments 1 to\~\c .I n -will no longer be available. +are no longer available. . If .I n -is missing, arguments will be shifted by\~1. +is missing, arguments are shifted by\~1. . Shifting by negative amounts is currently undefined. . @@ -2051,8 +2042,8 @@ than a single line. .BI .special\ s1\ s2\|.\|.\|.\& Fonts .IR s1 , -.IR s2 , -are special and will be searched for glyphs not in the current +.IR s2 ,\|.\|.\|.\& +are special and are searched for glyphs not in the current font. . Without arguments, reset the list of special fonts to be empty. @@ -2080,7 +2071,7 @@ is set to 3m. . For example, .B .spreadwarn\ 0.2m -will cause a warning if +causes a warning if .B troff must add 0.2m or more for each interword space in a line. . @@ -2109,7 +2100,7 @@ and the current font family is\~\c .BR T , then font .BR TR -will be used. +is used. . If the current font is not a style, then the current family is ignored. . @@ -2120,12 +2111,12 @@ When the requests .BR uf , or .B fspecial -are applied to a style, then they will instead be applied to the +are applied to a style, then they are applied instead to the member of the current family corresponding to that style. . The default family can be set with the .B \-f -option. +command line option. . The .B styles @@ -2152,29 +2143,29 @@ If the index value .I n1 or .I n2 -is negative, it will be counted from the end of the string, +is negative, it is counted from the end of the string, going backwards: . -The last character has index\~-1, the character before the last -character has index\~-2, etc. +The last character has index\~\-1, the character before the last +character has index\~\-2, etc. . .TP .BI .tkf\ f\ s1\ n1\ s2\ n2 -Enable track kerning for font +Enable track kerning for font\~\c .IR f . -When the current font is +When the current font is\~\c .I f -the width of every glyph will be increased by an amount between +the width of every glyph is increased by an amount between .I n1 and .IR n2 ; when the current point size is less than or equal to .I s1 -the width will be increased by +the width is increased by .IR n1 ; when it is greater than or equal to .I s2 -the width will be increased by +the width is increased by .IR n2 ; when the point size is greater than or equal to .I s1 @@ -2207,7 +2198,7 @@ Each line is output as if preceded by .BR \[rs]! ; however, the lines are not subject to copy-mode interpretation. . -If the file does not end with a newline, then a newline will be added. +If the file does not end with a newline, then a newline is added. . For example, you can define a macro\~\c .I x @@ -2218,13 +2209,11 @@ using .RS .IP .ne 2v+\n(.Vu -.ft CB -.nf -.Text .di x -.Text .trf f -.Text .di -.fi -.ft +.EX +\&.di x +\&.trf f +\&.di +.EE .RE . .IP @@ -2232,7 +2221,7 @@ Unlike with the .B cf request, the file cannot contain characters such as .SM NUL -that are not legal troff input characters. +that are not valid troff input characters. . .TP .BI .trin\ abcd @@ -2240,26 +2229,24 @@ This is the same as the .B tr request except that the .B asciify -request will use the character code (if any) before the character +request uses the character code (if any) before the character translation. . Example: . .RS .IP -.nf -.ft CB -.Text .trin ax -.Text .di xxx -.Text a -.Text .br -.Text .di -.Text .xxx -.Text .trin aa -.Text .asciify xxx -.Text .xxx -.fi -.ft +.EX +\&.trin ax +\&.di xxx +\&a +\&.br +\&.di +\&.xxx +\&.trin aa +\&.asciify xxx +\&.xxx +.EE .RE . .IP @@ -2282,25 +2269,23 @@ For example, . .RS .IP -.nf -.ft CB -.Text .tr ab -.Text .di x -.Text \[rs]!.tm a -.Text .di -.Text .x -.fi -.ft +.EX +\&.tr ab +\&.di x +\&\[rs]!.tm a +\&.di +\&.x +.EE .RE . .IP -will print\~\c +prints\~\c .BR b ; if .B trnt is used instead of .B tr -it will print\~\c +it prints\~\c .BR a . .RE . @@ -2321,11 +2306,11 @@ request. This request `unformats' the diversion .IR xx . Contrary to the -.B .asciify +.B asciify request, which tries to convert formatted elements of the diversion back to input tokens as much as possible, .B .unformat -will only handle tabs and spaces between words (usually caused by +only handles tabs and spaces between words (usually caused by spaces or newlines in the input) specially. . The former are treated as if they were input tokens, and the latter @@ -2336,9 +2321,9 @@ Note that the vertical size of lines is not preserved. Glyph information (font, font size, space width, etc.) is retained. . Useful in conjunction with the -.B .box +.B box and -.B .boxa +.B boxa requests. . .TP @@ -2365,22 +2350,22 @@ Initially vertical position traps are enabled. .TP .BI .warn\ n Control warnings. -.I n +.IR n \~\c is the sum of the numbers associated with each warning that is to be -enabled; all other warnings will be disabled. +enabled; all other warnings are disabled. . The number associated with each warning is listed in .BR @g@troff (@MAN1EXT@). . For example, .B .warn\~0 -will disable all warnings, and +disables all warnings, and .B .warn\~1 -will disable all warnings except that about missing glyphs. +disables all warnings except that about missing glyphs. . If .I n -is not given, all warnings will be enabled. +is not given, all warnings are enabled. . .TP .BI .warnscale\ si @@ -2394,7 +2379,7 @@ are .BR i , .BR c , .BR p , -and +and\~\c .BR P . . At startup, it is set to\~\c @@ -2436,7 +2421,7 @@ request. is read in copy mode; a leading\~\c .B \[dq] -will be stripped. +is stripped. . .TP .BI .writec\ stream\ anything @@ -2463,7 +2448,7 @@ is read in copy mode. .\" -------------------------------------------------------------------- . .TP -.BI \[rs]D' .\|.\|. ' +.BR \[rs]D' .\|.\|. ' All drawing commands of groff's intermediate output are accepted. . See subsection @@ -2477,7 +2462,7 @@ below for more information. . .TP .BI .cf\ filename -When used in a diversion, this will embed in the diversion an object +When used in a diversion, this embeds in the diversion an object which, when reread, will cause the contents of .I filename to be transparently copied through to the output. @@ -2510,13 +2495,13 @@ compatibility mode switched on during execution. .BI .ev\ xx If .I xx -is not a number, this will switch to a named environment called +is not a number, this switches to a named environment called .IR xx . The environment should be popped with a matching .B ev request without any arguments, just as for numbered environments. . -There is no limit on the number of named environments; they will be +There is no limit on the number of named environments; they are created the first time that they are referenced. . .TP @@ -2526,7 +2511,7 @@ When two arguments are given to the request, the second argument gives the .IR "sentence space size" . If the second argument is not given, the sentence space size -will be the same as the word space size. +is the same as the word space size. . Like the word space size, the sentence space is in units of one twelfth of the spacewidth parameter for the current font. @@ -2541,11 +2526,11 @@ of\~12. The sentence space size is used in two circumstances. . If the end of a sentence occurs at the end of a line in fill mode, -then both an inter-word space and a sentence space will be added; if +then both an inter-word space and a sentence space are added; if two spaces follow the end of a sentence in the middle of a line, then -the second space will be a sentence space. +the second space is a sentence space. . -Note that the behaviour of UNIX troff will be exactly that exhibited +Note that the behaviour of UNIX troff are exactly that exhibited by GNU troff if a second argument is never given to the .B ss request. @@ -2560,25 +2545,24 @@ Set tabs at positions .IR n2 ,\|.\|.\|.\|, .I nn and then set tabs at -.IR nn + r1 , -.IR nn + r2 ,\|.\|.\|.\|, -.IR nn + rn +.IR nn \|+\| r1 , +.IR nn \|+\| r2 ,\|.\|.\|.\|, +.IR nn \|+\| rn and then at -.IR nn + rn + r1 , -.IR nn + rn + r2 ,\|.\|.\|.\|, -.IR nn + rn + rn , +.IR nn \|+\| rn \|+\| r1 , +.IR nn \|+\| rn \|+\| r2 ,\|.\|.\|.\|, +.IR nn \|+\| rn \|+\| rn , and so on. For example, . .RS .IP -.ft CB -.Text .ta T .5i -.br -.ft +.EX +\&.ta T .5i +.EE . .P -will set tabs every half an inch. +sets tabs every half an inch. .RE . . @@ -2589,6 +2573,30 @@ will set tabs every half an inch. The following read-only registers are available: . .TP +.B \[rs]n[.br] +Within a macro call, it is set to\~1 if the macro is called with the +`normal' control character (`.' by default), and set to\~0 otherwise. +This allows to reliably modify requests. +. +.RS +.IP +.ne 6v+\n(.Vu +.EX +\&.als bp*orig bp +\&.de bp +\&.tm before bp +\&.ie \[rs]\[rs]n[.br] .bp*orig +\&.el 'bp*orig +\&.tm after bp +\&.. +.EE +.RE +. +.IP +Using this register outside of a macro makes no sense (it always returns +zero in such cases). +. +.TP .B \[rs]n[.C] 1\~if compatibility mode is in effect, 0\~otherwise. . @@ -2698,13 +2706,13 @@ request). . .TP .B \[rs]n[.in] -The indent that applies to the current output line. +The indentation that applies to the current output line. . .TP .B \[rs]n[.int] Set to a positive value if last output line is interrupted (i.e., if it contains -.IR \[rs]c ). +.BR \[rs]c ). . .TP .B \[rs]n[.kern] @@ -2772,11 +2780,11 @@ request, or the number of the current page plus\~1. . .TP .B \[rs]n[.ps] -The current pointsize in scaled points. +The current point size in scaled points. . .TP .B \[rs]n[.psr] -The last-requested pointsize in scaled points. +The last-requested point size in scaled points. . .TP .B \[rs]n[.pvs] @@ -2797,7 +2805,7 @@ The slant of the current font as set with . .TP .B \[rs]n[.sr] -The last requested pointsize in points as a decimal fraction. +The last requested point size in points as a decimal fraction. . This is a string-valued register. . @@ -2842,7 +2850,8 @@ register. . .TP .B \[rs]n[.U] -Set to 1 if in safer mode and to 0 if in unsafe mode (as given with the +Set to\~1 if in safer mode and to\~0 if in unsafe mode (as given with +the .B \-U command line option). . @@ -2864,7 +2873,7 @@ The major version number. . For example, if the version number is 1.03, then .B \[rs]n[.x] -will contain\~1. +contains\~1. . .TP .B \[rs]n[.y] @@ -2872,13 +2881,18 @@ The minor version number. . For example, if the version number is 1.03, then .B \[rs]n[.y] -will contain\~03. +contains\~03. . .TP .B \[rs]n[.Y] The revision number of groff. . .TP +.B \[rs]n[.zoom] +The zoom value of the current font, in multiples of 1/1000th. +Zero if no magnification. +. +.TP .B \[rs]n[llx] .TQ .B \[rs]n[lly] @@ -2887,12 +2901,12 @@ The revision number of groff. .TQ .B \[rs]n[ury] These four registers are set by the -.B .psbb +.B psbb request and contain the bounding box values (in PostScript units) of a given PostScript image. . .P -The following read/write registers are set by the +The following read/\:write registers are set by the .B \[rs]w escape sequence: . @@ -2982,7 +2996,7 @@ is the current year minus 1900. . .B @g@troff predefines a single (read/write) string-based register, -.BR \[rs]*(.T , +.BR \[rs]*[.T] , which contains the argument given to the .B \-T command line option, namely the current output device (for example, @@ -3012,7 +3026,7 @@ unused font position, which can be found in the .B \[rs]n[.fp] register; although .B troff -does not enforce this strictly, it will not allow a font to be mounted +does not enforce this strictly, it does not allow a font to be mounted at a position whose number is much greater than that of any currently used position. . @@ -3031,7 +3045,7 @@ is . .P If the font description file contains pairwise kerning information, -glyphs from that font will be kerned. +glyphs from that font are kerned. . Kerning between two glyphs can be inhibited by placing a .B \[rs]& @@ -3039,8 +3053,8 @@ between them. . .P In a string comparison in a condition, characters that appear at -different input levels to the first delimiter character will not be -recognised as the second or third delimiters. +different input levels to the first delimiter character are not +recognized as the second or third delimiters. . This applies also to the .B tl @@ -3049,7 +3063,7 @@ request. In a .B \[rs]w escape sequence, a character that appears at a different input level -to the starting delimiter character will not be recognised as the +to the starting delimiter character is not recognized as the closing delimiter character. . The same is true for @@ -3066,19 +3080,19 @@ and . When decoding a macro or string argument that is delimited by double quotes, a character that appears at a different input level to the starting -delimiter character will not be recognised as the closing delimiter +delimiter character is not recognized as the closing delimiter character. . The implementation of .B \[rs]$@ -ensures that the double quotes surrounding an argument will appear the -same input level, which will be different to the input level of the +ensures that the double quotes surrounding an argument appear at the +same input level, which is different to the input level of the argument itself. . In a long escape name .B ] -will not be recognized as a closing delimiter except when it occurs at -the same input level as the opening +is not recognized as a closing delimiter except when it occurs at +the same input level as the opening\~\c .BR ] . . In compatibility mode, no attention is paid to the input-level. @@ -3103,17 +3117,18 @@ True if there is a color named . .TP .BI .if\ c ch -True if there is a glyph +True if there is a character (or glyph) .IR ch available; .I ch is either an .SM ASCII character or a glyph (special character) +.BI \[rs]N' xxx '\f[R], .BI \[rs]( xx or .BI \[rs][ xxx ]\f[R]; -the condition will also be true if +the condition is also true if .I ch has been defined by the .B char @@ -3121,11 +3136,11 @@ request. . .TP .BI .if\ F f -True if font +True if font\~\c .I f exists. . -.B f +.BR f \~\c is handled as if it was opened with the .B ft request (this is, font translation and styles are applied), without @@ -3133,7 +3148,7 @@ actually mounting it. . .TP .BI .if\ S s -True if style +True if style\~\c .I s has been registered. . @@ -3146,6 +3161,19 @@ request can now map characters onto .BR \[rs]~ . . .P +The space width emitted by the +.B \[rs]| +and +.B \[rs]^ +escape sequences can be controlled on a per-font basis. +If there is a glyph named +.B \[rs]| +or +.BR \[rs]^ , +respectively (note the leading backslash), defined in the current font file, +use this glyph's width instead of the default value. +. +.P It is now possible to have whitespace between the first and second dot (or the name of the ending macro) to end a macro definition. . @@ -3153,14 +3181,13 @@ Example: . .IP .ne 6v+\n(.Vu -.ft CB -.nf -.Text .if t \[rs]{\[rs] -.Text . de bar -.Text . nop Hello, I'm `bar'. -.Text . . -.Text .\[rs]} -.fi +.EX +\&.if t \[rs]{\[rs] +\&. de bar +\&. nop Hello, I'm `bar'. +\&. . +\&.\[rs]} +.EE . . .\" -------------------------------------------------------------------- @@ -3180,7 +3207,7 @@ Only the differences are documented here. .\" -------------------------------------------------------------------- . The argument to the -.B s +.BR s \~\c command is in scaled points (units of .RI points/ n , where @@ -3207,7 +3234,7 @@ Print glyph with index\~\c .P If the .B tcommand -line is present in the DESC file, troff will use the following two +line is present in the DESC file, troff uses the following two commands. . .TP @@ -3228,10 +3255,10 @@ Special characters cannot be printed using this command. .TP .BI u n\ xxx This is same as the -.B t +.BR t \~\c command except that after printing each character, the current horizontal position is increased by the sum of the width of that -character and +character and\~\c .IR n . . .P @@ -3240,10 +3267,10 @@ names of fonts and special characters. . .P The names of glyphs and fonts can be of arbitrary length; drivers -should not assume that they will be only two characters long. +should not assume that they are only two characters long. . .P -When a glyph is to be printed, that glyph will always be +When a glyph is to be printed, that glyph is always in the current font. . Unlike device-independent troff, it is not necessary for drivers to @@ -3253,15 +3280,15 @@ search special fonts to find a glyph. For color support, some new commands have been added: . .TP -.Text \f[B]mc \f[I]cyan magenta yellow\f[R] +\f[B]mc \f[I]cyan magenta yellow\f[R] .TQ -.Text \f[B]md\f[R] +\f[B]md\f[R] .TQ -.Text \f[B]mg \f[I]gray\f[R] +\f[B]mg \f[I]gray\f[R] .TQ -.Text \f[B]mk \f[I]cyan magenta yellow black\f[R] +\f[B]mk \f[I]cyan magenta yellow black\f[R] .TQ -.Text \f[B]mr \f[I]red green blue\f[R] +\f[B]mr \f[I]red green blue\f[R] Set the color components of the current drawing color, using various color schemes. . @@ -3272,11 +3299,11 @@ The arguments are integers in the range 0 to 65536. . .P The -.B x +.BR x \~\c device control command has been extended. . .TP -.Text \f[B]x u \f[I]n\f[R] +\f[B]x u \f[I]n\f[R] If .I n is\~1, start underlining of spaces. @@ -3298,12 +3325,12 @@ The .B D drawing command has been extended. . -These extensions will not be used by GNU pic if the +These extensions are not used by GNU pic if the .B \-n option is given. . .TP -.Text \f[B]Df \f[I]n\f[R]\*[ic]\[rs]n +\f[B]Df \f[I]n\f[R]\*[ic]\[rs]n Set the shade of gray to be used for filling solid objects to .IR n ; .I n @@ -3314,16 +3341,16 @@ intermediate shades of gray. This applies only to solid circles, solid ellipses and solid polygons. . -By default, a level of 1000 will be used. +By default, a level of 1000 is used. . Whatever color a solid object has, it should completely obscure everything beneath it. . -A value greater than 1000 or less than 0 can also be used: this means +A value greater than 1000 or less than\~0 can also be used: this means fill with the shade of gray that is currently being used for lines and text. . -Normally this will be black, but some drivers may provide a way of +Normally this is black, but some drivers may provide a way of changing this. . .IP @@ -3334,13 +3361,13 @@ integer multiple of the horizontal resolution which can lead to surprising results. . .TP -.Text \f[B]DC \f[I]d\f[R]\*[ic]\[rs]n +\f[B]DC \f[I]d\f[R]\*[ic]\[rs]n Draw a solid circle with a diameter of .I d with the leftmost point at the current position. . .TP -.Text \f[B]DE \f[I]dx dy\f[R]\*[ic]\[rs]n +\f[B]DE \f[I]dx dy\f[R]\*[ic]\[rs]n Draw a solid ellipse with a horizontal diameter of .I dx and a vertical diameter of @@ -3351,7 +3378,7 @@ delim $$ .EN . .TP -.Text \f[B]Dp\f[R] $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ $dx sub n$ $dy sub n$\[rs]n +\f[B]Dp\f[R] $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ $dx sub n$ $dy sub n$\[rs]n Draw a polygon with, for $i = 1 ,..., n+1$, the .IR i -th vertex at the current position @@ -3362,16 +3389,16 @@ At the moment, GNU pic only uses this command to generate triangles and rectangles. . .TP -.Text \f[B]DP\f[R] $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ $dx sub n$ $dy sub n$\[rs]n +\f[B]DP\f[R] $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ $dx sub n$ $dy sub n$\[rs]n . Like .B Dp but draw a solid rather than outlined polygon. . .TP -.Text \f[B]Dt \f[I]n\f[R]\*[ic]\[rs]n +\f[B]Dt \f[I]n\f[R]\*[ic]\[rs]n Set the current line thickness to -.I n +.IR n \~\c machine units. . Traditionally Unix troff drivers use a line thickness proportional to @@ -3379,9 +3406,9 @@ the current point size; drivers should continue to do this if no .B Dt command has been given, or if a .B Dt -command has been given with a negative value of +command has been given with a negative value of\~\c .IR n . -A zero value of +A zero value of\~\c .I n selects the smallest available line thickness. . @@ -3394,7 +3421,7 @@ does not depend on this. . Given a drawing command of the form .IP -\f[B]\[rs]D\[fm]\f[I]c\f[R] $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ $x sub n$ $y sub n$\[fm] +\f[B]\[rs]D'\f[I]c\f[R] $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ $x sub n$ $y sub n$\f[B]'\f[R] . .P where @@ -3404,10 +3431,10 @@ is not one of .BR e , .BR l , .BR a , -or +or\~\c .BR ~ , -Unix troff will treat each of the $x sub i$ as a horizontal quantity, -and each of the $y sub i$ as a vertical quantity and will assume that +Unix troff treats each of the $x sub i$ as a horizontal quantity, +and each of the $y sub i$ as a vertical quantity and assumes that the width of the drawn object is $sum from i=1 to n x sub i$, and that the height is $sum from i=1 to n y sub i$. . @@ -3416,8 +3443,10 @@ and that the height is $sum from i=1 to n y sub i$. and .B sb registers after using such a -.B D -command in a \[rs]w escape sequence). +.BR D \~\c +command in a +.B \[rs]w +escape sequence). . This rule also holds for all the original drawing commands with the exception of @@ -3432,11 +3461,10 @@ and, to a lesser extent, commands. . Thus after executing a -.B D +.BR D \~\c command of the form .IP -\f[B]D\f[I]c\f[R] $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ \c -$x sub n$ $y sub n$\[rs]n +\f[B]D\f[I]c\f[R] $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ $x sub n$ $y sub n$\[rs]n . .P the current position should be increased by @@ -3447,17 +3475,17 @@ $( sum from i=1 to n x sub i , sum from i=1 to n y sub i )$. Another set of extensions is . .TP -.Text \f[B]DFc \f[I]cyan magenta yellow\f[R]\*[ic]\[rs]n +\f[B]DFc \f[I]cyan magenta yellow\f[R]\*[ic]\[rs]n .TQ -.Text \f[B]DFd\f[R]\*[ic]\[rs]n +\f[B]DFd\f[R]\*[ic]\[rs]n .TQ -.Text \f[B]DFg \f[I]gray\f[R]\*[ic]\[rs]n +\f[B]DFg \f[I]gray\f[R]\*[ic]\[rs]n .TQ -.Text \f[B]DFk \f[I]cyan magenta yellow black\f[R]\*[ic]\[rs]n +\f[B]DFk \f[I]cyan magenta yellow black\f[R]\*[ic]\[rs]n .TQ -.Text \f[B]DFr \f[I]red green blue\f[R]\*[ic]\[rs]n +\f[B]DFr \f[I]red green blue\f[R]\*[ic]\[rs]n Set the color components of the filling color similar to the -.B m +.BR m \~\c commands above. . .P @@ -3473,9 +3501,9 @@ There is a continuation convention which permits the argument to the .B x\ X command to contain newlines: when outputting the argument to the .B x\ X -command, GNU troff will follow each newline in the argument with a +command, GNU troff follows each newline in the argument with a .B + -character (as usual, it will terminate the entire argument with a +character (as usual, it terminates the entire argument with a newline); thus if the line after the line containing the .B x\ X command starts with @@ -3527,13 +3555,13 @@ or for other implementations of roff in a consistent way. . .P Compatibility mode can be turned on with the -.option \-C +.B \-C command line option, and turned on or off with the -.request .cp +.B .cp request. . The number register -.esc n(.C +.B \[rs]n(.C is\~1 if compatibility mode is on, 0\~otherwise. . .P @@ -3542,7 +3570,7 @@ some incompatibilities. .I Classical troff interprets .IP -.request .dsabcd +.B .dsabcd . .P as defining a string @@ -3551,18 +3579,18 @@ with contents .BR cd . In .IR groff -mode, this will be considered as a call of a macro named -.request dsabcd . +mode, this is considered as a call of a macro named +.BR dsabcd . . .P Also .I classical troff interprets -.esc *[ +.B \[rs]*[ or -.esc n[ -as references to a string or number register called -.request [ +.B \[rs]n[ +as references to a string or number register called\~\c +.B [ while .I groff takes this as the start of a long name. @@ -3577,53 +3605,53 @@ names are not recognized. On the other hand, groff in .I GNU native mode does not allow to use the single-character escapes -.esc \[rs] +.B \[rs]\[rs] (backslash), -.esc | +.B \[rs]| (vertical bar), -.esc ^ +.B \[rs]^ (caret), -.esc & +.B \[rs]& (ampersand), -.esc { +.B \[rs]{ (opening brace), -.esc } +.B \[rs]} (closing brace), -.squoted "\[rs]\ " +.RB ` \[rs]\ ' (space), -.esc ' +.B \[rs]' (single quote), -.esc ` +.B \[rs]` (backquote), -.esc \- +.B \[rs]\- (minus), -.esc _ +.B \[rs]_ (underline), -.esc ! +.B \[rs]!\& (bang), -.esc % +.B \[rs]% (percent), and -.esc c -(character c) in names of strings, macros, diversions, number +.B \[rs]c +(character\~c) in names of strings, macros, diversions, number registers, fonts or environments, whereas .I classical troff does. . .P The -.esc A +.B \[rs]A escape sequence can be helpful in avoiding these escape sequences in names. . .P -Fractional pointsizes cause one noteworthy incompatibility. +Fractional point sizes cause one noteworthy incompatibility. . In .I classical .IR troff , the -.request ps +.B ps request ignores scale indicators and so .RS .P @@ -3631,8 +3659,8 @@ request ignores scale indicators and so .RE . .P -will set the pointsize to 10\~points, whereas in groff native mode the -pointsize will be set to 10\~scaled points. +sets the point size to 10\~points, whereas in groff native mode the +point size is set to 10\~scaled points. . .P In @@ -3640,16 +3668,16 @@ In there is a fundamental difference between unformatted input characters, and formatted output characters (glyphs). . -Everything that affects how a glyph will be output is +Everything that affects how a glyph is output is stored with the glyph; once a glyph has been constructed it is unaffected by any subsequent requests that are executed, including the -.request bd , -.request cs , -.request tkf , -.request tr , +.BR bd , +.BR cs , +.BR tkf , +.BR tr , or -.request fp +.B fp requests. . .P @@ -3671,51 +3699,47 @@ purposes of macro processing; it does not inherit any of the special properties that the input character from which it was constructed might have had. . -The following example will make things clearer. +The following example makes things clearer. . .P .RS -.nf -.ft CB -.Text .di x -.Text \[rs]\[rs]\[rs]\[rs] -.Text .br -.Text .di -.Text .x -.ft -.fi +.EX +\&.di x +\[rs]\[rs]\[rs]\[rs] +\&.br +\&.di +\&.x +.EE .RE . .P With .I GNU troff -this will be printed as -.esc \[rs] . +this is printed as +.BR \[rs]\[rs] . So each pair of input backslashes -.squoted \[rs]\[rs] +\&`\[rs]\[rs]' is turned into a single output backslash glyph -.squoted \[rs] +\&`\[rs]' and the resulting output backslashes are not interpreted as escape characters when they are reread. . .P .I Classical troff would interpret them as escape characters when they were reread and -would end up printing a single backslash -.squoted \[rs] . +would end up printing a single backslash `\[rs]'. . .P In GNU, the correct way to get a printable version of the backslash -character -.squoted \[rs] +character `\[rs]' is the -.esc (rs +.B \[rs](rs escape sequence, but classical troff does not provide a clean feature for getting a non-syntactical backslash. . A close method is the printable version of the current escape character using the -.esc e +.B \[rs]e escape sequence; this works if the current escape character is not redefined. . @@ -3726,12 +3750,12 @@ or text mode quickly leads to a confusion about the necessary number of backslashes. . .P -To store an escape sequence in a diversion that will be interpreted +To store an escape sequence in a diversion that is interpreted when the diversion is reread, either the traditional -.esc ! +.B \[rs]!\& transparent output facility or the new -.esc ? +.B \[rs]?\& escape sequence can be used. . . @@ -3746,33 +3770,40 @@ a full compatibility to the classical troff output format. . Actually the following incompatibilities exist: . -.Topic +.IP \[bu] 2m The positioning after the drawing of the polygons conflicts with the classical definition. . -.Topic +.IP \[bu] 2m The intermediate output cannot be rescaled to other devices as -classical "device-independent" troff did. +classical `device-independent' troff did. . . .\" -------------------------------------------------------------------- .SH AUTHORS .\" -------------------------------------------------------------------- . -Copyright (C) 1989, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +Copyright (C) 1989, 2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009 +Free Software Foundation, Inc. . .P This document is distributed under the terms of the FDL (GNU Free -Documentation License) version 1.1 or later. +Documentation License) version 1.3 or later. . You should have received a copy of the FDL on your system, it is also available on-line at the -.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" . +.UR http://\:www.gnu.org/\:copyleft/\:fdl.html +GNU copyleft site +.UE . . This document was written by James Clark, with modifications by -.MTO wl@gnu.org "Werner Lemberg" +.MT wl@gnu.org +Werner Lemberg +.ME and -.MTO bwarken@mayn.de "Bernd Warken" . +.MT bwarken@mayn.de +Bernd Warken +.ME . . .P This document is part of @@ -3816,8 +3847,12 @@ requests, registers, and escapes of plain .IR groff . From the command line, this is called using . +.RS .IP -.ShellCommand man\~7\~groff +.EX +man 7 groff +.EE +.RE . .TP .BR roff (@MAN7EXT@) @@ -3830,14 +3865,13 @@ systems, including pointers to further historical documentation. The .I Nroff/\:Troff User's Manual by -.I J.\& F.\& Osanna +.I J.\& F.\& Ossanna of 1976 in the revision of .I Brian Kernighan of 1992, being the -.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz \ - "classical troff documentation" . -. -.cp \n[groff_diff_C] +.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz +classical troff documentation +.UE . . .\" -------------------------------------------------------------------- .\" Emacs variables diff --git a/contrib/groff/man/groff_font.man b/contrib/groff/man/groff_font.man index b806aac9ac..64bd212cfc 100644 --- a/contrib/groff/man/groff_font.man +++ b/contrib/groff/man/groff_font.man @@ -1,5 +1,7 @@ .ig -Copyright (C) 1989-1995, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +Copyright (C) 1989-1995, 2001, 2002, 2003, 2004, 2006, 2007, 2008, + 2009 + Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice @@ -20,11 +22,6 @@ the original English. .do nr groff_font_C \n[.C] .cp 0 . -.de TQ -. br -. ns -. TP \\$1 -.. . .\" Like TP, but if specified indent is more than half .\" the current line-length - indent, use the default indent. @@ -54,9 +51,9 @@ are stored in a directory There are two types of file: a device description file called .B DESC -and for each font +and for each font\~\c .I F -a font file called +a font file called\~\c .IR F . . These are text files; @@ -70,6 +67,9 @@ The DESC file can contain the following types of line as shown below. . Later entries in the file override previous values. . +.LP +Empty lines are ignored. +. .TP .B charset This line and everything following in the file are ignored. @@ -82,34 +82,36 @@ The default font family is .IR fam . . .TP -.BI fonts\ n\ F1\ F2\ F3\|.\|.\|.\|Fn +.BI fonts\ n\ F1\ F2\ F3\ \|.\|.\|.\|\ Fn Fonts -.I F1\|.\|.\|.\|Fn -will be mounted in the font positions -.IR m +1,\|.\|.\|., m + n +.IR F1 ,\ \|.\|.\|.,\ Fn +are mounted in the font positions +.IR m \|+\|1,\ \|.\|.\|.,\ m \|+\| n where .I m is the number of styles. . This command may extend over more than one line. . -A font name of +A font name of\~\c .B 0 -will cause no font to be mounted on the corresponding font position. +causes no font to be mounted on the corresponding font position. . .TP .BI hor\ n The horizontal resolution is -.I n +.IR n \~\c machine units. . .TP .BI image_generator\ string Needed for -.B grohtml +.B \%grohtml only. +. It specifies the program to generate PNG images from PostScript input. +. Under GNU/Linux this is usually .I gs but under other systems (notably cygwin) it might be set to another name. @@ -194,7 +196,7 @@ itself but by output devices. Make troff tell the driver the source file name being processed. . This is achieved by another tcommand: -.B F +.BR F \~\c .IR filename . . .TP @@ -230,10 +232,10 @@ There are machine units per inch. . .TP -.BI sizes\ s1\ s2\|.\|.\|.\|sn\ 0 +.BI sizes\ s1\ s2\ \|.\|.\|.\|\ sn\ 0 This means that the device has fonts at .IR s1 , -.IR s2 ,\|.\|.\|.\| sn +.IR s2 ,\ \|.\|.\|.,\ sn scaled points. . The list of sizes must be terminated by a @@ -248,7 +250,7 @@ The list can extend over more than one line. . .TP .BI sizescale\ n -The scale factor for pointsizes. +The scale factor for point sizes. . By default this has a value of 1. . @@ -257,7 +259,7 @@ One scaled point is equal to one -.RI point/ n . +.RI point\|/\| n . . The arguments to the .B unitwidth @@ -266,43 +268,76 @@ and commands are given in scaled points. . .TP -.BI styles\ S1\ S2\|.\|.\|.\|Sm +.BI styles\ S1\ S2\ \|.\|.\|.\|\ Sm The first .I m -font positions will be associated with styles -.IR S1\|.\|.\|.\|Sm . +font positions are associated with styles +.IR S1 ,\ \|.\|.\|.,\ Sm . . .TP .B tcommand This means that the postprocessor can handle the .B t -and +and\~\c .B u output commands. . .TP +.B unicode +Indicate that the output device supports the complete Unicode +repertoire. +. +Useful only for devices which produce +.I character entities +instead of glyphs. +. +.IP +If +.B unicode +is present, no +.B charset +section is required in the font description files since the Unicode +handling built into +.B groff +is used. +. +However, if there are entries in a +.B charset +section, they either override the default mappings for those +particular characters or add new mappings (normally for composite +characters). +. +.IP +This is used for +.BR \-Tutf8 , +.BR \-Thtml , +and +.BR \-Txhtml . +. +.TP .BI unitwidth\ n Quantities in the font files are given in machine units for fonts whose point size is -.I n +.IR n \~\c scaled points. . .TP .B unscaled_charwidths -Make the font handling module always return unscaled character widths. +Make the font handling module always return unscaled glyph widths. +. Needed for the -.B grohtml +.B \%grohtml device. . .TP .B use_charnames_in_special -This command indicates that troff should encode named characters inside +This command indicates that troff should encode named glyphs inside special commands. . .TP .BI vert\ n The vertical resolution is -.I n +.IR n \~\c machine units. . .LP @@ -330,56 +365,59 @@ but completely ignored: . .SS Font file format . -A font file has two sections. +A font file has two sections; +empty lines are ignored in both of them. +. +.LP The first section is a sequence of lines each containing a sequence of blank delimited words; the first word in the line is a key, and subsequent words give a value for that key. . .TP -.BI ligatures\ lig1\ lig2\|.\|.\|.\|lign\ \fR[ 0 \fR] -Characters +.BI ligatures\ lig1\ lig2\ \|.\|.\|.\|\ lign\ \fR[ 0 \fR] +Glyphs .IR lig1 , -.IR lig2 ,\ \|.\|.\|.,\ lign +.IR lig2 ,\ \|.\|.\|.,\ lign are ligatures; possible ligatures are .BR ff , .BR fi , .BR fl , -.B ffi +.BR ffi , and .BR ffl . . For backwards compatibility, the list of ligatures may be terminated -with a +with a\~\c .BR 0. . The list of ligatures may not extend over more than one line. . .TP .BI name\ F -The name of the font is +The name of the font is\~\c .IR F . . .TP .BI slant\ n -The characters of the font have a slant of -.I n +The glyphs of the font have a slant of +.IR n \~\c degrees. . (Positive means forward.) . .TP .BI spacewidth\ n -The normal width of a space is +The normal width of a space is\~\c .IR n . . .TP .B special The font is .IR special ; -this means that when a character is requested that is not present in -the current font, it will be searched for in any special fonts that -are mounted. +this means that when a glyph is requested that is not present in +the current font, it is searched for in any special fonts that are +mounted. . .LP Other commands are ignored by @@ -415,7 +453,7 @@ The .B charset line is followed by a sequence of lines. . -Each line gives information for one character. +Each line gives information for one glyph. . A line comprises a number of fields separated by blanks or tabs. @@ -423,17 +461,17 @@ by blanks or tabs. The format is . .IP -.I name metrics type code +.I name metrics type code .RI [ entity_name ] -.RB [ -- +.RB [ \-\- .IR comment ] . .LP .I name -identifies the character: +identifies the glyph: if .I name -is a single character +is a single glyph .I c then it corresponds to the groff input character .IR c ; @@ -452,67 +490,53 @@ it can be entered as . Note that single-letter special characters can't be accessed as .BI \[rs] c\fR; -the only exception is `\[rs]-' which is identical to `\[rs][-]'. +the only exception is `\[rs]\-' which is identical to `\[rs][\-]'. . The name .B \-\-\- -is special and indicates that the character is unnamed; -such characters can only be used by means of the +is special and indicates that the glyph is unnamed; +such glyphs can only be used by means of the .B \[rs]N escape sequence in .BR troff . . .LP -Groff supports eight-bit characters; however some utilities -have difficulties with eight-bit characters. -. -For this reason, there is a convention that the name -.BI char n -is equivalent to the single character whose code is -.IR n . -. -For example, -.B char163 -would be equivalent to the character with code 163 -which is the pounds sterling sign in ISO Latin-1. -. -.LP The .I type -field gives the character type: +field gives the glyph type: . .TP 1 -means the character has a descender, for example, p; +means the glyph has a descender, for example, `p'; . .TP 2 -means the character has an ascender, for example, b; +means the glyph has an ascender, for example, `b'; . .TP 3 -means the character has both an ascender and a descender, for example, -(. +means the glyph has both an ascender and a descender, for example, +`('. . .LP The .I code -field gives the code which the postprocessor uses to print the character. +field gives the code which the postprocessor uses to print the glyph. . -The character can also be input to groff using this code by means of the +The glyph can also be input to groff using this code by means of the .B \[rs]N escape sequence. . The code can be any integer. . -If it starts with a +If it starts with a\~\c .B 0 -it will be interpreted as octal; +it is interpreted as octal; if it starts with .B 0x or .B 0X -it will be intepreted as hexadecimal. +it is intepreted as hexadecimal. . Note, however, that the .B \[rs]N @@ -521,18 +545,21 @@ escape sequence only accepts a decimal integer. .LP The .I entity_name -field gives an ascii string identifying the glyph which the postprocessor -uses to print the character. +field gives an ASCII string identifying the glyph which the postprocessor +uses to print that glyph. . -This field is optional and has been introduced so that the html device driver -can encode its character set. +This field is optional and is currently used by +.B grops +to build sub-encoding arrays for PS fonts containing more than 256 glyphs. . -For example, the character `\[rs][Po]' is represented as `£' in -html\~4.0. +(It has also been used for +.BR \%grohtml 's +entity names but for efficiency reasons this data is now compiled directly +into +.BR \%grohtml .) . .LP -Anything on the line after the encoding field resp. after `-\&-' will -be ignored. +Anything on the line after the encoding field or `\-\-' are ignored. . .LP The @@ -552,7 +579,7 @@ readability): .LP There must not be any spaces between these subfields. . -Missing subfields are assumed to be 0. +Missing subfields are assumed to be\~0. . The subfields are all decimal integers. . @@ -563,37 +590,37 @@ as they are in ditroff. . The .I width -subfields gives the width of the character. +subfields gives the width of the glyph. . The .I height -subfield gives the height of the character (upwards is positive); -if a character does not extend above the baseline, it should be +subfield gives the height of the glyph (upwards is positive); +if a glyph does not extend above the baseline, it should be given a zero height, rather than a negative height. . The .I depth -subfield gives the depth of the character, that is, the distance +subfield gives the depth of the glyph, that is, the distance below the lowest point below the baseline to which the -character extends (downwards is positive); -if a character does not extend below above the baseline, it should be +glyph extends (downwards is positive); +if a glyph does not extend below above the baseline, it should be given a zero depth, rather than a negative depth. . The .I italic-correction subfield gives the amount of space that should be added after the -character when it is immediately to be followed by a character +glyph when it is immediately to be followed by a glyph from a roman font. . The .I left-italic-correction subfield gives the amount of space that should be added before the -character when it is immediately to be preceded by a character +glyph when it is immediately to be preceded by a glyph from a roman font. . The .I subscript-correction -gives the amount of space that should be added after a character +gives the amount of space that should be added after a glyph before adding a subscript. . This should be less than the italic correction. @@ -608,7 +635,7 @@ name \fB" .LP This indicates that .I name -is just another name for the character mentioned in the +is just another name for the glyph mentioned in the preceding line. . .LP @@ -622,14 +649,14 @@ This contains a sequence of lines of the form: .I c1 c2 n . .LP -This means that when character +This means that when glyph .I c1 -appears next to character +appears next to glyph .I c2 -the space between them should be increased by +the space between them should be increased by\~\c .IR n . . -Most entries in kernpairs section will have a negative value for +Most entries in kernpairs section have a negative value for\~\c .IR n . . . @@ -642,7 +669,7 @@ Device description file for device . .TP .BI @FONTDIR@/dev name / F -Font file for font +Font file for font\~\c .I F of device .IR name . diff --git a/contrib/groff/man/groff_out.man b/contrib/groff/man/groff_out.man index 4469985f4d..7c2db26c3b 100644 --- a/contrib/groff/man/groff_out.man +++ b/contrib/groff/man/groff_out.man @@ -3,16 +3,15 @@ .ig groff_out.5 -Last update: 2 Jul 2005 - This file is part of groff, the GNU roff type-setting system. -Copyright (C) 1989, 2001, 2002, 2003, 2004, 2005 +Copyright (C) 1989, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, + 2009 Free Software Foundation, Inc. rewritten from scrach 2001 by Bernd Warken Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being this .ig-section and AUTHORS, with no Front-Cover Texts, and with no Back-Cover Texts. @@ -25,27 +24,6 @@ FDL in the main directory of the groff source package. .\" Setup .\" -------------------------------------------------------------------- . -.do nr groff_out_C \n[.C] -.cp 0 -. -.mso www.tmac -. -.if n \{\ -. mso tty-char.tmac -. ftr CR R -. ftr CI I -. ftr CB B -.\} -. -.if '\*[.T]'dvi' \ -. ftr CB CW -. -.if t \{\ -.EQ -delim $$ -.EN -.\} -. .\" ----------------- Document configuration . .\" Number register to decide whether the commands `{' and `}' are used @@ -60,185 +38,52 @@ after these commands, otherwise the position is not changed. .. .nr @STUPID_DRAWING_POSITIONING 1 . -.\" ----------------- Syntactical definitions -. -.\" comments when escapes are switched off -.de c -.. -.\" Begin of macro definitions -.eo -. -.de Text -. nop \)\$* -.. -.c follow-up line for a .TP header -.de TP+ -. br -. ns -. TP \$1 -.. -.c a bulleted paragraph -.de Topic -. TP 2m -. nop \[bu] -.. -.de ShellCommand -. br -. IR "shell>" "\h'1m'\f[CB]\$*\f[]\/" -.. -.ec -.\" End of macro definitions -. -.c ----------------- Semantical definitions +.\" ----------------- Semantical definitions . .nr @maxcolor 65536 .ds @backslash \[rs]\" -.ds @linebreak \f[R]\[la]line_break\[ra]\f[]\" +.ds @linebreak \fR\[la]line-break\[ra]\fP\" . .\" Begin of macro definitions -.eo . -.c format: .unit -.de unit -. BR \$@ -.. -.c argument in italic with punctuation -.de argument -. if (\n[.$] == 0) \ -. return -. IR \$@ -.. -.c comma separated list of indexed variables -.de list1..n -. ds @arg1 \$1\" -. nop \c -. ie t \ -. nop $\*[@arg1] sub 1$, $\*[@arg1] sub 2$, .\|.\|., $\*[@arg1] sub n$ \c -. el \{\ -. IR \*[@arg1]1 , -. IR \*[@arg1]2 , -. nop \&..., -. I \*[@arg1]n -. \} -. rm @arg1 -.. .de offset -. if (\n[.$] < 2) \ -. ab `.offset' needs at least 2 arguments -. ds @arg1 \$1\" -. ds @arg2 \$2\" -. shift 2 -. nop (\f[I]\,\*[@arg1]\/\f[],\ \f[I]\,\*[@arg2]\/\f[])\$* -. rm @arg1 -. rm @arg2 +.RI ( \,\\$1\/ ,\ \,\\$2\/ )\\$3 .. .de indexed_offset -. if (\n[.$] < 4) \ -. ab `.indexed_offset' needs at least 4 arguments -. ds @arg1 \$1\" -. ds @index1 \$2\" -. ds @arg2 \$3\" -. ds @index2 \$4\" -. shift 4 -. ie t \{\ -. ie \B'\*[@index1]' \{\ -. nop ($\*[@arg1] sub roman \*[@index1]$,\ \c -. \} -. el \{\ -. nop ($\*[@arg1] sub \*[@index1]$,\ \c -. \} -. ie \B'\*[@index2]' \{\ -. nop $\*[@arg2] sub roman \*[@index2]$)\$* \c -. \} -. el \{\ -. nop $\*[@arg2] sub \*[@index2]$)\$* \c -. \} -. \} -. el \{\ -. nop (\f[I]\*[@arg1]\*[@index1]\f[],\ \c -. nop \f[I]\*[@arg2]\*[@index2]\f[])\$* \c -. \} -. rm @arg1 -. rm @arg2 -. rm @index1 -. rm @index2 +.offset \fI\\$1\fP\d\s-3\\$2\s+3\u \fI\\$3\fP\d\s-3\\$4\s+3\u \\$5 .. -.c format: .command "" +.\" format: .command "" .de command -. ds @arg1 \$1\" -. ds @arg2 \$2\" -. shift 2 -. IP "\f[B]\*[@arg1]\f[]\ \f[I]\,\*[@arg2]\/\f[]\$*" -. rm @arg1 -. rm @arg2 -.. -.c format: .command+ "" -.c continue previous .command heading -.de command+ -. ds @arg1 \$1\" -. ds @arg2 \$2\" -. shift 2 -. TP+ -. Text "\f[B]\*[@arg1]\f[]\ \f[I]\,\*[@arg2]\/\f[]\$*" -. rm @arg1 -. rm @arg2 +\fB\\$1\fP\ \fI\,\\$2\/\fP\\$3 .. -.c format: .D-command "" +.\" format: .D-command "" .de D-command -. ds @sub \$1\" -. shift 1 -. IP "\f[B]D\*[@sub]\f[]\ \f[I]\,\$*\/\f[]\|\*[@linebreak]" -. rm @sub -.. -.c format: .D-command+ "" -.c continue previous .D-command heading -.de D-command+ -. ds @sub \$1\" -. shift 1 -. TP+ -. Text "\f[B]D\*[@sub]\f[]\ \f[I]\,\$*\/\f[]\*[@linebreak]" -. rm @sub +\fBD\\$1\fP\ \fI\,\\$2\/\fP\|\*[@linebreak] .. +. +.\" We set these as troff micromotions rather than eqn because \d and \u +.\" can be lifted to XML subscript/superscript tags. Don't change +.\" these to a parameterized string, man2html won't handle that. +.ds hv1 \fIh\d\s-3\&1\s+3\u\~v\d\s-3\&1\s+3\u\fP +.ds hv2 \fIh\d\s-3\&2\s+3\u\~v\d\s-3\&2\s+3\u\fP +.ds hvn \fIh\d\s-3\&n\s+3\u\~v\d\s-3\&n\s+3\u\fP +. .de Da-command -. shift 1 -. ie t \ -. ds @args $h sub 1$\~$v sub 1$ $h sub 2$\~$v sub 2$\" -. el \ -. ds @args \f[I]h1\~v1 h2\~v2\f[]\" -. IP "\f[B]Da\f[]\ \*[@args]\|\*[@linebreak]" -. rm @args +\fBDa\fP\ \*[hv1] \*[hv2]\|\*[@linebreak] .. -.c graphics command .D with a variable number of arguments -.c format: .D-multiarg +.\" graphics command .D with a variable number of arguments +.\" format: .D-multiarg .de D-multiarg -. ds @sub \$1\" -. shift 1 -. ie t \{\ -. ds @args "$h sub 1$\~$v sub 1$ $h sub 2$\~$v sub 2$ .\|.\|. \" -. as @args "$h sub n$\~$v sub n$\" -. \} -. el \ -. ds @args \f[I]h1\~v1 h2\~v2\f[] ... \f[I]\,hn\~vn\f[]\" -. IP "\f[B]D\*[@sub]\f[]\ \*[@args]\|\*[@linebreak]" -. rm @args -. rm @sub +\fBD\\$1\fP\ \*[hv1] \*[hv2] .\|.\|. \*[hvn]\|\*[@linebreak] .. -.c format: .x-command "" +.\" format: .x-command "" .de x-command -. ds @sub \$1\" -. shift 1 -. ds @args -. if (\n[.$] > 0) \ -. ds @args \ \f[I]\,\$*\/\f[]\" -. IP "\f[B]x\*[@sub]\f[]\*[@args]\f[]\|\*[@linebreak]" -. rm @sub -. rm @args +\fBx\\$1\fP\ \fI\\$2\fP\|\*[@linebreak] .. .de xsub -. RI "(" "\$1" " control command)" -. br +.RI "(" "\\$1" " control command)" +.br .. -.ec .\" End of macro definitions . . @@ -369,7 +214,7 @@ format can be quite small. . Its only elements are commands with or without arguments. . -In this document, the term "command" always refers to the +In this document, the term \[lq]command\[rq] always refers to the .I intermediate output language, never to the .I roff @@ -465,7 +310,7 @@ Only one command, .RB ` x\ X ' has an argument that can stretch over several lines, all other commands must have all of their arguments on the same line as the -command, i.e., the arguments may not be splitted by a line break. +command, i.e., the arguments may not be split by a line break. . .P Empty lines, i.e., lines containing only space and/or a comment, can @@ -488,9 +333,9 @@ and the for more on this topic. . Most commands assume the scale indicator\~\c -.unit u , +.BR u , the basic unit of the device, some use\~\c -.unit z , +.BR z , the .I scaled point unit of the device, while others, such as the color commands expect plain @@ -506,11 +351,11 @@ file; see . .P Note that single characters can have the eighth bit set, as can the -names of fonts and special characters. +names of fonts and special characters (this is, glyphs). . -The names of characters and fonts can be of arbitrary length. +The names of glyphs and fonts can be of arbitrary length. . -A character that is to be printed will always be in the current font. +A glyph that is to be printed will always be in the current font. . . .P @@ -558,7 +403,7 @@ is guaranteed to consist of the following three lines (in that order): with the arguments set as outlined in the section .BR "Device Control Commands" . . -But the parser for the +However, the parser for the .I intermediate output format is able to swallow additional whitespace and comments as well. . @@ -615,7 +460,7 @@ extensions. .\" -------------------------------------------------------------------- . .TP -.BI # anything \[la]end_of_line\[ra] +.BI # anything \[la]end-of-line\[ra] A comment. . Ignore any characters from the @@ -659,7 +504,8 @@ is only necessary when two integer arguments would clash or if the preceding argument ends with a string argument. . . -.if (\n[@USE_ENV_STACK] == 1) \{\ +.if \n[@USE_ENV_STACK]=1 \{\ +.TP .command { Open a new environment by copying the actual device configuration data to the environment stack. @@ -668,59 +514,65 @@ The current environment is setup by the device specification and manipulated by the setting commands. . . +.TP .command } Close the actual environment (opened by a preceding .BR { \~command) and restore the previous environment from the environment stack as the actual device configuration data. . -\} \" endif @USE_ENV_STACK +.\} \" endif @USE_ENV_STACK . . -.command C xxx \[la]white_space\[ra] -Print a special groff character named -.argument xxx . +.TP +.command C xxx \[la]white-space\[ra] +Print a glyph (special character) named +.IR xxx . . The trailing .I syntactical space or .I line break -is necessary to allow character names of arbitrary length. +is necessary to allow glyph names of arbitrary length. . -The character is printed at the current print position; the -character's size is read from the font file. +The glyph is printed at the current print position; the +glyph's size is read from the font file. . The print position is not changed. . . +.TP .command c c -Print character\~\c -.argument c +Print glyph with single-letter name\~\c +.I c at the current print position; -the character's size is read from the font file. +the glyph's size is read from the font file. . The print position is not changed. . . +.TP .command f n Set font to font number\~\c -.argument n +.I n (a non-negative integer). . . +.TP .command H n Move right to the absolute vertical position\~\c -.argument n +.I n (a non-negative integer in basic units\~\c -.unit u ) +.BR u ) relative to left edge of current page. . . +.TP .command h n Move -.argument n +.I n (a non-negative integer) basic units\~\c -.unit u +.B u horizontally to the right. . .I [CSTR\~#54] @@ -731,7 +583,8 @@ also, but doesn't use this. . . -.command m "color_scheme \f[R][\f[]component .\|.\|.\f[R]]\f[]" +.TP +.command m "color-scheme \fR[\fPcomponent .\|.\|.\fR]\fP" Set the color for text (glyphs), line drawing, and the outline of graphic objects using different color schemes; the analoguous command for the filling color of graphic objects is @@ -757,11 +610,13 @@ extension. . .RS . +.TP .command mc "cyan magenta yellow" Set color using the CMY color scheme, having the 3\~color components cyan, magenta, and yellow. . . +.TP .command md Set color to the default color value (black in most cases). @@ -769,15 +624,18 @@ Set color to the default color value No component arguments. . . +.TP .command mg "gray" Set color to the shade of gray given by the argument, an integer between 0 (black) and \n[@maxcolor] (white). . . +.TP .command mk "cyan magenta yellow black" Set color using the CMYK color scheme, having the 4\~color components cyan, magenta, yellow, and black. . +.TP .command mr "red green blue" Set color using the RGB color scheme, having the 3\~color components red, green, and blue. @@ -785,27 +643,31 @@ red, green, and blue. .RE . . +.TP .command N n -Print character with index\~\c -.argument n +Print glyph with index\~\c +.I n (an integer, normally non-negative) of the current font. . The print position is not changed. . If .B \-T\~html +or +.B \-T\~xhtml is used, negative values are emitted also to indicate an unbreakable space with given width. . For example, -.B N\~-193 -represents an unbreakable space which has a width of 193u. +.B N\~\-193 +represents an unbreakable space which has a width of 193\|u. . This command is a .I groff extension. . . +.TP .command n b\ a Inform the device about a line break, but no positioning is done by this command. @@ -814,9 +676,9 @@ In .I classical .IR troff , the integer arguments -.argument b +.I b and\~\c -.argument a +.I a informed about the space before and after the current line to make the .I intermediate output @@ -828,11 +690,12 @@ they are just ignored, but they must be provided for compatibility reasons. . . +.TP .command p n Begin a new page in the outprint. . The page number is set to\~\c -.argument n . +.IR n . . This page is completely independent of pages formerly processed even if those have the same page number. @@ -845,12 +708,13 @@ page, so a must be issued before any of these commands. . . +.TP .command s n Set point size to -.argument n +.I n scaled points (this is unit\~\c -.unit z +.B z in GNU .BR @g@troff ). . @@ -858,30 +722,35 @@ in GNU used the unit .I points (\c -.unit p ) +.BR p ) instead; see section .BR COMPATIBILITY . . . -.command t xxx \[la]white_space\[ra] -.command+ t "xxx dummy_arg" \[la]white_space\[ra] -Print a word, i.e., a sequence of characters -.argument xxx -terminated by a space character or a line break; an optional second -integer argument is ignored (this allows the formatter to generate -an even number of arguments). -. -The first character should be printed at the current position, the +.TP +.command t xyz\|.\|.\|. \[la]white-space\[ra] +.TQ +.command t "xyz\|.\|.\|.\& dummy-arg" \[la]white-space\[ra] +Print a word, i.e., a sequence of glyphs with single-letter names +.IR x , +.IR y , +.IR z , +etc., terminated by a space character or a line break; an optional +second integer argument is ignored (this allows the formatter to +generate an even number of arguments). +. +The first glyph should be printed at the current position, the current horizontal position should then be increased by the width of -the first character, and so on for each character. +the first glyph, and so on for each glyph. . -The widths of the characters are read from the font file, scaled for the +The widths of the glyph are read from the font file, scaled for the current point size, and rounded to a multiple of the horizontal resolution. . -Special characters cannot be printed using this command (use the +Special characters (glyphs with names longer than a single letter) +cannot be printed using this command; use the .B C -command for named characters). +command for those glyphs. . This command is a .I groff @@ -893,18 +762,19 @@ keyword; see .BR groff_font (@MAN5EXT@). . . -.command u "n xxx" \[la]white_space\[ra] +.TP +.command u "n xyz\|.\|.\|." \[la]white-space\[ra] Print word with track kerning. . This is the same as the .B t -command except that after printing each character, the current +command except that after printing each glyph, the current horizontal position is increased by the sum of the width of that -character and\~\c -.argument n +glyph and\~\c +.I n (an integer in basic units\~\c -.unit u ). +.BR u ). This command is a .I groff extension; it is only used for devices whose @@ -915,19 +785,21 @@ keyword; see .BR groff_font (@MAN5EXT@). . . +.TP .command V n Move down to the absolute vertical position\~\c -.argument n +.I n (a non-negative integer in basic units\~\c -.unit u ) +.BR u ) relative to upper edge of current page. . . +.TP .command v n Move -.argument n +.I n basic units\~\c -.unit u +.B u down .RI ( n is a non-negative integer). @@ -940,6 +812,7 @@ also, but doesn't use this. . . +.TP .command w Informs about a paddable whitespace to increase readability. . @@ -985,15 +858,17 @@ Some graphics commands can take a variable number of arguments. . In this case, they are integers representing a size measured in basic units\~\c -.unit u . +.BR u . . -The arguments called -.list1..n h +The +.I h +arguments stand for horizontal distances where positive means right, negative left. . -The arguments called -.list1..n v +The +.I v +arguments stand for vertical distances where positive means down, negative up. . All these distances are offsets relative to the current location. @@ -1019,24 +894,26 @@ sent to the postprocessor. . .P In the following command reference, the syntax element -.I \[la]line_break\[ra] +.I \[la]line-break\[ra] means a .I syntactical line break as defined in section .BR Separation . . . +.TP .D-multiarg ~ Draw B-spline from current position to offset .indexed_offset h 1 v 1 , then to offset .indexed_offset h 2 v 2 -if given, etc.\& up to +if given, etc., up to .indexed_offset h n v n . This command takes a variable number of argument pairs; the current position is moved to the terminal point of the drawn curve. . . +.TP .Da-command Draw arc from current position to .indexed_offset h 1 v 1 \|+\|\c @@ -1046,12 +923,14 @@ with center at then move the current position to the final point of the arc. . . +.TP .D-command C d -.D-command+ C d dummy_arg +.TQ +.D-command C "d dummy-arg" Draw a solid circle using the current fill color with diameter\~\c -.argument d +.I d (integer in basic units\~\c -.unit u ) +.BR u ) with leftmost point at the current position; then move the current position to the rightmost point of the circle. . @@ -1063,23 +942,25 @@ This command is a extension. . . +.TP .D-command c d Draw circle line with diameter\~\c -.argument d +.I d (integer in basic units\~\c -.unit u ) +.BR u ) with leftmost point at the current position; then move the current position to the rightmost point of the circle. . . +.TP .D-command E "h v" Draw a solid ellipse in the current fill color with a horizontal diameter of\~\c -.argument h +.I h and a vertical diameter of\~\c -.argument v +.I v (both integers in basic units\~\c -.unit u ) +.BR u ) with the leftmost point at the current position; then move to the rightmost point of the ellipse. . @@ -1088,18 +969,20 @@ This command is a extension. . . +.TP .D-command e "h v" Draw an outlined ellipse with a horizontal diameter of\~\c -.argument h +.I h and a vertical diameter of\~\c -.argument v +.I v (both integers in basic units\~\c -.unit u ) +.BR u ) with the leftmost point at current position; then move to the rightmost point of the ellipse. . . -.D-command F "color_scheme \f[R][\f[]component .\|.\|.\f[R]]\f[]" +.TP +.D-command F "color-scheme \fR[\fPcomponent .\|.\|.\fR]\fP" Set fill color for solid drawing objects using different color schemes; the analoguous command for setting the color of text, line graphics, and the outline of graphic objects is @@ -1114,7 +997,7 @@ different color schemes. These commands are generated by the .I groff escape sequences -.B \*[@backslash]D'F\ .\|.\|.' +.BR \*[@backslash]D'F\ .\|.\|. ' and .B \*[@backslash]M (with no other corresponding graphics commands). @@ -1128,11 +1011,13 @@ extension. . .RS . +.TP .D-command Fc "cyan magenta yellow" Set fill color for solid drawing objects using the CMY color scheme, having the 3\~color components cyan, magenta, and yellow. . . +.TP .D-command Fd Set fill color for solid drawing objects to the default fill color value (black in most cases). @@ -1140,15 +1025,18 @@ Set fill color for solid drawing objects to the default fill color value No component arguments. . . +.TP .D-command Fg "gray" Set fill color for solid drawing objects to the shade of gray given by the argument, an integer between 0 (black) and \n[@maxcolor] (white). . . +.TP .D-command Fk "cyan magenta yellow black" Set fill color for solid drawing objects using the CMYK color scheme, having the 4\~color components cyan, magenta, yellow, and black. . +.TP .D-command Fr "red green blue" Set fill color for solid drawing objects using the RGB color scheme, having the 3\~color components red, green, and blue. @@ -1156,40 +1044,38 @@ having the 3\~color components red, green, and blue. .RE . . +.TP .D-command f n The argument -.argument n +.I n must be an integer in the range -32767 to 32767. . .RS .TP -.RI "0 \[<=] " n " \[<=] 1000" +.RI 0\|\[<=]\| n \|\[<=]\|1000 Set the color for filling solid drawing objects to a shade of gray, where 0 corresponds to solid white, 1000 (the default) to solid black, -and values in between to intermediate shades of gray; this is +and values inbetween to intermediate shades of gray; this is obsoleted by command .BR DFg . . .TP -.IR n " < 0 or " n " > 1000" +.IR n "\|<\|0 or " n \|>\|1000 Set the filling color to the color that is currently being used for the text and the outline, see command .BR m . For example, the command sequence . -.nf -.ft CB -.RS .RS +.IP +.EX mg 0 0 \n[@maxcolor] Df -1 +.EE .RE -.ft -.fi . +.IP sets all colors to blue. -.RE -. . .P No position changing. @@ -1201,51 +1087,54 @@ extension. .RE . . +.TP .D-command l "h v" Draw line from current position to offset .offset h v (integers in basic units\~\c -.unit u ); +.BR u ); then set current position to the end of the drawn line. . . +.TP .D-multiarg p Draw a polygon line from current position to offset -.offset h1 v1 , +.indexed_offset h 1 v 1 , from there to offset -.offset h2 v2 , -etc.\& up to offset -.offset hn vn , +.indexed_offset h 2 v 2 , +etc., up to offset +.indexed_offset h n v n , and from there back to the starting position. . -.ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\ +.ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\ For historical reasons, the position is changed by adding the sum of all arguments with odd index to the actual horizontal position and the even ones to the vertical position. . Although this doesn't make sense it is kept for compatibility. . -\} +.\} .el \{\ As the polygon is closed, the end of drawing is the starting point, so the position doesn't change. -\} +.\} . This command is a .I groff extension. . . +.TP .D-multiarg P The same macro as the corresponding .B Dp command with the same arguments, but draws a solid polygon in the current fill color rather than an outlined polygon. . -.ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\ +.ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\ The position is changed in the same way as with .BR Dp . -\} +.\} .el \ No position changing. . @@ -1254,30 +1143,31 @@ This command is a extension. . . +.TP .D-command t n Set the current line thickness to\~\c -.argument n +.I n (an integer in basic units\~\c -.unit u ) +.BR u ) if -.argument n >0; +.IR n \|>\|0; if -.argument n =0 +.IR n \|=\|0 select the smallest available line thickness; if -.argument n <0 +.IR n \|<\|0 set the line thickness proportional to the point size (this is the default before the first .B Dt command was specified). . -.ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\ +.ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\ For historical reasons, the horizontal position is changed by adding the argument to the actual horizontal position, while the vertical position is not changed. . Although this doesn't make sense it is kept for compatibility. . -\} +.\} .el \ No position changing. . @@ -1328,20 +1218,21 @@ But writings like .B x\ i_like_groff and .B x\ roff_is_groff -resp.\& are accepted as well to mean the same commands. +are accepted as well to mean the same commands. . .P In the following, the syntax element -.I \[la]line_break\[ra] +.I \[la]line-break\[ra] means a .I syntactical line break as defined in section .BR Separation . . +.TP .x-command F name .xsub Filename Use -.argument name +.I name as the intended name for the current file in error reports. . This is useful for remembering the original file name when @@ -1355,31 +1246,34 @@ This command is a extension. . . +.TP .x-command f "n\ s" .xsub font Mount font position\~\c -.argument n +.I n (a non-negative integer) with font named\~\c -.argument s +.I s (a text word), cf. .BR groff_font (@MAN5EXT@). . . +.TP .x-command H n .xsub Height Set character height to\~\c -.argument n +.I n (a positive integer in scaled points\~\c -.unit z ). +.BR z ). . .I Classical troff used the unit points (\c -.unit p ) +.BR p ) instead; see section .BR COMPATIBILITY . . . +.TP .x-command i .xsub init Initialize device. @@ -1388,6 +1282,7 @@ This is the third command of the .IR prologue . . . +.TP .x-command p .xsub pause Parsed but ignored. @@ -1397,31 +1292,34 @@ The classical documentation reads .IR restarted . . . +.TP .x-command r "n\ h\ v" .xsub resolution Resolution is\~\c -.argument n , +.IR n , while -.argument h +.I h is the minimal horizontal motion, and -.argument v +.I v the minimal vertical motion possible with this device; all arguments are positive integers in basic units\~\c -.unit u +.B u per inch. . This is the second command of the .IR prologue . . . +.TP .x-command S n .xsub Slant Set slant to\~\c -.argument n +.I n degrees (an integer in basic units\~\c -.unit u ). +.BR u ). . . +.TP .x-command s .xsub stop Terminates the processing of the current file; issued as the last @@ -1430,6 +1328,7 @@ command of any .IR output . . . +.TP .x-command t .xsub trailer Generate trailer information, if any. @@ -1439,29 +1338,31 @@ In this is actually just ignored. . . +.TP .x-command T xxx .xsub Typesetter Set name of device to word -.argument xxx , +.IR xxx , a sequence of characters ended by the next whitespace character. . The possible device names coincide with those from the groff -.B -T +.B \-T option. . This is the first command of the .IR prologue . . . +.TP .x-command u n .xsub underline Configure underlining of spaces. . If -.argument n +.I n is\~1, start underlining of spaces; if -.argument n +.I n is\~0, stop underlining of spaces. . This is needed for the @@ -1475,10 +1376,11 @@ This command is a extension. . . +.TP .x-command X anything .xsub X-escape Send string -.argument anything +.I anything uninterpreted to the device. . If the line following this command starts with a @@ -1512,21 +1414,21 @@ extension. . In .I classical troff -output, the writing of a single character was mostly done by a very +output, emitting a single glyph was mostly done by a very strange command that combined a horizontal move and the printing of a -character. +glyph. . It didn't have a command code, but is represented by a 3-character argument consisting of exactly 2\~digits and a character. . .TP -.argument ddc +.I ddc Move right -.argument dd +.I dd (exactly two decimal digits) basic units\~\c -.unit u , -then print character\~\c -.argument c . +.BR u , +then print glyph with single-letter name\~\c +.IR c . . . .RS @@ -1551,7 +1453,7 @@ spaces; this made such output almost unreadable. . .P For modern high-resolution devices, this command does not make sense -because the width of the characters can become much larger than two +because the width of the glyphs can become much larger than two decimal digits. . In @@ -1617,14 +1519,16 @@ fed into on the command line. . . -.Topic +.IP \[bu] 2m High-resolution device .I ps . . .RS .P -.ShellCommand echo "hell world" | groff -Z -T ps +.EX +\fBshell>\fP echo "hell world" | groff -Z -T ps +.EE . . .P @@ -1659,7 +1563,7 @@ This output can be fed into the postprocessor to get its representation as a PostScript file. . . -.Topic +.IP \[bu] 2m Low-resolution device .I latin1 . @@ -1676,7 +1580,9 @@ formatter. . . .P -.ShellCommand echo "hell world" | groff -Z -T latin1 +.EX +\fBshell>\fP "hell world" | groff -Z -T latin1 +.EE . . .P @@ -1726,7 +1632,7 @@ This output can be fed into the postprocessor to get a formatted text document. . . -.Topic +.IP \[bu] 2m Classical style output . . @@ -1740,7 +1646,9 @@ displacements. . . .P -.ShellCommand echo "hell world" | groff -Z -T X100 +.EX +\fBshell>\fP "hell world" | groff -Z -T X100 +.EE . . .P @@ -1797,11 +1705,11 @@ format is compatible with this specification except for the following features. . . -.Topic +.IP \[bu] 2m The classical quasi device independence is not yet implemented. . . -.Topic +.IP \[bu] 2m The old hardware was very different from what we use today. . So the @@ -1824,7 +1732,7 @@ modern .IR groff . . . -.Topic +.IP \[bu] 2m The B-spline command .B D~ is correctly handled by the @@ -1833,19 +1741,19 @@ parser, but the drawing routines aren't implemented in some of the postprocessor programs. . . -.Topic +.IP \[bu] 2m The argument of the commands .B s and .B x H has the implicit unit scaled point\~\c -.unit z +.B z in .IR groff , while .I classical troff had point (\c -.unit p ). +.BR p ). . This isn't an incompatibility, but a compatible extension, for both units coincide for all devices without a @@ -1862,8 +1770,8 @@ different name, or seem to have had a different resolution. So conflicts with classical devices are very unlikely. . . -.ie (\n[@STUPID_DRAWING_POSITIONING] == 1) \{\ -.Topic +.ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\ +.IP \[bu] 2m The position changing after the commands .BR Dp , .BR DP , @@ -1873,7 +1781,7 @@ is illogical, but as old versions of groff used this feature it is kept for compatibility reasons. .\} \" @STUPID_DRAWING_POSITIONING .el \{\ -.Topic +.IP \[bu] 2m Temporarily, there existed some confusion on the positioning after the .B D commands that are @@ -1917,15 +1825,14 @@ Device description file for device .IR name . . .TP -.IB \[la]groff_source_dir\[ra] /src/libs/libdriver/input.cpp +.IB \[la]groff-source-dir\[ra] /src/libs/libdriver/input.cpp Defines the parser and postprocessor for the .I intermediate .IR output . . It is located relative to the top directory of the .I groff -source tree, e.g. -.IR @GROFFSRCDIR@ . +source tree. . This parser is the definitive specification of the .I groff intermediate output @@ -1950,7 +1857,9 @@ system or call from the shell prompt . .RS .P -.ShellCommand man @MAN7EXT@ groff +.EX +\fBshell>\fP man @MAN7EXT@ groff +.EE .RE . . @@ -2027,7 +1936,9 @@ It can be read within the integrated help systems, within or from the shell prompt by . .RS -.ShellCommand info groff +.EX +\fBshell>\fP info groff +.EE .RE . . @@ -2035,8 +1946,9 @@ or from the shell prompt by The .I classical troff output language is described in two AT&T Bell Labs CSTR documents available on-line at -.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr.html \ - "Bell Labs CSTR site" . +.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr.html +Bell Labs CSTR site +.UE . . . .TP @@ -2044,9 +1956,11 @@ is described in two AT&T Bell Labs CSTR documents available on-line at .I A Typesetter-independent TROFF by .I Brian Kernighan -is the original and most concise documentation on the output language; -see -.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:97.ps.gz CSTR\~#97 . +is the original and most comprehensive documentation on the output +language; see +.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:97.ps.gz +CSTR\~#97 +.UE . . . .TP @@ -2054,29 +1968,34 @@ see The 1992 revision of the .I Nroff/\:Troff User's Manual by -.I J.\& F.\& Osanna +.I J.\& F.\& Ossanna and .I Brian Kernighan -isn't as concise as +isn't as comprehensive as .I [CSTR\~#97] regarding the output language; see -.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz CSTR\~#54 . +.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz +CSTR\~#54 +.UE . . . .\" -------------------------------------------------------------------- .SH "AUTHORS" .\" -------------------------------------------------------------------- . -Copyright (C) 1989, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +Copyright (C) 1989, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +Free Software Foundation, Inc. . . .P This document is distributed under the terms of the FDL (GNU Free -Documentation License) version 1.1 or later. +Documentation License) version 1.3 or later. . You should have received a copy of the FDL with this package; it is also available on-line at the -.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" . +.UR http://\:www.gnu.org/\:copyleft/\:fdl.html +GNU copyleft site +.UE . . . .P @@ -2091,11 +2010,11 @@ described only parts of the .I groff extensions of the output language. . -It has been rewritten 2002 by \m[blue]Bernd Warken\m[] and is +It was rewritten in 2002 by Bernd Warken and is maintained by -.MTO wl@gnu.org "Werner Lemberg" . -. -.cp \n[groff_out_C] +.MT wl@gnu.org +Werner Lemberg +.ME . . .\" -------------------------------------------------------------------- .\" Emacs settings diff --git a/contrib/groff/man/groff_tmac.man b/contrib/groff/man/groff_tmac.man index 030e739f14..45de5b6707 100644 --- a/contrib/groff/man/groff_tmac.man +++ b/contrib/groff/man/groff_tmac.man @@ -1,29 +1,17 @@ -.TH GROFF_TMAC @MAN5EXT@ "@MDATE@" "Groff Version @VERSION@" -.SH NAME -groff_tmac \- macro files in the roff typesetting system -.SH DESCRIPTION -.\" The .SH was moved to this place to make `apropos' happy. -. -. -.\" -------------------------------------------------------------------- -.\" Legalize -.\" -------------------------------------------------------------------- -. .ig groff_tmac.5 File position: /man/groff_tmac.man -Last update: 27 Jul 2004 - This file is part of groff, the GNU roff type-setting system. -Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +Copyright (C) 2000, 2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. written by Bernd Warken and Werner Lemberg Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being this .ig-section and AUTHOR, with no Front-Cover Texts, and with no Back-Cover Texts. @@ -31,258 +19,15 @@ Front-Cover Texts, and with no Back-Cover Texts. A copy of the Free Documentation License is included as a file called FDL in the main directory of the groff source package. .. -. -.\" -------------------------------------------------------------------- -.\" Setup -.\" -------------------------------------------------------------------- -. -.do nr groff_tmac_C \n[.C] -.cp 0 -. -.mso www.tmac -. -.if n \{\ -. mso tty-char.tmac -. ftr CR R -. ftr CI I -. ftr CB B -.\} -. .ds Ellipsis \&.\|.\|.\&\" . -.\" Global static variables for inter-macro communication -.rr @+Example_font +.TH GROFF_TMAC @MAN5EXT@ "@MDATE@" "Groff Version @VERSION@" +.SH NAME +groff_tmac \- macro files in the roff typesetting system . -.\" -------------------------------------------------------------------- -.\" setup for the macro definitions below -.\" -.\" naming: namespace:cathegory_macro.variable_name (experimental) . .\" -------------------------------------------------------------------- -.\" configuration of prompt for `.Shell_cmd'* macros -.ds groffer:Shell_cmd.prompt_text sh#\" prompt for shell commands -.ds groffer:Shell_cmd+.prompt_text >\" prompt on continuation lines -.ds groffer:Shell_cmd_base.prompt_font I\" font for prompts -. -.\" automatically determine setup from the configuration above -.als @f groffer:Shell_cmd_base.prompt_font\" -.als @t groffer:Shell_cmd.prompt_text\" -.als @t+ groffer:Shell_cmd+.prompt_text\" -.ds groffer:Shell_cmd.prompt \f[\*[@f]]\*[@t]\f[]\" needed -.ds groffer:Shell_cmd+.prompt \f[\*[@f]]\*[@t+]\f[]\" needed -.nr @w \w'\*[groffer:Shell_cmd.prompt]'\" -.nr @w+ \w'\*[groffer:Shell_cmd+.prompt]'\" -.ft \*[@f] -.\" Full prompt width is maximum of texts plus 1m -.nr groffer:Shell_cmd_base.prompt_width (\n[@w]>?\n[@w+]+1m)\" needed -.ft -.rm @f -.rm @f+ -.rm @t -.rm @t+ -.rr @w -.rr @w+ -. -.\"-------------------------------------------------------------------- -.\" Ignore all arguments like a comment, even after a .eo call. -.de c -.. -.c -------------------------------------------------------------------- -.de BIR -. ie (\\n[.$] < 3) \ -. BI \\$@ -. el \{\ -. ds @tmp@ \fB\\$1\f[]\fI\\$2\f[] -. shift 2 -. Text \\*[@tmp@]\fR\\$*\f[] -. rm @tmp@ -. \} -.. -.c -------------------------------------------------------------------- -.c .Env_var ( []) -.c -.c Display an environment variable, with optional punctuation. -.c -.de Env_var -. nh -. SM -. Text \f[CB]\\$1\f[]\\$2 -. hy -.. -.c -------------------------------------------------------------------- -.c .Error (...) -.c -.c Print error message to terminal and abort. -.c -.de Error -. tm \\$* -. ab -.. -.c -------------------------------------------------------------------- -.de Example -. if r@+Example_font \ -. Error previous .Example was not terminated by a ./Example -. nr @+Example_font \\n[.f] -. nh -. nf -. RS -. ft CR -.. -.c -------------------------------------------------------------------- -.de /Example -. if !r@+Example_font \ -. Error no previous call to .Example -. ft \\n[@+Example_font] -. RE -. fi -. hy -. rr @+Example_font -.. -. -.c -------------------------------------------------------------------- -.c .Shell_cmd ( [] ...) -.c -.c A shell command line; display args alternating in fonts CR and CI. -.c -.c Examples: -.c .Shell_cmd "groffer --dpi 100 file" -.c result: `sh# groffer --dpi 100 file' -.c with 'sh#' in font I, the rest in CR -.c -.c .Shell_cmd groffer\~--dpi\~100\~file -.c result: the same as above -.c -.c .Shell_cmd "groffer --dpi=" value " file" -.c result: sh# groffer --dpi=value file -.c with `groffer --dpi=' and `file' in CR; `value' in CI -.c -.c .Shell_cmd groffer\~--dpi= value \~file -.c result: the same as the previous example -.c -.de Shell_cmd -. groffer:Shell_cmd_base "\*[groffer:Shell_cmd.prompt]" \\$@ -.. -.c -------------------------------------------------------------------- -.c .Shell_cmd+ ( [] ...) -.c -.c A continuation line for .Shell_cmd. -.c -.de Shell_cmd+ -. groffer:Shell_cmd_base "\*[groffer:Shell_cmd+.prompt]" \\$@ -.. -.c -------------------------------------------------------------------- -.c .Shell_cmd_base ( [ [] ...]) -.c -.c A shell command line; display args alternating in fonts CR and CI. -.c Internal, do not use directly. -.c -.c Globals: read-only register @.Shell_cmd_width -.c -.de groffer:Shell_cmd_base -. if (\\n[.$] <= 0) \ -. return -. nr @+font \\n[.f]\" -. ds @prompt \\$1\" -. ft CR -. c gap between prompt and command -. nr @+gap \\n[groffer:Shell_cmd_base.prompt_width]-\\w'\\*[@prompt]'\" -. ds @res \\*[@prompt]\h'\\n[@+gap]u'\" -. shift -. ds @cf CR\" -. while (\\n[.$] > 0) \{\ -. as @res \\f[\\*[@cf]]\\$1\" -. shift -. ie '\\*[@cf]'CR' \ -. ds @cf I\" -. el \ -. ds @cf CR\" -. \} -. br -. ad l -. nh -. nf -. Text \\*[@res]\" -. fi -. hy -. ad -. br -. ft \\n[@+font] -. rr @+font -. rr @+gap -. rm @cf -. rm @res -.. -.c -------------------------------------------------------------------- -.c .Text (...) -.c -.c Treat the arguments as text, no matter how they look. -.c -.de Text -. if (\\n[.$] == 0) \ -. return -. nop \)\\$*\) -.. -.c -------------------------------------------------------------------- -.c .Topic ([]) -.c -.c A bulleted paragraph -.c -.de Topic -. ie (\\n[.$] = 0) \ -. ds @indent 2m\" -. el \ -. ds @indent \\$1\" -. TP \\*[@indent] -. Text \[bu] -. rm @indent -.. -.c -------------------------------------------------------------------- -.c .TP+ () -.c -.c Continuation line for .TP header. -.c -.de TP+ -. br -. ns -. TP \\$1 -.. -.c -------------------------------------------------------------------- -.de 'char -. ds @tmp@ `\f(CR\\$1\f[]' -. shift -. Text \\*[@tmp@]\\$* -. rm @tmp@ -.. -.c -------------------------------------------------------------------- -.de option -. ds @tmp@ \f(CB\\$1\f[] -. shift 1 -. Text \\*[@tmp@]\\$* -. rm @tmp@ -.. -.c -------------------------------------------------------------------- -.de argument -. ds @tmp@ \f(CI\\$1\f[] -. shift 1 -. Text \\*[@tmp@]\\$* -. rm @tmp@ -.. -.c -------------------------------------------------------------------- -.de request -. ds @tmp@ \f(CB\\$1\f[] -. shift 1 -. Text .\\*[@tmp@]\\$* -. rm @tmp@ -.. -.c -------------------------------------------------------------------- -.de escape -. ds @tmp@ \f[CB]\\$1\f[] -. shift 1 -. Text \[rs]\\*[@tmp@]\\$* -. rm @tmp@ -.. -.\" -------------------------------------------------------------------- -.\" SH DESCRIPTION +.SH DESCRIPTION .\" -------------------------------------------------------------------- . The @@ -320,16 +65,28 @@ Note that it is not possible to use multiple primary macro packages at the same time; saying e.g.\& . .IP -.Shell_cmd "groff \-m man \-m ms foo" +.EX +\fIsh#\fP groff \-m man \-m ms foo +.EE . .P or . .IP -.Shell_cmd "groff \-m man foo \-m ms bar" +.EX +\fIsh#\fP groff \-m man foo \-m ms bar +.EE . .P -will fail. +fails. +Exception to this is the use of man pages written with either the +.B mdoc +or the +.B man +macro package. +See below the description of the +.B andoc.tmac +file. . . .\" -------------------------------------------------------------------- @@ -345,7 +102,7 @@ This is the classical macro package for UNIX manual pages . .TP .B doc -.TP+ +.TQ .B mdoc An alternative macro package for man\~pages mainly used in BSD systems; it provides many new features, but it is not the standard for @@ -353,6 +110,18 @@ man\~pages; see .BR groff_mdoc (@MAN7EXT@). . . +.TP +.B andoc +.TQ +.B mandoc +Use this file in case you don't know whether the +.B man +macros or the +.B mdoc +package should be used. +Multiple man pages (in either format) can be handled. +. +. .\" -------------------------------------------------------------------- .SS "Full Packages" .\" -------------------------------------------------------------------- @@ -403,6 +172,125 @@ macro package; see . . .\" -------------------------------------------------------------------- +.SS "Language-specific Packages" +.\" -------------------------------------------------------------------- +. +.TP +.B cs +This file adds support for Czech localization, including the main macro +packages (me, mom, mm, and ms). +. +.IP +Note that +.B cs.tmac +sets the input encoding to latin-2. +. +. +.TP +.B de +.TQ +.B den +German localization support, including the main macro packages (me, mom, mm, +and ms). +. +.IP +.B de.tmac +selects hyphenation patterns for traditional orthography, and +.B den.tmac +does the same for the new orthography (`Recht\%schreib\%reform'). +. +It should be used as the last macro package on the command line. +. +. +.TP +.B fr +This file adds support for French localization, including the main macro +packages (me, mom, mm, and ms). +. +. +Example: +.RS +.IP +.EX +\fIsh#\fP groff -ms -mfr foo.ms > foo.ps +.EE +.RE +. +.IP +Note that +.B fr.tmac +sets the input encoding to latin-9 to get proper support of the `oe' +ligature. +. +. +.TP +.B sv +Swedish localization support, including the me, mom, and ms macro packages. +. +Note that Swedish for the mm macros is handled separately; see +.BR groff_mmse (@MAN7EXT@). +. +It should be used as the last macro package on the command line. +. +. +.\" -------------------------------------------------------------------- +.SS "Input Encodings" +.\" -------------------------------------------------------------------- +. +. +.TP +.B latin1 +.TQ +.B latin2 +.TQ +.B latin5 +.TQ +.B latin9 +Various input encodings supported directly by groff. +. +Normally, this macro is loaded at the very beginning of a document or +specified as the first macro argument on the command line. +. +.B @g@roff +loads latin1 by default at start-up. +. +Note that these macro packages don't work on EBCDIC hosts. +. +. +.TP +.B cp1047 +Encoding support for EBCDIC. +. +On those platforms it is loaded automatically at start-up. +. +Due to different character ranges used in +.B @g@roff +it doesn't work on architectures which are based on ASCII. +. +. +.P +Note that it can happen that some input encoding characters are not +available for a particular output device. +. +For example, saying +. +.P +.EX +groff -Tlatin1 -mlatin9 ... +.EE +. +.P +fails if you use the Euro character in the input. +. +Usually, this limitation is present only for devices which have a +limited set of output glyphs +.RB ( \-Tascii , +.BR \-Tlatin1 ); +for other devices it is usually sufficient to install proper +fonts which contain the necessary glyphs. +. +. +.\" -------------------------------------------------------------------- .SS "Special Packages" .\" -------------------------------------------------------------------- . @@ -412,6 +300,21 @@ macro package or to plain groff. . . .TP +.B 60bit +Provide some macros for addition, multiplication, and division of 60bit +integers (allowing safe multiplication of 30bit integers, for example). +. +. +.TP +.B ec +Switch to the EC and TC font families. +. +To be used with +.BR \%grodvi (@MAN1EXT@) +\[en] this man page also gives more details of how to use it. +. +. +.TP .B papersize This macro file is already loaded at start-up by .B @g@troff @@ -450,7 +353,10 @@ For example, use the following for PS output on A4 paper in landscape orientation: . .IP -.Shell_cmd "groff \-Tps \-dpaper=a4l \-P\-pa4 \-P\-l \-ms foo.ms > foo.ps" +.EX +.SM +\fIsh#\fP groff \-Tps \-dpaper=a4l \-P\-pa4 \-P\-l \-ms foo.ms > foo.ps +.EE . . .TP @@ -463,10 +369,10 @@ needed for the .BR @g@pic (@MAN1EXT@) preprocessor. . -They will center each picture. +They center each picture. . Use it only if your macro package doesn't provide proper definitions -for those two macros (actually, most of them already have). +for those two macros (actually, most of them already do). . . .TP @@ -475,27 +381,46 @@ A single macro is provided in this file, .BR PSPIC , to include a PostScript graphic in a document. . -It makes only sense for output devices which support inclusion of PS -images: +The following output devices support inclusion of PS images: .BR \-Tps , .BR \-Tdvi , +.BR \-Thtml , and -.BR \-Thtml ; -the file is then loaded automatically. +.BR \-Txhtml ; +for all other devices the image is replaced with a hollow rectangle +of the same size. . +This macro file is already loaded at start-up by +.B @g@troff +so it isn't necessary to call it explicitly. +. +.IP Syntax: .RS .IP -\&\fB.PSPIC\fP [\fB\-L\fP|\fB-R\fP|\fB\-I\fP \fIn\fP]\ \fI\|file\fP [\fIwidth\fP [\fIheight\fP]] +\&\fB.PSPIC\fP \ +[\fB\-L\fP\|\ +|\|\fB\-R\fP\|\ +|\|\fB\-C\fP\|\ +|\|\fB\-I\fP\ \fIn\fP] \ +\fI\|file\fP [\fIwidth\fP [\fIheight\fP]] .RE . .IP .I file -is the name of the file containing the illustration; +is the name of the PostScript file; .I width and .I height -give the desired width and height of the graphic. +give the desired width and height of the image. +. +If neither a +.I width +nor a +.I height +argument is specified, the image's natural width (as given in +the file's bounding box) or the current line length is used +as the width, whatever is smaller. . The .I width @@ -505,7 +430,7 @@ arguments may have scaling indicators attached; the default scaling indicator is\~\c .BR i . . -This macro will scale the graphic uniformly +This macro scales the graphic uniformly in the x and y\~directions so that it is no more than .I width wide @@ -513,12 +438,14 @@ and .I height high. . -By default, the graphic will be horizontally centered. +Option +.B \-C +centers the graphic horizontally, which is the default. . The -.BI \-L +.B \-L and -.BI \-R +.B \-R options cause the graphic to be left-aligned and right-aligned, respectively. . @@ -529,6 +456,37 @@ option causes the graphic to be indented by\~\c (default scaling indicator is\~\c .BR m ). . +.IP +For use of +.B .PSPIC +within a diversion it is recommended to extend it with +the following code, assuring that the diversion's width completely +covers the image's width. +. +.RS +.IP +.EX +\&.am PSPIC +\&.\ \ vpt 0 +\&\[rs]h'(\[rs]\[rs]n[ps-offset]u + \[rs]\[rs]n[ps-deswid]u)' +\&.\ \ sp -1 +\&.\ \ vpt 1 +\&.. +.EE +.RE +. +. +.TP +.B ptx +A single macro is provided in this file, +.BR xx , +for formatting permuted index entries as produces by the GNU +.BR ptx (1) +program. +. +In case you need a different formatting, copy the macro into +your document and adapt it to your needs. +. . .TP .B trace @@ -543,15 +501,15 @@ See .TP .B tty-char Overrides the definition of standard troff characters and some groff -characters for tty devices. +characters for TTY devices. . The optical appearance is intentionally inferior compared to that of -normal tty formatting to allow processing with critical equipment. +normal TTY formatting to allow processing with critical equipment. . . .TP .B www -Additions of elements known from the html format, as being used in the +Additions of elements known from the HTML format, as used in the internet (World Wide Web) pages; this includes URL links and mail addresses; see .BR groff_www (@MAN7EXT@). @@ -561,18 +519,17 @@ addresses; see .SH NAMING .\" -------------------------------------------------------------------- . -In classical roff systems, there was a funny naming scheme for macro -packages, due to a simplistic design in option parsing. -. -Macro packages were always included by option -.option -m; +Classical roff systems were designed before the conventions of the +modern C +.BR getopt (3) +call evolved, and used a naming scheme for macro packages that looks +odd to modern eyes. Macro packages were always included with the option +.BR \-m ; when this option was directly followed by its argument without an intervening space, this looked like a long option preceded by a single minus \[em] a sensation in the computer stone age. -. -To make this optically working for macro package names, all classical -macro packages choose a name that started with the letter -.'char m , +To make this invocation form work, classical troff +macro packages used names that started with the letter `m', which was omitted in the naming of the macro file. . . @@ -584,18 +541,16 @@ while its macro file So it could be activated by the argument .I an to option -.option -m , +.BR \-m , or -.option -man +.BR \-man for short. . . .P -For similar reasons, macro packages that did not start with an -.'char m -had a leading -.'char m -added in the documentation and in talking; for example, the package +For similar reasons, macro packages that did not start with an `m' +had a leading `m' +added in the documentation and in speech; for example, the package corresponding to .I tmac.doc was called @@ -604,15 +559,14 @@ in the documentation, although a more suitable name would be .IR doc . For, when omitting the space between the option and its argument, the command line option for activating this package reads -.option "-mdoc" . +.BR \-mdoc . . . .P To cope with all situations, actual versions of .BR groff (@MAN1EXT@) are smart about both naming schemes by providing two macro files -for the inflicted macro packages; one with a leading -.'char m , +for the inflicted macro packages; one with a leading `m' the other one without it. . So in @@ -622,17 +576,17 @@ the macro package may be specified as on of the following four methods: . .IP -.Shell_cmd "groff\~\-m\~man" -.Shell_cmd "groff\~\-man" -.Shell_cmd "groff\~\-mman" -.Shell_cmd "groff\~\-m\~an" +.EX +\fIsh#\fP groff\ \-m\ man +\fIsh#\fP groff\ \-man +\fIsh#\fP groff\ \-mman +\fIsh#\fP groff\ \-m\ an +.EE . . .P -Recent packages that do not start with -.'char m -do not use an additional -.'char m +Recent packages that do not start with `m' +do not use an additional `m' in the documentation. . For example, the @@ -640,21 +594,22 @@ For example, the macro package may be specified only as one of the two methods: . .IP -.Shell_cmd "groff\~\-m\~www" -.Shell_cmd "groff\~\-mwww" +.EX +\fIsh#\fP groff\ \-m\ www +\fIsh#\fP groff\ \-mwww +.EE . . .P Obviously, variants like -.I -mmwww +.I \-mmwww would not make much sense. . . .P A second strange feature of classical troff was to name macro files -according to -.BIR tmac. name . -In modern operating systems, the type of a file is specified as +in the form \f[B]tmac.\f[]\f[I]name\f[]. +In modern operating systems, the type of a file is specified as a postfix, the file name extension. . Again, groff copes with this situation by searching both @@ -680,8 +635,7 @@ In .IR groff , most macro packages are described in\~man pages called .BR groff_\f[I]name\f[] (@MAN7EXT@), -with a leading -.'char m +with a leading `m' for the classical packages. . . @@ -692,8 +646,8 @@ for the classical packages. There are several ways to use a macro package in a document. . The classical way is to specify the troff/groff option -.option \-m -.argument name +.BR \-m +.I name at run-time; this makes the contents of the macro package .I name available. @@ -702,37 +656,37 @@ In groff, the file .IB name .tmac is searched within the tmac path; if not found, .BI tmac. name -will be searched for instead. +is searched for instead. . . .P Alternatively, it is also possible to include a macro file by adding the request -.request so +.B .so .I filename into the document; the argument must be the full file name of an existing file, possibly with the directory where it is kept. . In groff, this was improved by the similar request -.request mso +.B .mso .IR package , which added searching in the tmac path, just like option -.option -m +.BR \-m does. . . .P Note that in order to resolve the -.request so +.B .so and -.request mso +.B .mso requests, the roff preprocessor .BR soelim (@MAN1EXT@) must be called if the files to be included need preprocessing. . This can be done either directly by a pipeline on the command line or by using the troff/groff option -.option \-s . +.BR \-s . . .I man calls soelim automatically. @@ -740,7 +694,11 @@ calls soelim automatically. . .P For example, suppose a macro file is stored as +. +.IP .I @MACRODIR@/macros.tmac +. +.P and is used in some document called .IR docu.roff . . @@ -749,30 +707,37 @@ and is used in some document called At run-time, the formatter call for this is . .IP -.Shell_cmd "groff\~\-m\~" "macrofile\~document.roff" +.EX +\fIsh#\fP groff \-m macros docu.roff +.EE . . .P To include the macro file directly in the document either . .IP -.Example -. Text .mso macrofile.tmac -./Example +.EX +\&.mso macros.tmac +.EE . .P is used or . .IP -.Example -. Text .so @MACRODIR@/macros.tmac -./Example +.EX +\&.so @MACRODIR@/macros.tmac +.EE . . .P -In both cases, the formatter is called with +In both cases, the formatter should be called with option +.B \-s +to invoke +.BR soelim . .IP -.Shell_cmd "groff\~\-s\~" docu.roff +.EX +\fIsh#\fP groff \-s docu.roff +.EE . . .P @@ -781,9 +746,9 @@ If you want to write your own groff macro file, call it and put it in some directory of the tmac path, see section .BR FILES . Then documents can include it with the -.request mso +.B .mso request or the option -.option -m . +.BR \-m . . . .ig @@ -810,23 +775,23 @@ abbreviations for those preprocessor commands that should be run when formatting the document. . Mostly, only the letters corresponding to the options for the -preprocessors are recognized, -.'char e +preprocessors are recognized, +`e' (for .BR eqn ), -.\" 'char G , -.\" 'char g , -.'char p , +.\" `G', +.\" `g', +`p` (for .BR pic ), -.'char R +`R' (for .BR refer ), -.'char s +`s' (for .BR soelim ), and -.'char t +`t' (for .BR tbl ). (see @@ -845,10 +810,7 @@ The .I man program handles some preprocessors automatically, such that in man\~pages only the following characters should be used: -.'char e , -.'char p , -and -.'char t . +`e', `p', and `t'. . . .. @@ -881,17 +843,17 @@ macro call. . Within the macro definition, the arguments are available as the escape sequences -.BR $1 , +.BR \[rs]$1 , \*[Ellipsis], -.BR $9 , -.BR $[ \*[Ellipsis] ] , -.BR $* , +.BR \[rs]$9 , +.BR \[rs]$[ \*[Ellipsis] ] , +.BR \[rs]$* , and -.BR $@ , +.BR \[rs]$@ , the name under which the macro was called is in -.BR $0 , +.BR \[rs]$0 , and the number of arguments is in register -.BR \n[.$] ; +.BR \[rs]n[.$] ; see .BR groff (@MAN7EXT@). . @@ -902,6 +864,8 @@ see . The phase when groff reads a macro is called .I "copy-in mode" +or +.I "copy mode" in roff-talk. . This is comparable to the C\~preprocessing phase during the development @@ -913,7 +877,7 @@ In this phase, groff interprets all backslashes; that means that all escape sequences in the macro body are interpreted and replaced by their value. . -For constant expression, this is wanted, but strings and registers +For constant expressions, this is wanted, but strings and registers that might change between calls of the macro must be protected from being evaluated. . @@ -927,16 +891,16 @@ the macro to the terminal, define a macro named `.print_args', say. . . -.P +.IP .ds @1 \[rs]f[I]\[rs]\[rs]$0\[rs]f[]\" .ds @2 arguments:\" -.Example -. Text .ds midpart was called with -. Text .de print_args -. Text .\~\~tm\~\*[@1]\~\[rs]\[rs]*[midpart]\~\[rs]\[rs]n[.$]\~\*[@2] -. Text .\~\~tm\~\[rs]\[rs]$* -. Text .. -./Example +.EX +\&.ds midpart was called with +\&.de print_args +\&.\ \ tm\ \*[@1]\ \[rs]*[midpart]\ \[rs]\[rs]n[.$]\ \*[@2] +\&.\ \ tm\ \[rs]\[rs]$* +\&.. +.EE .rm @1 .rm @2 . @@ -944,25 +908,25 @@ say. .P When calling this macro by . -.P -.Example -. Text .print_args arg1 arg2 -./Example +.IP +.EX +\&.print_args arg1 arg2 +.EE . .P the following text is printed to the terminal: . -.P -.Example -. Text \f[CI]print_args\f[] was called with the following 2 arguments: +.IP +.EX +\&\f[CI]print_args\f[] was called with the following 2 arguments: arg1 arg2 -./Example +.EE . . .P Let's analyze each backslash in the macro definition. . -As the positional parameters and the number of arguments will change +As the positional parameters and the number of arguments change with each call of the macro their leading backslash must be doubled, which results in .I \[rs]\[rs]$* @@ -976,14 +940,14 @@ alias name, so .P On the other hand, .I midpart -is a constant string, it will not change, so no doubling for +is a constant string, it does not change, so no doubling for .IR \[rs]*[midpart] . The .I \[rs]f escape sequences are predefined groff elements for setting the font within the text. . -Of course, this behavior will not change, so no doubling with +Of course, this behavior does not change, so no doubling with .I \[rs]f[I] and .IR \[rs]f[] . @@ -1010,18 +974,18 @@ strings, registers, etc. For example, the code above can be written in a simpler way by . . -.P +.IP .ds @1 \[rs]f[I]\[rs]$0\[rs]f[]\" .ds @2 arguments:\" -.Example -. Text .eo -. Text .ds midpart was called with -. Text .de print_args -. Text .\~\~tm\~\*[@1]\~\[rs]*[midpart]\~\[rs]n[.$]\~\*[@2] -. Text .\~\~tm\~\[rs]$* -. Text .. -. Text .ec -./Example +.EX +\&.eo +\&.ds midpart was called with +\&.de print_args +\&.\ \ tm\ \*[@1]\ \[rs]*[midpart]\ \[rs]n[.$]\ \*[@2] +\&.\ \ tm\ \[rs]$* +\&.. +\&.ec +.EE .rm @1 .rm @2 . @@ -1030,7 +994,7 @@ For example, the code above can be written in a simpler way by Unfortunately, draft mode cannot be used universally. . Although it is good enough for defining normal macros, draft mode -will fail with advanced applications, such as indirectly defined +fails with advanced applications, such as indirectly defined strings, registers, etc. . An optimal way is to define and test all macros in draft mode and then @@ -1043,22 +1007,24 @@ request. .SS "Tips for Macro Definitions" .\" -------------------------------------------------------------------- . -.Topic +.IP \(bu Start every line with a dot, for example, by using the groff request .B .nop for text lines, or write your own macro that handles also text lines with a leading dot. . +.RS .IP -.Example -. Text .de Text -. Text .\~\~if (\[rs]\[rs]n[.$] == 0)\~\[rs] -. Text .\~\~\~\~return -. Text .\~nop\~\[rs])\[rs]\[rs]$*[rs]\) -. Text .. -./Example -. -.Topic +.EX +\&.de Text +\&.\ \ if (\[rs]\[rs]n[.$] == 0)\ \[rs] +\&.\ \ \ \ return +\&.\ \ nop\ \[rs])\[rs]\[rs]$*\[rs]) +\&.. +.EE +.RE +. +.IP \(bu Write a comment macro that works both for copy-in and draft mode; for as escaping is off in draft mode, trouble might occur when normal comments are used. @@ -1066,18 +1032,21 @@ comments are used. For example, the following macro just ignores its arguments, so it acts like a comment line: . +.RS .IP -.Example -. Text .de\~c -. Text .. -. Text .c\~This\~is\~like\~a\~comment\~line. -./Example +.EX +\&.de\ c +\&.. +\&.c\ This\ is\ like\ a\ comment\ line. +.EE +.RE . -.Topic -In long macro definitions, make ample use of comment lines or empty -lines for a better structuring. +.IP \(bu +In long macro definitions, make ample use of comment lines or +almost-empty lines (this is, lines which have a leading dot +and nothing else) for a better structuring. . -.Topic +.IP \(bu To increase readability, use groff's indentation facility for requests and macro calls (arbitrary whitespace after the leading dot). . @@ -1086,7 +1055,7 @@ and macro calls (arbitrary whitespace after the leading dot). .SS "Diversions" .\" -------------------------------------------------------------------- . -Diversions can be used to realize quite advanced programming +Diversions can be used to implement quite advanced programming constructs. . They are comparable to pointers to large data structures in the @@ -1097,16 +1066,15 @@ C\~programming language, but their usage is quite different. In their simplest form, diversions are multi-line strings, but they get their power when diversions are used dynamically within macros. . -The information stored in a diversion can be retrieved by calling the -diversion just like a macro. +The (formatted) information stored in a diversion can be retrieved by +calling the diversion just like a macro. . . .P -Most of the problems arising with diversions can be avoided if you are -conscious about the fact that diversions always deal with complete -lines. +Most of the problems arising with diversions can be avoided if you remain +aware of the fact that diversions always store complete lines. . -If diversions are used when the line buffer has not been flashed, +If diversions are used when the line buffer has not been flushed, strange results are produced; not knowing this, many people get desperate about diversions. . @@ -1114,7 +1082,7 @@ To ensure that a diversion works, line breaks should be added at the right places. . To be on the secure side, enclose everything that has to do with -diversions into a pair of line breaks; for example, by amply using +diversions into a pair of line breaks; for example, by explicitly using .B .br requests. . @@ -1161,37 +1129,55 @@ a colon separated list of these constitutes the .P The search sequence for macro files is (in that order): . -.Topic +.IP \(bu the directories specified with troff/groff's .B \-M command line option . -.Topic +.IP \(bu the directories given in the -.Env_var $GROFF_TMAC_PATH +.B $GROFF_TMAC_PATH environment variable . -.Topic +.IP \(bu the current directory (only if in unsafe mode, which is enabled by the .B \-U command line switch) . -.Topic +.IP \(bu the home directory . -.Topic +.IP \(bu a platform-specific directory, being +. +.RS +.IP .B @SYSTEMMACRODIR@ +.RE +. +.IP in this installation . -.Topic +.IP \(bu a site-specific (platform-independent) directory, being +. +.RS +.IP .B @LOCALMACRODIR@ +.RE +. +.IP in this installation . -.Topic +.IP \(bu the main tmac directory, being +. +.RS +.IP .B @MACRODIR@ +.RE +. +.IP in this installation . . @@ -1200,7 +1186,7 @@ in this installation .\" -------------------------------------------------------------------- . .TP -.Env_var $GROFF_TMAC_PATH +.B $GROFF_TMAC_PATH A colon separated list of additional tmac directories in which to search for macro files. . @@ -1211,15 +1197,18 @@ See the previous section for a detailed description. .SH AUTHOR .\" -------------------------------------------------------------------- . -Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +Copyright (C) 2000, 2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009 +Free Software Foundation, Inc. . .P This document is distributed under the terms of the FDL (GNU Free -Documentation License) version 1.1 or later. +Documentation License) version 1.3 or later. . You should have received a copy of the FDL on your system, it is also available on-line at the -.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" . +.UR http://\:www.gnu.org/\:copyleft/\:fdl.html +GNU copyleft site +.UE . . .P This document is part of @@ -1227,9 +1216,13 @@ This document is part of the GNU roff distribution. . It was written by -.MTO bwarken@mayn.de "Bernd Warken" ; +.MT bwarken@mayn.de +Bernd Warken +.ME ; it is maintained by -.MTO wl@gnu.org "Werner Lemberg" . +.MT wl@gnu.org +Werner Lemberg +.ME . . . .\" -------------------------------------------------------------------- @@ -1249,19 +1242,19 @@ an overview of the groff system. . .TP .BR groff_man (@MAN7EXT@), -.TP+ +.TQ .BR groff_mdoc (@MAN7EXT@), -.TP+ +.TQ .BR groff_me (@MAN7EXT@), -.TP+ +.TQ .BR groff_mm (@MAN7EXT@), -.TP+ +.TQ .BR groff_mom (@MAN7EXT@), -.TP+ +.TQ .BR groff_ms (@MAN7EXT@), -.TP+ +.TQ .BR groff_trace (@MAN7EXT@), -.TP+ +.TQ .BR groff_www (@MAN7EXT@). the groff tmac macro packages. . @@ -1273,9 +1266,9 @@ the groff language. . .P The Filesystem Hierarchy Standard is available at the -.URL http://\:www.pathname.com/\:fhs/ "FHS web site" . -. -.cp \n[groff_tmac_C] +.UR http://\:www.pathname.com/\:fhs/ +FHS web site +.UE . . .\" Local Variables: .\" mode: nroff diff --git a/contrib/groff/man/roff.man b/contrib/groff/man/roff.man index 50cde7b61e..0368c3f92b 100644 --- a/contrib/groff/man/roff.man +++ b/contrib/groff/man/roff.man @@ -1,16 +1,16 @@ +'\" t .ig roff.man -Last update: 1 Jun 2004 - This file is part of groff, the GNU roff type-setting system. -Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +Copyright (C) 2000, 2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009 +Free Software Foundation, Inc. written by Bernd Warken maintained by Werner Lemberg Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being this .ig-section and AUTHORS, with no Front-Cover Texts, and with no Back-Cover Texts. @@ -19,130 +19,25 @@ A copy of the Free Documentation License is included as a file called FDL in the main directory of the groff source package. .. . -.\" -------------------------------------------------------------------- -.\" Setup -.\" -------------------------------------------------------------------- -. -.do nr roff_C \n[.C] -.cp 0 -. -.mso www.tmac -. -.if n \{\ -. mso tty-char.tmac -. ftr CR R -. ftr CI I -. ftr CB B -.\} -. -.if '\*[.T]'dvi' \{\ -. ftr CB CW -.\} -. . .\" -------------------------------------------------------------------- -.\" String definitions -. -.\" Final `\""' comments are used to make Emacs happy, sic \"" -. -.\" The `-' sign for options. -.ie t \{\ -. ds @- \-\" -. ds @-- \-\-\" -.\} -.el \{\ -. ds @- -\" -. ds @-- --\" -.\} -. -.ds Comment \.\[rs]\[dq]\" -.ds Ellipsis \.\|.\|.\&\" -. -. -.\" -------------------------------------------------------------------- -.\" Begin of macro definitions -. -.de c -.\" this is like a comment request when escape mechanism is off -.. -. -.eo -. -.c --------------------------------------------------------------------- -. -.de Text -. nop \)\$* -.. -. -.de CodeSkip -. ie t \ -. sp 0.2v -. el \ -. sp -.. +.\" Local macros . .de Esc -. ds @1 \$1\" +. ds @1 \\$1 . shift -. Text \f[B]\[rs]\*[@1]\f[]\$* +. nop \f[B]\[rs]\\*[@1]\f[]\\$* . rm @1 .. . +. .de QuotedChar -. ds @1 \$1 +. ds @1 \\$1 . shift -. nop `\f[B]\*[@1]\f[]'\$* +. nop `\f[B]\\*[@1]\f[]'\\$* . rm @1 .. . -.c -------------------------------------------------------------------- -. -.c a shell command line -.de ShellCommand -. br -. ad l -. nh -. Text \f[I]sh#\h'1m'\f[]\f[CR]\$*\f[]\&\" -. ft R -. ft P -. hy -. ad -.. -. -.c -------------------------------------------------------------------- -. -.c ShortOpt ([c [punct]]) -.c -.c `-c' somewhere in the text. -.c The second argument is some trailing punctuation. -.c -.de ShortOpt -. ds @1 \$1\" -. shift -. nh -. Text \f[CB]\*[@-]\f[]\f[B]\*[@1]\f[]\/\$* -. hy -. rm @1 -.. -. -.de TP+ -. br -. ns -. TP \$1 -.. -. -.c -------------------------------------------------------------------- -. -.c Topic -.c -.de Topic -. TP 2m -. Text \[bu] -.. -. -.ec -.\" End of macro definitions -. . .\" -------------------------------------------------------------------- .\" Title @@ -158,195 +53,177 @@ roff \- concepts and history of roff typesetting .\" -------------------------------------------------------------------- . .I roff -is the general name for a set of type-setting programs, known under +is the general name for a set of text formatting programs, known under names like -.IR troff , -.IR nroff , -.IR ditroff , -.IR groff , +.BR troff , +.BR nroff , +.BR ditroff , +.BR groff , etc. . -A roff type-setting system consists of an extensible text formatting -language and a set of programs for printing and converting to other -text formats. +A +.I roff +system consists of an extensible text formatting language and a set of +programs for printing and converting to other text formats. . -Traditionally, it is the main text processing system of Unix; every -Unix-like operating system still distributes a roff system as a core -package. +Unix-like operating systems distribute a +.I roff +system as a core package. . .P -The most common roff system today is the free software implementation -.IR "GNU roff", +The most common +.I roff +system today is the free software implementation \f[CR]GNU\f[] +.IR roff , .BR groff (@MAN1EXT@). . -The pre-groff implementations are referred to as -.I classical -(dating back as long as 1973). -. .I groff -implements the look-and-feel and functionality of its classical -ancestors, but has many extensions. -. -As -.I groff -is the only roff system that is available for every (or almost every) -computer system it is the de-facto roff standard today. +implements the look-and-feel and functionality of its ancestors, with many +extensions. . .P -In some ancient Unix systems, there was a binary called -.B roff -that implemented the even more ancient -.B runoff -of the -.I Multics -operating system, cf. section +The ancestry of +.I roff +is described in section .BR HISTORY . -The functionality of this program was very restricted even in -comparison to ancient troff; it is not supported any longer. . -Consequently, in this document, the term +In this document, the term .I roff -always refers to the general meaning of -.IR "roff system" , -not to the ancient roff binary. +always refers to the general class of roff programs, not to the +.B roff +command provided in early UNIX systems. . .P -In spite of its age, roff is in wide use today, for example, the manual -pages on UNIX systems +In spite of its age, +.I roff +is in wide use today, for example, the manual pages on UNIX systems .RI ( man\~pages\/ ), many software books, system documentation, standards, and corporate documents are written in roff. . -The roff output for text devices is still unmatched, and its graphical -output has the same quality as other free type-setting programs and is -better than some of the commercial systems. +The +.I roff +output for text devices is still unmatched, and its graphical output +has the same quality as other free type-setting programs and is better +than some of the commercial systems. . .P -The most popular application of roff is the concept of -.I manual pages -or shortly -.IR "man pages" ; -this is the standard documentation system on many operating systems. +.I roff +is used to format UNIX +.IR "manual pages" , +(or +.IR "man pages" ), +the standard documentation system on many UNIX-derived operating systems. . .P -This document describes the historical facts around the development -of the +This document describes the history of the development of the .IR "roff system" ; -some usage aspects common to all roff versions, details on the roff +some usage aspects common to all +.I roff +versions, details on the +.I roff pipeline, which is usually hidden behind front-ends like .BR groff (@MAN1EXT@); -an general overview of the formatting language; some tips for editing -roff files; and many pointers to further readings. +a general overview of the formatting language; some tips for editing +.I roff +files; and many pointers to further readings. . . .\" -------------------------------------------------------------------- .SH "HISTORY" .\" -------------------------------------------------------------------- . +Document formatting by computer dates back to the 1960s. +. The .I roff -text processing system has a very long history, dating back to the -1960s. -. -The roff system itself is intimately connected to the Unix operating -system, but its roots go back to the earlier operating systems CTSS -and Multics. +system itself is intimately connected to the Unix operating system, but its +roots go back to the earlier operating systems CTSS and Multics. . . .\" -------------------------------------------------------------------- -.SS "The Predecessor runoff" +.SS "The Predecessor RUNOFF" .\" -------------------------------------------------------------------- . +.BR roff 's +ancestor +.B RUNOFF +was written in the MAD language by +.I Jerry Saltzer +for the +.IR "Compatible Time Sharing System (CTSS)" , +a project of the Massachusetts Institute of Technology (MIT), in 1963 and +1964 \[en] note that CTSS commands were all uppercase. +. .P -The evolution of -.I roff -is intimately related to the history of the operating systems. +In 1965, MIT's Project MAC teamed with Bell Telephone Laboratories (BTL) +and General Electric to begin the +.UR http://\:www.multicians.org +.I Multics +system +.UE . . -Its predecessor +A command called .B runoff -was written by -.I Jerry Saltzer -on the -.I CTSS -operating system -.RI ( "Compatible Time Sharing System" ) -as early as 1961. -. -When CTSS was further developed into the operating system -.URL http://\:www.multicians.org "Multics" , -the famous predecessor of Unix from 1963, -.I runoff -became the main format for documentation and text processing. -. -Both operating systems could only be run on very expensive computers -at that time, so they were mostly used in research and for official -and military tasks. +was written for Multics in the late 60s in the BCPL language, by +.IR "Bob Morris" , +.IR "Doug McIlroy" , +and other members of the Multics team. . .P -The possibilities of the -.I runoff -language were quite limited as compared to modern roff. -. -Only text output was possible in the 1960s. +Like its CTSS ancestor, Multics +.B runoff +formatted an input file consisting of text and command lines; commands began +with a period and were two letters. . -This could be implemented by a set of requests of length\~2, many of -which are still identically used in roff. +Output from these commands was to terminal devices such as IBM Selectric +terminals. . -The language was modelled according to the habits of typesetting in -the pre-computer age, where lines starting with a dot were used in -manuscripts to denote formatting requests to the person who would -perform the typesetting manually later on. +Multics +.B runoff +had additional features added, such as the ability to do two-pass +formatting; it became the main format for Multics documentation and text +processing. . .P -The runoff program was written in the -.I PL/1 -language first, later on in -.IR BCPL , -the grandmother of the -.IR C \~\c -programming language. -. -In the Multics operating system, the help system was handled by -runoff, similar to roff's task to manage the Unix manual pages. -. -There are still documents written in the runoff language; for examples -see Saltzer's home page, cf. section -.BR "SEE ALSO" . +BCPL and +.B runoff +were ported to the GCOS system at Bell Labs when BTL left the development of +Multics. . . .\" -------------------------------------------------------------------- .SS "The Classical nroff/troff System" .\" -------------------------------------------------------------------- . -In the 1970s, the Multics off-spring -.I Unix -became more and more popular because it could be run on affordable -machines and was easily available for universities at that time. -. -At MIT (the Massachusetts Institute of Technology), there was a need to -drive the Wang +At BTL, there was a need to drive the .I Graphic Systems CAT -typesetter, a graphical output device from a PDP-11 computer running -Unix. +typesetter, a graphical output device from a PDP-11 computer running Unix. . -As runoff was too limited for this task it was further developed into -a more powerful text formatting system by -.IR "Josef F. Osanna" , -a main developer of the Multics operating system and programmer of -several runoff ports. +As +.B runoff +was too limited for this task it was further developed into a more +powerful text formatting system by +.IR "Joseph F.\& Ossanna" , +who already programmed several runoff ports. . .P The name .I runoff was shortened to .IR roff . -The greatly enlarged language of Osanna's concept included already all +. +The greatly enlarged language of Ossanna's version already included all elements of a full .IR "roff system" . . -All modern roff systems try to implement compatibility to this system. +All modern +.I roff +systems try to implement compatibility to this system. . -So Joe Osanna can be called the father of all roff systems. +So Joe Ossanna can be called the father of all +.I roff +systems. . .P This first @@ -366,15 +243,19 @@ produced text output suitable for terminals and line printers. . .TP .B roff -was the reimplementation of the former runoff program with its limited -features; this program was abandoned in later versions. +was the reimplementation of the former +.B runoff +program with its limited features; this program was abandoned in later +versions. . Today, the name .I roff -is used to refer to a troff/\:nroff sytem as a whole. +is used to refer to a +.I troff/\:nroff +sytem as a whole. . .P -Osanna first version was written in the PDP-11 assembly language and +Ossanna's first version was written in the PDP-11 assembly language and released in 1973. . .I Brian Kernighan @@ -386,7 +267,7 @@ The C\~version was released in 1975. . .P The syntax of the formatting language of the -.BR nroff / troff +.BR nroff /\: troff programs was documented in the famous .IR "Troff User's Manual [CSTR\~#54]" , first published in 1976, with further revisions up to 1992 by Brian @@ -394,17 +275,19 @@ Kernighan. . This document is the specification of the .IR "classical troff" . +. All later .I roff systems tried to establish compatibility with this specification. . .P -After Osanna had died in 1977 by a heart-attack at the age of about\~50, -Kernighan went on with developing troff. +After Ossanna's death in 1977, Kernighan went on with developing +.IR troff . . -The next milestone was to equip troff with a general interface to -support more devices, the intermediate output format and the -postprocessor system. +In the late 1970s, Kernighan equipped +.I troff +with a general interface to support more devices, the intermediate +output format, and the postprocessor system. . This completed the structure of a .I "roff system" @@ -413,8 +296,10 @@ as it is still in use today; see section . In 1979, these novelties were described in the paper .IR "[CSTR\~#97]" . -This new troff version is the basis for all existing newer troff -systems, including +. +This new +.I troff +version is the basis for all existing newer troff systems, including .IR groff . . On some systems, this @@ -424,33 +309,21 @@ got a binary of its own, called . All modern .B troff -programs already provide the full ditroff capabilities automatically. +programs already provide the full +.B ditroff +capabilities automatically. . . .\" -------------------------------------------------------------------- -.SS "Commercialization" +.SS "Availability" .\" -------------------------------------------------------------------- . -A major degradation occurred when the easily available Unix\~7 -operating system was commercialized. -. -A whole bunch of divergent operating systems emerged, fighting each -other with incompatibilities in their extensions. -. -Luckily, the incompatibilities did not fight the original troff. -. -All of the different commercial roff systems made heavy use of -Osanna/\:Kernighan's open source code and documentation, but sold them -as \[lq]their\[rq] system \[em] with only minor additions. -. -.P -The source code of both the ancient Unix and classical troff weren't -available for two decades. -. -Fortunately, Caldera bought SCO UNIX in 2001. +The source code of both the ancient Unix and classical +.I troff +weren't available for two decades. . -In the following, Caldera made the ancient source code accessible -on-line for non-commercial use, cf. section +Meanwhile, it is accessible again (on-line) for non-commercial use, +cf.\& section .BR "SEE ALSO" . . . @@ -458,99 +331,113 @@ on-line for non-commercial use, cf. section .SS "Free roff" .\" -------------------------------------------------------------------- . -None of the commercial roff systems could attain the status of a -successor for the general roff development. -. -Everyone was only interested in their own stuff. -. -This led to a steep downfall of the once excellent -Unix operating system during the 1980s. -. -.P -As a counter-measure to the galopping commercialization, AT&T Bell -Labs tried to launch a rescue project with their -.I Plan\~9 -operating system. -. -It is freely available for non-commercial use, even the source code, -but has a proprietary license that impedes the free development. -. -This concept is outdated, so Plan\~9 was not accepted as a platform to -bundle the main-stream development. -. -.P -The only remedy came from the emerging free operatings systems -(386BSD, GNU/\:Linux, etc.) and software projects during the 1980s and -1990s. -. -These implemented the ancient Unix features and many extensions, such -that the old experience is not lost. -. -In the 21st century, Unix-like systems are again a major factor in -computer industry \[em] thanks to free software. -. -.P -The most important free roff project was the GNU port of troff, -created by James Clark and put under the -.URL http://\:www.gnu.org/\:copyleft "GNU Public License" . +The most important free +.I roff +project was the \f[CR]GNU\f[] implementation of +.IR troff , +written from scratch by +.I James Clark +and put under the +.UR http://\:www.gnu.org/\:copyleft +GNU Public License +.UE . . It was called .I groff -.RI ( "GNU roff" ). +(\f[CR]GNU\f[] +.IR roff ). +. See .BR groff (@MAN1EXT@) for an overview. . .P -The groff system is still actively developed. +The +.I groff +system is still actively developed. +. +It is compatible to the classical +.IR troff , +but many extensions were added. . -It is compatible to the classical troff, but many extensions were -added. +It is the first +.I roff +system that is available on almost all operating systems \[en] and it is +free. . -It is the first roff system that is available on almost all operating -systems \[em] and it is free. +This makes +.I groff +the de-facto +.I roff +standard today. . -This makes groff the de-facto roff standard today. +.P +An alternative is +.IR "Gunnar Ritter" 's +.UR http://\:heirloom.sf.net +Heirloom Documentation Tools +.UE +project, started in 2005, which provides enhanced versions of the various +roff tools found in the OpenSolaris and Plan\~9 operating systems, now +available under free licenses. . . .\" -------------------------------------------------------------------- .SH "USING ROFF" .\" -------------------------------------------------------------------- . -Most people won't even notice that they are actually using roff. +Most people won't even notice that they are actually using +.IR roff . . -When you read a system manual page (man page) roff is working in the -background. +When you read a system manual page (man page) +.I roff +is working in the background. . -Roff documents can be viewed with a native viewer called +.I roff +documents can be viewed with a native viewer called .BR \%xditview (1x), a standard program of the X window distribution, see .BR X (7x). . -But using roff explicitly isn't difficult either. +But using +.I roff +explicitly isn't difficult either. . .P -Some roff implementations provide wrapper programs that make it easy -to use the roff system on the shell command line. +Some +.I roff +implementations provide wrapper programs that make it easy to use the +.I roff +system on the shell command line. . -For example, the GNU roff implementation +For example, the \f[CR]GNU\f[] +.I roff +implementation .BR groff (@MAN1EXT@) provides command line options to avoid the long command pipes of -classical troff; a program +classical +.IR troff ; +a program .BR grog (@MAN1EXT@) tries to guess from the document which arguments should be used for a -run of groff; people who do not like specifying command line options -should try the +run of +.BR groff ; +people who do not like specifying command line options should try the .BR groffer (@MAN1EXT@) -program for graphically displaying groff files and man pages. +program for graphically displaying +.I groff +files and man pages. . . .\" -------------------------------------------------------------------- .SS "The roff Pipe" .\" -------------------------------------------------------------------- . -Each roff system consists of preprocessors, roff formatter programs, -and a set of device postprocessors. +Each +.I roff +system consists of preprocessors, +.I roff +formatter programs, and a set of device postprocessors. . This concept makes heavy use of the .I piping @@ -558,20 +445,24 @@ mechanism, that is, a series of programs is called one after the other, where the output of each program in the queue is taken as the input for the next program. . -.CodeSkip -. -.ds @1 "cat \f[I]file\f[P] |\"" -.ds @2 "\*[Ellipsis] | \f[I]preproc\f[P] | \*[Ellipsis] |\"" -.ds @3 "troff \f[I]options\f[P] | \f[I]postproc\f[P]\"" -. -.ShellCommand "\*[@1] \*[@2] \*[@3]" +.RS +.P +cat \f[I]file\f[P] \ +| .\|.\|. \ +| \f[I]preproc\f[P] \ +| .\|.\|. \ +| troff \f[I]options\f[P] \ +| \f[I]postproc\f[P] +.RE . -.rm @1 -.rm @2 -.rm @3 .P -The preprocessors generate roff code that is fed into a roff formatter -(e.g. troff), which in turn generates +The preprocessors generate +.I roff +code that is fed into a +.I roff +formatter (e.g.\& +.BR troff ), +which in turn generates .I intermediate output that is fed into a device postprocessor program for printing or final output. @@ -580,17 +471,23 @@ output. All of these parts use programming languages of their own; each language is totally unrelated to the other parts. . -Moreover, roff macro packages that were tailored for special purposes -can be included. +Moreover, +.I roff +macro packages that were tailored for special purposes can be +included. . .P -Most roff documents use the macros of some package, intermixed with -code for one or more preprocessors, spiced with some elements from the -plain roff language. +Most +.I roff +documents use the macros of some package, intermixed with code for one +or more preprocessors, spiced with some elements from the plain +.I roff +language. . -The full power of the roff formatting language is seldom needed by -users; only programmers of macro packages need to know about the gory -details. +The full power of the +.I roff +formatting language is seldom needed by users; only programmers of +macro packages need to know about the gory details. . . . @@ -598,89 +495,82 @@ details. .SS "Preprocessors" .\" -------------------------------------------------------------------- . -A roff preprocessor is any program that generates output that -syntactically obeys the rules of the roff formatting language. +A +.I roff +preprocessor is any program that generates output that syntactically +obeys the rules of the +.I roff +formatting language. . Each preprocessor defines a language of its own that is translated -into roff code when run through the preprocessor program. +into +.I roff +code when run through the preprocessor program. . -Parts written in these languages may be included within a roff -document; they are identified by special roff requests or macros. +Parts written in these languages may be included within a +.I roff +document; they are identified by special +.I roff +requests or macros. . Each document that is enhanced by preprocessor code must be run through all corresponding preprocessors before it is fed into the -actual roff formatter program, for the formatter just ignores all -alien code. +actual +.I roff +formatter program, for the formatter just ignores all alien code. . The preprocessor programs extract and transform only the document parts that are determined for them. . .P -There are a lot of free and commercial roff preprocessors. +There are a lot of free and commercial +.I roff +preprocessors. . Some of them aren't available on each system, but there is a small set of preprocessors that are considered as an integral part of each -roff system. +.I roff +system. . The classical preprocessors are . - -.de @TP -.\" local indent for .TP -.TP \\w'\\f[B]soelim\\f[P]'u+2n -.. -.P .RS -.PD 0 -.@TP -.B tbl -for tables -.@TP -.B eqn -for mathematical formul\[ae] -.@TP -.B pic -for drawing diagrams -.@TP -.B refer -for bibliographic references -.@TP -.B soelim -for including macro files from standard locations -.PD +.TS +tab (@); +lb l. +tbl@for tables. +eqn@for mathematical formul\[ae]. +pic@for drawing diagrams. +refer@for bibliographic references. +soelim@for including macro files from standard locations. +chem@for drawing chemical formul\[ae]. +.TE .RE . .P Other known preprocessors that are not available on all systems include . -.P .RS -.PD 0 -.@TP -.B chem -for drawing chemical formul\[ae]. -.@TP -.B grap -for constructing graphical elements. -.@TP -.B grn -for including -.BR gremlin (1) -pictures. -.PD +.TS +tab (@); +lb l. +grap@for constructing graphical elements. +grn@for including \fBgremlin\fR(1) pictures. +.TE .RE . -.rm @TP -. .\" -------------------------------------------------------------------- .SS "Formatter Programs" .\" -------------------------------------------------------------------- . A .I roff formatter -is a program that parses documents written in the roff formatting -language or uses some of the roff macro packages. +is a program that parses documents written in the +.I roff +formatting language or uses some of the +.I roff +macro packages. . It generates .IR "intermediate output" , @@ -691,26 +581,36 @@ The documents must have been run through all necessary preprocessors before. . .P -The output produced by a roff formatter is represented in yet another -language, the +The output produced by a +.I roff +formatter is represented in yet another language, the .IR "intermediate output format" or .IR "troff output" . +. This language was first specified in .IR "[CSTR\~#97]" ; -its GNU extension is documented in +its \f[CR]GNU\f[] extension is documented in .BR groff_out (@MAN5EXT@). . The intermediate output language is a kind of assembly language -compared to the high-level roff language. +compared to the high-level +.I roff +language. . The generated intermediate output is optimized for a special device, but the language is the same for every device. . .P -The roff formatter is the heart of the roff system. +The +.I roff +formatter is the heart of the +.I roff +system. . -The traditional roff had two formatters, +The traditional +.I roff +had two formatters, .B nroff for text devices and .B troff @@ -731,10 +631,15 @@ terminals, etc., or software interfaces such as a conversion into a different text or graphical format. . .P -A roff postprocessor is a program that transforms troff output into a -form suitable for a special device. +A +.I roff +postprocessor is a program that transforms +.I troff +output into a form suitable for a special device. . -The roff postprocessors are like device drivers for the output target. +The +.I roff +postprocessors are like device drivers for the output target. . .P For each device there is a postprocessor program that fits the device @@ -759,8 +664,10 @@ counterparts. .P For example, the Postscript device .I post -in classical troff had a resolution -of 720, while groff's +in classical +.I troff +had a resolution of 720 units per inch, while +.IR groff 's .I ps device has 72000, a refinement of factor 100. . @@ -774,19 +681,27 @@ hardware postprocessor for each printer. .SH "ROFF PROGRAMMING" .\" -------------------------------------------------------------------- . -Documents using roff are normal text files decorated by roff +Documents using +.I roff +are normal text files decorated by +.I roff formatting elements. . -The roff formatting language is quite powerful; it is almost a full -programming language and provides elements to enlarge the language. +The +.I roff +formatting language is quite powerful; it is almost a full programming +language and provides elements to enlarge the language. . With these, it became possible to develop macro packages that are tailored for special applications. . -Such macro packages are much handier than plain roff. +Such macro packages are much handier than plain +.IR roff . . So most people will choose a macro package without worrying about the -internals of the roff language. +internals of the +.I roff +language. . . .\" -------------------------------------------------------------------- @@ -796,7 +711,8 @@ internals of the roff language. Macro packages are collections of macros that are suitable to format a special kind of documents in a convenient way. . -This greatly eases the usage of roff. +This greatly eases the usage of +.IR roff . . The macro definitions of a package are kept in a file called .IB name .tmac @@ -814,11 +730,13 @@ in .P A macro package that is to be used in a document can be announced to the formatter by the command line option -.ShortOpt m , +.BR \-m , see .BR troff (@MAN1EXT@), or it can be specified within a document using the file inclusion -requests of the roff language, see +requests of the +.I roff +language, see .BR groff (@MAN7EXT@). . .P @@ -826,7 +744,7 @@ Famous classical macro packages are .I man for traditional man pages, .I mdoc -for BSD-style manual pages; +for \f[CR]BSD\f[]-style manual pages; the macro sets for books, articles, and letters are .I me (probably from the first name of its creator @@ -845,20 +763,25 @@ and .SS "The roff Formatting Language" .\" -------------------------------------------------------------------- . -The classical roff formatting language is documented in the +The classical +.I roff +formatting language is documented in the .I Troff User's Manual .IR "[CSTR\~#54]" . . -The roff language is a full programming language providing requests, -definition of macros, escape sequences, string variables, number or -size registers, and flow controls. +The +.I roff +language is a full programming language providing requests, definition +of macros, escape sequences, string variables, number or size +registers, and flow controls. . .P .I Requests are the predefined basic formatting commands similar to the commands at the shell prompt. . -The user can define request-like elements using predefined roff +The user can define request-like elements using predefined +.I roff elements. . These are then called @@ -869,12 +792,15 @@ or macros; both are written on a line on their own starting with a dot. . .P .I Escape sequences -are roff elements starting with a backslash +are +.I roff +elements starting with a backslash .QuotedChar \[rs] . +. They can be inserted anywhere, also in the midst of text in a line. . They are used to implement various features, including the insertion of -non-ASCII characters with +non-\f[CR]ASCII\f[] characters with .Esc ( , font changes with .Esc f , @@ -917,7 +843,7 @@ i.e., it is kept in section\~7 of the man pages. . .P -The classical macro packages take the package name as an extension, e.g. +The classical macro packages take the package name as an extension, e.g.\& .IB file. me for a document using the .I me @@ -935,14 +861,17 @@ files, etc. . .P -But there is no general naming scheme for roff documents, though +But there is no general naming scheme for +.I roff +documents, though .IB file. tr for .I troff file is seen now and then. . Maybe there should be a standardization for the filename extensions of -roff files. +.I roff +files. . .P File name extensions can be very handy in conjunction with the @@ -952,12 +881,17 @@ pager. It provides the possibility to feed all input into a command-line pipe that is specified in the shell environment variable .BR LESSOPEN . +. This process is not well documented, so here an example: . -.CodeSkip -.ShellCommand LESSOPEN='|lesspipe %s' -.CodeSkip +.RS +.P +.EX +LESSOPEN='|lesspipe %s' +.EE +.RE . +.P where .B lesspipe is either a system supplied command or a shell script of your own. @@ -967,11 +901,16 @@ is either a system supplied command or a shell script of your own. .SH "EDITING ROFF" .\" -------------------------------------------------------------------- . -The best program for editing a roff document is Emacs (or Xemacs), see +The best program for editing a +.I roff +document is Emacs (or Xemacs), see .BR emacs (1). +. It provides an .I nroff -mode that is suitable for all kinds of roff dialects. +mode that is suitable for all kinds of +.I roff +dialects. . This mode can be activated by the following methods. . @@ -992,86 +931,111 @@ at the same time. But it is also possible to have the mode automatically selected when the file is loaded into the editor. . -.Topic +.IP \(bu The most general method is to include the following 3 comment lines at the end of the file. . -.CodeSkip -.nf -.B \*[Comment] Local Variables: -.B \*[Comment] mode: nroff -.B \*[Comment] End: -.fi +.RS +.IP +.EX +\&.\[rs]" Local Variables: +\&.\[rs]" mode: nroff +\&.\[rs]" End: +.EE +.RE . -.Topic -There is a set of file name extensions, e.g. the man pages that -trigger the automatic activation of the nroff mode. +.IP \(bu +There is a set of file name extensions, e.g.\& the man pages that +trigger the automatic activation of the +.I nroff +mode. . -.Topic +.IP \(bu Theoretically, it is possible to write the sequence -.CodeSkip -.B \*[Comment] \%-*-\ nroff\ -*- -.CodeSkip -as the first line of a file to have it started in nroff mode when -loaded. +. +.RS +.IP +.EX +\&.\[rs]" \%-*-\ nroff\ -*- +.EE +.RE +. +.IP +as the first line of a file to have it started in +.I nroff +mode when loaded. . Unfortunately, some applications such as the .B man program are confused by this; so this is deprecated. . .P -All roff formatters provide automated line breaks and horizontal and -vertical spacing. +All +.I roff +formatters provide automated line breaks and horizontal and vertical +spacing. . In order to not disturb this, the following tips can be helpful. . -.Topic -Never include empty or blank lines in a roff document. +.IP \(bu +Never include empty or blank lines in a +.I roff +document. . Instead, use the empty request (a line consisting of a dot only) or a line comment -.B \*[Comment] +.B .\[rs]" if a structuring element is needed. . -.Topic +.IP \(bu Never start a line with whitespace because this can lead to unexpected behavior. . -Indented paragraphs can be constructed in a controlled way by roff +Indented paragraphs can be constructed in a controlled way by +.I roff requests. . -.Topic +.IP \(bu Start each sentence on a line of its own, for the spacing after a dot is handled differently depending on whether it terminates an abbreviation or a sentence. . To distinguish both cases, do a line break after each sentence. . -.Topic +.IP \(bu To additionally use the auto-fill mode in Emacs, it is best to insert -an empty roff request (a line consisting of a dot only) after each -sentence. +an empty +.I roff +request (a line consisting of a dot only) after each sentence. . .P -The following example shows how optimal roff editing could look. +The following example shows how optimal +.I roff +editing could look. . -.IP -.nf -This is an example for a roff document. -.Text . +.RS +.P +.EX +This is an example for a +\&.I roff +document. +\&. This is the next sentence in the same paragraph. -.Text . +\&. This is a longer sentence stretching over several lines; abbreviations like `cf.' are easily identified because the dot is not followed by a line break. -.Text . +\&. In the output, this will still go to the same paragraph. -.fi +.EE +.RE . .P -Besides Emacs, some other editors provide nroff style files too, e.g.\& +Besides Emacs, some other editors provide +.I nroff +style files too, e.g.\& .BR vim (1), an extension of the .BR vi (1) @@ -1079,24 +1043,17 @@ program. . . .\" -------------------------------------------------------------------- -.SH BUGS -.\" -------------------------------------------------------------------- -. -.I UNIX\[rg] -is a registered trademark of the Open Group. -. -But things have improved considerably after Caldera had bought SCO -UNIX in 2001. -. -. -.\" -------------------------------------------------------------------- .SH "SEE ALSO" .\" -------------------------------------------------------------------- . -There is a lot of documentation on roff. +There is a lot of documentation on +.IR roff . . -The original papers on classical troff are still available, and all -aspects of groff are documented in great detail. +The original papers on classical +.I troff +are still available, and all aspects of +.I groff +are documented in great detail. . . .\" -------------------------------------------------------------------- @@ -1105,63 +1062,85 @@ aspects of groff are documented in great detail. . .TP troff.org -.URL http://\:www.troff.org "The historical troff site" -provides an overview and pointers to all historical aspects of roff. +.UR http://\:www.troff.org +The historical troff site +.UE +provides an overview and pointers to all historical aspects of +.IR roff . . .TP Multics -.URL http://\:www.multicians.org "The Multics site" +.UR http://\:www.multicians.org +The Multics site +.UE contains a lot of information on the MIT projects, CTSS, Multics, early Unix, including -.IR runoff ; +.IR runoff ; especially useful are a glossary and the many links to ancient documents. . .TP Unix Archive -.URL http://\:www.tuhs.org/\:Archive/ \ - "The Ancient Unixes Archive" +.UR http://\:www.tuhs.org/\:Archive/ +The Ancient Unixes Archive +.UE . provides the source code and some binaries of the ancient Unixes -(including the source code of troff and its documentation) that were -made public by Caldera since 2001, e.g. of the famous Unix version\~7 -for PDP-11 at the -.URL http://\:www.tuhs.org/\:Archive/\:PDP-11/\:Trees/\:V7 \ - "Unix V7 site" . +(including the source code of +.I troff +and its documentation) that were made public by Caldera since 2001, +e.g.\& of the famous Unix version\~7 for PDP-11 at the +.UR http://\:www.tuhs.org/\:Archive/\:PDP-11/\:Trees/\:V7 +Unix V7 site +.UE . . .TP Developers at AT&T Bell Labs -.URL http://\:cm.bell-labs.com/\:cm/\:index.html \ - "Bell Labs Computing and Mathematical Sciences Research" +.UR http://\:www.bell-labs.com/ +Bell Labs Computing and Mathematical Sciences Research +.UE . provides a search facility for tracking information on the early developers. . .TP Plan 9 -.URL http://\:plan9.bell-labs.com "The Plan\~9 operating system" +.UR http://\:plan9.bell-labs.com +The Plan\~9 operating system +.UE . by AT&T Bell Labs. . .TP runoff -.URL http://web.mit.edu/\:Saltzer/\:www/\:publications/\:pubs.html \ -"Jerry Saltzer's home page" +.UR http://\:web.mit.edu/\:Saltzer/\:www/\:publications/\:pubs.html +Jerry Saltzer's home page +.UE . -stores some documents using the ancient runoff formatting language. +stores some documents using the ancient RUNOFF formatting language. . .TP CSTR Papers -.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr.html \ - "The Bell Labs CSTR site" +.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr.html +The Bell Labs CSTR site +.UE . -stores the original troff manuals (CSTR #54, #97, #114, #116, #122) -and famous historical documents on programming. +stores the original +.I troff +manuals (CSTR #54, #97, #114, #116, #122) and famous historical +documents on programming. . .TP -GNU roff -.URL http://\:www.gnu.org/\:software/\:groff "The groff web site" -provides the free roff implementation groff, the actual standard roff. +\f[CR]GNU\f[] \f[I]roff\f[] +.UR http://\:www.gnu.org/\:software/\:groff +The groff web site +.UE +provides the free +.I roff +implementation +.IR groff , +the actual standard +.IR roff . . . .\" -------------------------------------------------------------------- @@ -1172,50 +1151,58 @@ Many classical .B troff documents are still available on-line. . -The two main manuals of the troff language are +The two main manuals of the +.I troff +language are . .TP [CSTR\~#54] -J. F. Osanna, -.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:54.ps \ - "\fINroff/\:Troff User's Manual\fP" ; +J. F. Ossanna, +.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz +.I "Nroff/\:Troff User's Manual" +.UE ; . Bell Labs, 1976; revised by Brian Kernighan, 1992. - . .TP [CSTR\~#97] Brian Kernighan, -.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:97.ps \ - "\fIA Typesetter-independent TROFF\fP" , +.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:97.ps.gz +.I "A Typesetter-independent TROFF" +.UE , . Bell Labs, 1981, revised March 1982. . .P -The "little language" roff papers are +The \[lq]little language\[rq] +.I roff +papers are . .TP [CSTR\~#114] Jon L. Bentley and Brian W. Kernighan, -.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:114.ps \ - "\fIGRAP \(em A Language for Typesetting Graphs\fP" ; +.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:114.ps.gz +.I "GRAP \[en] A Language for Typesetting Graphs" +.UE ; . Bell Labs, August 1984. . .TP [CSTR\~#116] Brian W. Kernighan, -.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:116.ps \ - "\fIPIC -- A Graphics Language for Typesetting\fP" ; +.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:116.ps.gz +.I "PIC \[en] A Graphics Language for Typesetting" +.UE ; . Bell Labs, December 1984. . .TP [CSTR\~#122] J. L. Bentley, L. W. Jelinski, and B. W. Kernighan, -.URL http://\:cm.bell-labs.com/\:cm/\:cs/\:122.ps \ -"\fICHEM \(em A Program for Typesetting Chemical Structure Diagrams, \ -Computers and Chemistry\fP" ; +.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:122.ps.gz +.I "CHEM \[en] A Program for Typesetting Chemical Structure Diagrams," +.I "Computers and Chemistry" +.UE ; . Bell Labs, April 1986. . @@ -1224,18 +1211,23 @@ Bell Labs, April 1986. .SS "Manual Pages" .\" -------------------------------------------------------------------- . -Due to its complex structure, a full roff system has many man pages, -each describing a single aspect of roff. +Due to its complex structure, a full +.I roff +system has many man pages, each describing a single aspect of +.IR roff . . -Unfortunately, there is no general naming scheme for the -documentation among the different roff implementations. +Unfortunately, there is no general naming scheme for the documentation +among the different +.I roff +implementations. . .P In .IR groff , the man page .BR groff (@MAN1EXT@) -contains a survey of all documentation available in groff. +contains a survey of all documentation available in +.IR groff . . .P On other systems, you are on your own, but @@ -1247,27 +1239,34 @@ might be a good starting point. .SH AUTHORS .\" -------------------------------------------------------------------- . -Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +Copyright (C) 2000, 2001, 2002, 2003, 2004, 2006, 2007, 2008, 2009 +Free Software Foundation, Inc. . .P -This document is distributed under the terms of the FDL (GNU Free -Documentation License) version 1.1 or later. +This document is distributed under the terms of the \f[CR]FDL\f[] +(\f[CR]GNU Free Documentation License\f[]) version 1.3 or later. . -You should have received a copy of the FDL on your system, it is also -available on-line at the -.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" . +You should have received a copy of the \f[CR]FDL\f[] on your system, +it is also available on-line at the +.UR http://\:www.gnu.org/\:copyleft/\:fdl.html +GNU copyleft site +.UE . . .P This document is part of .IR groff , -the GNU roff distribution. +the \f[CR]GNU\f[] +.I roff +distribution. . It was written by -.MTO bwarken@mayn.de "Bernd Warken" ; +.MT bwarken@mayn.de +Bernd Warken +.ME ; it is maintained by -.MTO wl@gnu.org "Werner Lemberg". -. -.cp \n[roff_C] +.MT wl@gnu.org +Werner Lemberg +.ME . . .\" -------------------------------------------------------------------- .\" Emacs setup diff --git a/contrib/groff/mdate.sh b/contrib/groff/mdate.sh index 4a26e6e80b..912dbf90f0 100644 --- a/contrib/groff/mdate.sh +++ b/contrib/groff/mdate.sh @@ -1,5 +1,23 @@ #! /bin/sh - +# +# Copyright (C) 1991, 1992, 2001, 2009 +# Free Software Foundation, Inc. +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# # Print the modification date of $1 `nicely'. # Don't want foreign dates. diff --git a/contrib/groff/src/devices/grodvi/dvi.cpp b/contrib/groff/src/devices/grodvi/dvi.cpp index 201eb1c48e..b895f43909 100644 --- a/contrib/groff/src/devices/grodvi/dvi.cpp +++ b/contrib/groff/src/devices/grodvi/dvi.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2006, + 2007, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "driver.h" #include "nonposix.h" @@ -175,10 +175,10 @@ public: font *make_font(const char *); void begin_page(int); void end_page(int); - void set_char(int, font *, const environment *, int w, const char *name); - void special(char *arg, const environment *env, char type); + void set_char(glyph *, font *, const environment *, int, const char *); + void special(char *, const environment *, char); void end_of_line(); - void draw(int code, int *p, int np, const environment *env); + void draw(int, int *, int, const environment *); }; @@ -340,12 +340,12 @@ void dvi_printer::set_color(color *col) do_special(buf); } -void dvi_printer::set_char(int idx, font *f, const environment *env, +void dvi_printer::set_char(glyph *g, font *f, const environment *env, int w, const char *) { if (*env->col != cur_color) set_color(env->col); - int code = f->get_code(idx); + int code = f->get_code(g); if (env->size != cur_point_size || f != cur_font) { cur_font = f; cur_point_size = env->size; @@ -384,8 +384,8 @@ void dvi_printer::set_char(int idx, font *f, const environment *env, } possibly_begin_line(); end_h = env->hpos + w; - cur_h += scale(f->get_width(idx, UNITWIDTH)/MULTIPLIER, - cur_point_size*RES_7227); + cur_h += scale(f->get_width(g, UNITWIDTH) / MULTIPLIER, + cur_point_size * RES_7227); if (cur_h > max_h) max_h = cur_h; if (cur_v > max_v) @@ -752,6 +752,8 @@ void draw_dvi_printer::draw(int code, int *p, int np, const environment *env) moveto(env->hpos+p[0]/2, env->vpos); if (fill_flag) fill_next(env); + else + set_line_thickness(env); sprintf(buf, "%s 0 0 %d %d 0 6.28319", (fill_flag ? "ia" : "ar"), milliinches(p[0]/2), diff --git a/contrib/groff/src/devices/grodvi/grodvi.man b/contrib/groff/src/devices/grodvi/grodvi.man index 7c74c324ba..d75b978c84 100644 --- a/contrib/groff/src/devices/grodvi/grodvi.man +++ b/contrib/groff/src/devices/grodvi/grodvi.man @@ -1,5 +1,6 @@ .ig -Copyright (C) 1989-2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2006, 2009 + Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice @@ -377,6 +378,21 @@ must be called before any language-specific files; it doesn't take care of hcode values. . . +.SH ENVIRONMENT +.TP +.SM +.B GROFF_FONT_PATH +A list of directories in which to search for the +.BI dev name +directory in addition to the default ones. +. +See +.BR @g@troff (@MAN1EXT@) +and +.BR \%groff_font (@MAN5EXT@) +for more details. +. +. .SH FILES .TP .B @FONTDIR@/devdvi/DESC diff --git a/contrib/groff/src/devices/grohtml/grohtml.man b/contrib/groff/src/devices/grohtml/grohtml.man index ec82beb707..f8a65e4f53 100644 --- a/contrib/groff/src/devices/grohtml/grohtml.man +++ b/contrib/groff/src/devices/grohtml/grohtml.man @@ -1,5 +1,6 @@ .ig -Copyright (C) 1999-2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +Copyright (C) 1999-2000, 2001, 2002, 2003, 2004, 2006, 2007, 2009 + Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are @@ -57,6 +58,7 @@ grohtml \- html driver for groff .OP \-o \%image-vertical-offset .OP \-s size .OP \-S level +.OP \-x \%html-dialect .RI "[\ " files\|.\|.\|. "\ ]" .br .ad \na @@ -129,6 +131,24 @@ to place all image files into directory .IR dir . . .TP +.B \-e +This option should not be directly invoked by the user as it is +an internal option utilized by +.B groff +when +.B \-Thtml +or +.B \-Txhtml +is specified. +It is used by the +.B grohtml +preprocessor to determine whether +.B eqn +should attempt to produce MathML (if +.B \-Txhtml +is specified). +. +.TP .BI \-F dir Prepend directory .IB dir /dev name @@ -240,6 +260,39 @@ split at the heading level (or higher) defined by .B \-v Print the version number. . +.TP +.B \-V +Create an XHTML or HTML validator button at the bottom of each page of +the document. +. +.TP +.BI \-x dialect +Select HTML dialect. +Currently, +.I dialect +should be either the digit\~\c +.B 4 +or the letter\~\c +.B x +which indicates whether +.B grohtml +should generate HTML\~4 or XHTML, respectively. +This option should not be directly invoked by the user as it is +an internal option utilized by +.B groff +when +.B \-Thtml +or +.B \-Txhtml +is specified. +. +.TP +.B \-y +Produce a right-justified groff signature at the end of the document. +This is only generated if the +.B \-V +flag is also specified. +. . .SH USAGE There are styles called @@ -273,6 +326,21 @@ Images are generated whenever a table, picture, equation or line is encountered. . . +.SH ENVIRONMENT +.TP +.SM +.B GROFF_FONT_PATH +A list of directories in which to search for the +.BI dev name +directory in addition to the default ones. +. +See +.BR @g@troff (@MAN1EXT@) +and +.BR \%groff_font (@MAN5EXT@) +for more details. +. +. .SH BUGS .B Grohtml has been completely redesigned and rewritten. diff --git a/contrib/groff/src/devices/grohtml/html-table.cpp b/contrib/groff/src/devices/grohtml/html-table.cpp index 7e5b2dc5e4..9998fa9e1e 100644 --- a/contrib/groff/src/devices/grohtml/html-table.cpp +++ b/contrib/groff/src/devices/grohtml/html-table.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2005, 2007, 2009 +* Free Software Foundation, Inc. * * Gaius Mulley (gaius@glam.ac.uk) wrote html-table.cpp * @@ -14,17 +15,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "driver.h" #include "stringclass.h" @@ -41,6 +41,9 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ # define FALSE (1==0) #endif +extern html_dialect dialect; + + tabs::tabs () : tab(NULL) { @@ -294,7 +297,7 @@ void html_table::set_linelength (int linelen) } p = c; } - if (p != NULL && p->right > 0) + if (p != NULL && p->right > 0 && linelength > p->right) add_column(p->no+1, p->right, linelength, 'L'); } @@ -337,10 +340,12 @@ void html_table::emit_table_header (int space) out->nl(); out->put_string("put_string(">") .nl(); + if (dialect == xhtml) + emit_colspan(); out->put_string("put_string(" style=\"margin-top: "); @@ -374,6 +379,82 @@ void html_table::set_space (int space) start_space = space; } +/* + * emit_colspan - emits a series of colspan entries defining the + * table columns. + */ + +void html_table::emit_colspan (void) +{ + cols *b = columns; + cols *c = columns; + int width = 0; + + out->put_string(""); + while (c != NULL) { + if (b != NULL && b != c && is_gap(b)) + /* + * blank column for gap + */ + out->put_string("") + .nl(); + + width = (get_right(c)*100 + get_effective_linelength()/2) + / get_effective_linelength() + - (c->left*100 + get_effective_linelength()/2) + /get_effective_linelength(); + switch (c->alignment) { + case 'C': + out->put_string("") + .nl(); + break; + case 'R': + out->put_string("") + .nl(); + break; + default: + out->put_string("") + .nl(); + } + b = c; + c = c->next; + } + out->put_string("").nl(); +} + +/* + * emit_td - writes out a ") - .nl(); + emit_td(is_gap(b), ">"); b = b->next; } @@ -421,17 +498,9 @@ void html_table::emit_col (int n) / get_effective_linelength() - (b->left*100 + get_effective_linelength()/2) /get_effective_linelength(); - if (width) - out->put_string("") - .nl(); + emit_td(width, ">"); // have we a gap? - if (is_gap(b)) - out->put_string("") - .nl(); + emit_td(is_gap(b), ">"); b = b->next; } width = (get_right(b)*100 + get_effective_linelength()/2) @@ -440,22 +509,13 @@ void html_table::emit_col (int n) /get_effective_linelength(); switch (b->alignment) { case 'C': - out->put_string("").nl(); +#if 1 + if (last_col != NULL) { + out->put_string(""); + last_col = NULL; + } +#endif + out->put_string("").nl(); } } diff --git a/contrib/groff/src/devices/grohtml/html-table.h b/contrib/groff/src/devices/grohtml/html-table.h index dc6cebe2cd..001b9df0b3 100644 --- a/contrib/groff/src/devices/grohtml/html-table.h +++ b/contrib/groff/src/devices/grohtml/html-table.h @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003, 2004, 2005, 2007, 2009 + * Free Software Foundation, Inc. * * Gaius Mulley (gaius@glam.ac.uk) wrote html-table.h * @@ -14,17 +15,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "html.h" @@ -93,6 +93,8 @@ public: void finish_row (void); int get_effective_linelength (void); void set_space (int space); + void emit_colspan (void); + void emit_td (int percentage, const char *s = ">"); tabs *tab_stops; /* tab stop positions */ simple_output *out; @@ -121,7 +123,7 @@ public: // the indent is shutdown when it is deleted private: - void end (void); + void end (void); int is_used; int pg; // values of the registers as passed via initialization int ll; diff --git a/contrib/groff/src/devices/grohtml/html-text.cpp b/contrib/groff/src/devices/grohtml/html-text.cpp index b58d5e4a99..cae579b6c4 100644 --- a/contrib/groff/src/devices/grohtml/html-text.cpp +++ b/contrib/groff/src/devices/grohtml/html-text.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 +/* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009 * Free Software Foundation, Inc. * * Gaius Mulley (gaius@glam.ac.uk) wrote html-text.cpp @@ -15,17 +15,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "driver.h" #include "stringclass.h" @@ -44,10 +43,11 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ #undef DEBUGGING // #define DEBUGGING -html_text::html_text (simple_output *op) : - stackptr(NULL), lastptr(NULL), out(op), space_emitted(TRUE), - current_indentation(-1), pageoffset(-1), linelength(-1), - blank_para(TRUE), start_space(FALSE) +html_text::html_text (simple_output *op, html_dialect d) : + stackptr(NULL), lastptr(NULL), out(op), dialect(d), + space_emitted(TRUE), current_indentation(-1), + pageoffset(-1), linelength(-1), blank_para(TRUE), + start_space(FALSE) { } @@ -165,9 +165,15 @@ void html_text::end_tag (tag_definition *t) delete t->indent; t->indent = NULL; break; - case SMALL_TAG: out->put_string(""); break; - case BIG_TAG: out->put_string(""); break; - case COLOR_TAG: out->put_string(""); break; + case SMALL_TAG: if (! is_in_pre ()) + out->put_string(""); + break; + case BIG_TAG: if (! is_in_pre ()) + out->put_string(""); + break; + case COLOR_TAG: if (! is_in_pre ()) + out->put_string(""); + break; default: error("unrecognised tag"); @@ -196,8 +202,10 @@ void html_text::issue_tag (const char *tagname, const char *arg, out->put_string(STYLE_VERTICAL_SPACE); out->put_string("\""); } +#if 0 if (space == TRUE || space == FALSE) out->put_string(" valign=\"top\""); +#endif out->put_string(">"); } @@ -258,10 +266,16 @@ void html_text::start_tag (tag_definition *t) issue_tag("", (char *)t->arg1); } out->enable_newlines(FALSE); break; - case SMALL_TAG: issue_tag("arg1); break; - case BIG_TAG: issue_tag("arg1); break; + case SMALL_TAG: if (! is_in_pre ()) + issue_tag("arg1); + break; + case BIG_TAG: if (! is_in_pre ()) + issue_tag("arg1); + break; case BREAK_TAG: break; - case COLOR_TAG: issue_color_begin(&t->col); break; + case COLOR_TAG: if (! is_in_pre ()) + issue_color_begin(&t->col); + break; default: error("unrecognised tag"); @@ -652,9 +666,11 @@ void html_text::do_emittext (const char *s, int length) int text = remove_break(); check_emit_text(stackptr); if (text) { - if (is_present(PRE_TAG)) { + if (is_present(PRE_TAG)) out->nl(); - } else + else if (dialect == xhtml) + out->put_string("
    ").nl(); + else out->put_string("
    ").nl(); } } else diff --git a/contrib/groff/src/devices/grohtml/html-text.h b/contrib/groff/src/devices/grohtml/html-text.h index e0e3cc755c..d2ab265085 100644 --- a/contrib/groff/src/devices/grohtml/html-text.h +++ b/contrib/groff/src/devices/grohtml/html-text.h @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 +/* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2009 * Free Software Foundation, Inc. * * Gaius Mulley (gaius@glam.ac.uk) wrote html-text.h @@ -14,23 +14,28 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "html.h" #include "html-table.h" #define STYLE_VERTICAL_SPACE "1em" +/* + * supported html dialects. + */ + +typedef enum {xhtml, html4} html_dialect; + /* * html tags */ @@ -56,7 +61,7 @@ typedef struct tag_definition { class html_text { public: - html_text (simple_output *op); + html_text (simple_output *op, html_dialect d); ~html_text (void); void flush_text (void); void do_emittext (const char *s, int length); @@ -105,6 +110,7 @@ private: tag_definition *stackptr; /* the current paragraph state */ tag_definition *lastptr; /* the end of the stack */ simple_output *out; + html_dialect dialect; /* which dialect of html? */ int space_emitted; /* just emitted a space? */ int current_indentation; /* current .in value */ int pageoffset; /* .po value */ diff --git a/contrib/groff/src/devices/grohtml/html.h b/contrib/groff/src/devices/grohtml/html.h index b14fb2c98e..3a960a27ff 100644 --- a/contrib/groff/src/devices/grohtml/html.h +++ b/contrib/groff/src/devices/grohtml/html.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 2000, 2001, 2002, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001, 2002, 2004, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #if !defined(HTML_H) # define HTML_H diff --git a/contrib/groff/src/devices/grohtml/output.cpp b/contrib/groff/src/devices/grohtml/output.cpp index f25312774a..aec739b494 100644 --- a/contrib/groff/src/devices/grohtml/output.cpp +++ b/contrib/groff/src/devices/grohtml/output.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001, 2003, 2004, 2005, 2009 + * Free Software Foundation, Inc. * * Gaius Mulley (gaius@glam.ac.uk) wrote output.cpp * but it owes a huge amount of ideas and raw code from @@ -15,17 +16,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "driver.h" #include "stringclass.h" diff --git a/contrib/groff/src/devices/grohtml/post-html.cpp b/contrib/groff/src/devices/grohtml/post-html.cpp index 1283e06139..7f19820be5 100644 --- a/contrib/groff/src/devices/grohtml/post-html.cpp +++ b/contrib/groff/src/devices/grohtml/post-html.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 +/* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 * Free Software Foundation, Inc. * * Gaius Mulley (gaius@glam.ac.uk) wrote post-html.cpp @@ -12,17 +12,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "driver.h" #include "stringclass.h" @@ -67,7 +66,8 @@ typedef enum {col_tag, tab_tag, tab0_tag, none} colType; * prototypes */ -char *get_html_translation (font *f, const string &name); +const char *get_html_translation (font *f, const string &name); +static const char *get_html_entity(unsigned int code); int char_translate_to_html (font *f, char *buf, int buflen, unsigned char ch, int b, int and_single); @@ -89,6 +89,10 @@ static int base_point_size = 0; /* which troff font size ma static int split_level = 2; /* what heading level to split at? */ static string head_info; /* user supplied information to be placed */ /* into */ +static int valid_flag = FALSE; /* has user requested a valid flag at the */ + /* end of each page? */ +static int groff_sig = FALSE; /* "This document was produced using" */ +html_dialect dialect = html4; /* which html dialect should grohtml output */ /* @@ -1378,9 +1382,9 @@ static char *to_unicode (unsigned int ch) * add_and_encode - adds a special string to the page, it translates the string * into html glyphs. The special string will have come from x X html: * and can contain troff character encodings which appear as - * \(char\). A sequence of \\ represents \. + * \[char]. A sequence of \\ represents \. * So for example we can write: - * "cost = \(Po\)3.00 file = \\foo\\bar" + * "cost = \[Po]3.00 file = \\foo\\bar" * which is translated into: * "cost = £3.00 file = \foo\bar" */ @@ -1392,37 +1396,32 @@ void page::add_and_encode (style *s, const string &str, int is_tag) { string html_string; - char *html_glyph; - int i=0; + const char *html_glyph; + int i = 0; + const int len = str.length(); if (s->f == NULL) return; - while (i < str.length()) { - if ((i+1 0) { - string troff_charname = str.substring(a, n-a); + if (i > 0) { + string troff_charname = str.substring(a, i - a); html_glyph = get_html_translation(s->f, troff_charname); if (html_glyph) html_string += html_glyph; else { - int idx=s->f->name_to_index((troff_charname + '\0').contents()); - - if (s->f->contains(idx) && (idx != 0)) - html_string += s->f->get_code(idx); + glyph *g = name_to_glyph((troff_charname + '\0').contents()); + if (s->f->contains(g)) + html_string += s->f->get_code(g); } } - } else + } + else html_string += str[i]; i++; } @@ -1574,6 +1573,8 @@ void header_desc::write_headings (FILE *f, int force) headers.start_from_head(); header_filename.start_from_head(); + if (dialect == xhtml) + fputs("

    ", f); do { g = headers.get_data(); fputs("", f); fputs(g->text_string, f); - fputs("
    \n", f); + fputs("", f); + if (dialect == xhtml) + fputs("
    \n", f); + else + fputs("
    \n", f); headers.move_right(); if (multiple_files && (! header_filename.is_empty())) header_filename.move_right(); } while (! headers.is_equal_to_head()); fputs("\n", f); + if (dialect == xhtml) + fputs("

    \n", f); } } } @@ -1938,7 +1945,7 @@ class html_printer : public printer { files file_list; simple_output html; int res; - int space_char_index; + glyph *space_glyph; int space_width; int no_of_printed_pages; int paper_length; @@ -2009,9 +2016,9 @@ class html_printer : public printer { void set_line_thickness (const environment *); void terminate_current_font (void); void flush_font (void); - void add_to_sbuf (int index, const string &s); + void add_to_sbuf (glyph *g, const string &s); void write_title (int in_head); - int sbuf_continuation (int index, const char *name, const environment *env, int w); + int sbuf_continuation (glyph *g, const char *name, const environment *env, int w); void flush_page (void); void troff_tag (text_glob *g); void flush_globs (void); @@ -2062,7 +2069,7 @@ class html_printer : public printer { void outstanding_eol (int n); int is_bold (font *f); font *make_bold (font *f); - int overstrike (int index, const char *name, const environment *env, int w); + int overstrike (glyph *g, const char *name, const environment *env, int w); void do_body (void); int next_horiz_pos (text_glob *g, int nf); void lookahead_for_tables (void); @@ -2095,14 +2102,18 @@ class html_printer : public printer { int round_width (int x); void handle_tag_within_title (text_glob *g); void writeHeadMetaStyle (void); + void handle_valid_flag (int needs_para); + void do_math (text_glob *g); + void write_html_anchor (text_glob *h); + void write_xhtml_anchor (text_glob *h); // ADD HERE public: html_printer (); ~html_printer (); - void set_char (int i, font *f, const environment *env, int w, const char *name); + void set_char (glyph *g, font *f, const environment *env, int w, const char *name); void set_numbered_char(int num, const environment *env, int *widthp); - int set_char_and_width(const char *nm, const environment *env, + glyph *set_char_and_width(const char *nm, const environment *env, int *widthp, font **f); void draw (int code, int *p, int np, const environment *env); void begin_page (int); @@ -2171,7 +2182,10 @@ void html_printer::end_of_line() void html_printer::emit_line (text_glob *) { // --fixme-- needs to know the length in percentage - html.put_string("
    "); + if (dialect == xhtml) + html.put_string("
    "); + else + html.put_string("
    "); } /* @@ -2210,13 +2224,22 @@ void html_printer::emit_raw (text_glob *g) switch (next_tag) { case CENTERED: - current_paragraph->do_para("align=center", space); + if (dialect == html4) + current_paragraph->do_para("align=\"center\"", space); + else + current_paragraph->do_para("class=\"center\"", space); break; case LEFT: - current_paragraph->do_para(&html, "align=left", get_troff_indent(), pageoffset, linelength, space); + if (dialect == html4) + current_paragraph->do_para(&html, "align=\"left\"", get_troff_indent(), pageoffset, linelength, space); + else + current_paragraph->do_para(&html, "class=\"left\"", get_troff_indent(), pageoffset, linelength, space); break; case RIGHT: - current_paragraph->do_para(&html, "align=right", get_troff_indent(), pageoffset, linelength, space); + if (dialect == html4) + current_paragraph->do_para(&html, "align=\"right\"", get_troff_indent(), pageoffset, linelength, space); + else + current_paragraph->do_para(&html, "class=\"right\"", get_troff_indent(), pageoffset, linelength, space); break; default: fatal("unknown enumeration"); @@ -2312,9 +2335,12 @@ static string &generate_img_src (const char *filename) while (filename && (filename[0] == ' ')) { filename++; } - if (exists(filename)) + if (exists(filename)) { *s += string(""; + if (dialect == xhtml) + *s += ""; + } return *s; } @@ -2413,14 +2439,60 @@ void html_printer::do_title (void) } } +/* + * write_html_anchor - writes out an anchor. The style of the anchor + * dependent upon simple_anchor. + */ + +void html_printer::write_html_anchor (text_glob *h) +{ + if (dialect == html4) { + if (h != NULL) { + html.put_string("").nl(); + } + } +} + +/* + * write_xhtml_anchor - writes out an anchor. The style of the anchor + * dependent upon simple_anchor. + */ + +void html_printer::write_xhtml_anchor (text_glob *h) +{ + if (dialect == xhtml) { + if (h != NULL) { + html.put_string(" id=\""); + if (simple_anchors) { + string buffer(ANCHOR_TEMPLATE); + + buffer += as_string(header.no_of_headings); + buffer += '\0'; + html.put_string(buffer.contents()); + } else + html.put_string(header.header_buffer); + html.put_string("\""); + } + } +} + void html_printer::write_header (void) { if (! header.header_buffer.empty()) { + text_glob *a = NULL; int space = current_paragraph->retrieve_para_space() || seen_space; - if (header.header_level > 7) { + if (header.header_level > 7) header.header_level = 7; - } // firstly we must terminate any font and type faces current_paragraph->done_para(); @@ -2431,33 +2503,22 @@ void html_printer::write_header (void) header.no_of_headings++; style st; - text_glob *h=new text_glob(); - h->text_glob_html(&st, + a = new text_glob(); + a->text_glob_html(&st, header.headings.add_string(header.header_buffer), header.header_buffer.length(), header.no_of_headings, header.header_level, header.no_of_headings, header.header_level); - header.headers.add(h, + // and add this header to the header list + header.headers.add(a, header.no_of_headings, header.no_of_headings, header.no_of_headings, - header.no_of_headings, header.no_of_headings); // and add this header to the header list - - // lastly we generate a tag - - html.nl().nl().put_string("").nl(); + header.no_of_headings, header.no_of_headings); } + html.nl().nl(); + if (manufacture_headings) { // line break before a header if (!current_paragraph->emitted_text()) @@ -2466,11 +2527,14 @@ void html_printer::write_header (void) if (header.header_level<4) { html.put_string(""); html.put_string(header.header_buffer); - html.put_string("").nl(); + html.put_string("").nl(); + write_html_anchor(a); + html.put_string("").nl(); } else { html.put_string(""); - html.put_string(header.header_buffer); + html.put_string(header.header_buffer).nl(); + write_html_anchor(a); html.put_string("").nl(); } } @@ -2478,8 +2542,10 @@ void html_printer::write_header (void) // and now we issue the real header html.put_string(""); - html.put_string(header.header_buffer); + html.put_string(header.header_buffer).nl(); + write_html_anchor(a); html.put_string("").nl(); @@ -2577,7 +2643,12 @@ void html_printer::do_heading (char *arg) determine_header_level(level); write_header(); - // finally set the output to neutral for after the header + /* + * finally set the output font to uninitialized, thus forcing + * the new paragraph to start a new font block. + */ + + output_style.f = NULL; g = page_contents->glyphs.get_data(); page_contents->glyphs.move_left(); // so that next time we use old g } @@ -2756,7 +2827,7 @@ void html_printer::do_pointsize (char *arg) t = page_contents->glyphs.get_data(); } /* - * collect legal pointsize + * collect valid pointsize */ pointsize = atoi(arg); } @@ -2809,10 +2880,15 @@ void html_printer::do_check_center(void) int space = current_paragraph->retrieve_para_space() || seen_space; current_paragraph->done_para(); supress_sub_sup = TRUE; - current_paragraph->do_para("align=center", space); + if (dialect == html4) + current_paragraph->do_para("align=\"center\"", space); + else + current_paragraph->do_para("class=\"center\"", space); } else - if (strcmp("align=center", - current_paragraph->get_alignment()) != 0) { + if ((strcmp("align=\"center\"", + current_paragraph->get_alignment()) != 0) && + (strcmp("class=\"center\"", + current_paragraph->get_alignment()) != 0)) { /* * different alignment, so shutdown paragraph and open * a new one. @@ -2820,7 +2896,10 @@ void html_printer::do_check_center(void) int space = current_paragraph->retrieve_para_space() || seen_space; current_paragraph->done_para(); supress_sub_sup = TRUE; - current_paragraph->do_para("align=center", space); + if (dialect == html4) + current_paragraph->do_para("align=\"center\"", space); + else + current_paragraph->do_para("class=\"center\"", space); } else /* * same alignment, if we have emitted text then issue a break. @@ -2897,7 +2976,10 @@ void html_printer::insert_split_file (void) split_file += string("-"); split_file += as_string(header.no_of_level_one_headings); - split_file += string(".html"); + if (dialect == xhtml) + split_file += string(".xhtml"); + else + split_file += string(".html"); split_file += '\0'; file_list.set_file_name(split_file); @@ -3091,9 +3173,15 @@ void html_printer::troff_tag (text_glob *g) * firstly skip over devtag: */ char *t=(char *)g->text_string+strlen("devtag:"); - if (strncmp(g->text_string, "html

    :", strlen("html

    :")) == 0) { do_end_para(g); + } else if (strncmp(g->text_string, "html:", strlen("html:")) == 0) { + if (current_paragraph->emitted_text()) + html.put_string(g->text_string+9); + else + do_end_para(g); + } else if (strncmp(g->text_string, "math:", strlen("math:")) == 0) { + do_math(g); } else if (g->is_eol()) { do_eol(); } else if (g->is_eol_ce()) { @@ -3175,6 +3263,19 @@ void html_printer::troff_tag (text_glob *g) } } +/* + * do_math - prints out the equation + */ + +void html_printer::do_math (text_glob *g) +{ + do_font(g); + if (current_paragraph->emitted_text()) + html.put_string(g->text_string+9); + else + do_end_para(g); +} + /* * is_in_middle - returns TRUE if the positions left..right are in the center of the page. */ @@ -3727,6 +3828,7 @@ void html_printer::flush_page (void) flush_globs(); current_paragraph->done_para(); + current_paragraph->flush_text(); // move onto a new page delete page_contents; @@ -4214,7 +4316,7 @@ html_printer::html_printer() } res = r; html.set_fixed_point(point); - space_char_index = font::name_to_index("space"); + space_glyph = name_to_glyph("space"); space_width = font::hor; paper_length = font::paperlength; linelength = font::res*13/2; @@ -4228,17 +4330,17 @@ html_printer::html_printer() * add_to_sbuf - adds character code or name to the sbuf. */ -void html_printer::add_to_sbuf (int idx, const string &s) +void html_printer::add_to_sbuf (glyph *g, const string &s) { if (sbuf_style.f == NULL) return; - char *html_glyph = NULL; - unsigned int code = sbuf_style.f->get_code(idx); + const char *html_glyph = NULL; + unsigned int code = sbuf_style.f->get_code(g); if (s.empty()) { - if (sbuf_style.f->contains(idx)) - html_glyph = (char *)sbuf_style.f->get_special_device_encoding(idx); + if (sbuf_style.f->contains(g)) + html_glyph = get_html_entity(sbuf_style.f->get_code(g)); else html_glyph = NULL; @@ -4254,7 +4356,7 @@ void html_printer::add_to_sbuf (int idx, const string &s) sbuf += html_glyph; } -int html_printer::sbuf_continuation (int idx, const char *name, +int html_printer::sbuf_continuation (glyph *g, const char *name, const environment *env, int w) { /* @@ -4264,7 +4366,7 @@ int html_printer::sbuf_continuation (int idx, const char *name, || ((sbuf_prev_hpos < sbuf_end_hpos) && (env->hpos < sbuf_end_hpos) && ((sbuf_end_hpos-env->hpos < env->hpos-sbuf_prev_hpos)))) { - add_to_sbuf(idx, name); + add_to_sbuf(g, name); sbuf_prev_hpos = sbuf_end_hpos; sbuf_end_hpos += w + sbuf_kern; return TRUE; @@ -4276,7 +4378,7 @@ int html_printer::sbuf_continuation (int idx, const char *name, */ if (env->hpos-sbuf_end_hpos < space_width) { - add_to_sbuf(idx, name); + add_to_sbuf(g, name); sbuf_prev_hpos = sbuf_end_hpos; sbuf_end_hpos = env->hpos + w; return TRUE; @@ -4291,25 +4393,278 @@ int html_printer::sbuf_continuation (int idx, const char *name, * return the device encoding for such character. */ -char *get_html_translation (font *f, const string &name) +const char *get_html_translation (font *f, const string &name) { - int idx; - if ((f == 0) || name.empty()) return NULL; else { - idx = f->name_to_index((char *)(name + '\0').contents()); - if (idx == 0) { - error("character `%s' not found", (name + '\0').contents()); + glyph *g = name_to_glyph((char *)(name + '\0').contents()); + if (f->contains(g)) + return get_html_entity(f->get_code(g)); + else return NULL; - } else - if (f->contains(idx)) - return (char *)f->get_special_device_encoding(idx); - else - return NULL; } } +/* + * get_html_entity - given a Unicode character's code point, return a + * HTML entity that represents the character, if the + * character cannot represent itself in all contexts. + * The return value, if non-NULL, is allocated in a static buffer and is + * only valid until the next call of this function. + */ +static const char *get_html_entity (unsigned int code) +{ + if (code < UNICODE_DESC_START) { + switch (code) { + case 0x0022: return """; + case 0x0026: return "&"; + case 0x003C: return "<"; + case 0x003E: return ">"; + default: return NULL; + } + } else { + switch (code) { + case 0x00A0: return " "; + case 0x00A1: return "¡"; + case 0x00A2: return "¢"; + case 0x00A3: return "£"; + case 0x00A4: return "¤"; + case 0x00A5: return "¥"; + case 0x00A6: return "¦"; + case 0x00A7: return "§"; + case 0x00A8: return "¨"; + case 0x00A9: return "©"; + case 0x00AA: return "ª"; + case 0x00AB: return "«"; + case 0x00AC: return "¬"; + case 0x00AE: return "®"; + case 0x00AF: return "¯"; + case 0x00B0: return "°"; + case 0x00B1: return "±"; + case 0x00B2: return "²"; + case 0x00B3: return "³"; + case 0x00B4: return "´"; + case 0x00B5: return "µ"; + case 0x00B6: return "¶"; + case 0x00B7: return "·"; + case 0x00B8: return "¸"; + case 0x00B9: return "¹"; + case 0x00BA: return "º"; + case 0x00BB: return "»"; + case 0x00BC: return "¼"; + case 0x00BD: return "½"; + case 0x00BE: return "¾"; + case 0x00BF: return "¿"; + case 0x00C0: return "À"; + case 0x00C1: return "Á"; + case 0x00C2: return "Â"; + case 0x00C3: return "Ã"; + case 0x00C4: return "Ä"; + case 0x00C5: return "Å"; + case 0x00C6: return "Æ"; + case 0x00C7: return "Ç"; + case 0x00C8: return "È"; + case 0x00C9: return "É"; + case 0x00CA: return "Ê"; + case 0x00CB: return "Ë"; + case 0x00CC: return "Ì"; + case 0x00CD: return "Í"; + case 0x00CE: return "Î"; + case 0x00CF: return "Ï"; + case 0x00D0: return "Ð"; + case 0x00D1: return "Ñ"; + case 0x00D2: return "Ò"; + case 0x00D3: return "Ó"; + case 0x00D4: return "Ô"; + case 0x00D5: return "Õ"; + case 0x00D6: return "Ö"; + case 0x00D7: return "×"; + case 0x00D8: return "Ø"; + case 0x00D9: return "Ù"; + case 0x00DA: return "Ú"; + case 0x00DB: return "Û"; + case 0x00DC: return "Ü"; + case 0x00DD: return "Ý"; + case 0x00DE: return "Þ"; + case 0x00DF: return "ß"; + case 0x00E0: return "à"; + case 0x00E1: return "á"; + case 0x00E2: return "â"; + case 0x00E3: return "ã"; + case 0x00E4: return "ä"; + case 0x00E5: return "å"; + case 0x00E6: return "æ"; + case 0x00E7: return "ç"; + case 0x00E8: return "è"; + case 0x00E9: return "é"; + case 0x00EA: return "ê"; + case 0x00EB: return "ë"; + case 0x00EC: return "ì"; + case 0x00ED: return "í"; + case 0x00EE: return "î"; + case 0x00EF: return "ï"; + case 0x00F0: return "ð"; + case 0x00F1: return "ñ"; + case 0x00F2: return "ò"; + case 0x00F3: return "ó"; + case 0x00F4: return "ô"; + case 0x00F5: return "õ"; + case 0x00F6: return "ö"; + case 0x00F7: return "÷"; + case 0x00F8: return "ø"; + case 0x00F9: return "ù"; + case 0x00FA: return "ú"; + case 0x00FB: return "û"; + case 0x00FC: return "ü"; + case 0x00FD: return "ý"; + case 0x00FE: return "þ"; + case 0x00FF: return "ÿ"; + case 0x0152: return "Œ"; + case 0x0153: return "œ"; + case 0x0160: return "Š"; + case 0x0161: return "š"; + case 0x0178: return "Ÿ"; + case 0x0192: return "ƒ"; + case 0x0391: return "Α"; + case 0x0392: return "Β"; + case 0x0393: return "Γ"; + case 0x0394: return "Δ"; + case 0x0395: return "Ε"; + case 0x0396: return "Ζ"; + case 0x0397: return "Η"; + case 0x0398: return "Θ"; + case 0x0399: return "Ι"; + case 0x039A: return "Κ"; + case 0x039B: return "Λ"; + case 0x039C: return "Μ"; + case 0x039D: return "Ν"; + case 0x039E: return "Ξ"; + case 0x039F: return "Ο"; + case 0x03A0: return "Π"; + case 0x03A1: return "Ρ"; + case 0x03A3: return "Σ"; + case 0x03A4: return "Τ"; + case 0x03A5: return "Υ"; + case 0x03A6: return "Φ"; + case 0x03A7: return "Χ"; + case 0x03A8: return "Ψ"; + case 0x03A9: return "Ω"; + case 0x03B1: return "α"; + case 0x03B2: return "β"; + case 0x03B3: return "γ"; + case 0x03B4: return "δ"; + case 0x03B5: return "ε"; + case 0x03B6: return "ζ"; + case 0x03B7: return "η"; + case 0x03B8: return "θ"; + case 0x03B9: return "ι"; + case 0x03BA: return "κ"; + case 0x03BB: return "λ"; + case 0x03BC: return "μ"; + case 0x03BD: return "ν"; + case 0x03BE: return "ξ"; + case 0x03BF: return "ο"; + case 0x03C0: return "π"; + case 0x03C1: return "ρ"; + case 0x03C2: return "ς"; + case 0x03C3: return "σ"; + case 0x03C4: return "τ"; + case 0x03C5: return "υ"; + case 0x03C6: return "φ"; + case 0x03C7: return "χ"; + case 0x03C8: return "ψ"; + case 0x03C9: return "ω"; + case 0x03D1: return "ϑ"; + case 0x03D6: return "ϖ"; + case 0x2013: return "–"; + case 0x2014: return "—"; + case 0x2018: return "‘"; + case 0x2019: return "’"; + case 0x201A: return "‚"; + case 0x201C: return "“"; + case 0x201D: return "”"; + case 0x201E: return "„"; + case 0x2020: return "†"; + case 0x2021: return "‡"; + case 0x2022: return "•"; + case 0x2030: return "‰"; + case 0x2032: return "′"; + case 0x2033: return "″"; + case 0x2039: return "‹"; + case 0x203A: return "›"; + case 0x203E: return "‾"; + case 0x2044: return "⁄"; + case 0x20AC: return "€"; + case 0x2111: return "ℑ"; + case 0x2118: return "℘"; + case 0x211C: return "ℜ"; + case 0x2122: return "™"; + case 0x2135: return "ℵ"; + case 0x2190: return "←"; + case 0x2191: return "↑"; + case 0x2192: return "→"; + case 0x2193: return "↓"; + case 0x2194: return "↔"; + case 0x21D0: return "⇐"; + case 0x21D1: return "⇑"; + case 0x21D2: return "⇒"; + case 0x21D3: return "⇓"; + case 0x21D4: return "⇔"; + case 0x2200: return "∀"; + case 0x2202: return "∂"; + case 0x2203: return "∃"; + case 0x2205: return "∅"; + case 0x2207: return "∇"; + case 0x2208: return "∈"; + case 0x2209: return "∉"; + case 0x220B: return "∋"; + case 0x220F: return "∏"; + case 0x2211: return "∑"; + case 0x2212: return "−"; + case 0x2217: return "∗"; + case 0x221A: return "√"; + case 0x221D: return "∝"; + case 0x221E: return "∞"; + case 0x2220: return "∠"; + case 0x2227: return "∧"; + case 0x2228: return "∨"; + case 0x2229: return "∩"; + case 0x222A: return "∪"; + case 0x222B: return "∫"; + case 0x2234: return "∴"; + case 0x223C: return "∼"; + case 0x2245: return "≅"; + case 0x2248: return "≈"; + case 0x2260: return "≠"; + case 0x2261: return "≡"; + case 0x2264: return "≤"; + case 0x2265: return "≥"; + case 0x2282: return "⊂"; + case 0x2283: return "⊃"; + case 0x2284: return "⊄"; + case 0x2286: return "⊆"; + case 0x2287: return "⊇"; + case 0x2295: return "⊕"; + case 0x2297: return "⊗"; + case 0x22A5: return "⊥"; + case 0x22C5: return "⋅"; + case 0x2308: return "⌈"; + case 0x2309: return "⌉"; + case 0x230A: return "⌊"; + case 0x230B: return "⌋"; + case 0x2329: return "⟨"; + case 0x232A: return "⟩"; + case 0x25CA: return "◊"; + case 0x2660: return "♠"; + case 0x2663: return "♣"; + case 0x2665: return "♥"; + case 0x2666: return "♦"; + default: return to_unicode(code); + } + } +} + /* * overstrike - returns TRUE if the glyph (i, name) is going to overstrike * a previous glyph in sbuf. @@ -4317,7 +4672,7 @@ char *get_html_translation (font *f, const string &name) * is flushed. */ -int html_printer::overstrike(int idx, const char *name, const environment *env, int w) +int html_printer::overstrike(glyph *g, const char *name, const environment *env, int w) { if ((env->hpos < sbuf_end_hpos) || ((sbuf_kern != 0) && (sbuf_end_hpos - sbuf_kern < env->hpos))) { @@ -4327,7 +4682,7 @@ int html_printer::overstrike(int idx, const char *name, const environment *env, if (overstrike_detected) { /* already detected, remove previous glyph and use this glyph */ sbuf.set_length(last_sbuf_length); - add_to_sbuf(idx, name); + add_to_sbuf(g, name); sbuf_end_hpos = env->hpos + w; return TRUE; } else { @@ -4336,7 +4691,7 @@ int html_printer::overstrike(int idx, const char *name, const environment *env, if (! is_bold(sbuf_style.f)) flush_sbuf(); overstrike_detected = TRUE; - add_to_sbuf(idx, name); + add_to_sbuf(g, name); sbuf_end_hpos = env->hpos + w; return TRUE; } @@ -4350,7 +4705,7 @@ int html_printer::overstrike(int idx, const char *name, const environment *env, * and add character anew. */ -void html_printer::set_char(int i, font *f, const environment *env, +void html_printer::set_char(glyph *g, font *f, const environment *env, int w, const char *name) { style sty(f, env->size, env->height, env->slant, env->fontno, *env->col); @@ -4361,13 +4716,14 @@ void html_printer::set_char(int i, font *f, const environment *env, } } if (((! sbuf.empty()) && (sty == sbuf_style) && (sbuf_vpos == env->vpos)) - && (sbuf_continuation(i, name, env, w) || overstrike(i, name, env, w))) + && (sbuf_continuation(g, name, env, w) + || overstrike(g, name, env, w))) return; flush_sbuf(); if (sbuf_style.f == NULL) sbuf_style = sty; - add_to_sbuf(i, name); + add_to_sbuf(g, name); sbuf_end_hpos = env->hpos + w; sbuf_start_hpos = env->hpos; sbuf_prev_hpos = env->hpos; @@ -4390,7 +4746,7 @@ void html_printer::set_numbered_char(int num, const environment *env, nbsp_width = -num; num = 160; //   } - int i = font::number_to_index(num); + glyph *g = number_to_glyph(num); int fn = env->fontno; if (fn < 0 || fn >= nfonts) { error("bad font position `%1'", fn); @@ -4401,7 +4757,7 @@ void html_printer::set_numbered_char(int num, const environment *env, error("no font mounted at `%1'", fn); return; } - if (!f->contains(i)) { + if (!f->contains(g)) { error("font `%1' does not contain numbered character %2", f->get_name(), num); @@ -4411,28 +4767,28 @@ void html_printer::set_numbered_char(int num, const environment *env, if (nbsp_width) w = nbsp_width; else - w = f->get_width(i, env->size); + w = f->get_width(g, env->size); w = round_width(w); if (widthp) *widthp = w; - set_char(i, f, env, w, 0); + set_char(g, f, env, w, 0); } -int html_printer::set_char_and_width(const char *nm, const environment *env, - int *widthp, font **f) +glyph *html_printer::set_char_and_width(const char *nm, const environment *env, + int *widthp, font **f) { - int i = font::name_to_index(nm); + glyph *g = name_to_glyph(nm); int fn = env->fontno; if (fn < 0 || fn >= nfonts) { error("bad font position `%1'", fn); - return -1; + return UNDEFINED_GLYPH; } *f = font_table[fn]; if (*f == 0) { error("no font mounted at `%1'", fn); - return -1; + return UNDEFINED_GLYPH; } - if (!(*f)->contains(i)) { + if (!(*f)->contains(g)) { if (nm[0] != '\0' && nm[1] == '\0') error("font `%1' does not contain ascii character `%2'", (*f)->get_name(), @@ -4441,13 +4797,13 @@ int html_printer::set_char_and_width(const char *nm, const environment *env, error("font `%1' does not contain special character `%2'", (*f)->get_name(), nm); - return -1; + return UNDEFINED_GLYPH; } - int w = (*f)->get_width(i, env->size); + int w = (*f)->get_width(g, env->size); w = round_width(w); if (widthp) *widthp = w; - return i; + return g; } /* @@ -4464,7 +4820,10 @@ void html_printer::write_title (int in_head) } else { title.has_been_written = TRUE; if (title.with_h1) { - html.put_string("

    "); + if (dialect == xhtml) + html.put_string("

    "); + else + html.put_string("

    "); html.put_string(title.text); html.put_string("

    ").nl().nl(); } @@ -4481,8 +4840,12 @@ void html_printer::write_title (int in_head) static void write_rule (void) { - if (auto_rule) - fputs("
    \n", stdout); + if (auto_rule) { + if (dialect == xhtml) + fputs("
    \n", stdout); + else + fputs("
    \n", stdout); + } } void html_printer::begin_page(int n) @@ -4501,7 +4864,7 @@ void html_printer::begin_page(int n) output_hpos = -1; output_vpos = -1; output_vpos_max = -1; - current_paragraph = new html_text(&html); + current_paragraph = new html_text(&html, dialect); do_indent(get_troff_indent(), pageoffset, linelength); current_paragraph->do_para("", FALSE); } @@ -4559,7 +4922,14 @@ void html_printer::write_navigation (const string &top, const string &prev, int need_bar = FALSE; if (multiple_files) { + current_paragraph->done_para(); write_rule(); + if (groff_sig) + fputs("\n\n
    tag with a corresponding width + * if the dialect is html4. + */ + +void html_table::emit_td (int percentage, const char *s) +{ + if (percentage) { + if (dialect == html4) { + out->put_string("put_string(s); + out->nl(); + } + else { + out->put_string("put_string(s); + out->nl(); + } + } +} + /* * emit_col - moves onto column, n. */ @@ -405,11 +486,7 @@ void html_table::emit_col (int n) // have we a gap? if (last_col != NULL) { - if (is_gap(b)) - out->put_string("") - .nl(); + emit_td(width, " align=center>"); break; case 'R': - out->put_string("") - .nl(); + emit_td(width, " align=right>"); break; default: - out->put_string("") - .nl(); + emit_td(width); } // remember column, b last_col = b; @@ -477,7 +537,13 @@ void html_table::finish_row (void) if (n > 0) emit_col(n); - out->put_string("
    \n" + "\n" + "
    ", stdout); + handle_valid_flag(FALSE); fputs("[ ", stdout); if ((strcmp(prev.contents(), "") != 0) && prev != top && prev != current) { emit_link(prev, "prev"); @@ -4577,6 +4947,15 @@ void html_printer::write_navigation (const string &top, const string &prev, emit_link(top, "top"); } fputs(" ]\n", stdout); + + if (groff_sig) { + fputs("" + "This document was produced using " + "" + "groff-", stdout); + fputs(Version_string, stdout); + fputs(".
    \n", stdout); + } write_rule(); } } @@ -4601,7 +4980,10 @@ void html_printer::do_file_components (void) file_list.start_of_list(); top = string(job_name); - top += string(".html"); + if (dialect == xhtml) + top += string(".xhtml"); + else + top += string(".html"); top += '\0'; next = file_list.next_file_name(); next += '\0'; @@ -4614,6 +4996,12 @@ void html_printer::do_file_components (void) file_list.move_next(); if (file_list.is_new_output_file()) { +#ifdef LONG_FOR_TIME_T + long t; +#else + time_t t; +#endif + if (fragment_no > 1) write_navigation(top, prev, next, current); prev = current; @@ -4625,7 +5013,29 @@ void html_printer::do_file_components (void) fflush(stdout); freopen(split_file.contents(), "w", stdout); fragment_no++; - writeHeadMetaStyle(); + if (dialect == xhtml) + writeHeadMetaStyle(); + + html.begin_comment("Creator : ") + .put_string("groff ") + .put_string("version ") + .put_string(Version_string) + .end_comment(); + + t = time(0); + html.begin_comment("CreationDate: ") + .put_string(ctime(&t), strlen(ctime(&t))-1) + .end_comment(); + + if (dialect == html4) + writeHeadMetaStyle(); + + html.put_string(""); + html.put_string(split_file.contents()); + html.put_string("").nl().nl(); + + fputs(head_info.contents(), stdout); + fputs("\n", stdout); write_navigation(top, prev, next, current); } if (file_list.are_links_required()) @@ -4633,8 +5043,27 @@ void html_printer::do_file_components (void) } if (fragment_no > 1) write_navigation(top, prev, next, current); - else + else { + current_paragraph->done_para(); write_rule(); + if (valid_flag) { + if (groff_sig) + fputs("\n\n\n" + "\n" + "
    ", stdout); + handle_valid_flag(TRUE); + if (groff_sig) { + fputs("" + "This document was produced using " + "" + "groff-", stdout); + fputs(Version_string, stdout); + fputs(".
    \n", stdout); + } + write_rule(); + } + } } /* @@ -4644,21 +5073,43 @@ void html_printer::do_file_components (void) void html_printer::writeHeadMetaStyle (void) { - fputs("\n", stdout); - - fputs("\n", stdout); - fputs("\n", stdout); - fputs("\n", stdout); - fputs("\n", stdout); - fputs("\n", stdout); - - fputs("\n", stdout); } @@ -4670,9 +5121,14 @@ html_printer::~html_printer() time_t t; #endif - current_paragraph->flush_text(); + if (current_paragraph) + current_paragraph->flush_text(); html.end_line(); html.set_file(stdout); + + if (dialect == xhtml) + writeHeadMetaStyle(); + html.begin_comment("Creator : ") .put_string("groff ") .put_string("version ") @@ -4684,7 +5140,8 @@ html_printer::~html_printer() .put_string(ctime(&t), strlen(ctime(&t))-1) .end_comment(); - writeHeadMetaStyle(); + if (dialect == html4) + writeHeadMetaStyle(); write_title(TRUE); head_info += '\0'; @@ -4864,9 +5321,12 @@ void html_printer::special(char *s, const environment *env, char type) * requesting that the formatting move right by the appropriate * amount. */ - } else if (strncmp(s, "html

    :", 9) == 0) { + } else if ((strncmp(s, "html

    :", 9) == 0) || + (strncmp(s, "html:", 9) == 0) || + (strncmp(s, "math:", 9) == 0)) { int r=font::res; /* resolution of the device */ font *f=sbuf_style.f; + string t; if (f == NULL) { int found=FALSE; @@ -4874,6 +5334,17 @@ void html_printer::special(char *s, const environment *env, char type) f = font::load_font("TR", &found); } + if (strncmp(s, "math:", 9) == 0) { + if (strncmp((char *)&s[9], "", 6) == 0) { + s[9] = '\0'; + t = s; + t += ""; + t += (char *)&s[15]; + t += '\0'; + s = (char *)&t[0]; + } + } + /* * need to pass all of string through to html output during flush */ @@ -4889,6 +5360,7 @@ void html_printer::special(char *s, const environment *env, char type) * requesting that the formatting move right by the appropriate * amount. */ + } else if (strncmp(s, "index:", 6) == 0) { cutoff_heading = atoi(&s[6]); } else if (strncmp(s, "assertion:[", 11) == 0) { @@ -4952,6 +5424,31 @@ int html_printer::round_width(int x) return n * r; } +/* + * handle_valid_flag - emits a valid xhtml 1.1 or html-4.01 button, provided -V + * was supplied on the command line. + */ + +void html_printer::handle_valid_flag (int needs_para) +{ + if (valid_flag) { + if (needs_para) + fputs("

    ", stdout); + if (dialect == xhtml) + fputs("\n", + stdout); + else + fputs("\n", + stdout); + if (needs_para) + fputs("

    ", stdout); + } +} + int main(int argc, char **argv) { program_name = argv[0]; @@ -4963,7 +5460,7 @@ int main(int argc, char **argv) { "version", no_argument, 0, 'v' }, { NULL, 0, 0, 0 } }; - while ((c = getopt_long(argc, argv, "a:bdD:F:g:hi:I:j:lno:prs:S:v", + while ((c = getopt_long(argc, argv, "a:bdD:eF:g:hi:I:j:lno:prs:S:vVx:y", long_options, NULL)) != EOF) switch(c) { @@ -4981,6 +5478,9 @@ int main(int argc, char **argv) case 'D': /* handled by pre-html */ break; + case 'e': + /* handled by pre-html */ + break; case 'F': font::command_line_font_dir(optarg); break; @@ -5026,6 +5526,21 @@ int main(int argc, char **argv) printf("GNU post-grohtml (groff) version %s\n", Version_string); exit(0); break; + case 'V': + valid_flag = TRUE; + break; + case 'x': + if (strcmp(optarg, "x") == 0) { + dialect = xhtml; + simple_anchors = TRUE; + } else if (strcmp(optarg, "4") == 0) + dialect = html4; + else + printf("unsupported html dialect %s (defaulting to html4)\n", optarg); + break; + case 'y': + groff_sig = TRUE; + break; case CHAR_MAX + 1: // --help usage(stdout); exit(0); @@ -5048,6 +5563,6 @@ int main(int argc, char **argv) static void usage(FILE *stream) { - fprintf(stream, "usage: %s [-vblnh] [-D dir] [-I image_stem] [-F dir] [files ...]\n", + fprintf(stream, "usage: %s [-vbelnhVy] [-D dir] [-I image_stem] [-F dir] [-x x] [files ...]\n", program_name); } diff --git a/contrib/groff/src/devices/grolbp/charset.h b/contrib/groff/src/devices/grolbp/charset.h index a0cd057b46..196a5a8966 100644 --- a/contrib/groff/src/devices/grolbp/charset.h +++ b/contrib/groff/src/devices/grolbp/charset.h @@ -1,3 +1,25 @@ +// -*- C++ -*- +/* Copyright (C) 2000, 2003, 2009 + Free Software Foundation, Inc. + Written by Francisco Andrés Verdú with many ideas + taken from the other groff drivers. + + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ + // Definition of the WP54 character set unsigned char symset[] = { diff --git a/contrib/groff/src/devices/grolbp/grolbp.man b/contrib/groff/src/devices/grolbp/grolbp.man index 6685c4f909..3672f76150 100644 --- a/contrib/groff/src/devices/grolbp/grolbp.man +++ b/contrib/groff/src/devices/grolbp/grolbp.man @@ -3,7 +3,8 @@ .\" vim: set syntax=nroff : .\" The above line should set vim into nroff mode .ig -Copyright (C) 1994-2000, 2002 Free Software Foundation, Inc. +Copyright (C) 1994-2000, 2002, 2006, 2009 + Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice @@ -23,22 +24,30 @@ the original English. Modified by Francisco Andrés Verdú for the grolbp program. .. +. +. .de TQ -.br -.ns -.TP \\$1 +. br +. ns +. TP \\$1 .. +. +. .\" Like TP, but if specified indent is more than half .\" the current line-length - indent, use the default indent. .de Tp -.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP -.el .TP "\\$1" +. ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP +. el .TP "\\$1" .. +. +. .TH GROLBP @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@" . +. .SH NAME grolbp \- groff driver for Canon CAPSL printers (LBP-4 and LBP-8 series laser printers). . +. .SH SYNOPSIS .nr a \n(.j .ad l @@ -51,6 +60,7 @@ grolbp \- groff driver for Canon CAPSL printers (LBP-4 and LBP-8 series laser pr .ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]" .el .RB "[\ " "\\$1" "\ ]" .. +. .OP \-l .OP \-\-landscape .OP \-v @@ -72,24 +82,30 @@ grolbp \- groff driver for Canon CAPSL printers (LBP-4 and LBP-8 series laser pr .ad \na .hy . +. .SH DESCRIPTION .B grolbp is a driver for .B groff that produces output in CAPSL and VDM format suitable for Canon LBP\-4 and LBP\-8 printers. +. .LP For compatibility with grolj4 there is an additional drawing command available: +. .TP .BI \eD'R\ dh\ dv ' Draw a rule (i.e.\ a solid black rectangle), with one corner at the current position, and the diagonally opposite corner at the current position .RI +( dh , dv ). +. +. .SH OPTIONS Note that there can be whitespace between a one-letter option and its argument; on the other hand, there must be whitespace and/or an equal sign (`=') between a long-name option and its argument. +. .TP .BI \-c numcopies .TQ @@ -97,11 +113,13 @@ argument; on the other hand, there must be whitespace and/or an equal sign Print .I numcopies copies of each page. +. .TP .B \-l .TQ .B \-\-landscape Print the document with a landscape orientation. +. .TP .BI \-p paper_size .TQ @@ -110,6 +128,7 @@ Set the paper size to .IR paper_size , which must be a valid paper size description as indicated in the section .BR "PAPER SIZES" . +. .TP .BI \-o orientation .TQ @@ -117,6 +136,7 @@ which must be a valid paper size description as indicated in the section Print the document with .I orientation orientation, which must be `portrait' or `landscape'. +. .TP .BI \-w width .TQ @@ -125,11 +145,13 @@ Set the default line thickness to .I width thousandths of an em. If this option isn't specified, the line thickness defaults to 0.04\~em. +. .TP .B \-v .TQ .B \-\-version Print the version number. +. .TP .BI \-F dir .TQ @@ -140,20 +162,25 @@ to the search path for font and device description files; .I name is the name of the device, usually .BR lbp . +. .TP .B \-h .TQ .B \-\-help Print a short help text. +. +. .SH TYPEFACES The driver supports the Dutch, Swiss and Swiss-Narrow scalable typefaces, each one in the Regular, Bold, Italic and Bold-Italic styles. Additionally, the Courier and Elite monospaced typefaces at the sizes 8 and 12 points (for Courier) resp. 8 and 10 points (for Elite) are supported, each one in the Regular, Bold and Italic styles. +. .PP The following chart summarizes the font names you can use to access these fonts: +. .PP .TS tab(|) allbox center; @@ -167,7 +194,8 @@ Swiss Narrow | HNR | HNB | HNI | HNBI Courier | CR | CB | CI | Elite | ER | EB | EI | .TE -.PP +. +. .SH PAPER SIZES The paper size can be set in the .B DESC @@ -177,12 +205,14 @@ If the paper size is specified both ways, the command line options take precedence over the contents of the .B DESC file (this applies to the page orientation too). +. .PP See .BR groff_font (@MAN1EXT@) how to set the paper dimensions in the .B DESC file. +. .PP To set the paper size in the command line, add .sp 1 @@ -203,10 +233,13 @@ options, where is in the same format as in the .B DESC file. +. .PP If no paper size is specified in the .B DESC file or the command line, a default size of A4 is used. +. +. .SH PAGE ORIENTATION As with the page size, the orientation of the printed page .RB ( portrait @@ -216,6 +249,7 @@ can be set in the .B DESC file or with command line options. It is also case insensitive. +. .PP To set the orientation in the .B DESC @@ -229,6 +263,7 @@ file, insert a line with the following content: Only the first valid orientation command in the .B DESC file is used. +. .PP To set the page orientation with command line options you can use the .B \-o @@ -244,6 +279,8 @@ file. Or you can use the .B \-l option to force the pages to be printed in landscape. +. +. .SH FONT FILE FORMAT In addition to the usual commands described in .BR groff_font (@MAN5EXT@), @@ -257,6 +294,7 @@ The syntax of this command is: .B lbpname .I printer_font_name .in -2m +. .IP \(bu For bitmapped fonts, .I printer_font_name @@ -276,6 +314,7 @@ can be one of the letters or .BR B , indicating the font styles Roman, Italic and Bold respectively. +. .IP For instance, if the printer's .I font listing A @@ -285,17 +324,20 @@ description file is .in +2m .B lbpname NeliteI .in -2m +. .IP Note that you may need to modify .B grolbp to add support for new bitmapped fonts, since the available font names and font sizes of bitmapped fonts (as documented above) are hard-coded into the program. +. .IP \(bu For scalable fonts, .I printer_font_name is identical to the font name as it appears in the printer's .IR "font listing A" . +. .IP For instance, to select the `Swiss' font in bold style, which appears in the printer's @@ -308,22 +350,44 @@ command line is .B lbpname Swiss-Bold .in -2m .sp 1 +. .PP The argument of .B lbpname is case sensitive. +. +. +.SH ENVIRONMENT +.TP +.SM +.B GROFF_FONT_PATH +A list of directories in which to search for the +.BI dev name +directory in addition to the default ones. +. +See +.BR @g@troff (@MAN1EXT@) +and +.BR \%groff_font (@MAN5EXT@) +for more details. +. +. .SH FILES .TP .B @FONTDIR@/devlbp/DESC Device description file. +. .TP .BI @FONTDIR@/devlbp/ F Font description file for font .IR F . +. .TP .B @MACRODIR@/lbp.tmac Macros for use with .BR grolbp . +. +. .SH SEE ALSO .BR groff (@MAN1EXT@), .BR @g@troff (@MAN1EXT@), diff --git a/contrib/groff/src/devices/grolbp/lbp.cpp b/contrib/groff/src/devices/grolbp/lbp.cpp index 081ab998ff..8a32b45d5e 100644 --- a/contrib/groff/src/devices/grolbp/lbp.cpp +++ b/contrib/groff/src/devices/grolbp/lbp.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1994, 2000, 2001, 2002, 2003, 2004, 2005 +/* Copyright (C) 1994, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 Free Software Foundation, Inc. Written by Francisco Andrés Verdú with many ideas taken from the other groff drivers. @@ -9,17 +9,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ /* TODO @@ -63,7 +62,7 @@ class lbp_printer : public printer { public: lbp_printer(int, double, double); ~lbp_printer(); - void set_char(int, font *, const environment *, int, const char *name); + void set_char(glyph *, font *, const environment *, int, const char *name); void draw(int code, int *p, int np, const environment *env); void begin_page(int); void end_page(int page_length); @@ -277,10 +276,10 @@ char *lbp_printer::font_name(const lbp_font *f, const int siz) return bfont_name; } -void lbp_printer::set_char(int idx, font *f, const environment *env, +void lbp_printer::set_char(glyph *g, font *f, const environment *env, int w, const char *) { - int code = f->get_code(idx); + int code = f->get_code(g); unsigned char ch = code & 0xff; unsigned short symbol_set = code >> 8; if (f != cur_font) { diff --git a/contrib/groff/src/devices/grolbp/lbp.h b/contrib/groff/src/devices/grolbp/lbp.h index b3171cf03f..7f7bdaebc7 100644 --- a/contrib/groff/src/devices/grolbp/lbp.h +++ b/contrib/groff/src/devices/grolbp/lbp.h @@ -1,21 +1,20 @@ // -*- C -*- -/* Copyright (C) 1994, 2000, 2001, 2003, 2004, 2005 +/* Copyright (C) 1994, 2000, 2001, 2003, 2004, 2005, 2009 Free Software Foundation, Inc. Written by Francisco Andrés Verdú groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ /* This file contains a set of utility functions to use canon CAPSL printers * (lbp-4 and lbp-8 series printers) */ diff --git a/contrib/groff/src/devices/grolj4/grolj4.man b/contrib/groff/src/devices/grolj4/grolj4.man index 260a6198b3..62385c4ff2 100644 --- a/contrib/groff/src/devices/grolj4/grolj4.man +++ b/contrib/groff/src/devices/grolj4/grolj4.man @@ -1,5 +1,6 @@ .ig -Copyright (C) 1994-2000, 2001, 2002, 2004 Free Software Foundation, Inc. +Copyright (C) 1994-2000, 2001, 2002, 2004, 2006, 2009 + Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice @@ -19,12 +20,17 @@ the original English. .\" Like TP, but if specified indent is more than half .\" the current line-length - indent, use the default indent. .de Tp -.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP -.el .TP "\\$1" +. ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP +. el .TP "\\$1" .. +. +. .TH GROLJ4 @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@" +. .SH NAME grolj4 \- groff driver for HP Laserjet 4 family +. +. .SH SYNOPSIS .nr a \n(.j .ad l @@ -32,10 +38,12 @@ grolj4 \- groff driver for HP Laserjet 4 family .in +\w'\fBgrolj4 'u .ti \niu .B grolj4 +. .de OP -.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]" -.el .RB "[\ " "\\$1" "\ ]" +. ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]" +. el .RB "[\ " "\\$1" "\ ]" .. +. .OP \-lv .OP \-d \fR[\fPn\fR]\fP .OP \-c n @@ -45,16 +53,21 @@ grolj4 \- groff driver for HP Laserjet 4 family .RI "[\ " files\|.\|.\|. "\ ]" .br .ad \na +. .PP It is possible to have whitespace between a command line option and its parameter. +. +. .SH DESCRIPTION .B grolj4 is a driver for .B groff that produces output in PCL5 format suitable for an HP Laserjet 4 printer. +. .LP There is an additional drawing command available: +. .TP .BI \eD'R\ dh\ dv ' Draw a rule (solid black rectangle), with one corner @@ -66,36 +79,44 @@ generates a PCL fill rectangle command, and so will work on printers that do not support HPGL/2 unlike the other .B \eD commands. +. +. .SH OPTIONS .TP .BI \-c n Print .I n copies of each page. +. .TP .B \-l Print the document with a landscape orientation. +. .TP .BI "\-d [" n ] Use duplex mode .IR n : 1\ is long-side binding; 2\ is short-side binding; default is\ 1. +. .TP .BI \-p size Set the paper size to .IR size , which must be one of letter, legal, executive, a4, com10, monarch, c5, b5, dl. +. .TP .B \-v Print the version number. +. .TP .BI \-w n Set the default line thickness to .I n thousandths of an em. If this option isn't specified, the line thickness defaults to 0.04\~em. +. .TP .BI \-F dir Prepend directory @@ -104,41 +125,69 @@ to the search path for font and device description files; .I name is the name of the device, usually .BR lj4 . +. .LP The following four commands are available additionally in the font description files: +. .TP .BI pclweight \ N The integer value .I N -must be in the range -7 to +7; default is 0. +must be in the range -7 to +7; default is\~0. +. .TP .BI pclstyle \ N The integer value .I N -must be in the range 0 to 32767; default is 0. +must be in the range 0 to 32767; default is\~0. +. .TP .BI pclproportional \ N -A boolean flag which can be either 0 or 1; default is 0. +A boolean flag which can be either 0 or\~1; default is\~0. +. .TP .BI pcltypeface \ N The integer value .I N -must be in the range 0 to 65535; default is 0. +must be in the range 0 to 65535; default is\~0. +. +. +.SH ENVIRONMENT +.TP +.SM +.B GROFF_FONT_PATH +A list of directories in which to search for the +.BI dev name +directory in addition to the default ones. +. +See +.BR @g@troff (@MAN1EXT@) +and +.BR \%groff_font (@MAN5EXT@) +for more details. +. +. .SH FILES .TP .B @FONTDIR@/devlj4/DESC Device description file. +. .TP .BI @FONTDIR@/devlj4/ F Font description file for font .IR F . +. .TP .B @MACRODIR@/lj4.tmac Macros for use with .BR grolj4 . +. +. .SH BUGS Small dots. +. +. .SH "SEE ALSO" .BR lj4_font (@MAN5EXT@), .BR groff (@MAN1EXT@), diff --git a/contrib/groff/src/devices/grolj4/lj4.cpp b/contrib/groff/src/devices/grolj4/lj4.cpp index 12849542b2..f6d72918e9 100644 --- a/contrib/groff/src/devices/grolj4/lj4.cpp +++ b/contrib/groff/src/devices/grolj4/lj4.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1994, 2000, 2001, 2002, 2003, 2004 +/* Copyright (C) 1994, 2000, 2001, 2002, 2003, 2004, 2006, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ /* TODO @@ -163,7 +162,7 @@ class lj4_printer : public printer { public: lj4_printer(int); ~lj4_printer(); - void set_char(int, font *, const environment *, int, const char *name); + void set_char(glyph *, font *, const environment *, int, const char *name); void draw(int code, int *p, int np, const environment *env); void begin_page(int); void end_page(int page_length); @@ -278,10 +277,10 @@ int is_unprintable(unsigned char c) return c < 32 && (c == 0 || (7 <= c && c <= 15) || c == 27); } -void lj4_printer::set_char(int idx, font *f, const environment *env, +void lj4_printer::set_char(glyph *g, font *f, const environment *env, int w, const char *) { - int code = f->get_code(idx); + int code = f->get_code(g); unsigned char ch = code & 0xff; unsigned short symbol_set = code >> 8; diff --git a/contrib/groff/src/devices/grolj4/lj4_font.man b/contrib/groff/src/devices/grolj4/lj4_font.man index e82edff7c7..30a3c3bdd0 100644 --- a/contrib/groff/src/devices/grolj4/lj4_font.man +++ b/contrib/groff/src/devices/grolj4/lj4_font.man @@ -1,6 +1,6 @@ .tr ~ .ig -Copyright (C) 2004 Free Software Foundation, Inc. +Copyright (C) 2004, 2009 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice diff --git a/contrib/groff/src/devices/grops/grops.man b/contrib/groff/src/devices/grops/grops.man index 0ff2579d73..67c0b747c6 100644 --- a/contrib/groff/src/devices/grops/grops.man +++ b/contrib/groff/src/devices/grops/grops.man @@ -1,5 +1,6 @@ .ig -Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2005 +Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, + 2009 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of @@ -18,11 +19,6 @@ translations approved by the Free Software Foundation instead of in the original English. .. . -.do nr grops_C \n[.C] -.cp 0 -. -.mso www.tmac -. . .\" Like TP, but if specified indent is more than half .\" the current line-length - indent, use the default indent. @@ -31,12 +27,6 @@ the original English. . el .TP "\\$1" .. . -.de TQ -. br -. ns -. TP \$1 -.. -. .de FT . if '\\*(.T'ps' .ft \\$1 .. @@ -46,22 +36,13 @@ the original English. . . .SH NAME +. grops \- PostScript driver for groff . . .SH SYNOPSIS -.nr a \n(.j -.ad l -.nr i \n(.i -.in +\w'\fBgrops 'u -.ti \niu -.B grops -. -.de OP -.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\%\\$2" "\ ]" -.el .RB "[\ " "\\$1" "\ ]" -.. . +.SY grops .OP \-glmv .OP \-b n .OP \-c n @@ -70,16 +51,17 @@ grops \- PostScript driver for groff .OP \-p papersize .OP \-P prologue .OP \-w n -.RI "[\ " files\|.\|.\|. "\ ]" -.br -.ad \na +.RI [ files +.IR .\|.\|. ] +.YS . -.PP +.LP It is possible to have whitespace between a command line option and its parameter. . . .SH DESCRIPTION +. .B grops translates the output of GNU .B troff @@ -96,11 +78,11 @@ option. . If no files are given, .B grops -will read the standard input. +reads the standard input. . A filename of .B \- -will also cause +also causes .B grops to read the standard input. . @@ -112,12 +94,12 @@ is run by .B groff options can be passed to .B grops -using the -.B groff +using +.BR groff 's .B \-P option. . -.PP +.LP Note that .B grops doesn't produce a valid document structure (conforming to the Document @@ -126,8 +108,14 @@ Structuring Convention) if called with multiple file arguments. To print such concatenated output it is necessary to deactivate DSC handling in the printing program or previewer. . +See section +.B FONT INSTALLATION +below for a guide how to install fonts for +.BR grops . +. . .SH OPTIONS +. .TP .BI \-b n Provide workarounds for older printers, broken spoolers, and previewers. @@ -145,7 +133,7 @@ controls what .B grops does to make its output acceptable to such programs. . -A value of\~0 will cause grops not to employ any workarounds. +A value of\~0 causes grops not to employ any workarounds. . .IP Add\~1 if no @@ -162,7 +150,7 @@ comment. . .IP Add\~2 if lines in included files beginning with -.B %! +.B %!\& should be stripped out; this is needed for Sun's pageview previewer. . .IP @@ -199,7 +187,7 @@ This was the behaviour of groff version 1.18.1 and earlier; it is needed for older printers which don't understand PostScript LanguageLevel\~2. . It is also necessary if the output is further processed to get an -encapsulated PS (EPS) file -- see below. +encapsulated PS (EPS) file \[en] see below. . .IP The default value can be specified by a @@ -235,24 +223,33 @@ Guess the page length. . This generates PostScript code that guesses the page length. . -The guess will be correct only if the imageable area is vertically +The guess is correct only if the imageable area is vertically centered on the page. . This option allows you to generate documents that can be printed -both on letter (8.5\(mu11) paper and on A4 paper without change. +both on letter (8.5\[mu]11) paper and on A4 paper without change. . .TP .BI \-I dir -This option may be used to specify a directory to search for -files on the command line and files named in -.B \eX'ps: import' +This option may be used to add a directory to the search path for +files on the command line and files named in +.B \[rs]X'ps: import' and -.B \eX'ps: file' +.B \[rs]X'ps: file' escapes. -The current directory is always searched first. -This option may be specified more than once; -the directories will be searched in the order specified. -No directory search is performed for files specified using an absolute path. +. +The search path is initialized with the current directory. +. +This option may be specified more than once; the directories are then +searched in the order specified (but before the current directory). +. +If you want to make the current directory be read before other directories, +add +.B \-I.\& +at the appropriate place. +. +.IP +No directory search is performed for files with an absolute file name. . .TP .B \-l @@ -296,6 +293,7 @@ This option overrides the environment variable Lines should be drawn using a thickness of .IR n \~\c thousandths of an em. +. If this option is not given, the line thickness defaults to 0.04\~em. . .TP @@ -304,7 +302,217 @@ Print the version number. . . .SH USAGE -There are styles called +. +The input to +.B grops +must be in the format output by +.BR @g@troff (@MAN1EXT@). +. +This is described in +.BR groff_out (@MAN5EXT@). +. +.LP +In addition, the device and font description files for the device used +must meet certain requirements: +. +The resolution must be an integer multiple of\~72 times the +.BR sizescale . +. +The +.B ps +device uses a resolution of 72000 and a sizescale of 1000. +. +.LP +The device description file must contain a valid paper size; see +.BR groff_font (@MAN5EXT@) +for more information. +. +.LP +Each font description file must contain a command +.IP +.BI internalname\ psname +.LP +which says that the PostScript name of the font is +.IR psname . +. +It may also contain a command +.IP +.BI encoding\ enc_file +.LP +which says that +the PostScript font should be reencoded using the encoding described in +.IR enc_file ; +this file should consist of a sequence of lines of the form: +.IP +.I +pschar code +.LP +where +.I pschar +is the PostScript name of the character, +and +.I code +is its position in the encoding expressed as a decimal integer; valid +values are in the range 0 to\~255. +. +Lines starting with +.B # +and blank lines are ignored. +. +The code for each character given in the font file must correspond +to the code for the character in encoding file, or to the code in the default +encoding for the font if the PostScript font is not to be reencoded. +. +This code can be used with the +.B \[rs]N +escape sequence in +.B troff +to select the character, +even if the character does not have a groff name. +. +Every character in the font file must exist in the PostScript font, and +the widths given in the font file must match the widths used +in the PostScript font. +. +.B grops +assumes that a character with a groff name of +.B space +is blank (makes no marks on the page); +it can make use of such a character to generate more efficient and +compact PostScript output. +. +.LP +Note that +.B grops +is able to display all glyphs in a PostScript font, not only 256. +.I enc_file +(or the default encoding if no encoding file specified) just defines the +order of glyphs for the first 256 characters; all other glyphs are +accessed with additional encoding vectors which +.B grops +produces on the fly. +. +.LP +.B grops +can automatically include the downloadable fonts necessary +to print the document. +. +Such fonts must be in PFA format. +. +Use +.BR \%pfbtops (@MAN1EXT@) +to convert a Type\~1 font in PFB format. +. +Any downloadable fonts which should, when required, be included by +.B grops +must be listed in the file +.BR @FONTDIR@/devps/download ; +this should consist of lines of the form +. +.IP +.I +font filename +. +.LP +where +.I font +is the PostScript name of the font, +and +.I filename +is the name of the file containing the font; +lines beginning with +.B # +and blank lines are ignored; +fields may be separated by tabs or spaces; +.I filename +is searched for using the same mechanism that is used +for groff font metric files. +. +The +.B download +file itself is also searched for using this mechanism; +currently, only the first found file in the font path is used. +. +.LP +If the file containing a downloadable font or imported document +conforms to the Adobe Document Structuring Conventions, +then +.B grops +interprets any comments in the files sufficiently to ensure that its +own output is conforming. +. +It also supplies any needed font resources that are listed in the +.B download +file +as well as any needed file resources. +. +It is also able to handle inter-resource dependencies. +. +For example, suppose that you have a downloadable font called Garamond, +and also a downloadable font called Garamond-Outline +which depends on Garamond +(typically it would be defined to copy Garamond's font dictionary, +and change the PaintType), +then it is necessary for Garamond to appear before Garamond-Outline +in the PostScript document. +. +.B grops +handles this automatically +provided that the downloadable font file for Garamond-Outline +indicates its dependence on Garamond by means of +the Document Structuring Conventions, +for example by beginning with the following lines +. +.IP +.B +%!PS-Adobe-3.0 Resource-Font +.br +.B +%%DocumentNeededResources: font Garamond +.br +.B +%%EndComments +.br +.B +%%IncludeResource: font Garamond +. +.LP +In this case both Garamond and Garamond-Outline would need to be listed +in the +.B download +file. +. +A downloadable font should not include its own name in a +.B %%Document\%Supplied\%Resources +comment. +. +.LP +.B grops +does not interpret +.B %%Document\%Fonts +comments. +. +The +.BR %%Document\%Needed\%Resources , +.BR %%Document\%Supplied\%Resources , +.BR %%Include\%Resource , +.BR %%Begin\%Resource , +and +.BR %%End\%Resource +comments +(or possibly the old +.BR %%Document\%Needed\%Fonts , +.BR %%Document\%Supplied\%Fonts , +.BR %%Include\%Font , +.BR %%Begin\%Font , +and +.BR %%End\%Font +comments) +should be used. +. +.LP +In the default setup +there are styles called .BR R , .BR I , .BR B , @@ -537,7 +745,7 @@ for the PS Symbol font, and containing slanted lowercase Greek letters taken from PS Symbol. . Zapf Dingbats is available as -.BR ZD +.BR ZD , and a reversed version of ZapfDingbats (with symbols pointing in the opposite direction) is available as .BR ZDR ; @@ -549,12 +757,13 @@ The default color for .B \[rs]m and .B \[rs]M -is black; for colors defined in the `rgb' color space, +is black; for colors defined in the `rgb' color space .B setrgbcolor is used, for `cmy' and `cmyk' .BR setcmykcolor , and for `gray' .BR setgray . +. Note that .B setcmykcolor is a PostScript LanguageLevel\~2 command and thus not available on some @@ -566,7 +775,7 @@ understands various X\~commands produced using the .B \[rs]X escape sequence; .B grops -will only interpret commands that begin with a +only interprets commands that begin with a .B ps: tag. . @@ -575,20 +784,21 @@ tag. This executes the arbitrary PostScript commands in .IR code . . -The PostScript currentpoint will be set to the position of the +The PostScript currentpoint is set to the position of the .B \[rs]X command before executing .IR code . . -The origin will be at the top left corner of the page, -and y\~coordinates will increase down the page. +The origin is at the top left corner of the page, +and y\~coordinates increase down the page. . A procedure\~\c .B u -will be defined that converts groff units -to the coordinate system in effect. +is defined that converts groff units +to the coordinate system in effect (provided the user doesn't change the +scale). . -For example, +For example, . .RS .IP @@ -601,24 +811,23 @@ For example, .RE . .IP -will draw a horizontal line one inch long. +draws a horizontal line one inch long. . .I code may make changes to the graphics state, -but any changes will persist only to the -end of the page. +but any changes persist only to the end of the page. . A dictionary containing the definitions specified by the .B def and .B mdef -will be on top of the dictionary stack. +is on top of the dictionary stack. . If your code adds definitions to this dictionary, you should allocate space for them using .BI \[rs]X'ps\ mdef \ n '\fR. . -Any definitions will persist only until the end of the page. +Any definitions persist only until the end of the page. . If you use the .B \[rs]Y @@ -639,11 +848,31 @@ For example, \&stroke \&.. \&\[rs]Yy -.fi .ft R +.fi . .LP is another way to draw a horizontal line one inch long. +. +Note the single backslash before `nx' \[en] the only reason to use a number +register while defining the macro `y' is to convert a user-specified +dimension `1i' to internal groff units which are in turn converted to PS +units with the +.B u +procedure. +. +.LP +.B grops +wraps user-specified PostScript code into a dictionary, nothing more. +. +In particular, it doesn't start and end the inserted code with +.B save +and +.BR restore , +respectively. +. +This must be supplied by the user, if necessary. +. .RE . .TP @@ -726,15 +955,17 @@ and are integers that give the desired width and height in groff units of the graphic. . -The graphic will be scaled so that it has this width and height +.IP +The graphic is scaled so that it has this width and height and translated so that the lower left corner of the graphic is located at the position associated with .B \[rs]X command. . -If the height argument is omitted it will be scaled uniformly in the +If the height argument is omitted it is scaled uniformly in the x and y\~directions so that it has the specified width. . +.IP Note that the contents of the .B \[rs]X command are not interpreted by @@ -746,6 +977,7 @@ and .I height arguments are not allowed to have attached scaling indicators. . +.IP If the PostScript file complies with the Adobe Document Structuring Conventions and contains a .B %%Bounding\%Box @@ -766,14 +998,14 @@ PostScript graphics. .B \[rs]X'ps:\ invis' .TQ .B \[rs]X'ps:\ endinvis' -No output will be generated for text and drawing commands +No output is generated for text and drawing commands that are bracketed with these .B \[rs]X commands. . These commands are intended for use when output from .B troff -will be previewed before being processed with +is previewed before being processed with .BR grops ; if the previewer is unable to display certain characters or other constructs, then other substitute characters or constructs @@ -803,292 +1035,319 @@ request .LP In this case, .B \%gxditview -will be unable to display the +is unable to display the .B \[rs](em -character and will draw the line, +character and draws the line, whereas .B grops -will print the +prints the .B \[rs](em character -and ignore the line (this code is already in file +and ignores the line (this code is already in file .B Xps.tmac -which will be loaded if a document intended for +which is loaded if a document intended for .B grops is previewed with .BR \%gxditview ). .RE . .LP -The input to -.B grops -must be in the format output by -.BR @g@troff (@MAN1EXT@). -. -This is described in -.BR groff_out (@MAN5EXT@). -. +If a PostScript procedure +.B BPhook +has been defined via a +.RB ` ps:\ def ' +or +.RB ` ps:\ mdef ' +device command, it is executed at the beginning +of every page (before anything is drawn or written by groff). +For example, to underlay the page contents with the word +`DRAFT' in light gray, you might use +.RS .LP -In addition, the device and font description files for the device used -must meet certain requirements. -. -The device and font description files supplied for -.B ps -device meet all these requirements. -. -.BR afmtodit (@MAN1EXT@) -can be used to create font files from AFM files. -. -The resolution must be an integer multiple of\~72 times the -.BR sizescale . -. -The -.B ps -device uses a resolution of 72000 and a sizescale of 1000. -. +.nf +.ft B +\&.de XX +ps: def +/BPhook +{ gsave .9 setgray clippath pathbbox exch 2 copy + .5 mul exch .5 mul translate atan rotate pop pop + /NewCenturySchlbk-Roman findfont 200 scalefont setfont + (DRAFT) dup stringwidth pop \-.5 mul \-70 moveto show + grestore } +def +\&.. +\&.devicem XX +.ft R +.fi +.RE .LP -The device description file must contain a valid paper size; see -.BR groff_font (@MAN5EXT@) -for more information. -. +Or, to cause lines and polygons to be drawn with square linecaps +and mitered linejoins instead of the round linecaps and linejoins +normally used by +.BR grops , +use +.RS .LP -Each font description file must contain a command -.IP -.BI internalname\ psname +.nf +.ft B +\&.de XX +ps: def +/BPhook { 2 setlinecap 0 setlinejoin } def +\&.. +\&.devicem XX +.ft R +.fi +.RE .LP -which says that the PostScript name of the font is -.IR psname . +(square linecaps, as opposed to butt linecaps (0 setlinecap), +give true corners in boxed tables even though the lines are +drawn unconnected). . -It may also contain a command -.IP -.BI encoding\ enc_file -.LP -which says that -the PostScript font should be reencoded using the encoding described in -.IR enc_file ; -this file should consist of a sequence of lines of the form: -.IP -.I -pschar code -.LP -where -.I pschar -is the PostScript name of the character, -and -.I code -is its position in the encoding expressed as a decimal integer; valid -values are in the range 0 to\~255. . -Lines starting with -.B # -and blank lines are ignored. +.SS Encapsulated PostScript +.B grops +itself doesn't emit bounding box information. . -The code for each character given in the font file must correspond -to the code for the character in encoding file, or to the code in the default -encoding for the font if the PostScript font is not to be reencoded. +With the help of Ghostscript the following simple script, +.BR groff2eps , +produces an encapsulated PS file. . -This code can be used with the -.B \[rs]N -escape sequence in -.B troff -to select the character, -even if the character does not have a groff name. +.RS +.LP +.nf +.ft B +#! /bin/sh +groff \-P\-b16 $1 >$1.ps +gs \-dNOPAUSE \-sDEVICE=bbox \-\- $1.ps 2>$1.bbox +cat $1.ps \[rs] +| sed \-e "/\[ha]%%Orientation/r$1.bbox" \[rs] + \-e "/\[ha]%!PS-Adobe-3.0/s/$/ EPSF-3.0/" >$1.eps +rm $1.ps $1.bbox +.ft R +.fi +.RE . -Every character in the font file must exist in the PostScript font, and -the widths given in the font file must match the widths used -in the PostScript font. +.LP +Just say . -.B grops -will assume that a character with a groff name of -.B space -is blank (makes no marks on the page); -it can make use of such a character to generate more efficient and -compact PostScript output. +.IP +.B +groff2eps foo . .LP -Note that -.B grops -is able to display all glyphs in a PostScript font, not only 256. -.I enc_file -(or the default encoding if no encoding file specified) just defines the -order of glyphs for the first 256 characters; all other glyphs are -accessed with additional encoding vectors which -.B grops -produces on the fly. +to convert file +.B foo +to +.BR foo.eps . . -.LP -.B grops -can automatically include the downloadable fonts necessary -to print the document. -Such fonts must be in PFA format. -Use -.BR pfbtops (@MAN1EXT@) -to convert a Type\~1 font in PFB format. -Any downloadable fonts which should, when required, be included by +. +.SS TrueType and other font formats +TrueType fonts can be used with .B grops -must be listed in the file -.BR @FONTDIR@/devps/download ; -this should consist of lines of the form +if converted first to +.B "Type\~42" +format, a special PostScript wrapper equivalent to the +PFA format mentioned in +.BR \%pfbtops (@MAN1EXT@). . -.IP -.I -font filename +There are several different methods to generate a type42 +wrapper and most of them involve the use of a PostScript +interpreter such as Ghostscript \[en] see +.BR gs (1). . .LP -where -.I font -is the PostScript name of the font, -and -.I filename -is the name of the file containing the font; -lines beginning with -.B # -and blank lines are ignored; -fields may be separated by tabs or spaces; -.I filename -will be searched for using the same mechanism that is used -for groff font metric files. +Yet, the easiest method involves the use of the application +.BR ttftot42 (1). . -The +This program uses +.BR freetype (3) +(version 1.3.1) to generate type42 +font wrappers and well-formed AFM files that can be fed to +the +.BR \%afmtodit (@MAN1EXT@) +script to create appropriate metric files. +. +The resulting font wrappers should be added to the .B download -file itself will also be searched for using this mechanism; -currently, only the first found file in the font path is used. +file. +.B ttftot42 +source code can be downloaded from +.UR ftp://\:www.giga.or.at/\:pub/\:nih/\:ttftot42/ +ftp://\:www.giga.or.at/\:pub/\:nih/\:ttftot42/ +.UE . . .LP -If the file containing a downloadable font or imported document -conforms to the Adobe Document Structuring Conventions, -then -.B grops -will interpret any comments in the files sufficiently to ensure that its -own output is conforming. +Another solution for creating type42 wrappers is to use FontForge, +available from +.UR http://\:fontforge.sf.net +http://\:fontforge.sf.net +.UE . +This font editor can convert most outline font formats. . -It will also supply any needed font resources that are listed in the -.B download -file -as well as any needed file resources. . -It is also able to handle inter-resource dependencies. +.SH FONT INSTALLATION . -For example, suppose that you have a downloadable font called Garamond, -and also a downloadable font called Garamond-Outline -which depends on Garamond -(typically it would be defined to copy Garamond's font dictionary, -and change the PaintType), -then it is necessary for Garamond to appear before Garamond-Outline -in the PostScript document. +This section gives a summary of the above explanations; it can serve +as a step-by-step font installation guide for +.BR grops . . -.B grops -will handle this automatically -provided that the downloadable font file for Garamond-Outline -indicates its dependence on Garamond by means of -the Document Structuring Conventions, -for example by beginning with the following lines +.ds BU \[bu]\ \ \" +.de LI +.IP "" 4 +\h'-\w'\*[BU]'u'\*[BU]\c +.. +.LI +Convert your font to something groff understands. +. +This is either a PostScript Type\~1 font in PFA format or a +PostScript Type\~42 font, together with an AFM file. . .IP -.B -%!PS-Adobe-3.0 Resource-Font -.br -.B -%%DocumentNeededResources: font Garamond -.br -.B -%%EndComments -.br -.B -%%IncludeResource: font Garamond +The very first characters in a PFA file look like this: . -.LP -In this case both Garamond and Garamond-Outline would need to be listed -in the -.B download -file. +.RS +.IP +.B %!PS-AdobeFont-1.0: +.RE . -A downloadable font should not include its own name in a -.B %%Document\%Supplied\%Resources -comment. +.IP +A PFB file has this also in the first line, but the string is +preceded with some binary bytes. . -.LP -.B grops -will not interpret -.B %%Document\%Fonts -comments. +.IP +The very first characters in a Type\~42 font file look like this: . -The -.BR %%Document\%Needed\%Resources , -.BR %%Document\%Supplied\%Resources , -.BR %%Include\%Resource , -.BR %%Begin\%Resource , +.RS +.IP +.B %!PS-TrueTypeFont +.RE +. +.IP +This is a wrapper format for TrueType fonts. +. +Old PS printers might not support it (this is, they don't have a +built-in TrueType font interpreter). +. +.IP +If your font is in PFB format (such fonts normally have `.pfb' as +the file extension), you might use groff's +.BR \%pfbtops (@MAN1EXT@) +program to convert it to PFA. +. +For TrueType fonts, try +.B ttftot42 +or +.BR fontforge . +For all other font formats use +.B fontforge +which can convert most outline font formats. +. +.LI +Convert the AFM file to a groff font description file with the +.BR \%afmtodit (@MAN1EXT@) +program. +. +An example call is +. +.RS +.IP +afmtodit Foo-Bar-Bold.afm textmap FBB +.RE +. +.IP +which converts the metric file `Foo-Bar-Bold.afm' to the groff +font `FBB'. +. +If you have a font family which comes with normal, bold, italic, +and bold italic faces, it is recommended to use the letters +.BR R , +.BR B , +.BR I , and -.BR %%End\%Resource -comments -(or possibly the old -.BR %%Document\%Needed\%Fonts , -.BR %%Document\%Supplied\%Fonts , -.BR %%Include\%Font , -.BR %%Begin\%Font , +.BR BI , +respectively, as postfixes in the groff font names to make groff's +`.fam' request work. +. +An example is groff's built-in Times-Roman font: The font family name +is +.BR T , +and the groff font names are +.BR TR , +.BR TB , +.BR TI , and -.BR %%End\%Font -comments) -should be used. +.BR TBI . . +.LI +Install both the groff font description files and the fonts in a +`devps' subdirectory of the font path which groff finds. . -.SS Encapsulated PostScript -.B grops -itself doesn't emit bounding box information. +See the +.B ENVIRONMENT +section in the +.BR troff (@MAN1EXT@) +man page which lists the actual value of the font path. +. +Note that groff doesn't use the AFM files (but it is a good idea to +store them anyway). . -With the help of GhostScript the following commands will produce an -encapsulated PS file -.B foo.eps -from input file -.BR foo : +.LI +Register all fonts which must be downloaded to the printer in the +`devps/download' file. . +Only the first occurrence of this file in the font path is read. +. +This means that you should copy the default `download' file to the +first directory in your font path and add your fonts there. +. +To continue the above example we assume that the PS font name for +Foo-Bar-Bold.pfa is `XY-Foo-Bar-Bold' (the PS font name is stored in the +.B internalname +field in the `FBB' file), thus the following line should be added to +`download'. +. +.RS .IP -.B -groff -P-b16 foo > foo.ps -.br -.B -gs -dNOPAUSE -sDEVICE=bbox -- foo.ps 2> foo.bbox -.br -.B -cat foo.ps | sed \-e '/%%Orientation/rfoo.bbx' > foo.eps -.br -.B -rm foo.bbx -.br +.B XY-Foo-Bar-Bold Foo-Bar-Bold.pfa . +.RE . . -.SS TrueType fonts -TrueType fonts can be used with -.B grops -if converted first to -.B "Type 42" -format, an especial PostScript wrapper equivalent to the -PFA format mentioned in -.BR pfbtops (@MAN1EXT@). -There are several different methods to generate a type42 -wrapper and most of them involve the use of a PostScript -interpreter such as Ghostscript \(em see -.BR gs (1). -Yet, the easiest method involves the use of the application -.BR ttftot42 . -This program uses -.BR freetype (3) -(version 1.3.1) to generate type42 -font wrappers and well-formed AFM files that can be fed to -the -.BR afmtodit (@MAN1EXT@) -script to create appropriate metric files. -The resulting font wrappers should be added to the -.B download -file. -.B ttftot42 -source code can be downloaded from -.URL ftp://\:www.giga.or.at/\:pub/\:nih/\:ttftot42/ \ - ftp://\:www.giga.or.at/\:pub/\:nih/\:ttftot42/ . +.SH OLD FONTS +. +groff versions 1.19.2 and earlier contain a slightly different set of +the 35 Adobe core fonts; the difference is mainly the lack of the `Euro' +glyph and a reduced set of kerning pairs. +. +For backwards compatibility, these old fonts are installed also in the +. +.IP +.BR @OLDFONTDIR@/devps +. +.LP +directory. +. +.LP +To use them, make sure that +.B grops +finds the fonts before the default system fonts (with the same names): +Either add command line option +.B \-F +to +.B grops +. +.IP +.B groff \-Tps \-P\-F \-P@OLDFONTDIR@ .\|.\|. +. +.LP +or add the directory to groff's font path environment variable +. +.IP +.B GROFF_FONT_PATH=@OLDFONTDIR@ . . .SH ENVIRONMENT +. .TP .SM .B GROPS_PROLOGUE @@ -1096,7 +1355,7 @@ If this is set to .IR foo , then .B grops -will use the file +uses the file .I foo (in the font path) instead of the default prologue file .BR prologue . @@ -1106,7 +1365,22 @@ The option overrides this environment variable. . . +.TP +.SM +.B GROFF_FONT_PATH +A list of directories in which to search for the +.BI dev name +directory in addition to the default ones. +. +See +.BR @g@troff (@MAN1EXT@) +and +.BR \%groff_font (@MAN5EXT@) +for more details. +. +. .SH FILES +. .Tp \w'\fB@FONTDIR@/devps/download'u+2n .B @FONTDIR@/devps/DESC Device description file. @@ -1142,7 +1416,7 @@ automatically loaded by .TP .B @MACRODIR@/psold.tmac Macros to disable use of characters not present in older -PostScript printers (e.g. `eth' or `thorn'). +PostScript printers (e.g., `eth' or `thorn'). . .TP .BI /tmp/grops XXXXXX @@ -1150,20 +1424,21 @@ Temporary file. . . .SH "SEE ALSO" -.BR afmtodit (@MAN1EXT@), +. +.BR \%afmtodit (@MAN1EXT@), .BR groff (@MAN1EXT@), .BR @g@troff (@MAN1EXT@), -.BR pfbtops (@MAN1EXT@), -.BR groff_out (@MAN5EXT@), -.BR groff_font (@MAN5EXT@), -.BR groff_char (@MAN7EXT@), -.BR groff_tmac (@MAN5EXT@) +.BR \%pfbtops (@MAN1EXT@), +.BR \%groff_out (@MAN5EXT@), +.BR \%groff_font (@MAN5EXT@), +.BR \%groff_char (@MAN7EXT@), +.BR \%groff_tmac (@MAN5EXT@) . -.PP -.URL "http://\:partners.adobe.com/\:public/\:developer/\:en/\:ps/\:5001.DSC_Spec.pdf" \ - "PostScript Language Document Structuring Conventions Specification" +.LP +.UR http://\:partners.adobe.com/\:public/\:developer/\:en/\:ps/\:5001.DSC_Spec.pdf +PostScript Language Document Structuring Conventions Specification +.UE . -.cp \n[grops_C] . .\" Local Variables: .\" mode: nroff diff --git a/contrib/groff/src/devices/grops/ps.cpp b/contrib/groff/src/devices/grops/ps.cpp index b6a54032c9..37fd4efae4 100644 --- a/contrib/groff/src/devices/grops/ps.cpp +++ b/contrib/groff/src/devices/grops/ps.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005, + 2006, 2007, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,22 +8,21 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ /* * PostScript documentation: * http://www.adobe.com/products/postscript/pdfs/PLRM.pdf - * http://partners.adobe.com/asn/developer/pdfs/tn/5001.DSC_Spec.pdf + * http://partners.adobe.com/public/developer/en/ps/5001.DSC_Spec.pdf */ #include "driver.h" @@ -523,7 +523,7 @@ class ps_printer : public printer { FILE *tempfp; ps_output out; int res; - int space_char_index; + glyph *space_glyph; int pages_output; int paper_length; int equalise_spaces; @@ -560,9 +560,9 @@ class ps_printer : public printer { void flush_sbuf(); void set_style(const style &); - void set_space_code(unsigned char c); + void set_space_code(unsigned char); int set_encoding_index(ps_font *); - subencoding *set_subencoding(font *, int, unsigned char *); + subencoding *set_subencoding(font *, glyph *, unsigned char *); char *get_subfont(subencoding *, const char *); void do_exec(char *, const environment *); void do_import(char *, const environment *); @@ -577,7 +577,7 @@ class ps_printer : public printer { void encode_subfont(subencoding *); void define_encoding(const char *, int); void reencode_font(ps_font *); - void set_color(color *c, int fill = 0); + void set_color(color *, int = 0); const char *media_name(); int media_width(); @@ -587,12 +587,11 @@ class ps_printer : public printer { public: ps_printer(double); ~ps_printer(); - void set_char(int i, font *f, const environment *env, int w, - const char *name); - void draw(int code, int *p, int np, const environment *env); + void set_char(glyph *, font *, const environment *, int, const char *); + void draw(int, int *, int, const environment *); void begin_page(int); void end_page(int); - void special(char *arg, const environment *env, char type); + void special(char *, const environment *, char); font *make_font(const char *); void end_of_line(); }; @@ -630,7 +629,7 @@ ps_printer::ps_printer(double pl) } res = r; out.set_fixed_point(point); - space_char_index = font::name_to_index("space"); + space_glyph = name_to_glyph("space"); if (pl == 0) paper_length = font::paperlength; else @@ -656,9 +655,10 @@ int ps_printer::set_encoding_index(ps_font *f) return f->encoding_index = next_encoding_index++; } -subencoding *ps_printer::set_subencoding(font *f, int i, unsigned char *codep) +subencoding *ps_printer::set_subencoding(font *f, glyph *g, + unsigned char *codep) { - unsigned int idx = f->get_code(i); + unsigned int idx = f->get_code(g); *codep = idx % 256; unsigned int num = idx >> 8; if (num == 0) @@ -670,7 +670,7 @@ subencoding *ps_printer::set_subencoding(font *f, int i, unsigned char *codep) if (p == 0) p = subencodings = new subencoding(f, num, next_subencoding_index++, subencodings); - p->glyphs[*codep] = f->get_special_device_encoding(i); + p->glyphs[*codep] = f->get_special_device_encoding(g); return p; } @@ -679,19 +679,19 @@ char *ps_printer::get_subfont(subencoding *sub, const char *stem) assert(sub != 0); if (!sub->subfont) { char *tem = new char[strlen(stem) + 2 + INT_DIGITS + 1]; - sprintf(tem, "%s@@%d", stem, next_subencoding_index); + sprintf(tem, "%s@@%d", stem, sub->idx); sub->subfont = tem; } return sub->subfont; } -void ps_printer::set_char(int i, font *f, const environment *env, int w, +void ps_printer::set_char(glyph *g, font *f, const environment *env, int w, const char *) { - if (i == space_char_index || invis_count > 0) + if (g == space_glyph || invis_count > 0) return; unsigned char code; - subencoding *sub = set_subencoding(f, i, &code); + subencoding *sub = set_subencoding(f, g, &code); style sty(f, sub, env->size, env->height, env->slant); if (sty.slant != 0) { if (sty.slant > 80 || sty.slant < -80) { @@ -720,8 +720,8 @@ void ps_printer::set_char(int i, font *f, const environment *env, int w, if (sbuf_len < SBUF_SIZE - 1 && env->hpos >= sbuf_end_hpos && (sbuf_kern == 0 || sbuf_end_hpos - sbuf_kern != env->hpos)) { if (sbuf_space_code < 0) { - if (f->contains(space_char_index)) { - sbuf_space_code = f->get_code(space_char_index); + if (f->contains(space_glyph) && !sub) { + sbuf_space_code = f->get_code(space_glyph); sbuf_space_width = env->hpos - sbuf_end_hpos; sbuf_end_hpos = env->hpos + w + sbuf_kern; sbuf[sbuf_len++] = sbuf_space_code; @@ -998,7 +998,7 @@ void ps_printer::flush_sbuf() } } if (sbuf_space_code >= 0) { - int w = sbuf_style.f->get_width(space_char_index, sbuf_style.point_size); + int w = sbuf_style.f->get_width(space_glyph, sbuf_style.point_size); if (w + sbuf_kern != sbuf_space_width) { if (sbuf_space_code != output_space_code) { set_space_code(sbuf_space_code); @@ -1590,10 +1590,9 @@ void ps_printer::do_exec(char *arg, const environment *env) error("missing argument to X exec command"); return; } - if (!check_line_lengths(arg)) { - error("lines in X exec command must not be more than 255 characters long"); - return; - } + if (!check_line_lengths(arg)) + warning("lines in X exec command should" + " not be more than 255 characters long"); out.put_fix_number(env->hpos) .put_fix_number(env->vpos) .put_symbol("EBEGIN") @@ -1640,10 +1639,9 @@ void ps_printer::do_def(char *arg, const environment *) flush_sbuf(); while (csspace(*arg)) arg++; - if (!check_line_lengths(arg)) { - error("lines in X def command must not be more than 255 characters long"); - return; - } + if (!check_line_lengths(arg)) + warning("lines in X def command should" + " not be more than 255 characters long"); defs += arg; if (*arg != '\0' && strchr(arg, '\0')[-1] != '\n') defs += '\n'; @@ -1668,10 +1666,9 @@ void ps_printer::do_mdef(char *arg, const environment *) arg = p; while (csspace(*arg)) arg++; - if (!check_line_lengths(arg)) { - error("lines in X mdef command must not be more than 255 characters long"); - return; - } + if (!check_line_lengths(arg)) + warning("lines in X mdef command should" + " not be more than 255 characters long"); defs += arg; if (*arg != '\0' && strchr(arg, '\0')[-1] != '\n') defs += '\n'; diff --git a/contrib/groff/src/devices/grops/ps.h b/contrib/groff/src/devices/grops/ps.h index fabf47dbfc..85a06fece1 100644 --- a/contrib/groff/src/devices/grops/ps.h +++ b/contrib/groff/src/devices/grops/ps.h @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2003 +/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2003, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ class ps_output { public: diff --git a/contrib/groff/src/devices/grops/psrm.cpp b/contrib/groff/src/devices/grops/psrm.cpp index f1894f593c..b5c7e3b2d4 100644 --- a/contrib/groff/src/devices/grops/psrm.cpp +++ b/contrib/groff/src/devices/grops/psrm.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, + 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "driver.h" #include "stringclass.h" diff --git a/contrib/groff/src/devices/grotty/grotty.man b/contrib/groff/src/devices/grotty/grotty.man index 6c56457044..30510eab5e 100644 --- a/contrib/groff/src/devices/grotty/grotty.man +++ b/contrib/groff/src/devices/grotty/grotty.man @@ -1,5 +1,6 @@ .ig -Copyright (C) 1989-2000, 2001, 2002, 2003 Free Software Foundation, Inc. +Copyright (C) 1989-2000, 2001, 2002, 2003, 2005, 2006, 2009 + Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice @@ -21,6 +22,7 @@ the original English. .cp 0 . .TH GROTTY @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@" +. .SH NAME grotty \- groff driver for typewriter-like devices . @@ -41,6 +43,7 @@ option and its parameter. . . .SH DESCRIPTION +. .B grotty translates the output of GNU .B troff @@ -62,21 +65,23 @@ and on EBCDIC based hosts. If no files are given, .B grotty -will read the standard input. +reads the standard input. A filename of .B \- -will also cause +also causes .B grotty to read the standard input. Output is written to the standard output. +. .LP By default, .B grotty emits SGR escape sequences (from ISO 6429, also called ANSI color escapes) to change text attributes (bold, italic, colors). -This makes it possible to have eight different \M[green]background\M[] -and \m[red]foreground\m[] colors; additionally, bold and italic +This makes it possible to have eight different background and +foreground colors; additionally, bold and italic attributes can be used \f[BI]at the same time\f[] (by using the BI font). +. .LP The following colors are defined in .BR tty.tmac : @@ -84,6 +89,7 @@ black, white, red, green, blue, yellow, magenta, cyan. Unknown colors are mapped to the default color (which is dependent on the settings of the terminal; in most cases, this is black for the foreground and white for the background). +. .LP Use the .B \-c @@ -103,6 +109,7 @@ At the same time, color output is disabled. The same effect can be achieved by setting either the .B GROFF_NO_SGR environment variable or using the `sgr' X command (see below). +. .LP For SGR support, it is necessary to use the .B \-R @@ -121,6 +128,7 @@ in particular, either add to the .B $PAGER environment variable, e.g.\& +. .RS .LP .B PAGER="/usr/bin/less -R" @@ -128,6 +136,7 @@ environment variable, e.g.\& .B export PAGER .RE .LP +. or use the .B \-P option of @@ -136,6 +145,12 @@ to set the pager executable and its options, or modify the configuration file of .B man in a similar fashion. +Note that with some +.BR man (1) +versions, you have to use the +.B $MANPAGER +environment variable instead. +. .LP .BR grotty 's old output format can be displayed on a terminal @@ -161,22 +176,25 @@ There is no need to filter the output through since .B grotty never outputs reverse line feeds. +. .LP The font description file may contain a command +. .IP .BI internalname\ n .LP +. where .I n is a decimal integer. If the 01 bit in .I n is set, -then the font will be treated as an italic font; +then the font is treated as an italic font; if the 02 bit is set, -then it will be treated as a bold font. +then it is treated as a bold font. The code field in the font description field gives the -code which will be used to output the character. +code which is used to output the character. This code can also be used in the .B \[rs]N escape sequence in @@ -184,6 +202,7 @@ escape sequence in . . .SH OPTIONS +. .TP .B \-b Suppress the use of overstriking for bold characters. @@ -212,7 +231,7 @@ Ignore all commands. Without this .B grotty -will render +renders .B \[rs]D'l\|.\|.\|.\&' commands that have at least one zero argument (and so are either horizontal or vertical) @@ -222,11 +241,17 @@ using and .B + characters. +In a similar way, +.B grotty +handles +.B \[rs]D'p\|.\|.\|.\&' +commands which consist entirely of horizontal and vertical lines. +. . .TP .B \-f Use form feeds in the output. -A form feed will be output at the end of each page that has no output +A form feed is output at the end of each page that has no output on its last line. . .TP @@ -241,6 +266,7 @@ is the name of the device, usually .BR utf8 , or .BR cp1047 . +. .TP .B \-h Use horizontal tabs in the output. @@ -289,10 +315,12 @@ Print the version number. . . .SH USAGE +. .B grotty understands a single X command produced using the .B \[rs]X escape sequence. +. .TP .BI \[rs]X'tty:\ sgr\ n ' If @@ -302,14 +330,31 @@ use the old drawing scheme for bold and underline. . . .SH ENVIRONMENT +. .TP +.SM .B GROFF_NO_SGR If set, the old drawing scheme for bold and underline (using the backspace character) is active. Colors are disabled. . . +.TP +.SM +.B GROFF_FONT_PATH +A list of directories in which to search for the +.BI dev name +directory in addition to the default ones. +. +See +.BR @g@troff (@MAN1EXT@) +and +.BR \%groff_font (@MAN5EXT@) +for more details. +. +. .SH FILES +. .TP .B @FONTDIR@/devascii/DESC Device description file for @@ -375,26 +420,32 @@ Macros for use with .B @MACRODIR@/tty-char.tmac Additional klugdey character definitions for use with .BR grotty . +. .LP Note that on EBCDIC hosts, only files for the .B cp1047 -device will be installed. +device is installed. . . .SH BUGS +. .LP .B grotty is intended only for simple documents. +. .LP There is no support for fractional horizontal or vertical motions. +. .LP There is no support for .B \[rs]D commands other than horizontal and vertical lines. +. .LP Characters above the first line (ie with a vertical position of\~0) cannot be printed. +. .LP Color handling is different compared to .BR grops (@MAN1EXT@). @@ -406,6 +457,7 @@ cell, affecting all subsequent operations. . . .SH "SEE ALSO" +. .BR groff (@MAN1EXT@), .BR @g@troff (@MAN1EXT@), .BR groff_out (@MAN5EXT@), diff --git a/contrib/groff/src/devices/grotty/tty.cpp b/contrib/groff/src/devices/grotty/tty.cpp index a959461f92..9b824097f0 100644 --- a/contrib/groff/src/devices/grotty/tty.cpp +++ b/contrib/groff/src/devices/grotty/tty.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2005 +/* Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "driver.h" #include "device.h" @@ -42,6 +41,9 @@ extern "C" const char *Version_string; #define TAB_WIDTH 8 +// A character of the output device fits in a 32-bit word. +typedef unsigned int output_character; + static int horizontal_tab_flag = 0; static int form_feed_flag = 0; static int bold_flag_option = 1; @@ -151,10 +153,10 @@ void tty_font::handle_x_command(int argc, const char **argv) } #endif -class glyph { - static glyph *free_list; +class tty_glyph { + static tty_glyph *free_list; public: - glyph *next; + tty_glyph *next; int w; int hpos; unsigned int code; @@ -168,34 +170,34 @@ public: return mode & (VDRAW_MODE|HDRAW_MODE|CU_MODE|COLOR_CHANGE); } }; -glyph *glyph::free_list = 0; +tty_glyph *tty_glyph::free_list = 0; -void *glyph::operator new(size_t) +void *tty_glyph::operator new(size_t) { if (!free_list) { const int BLOCK = 1024; - free_list = (glyph *)new char[sizeof(glyph) * BLOCK]; + free_list = (tty_glyph *)new char[sizeof(tty_glyph) * BLOCK]; for (int i = 0; i < BLOCK - 1; i++) free_list[i].next = free_list + i + 1; free_list[BLOCK - 1].next = 0; } - glyph *p = free_list; + tty_glyph *p = free_list; free_list = free_list->next; p->next = 0; return p; } -void glyph::operator delete(void *p) +void tty_glyph::operator delete(void *p) { if (p) { - ((glyph *)p)->next = free_list; - free_list = (glyph *)p; + ((tty_glyph *)p)->next = free_list; + free_list = (tty_glyph *)p; } } class tty_printer : public printer { int is_utf8; - glyph **lines; + tty_glyph **lines; int nlines; int cached_v; int cached_vpos; @@ -206,24 +208,28 @@ class tty_printer : public printer { int cu_flag; PTABLE(schar) tty_colors; void make_underline(int); - void make_bold(unsigned int, int); - schar color_to_idx(color *col); - void add_char(unsigned int, int, int, int, color *, color *, unsigned char); + void make_bold(output_character, int); + schar color_to_idx(color *); + void add_char(output_character, int, int, int, color *, color *, + unsigned char); char *make_rgb_string(unsigned int, unsigned int, unsigned int); int tty_color(unsigned int, unsigned int, unsigned int, schar *, schar = DEFAULT_COLOR_IDX); + void line(int, int, int, int, color *, color *); + void draw_line(int *, int, const environment *); + void draw_polygon(int *, int, const environment *); public: - tty_printer(const char *device); + tty_printer(const char *); ~tty_printer(); - void set_char(int, font *, const environment *, int, const char *name); - void draw(int code, int *p, int np, const environment *env); - void special(char *arg, const environment *env, char type); - void change_color(const environment * const env); - void change_fill_color(const environment * const env); - void put_char(unsigned int); + void set_char(glyph *, font *, const environment *, int, const char *); + void draw(int, int *, int, const environment *); + void special(char *, const environment *, char); + void change_color(const environment * const); + void change_fill_color(const environment * const); + void put_char(output_character); void put_color(schar, int); void begin_page(int) { } - void end_page(int page_length); + void end_page(int); font *make_font(const char *); }; @@ -289,7 +295,7 @@ tty_printer::tty_printer(const char *dev) : cached_v(0) (void)tty_color(color::MAX_COLOR_VAL, 0, color::MAX_COLOR_VAL, &dummy, 5); (void)tty_color(0, color::MAX_COLOR_VAL, color::MAX_COLOR_VAL, &dummy, 6); nlines = 66; - lines = new glyph *[nlines]; + lines = new tty_glyph *[nlines]; for (int i = 0; i < nlines; i++) lines[i] = 0; cu_flag = 0; @@ -326,7 +332,7 @@ void tty_printer::make_underline(int w) } } -void tty_printer::make_bold(unsigned int c, int w) +void tty_printer::make_bold(output_character c, int w) { if (old_drawing_scheme) { if (!w) @@ -360,18 +366,18 @@ schar tty_printer::color_to_idx(color *col) return idx; } -void tty_printer::set_char(int i, font *f, const environment *env, +void tty_printer::set_char(glyph *g, font *f, const environment *env, int w, const char *) { if (w % font::hor != 0) fatal("width of character not a multiple of horizontal resolution"); - add_char(f->get_code(i), w, + add_char(f->get_code(g), w, env->hpos, env->vpos, env->col, env->fill, ((tty_font *)f)->get_mode()); } -void tty_printer::add_char(unsigned int c, int w, +void tty_printer::add_char(output_character c, int w, int h, int v, color *fore, color *back, unsigned char mode) @@ -394,9 +400,9 @@ void tty_printer::add_char(unsigned int c, int w, fatal("vertical position not a multiple of vertical resolution"); vpos = v / font::vert; if (vpos > nlines) { - glyph **old_lines = lines; - lines = new glyph *[vpos + 1]; - memcpy(lines, old_lines, nlines * sizeof(glyph *)); + tty_glyph **old_lines = lines; + lines = new tty_glyph *[vpos + 1]; + memcpy(lines, old_lines, nlines * sizeof(tty_glyph *)); for (int i = nlines; i <= vpos; i++) lines[i] = 0; a_delete old_lines; @@ -411,7 +417,7 @@ void tty_printer::add_char(unsigned int c, int w, cached_v = v; cached_vpos = vpos; } - glyph *g = new glyph; + tty_glyph *g = new tty_glyph; g->w = w; g->hpos = hpos; g->code = c; @@ -424,7 +430,7 @@ void tty_printer::add_char(unsigned int c, int w, // HDRAW characters before VDRAW characters before normal characters // at each hpos, and otherwise in order of occurrence. - glyph **pp; + tty_glyph **pp; for (pp = lines + (vpos - 1); *pp; pp = &(*pp)->next) if ((*pp)->hpos < hpos || ((*pp)->hpos == hpos && (*pp)->order() >= g->order())) @@ -486,67 +492,116 @@ void tty_printer::change_fill_color(const environment * const env) void tty_printer::draw(int code, int *p, int np, const environment *env) { - if (code != 'l' || !draw_flag) + if (!draw_flag) + return; + if (code == 'l') + draw_line(p, np, env); + if (code == 'p') + draw_polygon(p, np, env); +} + +void tty_printer::draw_polygon(int *p, int np, const environment *env) +{ + if (np & 1) { + error("even number of arguments required for polygon"); + return; + } + if (np == 0) { + error("no arguments for polygon"); + return; + } + // We only draw polygons which consist entirely of horizontal and + // vertical lines. + int hpos = 0; + int vpos = 0; + for (int i = 0; i < np; i += 2) { + if (!(p[i] == 0 || p[i + 1] == 0)) + return; + hpos += p[i]; + vpos += p[i + 1]; + } + if (!(hpos == 0 || vpos == 0)) return; + int start_hpos = env->hpos; + int start_vpos = env->vpos; + hpos = start_hpos; + vpos = start_vpos; + for (int i = 0; i < np; i += 2) { + line(hpos, vpos, p[i], p[i + 1], env->col, env->fill); + hpos += p[i]; + vpos += p[i + 1]; + } + line(hpos, vpos, start_hpos - hpos, start_vpos - vpos, + env->col, env->fill); +} + +void tty_printer::draw_line(int *p, int np, const environment *env) +{ if (np != 2) { error("2 arguments required for line"); return; } - if (p[0] == 0) { + line(env->hpos, env->vpos, p[0], p[1], env->col, env->fill); +} + +void tty_printer::line(int hpos, int vpos, int dx, int dy, + color *col, color *fill) +{ + if (dx == 0) { // vertical line - int v = env->vpos; - int len = p[1]; + int v = vpos; + int len = dy; if (len < 0) { v += len; len = -len; } - if (len >= 0 && len <= font::vert) - add_char(vline_char, font::hor, env->hpos, v, env->col, env->fill, + if (len == 0) + add_char(vline_char, font::hor, hpos, v, col, fill, VDRAW_MODE|START_LINE|END_LINE); else { - add_char(vline_char, font::hor, env->hpos, v, env->col, env->fill, + add_char(vline_char, font::hor, hpos, v, col, fill, VDRAW_MODE|START_LINE); len -= font::vert; v += font::vert; while (len > 0) { - add_char(vline_char, font::hor, env->hpos, v, env->col, env->fill, + add_char(vline_char, font::hor, hpos, v, col, fill, VDRAW_MODE|START_LINE|END_LINE); len -= font::vert; v += font::vert; } - add_char(vline_char, font::hor, env->hpos, v, env->col, env->fill, + add_char(vline_char, font::hor, hpos, v, col, fill, VDRAW_MODE|END_LINE); } } - if (p[1] == 0) { + if (dy == 0) { // horizontal line - int h = env->hpos; - int len = p[0]; + int h = hpos; + int len = dx; if (len < 0) { h += len; len = -len; } - if (len >= 0 && len <= font::hor) - add_char(hline_char, font::hor, h, env->vpos, env->col, env->fill, + if (len == 0) + add_char(hline_char, font::hor, h, vpos, col, fill, HDRAW_MODE|START_LINE|END_LINE); else { - add_char(hline_char, font::hor, h, env->vpos, env->col, env->fill, + add_char(hline_char, font::hor, h, vpos, col, fill, HDRAW_MODE|START_LINE); len -= font::hor; h += font::hor; while (len > 0) { - add_char(hline_char, font::hor, h, env->vpos, env->col, env->fill, + add_char(hline_char, font::hor, h, vpos, col, fill, HDRAW_MODE|START_LINE|END_LINE); len -= font::hor; h += font::hor; } - add_char(hline_char, font::hor, h, env->vpos, env->col, env->fill, + add_char(hline_char, font::hor, h, vpos, col, fill, HDRAW_MODE|END_LINE); } } } -void tty_printer::put_char(unsigned int wc) +void tty_printer::put_char(output_character wc) { if (is_utf8 && wc >= 0x80) { char buf[6 + 1]; @@ -610,7 +665,7 @@ void tty_printer::put_color(schar color_index, int back) // ` ' = 0, ` ' = 1, `|' = 2, `|' = 3 // | | -static int crossings[4*4] = { +static output_character crossings[4*4] = { 0x0000, 0x2577, 0x2575, 0x2502, 0x2576, 0x250C, 0x2514, 0x251C, 0x2574, 0x2510, 0x2518, 0x2524, @@ -632,7 +687,7 @@ void tty_printer::end_page(int page_length) do { --last_line; while (lines[last_line]) { - glyph *tem = lines[last_line]; + tty_glyph *tem = lines[last_line]; lines[last_line] = tem->next; delete tem; } @@ -640,17 +695,17 @@ void tty_printer::end_page(int page_length) } #endif for (int i = 0; i < last_line; i++) { - glyph *p = lines[i]; + tty_glyph *p = lines[i]; lines[i] = 0; - glyph *g = 0; + tty_glyph *g = 0; while (p) { - glyph *tem = p->next; + tty_glyph *tem = p->next; p->next = g; g = p; p = tem; } int hpos = 0; - glyph *nextp; + tty_glyph *nextp; curr_fore_idx = DEFAULT_COLOR_IDX; curr_back_idx = DEFAULT_COLOR_IDX; is_underline = 0; @@ -658,7 +713,7 @@ void tty_printer::end_page(int page_length) for (p = g; p; delete p, p = nextp) { nextp = p->next; if (p->mode & CU_MODE) { - cu_flag = p->code; + cu_flag = (p->code != 0); continue; } if (nextp && p->hpos == nextp->hpos) { diff --git a/contrib/groff/src/include/assert.h b/contrib/groff/src/include/assert.h index 76b3b203a9..2127a4218f 100644 --- a/contrib/groff/src/include/assert.h +++ b/contrib/groff/src/include/assert.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #ifndef ASSERT_H #define ASSERT_H diff --git a/contrib/groff/src/include/cmap.h b/contrib/groff/src/include/cmap.h index d786829d2f..525d22e0a4 100644 --- a/contrib/groff/src/include/cmap.h +++ b/contrib/groff/src/include/cmap.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #ifndef UCHAR_MAX #define UCHAR_MAX 255 diff --git a/contrib/groff/src/include/color.h b/contrib/groff/src/include/color.h index 52f97c6458..90066a9633 100644 --- a/contrib/groff/src/include/color.h +++ b/contrib/groff/src/include/color.h @@ -2,26 +2,25 @@ /* /src/include/color.h -Last update: 14 Feb 2003 +Last update: 5 Jan 2009 -Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. +Copyright (C) 2001, 2002, 2003, 2009 Free Software Foundation, Inc. Written by Gaius Mulley This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include #include "symbol.h" diff --git a/contrib/groff/src/include/config.hin b/contrib/groff/src/include/config.hin index 5f871aaa95..08e6001533 100644 --- a/contrib/groff/src/include/config.hin +++ b/contrib/groff/src/include/config.hin @@ -12,6 +12,10 @@ /* Define if you have a C++ . */ #undef HAVE_CC_OSFCN_H +/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you + don't. */ +#undef HAVE_DECL_GETC_UNLOCKED + /* Define to 1 if you have the declaration of `sys_siglist', and to 0 if you don't. */ #undef HAVE_DECL_SYS_SIGLIST @@ -34,6 +38,9 @@ /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY +/* Define if you have the iconv() function. */ +#undef HAVE_ICONV + /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H @@ -43,6 +50,9 @@ /* Define to 1 if you have the `kill' function. */ #undef HAVE_KILL +/* Define if you have and nl_langinfo(CODESET). */ +#undef HAVE_LANGINFO_CODESET + /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H @@ -73,6 +83,9 @@ /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF +/* Define to 1 if you have the header file. */ +#undef HAVE_STDDEF_H + /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H @@ -127,6 +140,9 @@ /* Define to 1 if you have the `vsnprintf' function. */ #undef HAVE_VSNPRINTF +/* Define as const if the declaration of iconv() needs const. */ +#undef ICONV_CONST + /* Define if the host's encoding is EBCDIC. */ #undef IS_EBCDIC_HOST @@ -203,6 +219,10 @@ core image was produced for a process that was terminated by a signal. */ #undef WCOREFLAG +/* Define to 1 if your processor stores words with the most significant byte + first (like Motorola and SPARC, unlike Intel and VAX). */ +#undef WORDS_BIGENDIAN + /* Define to 1 if the X Window System is missing or not being used. */ #undef X_DISPLAY_MISSING diff --git a/contrib/groff/src/include/cset.h b/contrib/groff/src/include/cset.h index a241c00280..b76d86b60a 100644 --- a/contrib/groff/src/include/cset.h +++ b/contrib/groff/src/include/cset.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #ifdef HAVE_CC_LIMITS_H #include diff --git a/contrib/groff/src/include/device.h b/contrib/groff/src/include/device.h index ecafc26c3c..16bb3530ff 100644 --- a/contrib/groff/src/include/device.h +++ b/contrib/groff/src/include/device.h @@ -1,21 +1,26 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2006, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ +// The target device. Once initialized, the device doesn't change during +// the entire program run. Sample devices are `ps' (for Postscript), `html' +// (for HTML), and `ascii', `latin1', `utf8' for TTY output. extern const char *device; + +// end of device.h diff --git a/contrib/groff/src/include/driver.h b/contrib/groff/src/include/driver.h index f6804efffb..0e783b5bf0 100644 --- a/contrib/groff/src/include/driver.h +++ b/contrib/groff/src/include/driver.h @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2003 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2003, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" diff --git a/contrib/groff/src/include/errarg.h b/contrib/groff/src/include/errarg.h index 1aa191a4e4..0dd054576a 100644 --- a/contrib/groff/src/include/errarg.h +++ b/contrib/groff/src/include/errarg.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ class errarg { enum { EMPTY, STRING, CHAR, INTEGER, UNSIGNED_INTEGER, DOUBLE } type; diff --git a/contrib/groff/src/include/error.h b/contrib/groff/src/include/error.h index b9d48d0a72..14194c259d 100644 --- a/contrib/groff/src/include/error.h +++ b/contrib/groff/src/include/error.h @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2003, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2003, 2004, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ extern void fatal_with_file_and_line(const char *filename, int lineno, const char *format, diff --git a/contrib/groff/src/include/font.h b/contrib/groff/src/include/font.h index 3ef4fed458..944250b9c5 100644 --- a/contrib/groff/src/include/font.h +++ b/contrib/groff/src/include/font.h @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2004, 2006, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,118 +7,339 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ -typedef void (*FONT_COMMAND_HANDLER)(const char *, const char *, - const char *, int); +// A function of this type can be registered to define the semantics of +// arbitrary commands in a font DESC file. +typedef void (*FONT_COMMAND_HANDLER)(const char *, // command + const char *, // arg + const char *, // file + int); // lineno +// A glyph is represented by a font-independent `glyph *' pointer. +// The functions name_to_glyph and number_to_glyph return such a pointer. +// +// There are two types of glyphs: +// +// - those with a name, and among these in particular: +// `charNNN' denoting a single `char' in the input character set, +// `uXXXX' denoting a Unicode character, +// +// - those with a number, referring to the the font-dependent glyph with +// the given number. + +// The statically allocated information about a glyph. +// +// This is an abstract class; only its subclass `charinfo' is instantiated. +// `charinfo' exists in two versions: one in roff/troff/input.cpp for troff, +// and one in libs/libgroff/nametoindex.cpp for the preprocessors and the +// postprocessors. +struct glyph { + int index; // A font-independent integer value. + int number; // Glyph number or -1. + friend class character_indexer; +}; + +#define UNDEFINED_GLYPH ((glyph *) NULL) + +// The next three functions exist in two versions: one in +// roff/troff/input.cpp for troff, and one in +// libs/libgroff/nametoindex.cpp for the preprocessors and the +// postprocessors. +extern glyph *name_to_glyph(const char *); // Convert the glyph with + // the given name (arg1) to a `glyph' object. This + // has the same semantics as the groff escape sequence + // \C'name'. If such a `glyph' object does not yet + // exist, a new one is allocated. +extern glyph *number_to_glyph(int); // Convert the font-dependent glyph + // with the given number (in the font) to a `glyph' + // object. This has the same semantics as the groff + // escape sequence \N'number'. If such a `glyph' + // object does not yet exist, a new one is allocated. +extern const char *glyph_to_name(glyph *); // Convert the given glyph + // back to its name. Return NULL if the glyph + // doesn't have a name. +inline int glyph_to_number(glyph *); // Convert the given glyph back to + // its number. Return -1 if it does not designate + // a numbered character. +inline int glyph_to_index(glyph *); // Return the unique index that is + // associated with the given glyph. It is >= 0. + +inline int glyph_to_number(glyph *g) +{ + return g->number; +} + +inline int glyph_to_index(glyph *g) +{ + return g->index; +} + +// Types used in non-public members of `class font'. struct font_kern_list; struct font_char_metric; struct font_widths_cache; +// A `class font' instance represents the relevant information of a font of +// the given device. This includes the set of glyphs represented by the +// font, and metrics for each glyph. class font { public: - enum { + enum { // The valid argument values of `has_ligature'. LIG_ff = 1, LIG_fi = 2, LIG_fl = 4, LIG_ffi = 8, LIG_ffl = 16 - }; - - virtual ~font(); - int contains(int index); - int is_special(); - int get_width(int index, int point_size); - int get_height(int index, int point_size); - int get_depth(int index, int point_size); - int get_space_width(int point_size); - int get_character_type(int index); - int get_kern(int index1, int index2, int point_size); - int get_skew(int index, int point_size, int slant); - int has_ligature(int); - int get_italic_correction(int index, int point_size); - int get_left_italic_correction(int index, int point_size); - int get_subscript_correction(int index, int point_size); - int get_code(int i); - const char *get_special_device_encoding(int index); - const char *get_name(); - const char *get_internal_name(); - const char *get_image_generator(); - - static int scan_papersize(const char *, const char **, double *, double *); - - static font *load_font(const char *, int * = 0, int = 0); - static void command_line_font_dir(const char *path); - static FILE *open_file(const char *name, char **pathp); - static int load_desc(); - static int name_to_index(const char *); - static int number_to_index(int); + }; + + virtual ~font(); // Destructor. + int contains(glyph *); // Return 1 if this font contains the given + // glyph, 0 otherwise. + int is_special(); // Return 1 if this font is special, 0 otherwise. + // See section `Special Fonts' in the info file of + // groff. Used by make_glyph_node(). + int get_width(glyph *, int); // A rectangle represents the shape of the + // given glyph (arg1) at the given point size + // (arg2). Return the horizontal dimension of this + // rectangle. + int get_height(glyph *, int); // A rectangle represents the shape of the + // given glyph (arg1) at the given point size + // (arg2). Return the distance between the base + // line and the top of this rectangle. + // This is often also called the `ascent' of the + // glyph. If the top is above the base line, this + // value is positive. + int get_depth(glyph *, int); // A rectangle represents the shape of the + // given glyph (arg1) at the given point size + // (arg2). Return the distance between the base + // line and the bottom of this rectangle. + // This is often also called the `descent' of the + // glyph. If the bottom is below the base line, + // this value is positive. + int get_space_width(int); // Return the normal width of a space at the + // given point size. + int get_character_type(glyph *); // Return a bit mask describing the + // shape of the given glyph. Bit 0 is set if the + // character has a descender. Bit 1 is set if the + // character has a tall glyph. See groff manual, + // description of \w and the `ct' register. + int get_kern(glyph *, glyph *, int); // Return the kerning between the + // given glyphs (arg1 and arg2), both at the given + // point size (arg3). + int get_skew(glyph *, int, int); // A rectangle represents the shape + // of the given glyph (arg1) at the given point size + // (arg2). For slanted fonts like Times-Italic, the + // optical vertical axis is naturally slanted. The + // natural slant value (measured in degrees; + // positive values mean aslant to the right) is + // specified in the font's description file (see + // member variable SLANT below). In addition to + // this, any font can be artificially slanted. This + // artificial slant value (arg3, measured in + // degrees; positive values mean a slant to the + // right) is specified with the \S escape. + // + // Return the skew value which is the horizontal + // distance between the upper left corner of the + // glyph box and the upper left corner of the glyph + // box thought to be slanted by the sum of the + // natural and artificial slant. It basically means + // how much an accent must be shifted horizontally + // to put it on the optical axis of the glyph. + int has_ligature(int); // Return a non-zero value if this font has + // the given ligature type (one of LIG_ff, LIG_fi, + // etc.), 0 otherwise. + int get_italic_correction(glyph *, int); // If the given glyph (arg1) + // at the given point size (arg2) is followed by an + // unslanted glyph, some horizontal white space may + // need to be inserted in between. See the groff + // manual, description of \/. Return the amount + // (width) of this white space. + int get_left_italic_correction(glyph *, int); // If the given glyph (arg1) + // at the given point size (arg2) is preceded by an + // unslanted roman glyph, some horizontal white + // space may need to be inserted in between. See + // the groff manual, description of \,. Return the + // amount (width) of this white space. + int get_subscript_correction(glyph *, int); // If the given glyph (arg1) + // at the given point size (arg2)is followed by a + // subscript glyph, the horizontal position may need + // to be advanced by some (possibly negative) + // amount. See groff manual, description of \w and + // the `ssc' register. Return this amount. + void set_zoom(int); // Set the font's zoom factor * 1000. Must be a + // non-negative value. + int get_zoom(); // Return the font's zoom factor * 1000. + int get_code(glyph *); // Return the code point in the physical + // font of the given glyph. + const char *get_special_device_encoding(glyph *); // Return special + // device dependent information about the given + // glyph. Return NULL if there is no special + // information. + const char *get_name(); // Return the name of this font. + const char *get_internal_name(); // Return the `internalname' + // attribute of this font. Return NULL if it has + // none. + const char *get_image_generator(); // Return the `image_generator' + // attribute of this font. Return NULL if it has + // none. + static int scan_papersize(const char *, const char **, + double *, double *); // Parse the + // `papersize' attribute in a DESC file (given in + // arg1). Return the name of the size (in arg2), + // and the length and width (in arg3 and arg4). + // Return 1 in case of success, 0 otherwise. + static font *load_font(const char *, int * = 0, int = 0); // Load the + // font description file with the given name (arg1) + // and return it as a `font' class. If arg2 points + // to an integer variable, set it to 1 if the file + // is not found, without emitting an error message. + // If arg2 is NULL, print an error message if the + // file is not found. If arg3 is nonzero, only the + // part of the font description file before the + // `charset' and `kernpairs' sections is loaded. + // Return NULL in case of failure. + static void command_line_font_dir(const char *); // Prepend given + // path (arg1) to the list of directories in which + // to look up fonts. + static FILE *open_file(const char *, char **); // Open a font file + // with the given name (arg1), searching along the + // current font path. If arg2 points to a string + // pointer, set it to the found file name (this + // depends on the device also). Return the opened + // file. If not found, arg2 is unchanged, and NULL + // is returned. + static int load_desc(); // Open the DESC file (depending on the + // device) and initialize some static variables with + // info from there. static FONT_COMMAND_HANDLER - set_unknown_desc_command_handler(FONT_COMMAND_HANDLER); - - static int res; - static int hor; - static int vert; - static int unitwidth; - static int paperwidth; - static int paperlength; + set_unknown_desc_command_handler(FONT_COMMAND_HANDLER); // Register + // a function which defines the semantics of + // arbitrary commands in the font DESC file. + // Now the variables from the DESC file, shared by all fonts. + static int res; // The `res' attribute given in the DESC file. + static int hor; // The `hor' attribute given in the DESC file. + static int vert; // The `vert' attribute given in the DESC file. + static int unitwidth; // The `unitwidth' attribute given in the DESC file. + static int paperwidth; // The `paperwidth' attribute given in the + // DESC file, or derived from the `papersize' + // attribute given in the DESC file. + static int paperlength; // The `paperlength' attribute given in the + // DESC file, or derived from the `papersize' + // attribute given in the DESC file. static const char *papersize; - static int biggestfont; + static int biggestfont; // The `biggestfont' attribute given in the + // DESC file. static int spare2; - static int sizescale; - static int tcommand; - static int unscaled_charwidths; - static int pass_filenames; - static int use_charnames_in_special; - static const char *image_generator; - - static const char **font_name_table; - static const char **style_table; - static const char *family; - static int *sizes; + static int sizescale; // The `sizescale' attribute given in the DESC file. + static int tcommand; // Nonzero if the DESC file has the `tcommand' + // attribute. + static int unscaled_charwidths; // Nonzero if the DESC file has the + // `unscaled_charwidths' attribute. + static int pass_filenames; // Nonzero if the DESC file has the + // `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 + // the DESC file, as a NULL-terminated array of + // strings. + static const char **style_table; // The `styles' attribute given in + // the DESC file, as a NULL-terminated array of + // strings. + static const char *family; // The `family' attribute given in the DESC + // file. + static int *sizes; // The `sizes' attribute given in the DESC file, as + // an array of intervals of the form { lower1, + // upper1, ... lowerN, upperN, 0 }. + private: - unsigned ligatures; - font_kern_list **kern_hash_table; - int space_width; - int *ch_index; + unsigned ligatures; // Bit mask of available ligatures. Used by + // has_ligature(). + font_kern_list **kern_hash_table; // Hash table of kerning pairs. + // 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 zoom; // The font's magnification, multiplied by 1000. + // Used by scale(). A zero value means `no zoom'. + int *ch_index; // Conversion table from font-independent character + // indices to indices for this particular font. int nindices; - font_char_metric *ch; + font_char_metric *ch; // Metrics information for every character in this + // 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; - char *name; - char *internalname; - double slant; - font_widths_cache *widths_cache; - static FONT_COMMAND_HANDLER unknown_desc_command_handler; - - enum { KERN_HASH_TABLE_SIZE = 503 }; - - void add_entry(int index, const font_char_metric &); - void copy_entry(int new_index, int old_index); - void add_kern(int index1, int index2, int amount); - static int hash_kern(int i1, int i2); - void alloc_ch_index(int); + 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. + enum { KERN_HASH_TABLE_SIZE = 503 }; // Size of the hash table of kerning + // pairs. + + // These methods add new characters to the ch_index[] and ch[] arrays. + void add_entry(glyph *, // glyph + const font_char_metric &); // metric + void copy_entry(glyph *, // new_glyph + glyph *); // old_glyph + void alloc_ch_index(int); // index void extend_ch(); void compact(); - static int scale(int w, int pointsize); - static int unit_scale(double *value, char unit); - virtual void handle_unknown_font_command(const char *command, - const char *arg, - const char *file, int lineno); + void add_kern(glyph *, glyph *, int); // Add to the kerning table a + // kerning amount (arg3) between two given glyphs + // (arg1 and arg2). + static int hash_kern(glyph *, glyph *); // Return a hash code for + // the pair of glyphs (arg1 and arg2). + + /* Returns w * pointsize / unitwidth, rounded to the nearest integer. */ + int scale(int w, int pointsize); + static int unit_scale(double *, char); // Convert value in arg1 from the + // given unit (arg2; possible values are `i', `c', + // `p', and `P' as documented in the info file of + // groff, section `Measurements') to inches. Store + // the result in arg1 and return 1. If the unit is + // invalid, return 0. + virtual void handle_unknown_font_command(const char *, // command + const char *, // arg + const char *, // file + int); // lineno + protected: - font(const char *); - int load(int * = 0, int = 0); + font(const char *); // Initialize a font with the given name. + + int load(int * = 0, int = 0); // Load the font description file with the + // given name (in member variable NAME) into this + // object. If arg1 points to an integer variable, + // set it to 1 if the file is not found, without + // emitting an error message. If arg1 is NULL, + // print an error message if the file is not found. + // If arg2 is nonzero, only the part of the font + // description file before the `charset' and + // `kernpairs' sections is loaded. Return NULL in + // case of failure. }; + +// end of font.h diff --git a/contrib/groff/src/include/geometry.h b/contrib/groff/src/include/geometry.h index 1ce0df031f..bf5caca739 100644 --- a/contrib/groff/src/include/geometry.h +++ b/contrib/groff/src/include/geometry.h @@ -1,22 +1,21 @@ // -*- C++ -*- -/* Copyright (C) 2001 Free Software Foundation, Inc. +/* Copyright (C) 2001, 2009 Free Software Foundation, Inc. Written by Gaius Mulley This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ int adjust_arc_center(const int *, double *); void check_output_arc_limits(int x, int y, diff --git a/contrib/groff/src/include/html-strings.h b/contrib/groff/src/include/html-strings.h index 26daeb6cfd..2edf5b281f 100644 --- a/contrib/groff/src/include/html-strings.h +++ b/contrib/groff/src/include/html-strings.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. +/* Copyright (C) 2001, 2002, 2003, 2009 + Free Software Foundation, Inc. Written by Gaius Mulley (gaius@glam.ac.uk). This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ /* * defines the image tags issued by the pre-processors (tbl, pic, eqn) diff --git a/contrib/groff/src/include/htmlhint.h b/contrib/groff/src/include/htmlhint.h index e0b41dd715..0c4cbbd532 100644 --- a/contrib/groff/src/include/htmlhint.h +++ b/contrib/groff/src/include/htmlhint.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001, 2002, 2009 + Free Software Foundation, Inc. Written by Gaius Mulley This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #ifndef HTMLINDICATE_H #define HTMLINDICATE_H diff --git a/contrib/groff/src/include/index.h b/contrib/groff/src/include/index.h index c90610e67d..739621efcc 100644 --- a/contrib/groff/src/include/index.h +++ b/contrib/groff/src/include/index.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #define INDEX_MAGIC 0x23021964 #define INDEX_VERSION 1 diff --git a/contrib/groff/src/include/itable.h b/contrib/groff/src/include/itable.h new file mode 100644 index 0000000000..2585a44a52 --- /dev/null +++ b/contrib/groff/src/include/itable.h @@ -0,0 +1,199 @@ +// -*- C++ -*- +/* Copyright (C) 1989, 1990, 1991, 1992, 2003, 2004, 2006, 2009 + Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ + +#include + +// name2(a,b) concatenates two C identifiers. +#ifdef TRADITIONAL_CPP +# define name2(a,b) a/**/b +#else /* not TRADITIONAL_CPP */ +# define name2(a,b) name2x(a,b) +# define name2x(a,b) a ## b +#endif /* not TRADITIONAL_CPP */ + +// `class ITABLE(T)' is the type of a hash table mapping an integer (int >= 0) +// to an object of type T. +// +// `struct IASSOC(T)' is the type of a association (pair) between an integer +// (int >= 0) and an object of type T. +// +// `class ITABLE_ITERATOR(T)' is the type of an iterator iterating through a +// `class ITABLE(T)'. +// +// Nowadays one would use templates for this; this code predates the addition +// of templates to C++. +#define ITABLE(T) name2(T,_itable) +#define IASSOC(T) name2(T,_iassoc) +#define ITABLE_ITERATOR(T) name2(T,_itable_iterator) + +// ptable.h declares this too +#ifndef NEXT_PTABLE_SIZE_DEFINED +# define NEXT_PTABLE_SIZE_DEFINED +extern unsigned next_ptable_size(unsigned); // Return the first suitable + // hash table size greater than the given + // value. +#endif + +// Declare the types `class ITABLE(T)', `struct IASSOC(T)', and `class +// ITABLE_ITERATOR(T)' for the type `T'. +#define declare_itable(T) \ + \ +struct IASSOC(T) { \ + int key; \ + T *val; \ + IASSOC(T)(); \ +}; \ + \ +class ITABLE(T); \ + \ +class ITABLE_ITERATOR(T) { \ + ITABLE(T) *p; \ + unsigned i; \ +public: \ + ITABLE_ITERATOR(T)(ITABLE(T) *); /* Initialize an iterator running \ + through the given table. */ \ + int next(int *, T **); /* Fetch the next pair, store the key \ + and value in arg1 and arg2, \ + respectively, and return 1. If \ + there is no more pair in the \ + table, return 0. */ \ +}; \ + \ +class ITABLE(T) { \ + IASSOC(T) *v; \ + unsigned size; \ + unsigned used; \ + enum { \ + FULL_NUM = 2, \ + FULL_DEN = 3, \ + INITIAL_SIZE = 17 \ + }; \ +public: \ + ITABLE(T)(); /* Create an empty table. */ \ + ~ITABLE(T)(); /* Delete a table, including its \ + values. */ \ + void define(int, T *); /* Define the value (arg2) for a key \ + (arg1). */ \ + T *lookup(int); /* Return a pointer to the value of \ + the given key, if found in the \ + table, or NULL otherwise. */ \ + friend class ITABLE_ITERATOR(T); \ +}; + + +// Values must be allocated by the caller (always using new[], not new) +// and are freed by ITABLE. + +// Define the implementations of the members of the types `class ITABLE(T)', +// `struct IASSOC(T)', `class ITABLE_ITERATOR(T)' for the type `T'. +#define implement_itable(T) \ + \ +IASSOC(T)::IASSOC(T)() \ +: key(-1), val(0) \ +{ \ +} \ + \ +ITABLE(T)::ITABLE(T)() \ +{ \ + v = new IASSOC(T)[size = INITIAL_SIZE]; \ + used = 0; \ +} \ + \ +ITABLE(T)::~ITABLE(T)() \ +{ \ + for (unsigned i = 0; i < size; i++) \ + a_delete v[i].val; \ + a_delete v; \ +} \ + \ +void ITABLE(T)::define(int key, T *val) \ +{ \ + assert(key >= 0); \ + unsigned int h = (unsigned int)(key); \ + unsigned n; \ + for (n = unsigned(h % size); \ + v[n].key >= 0; \ + n = (n == 0 ? size - 1 : n - 1)) \ + if (v[n].key == key) { \ + a_delete v[n].val; \ + v[n].val = val; \ + return; \ + } \ + if (val == 0) \ + return; \ + if (used*FULL_DEN >= size*FULL_NUM) { \ + IASSOC(T) *oldv = v; \ + unsigned old_size = size; \ + size = next_ptable_size(size); \ + v = new IASSOC(T)[size]; \ + for (unsigned i = 0; i < old_size; i++) \ + if (oldv[i].key >= 0) { \ + if (oldv[i].val != 0) { \ + unsigned j; \ + for (j = (unsigned int)(oldv[i].key) % size; \ + v[j].key >= 0; \ + j = (j == 0 ? size - 1 : j - 1)) \ + ; \ + v[j].key = oldv[i].key; \ + v[j].val = oldv[i].val; \ + } \ + } \ + for (n = unsigned(h % size); \ + v[n].key >= 0; \ + n = (n == 0 ? size - 1 : n - 1)) \ + ; \ + a_delete oldv; \ + } \ + v[n].key = key; \ + v[n].val = val; \ + used++; \ +} \ + \ +T *ITABLE(T)::lookup(int key) \ +{ \ + assert(key >= 0); \ + for (unsigned n = (unsigned int)key % size; \ + v[n].key >= 0; \ + n = (n == 0 ? size - 1 : n - 1)) \ + if (v[n].key == key) \ + return v[n].val; \ + return 0; \ +} \ + \ +ITABLE_ITERATOR(T)::ITABLE_ITERATOR(T)(ITABLE(T) *t) \ +: p(t), i(0) \ +{ \ +} \ + \ +int ITABLE_ITERATOR(T)::next(int *keyp, T **valp) \ +{ \ + unsigned size = p->size; \ + IASSOC(T) *v = p->v; \ + for (; i < size; i++) \ + if (v[i].key >= 0) { \ + *keyp = v[i].key; \ + *valp = v[i].val; \ + i++; \ + return 1; \ + } \ + return 0; \ +} + +// end of itable.h diff --git a/contrib/groff/src/include/lib.h b/contrib/groff/src/include/lib.h index bb59337fc9..32bed5bbc7 100644 --- a/contrib/groff/src/include/lib.h +++ b/contrib/groff/src/include/lib.h @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989-2000, 2001, 2002, 2003, 2005 +/* Copyright (C) 1989-2000, 2001, 2002, 2003, 2005, 2006, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #ifdef HAVE_CONFIG_H #include @@ -37,9 +36,13 @@ extern "C" { #ifdef HAVE_SETLOCALE #include -#else -#define setlocale(category, locale) do {} while(0) -#endif +#define getlocale(category) setlocale(category, NULL) +#else /* !HAVE_SETLOCALE */ +#define LC_ALL 0 +#define LC_CTYPE 0 +#define setlocale(category, locale) (void)(category, locale) +#define getlocale(category) ((void)(category), (char *)"C") +#endif /* !HAVE_SETLOCALE */ char *strsave(const char *s); int is_prime(unsigned); @@ -106,7 +109,7 @@ inline int invalid_input_char(int c) // Ultrix4.3's string.h fails to declare this. extern "C" { int strcasecmp(const char *, const char *); } #endif /* NEED_DECLARATION_STRCASECMP */ -#else /* not HAVE_STRCASECMP */ +#else /* !HAVE_STRCASECMP */ extern "C" { int strcasecmp(const char *, const char *); } #endif /* HAVE_STRCASECMP */ @@ -116,16 +119,16 @@ extern "C" { int strcasecmp(const char *, const char *); } // SunOS's string.h fails to declare this. extern "C" { int strncasecmp(const char *, const char *, int); } #endif /* NEED_DECLARATION_STRNCASECMP */ -#else /* not HAVE_STRNCASECMP */ +#else /* !HAVE_STRNCASECMP */ extern "C" { int strncasecmp(const char *, const char *, size_t); } #endif /* HAVE_STRNCASECMP */ #endif /* !_AIX && !sinix && !__sinix__ */ #ifdef HAVE_CC_LIMITS_H #include -#else /* not HAVE_CC_LIMITS_H */ +#else /* !HAVE_CC_LIMITS_H */ #define INT_MAX 2147483647 -#endif /* not HAVE_CC_LIMITS_H */ +#endif /* !HAVE_CC_LIMITS_H */ /* It's not safe to rely on people getting INT_MIN right (ie signed). */ @@ -139,14 +142,14 @@ extern "C" { int strncasecmp(const char *, const char *, size_t); } #define INT_MIN ((long)(-INT_MAX-1)) -#else /* not CFRONT_ANSI_BUG */ +#else /* !CFRONT_ANSI_BUG */ #define INT_MIN (-INT_MAX-1) -#endif /* not CFRONT_ANSI_BUG */ +#endif /* !CFRONT_ANSI_BUG */ /* Maximum number of digits in the decimal representation of an int -(not including the -). */ + (not including the -). */ #define INT_DIGITS 10 @@ -157,14 +160,14 @@ extern "C" { int strncasecmp(const char *, const char *, size_t); } const double PI = 3.14159265358979323846; /* ad_delete deletes an array of objects with destructors; -a_delete deletes an array of objects without destructors */ + a_delete deletes an array of objects without destructors */ #ifdef ARRAY_DELETE_NEEDS_SIZE /* for 2.0 systems */ #define ad_delete(size) delete [size] #define a_delete delete -#else /* not ARRAY_DELETE_NEEDS_SIZE */ +#else /* !ARRAY_DELETE_NEEDS_SIZE */ /* for ARM systems */ #define ad_delete(size) delete [] #define a_delete delete [] -#endif /* not ARRAY_DELETE_NEEDS_SIZE */ +#endif /* !ARRAY_DELETE_NEEDS_SIZE */ diff --git a/contrib/groff/src/include/localcharset.h b/contrib/groff/src/include/localcharset.h new file mode 100644 index 0000000000..a1592ab033 --- /dev/null +++ b/contrib/groff/src/include/localcharset.h @@ -0,0 +1,40 @@ +/* Determine a canonical name for the current locale's character encoding. + Copyright (C) 2000-2003 Free Software Foundation, Inc. + This file is part of the GNU CHARSET Library. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#ifndef _LOCALCHARSET_H +#define _LOCALCHARSET_H + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Determine the current locale's character encoding, and canonicalize it + into one of the canonical names listed in config.charset. + The result must not be freed; it is statically allocated. + If the canonical name cannot be determined, the result is a non-canonical + name. */ +extern const char * locale_charset (void); + + +#ifdef __cplusplus +} +#endif + + +#endif /* _LOCALCHARSET_H */ diff --git a/contrib/groff/src/include/macropath.h b/contrib/groff/src/include/macropath.h index 3b38baa026..98e93f98a5 100644 --- a/contrib/groff/src/include/macropath.h +++ b/contrib/groff/src/include/macropath.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ extern search_path macro_path; extern search_path safer_macro_path; diff --git a/contrib/groff/src/include/nonposix.h b/contrib/groff/src/include/nonposix.h index 9564a8b764..d905aa6fee 100644 --- a/contrib/groff/src/include/nonposix.h +++ b/contrib/groff/src/include/nonposix.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 +/* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2009 Free Software Foundation, Inc. Written by Eli Zaretskii (eliz@is.elta.co.il) @@ -6,17 +6,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ /* This header file compartmentalize all idiosyncrasies of non-Posix systems, such as MS-DOS, MS-Windows, etc. It should be loaded after diff --git a/contrib/groff/src/include/paper.h b/contrib/groff/src/include/paper.h index e88965d1de..73e070cc33 100644 --- a/contrib/groff/src/include/paper.h +++ b/contrib/groff/src/include/paper.h @@ -1,22 +1,21 @@ // -*- C++ -*- -/* Copyright (C) 2002 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2009 Free Software Foundation, Inc. Written by Werner Lemberg (wl@gnu.org) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ struct paper { char *name; diff --git a/contrib/groff/src/include/posix.h b/contrib/groff/src/include/posix.h index 28b807c7c2..aa4c04278b 100644 --- a/contrib/groff/src/include/posix.h +++ b/contrib/groff/src/include/posix.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1992, 2000, 2001, 2002, 2005 Free Software Foundation, Inc. +/* Copyright (C) 1992, 2000, 2001, 2002, 2005, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include #include diff --git a/contrib/groff/src/include/printer.h b/contrib/groff/src/include/printer.h index fb39f48965..5f676080a0 100644 --- a/contrib/groff/src/include/printer.h +++ b/contrib/groff/src/include/printer.h @@ -2,19 +2,20 @@ // /src/include/printer.h -/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004, 2006, + 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) - Last update: 15 Dec 2004 + Last update: 5 Jan 2009 This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -22,9 +23,7 @@ General Public License for more details. You should have received a copy of the GNU General Public License - along with groff; see the file COPYING. If not, write to the Free - Software Foundation, 51 Franklin St - Fifth Floor, Boston, MA - 02110-1301, USA. + along with this program. If not, see . */ /* Description @@ -62,29 +61,24 @@ class printer { public: printer(); virtual ~printer(); - void load_font(int i, const char *name); - void set_ascii_char(unsigned char c, const environment *env, - int *widthp = 0); - void set_special_char(const char *nm, const environment *env, - int *widthp = 0); - virtual void set_numbered_char(int n, const environment *env, - int *widthp = 0); - int set_char_and_width(const char *nm, const environment *env, - int *widthp, font **f); - font *get_font_from_index(int fontno); - virtual void draw(int code, int *p, int np, const environment *env); + void load_font(int, const char *); + void set_ascii_char(unsigned char, const environment *, int * = 0); + void set_special_char(const char *, const environment *, int * = 0); + virtual void set_numbered_char(int, const environment *, int * = 0); + glyph *set_char_and_width(const char *, const environment *, + int *, font **); + font *get_font_from_index(int); + virtual void draw(int, int *, int, const environment *); // perform change of line color (text, outline) in the print-out - virtual void change_color(const environment * const env); + virtual void change_color(const environment * const); // perform change of fill color in the print-out - virtual void change_fill_color(const environment * const env); + virtual void change_fill_color(const environment * const); virtual void begin_page(int) = 0; - virtual void end_page(int page_length) = 0; - virtual font *make_font(const char *nm); + virtual void end_page(int) = 0; + virtual font *make_font(const char *); virtual void end_of_line(); - virtual void special(char *arg, const environment *env, - char type = 'p'); - virtual void devtag(char *arg, const environment *env, - char type = 'p'); + virtual void special(char *, const environment *, char = 'p'); + virtual void devtag(char *, const environment *, char = 'p'); protected: font_pointer_list *font_list; @@ -100,8 +94,8 @@ protected: private: font *find_font(const char *); - virtual void set_char(int index, font *f, const environment *env, - int w, const char *name) = 0; + virtual void set_char(glyph *, font *, const environment *, int, + const char *) = 0; }; printer *make_printer(); diff --git a/contrib/groff/src/include/ptable.h b/contrib/groff/src/include/ptable.h index b2881872a3..829fe5b2b6 100644 --- a/contrib/groff/src/include/ptable.h +++ b/contrib/groff/src/include/ptable.h @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2003, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2003, 2004, 2006, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,35 +7,57 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include #include +// name2(a,b) concatenates two C identifiers. #ifdef TRADITIONAL_CPP -#define name2(a,b) a/**/b +# define name2(a,b) a/**/b #else /* not TRADITIONAL_CPP */ -#define name2(a,b) name2x(a,b) -#define name2x(a,b) a ## b +# define name2(a,b) name2x(a,b) +# define name2x(a,b) a ## b #endif /* not TRADITIONAL_CPP */ +// `class PTABLE(T)' is the type of a hash table mapping a string +// (const char *) to an object of type T. +// +// `struct PASSOC(T)' is the type of a association (pair) between a +// string (const char *) and an object of type T. +// +// `class PTABLE_ITERATOR(T)' is the type of an iterator iterating through a +// `class PTABLE(T)'. +// +// Nowadays one would use templates for this; this code predates the addition +// of templates to C++. #define PTABLE(T) name2(T,_ptable) #define PASSOC(T) name2(T,_passoc) #define PTABLE_ITERATOR(T) name2(T,_ptable_iterator) -extern unsigned next_ptable_size(unsigned); -extern unsigned long hash_string(const char *); +// itable.h declares this too +#ifndef NEXT_PTABLE_SIZE_DEFINED +# define NEXT_PTABLE_SIZE_DEFINED +extern unsigned next_ptable_size(unsigned); // Return the first suitable + // hash table size greater than the given + // value. +#endif +extern unsigned long hash_string(const char *); // Return a hash code of the + // given string. The hash function is + // platform dependent. */ + +// Declare the types `class PTABLE(T)', `struct PASSOC(T)', and `class +// PTABLE_ITERATOR(T)' for the type `T'. #define declare_ptable(T) \ \ struct PASSOC(T) { \ @@ -50,20 +72,42 @@ class PTABLE_ITERATOR(T) { \ PTABLE(T) *p; \ unsigned i; \ public: \ - PTABLE_ITERATOR(T)(PTABLE(T) *); \ - int next(const char **, T **); \ + PTABLE_ITERATOR(T)(PTABLE(T) *); /* Initialize an iterator running \ + through the given table. */ \ + int next(const char **, T **); /* Fetch the next pair, store the key \ + and value in arg1 and arg2, \ + respectively, and return 1. If \ + there is no more pair in the \ + table, return 0. */ \ }; \ \ class PTABLE(T) { \ PASSOC(T) *v; \ unsigned size; \ unsigned used; \ - enum { FULL_NUM = 2, FULL_DEN = 3, INITIAL_SIZE = 17 }; \ + enum { \ + FULL_NUM = 2, \ + FULL_DEN = 3, \ + INITIAL_SIZE = 17 \ + }; \ public: \ - PTABLE(T)(); \ - ~PTABLE(T)(); \ - void define(const char *, T *); \ - T *lookup(const char *); \ + PTABLE(T)(); /* Create an empty table. */ \ + ~PTABLE(T)(); /* Delete a table, including its \ + values. */ \ + const char *define(const char *, T *);/* Define the value (arg2) for a key \ + (arg1). Return the copy in the \ + table of the key (arg1), or \ + possibly NULL if the value (arg2) \ + is NULL. */ \ + T *lookup(const char *); /* Return a pointer to the value of \ + the given key, if found in the \ + table, or NULL otherwise. */ \ + T *lookupassoc(const char **); /* Return a pointer to the value of \ + the given key, passed by reference,\ + and replace the key argument with \ + the copy found in the table, if \ + the key is found in the table. \ + Return NULL otherwise. */ \ friend class PTABLE_ITERATOR(T); \ }; @@ -72,6 +116,8 @@ public: \ // Values must be allocated by the caller (always using new[], not new) // and are freed by PTABLE. +// Define the implementations of the members of the types `class PTABLE(T)', +// `struct PASSOC(T)', `class PTABLE_ITERATOR(T)' for the type `T'. #define implement_ptable(T) \ \ PASSOC(T)::PASSOC(T)() \ @@ -94,7 +140,7 @@ PTABLE(T)::~PTABLE(T)() \ a_delete v; \ } \ \ -void PTABLE(T)::define(const char *key, T *val) \ +const char *PTABLE(T)::define(const char *key, T *val) \ { \ assert(key != 0); \ unsigned long h = hash_string(key); \ @@ -105,10 +151,10 @@ void PTABLE(T)::define(const char *key, T *val) \ if (strcmp(v[n].key, key) == 0) { \ a_delete v[n].val; \ v[n].val = val; \ - return; \ + return v[n].key; \ } \ if (val == 0) \ - return; \ + return 0; \ if (used*FULL_DEN >= size*FULL_NUM) { \ PASSOC(T) *oldv = v; \ unsigned old_size = size; \ @@ -139,6 +185,7 @@ void PTABLE(T)::define(const char *key, T *val) \ v[n].key = temp; \ v[n].val = val; \ used++; \ + return temp; \ } \ \ T *PTABLE(T)::lookup(const char *key) \ @@ -152,6 +199,20 @@ T *PTABLE(T)::lookup(const char *key) \ return 0; \ } \ \ +T *PTABLE(T)::lookupassoc(const char **keyptr) \ +{ \ + const char *key = *keyptr; \ + assert(key != 0); \ + for (unsigned n = unsigned(hash_string(key) % size); \ + v[n].key != 0; \ + n = (n == 0 ? size - 1 : n - 1)) \ + if (strcmp(v[n].key, key) == 0) { \ + *keyptr = v[n].key; \ + return v[n].val; \ + } \ + return 0; \ +} \ + \ PTABLE_ITERATOR(T)::PTABLE_ITERATOR(T)(PTABLE(T) *t) \ : p(t), i(0) \ { \ @@ -170,3 +231,5 @@ int PTABLE_ITERATOR(T)::next(const char **keyp, T **valp) \ } \ return 0; \ } + +// end of ptable.h diff --git a/contrib/groff/src/include/refid.h b/contrib/groff/src/include/refid.h index 84e5119f30..345229d4a3 100644 --- a/contrib/groff/src/include/refid.h +++ b/contrib/groff/src/include/refid.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ class reference_id { int filename_id; diff --git a/contrib/groff/src/include/search.h b/contrib/groff/src/include/search.h index 3dde8944f0..e730d92083 100644 --- a/contrib/groff/src/include/search.h +++ b/contrib/groff/src/include/search.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2004, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ class search_item; class search_item_iterator; diff --git a/contrib/groff/src/include/searchpath.h b/contrib/groff/src/include/searchpath.h index dab161e61e..5f2334cf47 100644 --- a/contrib/groff/src/include/searchpath.h +++ b/contrib/groff/src/include/searchpath.h @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2003 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2003, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ class search_path { char *dirs; diff --git a/contrib/groff/src/include/stringclass.h b/contrib/groff/src/include/stringclass.h index fb3299ce90..0978efecc2 100644 --- a/contrib/groff/src/include/stringclass.h +++ b/contrib/groff/src/include/stringclass.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include #include diff --git a/contrib/groff/src/include/symbol.h b/contrib/groff/src/include/symbol.h index c3cc8eea63..31b570a13b 100644 --- a/contrib/groff/src/include/symbol.h +++ b/contrib/groff/src/include/symbol.h @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2004, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #define DONT_STORE 1 #define MUST_ALREADY_EXIST 2 diff --git a/contrib/groff/src/include/unicode.h b/contrib/groff/src/include/unicode.h index 90dab113df..edd004cd7f 100644 --- a/contrib/groff/src/include/unicode.h +++ b/contrib/groff/src/include/unicode.h @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 2002, 2003 +/* Copyright (C) 2002, 2003, 2006, 2009 Free Software Foundation, Inc. Written by Werner Lemberg @@ -7,20 +7,58 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ +// Convert a groff glyph name to a string containing an underscore-separated +// list of Unicode code points. For example, +// +// `-' -> `2010' +// `,c' -> `00E7' +// `fl' -> `0066_006C' +// +// Return NULL if there is no equivalent. const char *glyph_name_to_unicode(const char *); + +// Convert a string containing an underscore-separated list of Unicode code +// points to a groff glyph name. For example, +// +// `2010' -> `hy' +// `0066_006C' -> `fl' +// +// Return NULL if there is no equivalent. const char *unicode_to_glyph_name(const char *); + +// Convert a string containing a precomposed Unicode character to a string +// containing an underscore-separated list of Unicode code points, +// representing its canonical decomposition. Also perform compatibility +// equivalent replacement. For example, +// +// `1F3A' -> `0399_0313_0300' +// `FA6A' -> `983B' +// +// Return NULL if there is no equivalent. const char *decompose_unicode(const char *); +// Test whether the given string denotes a Unicode character. It must +// be of the form `uNNNN', obeying the following rules. +// +// - `NNNN' must consist of at least 4 hexadecimal digits in upper case. +// - If there are more than 4 hexadecimal digits, the leading one must not +// be zero, +// - `NNNN' must denote a valid Unicode code point (U+0000..U+10FFFF, +// excluding surrogate code points. +// +// Return a pointer to `NNNN' (skipping the leading `u' character) in case +// of success, NULL otherwise. const char *check_unicode_name(const char *); + +// end of unicode.h diff --git a/contrib/groff/src/libs/libbib/common.cpp b/contrib/groff/src/libs/libbib/common.cpp index 9d16e7a068..f5157601ba 100644 --- a/contrib/groff/src/libs/libbib/common.cpp +++ b/contrib/groff/src/libs/libbib/common.cpp @@ -1,21 +1,21 @@ -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ unsigned hash(const char *s, int len) { diff --git a/contrib/groff/src/libs/libbib/index.cpp b/contrib/groff/src/libs/libbib/index.cpp index 6b9b9e350e..86293fb632 100644 --- a/contrib/groff/src/libs/libbib/index.cpp +++ b/contrib/groff/src/libs/libbib/index.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2004, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" diff --git a/contrib/groff/src/libs/libbib/linear.cpp b/contrib/groff/src/libs/libbib/linear.cpp index c1919ab7d6..fb43dd0f47 100644 --- a/contrib/groff/src/libs/libbib/linear.cpp +++ b/contrib/groff/src/libs/libbib/linear.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" diff --git a/contrib/groff/src/libs/libbib/map.c b/contrib/groff/src/libs/libbib/map.c index f45625d94b..e07f88c2e5 100644 --- a/contrib/groff/src/libs/libbib/map.c +++ b/contrib/groff/src/libs/libbib/map.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2004, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -6,17 +6,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include diff --git a/contrib/groff/src/libs/libbib/search.cpp b/contrib/groff/src/libs/libbib/search.cpp index 4ed0baa5bf..08bb55c07d 100644 --- a/contrib/groff/src/libs/libbib/search.cpp +++ b/contrib/groff/src/libs/libbib/search.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" diff --git a/contrib/groff/src/libs/libdriver/input.cpp b/contrib/groff/src/libs/libdriver/input.cpp index bf8a74e106..ae68e86d88 100644 --- a/contrib/groff/src/libs/libdriver/input.cpp +++ b/contrib/groff/src/libs/libdriver/input.cpp @@ -2,20 +2,21 @@ // /src/libs/libdriver/input.cpp -/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004, 2005 +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004, 2005, + 2006, 2008, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) Major rewrite 2001 by Bernd Warken (bwarken@mayn.de) - Last update: 15 Jun 2005 + Last update: 5 Jan 2009 This file is part of groff, the GNU roff text processing system. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -23,9 +24,7 @@ General Public License for more details. You should have received a copy of the GNU General Public License - along with groff; see the file COPYING. If not, write to the Free - Software Foundation, 51 Franklin St - Fifth Floor, Boston, MA - 02110-1301, USA. + along with this program. If not, see . */ /* Description @@ -165,7 +164,7 @@ There was some confusion about the positioning of the graphical pointer at the printout after having executed a `D' command. - The classical troff manual of Osanna & Kernighan specified, + The classical troff manual of Ossanna & Kernighan specified, `The position after a graphical object has been drawn is at its end; for circles and ellipses, the "end" is at the @@ -1466,7 +1465,7 @@ parse_x_command(void) } case 'F': // x Filename: set filename for errors { - char *str_arg = get_string_arg(); + char *str_arg = get_extended_arg(); if (str_arg == 0) warning("empty argument for `x F' command"); else { @@ -1733,7 +1732,7 @@ do_file(const char *filename) break; case 'F': // F: obsolete, replaced by `x F' { - char *str_arg = get_string_arg(); + char *str_arg = get_extended_arg(); remember_source_filename(str_arg); a_delete str_arg; break; diff --git a/contrib/groff/src/libs/libdriver/printer.cpp b/contrib/groff/src/libs/libdriver/printer.cpp index fd77d6b59e..5902173a64 100644 --- a/contrib/groff/src/libs/libdriver/printer.cpp +++ b/contrib/groff/src/libs/libdriver/printer.cpp @@ -2,18 +2,19 @@ // /src/libs/libdriver/printer.cpp -/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004, 2005 +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004, 2005, + 2006, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) - Last update: 02 Mar 2005 + Last update: 5 Jan 2009 This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -21,9 +22,7 @@ General Public License for more details. You should have received a copy of the GNU General Public License - along with groff; see the file COPYING. If not, write to the Free - Software Foundation, 51 Franklin St - Fifth Floor, Boston, MA - 02110-1301, USA. + along with this program. If not, see . */ #include "driver.h" @@ -182,8 +181,8 @@ void printer::set_ascii_char(unsigned char c, const environment *env, buf[0] = c; buf[1] = '\0'; - int i = set_char_and_width(buf, env, &w, &f); - set_char(i, f, env, w, 0); + glyph *g = set_char_and_width(buf, env, &w, &f); + set_char(g, f, env, w, 0); if (widthp) { *widthp = w; } @@ -194,29 +193,29 @@ void printer::set_special_char(const char *nm, const environment *env, { font *f; int w; - int i = set_char_and_width(nm, env, &w, &f); - if (i != -1) { - set_char(i, f, env, w, nm); + glyph *g = set_char_and_width(nm, env, &w, &f); + if (g != UNDEFINED_GLYPH) { + set_char(g, f, env, w, nm); if (widthp) *widthp = w; } } -int printer::set_char_and_width(const char *nm, const environment *env, - int *widthp, font **f) +glyph *printer::set_char_and_width(const char *nm, const environment *env, + int *widthp, font **f) { - int i = font::name_to_index(nm); + glyph *g = name_to_glyph(nm); int fn = env->fontno; if (fn < 0 || fn >= nfonts) { error("bad font position `%1'", fn); - return(-1); + return UNDEFINED_GLYPH; } *f = font_table[fn]; if (*f == 0) { error("no font mounted at `%1'", fn); - return(-1); + return UNDEFINED_GLYPH; } - if (!(*f)->contains(i)) { + if (!(*f)->contains(g)) { if (nm[0] != '\0' && nm[1] == '\0') error("font `%1' does not contain ascii character `%2'", (*f)->get_name(), @@ -225,17 +224,17 @@ int printer::set_char_and_width(const char *nm, const environment *env, error("font `%1' does not contain special character `%2'", (*f)->get_name(), nm); - return(-1); + return UNDEFINED_GLYPH; } - int w = (*f)->get_width(i, env->size); + int w = (*f)->get_width(g, env->size); if (widthp) *widthp = w; - return( i ); + return g; } void printer::set_numbered_char(int num, const environment *env, int *widthp) { - int i = font::number_to_index(num); + glyph *g = number_to_glyph(num); int fn = env->fontno; if (fn < 0 || fn >= nfonts) { error("bad font position `%1'", fn); @@ -246,16 +245,16 @@ void printer::set_numbered_char(int num, const environment *env, int *widthp) error("no font mounted at `%1'", fn); return; } - if (!f->contains(i)) { + if (!f->contains(g)) { error("font `%1' does not contain numbered character %2", f->get_name(), num); return; } - int w = f->get_width(i, env->size); + int w = f->get_width(g, env->size); if (widthp) *widthp = w; - set_char(i, f, env, w, 0); + set_char(g, f, env, w, 0); } font *printer::get_font_from_index(int fontno) diff --git a/contrib/groff/src/libs/libgroff/assert.cpp b/contrib/groff/src/libs/libgroff/assert.cpp index bc08eab2e4..76a6ace9c6 100644 --- a/contrib/groff/src/libs/libgroff/assert.cpp +++ b/contrib/groff/src/libs/libgroff/assert.cpp @@ -1,21 +1,21 @@ -/* Copyright (C) 1989, 1990, 1991, 1992, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2004, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include #include diff --git a/contrib/groff/src/libs/libgroff/change_lf.cpp b/contrib/groff/src/libs/libgroff/change_lf.cpp index 0313779271..180dd95582 100644 --- a/contrib/groff/src/libs/libgroff/change_lf.cpp +++ b/contrib/groff/src/libs/libgroff/change_lf.cpp @@ -1,21 +1,21 @@ -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include diff --git a/contrib/groff/src/libs/libgroff/cmap.cpp b/contrib/groff/src/libs/libgroff/cmap.cpp index 2691c013c7..8ee82fd1da 100644 --- a/contrib/groff/src/libs/libgroff/cmap.cpp +++ b/contrib/groff/src/libs/libgroff/cmap.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include #include "cmap.h" diff --git a/contrib/groff/src/libs/libgroff/color.cpp b/contrib/groff/src/libs/libgroff/color.cpp index b82bdcdadf..1378a8392a 100644 --- a/contrib/groff/src/libs/libgroff/color.cpp +++ b/contrib/groff/src/libs/libgroff/color.cpp @@ -2,26 +2,26 @@ /* /src/libs/libgroff/color.cpp -Last update: 26 May 2004 +Last update: 5 Jan 2009 -Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +Copyright (C) 2001, 2002, 2003, 2004, 2009 + Free Software Foundation, Inc. Written by Gaius Mulley This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" #include "color.h" diff --git a/contrib/groff/src/libs/libgroff/config.charset b/contrib/groff/src/libs/libgroff/config.charset new file mode 100644 index 0000000000..9369179ffd --- /dev/null +++ b/contrib/groff/src/libs/libgroff/config.charset @@ -0,0 +1,648 @@ +#! /bin/sh +# Output a system dependent table of character encoding aliases. +# +# Copyright (C) 2000-2004, 2006-2008 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# The table consists of lines of the form +# ALIAS CANONICAL +# +# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)". +# ALIAS is compared in a case sensitive way. +# +# CANONICAL is the GNU canonical name for this character encoding. +# It must be an encoding supported by libiconv. Support by GNU libc is +# also desirable. CANONICAL is case insensitive. Usually an upper case +# MIME charset name is preferred. +# The current list of GNU canonical charset names is as follows. +# +# name MIME? used by which systems +# ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin +# ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin +# ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin +# ISO-8859-3 Y glibc solaris +# ISO-8859-4 Y osf solaris freebsd netbsd openbsd darwin +# ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin +# ISO-8859-6 Y glibc aix hpux solaris +# ISO-8859-7 Y glibc aix hpux irix osf solaris netbsd openbsd darwin +# ISO-8859-8 Y glibc aix hpux osf solaris +# ISO-8859-9 Y glibc aix hpux irix osf solaris darwin +# ISO-8859-13 glibc netbsd openbsd darwin +# ISO-8859-14 glibc +# ISO-8859-15 glibc aix osf solaris freebsd netbsd openbsd darwin +# KOI8-R Y glibc solaris freebsd netbsd openbsd darwin +# KOI8-U Y glibc freebsd netbsd openbsd darwin +# KOI8-T glibc +# CP437 dos +# CP775 dos +# CP850 aix osf dos +# CP852 dos +# CP855 dos +# CP856 aix +# CP857 dos +# CP861 dos +# CP862 dos +# CP864 dos +# CP865 dos +# CP866 freebsd netbsd openbsd darwin dos +# CP869 dos +# CP874 woe32 dos +# CP922 aix +# CP932 aix woe32 dos +# CP943 aix +# CP949 osf woe32 dos +# CP950 woe32 dos +# CP1046 aix +# CP1124 aix +# CP1125 dos +# CP1129 aix +# CP1250 woe32 +# CP1251 glibc solaris netbsd openbsd darwin woe32 +# CP1252 aix woe32 +# CP1253 woe32 +# CP1254 woe32 +# CP1255 glibc woe32 +# CP1256 woe32 +# CP1257 woe32 +# GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin +# EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin +# EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin +# EUC-TW glibc aix hpux irix osf solaris netbsd +# BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin +# BIG5-HKSCS glibc solaris +# GBK glibc aix osf solaris woe32 dos +# GB18030 glibc solaris netbsd +# SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin +# JOHAB glibc solaris woe32 +# TIS-620 glibc aix hpux osf solaris +# VISCII Y glibc +# TCVN5712-1 glibc +# GEORGIAN-PS glibc +# HP-ROMAN8 hpux +# HP-ARABIC8 hpux +# HP-GREEK8 hpux +# HP-HEBREW8 hpux +# HP-TURKISH8 hpux +# HP-KANA8 hpux +# DEC-KANJI osf +# DEC-HANYU osf +# UTF-8 Y glibc aix hpux osf solaris netbsd darwin +# +# Note: Names which are not marked as being a MIME name should not be used in +# Internet protocols for information interchange (mail, news, etc.). +# +# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications +# must understand both names and treat them as equivalent. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM + +host="$1" +os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'` +echo "# This file contains a table of character encoding aliases," +echo "# suitable for operating system '${os}'." +echo "# It was automatically generated from config.charset." +# List of references, updated during installation: +echo "# Packages using this file: " +case "$os" in + linux-gnulibc1*) + # Linux libc5 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + echo "C ASCII" + echo "POSIX ASCII" + for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \ + en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \ + en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \ + es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \ + et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \ + fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \ + it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \ + sv_FI sv_SE; do + echo "$l ISO-8859-1" + echo "$l.iso-8859-1 ISO-8859-1" + echo "$l.iso-8859-15 ISO-8859-15" + echo "$l.iso-8859-15@euro ISO-8859-15" + echo "$l@euro ISO-8859-15" + echo "$l.cp-437 CP437" + echo "$l.cp-850 CP850" + echo "$l.cp-1252 CP1252" + echo "$l.cp-1252@euro CP1252" + #echo "$l.atari-st ATARI-ST" # not a commonly used encoding + echo "$l.utf-8 UTF-8" + echo "$l.utf-8@euro UTF-8" + done + for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \ + sl_SI sr sr_CS sr_YU; do + echo "$l ISO-8859-2" + echo "$l.iso-8859-2 ISO-8859-2" + echo "$l.cp-852 CP852" + echo "$l.cp-1250 CP1250" + echo "$l.utf-8 UTF-8" + done + for l in mk mk_MK ru ru_RU; do + echo "$l ISO-8859-5" + echo "$l.iso-8859-5 ISO-8859-5" + echo "$l.koi8-r KOI8-R" + echo "$l.cp-866 CP866" + echo "$l.cp-1251 CP1251" + echo "$l.utf-8 UTF-8" + done + for l in ar ar_SA; do + echo "$l ISO-8859-6" + echo "$l.iso-8859-6 ISO-8859-6" + echo "$l.cp-864 CP864" + #echo "$l.cp-868 CP868" # not a commonly used encoding + echo "$l.cp-1256 CP1256" + echo "$l.utf-8 UTF-8" + done + for l in el el_GR gr gr_GR; do + echo "$l ISO-8859-7" + echo "$l.iso-8859-7 ISO-8859-7" + echo "$l.cp-869 CP869" + echo "$l.cp-1253 CP1253" + echo "$l.cp-1253@euro CP1253" + echo "$l.utf-8 UTF-8" + echo "$l.utf-8@euro UTF-8" + done + for l in he he_IL iw iw_IL; do + echo "$l ISO-8859-8" + echo "$l.iso-8859-8 ISO-8859-8" + echo "$l.cp-862 CP862" + echo "$l.cp-1255 CP1255" + echo "$l.utf-8 UTF-8" + done + for l in tr tr_TR; do + echo "$l ISO-8859-9" + echo "$l.iso-8859-9 ISO-8859-9" + echo "$l.cp-857 CP857" + echo "$l.cp-1254 CP1254" + echo "$l.utf-8 UTF-8" + done + for l in lt lt_LT lv lv_LV; do + #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name + echo "$l ISO-8859-13" + done + for l in ru_UA uk uk_UA; do + echo "$l KOI8-U" + done + for l in zh zh_CN; do + #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name + echo "$l GB2312" + done + for l in ja ja_JP ja_JP.EUC; do + echo "$l EUC-JP" + done + for l in ko ko_KR; do + echo "$l EUC-KR" + done + for l in th th_TH; do + echo "$l TIS-620" + done + for l in fa fa_IR; do + #echo "$l ISIRI-3342" # a broken encoding + echo "$l.utf-8 UTF-8" + done + ;; + linux* | *-gnu*) + # With glibc-2.1 or newer, we don't need any canonicalization, + # because glibc has iconv and both glibc and libiconv support all + # GNU canonical names directly. Therefore, the Makefile does not + # need to install the alias file at all. + # The following applies only to glibc-2.0.x and older libcs. + echo "ISO_646.IRV:1983 ASCII" + ;; + aix*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-6 ISO-8859-6" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "IBM-850 CP850" + echo "IBM-856 CP856" + echo "IBM-921 ISO-8859-13" + echo "IBM-922 CP922" + echo "IBM-932 CP932" + echo "IBM-943 CP943" + echo "IBM-1046 CP1046" + echo "IBM-1124 CP1124" + echo "IBM-1129 CP1129" + echo "IBM-1252 CP1252" + echo "IBM-eucCN GB2312" + echo "IBM-eucJP EUC-JP" + echo "IBM-eucKR EUC-KR" + echo "IBM-eucTW EUC-TW" + echo "big5 BIG5" + echo "GBK GBK" + echo "TIS-620 TIS-620" + echo "UTF-8 UTF-8" + ;; + hpux*) + echo "iso88591 ISO-8859-1" + echo "iso88592 ISO-8859-2" + echo "iso88595 ISO-8859-5" + echo "iso88596 ISO-8859-6" + echo "iso88597 ISO-8859-7" + echo "iso88598 ISO-8859-8" + echo "iso88599 ISO-8859-9" + echo "iso885915 ISO-8859-15" + echo "roman8 HP-ROMAN8" + echo "arabic8 HP-ARABIC8" + echo "greek8 HP-GREEK8" + echo "hebrew8 HP-HEBREW8" + echo "turkish8 HP-TURKISH8" + echo "kana8 HP-KANA8" + echo "tis620 TIS-620" + echo "big5 BIG5" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + echo "hp15CN GB2312" + #echo "ccdc ?" # what is this? + echo "SJIS SHIFT_JIS" + echo "utf8 UTF-8" + ;; + irix*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-9 ISO-8859-9" + echo "eucCN GB2312" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + ;; + osf*) + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "cp850 CP850" + echo "big5 BIG5" + echo "dechanyu DEC-HANYU" + echo "dechanzi GB2312" + echo "deckanji DEC-KANJI" + echo "deckorean EUC-KR" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + echo "GBK GBK" + echo "KSC5601 CP949" + echo "sdeckanji EUC-JP" + echo "SJIS SHIFT_JIS" + echo "TACTIS TIS-620" + echo "UTF-8 UTF-8" + ;; + solaris*) + echo "646 ASCII" + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-3 ISO-8859-3" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-6 ISO-8859-6" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-8 ISO-8859-8" + echo "ISO8859-9 ISO-8859-9" + echo "ISO8859-15 ISO-8859-15" + echo "koi8-r KOI8-R" + echo "ansi-1251 CP1251" + echo "BIG5 BIG5" + echo "Big5-HKSCS BIG5-HKSCS" + echo "gb2312 GB2312" + echo "GBK GBK" + echo "GB18030 GB18030" + echo "cns11643 EUC-TW" + echo "5601 EUC-KR" + echo "ko_KR.johap92 JOHAB" + echo "eucJP EUC-JP" + echo "PCK SHIFT_JIS" + echo "TIS620.2533 TIS-620" + #echo "sun_eu_greek ?" # what is this? + echo "UTF-8 UTF-8" + ;; + freebsd* | os2*) + # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just + # reuse FreeBSD's locale data for OS/2. + echo "C ASCII" + echo "US-ASCII ASCII" + for l in la_LN lt_LN; do + echo "$l.ASCII ASCII" + done + for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ + fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \ + lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do + echo "$l.ISO_8859-1 ISO-8859-1" + echo "$l.DIS_8859-15 ISO-8859-15" + done + for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do + echo "$l.ISO_8859-2 ISO-8859-2" + done + for l in la_LN lt_LT; do + echo "$l.ISO_8859-4 ISO-8859-4" + done + for l in ru_RU ru_SU; do + echo "$l.KOI8-R KOI8-R" + echo "$l.ISO_8859-5 ISO-8859-5" + echo "$l.CP866 CP866" + done + echo "uk_UA.KOI8-U KOI8-U" + echo "zh_TW.BIG5 BIG5" + echo "zh_TW.Big5 BIG5" + echo "zh_CN.EUC GB2312" + echo "ja_JP.EUC EUC-JP" + echo "ja_JP.SJIS SHIFT_JIS" + echo "ja_JP.Shift_JIS SHIFT_JIS" + echo "ko_KR.EUC EUC-KR" + ;; + netbsd*) + echo "646 ASCII" + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-13 ISO-8859-13" + echo "ISO8859-15 ISO-8859-15" + echo "eucCN GB2312" + echo "eucJP EUC-JP" + echo "eucKR EUC-KR" + echo "eucTW EUC-TW" + echo "BIG5 BIG5" + echo "SJIS SHIFT_JIS" + ;; + openbsd*) + echo "646 ASCII" + echo "ISO8859-1 ISO-8859-1" + echo "ISO8859-2 ISO-8859-2" + echo "ISO8859-4 ISO-8859-4" + echo "ISO8859-5 ISO-8859-5" + echo "ISO8859-7 ISO-8859-7" + echo "ISO8859-13 ISO-8859-13" + echo "ISO8859-15 ISO-8859-15" + ;; + darwin[56]*) + # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + echo "C ASCII" + for l in en_AU en_CA en_GB en_US la_LN; do + echo "$l.US-ASCII ASCII" + done + for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ + fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \ + nl_NL no_NO pt_PT sv_SE; do + echo "$l ISO-8859-1" + echo "$l.ISO8859-1 ISO-8859-1" + echo "$l.ISO8859-15 ISO-8859-15" + done + for l in la_LN; do + echo "$l.ISO8859-1 ISO-8859-1" + echo "$l.ISO8859-15 ISO-8859-15" + done + for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do + echo "$l.ISO8859-2 ISO-8859-2" + done + for l in la_LN lt_LT; do + echo "$l.ISO8859-4 ISO-8859-4" + done + for l in ru_RU; do + echo "$l.KOI8-R KOI8-R" + echo "$l.ISO8859-5 ISO-8859-5" + echo "$l.CP866 CP866" + done + for l in bg_BG; do + echo "$l.CP1251 CP1251" + done + echo "uk_UA.KOI8-U KOI8-U" + echo "zh_TW.BIG5 BIG5" + echo "zh_TW.Big5 BIG5" + echo "zh_CN.EUC GB2312" + echo "ja_JP.EUC EUC-JP" + echo "ja_JP.SJIS SHIFT_JIS" + echo "ko_KR.EUC EUC-KR" + ;; + darwin*) + # Darwin 7.5 has nl_langinfo(CODESET), but it is useless: + # - It returns the empty string when LANG is set to a locale of the + # form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8 + # LC_CTYPE file. + # - The environment variables LANG, LC_CTYPE, LC_ALL are not set by + # the system; nl_langinfo(CODESET) returns "US-ASCII" in this case. + # - The documentation says: + # "... all code that calls BSD system routines should ensure + # that the const *char parameters of these routines are in UTF-8 + # encoding. All BSD system functions expect their string + # parameters to be in UTF-8 encoding and nothing else." + # It also says + # "An additional caveat is that string parameters for files, + # paths, and other file-system entities must be in canonical + # UTF-8. In a canonical UTF-8 Unicode string, all decomposable + # characters are decomposed ..." + # but this is not true: You can pass non-decomposed UTF-8 strings + # to file system functions, and it is the OS which will convert + # them to decomposed UTF-8 before accessing the file system. + # - The Apple Terminal application displays UTF-8 by default. + # - However, other applications are free to use different encodings: + # - xterm uses ISO-8859-1 by default. + # - TextEdit uses MacRoman by default. + # We prefer UTF-8 over decomposed UTF-8-MAC because one should + # minimize the use of decomposed Unicode. Unfortunately, through the + # Darwin file system, decomposed UTF-8 strings are leaked into user + # space nevertheless. + echo "* UTF-8" + ;; + beos* | haiku*) + # BeOS and Haiku have a single locale, and it has UTF-8 encoding. + echo "* UTF-8" + ;; + msdosdjgpp*) + # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore + # localcharset.c falls back to using the full locale name + # from the environment variables. + echo "#" + echo "# The encodings given here may not all be correct." + echo "# If you find that the encoding given for your language and" + echo "# country is not the one your DOS machine actually uses, just" + echo "# correct it in this file, and send a mail to" + echo "# Juan Manuel Guerrero " + echo "# and Bruno Haible ." + echo "#" + echo "C ASCII" + # ISO-8859-1 languages + echo "ca CP850" + echo "ca_ES CP850" + echo "da CP865" # not CP850 ?? + echo "da_DK CP865" # not CP850 ?? + echo "de CP850" + echo "de_AT CP850" + echo "de_CH CP850" + echo "de_DE CP850" + echo "en CP850" + echo "en_AU CP850" # not CP437 ?? + echo "en_CA CP850" + echo "en_GB CP850" + echo "en_NZ CP437" + echo "en_US CP437" + echo "en_ZA CP850" # not CP437 ?? + echo "es CP850" + echo "es_AR CP850" + echo "es_BO CP850" + echo "es_CL CP850" + echo "es_CO CP850" + echo "es_CR CP850" + echo "es_CU CP850" + echo "es_DO CP850" + echo "es_EC CP850" + echo "es_ES CP850" + echo "es_GT CP850" + echo "es_HN CP850" + echo "es_MX CP850" + echo "es_NI CP850" + echo "es_PA CP850" + echo "es_PY CP850" + echo "es_PE CP850" + echo "es_SV CP850" + echo "es_UY CP850" + echo "es_VE CP850" + echo "et CP850" + echo "et_EE CP850" + echo "eu CP850" + echo "eu_ES CP850" + echo "fi CP850" + echo "fi_FI CP850" + echo "fr CP850" + echo "fr_BE CP850" + echo "fr_CA CP850" + echo "fr_CH CP850" + echo "fr_FR CP850" + echo "ga CP850" + echo "ga_IE CP850" + echo "gd CP850" + echo "gd_GB CP850" + echo "gl CP850" + echo "gl_ES CP850" + echo "id CP850" # not CP437 ?? + echo "id_ID CP850" # not CP437 ?? + echo "is CP861" # not CP850 ?? + echo "is_IS CP861" # not CP850 ?? + echo "it CP850" + echo "it_CH CP850" + echo "it_IT CP850" + echo "lt CP775" + echo "lt_LT CP775" + echo "lv CP775" + echo "lv_LV CP775" + echo "nb CP865" # not CP850 ?? + echo "nb_NO CP865" # not CP850 ?? + echo "nl CP850" + echo "nl_BE CP850" + echo "nl_NL CP850" + echo "nn CP865" # not CP850 ?? + echo "nn_NO CP865" # not CP850 ?? + echo "no CP865" # not CP850 ?? + echo "no_NO CP865" # not CP850 ?? + echo "pt CP850" + echo "pt_BR CP850" + echo "pt_PT CP850" + echo "sv CP850" + echo "sv_SE CP850" + # ISO-8859-2 languages + echo "cs CP852" + echo "cs_CZ CP852" + echo "hr CP852" + echo "hr_HR CP852" + echo "hu CP852" + echo "hu_HU CP852" + echo "pl CP852" + echo "pl_PL CP852" + echo "ro CP852" + echo "ro_RO CP852" + echo "sk CP852" + echo "sk_SK CP852" + echo "sl CP852" + echo "sl_SI CP852" + echo "sq CP852" + echo "sq_AL CP852" + echo "sr CP852" # CP852 or CP866 or CP855 ?? + echo "sr_CS CP852" # CP852 or CP866 or CP855 ?? + echo "sr_YU CP852" # CP852 or CP866 or CP855 ?? + # ISO-8859-3 languages + echo "mt CP850" + echo "mt_MT CP850" + # ISO-8859-5 languages + echo "be CP866" + echo "be_BE CP866" + echo "bg CP866" # not CP855 ?? + echo "bg_BG CP866" # not CP855 ?? + echo "mk CP866" # not CP855 ?? + echo "mk_MK CP866" # not CP855 ?? + echo "ru CP866" + echo "ru_RU CP866" + echo "uk CP1125" + echo "uk_UA CP1125" + # ISO-8859-6 languages + echo "ar CP864" + echo "ar_AE CP864" + echo "ar_DZ CP864" + echo "ar_EG CP864" + echo "ar_IQ CP864" + echo "ar_IR CP864" + echo "ar_JO CP864" + echo "ar_KW CP864" + echo "ar_MA CP864" + echo "ar_OM CP864" + echo "ar_QA CP864" + echo "ar_SA CP864" + echo "ar_SY CP864" + # ISO-8859-7 languages + echo "el CP869" + echo "el_GR CP869" + # ISO-8859-8 languages + echo "he CP862" + echo "he_IL CP862" + # ISO-8859-9 languages + echo "tr CP857" + echo "tr_TR CP857" + # Japanese + echo "ja CP932" + echo "ja_JP CP932" + # Chinese + echo "zh_CN GBK" + echo "zh_TW CP950" # not CP938 ?? + # Korean + echo "kr CP949" # not CP934 ?? + echo "kr_KR CP949" # not CP934 ?? + # Thai + echo "th CP874" + echo "th_TH CP874" + # Other + echo "eo CP850" + echo "eo_EO CP850" + ;; +esac diff --git a/contrib/groff/src/libs/libgroff/cset.cpp b/contrib/groff/src/libs/libgroff/cset.cpp index 8199e62438..a76ab6f90f 100644 --- a/contrib/groff/src/libs/libgroff/cset.cpp +++ b/contrib/groff/src/libs/libgroff/cset.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2004, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include diff --git a/contrib/groff/src/libs/libgroff/device.cpp b/contrib/groff/src/libs/libgroff/device.cpp index 53baf9757d..4fc99d7a07 100644 --- a/contrib/groff/src/libs/libgroff/device.cpp +++ b/contrib/groff/src/libs/libgroff/device.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include #include "device.h" diff --git a/contrib/groff/src/libs/libgroff/errarg.cpp b/contrib/groff/src/libs/libgroff/errarg.cpp index 1d6ef3006e..117b314b3c 100644 --- a/contrib/groff/src/libs/libgroff/errarg.cpp +++ b/contrib/groff/src/libs/libgroff/errarg.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2002 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2002, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include #include "assert.h" diff --git a/contrib/groff/src/libs/libgroff/error.cpp b/contrib/groff/src/libs/libgroff/error.cpp index 8aea0c0d8f..4fa2d72fc2 100644 --- a/contrib/groff/src/libs/libgroff/error.cpp +++ b/contrib/groff/src/libs/libgroff/error.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2003 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2003, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include #include diff --git a/contrib/groff/src/libs/libgroff/fatal.cpp b/contrib/groff/src/libs/libgroff/fatal.cpp index bed8298b56..c32f166381 100644 --- a/contrib/groff/src/libs/libgroff/fatal.cpp +++ b/contrib/groff/src/libs/libgroff/fatal.cpp @@ -1,21 +1,21 @@ -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include diff --git a/contrib/groff/src/libs/libgroff/font.cpp b/contrib/groff/src/libs/libgroff/font.cpp index 466c71d69b..d0b4a12eb2 100644 --- a/contrib/groff/src/libs/libgroff/font.cpp +++ b/contrib/groff/src/libs/libgroff/font.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005, + 2006, 2008, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" @@ -29,6 +29,7 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "error.h" #include "cset.h" #include "font.h" +#include "unicode.h" #include "paper.h" const char *const WS = " \t\n\r"; @@ -46,12 +47,12 @@ struct font_char_metric { }; struct font_kern_list { - int i1; - int i2; + glyph *glyph1; + glyph *glyph2; int amount; font_kern_list *next; - font_kern_list(int, int, int, font_kern_list * = 0); + font_kern_list(glyph *, glyph *, int, font_kern_list * = 0); }; struct font_widths_cache { @@ -150,13 +151,14 @@ void text_file::error(const char *format, /* 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); internalname = 0; slant = 0.0; + zoom = 0; // load(); // for testing } @@ -194,20 +196,34 @@ static int scale_round(int n, int x, int y) if (x == 0) return 0; if (n >= 0) { - if (n <= (INT_MAX - y2)/x) - return (n*x + y2)/y; - return int(n*double(x)/double(y) + .5); + if (n <= (INT_MAX - y2) / x) + return (n * x + y2) / y; + return int(n * double(x) / double(y) + .5); } else { - if (-(unsigned)n <= (-(unsigned)INT_MIN - y2)/x) - return (n*x - y2)/y; - return int(n*double(x)/double(y) - .5); + if (-(unsigned)n <= (-(unsigned)INT_MIN - y2) / x) + return (n * x - y2) / y; + return int(n * double(x) / double(y) - .5); } } +static int scale_round(int n, int x, int y, int z) +{ + assert(x >= 0 && y > 0 && z > 0); + if (x == 0) + return 0; + if (n >= 0) + return int((n * double(x) / double(y)) * (double(z) / 1000.0) + .5); + else + return int((n * double(x) / double(y)) * (double(z) / 1000.0) - .5); +} + inline int font::scale(int w, int sz) { - return sz == unitwidth ? w : scale_round(w, sz, unitwidth); + if (zoom) + return scale_round(w, sz, unitwidth, zoom); + else + return sz == unitwidth ? w : scale_round(w, sz, unitwidth); } int font::unit_scale(double *value, char unit) @@ -238,15 +254,60 @@ int font::unit_scale(double *value, char unit) return 0; } -int font::get_skew(int c, int point_size, int sl) +int font::get_skew(glyph *g, int point_size, int sl) { - int h = get_height(c, point_size); - return int(h*tan((slant+sl)*PI/180.0) + .5); + int h = get_height(g, point_size); + return int(h * tan((slant + sl) * PI / 180.0) + .5); } -int font::contains(int c) +int font::contains(glyph *g) { - return c >= 0 && c < nindices && ch_index[c] >= 0; + int idx = glyph_to_index(g); + assert(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; + // If `nm' is a single letter `x', the glyph name is `\x'. + char buf[] = { '\\', '\0', '\0' }; + if (nm[1] == '\0') { + buf[1] = nm[0]; + nm = buf; + } + // 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() @@ -268,65 +329,158 @@ font_widths_cache::~font_widths_cache() a_delete width; } -int font::get_width(int c, int point_size) +int font::get_width(glyph *g, int point_size) { - assert(c >= 0 && c < nindices); - int i = ch_index[c]; - 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; + int idx = glyph_to_index(g); + assert(idx >= 0); + int real_size; + if (!zoom) + real_size = point_size; + else + { + if (point_size <= (INT_MAX - 500) / zoom) + real_size = (point_size * zoom + 500) / 1000; + else + real_size = int(point_size * double(zoom) / 1000.0 + .5); + } + if (idx < nindices && ch_index[idx] >= 0) { + // Explicitly enumerated glyph + int i = ch_index[idx]; + if (real_size == unitwidth || font::unscaled_charwidths) + return ch[i].width; + + if (!widths_cache) + widths_cache = new font_widths_cache(real_size, ch_size); + else if (widths_cache->point_size != real_size) { + font_widths_cache **p; + for (p = &widths_cache; *p; p = &(*p)->next) + if ((*p)->point_size == real_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(real_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 (real_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(int c, int point_size) +int font::get_height(glyph *g, int point_size) { - assert(c >= 0 && c < nindices && ch_index[c] >= 0); - return scale(ch[ch_index[c]].height, point_size); + int idx = glyph_to_index(g); + 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(int c, int point_size) +int font::get_depth(glyph *g, int point_size) { - assert(c >= 0 && c < nindices && ch_index[c] >= 0); - return scale(ch[ch_index[c]].depth, point_size); + int idx = glyph_to_index(g); + 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(int c, int point_size) +int font::get_italic_correction(glyph *g, int point_size) { - assert(c >= 0 && c < nindices && ch_index[c] >= 0); - return scale(ch[ch_index[c]].italic_correction, point_size); + int idx = glyph_to_index(g); + 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(int c, int point_size) +int font::get_left_italic_correction(glyph *g, int point_size) { - assert(c >= 0 && c < nindices && ch_index[c] >= 0); - return scale(ch[ch_index[c]].pre_math_space, point_size); + int idx = glyph_to_index(g); + 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(int c, int point_size) +int font::get_subscript_correction(glyph *g, int point_size) { - assert(c >= 0 && c < nindices && ch_index[c] >= 0); - return scale(ch[ch_index[c]].subscript_correction, point_size); + int idx = glyph_to_index(g); + 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(); +} + +void font::set_zoom(int factor) +{ + assert(factor >= 0); + if (factor == 1000) + zoom = 0; + else + zoom = factor; +} + +int font::get_zoom() +{ + return zoom; } int font::get_space_width(int point_size) @@ -334,33 +488,35 @@ int font::get_space_width(int point_size) return scale(space_width, point_size); } -font_kern_list::font_kern_list(int c1, int c2, int n, font_kern_list *p) -: i1(c1), i2(c2), amount(n), next(p) +font_kern_list::font_kern_list(glyph *g1, glyph *g2, int n, font_kern_list *p) +: glyph1(g1), glyph2(g2), amount(n), next(p) { } -inline int font::hash_kern(int i1, int i2) +inline int font::hash_kern(glyph *g1, glyph *g2) { - int n = ((i1 << 10) + i2) % KERN_HASH_TABLE_SIZE; + int n = ((glyph_to_index(g1) << 10) + glyph_to_index(g2)) + % KERN_HASH_TABLE_SIZE; return n < 0 ? -n : n; } -void font::add_kern(int i1, int i2, int amount) +void font::add_kern(glyph *g1, glyph *g2, int amount) { if (!kern_hash_table) { kern_hash_table = new font_kern_list *[int(KERN_HASH_TABLE_SIZE)]; for (int i = 0; i < KERN_HASH_TABLE_SIZE; i++) kern_hash_table[i] = 0; } - font_kern_list **p = kern_hash_table + hash_kern(i1, i2); - *p = new font_kern_list(i1, i2, amount, *p); + font_kern_list **p = kern_hash_table + hash_kern(g1, g2); + *p = new font_kern_list(g1, g2, amount, *p); } -int font::get_kern(int i1, int i2, int point_size) +int font::get_kern(glyph *g1, glyph *g2, int point_size) { if (kern_hash_table) { - for (font_kern_list *p = kern_hash_table[hash_kern(i1, i2)]; p; p = p->next) - if (i1 == p->i1 && i2 == p->i2) + for (font_kern_list *p = kern_hash_table[hash_kern(g1, g2)]; p; + p = p->next) + if (g1 == p->glyph1 && g2 == p->glyph2) return scale(p->amount, point_size); } return 0; @@ -371,16 +527,77 @@ int font::has_ligature(int mask) return mask & ligatures; } -int font::get_character_type(int c) +int font::get_character_type(glyph *g) { - assert(c >= 0 && c < nindices && ch_index[c] >= 0); - return ch[ch_index[c]].type; + int idx = glyph_to_index(g); + 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(int c) +int font::get_code(glyph *g) { - assert(c >= 0 && c < nindices && ch_index[c] >= 0); - return ch[ch_index[c]].code; + int idx = glyph_to_index(g); + 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); + } + // If `nm' is a single letter `x', the glyph name is `\x'. + char buf[] = { '\\', '\0', '\0' }; + if (nm[1] == '\0') { + buf[1] = nm[0]; + nm = buf; + } + // 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() @@ -393,10 +610,19 @@ const char *font::get_internal_name() return internalname; } -const char *font::get_special_device_encoding(int c) +const char *font::get_special_device_encoding(glyph *g) { - assert(c >= 0 && c < nindices && ch_index[c] >= 0); - return ch[ch_index[c]].special_device_coding; + int idx = glyph_to_index(g); + 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() @@ -465,8 +691,9 @@ void font::compact() } } -void font::add_entry(int idx, const font_char_metric &metric) +void font::add_entry(glyph *g, const font_char_metric &metric) { + int idx = glyph_to_index(g); assert(idx >= 0); if (idx >= nindices) alloc_ch_index(idx); @@ -478,8 +705,10 @@ void font::add_entry(int idx, const font_char_metric &metric) ch[ch_used++] = metric; } -void font::copy_entry(int new_index, int old_index) +void font::copy_entry(glyph *new_glyph, glyph *old_glyph) { + int new_index = glyph_to_index(new_glyph); + int old_index = glyph_to_index(old_glyph); assert(new_index >= 0 && old_index >= 0 && old_index < nindices); if (new_index >= nindices) alloc_ch_index(new_index); @@ -566,6 +795,13 @@ again: int font::load(int *not_found, int head_only) { + if (strcmp(name, "DESC") == 0) { + if (not_found) + *not_found = 1; + else + error("`DESC' is not a valid font file name"); + return 0; + } char *path; FILE *fp; if ((fp = open_file(name, &path)) == NULL) { @@ -581,8 +817,8 @@ int font::load(int *not_found, int head_only) 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) { @@ -591,7 +827,7 @@ int font::load(int *not_found, int head_only) p = strtok(0, WS); int n; if (p == 0 || sscanf(p, "%d", &n) != 1 || n <= 0) { - t.error("bad argument for spacewidth command"); + t.error("bad argument for `spacewidth' command"); return 0; } space_width = n; @@ -600,7 +836,7 @@ int font::load(int *not_found, int head_only) p = strtok(0, WS); double n; if (p == 0 || sscanf(p, "%lf", &n) != 1 || n >= 90.0 || n <= -90.0) { - t.error("bad argument for slant command", p); + t.error("bad argument for `slant' command", p); return 0; } slant = n; @@ -629,7 +865,7 @@ int font::load(int *not_found, int head_only) else if (strcmp(p, "internalname") == 0) { p = strtok(0, WS); if (!p) { - t.error("`internalname command requires argument"); + t.error("`internalname' command requires argument"); return 0; } internalname = new char[strlen(p) + 1]; @@ -646,164 +882,163 @@ int font::load(int *not_found, int head_only) else break; } - 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; - } - int i1 = name_to_index(c1); - if (i1 < 0) { - t.error("invalid character `%1'", c1); - return 0; - } - int i2 = name_to_index(c2); - if (i2 < 0) { - t.error("invalid character `%1'", c2); - return 0; - } - add_kern(i1, i2, n); - } + if (p == 0) { + if (!is_unicode) { + t.error("missing charset command"); + return 0; } - else if (strcmp(command, "charset") == 0) { - had_charset = 1; - int last_index = -1; - 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_index == -1) { - t.error("first charset entry is duplicate"); - return 0; - } - if (strcmp(nm, "---") == 0) { - t.error("unnamed character cannot be duplicate"); - return 0; - } - int idx = name_to_index(nm); - if (idx < 0) { - t.error("invalid character `%1'", nm); - return 0; + } else { + char *command = p; + t.skip_comments = 0; + while (command) { + if (strcmp(command, "kernpairs") == 0) { + if (head_only) + return 1; + for (;;) { + if (!t.next()) { + command = 0; + break; } - copy_entry(idx, last_index); - } - 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) { + if (head_only) + return 1; + 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_index = number_to_index(metric.code); - add_entry(last_index, 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_index = name_to_index(nm); - if (last_index < 0) { - t.error("invalid character `%1'", nm); + 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; } - add_entry(last_index, metric); - copy_entry(number_to_index(metric.code), last_index); + 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_index == -1) { - 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) { - t.error("missing charset command"); + 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(); + if (space_width == 0) { + if (zoom) + space_width = scale_round(unitwidth, res, 72 * 3 * sizescale, zoom); + else + space_width = scale_round(unitwidth, res, 72 * 3 * sizescale); + } return 1; } @@ -993,6 +1228,8 @@ int font::load_desc() 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 --git a/contrib/groff/src/libs/libgroff/fontfile.cpp b/contrib/groff/src/libs/libgroff/fontfile.cpp index 18d0b86066..543f406bd4 100644 --- a/contrib/groff/src/libs/libgroff/fontfile.cpp +++ b/contrib/groff/src/libs/libgroff/fontfile.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2004, 2006, + 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" @@ -47,6 +47,7 @@ int font::tcommand = 0; 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; diff --git a/contrib/groff/src/libs/libgroff/geometry.cpp b/contrib/groff/src/libs/libgroff/geometry.cpp index 7d96e5c210..b43bed0925 100644 --- a/contrib/groff/src/libs/libgroff/geometry.cpp +++ b/contrib/groff/src/libs/libgroff/geometry.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, + 2009 Free Software Foundation, Inc. Written by Gaius Mulley using adjust_arc_center() from printer.cpp, written by James Clark. @@ -8,17 +9,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include diff --git a/contrib/groff/src/libs/libgroff/glyphuni.cpp b/contrib/groff/src/libs/libgroff/glyphuni.cpp index 4cd4917e60..95480c6322 100644 --- a/contrib/groff/src/libs/libgroff/glyphuni.cpp +++ b/contrib/groff/src/libs/libgroff/glyphuni.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 2002, 2003, 2004 +/* Copyright (C) 2002, 2003, 2004, 2006, 2009 Free Software Foundation, Inc. Written by Werner Lemberg @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" #include "stringclass.h" @@ -34,6 +33,9 @@ implement_ptable(glyph_to_unicode) PTABLE(glyph_to_unicode) glyph_to_unicode_table; +// The entries commented out in the table below can't be used in glyph +// names. + struct S { const char *key; const char *value; @@ -114,7 +116,6 @@ struct S { { "_", "005F" }, { "ru", "005F" }, { "ul", "005F" }, -//{ "\\`", "0060" }, { "ga", "0060" }, { "a", "0061" }, { "b", "0062" }, @@ -170,7 +171,8 @@ struct S { { "Fo", "00AB" }, { "no", "00AC" }, { "tno", "00AC" }, - { "shc", "00AD" }, + // The soft hypen U+00AD is meaningful only in the input file, + // not in the output. { "rg", "00AE" }, { "a-", "00AF" }, { "de", "00B0" }, @@ -179,7 +181,6 @@ struct S { { "S2", "00B2" }, { "S3", "00B3" }, { "aa", "00B4" }, -//{ "\\'", "00B4" }, { "mc", "00B5" }, { "ps", "00B6" }, { "pc", "00B7" }, @@ -323,14 +324,20 @@ struct S { { "*s", "03C3" }, { "*t", "03C4" }, { "*u", "03C5" }, - { "*f", "03C6" }, + // the curly phi variant + { "+f", "03C6" }, { "*x", "03C7" }, { "*q", "03C8" }, { "*w", "03C9" }, { "+h", "03D1" }, - { "+f", "03D5" }, + // the stroked phi variant + { "*f", "03D5" }, { "+p", "03D6" }, { "+e", "03F5" }, + // `-' and `hy' denote a HYPHEN, usually a glyph with a smaller width than + // the MINUS sign. Users who are viewing broken man pages that assume + // that `-' denotes a U+002D character can either fix the broken man pages + // or apply the workaround described in the PROBLEMS file. { "-", "2010" }, { "hy", "2010" }, { "en", "2013" }, @@ -390,10 +397,15 @@ struct S { { "product", "220F" }, { "coproduct", "2210" }, { "sum", "2211" }, -//{ "\\-", "2212" }, + // `mi' and `\-' represent a MINUS sign. But it is used in many man pages + // to denote the U+002D character that introduces a command-line option. + // For devices that support copy&paste, such as devhtml and devutf8, the + // user can apply the workaround described in the PROBLEMS file. + { "\\-", "2212" }, { "mi", "2212" }, { "-+", "2213" }, { "**", "2217" }, + { "sqrt", "221A" }, { "sr", "221A" }, { "pt", "221D" }, { "if", "221E" }, @@ -416,8 +428,8 @@ struct S { { "ne", "2262" }, { "<=", "2264" }, { ">=", "2265" }, - { ">>", "226A" }, - { "<<", "226B" }, + { "<<", "226A" }, + { ">>", "226B" }, { "sb", "2282" }, { "sp", "2283" }, { "nb", "2284" }, @@ -478,6 +490,18 @@ struct S { { "HE", "2665" }, { "DI", "2666" }, { "OK", "2713" }, + // The `left angle bracket' and `right angle bracket' could be mapped to + // either U+2329,U+232A or U+3008,U+3009 or U+27E8,U+27E9. But the first + // and second possibility are double-width characters (see Unicode's + // `DerivedEastAsianWidth.txt' file) and are therefore not suitable for + // general use, whereas the third possibility is single-width. + // + // The devhtml device overrides this mapping, because + // + // http://www.w3.org/TR/html401/sgml/entities.html + // + // says that in HTML, `⟨' and `⟩' are U+2329,U+232A, + // respectively. { "la", "27E8" }, { "ra", "27E9" }, }; @@ -487,7 +511,8 @@ static struct glyph_to_unicode_init { glyph_to_unicode_init(); } _glyph_to_unicode_init; -glyph_to_unicode_init::glyph_to_unicode_init() { +glyph_to_unicode_init::glyph_to_unicode_init() +{ for (unsigned int i = 0; i < sizeof(glyph_to_unicode_list)/sizeof(glyph_to_unicode_list[0]); i++) { diff --git a/contrib/groff/src/libs/libgroff/htmlhint.cpp b/contrib/groff/src/libs/libgroff/htmlhint.cpp index 6ade0777d2..99b6651104 100644 --- a/contrib/groff/src/libs/libgroff/htmlhint.cpp +++ b/contrib/groff/src/libs/libgroff/htmlhint.cpp @@ -1,21 +1,21 @@ -/* Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001, 2002, 2008, 2009 + Free Software Foundation, Inc. Written by Gaius Mulley (gaius@glam.ac.uk) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" @@ -33,11 +33,13 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ * This string is intercepted by pre-grohtml and substituted for * the image name and suppression escapes. * - * pre-html runs troff twice, once with -Thtml and once with -Tps. - * troff -Thtml device driver emits a tag - * and the postscript device driver works out the min/max limits - * of the graphic region. These region limits are read by pre-html - * and an image is generated via troff -Tps -> gs -> png + * pre-html runs troff twice, once with -Thtml (or -Txhtml) and once + * with -Tps. `troff -Thtml' (and `troff -Txhtml') emits a + * tag and the postscript device driver works out + * the min/max limits of the graphic region. These region limits are + * read by pre-html and an image is generated via + * + * troff -Tps -> gs -> png */ /* diff --git a/contrib/groff/src/libs/libgroff/hypot.cpp b/contrib/groff/src/libs/libgroff/hypot.cpp index 6d2606d8f7..cbd6160134 100644 --- a/contrib/groff/src/libs/libgroff/hypot.cpp +++ b/contrib/groff/src/libs/libgroff/hypot.cpp @@ -1,20 +1,18 @@ -/* Copyright (C) 2005 Free Software Foundation, Inc. +/* Copyright (C) 2005, 2009 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. +published by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ +You should have received a copy of the GNU Library General Public License +along with this program. If not, see . */ #ifdef HAVE_CONFIG_H #include diff --git a/contrib/groff/src/libs/libgroff/iftoa.c b/contrib/groff/src/libs/libgroff/iftoa.c index d1751c57ce..5a58a994f9 100644 --- a/contrib/groff/src/libs/libgroff/iftoa.c +++ b/contrib/groff/src/libs/libgroff/iftoa.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2004, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -6,17 +6,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #define INT_DIGITS 19 /* enough for 64-bit integer */ diff --git a/contrib/groff/src/libs/libgroff/invalid.cpp b/contrib/groff/src/libs/libgroff/invalid.cpp index 959aef9381..6c56196a6f 100644 --- a/contrib/groff/src/libs/libgroff/invalid.cpp +++ b/contrib/groff/src/libs/libgroff/invalid.cpp @@ -1,21 +1,20 @@ -/* Copyright (C) 2000, 2002 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2002, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" diff --git a/contrib/groff/src/libs/libgroff/itoa.c b/contrib/groff/src/libs/libgroff/itoa.c index 85fb68bba7..a745c3abaa 100644 --- a/contrib/groff/src/libs/libgroff/itoa.c +++ b/contrib/groff/src/libs/libgroff/itoa.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2002, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2002, 2004, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -6,17 +6,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #define INT_DIGITS 19 /* enough for 64 bit integer */ #define UINT_DIGITS 20 diff --git a/contrib/groff/src/libs/libgroff/lf.cpp b/contrib/groff/src/libs/libgroff/lf.cpp index 3254fcf157..cce32943b9 100644 --- a/contrib/groff/src/libs/libgroff/lf.cpp +++ b/contrib/groff/src/libs/libgroff/lf.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2004, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include diff --git a/contrib/groff/src/libs/libgroff/localcharset.c b/contrib/groff/src/libs/libgroff/localcharset.c new file mode 100644 index 0000000000..482e28e5d8 --- /dev/null +++ b/contrib/groff/src/libs/libgroff/localcharset.c @@ -0,0 +1,461 @@ +/* Determine a canonical name for the current locale's character encoding. + + Copyright (C) 2000-2006, 2008 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +/* Written by Bruno Haible . */ + +#include + +/* Specification. */ +#include "localcharset.h" + +#include +#include +#include +#include + +#if defined _WIN32 || defined __WIN32__ +# define WIN32_NATIVE +#endif + +#if defined __EMX__ +/* Assume EMX program runs on OS/2, even if compiled under DOS. */ +# ifndef OS2 +# define OS2 +# endif +#endif + +#if !defined WIN32_NATIVE +# if HAVE_LANGINFO_CODESET +# include +# else +# if 0 /* see comment below */ +# include +# endif +# endif +# ifdef __CYGWIN__ +# define WIN32_LEAN_AND_MEAN +# include +# endif +#elif defined WIN32_NATIVE +# define WIN32_LEAN_AND_MEAN +# include +#endif +#if defined OS2 +# define INCL_DOS +# include +#endif + +#if ENABLE_RELOCATABLE +# include "relocatable.h" +#else +# define relocate(pathname) (pathname) +#endif + +/* Get LIBDIR. */ +#ifndef LIBDIR +# include "configmake.h" +#endif + +#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ + /* Win32, Cygwin, OS/2, DOS */ +# define ISSLASH(C) ((C) == '/' || (C) == '\\') +#endif + +#ifndef DIRECTORY_SEPARATOR +# define DIRECTORY_SEPARATOR '/' +#endif + +#ifndef ISSLASH +# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) +#endif + +#if HAVE_DECL_GETC_UNLOCKED +# undef getc +# define getc getc_unlocked +#endif + +/* The following static variable is declared 'volatile' to avoid a + possible multithread problem in the function get_charset_aliases. If we + are running in a threaded environment, and if two threads initialize + 'charset_aliases' simultaneously, both will produce the same value, + and everything will be ok if the two assignments to 'charset_aliases' + are atomic. But I don't know what will happen if the two assignments mix. */ +#if __STDC__ != 1 +# define volatile /* empty */ +#endif +/* Pointer to the contents of the charset.alias file, if it has already been + read, else NULL. Its format is: + ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ +static const char * volatile charset_aliases; + +/* Return a pointer to the contents of the charset.alias file. */ +static const char * +get_charset_aliases (void) +{ + const char *cp; + + cp = charset_aliases; + if (cp == NULL) + { +#if !(defined VMS || defined WIN32_NATIVE || defined __CYGWIN__) + FILE *fp; + const char *dir; + const char *base = "charset.alias"; + char *file_name; + + /* Make it possible to override the charset.alias location. This is + necessary for running the testsuite before "make install". */ + dir = getenv ("CHARSETALIASDIR"); + if (dir == NULL || dir[0] == '\0') + dir = relocate (LIBDIR); + + /* Concatenate dir and base into freshly allocated file_name. */ + { + size_t dir_len = strlen (dir); + size_t base_len = strlen (base); + int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); + file_name = (char *) malloc (dir_len + add_slash + base_len + 1); + if (file_name != NULL) + { + memcpy (file_name, dir, dir_len); + if (add_slash) + file_name[dir_len] = DIRECTORY_SEPARATOR; + memcpy (file_name + dir_len + add_slash, base, base_len + 1); + } + } + + if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL) + /* Out of memory or file not found, treat it as empty. */ + cp = ""; + else + { + /* Parse the file's contents. */ + char *res_ptr = NULL; + size_t res_size = 0; + + for (;;) + { + int c; + char buf1[50+1]; + char buf2[50+1]; + size_t l1, l2; + char *old_res_ptr; + + c = getc (fp); + if (c == EOF) + break; + if (c == '\n' || c == ' ' || c == '\t') + continue; + if (c == '#') + { + /* Skip comment, to end of line. */ + do + c = getc (fp); + while (!(c == EOF || c == '\n')); + if (c == EOF) + break; + continue; + } + ungetc (c, fp); + if (fscanf (fp, "%50s %50s", buf1, buf2) < 2) + break; + l1 = strlen (buf1); + l2 = strlen (buf2); + old_res_ptr = res_ptr; + if (res_size == 0) + { + res_size = l1 + 1 + l2 + 1; + res_ptr = (char *) malloc (res_size + 1); + } + else + { + res_size += l1 + 1 + l2 + 1; + res_ptr = (char *) realloc (res_ptr, res_size + 1); + } + if (res_ptr == NULL) + { + /* Out of memory. */ + res_size = 0; + if (old_res_ptr != NULL) + free (old_res_ptr); + break; + } + strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); + strcpy (res_ptr + res_size - (l2 + 1), buf2); + } + fclose (fp); + if (res_size == 0) + cp = ""; + else + { + *(res_ptr + res_size) = '\0'; + cp = res_ptr; + } + } + + if (file_name != NULL) + free (file_name); + +#else + +# if defined VMS + /* To avoid the troubles of an extra file charset.alias_vms in the + sources of many GNU packages, simply inline the aliases here. */ + /* The list of encodings is taken from the OpenVMS 7.3-1 documentation + "Compaq C Run-Time Library Reference Manual for OpenVMS systems" + section 10.7 "Handling Different Character Sets". */ + cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" + "ISO8859-2" "\0" "ISO-8859-2" "\0" + "ISO8859-5" "\0" "ISO-8859-5" "\0" + "ISO8859-7" "\0" "ISO-8859-7" "\0" + "ISO8859-8" "\0" "ISO-8859-8" "\0" + "ISO8859-9" "\0" "ISO-8859-9" "\0" + /* Japanese */ + "eucJP" "\0" "EUC-JP" "\0" + "SJIS" "\0" "SHIFT_JIS" "\0" + "DECKANJI" "\0" "DEC-KANJI" "\0" + "SDECKANJI" "\0" "EUC-JP" "\0" + /* Chinese */ + "eucTW" "\0" "EUC-TW" "\0" + "DECHANYU" "\0" "DEC-HANYU" "\0" + "DECHANZI" "\0" "GB2312" "\0" + /* Korean */ + "DECKOREAN" "\0" "EUC-KR" "\0"; +# endif + +# if defined WIN32_NATIVE || defined __CYGWIN__ + /* To avoid the troubles of installing a separate file in the same + directory as the DLL and of retrieving the DLL's directory at + runtime, simply inline the aliases here. */ + + cp = "CP936" "\0" "GBK" "\0" + "CP1361" "\0" "JOHAB" "\0" + "CP20127" "\0" "ASCII" "\0" + "CP20866" "\0" "KOI8-R" "\0" + "CP20936" "\0" "GB2312" "\0" + "CP21866" "\0" "KOI8-RU" "\0" + "CP28591" "\0" "ISO-8859-1" "\0" + "CP28592" "\0" "ISO-8859-2" "\0" + "CP28593" "\0" "ISO-8859-3" "\0" + "CP28594" "\0" "ISO-8859-4" "\0" + "CP28595" "\0" "ISO-8859-5" "\0" + "CP28596" "\0" "ISO-8859-6" "\0" + "CP28597" "\0" "ISO-8859-7" "\0" + "CP28598" "\0" "ISO-8859-8" "\0" + "CP28599" "\0" "ISO-8859-9" "\0" + "CP28605" "\0" "ISO-8859-15" "\0" + "CP38598" "\0" "ISO-8859-8" "\0" + "CP51932" "\0" "EUC-JP" "\0" + "CP51936" "\0" "GB2312" "\0" + "CP51949" "\0" "EUC-KR" "\0" + "CP51950" "\0" "EUC-TW" "\0" + "CP54936" "\0" "GB18030" "\0" + "CP65001" "\0" "UTF-8" "\0"; +# endif +#endif + + charset_aliases = cp; + } + + return cp; +} + +/* Determine the current locale's character encoding, and canonicalize it + into one of the canonical names listed in config.charset. + The result must not be freed; it is statically allocated. + If the canonical name cannot be determined, the result is a non-canonical + name. */ + +#ifdef STATIC +STATIC +#endif +const char * +locale_charset (void) +{ + const char *codeset; + const char *aliases; + +#if !(defined WIN32_NATIVE || defined OS2) + +# if HAVE_LANGINFO_CODESET + + /* Most systems support nl_langinfo (CODESET) nowadays. */ + codeset = nl_langinfo (CODESET); + +# ifdef __CYGWIN__ + /* Cygwin 2006 does not have locales. nl_langinfo (CODESET) always + returns "US-ASCII". As long as this is not fixed, return the suffix + of the locale name from the environment variables (if present) or + the codepage as a number. */ + if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0) + { + const char *locale; + static char buf[2 + 10 + 1]; + + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + if (locale != NULL && locale[0] != '\0') + { + /* If the locale name contains an encoding after the dot, return + it. */ + const char *dot = strchr (locale, '.'); + + if (dot != NULL) + { + const char *modifier; + + dot++; + /* Look for the possible @... trailer and remove it, if any. */ + modifier = strchr (dot, '@'); + if (modifier == NULL) + return dot; + if (modifier - dot < sizeof (buf)) + { + memcpy (buf, dot, modifier - dot); + buf [modifier - dot] = '\0'; + return buf; + } + } + } + + /* Woe32 has a function returning the locale's codepage as a number. */ + sprintf (buf, "CP%u", GetACP ()); + codeset = buf; + } +# endif + +# else + + /* On old systems which lack it, use setlocale or getenv. */ + const char *locale = NULL; + + /* But most old systems don't have a complete set of locales. Some + (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't + use setlocale here; it would return "C" when it doesn't support the + locale name the user has set. */ +# if 0 + locale = setlocale (LC_CTYPE, NULL); +# endif + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + } + + /* On some old systems, one used to set locale = "iso8859_1". On others, + you set it to "language_COUNTRY.charset". In any case, we resolve it + through the charset.alias file. */ + codeset = locale; + +# endif + +#elif defined WIN32_NATIVE + + static char buf[2 + 10 + 1]; + + /* Woe32 has a function returning the locale's codepage as a number. */ + sprintf (buf, "CP%u", GetACP ()); + codeset = buf; + +#elif defined OS2 + + const char *locale; + static char buf[2 + 10 + 1]; + ULONG cp[3]; + ULONG cplen; + + /* Allow user to override the codeset, as set in the operating system, + with standard language environment variables. */ + locale = getenv ("LC_ALL"); + if (locale == NULL || locale[0] == '\0') + { + locale = getenv ("LC_CTYPE"); + if (locale == NULL || locale[0] == '\0') + locale = getenv ("LANG"); + } + if (locale != NULL && locale[0] != '\0') + { + /* If the locale name contains an encoding after the dot, return it. */ + const char *dot = strchr (locale, '.'); + + if (dot != NULL) + { + const char *modifier; + + dot++; + /* Look for the possible @... trailer and remove it, if any. */ + modifier = strchr (dot, '@'); + if (modifier == NULL) + return dot; + if (modifier - dot < sizeof (buf)) + { + memcpy (buf, dot, modifier - dot); + buf [modifier - dot] = '\0'; + return buf; + } + } + + /* Resolve through the charset.alias file. */ + codeset = locale; + } + else + { + /* OS/2 has a function returning the locale's codepage as a number. */ + if (DosQueryCp (sizeof (cp), cp, &cplen)) + codeset = ""; + else + { + sprintf (buf, "CP%u", cp[0]); + codeset = buf; + } + } + +#endif + + if (codeset == NULL) + /* The canonical name cannot be determined. */ + codeset = ""; + + /* Resolve alias. */ + for (aliases = get_charset_aliases (); + *aliases != '\0'; + aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) + if (strcmp (codeset, aliases) == 0 + || (aliases[0] == '*' && aliases[1] == '\0')) + { + codeset = aliases + strlen (aliases) + 1; + break; + } + + /* Don't return an empty string. GNU libc and GNU libiconv interpret + the empty string as denoting "the locale's character encoding", + thus GNU libiconv would call this function a second time. */ + if (codeset[0] == '\0') + codeset = "ASCII"; + + return codeset; +} diff --git a/contrib/groff/src/libs/libgroff/macropath.cpp b/contrib/groff/src/libs/libgroff/macropath.cpp index 2c09fd7662..69b400969f 100644 --- a/contrib/groff/src/libs/libgroff/macropath.cpp +++ b/contrib/groff/src/libs/libgroff/macropath.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" #include "searchpath.h" diff --git a/contrib/groff/src/libs/libgroff/make-uniuni b/contrib/groff/src/libs/libgroff/make-uniuni new file mode 100644 index 0000000000..9e660c5f18 --- /dev/null +++ b/contrib/groff/src/libs/libgroff/make-uniuni @@ -0,0 +1,164 @@ +#! /bin/sh +# +# make-uniuni -- script for creating the file uniuni.cpp +# +# Copyright (C) 2005, 2006, 2009 +# Free Software Foundation, Inc. +# Written by Werner Lemberg +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# +# usage: +# +# make-uniuni < UnicodeData.txt > uniuni.cpp +# +# `UnicodeData.txt' is the central database file from the Unicode standard. +# Unfortunately, it doesn't contain a version number which must be thus +# provided manually as a parameter to the filter. +# +# This program needs a C preprocessor. +# + +CPP=cpp + +prog="$0" + +if test $# -ne 1; then + echo "usage: $0 < UnicodeData.txt > uniuni.cpp" + exit 1 +fi + +version_string="$1" + +# Remove ranges and control characters, +# then extract the decomposition field, +# then remove lines without decomposition, +# then remove all compatibility decompositions. +sed -e '/^[^;]*; $$1 + +# Prepare input for running cpp. +cat $$1 \ +| sed -e 's/^\([^;]*\);/#define \1 /' \ + -e 's/ / u/g' > $$2 +cat $$1 \ +| sed -e 's/^\([^;]*\);.*$/\1 u\1/' >> $$2 + +# Run C preprocessor to recursively decompose. +$CPP $$2 $$3 + +# Convert it back to original format. +cat $$3 \ +| sed -e '/#/d' \ + -e '/^$/d' \ + -e 's/ \+/ /g' \ + -e 's/ *$//' \ + -e 's/u//g' \ + -e 's/^\([^ ]*\) /\1;/' > $$4 + +# Write preamble. +cat < + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ + +// This code has been algorithmically derived from the file +// UnicodeData.txt, version $version_string, available from unicode.org, +// on `date '+%Y-%m-%d'`. + +#include "lib.h" +#include "stringclass.h" +#include "ptable.h" + +#include "unicode.h" + +struct unicode_decompose { + char *value; +}; + +declare_ptable(unicode_decompose) +implement_ptable(unicode_decompose) + +PTABLE(unicode_decompose) unicode_decompose_table; + +// the first digit in the composite string gives the number of composites + +struct S { + const char *key; + const char *value; +} unicode_decompose_list[] = { +END + +# Emit Unicode data. +cat $$4 \ +| sed -e 's/ /_/g' \ + -e 's/\(.*\);\(.*_.*_.*_.*\)$/ { "\1", "4\2" },/' \ + -e 's/\(.*\);\(.*_.*_.*\)$/ { "\1", "3\2" },/' \ + -e 's/\(.*\);\(.*_.*\)$/ { "\1", "2\2" },/' \ + -e 's/\(.*\);\(.*\)$/ { "\1", "1\2" },/' + +# Write postamble. +cat <value = (char *)unicode_decompose_list[i].value; + unicode_decompose_table.define(unicode_decompose_list[i].key, dec); + } +} + +const char *decompose_unicode(const char *s) +{ + unicode_decompose *result = unicode_decompose_table.lookup(s); + return result ? result->value : 0; +} +END + + +# Remove temporary files. +rm $$1 $$2 $$3 $$4 + +# EOF diff --git a/contrib/groff/src/libs/libgroff/matherr.c b/contrib/groff/src/libs/libgroff/matherr.c index 2a65e18529..c02ead1584 100644 --- a/contrib/groff/src/libs/libgroff/matherr.c +++ b/contrib/groff/src/libs/libgroff/matherr.c @@ -1,21 +1,21 @@ -/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #ifdef HAVE_CONFIG_H #include diff --git a/contrib/groff/src/libs/libgroff/maxfilename.cpp b/contrib/groff/src/libs/libgroff/maxfilename.cpp index 9215cd921b..430bd7544e 100644 --- a/contrib/groff/src/libs/libgroff/maxfilename.cpp +++ b/contrib/groff/src/libs/libgroff/maxfilename.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1992, 2001, 2003, 2005 Free Software Foundation, Inc. +/* Copyright (C) 1992, 2001, 2003, 2005, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ /* file_name_max(dir) does the same as pathconf(dir, _PC_NAME_MAX) */ diff --git a/contrib/groff/src/libs/libgroff/mksdir.cpp b/contrib/groff/src/libs/libgroff/mksdir.cpp index 472bd9e291..36bedf9653 100644 --- a/contrib/groff/src/libs/libgroff/mksdir.cpp +++ b/contrib/groff/src/libs/libgroff/mksdir.cpp @@ -1,21 +1,20 @@ -/* Copyright (C) 2001 Free Software Foundation, Inc. +/* Copyright (C) 2001, 2009 Free Software Foundation, Inc. Written by Werner Lemberg (wl@gnu.org) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ /* This file is heavily based on the file mkstemp.c which is part of the diff --git a/contrib/groff/src/libs/libgroff/nametoindex.cpp b/contrib/groff/src/libs/libgroff/nametoindex.cpp index e4dacff2ba..31c3590e5f 100644 --- a/contrib/groff/src/libs/libgroff/nametoindex.cpp +++ b/contrib/groff/src/libs/libgroff/nametoindex.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2006, + 2008, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" @@ -28,23 +28,42 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "error.h" #include "font.h" #include "ptable.h" +#include "itable.h" -declare_ptable(int) -implement_ptable(int) +// Every glyphinfo is actually a charinfo. +class charinfo : glyph { +public: + const char *name; // The glyph name, or NULL. + friend class character_indexer; +}; + +// PTABLE(charinfo) is a hash table mapping `const char *' to `charinfo *'. +declare_ptable(charinfo) +implement_ptable(charinfo) +// ITABLE(charinfo) is a hash table mapping `int >= 0' to `charinfo *'. +declare_itable(charinfo) +implement_itable(charinfo) + +// This class is as a registry storing all named and numbered glyphs known +// so far, and assigns a unique index to each glyph. class character_indexer { public: character_indexer(); ~character_indexer(); - int ascii_char_index(unsigned char); - int named_char_index(const char *); - int numbered_char_index(int); + // --------------------- Lookup or creation of a glyph. + glyph *ascii_char_glyph(unsigned char); + glyph *named_char_glyph(const char *); + glyph *numbered_char_glyph(int); private: + int next_index; // Number of glyphs already allocated. + PTABLE(charinfo) table; // Table mapping name to glyph. + glyph *ascii_glyph[256]; // Shorthand table for looking up "charNNN" + // glyphs. + ITABLE(charinfo) ntable; // Table mapping number to glyph. enum { NSMALL = 256 }; - int next_index; - int ascii_index[256]; - int small_number_index[NSMALL]; - PTABLE(int) table; + glyph *small_number_glyph[NSMALL]; // Shorthand table for looking up + // numbered glyphs with small numbers. }; character_indexer::character_indexer() @@ -52,66 +71,93 @@ character_indexer::character_indexer() { int i; for (i = 0; i < 256; i++) - ascii_index[i] = -1; + ascii_glyph[i] = UNDEFINED_GLYPH; for (i = 0; i < NSMALL; i++) - small_number_index[i] = -1; + small_number_glyph[i] = UNDEFINED_GLYPH; } character_indexer::~character_indexer() { } -int character_indexer::ascii_char_index(unsigned char c) +glyph *character_indexer::ascii_char_glyph(unsigned char c) { - if (ascii_index[c] < 0) - ascii_index[c] = next_index++; - return ascii_index[c]; + if (ascii_glyph[c] == UNDEFINED_GLYPH) { + char buf[4+3+1]; + memcpy(buf, "char", 4); + strcpy(buf + 4, i_to_a(c)); + charinfo *ci = new charinfo; + ci->index = next_index++; + ci->number = -1; + ci->name = strsave(buf); + ascii_glyph[c] = ci; + } + return ascii_glyph[c]; } -int character_indexer::numbered_char_index(int n) +inline glyph *character_indexer::named_char_glyph(const char *s) { - if (n >= 0 && n < NSMALL) { - if (small_number_index[n] < 0) - small_number_index[n] = next_index++; - return small_number_index[n]; + // Glyphs with name `charNNN' are only stored in ascii_glyph[], not + // in the table. Therefore treat them specially here. + if (s[0] == 'c' && s[1] == 'h' && s[2] == 'a' && s[3] == 'r') { + char *val; + long n = strtol(s + 4, &val, 10); + if (val != s + 4 && *val == '\0' && n >= 0 && n < 256) + return ascii_char_glyph((unsigned char)n); + } + charinfo *ci = table.lookupassoc(&s); + if (ci == NULL) { + ci = new charinfo[1]; + ci->index = next_index++; + ci->number = -1; + ci->name = table.define(s, ci); } - // Not the most efficient possible implementation. - char buf[INT_DIGITS + 3]; - buf[0] = ' '; - strcpy(buf + 1, i_to_a(n)); - return named_char_index(buf); + return ci; } -int character_indexer::named_char_index(const char *s) +inline glyph *character_indexer::numbered_char_glyph(int n) { - int *np = table.lookup(s); - if (!np) { - np = new int[1]; - *np = next_index++; - table.define(s, np); + if (n >= 0 && n < NSMALL) { + if (small_number_glyph[n] == UNDEFINED_GLYPH) { + charinfo *ci = new charinfo; + ci->index = next_index++; + ci->number = n; + ci->name = NULL; + small_number_glyph[n] = ci; + } + return small_number_glyph[n]; + } + charinfo *ci = ntable.lookup(n); + if (ci == NULL) { + ci = new charinfo[1]; + ci->index = next_index++; + ci->number = n; + ci->name = NULL; + ntable.define(n, ci); } - return *np; + return ci; } static character_indexer indexer; -int font::number_to_index(int n) +glyph *number_to_glyph(int n) { - return indexer.numbered_char_index(n); + return indexer.numbered_char_glyph(n); } -int font::name_to_index(const char *s) +// troff overrides this function with its own version. + +glyph *name_to_glyph(const char *s) { assert(s != 0 && s[0] != '\0' && s[0] != ' '); if (s[1] == '\0') - return indexer.ascii_char_index(s[0]); - /* char128 and \200 are synonyms */ - if (s[0] == 'c' && s[1] == 'h' && s[2] == 'a' && s[3] == 'r') { - char *val; - long n = strtol(s + 4, &val, 10); - if (val != s + 4 && *val == '\0' && n >= 0 && n < 256) - return indexer.ascii_char_index((unsigned char)n); - } - return indexer.named_char_index(s); + // \200 and char128 are synonyms + return indexer.ascii_char_glyph(s[0]); + return indexer.named_char_glyph(s); } +const char *glyph_to_name(glyph *g) +{ + charinfo *ci = (charinfo *)g; // Every glyph is actually a charinfo. + return ci->name; +} diff --git a/contrib/groff/src/libs/libgroff/new.cpp b/contrib/groff/src/libs/libgroff/new.cpp index 84393fd8fb..5a3639a7f1 100644 --- a/contrib/groff/src/libs/libgroff/new.cpp +++ b/contrib/groff/src/libs/libgroff/new.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2003, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2003, 2004, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -6,17 +6,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" diff --git a/contrib/groff/src/libs/libgroff/paper.cpp b/contrib/groff/src/libs/libgroff/paper.cpp index 4f114f4c3c..27a7c8c680 100644 --- a/contrib/groff/src/libs/libgroff/paper.cpp +++ b/contrib/groff/src/libs/libgroff/paper.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 2002, 2003, 2004 +/* Copyright (C) 2002, 2003, 2004, 2009 Free Software Foundation, Inc. Written by Werner Lemberg (wl@gnu.org) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" #include "paper.h" diff --git a/contrib/groff/src/libs/libgroff/ptable.cpp b/contrib/groff/src/libs/libgroff/ptable.cpp index bde2c3cada..3703a66039 100644 --- a/contrib/groff/src/libs/libgroff/ptable.cpp +++ b/contrib/groff/src/libs/libgroff/ptable.cpp @@ -1,21 +1,21 @@ -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2006, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "ptable.h" #include "errarg.h" @@ -23,6 +23,8 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ unsigned long hash_string(const char *s) { + // This is the mythical Aho-Hopcroft-Ullman hash function. + // TODO: Improve. See http://www.haible.de/bruno/hashfunc.html assert(s != 0); unsigned long h = 0, g; while (*s != 0) { @@ -37,9 +39,9 @@ unsigned long hash_string(const char *s) } static const unsigned table_sizes[] = { -101, 503, 1009, 2003, 3001, 4001, 5003, 10007, 20011, 40009, -80021, 160001, 500009, 1000003, 2000003, 4000037, 8000009, -16000057, 32000011, 64000031, 128000003, 0 + 101, 503, 1009, 2003, 3001, 4001, 5003, 10007, 20011, 40009, + 80021, 160001, 500009, 1000003, 2000003, 4000037, 8000009, + 16000057, 32000011, 64000031, 128000003, 0 }; unsigned next_ptable_size(unsigned n) @@ -50,3 +52,5 @@ unsigned next_ptable_size(unsigned n) fatal("cannot expand table"); return *p; } + +// end of ptable.cpp diff --git a/contrib/groff/src/libs/libgroff/quotearg.c b/contrib/groff/src/libs/libgroff/quotearg.c index 0ab3dc6aa7..7f445af6ec 100644 --- a/contrib/groff/src/libs/libgroff/quotearg.c +++ b/contrib/groff/src/libs/libgroff/quotearg.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2004 +/* Copyright (C) 2004, 2009 Free Software Foundation, Inc. Written by: Jeff Conrad (jeff_conrad@msn.com) and Keith Marshall (keith.d.marshall@ntlworld.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include #include diff --git a/contrib/groff/src/libs/libgroff/ref-add.sin b/contrib/groff/src/libs/libgroff/ref-add.sin new file mode 100644 index 0000000000..bfa8e284a0 --- /dev/null +++ b/contrib/groff/src/libs/libgroff/ref-add.sin @@ -0,0 +1,29 @@ +# Add this package to a list of references stored in a text file. +# +# Copyright (C) 2000 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Written by Bruno Haible . +# +/^# Packages using this file: / { + s/# Packages using this file:// + ta + :a + s/ @PACKAGE@ / @PACKAGE@ / + tb + s/ $/ @PACKAGE@ / + :b + s/^/# Packages using this file:/ +} diff --git a/contrib/groff/src/libs/libgroff/ref-del.sin b/contrib/groff/src/libs/libgroff/ref-del.sin new file mode 100644 index 0000000000..3dc0569a39 --- /dev/null +++ b/contrib/groff/src/libs/libgroff/ref-del.sin @@ -0,0 +1,24 @@ +# Remove this package from a list of references stored in a text file. +# +# Copyright (C) 2000 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# Written by Bruno Haible . +# +/^# Packages using this file: / { + s/# Packages using this file:// + s/ @PACKAGE@ / / + s/^/# Packages using this file:/ +} diff --git a/contrib/groff/src/libs/libgroff/relocatable.h b/contrib/groff/src/libs/libgroff/relocatable.h new file mode 100644 index 0000000000..ac608fe947 --- /dev/null +++ b/contrib/groff/src/libs/libgroff/relocatable.h @@ -0,0 +1,2 @@ +#include "relocate.h" +#define relocate(path) relocatep(path) diff --git a/contrib/groff/src/libs/libgroff/spawnvp.c b/contrib/groff/src/libs/libgroff/spawnvp.c index 1848124f3b..d59a3f2692 100644 --- a/contrib/groff/src/libs/libgroff/spawnvp.c +++ b/contrib/groff/src/libs/libgroff/spawnvp.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2004 +/* Copyright (C) 2004, 2009 Free Software Foundation, Inc. Written by: Keith Marshall (keith.d.marshall@ntlworld.com) @@ -6,17 +6,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include "config.h" diff --git a/contrib/groff/src/libs/libgroff/string.cpp b/contrib/groff/src/libs/libgroff/string.cpp index 9be873c8ef..7ba24405b0 100644 --- a/contrib/groff/src/libs/libgroff/string.cpp +++ b/contrib/groff/src/libs/libgroff/string.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002 +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" @@ -309,7 +308,7 @@ void string::remove_spaces() if (len - 1 != l) { if (l >= 0) { len = l + 1; - char *tmp = new char[len]; + char *tmp = new char[sz]; memcpy(tmp, p, len); a_delete ptr; ptr = tmp; diff --git a/contrib/groff/src/libs/libgroff/strsave.cpp b/contrib/groff/src/libs/libgroff/strsave.cpp index 2db70737a1..5f6464f5da 100644 --- a/contrib/groff/src/libs/libgroff/strsave.cpp +++ b/contrib/groff/src/libs/libgroff/strsave.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include diff --git a/contrib/groff/src/libs/libgroff/symbol.cpp b/contrib/groff/src/libs/libgroff/symbol.cpp index 38e30712e6..7032041eee 100644 --- a/contrib/groff/src/libs/libgroff/symbol.cpp +++ b/contrib/groff/src/libs/libgroff/symbol.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2004, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" diff --git a/contrib/groff/src/libs/libgroff/tmpfile.cpp b/contrib/groff/src/libs/libgroff/tmpfile.cpp index fbc48c81d1..4924e7009a 100644 --- a/contrib/groff/src/libs/libgroff/tmpfile.cpp +++ b/contrib/groff/src/libs/libgroff/tmpfile.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2003 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2003, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" diff --git a/contrib/groff/src/libs/libgroff/tmpname.cpp b/contrib/groff/src/libs/libgroff/tmpname.cpp index 8d80f4ba33..fd5d893526 100644 --- a/contrib/groff/src/libs/libgroff/tmpname.cpp +++ b/contrib/groff/src/libs/libgroff/tmpname.cpp @@ -1,21 +1,20 @@ -/* Copyright (C) 2001, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2001, 2003, 2004, 2009 Free Software Foundation, Inc. Written by Werner Lemberg (wl@gnu.org) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ /* This file is heavily based on the function __gen_tempname() in the diff --git a/contrib/groff/src/libs/libgroff/unicode.cpp b/contrib/groff/src/libs/libgroff/unicode.cpp index 32810dfa80..abd8af15a2 100644 --- a/contrib/groff/src/libs/libgroff/unicode.cpp +++ b/contrib/groff/src/libs/libgroff/unicode.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 2002 +/* Copyright (C) 2002, 2009 Free Software Foundation, Inc. Written by Werner Lemberg @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" #include "cset.h" diff --git a/contrib/groff/src/libs/libgroff/uniglyph.cpp b/contrib/groff/src/libs/libgroff/uniglyph.cpp index ab6f531e44..9b6bba6594 100644 --- a/contrib/groff/src/libs/libgroff/uniglyph.cpp +++ b/contrib/groff/src/libs/libgroff/uniglyph.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 2002, 2003, 2004 +/* Copyright (C) 2002, 2003, 2004, 2006, 2009 Free Software Foundation, Inc. Written by Werner Lemberg @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" #include "stringclass.h" @@ -146,7 +145,6 @@ struct S { //{ "005F", "ru" }, { "005F", "ul" }, { "0060", "ga" }, -//{ "0060", "\\`" }, { "0061", "a" }, { "0061_0300", "`a" }, { "0061_0301", "'a" }, @@ -231,7 +229,8 @@ struct S { { "00AB", "Fo" }, { "00AC", "no" }, //{ "00AC", "tno" }, - { "00AD", "shc" }, + // In groff, U+00AD is an input character only; it is not mapped to + // a glyph but to `\%'. { "00AE", "rg" }, { "00AF", "a-" }, { "00B0", "de" }, @@ -240,7 +239,6 @@ struct S { { "00B2", "S2" }, { "00B3", "S3" }, { "00B4", "aa" }, -//{ "00B4", "\\'" }, { "00B5", "mc" }, { "00B6", "ps" }, { "00B7", "pc" }, @@ -487,7 +485,8 @@ static struct unicode_to_glyph_init { unicode_to_glyph_init(); } _unicode_to_glyph_init; -unicode_to_glyph_init::unicode_to_glyph_init() { +unicode_to_glyph_init::unicode_to_glyph_init() +{ for (unsigned int i = 0; i < sizeof(unicode_to_glyph_list)/sizeof(unicode_to_glyph_list[0]); i++) { diff --git a/contrib/groff/src/libs/libgroff/uniuni.cpp b/contrib/groff/src/libs/libgroff/uniuni.cpp index 61bc8334cc..5a0c180650 100644 --- a/contrib/groff/src/libs/libgroff/uniuni.cpp +++ b/contrib/groff/src/libs/libgroff/uniuni.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 2002, 2003, 2004 +/* Copyright (C) 2002, 2003, 2004, 2005, 2009 Free Software Foundation, Inc. Written by Werner Lemberg @@ -7,20 +7,20 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ // This code has been algorithmically derived from the file -// UnicodeData-3.2.0.txt, available from unicode.org. +// UnicodeData.txt, version 4.1.0, available from unicode.org, +// on 2005-12-09. #include "lib.h" #include "stringclass.h" @@ -1380,6 +1380,112 @@ struct S { { "FA68", "196E3" }, { "FA69", "197FF" }, { "FA6A", "1983B" }, + { "FA70", "14E26" }, + { "FA71", "151B5" }, + { "FA72", "15168" }, + { "FA73", "14F80" }, + { "FA74", "15145" }, + { "FA75", "15180" }, + { "FA76", "152C7" }, + { "FA77", "152FA" }, + { "FA78", "1559D" }, + { "FA79", "15555" }, + { "FA7A", "15599" }, + { "FA7B", "155E2" }, + { "FA7C", "1585A" }, + { "FA7D", "158B3" }, + { "FA7E", "15944" }, + { "FA7F", "15954" }, + { "FA80", "15A62" }, + { "FA81", "15B28" }, + { "FA82", "15ED2" }, + { "FA83", "15ED9" }, + { "FA84", "15F69" }, + { "FA85", "15FAD" }, + { "FA86", "160D8" }, + { "FA87", "1614E" }, + { "FA88", "16108" }, + { "FA89", "1618E" }, + { "FA8A", "16160" }, + { "FA8B", "161F2" }, + { "FA8C", "16234" }, + { "FA8D", "163C4" }, + { "FA8E", "1641C" }, + { "FA8F", "16452" }, + { "FA90", "16556" }, + { "FA91", "16674" }, + { "FA92", "16717" }, + { "FA93", "1671B" }, + { "FA94", "16756" }, + { "FA95", "16B79" }, + { "FA96", "16BBA" }, + { "FA97", "16D41" }, + { "FA98", "16EDB" }, + { "FA99", "16ECB" }, + { "FA9A", "16F22" }, + { "FA9B", "1701E" }, + { "FA9C", "1716E" }, + { "FA9D", "177A7" }, + { "FA9E", "17235" }, + { "FA9F", "172AF" }, + { "FAA0", "1732A" }, + { "FAA1", "17471" }, + { "FAA2", "17506" }, + { "FAA3", "1753B" }, + { "FAA4", "1761D" }, + { "FAA5", "1761F" }, + { "FAA6", "176CA" }, + { "FAA7", "176DB" }, + { "FAA8", "176F4" }, + { "FAA9", "1774A" }, + { "FAAA", "17740" }, + { "FAAB", "178CC" }, + { "FAAC", "17AB1" }, + { "FAAD", "17BC0" }, + { "FAAE", "17C7B" }, + { "FAAF", "17D5B" }, + { "FAB0", "17DF4" }, + { "FAB1", "17F3E" }, + { "FAB2", "18005" }, + { "FAB3", "18352" }, + { "FAB4", "183EF" }, + { "FAB5", "18779" }, + { "FAB6", "18941" }, + { "FAB7", "18986" }, + { "FAB8", "18996" }, + { "FAB9", "18ABF" }, + { "FABA", "18AF8" }, + { "FABB", "18ACB" }, + { "FABC", "18B01" }, + { "FABD", "18AFE" }, + { "FABE", "18AED" }, + { "FABF", "18B39" }, + { "FAC0", "18B8A" }, + { "FAC1", "18D08" }, + { "FAC2", "18F38" }, + { "FAC3", "19072" }, + { "FAC4", "19199" }, + { "FAC5", "19276" }, + { "FAC6", "1967C" }, + { "FAC7", "196E3" }, + { "FAC8", "19756" }, + { "FAC9", "197DB" }, + { "FACA", "197FF" }, + { "FACB", "1980B" }, + { "FACC", "1983B" }, + { "FACD", "19B12" }, + { "FACE", "19F9C" }, + { "FACF", "12284A" }, + { "FAD0", "122844" }, + { "FAD1", "1233D5" }, + { "FAD2", "13B9D" }, + { "FAD3", "14018" }, + { "FAD4", "14039" }, + { "FAD5", "125249" }, + { "FAD6", "125CD0" }, + { "FAD7", "127ED3" }, + { "FAD8", "19F43" }, + { "FAD9", "19F8E" }, { "FB1D", "205D9_05B4" }, { "FB1F", "205F2_05B7" }, { "FB2A", "205E9_05C1" }, @@ -1531,7 +1637,7 @@ struct S { { "2F865", "159D8" }, { "2F866", "15A66" }, { "2F867", "136EE" }, - { "2F868", "12136A" }, + { "2F868", "136FC" }, { "2F869", "15B08" }, { "2F86A", "15B3E" }, { "2F86B", "15B3E" }, @@ -1543,7 +1649,7 @@ struct S { { "2F871", "121B18" }, { "2F872", "15BFF" }, { "2F873", "15C06" }, - { "2F874", "15F33" }, + { "2F874", "15F53" }, { "2F875", "15C22" }, { "2F876", "13781" }, { "2F877", "15C60" }, @@ -1714,7 +1820,7 @@ struct S { { "2F91C", "17145" }, { "2F91D", "124263" }, { "2F91E", "1719C" }, - { "2F91F", "143AB" }, + { "2F91F", "1243AB" }, { "2F920", "17228" }, { "2F921", "17235" }, { "2F922", "17250" }, @@ -1778,7 +1884,7 @@ struct S { { "2F95C", "12597C" }, { "2F95D", "125AA7" }, { "2F95E", "125AA7" }, - { "2F95F", "17AAE" }, + { "2F95F", "17AEE" }, { "2F960", "14202" }, { "2F961", "125BAB" }, { "2F962", "17BC6" }, @@ -1874,7 +1980,7 @@ struct S { { "2F9BC", "18728" }, { "2F9BD", "1876B" }, { "2F9BE", "18786" }, - { "2F9BF", "14D57" }, + { "2F9BF", "145D7" }, { "2F9C0", "187E1" }, { "2F9C1", "18801" }, { "2F9C2", "145F9" }, @@ -1977,7 +2083,8 @@ static struct unicode_decompose_init { unicode_decompose_init(); } _unicode_decompose_init; -unicode_decompose_init::unicode_decompose_init() { +unicode_decompose_init::unicode_decompose_init() +{ for (unsigned int i = 0; i < sizeof(unicode_decompose_list)/sizeof(unicode_decompose_list[0]); i++) { diff --git a/contrib/groff/src/preproc/eqn/box.cpp b/contrib/groff/src/preproc/eqn/box.cpp index 953218a68d..5feba5910d 100644 --- a/contrib/groff/src/preproc/eqn/box.cpp +++ b/contrib/groff/src/preproc/eqn/box.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2004, 2007, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "eqn.h" #include "pbox.h" @@ -226,26 +225,39 @@ void set_gbfont(const char *s) void start_string() { - printf(".nr " COMPATIBLE_REG " \\n(.C\n"); - printf(".cp 0\n"); - printf(".ds " LINE_STRING "\n"); + if (output_format == troff) { + printf(".nr " COMPATIBLE_REG " \\n(.C\n"); + printf(".cp 0\n"); + printf(".ds " LINE_STRING "\n"); + } } void output_string() { - printf("\\*(" LINE_STRING "\n"); + if (output_format == troff) + printf("\\*(" LINE_STRING "\n"); + else if (output_format == mathml && !xhtml) + putchar('\n'); } void restore_compatibility() { - printf(".cp \\n(" COMPATIBLE_REG "\n"); + if (output_format == troff) + printf(".cp \\n(" COMPATIBLE_REG "\n"); } void do_text(const char *s) { - printf(".eo\n"); - printf(".as " LINE_STRING " \"%s\n", s); - printf(".ec\n"); + if (output_format == troff) { + printf(".eo\n"); + printf(".as " LINE_STRING " \"%s\n", s); + printf(".ec\n"); + } + else if (output_format == mathml) { + fputs(s, stdout); + if (xhtml && strlen(s) > 0) + printf("\n"); + } } void set_minimum_size(int n) @@ -275,69 +287,76 @@ box::~box() void box::top_level() { - // debug_print(); - // putc('\n', stderr); box *b = this; - printf(".nr " SAVED_FONT_REG " \\n[.f]\n"); - printf(".ft\n"); - printf(".nr " SAVED_PREV_FONT_REG " \\n[.f]\n"); - printf(".ft %s\n", get_gfont()); - printf(".nr " SAVED_SIZE_REG " \\n[.ps]\n"); - if (gsize > 0) { - char buf[INT_DIGITS + 1]; - sprintf(buf, "%d", gsize); - b = new size_box(strsave(buf), b); + if (output_format == troff) { + // debug_print(); + // putc('\n', stderr); + printf(".nr " SAVED_FONT_REG " \\n[.f]\n"); + printf(".ft\n"); + printf(".nr " SAVED_PREV_FONT_REG " \\n[.f]\n"); + printf(".ft %s\n", get_gfont()); + printf(".nr " SAVED_SIZE_REG " \\n[.ps]\n"); + if (gsize > 0) { + char buf[INT_DIGITS + 1]; + sprintf(buf, "%d", gsize); + b = new size_box(strsave(buf), b); + } + current_roman_font = get_grfont(); + // This catches tabs used within \Z (which aren't allowed). + b->check_tabs(0); + int r = b->compute_metrics(DISPLAY_STYLE); + printf(".ft \\n[" SAVED_PREV_FONT_REG "]\n"); + printf(".ft \\n[" SAVED_FONT_REG "]\n"); + printf(".nr " MARK_OR_LINEUP_FLAG_REG " %d\n", r); + if (r == FOUND_MARK) { + printf(".nr " SAVED_MARK_REG " \\n[" MARK_REG "]\n"); + printf(".nr " MARK_WIDTH_REG " 0\\n[" WIDTH_FORMAT "]\n", b->uid); + } + else if (r == FOUND_LINEUP) + printf(".if r" SAVED_MARK_REG " .as1 " LINE_STRING " \\h'\\n[" + SAVED_MARK_REG "]u-\\n[" MARK_REG "]u'\n"); + else + assert(r == FOUND_NOTHING); + // If we use \R directly, the space will prevent it working in a + // macro argument; so we hide it in a string instead. + printf(".ds " SAVE_FONT_STRING " " + "\\R'" SAVED_INLINE_FONT_REG " \\En[.f]'" + "\\fP" + "\\R'" SAVED_INLINE_PREV_FONT_REG " \\En[.f]'" + "\\R'" SAVED_INLINE_SIZE_REG " \\En[.ps]'" + "\\s0" + "\\R'" SAVED_INLINE_PREV_SIZE_REG " \\En[.ps]'" + "\n" + ".ds " RESTORE_FONT_STRING " " + "\\f[\\En[" SAVED_INLINE_PREV_FONT_REG "]]" + "\\f[\\En[" SAVED_INLINE_FONT_REG "]]" + "\\s'\\En[" SAVED_INLINE_PREV_SIZE_REG "]u'" + "\\s'\\En[" SAVED_INLINE_SIZE_REG "]u'" + "\n"); + printf(".as1 " LINE_STRING " \\&\\E*[" SAVE_FONT_STRING "]"); + printf("\\f[%s]", get_gfont()); + printf("\\s'\\En[" SAVED_SIZE_REG "]u'"); + current_roman_font = get_grfont(); + b->output(); + printf("\\E*[" RESTORE_FONT_STRING "]\n"); + if (r == FOUND_LINEUP) + printf(".if r" SAVED_MARK_REG " .as1 " LINE_STRING " \\h'\\n[" + MARK_WIDTH_REG "]u-\\n[" SAVED_MARK_REG "]u-(\\n[" + WIDTH_FORMAT "]u-\\n[" MARK_REG "]u)'\n", + b->uid); + b->extra_space(); + if (!inline_flag) + printf(".ne \\n[" HEIGHT_FORMAT "]u-%dM>?0+(\\n[" + DEPTH_FORMAT "]u-%dM>?0)\n", + b->uid, body_height, b->uid, body_depth); } - current_roman_font = get_grfont(); - // This catches tabs used within \Z (which aren't allowed). - b->check_tabs(0); - int r = b->compute_metrics(DISPLAY_STYLE); - printf(".ft \\n[" SAVED_PREV_FONT_REG "]\n"); - printf(".ft \\n[" SAVED_FONT_REG "]\n"); - printf(".nr " MARK_OR_LINEUP_FLAG_REG " %d\n", r); - if (r == FOUND_MARK) { - printf(".nr " SAVED_MARK_REG " \\n[" MARK_REG "]\n"); - printf(".nr " MARK_WIDTH_REG " 0\\n[" WIDTH_FORMAT "]\n", b->uid); + else if (output_format == mathml) { + if (xhtml) + printf(".MATHML "); + printf(""); + b->output(); + printf(""); } - else if (r == FOUND_LINEUP) - printf(".if r" SAVED_MARK_REG " .as1 " LINE_STRING " \\h'\\n[" - SAVED_MARK_REG "]u-\\n[" MARK_REG "]u'\n"); - else - assert(r == FOUND_NOTHING); - // The problem here is that the argument to \f is read in copy mode, - // so we cannot use \E there; so we hide it in a string instead. - // Another problem is that if we use \R directly, then the space will - // prevent it working in a macro argument. - printf(".ds " SAVE_FONT_STRING " " - "\\R'" SAVED_INLINE_FONT_REG " \\\\n[.f]'" - "\\fP" - "\\R'" SAVED_INLINE_PREV_FONT_REG " \\\\n[.f]'" - "\\R'" SAVED_INLINE_SIZE_REG " \\\\n[.ps]'" - "\\s0" - "\\R'" SAVED_INLINE_PREV_SIZE_REG " \\\\n[.ps]'" - "\n" - ".ds " RESTORE_FONT_STRING " " - "\\f[\\\\n[" SAVED_INLINE_PREV_FONT_REG "]]" - "\\f[\\\\n[" SAVED_INLINE_FONT_REG "]]" - "\\s'\\\\n[" SAVED_INLINE_PREV_SIZE_REG "]u'" - "\\s'\\\\n[" SAVED_INLINE_SIZE_REG "]u'" - "\n"); - printf(".as1 " LINE_STRING " \\&\\E*[" SAVE_FONT_STRING "]"); - printf("\\f[%s]", get_gfont()); - printf("\\s'\\En[" SAVED_SIZE_REG "]u'"); - current_roman_font = get_grfont(); - b->output(); - printf("\\E*[" RESTORE_FONT_STRING "]\n"); - if (r == FOUND_LINEUP) - printf(".if r" SAVED_MARK_REG " .as1 " LINE_STRING " \\h'\\n[" - MARK_WIDTH_REG "]u-\\n[" SAVED_MARK_REG "]u-(\\n[" - WIDTH_FORMAT "]u-\\n[" MARK_REG "]u)'\n", - b->uid); - b->extra_space(); - if (!inline_flag) - printf(".ne \\n[" HEIGHT_FORMAT "]u-%dM>?0+(\\n[" - DEPTH_FORMAT "]u-%dM>?0)\n", - b->uid, body_height, b->uid, body_depth); delete b; next_uid = 0; } @@ -538,8 +557,15 @@ quoted_text_box::~quoted_text_box() void quoted_text_box::output() { - if (text) - fputs(text, stdout); + if (text) { + if (output_format == troff) + fputs(text, stdout); + else if (output_format == mathml) { + fputs("", stdout); + fputs(text, stdout); + fputs("", stdout); + } + } } tab_box::tab_box() : disabled(0) @@ -569,7 +595,11 @@ space_box::space_box() void space_box::output() { - printf("\\h'%dM'", thick_space); + if (output_format == troff) + printf("\\h'%dM'", thick_space); + else if (output_format == mathml) + //    doesn't display right under Firefox 1.5. + printf(""); } half_space_box::half_space_box() @@ -579,7 +609,10 @@ half_space_box::half_space_box() void half_space_box::output() { - printf("\\h'%dM'", thin_space); + if (output_format == troff) + printf("\\h'%dM'", thin_space); + else if (output_format == mathml) + printf(""); } void box_list::list_debug_print(const char *sep) diff --git a/contrib/groff/src/preproc/eqn/box.h b/contrib/groff/src/preproc/eqn/box.h index 9484207703..f0be4eab46 100644 --- a/contrib/groff/src/preproc/eqn/box.h +++ b/contrib/groff/src/preproc/eqn/box.h @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2004, 2005 +/* Copyright (C) 1989, 1990, 1991, 1992, 2004, 2005, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ class list_box; diff --git a/contrib/groff/src/preproc/eqn/delim.cpp b/contrib/groff/src/preproc/eqn/delim.cpp index 9bb7c9b982..da5894552a 100644 --- a/contrib/groff/src/preproc/eqn/delim.cpp +++ b/contrib/groff/src/preproc/eqn/delim.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2003 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2003, 2007, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "eqn.h" #include "pbox.h" @@ -378,11 +378,18 @@ int delim_box::compute_metrics(int style) void delim_box::output() { - if (left) - printf("\\*[" LEFT_DELIM_STRING_FORMAT "]", uid); - p->output(); - if (right) - printf("\\*[" RIGHT_DELIM_STRING_FORMAT "]", uid); + if (output_format == troff) { + if (left) + printf("\\*[" LEFT_DELIM_STRING_FORMAT "]", uid); + p->output(); + if (right) + printf("\\*[" RIGHT_DELIM_STRING_FORMAT "]", uid); + } + else if (output_format == mathml) { + printf("%s", left); + p->output(); + printf("%s", right); + } } void delim_box::check_tabs(int level) diff --git a/contrib/groff/src/preproc/eqn/eqn.cpp b/contrib/groff/src/preproc/eqn/eqn.cpp index 71b69cd9ce..8024ed3306 100644 --- a/contrib/groff/src/preproc/eqn/eqn.cpp +++ b/contrib/groff/src/preproc/eqn/eqn.cpp @@ -1,12 +1,35 @@ #ifndef lint -static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93 (groff)"; +static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; #endif + +#include +#include + #define YYBYACC 1 #define YYMAJOR 1 #define YYMINOR 9 -#define yyclearin (yychar=(-1)) -#define yyerrok (yyerrflag=0) -#define YYRECOVERING (yyerrflag!=0) +#define YYPATCH 20081224 + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +#ifdef YYPARSE_PARAM_TYPE +#define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +#else +#define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +#endif +#else +#define YYPARSE_DECL() yyparse(void) +#endif /* YYPARSE_PARAM */ + +extern int YYPARSE_DECL(); + +static int yygrowstack(void); #define YYPREFIX "yy" #line 20 "eqn.y" #include @@ -27,7 +50,7 @@ typedef union { int n; column *col; } YYSTYPE; -#line 31 "y.tab.c" +#line 53 "eqn.cpp" #define OVER 257 #define SMALLOVER 258 #define SQRT 259 @@ -87,7 +110,7 @@ typedef union { #define GRFONT 313 #define GBFONT 314 #define YYERRCODE 256 -short yylhs[] = { -1, +static const short yylhs[] = { -1, 0, 0, 6, 6, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 7, 7, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, @@ -97,7 +120,7 @@ short yylhs[] = { -1, 13, 16, 16, 15, 15, 14, 14, 14, 14, 9, 9, 10, 10, 10, }; -short yylen[] = { 2, +static const short yylen[] = { 2, 0, 1, 1, 2, 1, 2, 2, 1, 3, 3, 5, 5, 1, 2, 3, 3, 1, 3, 1, 3, 5, 1, 1, 2, 2, 1, 1, 1, 3, 2, @@ -107,7 +130,7 @@ short yylen[] = { 2, 2, 1, 3, 3, 4, 2, 2, 2, 2, 1, 1, 1, 1, 1, }; -short yydefred[] = { 0, +static const short yydefred[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 27, 28, 0, @@ -123,11 +146,11 @@ short yydefred[] = { 0, 69, 34, 61, 0, 0, 0, 0, 59, 35, 0, 0, 0, 11, 12, 21, 0, 64, 0, 0, 65, }; -short yydgoto[] = { 31, +static const short yydgoto[] = { 31, 32, 33, 34, 35, 36, 84, 38, 43, 44, 52, 85, 45, 98, 99, 118, 131, }; -short yysindex[] = { 1488, +static const short yysindex[] = { 1488, 1527, -120, -120, -120, -120, -123, -249, -249, 1566, 1566, 1566, 1566, 0, 0, -249, -249, -249, -249, -115, 1488, 1488, -249, 1566, -256, -251, -249, 0, 0, 0, 1488, @@ -143,7 +166,7 @@ short yysindex[] = { 1488, 0, 0, 0, 1527, 1527, 1566, 1488, 0, 0, 1488, -105, 1488, 0, 0, 0, 1488, 0, -104, 1488, 0, }; -short yyrindex[] = { 41, +static const short yyrindex[] = { 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -159,12 +182,12 @@ short yyrindex[] = { 41, 0, 0, 0, 0, 0, 0, -102, 0, 0, -101, 0, 0, 0, 0, 0, 0, 0, 0, -99, 0, }; -short yygindex[] = { 0, +static const short yygindex[] = { 0, -7, -69, 3, -66, 458, 9, -26, 52, 27, -63, -32, 54, 0, -35, 2, -59, }; #define YYTABLESIZE 1865 -short yytable[] = { 49, +static const short yytable[] = { 49, 8, 50, 42, 39, 105, 116, 122, 63, 37, 8, 109, 113, 64, 65, 94, 95, 96, 97, 128, 137, 140, 56, 57, 62, 68, 63, 76, 77, 69, 83, @@ -353,7 +376,7 @@ short yytable[] = { 49, 18, 19, 0, 0, 0, 0, 0, 0, 22, 23, 0, 24, 25, 0, 26, }; -short yycheck[] = { 123, +static const short yycheck[] = { 123, 0, 125, 123, 1, 74, 123, 125, 123, 0, 9, 77, 125, 20, 21, 287, 288, 289, 290, 125, 125, 125, 125, 125, 125, 281, 125, 260, 261, 280, 37, @@ -548,7 +571,8 @@ short yycheck[] = { 123, #endif #define YYMAXTOKEN 314 #if YYDEBUG -char *yyname[] = { +static const char *yyname[] = { + "end-of-file",0,0,0,0,0,0,0,0,"'\\t'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'^'",0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -563,7 +587,7 @@ char *yyname[] = { "UACCENT","SPECIAL","SPACE","GFONT","GSIZE","DEFINE","NDEFINE","TDEFINE", "SDEFINE","UNDEF","IFDEF","INCLUDE","DELIM","CHARTYPE","SET","GRFONT","GBFONT", }; -char *yyrule[] = { +static const char *yyrule[] = { "$accept : top", "top :", "top : equation", @@ -639,47 +663,92 @@ char *yyrule[] = { "delim : text", "delim : '{'", "delim : '}'", + }; #endif +#if YYDEBUG +#include +#endif + +/* define the initial stack-sizes */ #ifdef YYSTACKSIZE #undef YYMAXDEPTH -#define YYMAXDEPTH YYSTACKSIZE +#define YYMAXDEPTH YYSTACKSIZE #else #ifdef YYMAXDEPTH #define YYSTACKSIZE YYMAXDEPTH #else #define YYSTACKSIZE 500 -#define YYMAXDEPTH 500 +#define YYMAXDEPTH 500 #endif #endif -int yydebug; -int yynerrs; -int yyerrflag; -int yychar; -short *yyssp; + +#define YYINITSTACKSIZE 500 + +int yydebug; +int yynerrs; +int yyerrflag; +int yychar; +short *yyssp; YYSTYPE *yyvsp; -YYSTYPE yyval; -YYSTYPE yylval; -short yyss[YYSTACKSIZE]; -YYSTYPE yyvs[YYSTACKSIZE]; -#define yystacksize YYSTACKSIZE -#define YYABORT goto yyabort +YYSTYPE yyval; +YYSTYPE yylval; + +/* variables for the parser stack */ +static short *yyss; +static short *yysslim; +static YYSTYPE *yyvs; +static unsigned yystacksize; +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(void) +{ + int i; + unsigned newsize; + short *newss; + YYSTYPE *newvs; + + if ((newsize = yystacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return -1; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = yyssp - yyss; + newss = (yyss != 0) + ? (short *)realloc(yyss, newsize * sizeof(*newss)) + : (short *)malloc(newsize * sizeof(*newss)); + if (newss == 0) + return -1; + + yyss = newss; + yyssp = newss + i; + newvs = (yyvs != 0) + ? (YYSTYPE *)realloc(yyvs, newsize * sizeof(*newvs)) + : (YYSTYPE *)malloc(newsize * sizeof(*newvs)); + if (newvs == 0) + return -1; + + yyvs = newvs; + yyvsp = newvs + i; + yystacksize = newsize; + yysslim = yyss + newsize - 1; + return 0; +} + +#define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept -#define YYERROR goto yyerrlab +#define YYERROR goto yyerrlab + int -#if defined(__STDC__) -yyparse(void) -#else -yyparse() -#endif +YYPARSE_DECL() { - register int yym, yyn, yystate; + int yym, yyn, yystate; #if YYDEBUG - register char *yys; - extern char *getenv(); + const char *yys; - if (yys = getenv("YYDEBUG")) + if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') @@ -689,11 +758,14 @@ yyparse() yynerrs = 0; yyerrflag = 0; - yychar = (-1); + yychar = YYEMPTY; + yystate = 0; + if (yyss == NULL && yygrowstack()) goto yyoverflow; yyssp = yyss; yyvsp = yyvs; - *yyssp = yystate = 0; + yystate = 0; + *yyssp = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; @@ -719,13 +791,14 @@ yyloop: printf("%sdebug: state %d, shifting to state %d\n", YYPREFIX, yystate, yytable[yyn]); #endif - if (yyssp >= yyss + yystacksize - 1) + if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } - *++yyssp = yystate = yytable[yyn]; + yystate = yytable[yyn]; + *++yyssp = yytable[yyn]; *++yyvsp = yylval; - yychar = (-1); + yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } @@ -736,16 +809,14 @@ yyloop: goto yyreduce; } if (yyerrflag) goto yyinrecovery; -#ifdef lint - goto yynewerror; -#endif -yynewerror: + yyerror("syntax error"); -#ifdef lint + goto yyerrlab; -#endif + yyerrlab: ++yynerrs; + yyinrecovery: if (yyerrflag < 3) { @@ -760,11 +831,12 @@ yyinrecovery: printf("%sdebug: state %d, error recovery shifting\ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); #endif - if (yyssp >= yyss + yystacksize - 1) + if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } - *++yyssp = yystate = yytable[yyn]; + yystate = yytable[yyn]; + *++yyssp = yytable[yyn]; *++yyvsp = yylval; goto yyloop; } @@ -794,9 +866,10 @@ yyinrecovery: YYPREFIX, yystate, yychar, yys); } #endif - yychar = (-1); + yychar = YYEMPTY; goto yyloop; } + yyreduce: #if YYDEBUG if (yydebug) @@ -804,20 +877,23 @@ yyreduce: YYPREFIX, yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; - yyval = yyvsp[1-yym]; + if (yym) + yyval = yyvsp[1-yym]; + else + memset(&yyval, 0, sizeof yyval); switch (yyn) { case 2: #line 125 "eqn.y" -{ yyvsp[0].b->top_level(); non_empty_flag = 1; } + { yyvsp[0].b->top_level(); non_empty_flag = 1; } break; case 3: #line 130 "eqn.y" -{ yyval.b = yyvsp[0].b; } + { yyval.b = yyvsp[0].b; } break; case 4: #line 132 "eqn.y" -{ + { list_box *lb = yyvsp[-1].b->to_list_box(); if (!lb) lb = new list_box(yyvsp[-1].b); @@ -827,207 +903,207 @@ case 4: break; case 5: #line 143 "eqn.y" -{ yyval.b = yyvsp[0].b; } + { yyval.b = yyvsp[0].b; } break; case 6: #line 145 "eqn.y" -{ yyval.b = make_mark_box(yyvsp[0].b); } + { yyval.b = make_mark_box(yyvsp[0].b); } break; case 7: #line 147 "eqn.y" -{ yyval.b = make_lineup_box(yyvsp[0].b); } + { yyval.b = make_lineup_box(yyvsp[0].b); } break; case 8: #line 152 "eqn.y" -{ yyval.b = yyvsp[0].b; } + { yyval.b = yyvsp[0].b; } break; case 9: #line 154 "eqn.y" -{ yyval.b = make_limit_box(yyvsp[-2].b, 0, yyvsp[0].b); } + { yyval.b = make_limit_box(yyvsp[-2].b, 0, yyvsp[0].b); } break; case 10: #line 156 "eqn.y" -{ yyval.b = make_limit_box(yyvsp[-2].b, yyvsp[0].b, 0); } + { yyval.b = make_limit_box(yyvsp[-2].b, yyvsp[0].b, 0); } break; case 11: #line 158 "eqn.y" -{ yyval.b = make_limit_box(yyvsp[-4].b, yyvsp[-2].b, yyvsp[0].b); } + { yyval.b = make_limit_box(yyvsp[-4].b, yyvsp[-2].b, yyvsp[0].b); } break; case 12: #line 160 "eqn.y" -{ yyval.b = make_limit_box(yyvsp[-4].b, make_limit_box(yyvsp[-2].b, yyvsp[0].b, 0), 0); } + { yyval.b = make_limit_box(yyvsp[-4].b, make_limit_box(yyvsp[-2].b, yyvsp[0].b, 0), 0); } break; case 13: #line 165 "eqn.y" -{ yyval.b = yyvsp[0].b; } + { yyval.b = yyvsp[0].b; } break; case 14: #line 167 "eqn.y" -{ yyval.b = make_sqrt_box(yyvsp[0].b); } + { yyval.b = make_sqrt_box(yyvsp[0].b); } break; case 15: #line 169 "eqn.y" -{ yyval.b = make_over_box(yyvsp[-2].b, yyvsp[0].b); } + { yyval.b = make_over_box(yyvsp[-2].b, yyvsp[0].b); } break; case 16: #line 171 "eqn.y" -{ yyval.b = make_small_over_box(yyvsp[-2].b, yyvsp[0].b); } + { yyval.b = make_small_over_box(yyvsp[-2].b, yyvsp[0].b); } break; case 17: #line 176 "eqn.y" -{ yyval.b = yyvsp[0].b; } + { yyval.b = yyvsp[0].b; } break; case 18: #line 178 "eqn.y" -{ yyval.b = make_script_box(yyvsp[-2].b, 0, yyvsp[0].b); } + { yyval.b = make_script_box(yyvsp[-2].b, 0, yyvsp[0].b); } break; case 19: #line 183 "eqn.y" -{ yyval.b = yyvsp[0].b; } + { yyval.b = yyvsp[0].b; } break; case 20: #line 185 "eqn.y" -{ yyval.b = make_script_box(yyvsp[-2].b, yyvsp[0].b, 0); } + { yyval.b = make_script_box(yyvsp[-2].b, yyvsp[0].b, 0); } break; case 21: #line 187 "eqn.y" -{ yyval.b = make_script_box(yyvsp[-4].b, yyvsp[-2].b, yyvsp[0].b); } + { yyval.b = make_script_box(yyvsp[-4].b, yyvsp[-2].b, yyvsp[0].b); } break; case 22: #line 192 "eqn.y" -{ yyval.b = split_text(yyvsp[0].str); } + { yyval.b = split_text(yyvsp[0].str); } break; case 23: #line 194 "eqn.y" -{ yyval.b = new quoted_text_box(yyvsp[0].str); } + { yyval.b = new quoted_text_box(yyvsp[0].str); } break; case 24: #line 196 "eqn.y" -{ yyval.b = split_text(yyvsp[0].str); } + { yyval.b = split_text(yyvsp[0].str); } break; case 25: #line 198 "eqn.y" -{ yyval.b = new quoted_text_box(yyvsp[0].str); } + { yyval.b = new quoted_text_box(yyvsp[0].str); } break; case 26: #line 200 "eqn.y" -{ yyval.b = new half_space_box; } + { yyval.b = new half_space_box; } break; case 27: #line 202 "eqn.y" -{ yyval.b = new space_box; } + { yyval.b = new space_box; } break; case 28: #line 204 "eqn.y" -{ yyval.b = new tab_box; } + { yyval.b = new tab_box; } break; case 29: #line 206 "eqn.y" -{ yyval.b = yyvsp[-1].b; } + { yyval.b = yyvsp[-1].b; } break; case 30: #line 208 "eqn.y" -{ yyvsp[0].pb->set_alignment(CENTER_ALIGN); yyval.b = yyvsp[0].pb; } + { yyvsp[0].pb->set_alignment(CENTER_ALIGN); yyval.b = yyvsp[0].pb; } break; case 31: #line 210 "eqn.y" -{ yyvsp[0].pb->set_alignment(LEFT_ALIGN); yyval.b = yyvsp[0].pb; } + { yyvsp[0].pb->set_alignment(LEFT_ALIGN); yyval.b = yyvsp[0].pb; } break; case 32: #line 212 "eqn.y" -{ yyvsp[0].pb->set_alignment(RIGHT_ALIGN); yyval.b = yyvsp[0].pb; } + { yyvsp[0].pb->set_alignment(RIGHT_ALIGN); yyval.b = yyvsp[0].pb; } break; case 33: #line 214 "eqn.y" -{ yyvsp[0].pb->set_alignment(CENTER_ALIGN); yyval.b = yyvsp[0].pb; } + { yyvsp[0].pb->set_alignment(CENTER_ALIGN); yyval.b = yyvsp[0].pb; } break; case 34: #line 216 "eqn.y" -{ yyval.b = yyvsp[-1].mb; } + { yyval.b = yyvsp[-1].mb; } break; case 35: #line 218 "eqn.y" -{ yyval.b = make_delim_box(yyvsp[-3].str, yyvsp[-2].b, yyvsp[0].str); } + { yyval.b = make_delim_box(yyvsp[-3].str, yyvsp[-2].b, yyvsp[0].str); } break; case 36: #line 220 "eqn.y" -{ yyval.b = make_delim_box(yyvsp[-1].str, yyvsp[0].b, 0); } + { yyval.b = make_delim_box(yyvsp[-1].str, yyvsp[0].b, 0); } break; case 37: #line 222 "eqn.y" -{ yyval.b = make_overline_box(yyvsp[-1].b); } + { yyval.b = make_overline_box(yyvsp[-1].b); } break; case 38: #line 224 "eqn.y" -{ yyval.b = make_underline_box(yyvsp[-1].b); } + { yyval.b = make_underline_box(yyvsp[-1].b); } break; case 39: #line 226 "eqn.y" -{ yyval.b = make_prime_box(yyvsp[-1].b); } + { yyval.b = make_prime_box(yyvsp[-1].b); } break; case 40: #line 228 "eqn.y" -{ yyval.b = make_accent_box(yyvsp[-2].b, yyvsp[0].b); } + { yyval.b = make_accent_box(yyvsp[-2].b, yyvsp[0].b); } break; case 41: #line 230 "eqn.y" -{ yyval.b = make_uaccent_box(yyvsp[-2].b, yyvsp[0].b); } + { yyval.b = make_uaccent_box(yyvsp[-2].b, yyvsp[0].b); } break; case 42: #line 232 "eqn.y" -{ yyval.b = new font_box(strsave(get_grfont()), yyvsp[0].b); } + { yyval.b = new font_box(strsave(get_grfont()), yyvsp[0].b); } break; case 43: #line 234 "eqn.y" -{ yyval.b = new font_box(strsave(get_gbfont()), yyvsp[0].b); } + { yyval.b = new font_box(strsave(get_gbfont()), yyvsp[0].b); } break; case 44: #line 236 "eqn.y" -{ yyval.b = new font_box(strsave(get_gfont()), yyvsp[0].b); } + { yyval.b = new font_box(strsave(get_gfont()), yyvsp[0].b); } break; case 45: #line 238 "eqn.y" -{ yyval.b = new fat_box(yyvsp[0].b); } + { yyval.b = new fat_box(yyvsp[0].b); } break; case 46: #line 240 "eqn.y" -{ yyval.b = new font_box(yyvsp[-1].str, yyvsp[0].b); } + { yyval.b = new font_box(yyvsp[-1].str, yyvsp[0].b); } break; case 47: #line 242 "eqn.y" -{ yyval.b = new size_box(yyvsp[-1].str, yyvsp[0].b); } + { yyval.b = new size_box(yyvsp[-1].str, yyvsp[0].b); } break; case 48: #line 244 "eqn.y" -{ yyval.b = new hmotion_box(yyvsp[-1].n, yyvsp[0].b); } + { yyval.b = new hmotion_box(yyvsp[-1].n, yyvsp[0].b); } break; case 49: #line 246 "eqn.y" -{ yyval.b = new hmotion_box(-yyvsp[-1].n, yyvsp[0].b); } + { yyval.b = new hmotion_box(-yyvsp[-1].n, yyvsp[0].b); } break; case 50: #line 248 "eqn.y" -{ yyval.b = new vmotion_box(yyvsp[-1].n, yyvsp[0].b); } + { yyval.b = new vmotion_box(yyvsp[-1].n, yyvsp[0].b); } break; case 51: #line 250 "eqn.y" -{ yyval.b = new vmotion_box(-yyvsp[-1].n, yyvsp[0].b); } + { yyval.b = new vmotion_box(-yyvsp[-1].n, yyvsp[0].b); } break; case 52: #line 252 "eqn.y" -{ yyvsp[0].b->set_spacing_type(yyvsp[-1].str); yyval.b = yyvsp[0].b; } + { yyvsp[0].b->set_spacing_type(yyvsp[-1].str); yyval.b = yyvsp[0].b; } break; case 53: #line 254 "eqn.y" -{ yyval.b = new vcenter_box(yyvsp[0].b); } + { yyval.b = new vcenter_box(yyvsp[0].b); } break; case 54: #line 256 "eqn.y" -{ yyval.b = make_special_box(yyvsp[-1].str, yyvsp[0].b); } + { yyval.b = make_special_box(yyvsp[-1].str, yyvsp[0].b); } break; case 55: #line 261 "eqn.y" -{ + { int n; if (sscanf(yyvsp[0].str, "%d", &n) == 1) yyval.n = n; @@ -1036,81 +1112,81 @@ case 55: break; case 56: #line 271 "eqn.y" -{ yyval.pb = new pile_box(yyvsp[0].b); } + { yyval.pb = new pile_box(yyvsp[0].b); } break; case 57: #line 273 "eqn.y" -{ yyvsp[-2].pb->append(yyvsp[0].b); yyval.pb = yyvsp[-2].pb; } + { yyvsp[-2].pb->append(yyvsp[0].b); yyval.pb = yyvsp[-2].pb; } break; case 58: #line 278 "eqn.y" -{ yyval.pb = yyvsp[-1].pb; } + { yyval.pb = yyvsp[-1].pb; } break; case 59: #line 280 "eqn.y" -{ yyvsp[-1].pb->set_space(yyvsp[-3].n); yyval.pb = yyvsp[-1].pb; } + { yyvsp[-1].pb->set_space(yyvsp[-3].n); yyval.pb = yyvsp[-1].pb; } break; case 60: #line 285 "eqn.y" -{ yyval.mb = new matrix_box(yyvsp[0].col); } + { yyval.mb = new matrix_box(yyvsp[0].col); } break; case 61: #line 287 "eqn.y" -{ yyvsp[-1].mb->append(yyvsp[0].col); yyval.mb = yyvsp[-1].mb; } + { yyvsp[-1].mb->append(yyvsp[0].col); yyval.mb = yyvsp[-1].mb; } break; case 62: #line 292 "eqn.y" -{ yyval.col = new column(yyvsp[0].b); } + { yyval.col = new column(yyvsp[0].b); } break; case 63: #line 294 "eqn.y" -{ yyvsp[-2].col->append(yyvsp[0].b); yyval.col = yyvsp[-2].col; } + { yyvsp[-2].col->append(yyvsp[0].b); yyval.col = yyvsp[-2].col; } break; case 64: #line 299 "eqn.y" -{ yyval.col = yyvsp[-1].col; } + { yyval.col = yyvsp[-1].col; } break; case 65: #line 301 "eqn.y" -{ yyvsp[-1].col->set_space(yyvsp[-3].n); yyval.col = yyvsp[-1].col; } + { yyvsp[-1].col->set_space(yyvsp[-3].n); yyval.col = yyvsp[-1].col; } break; case 66: #line 306 "eqn.y" -{ yyvsp[0].col->set_alignment(CENTER_ALIGN); yyval.col = yyvsp[0].col; } + { yyvsp[0].col->set_alignment(CENTER_ALIGN); yyval.col = yyvsp[0].col; } break; case 67: #line 308 "eqn.y" -{ yyvsp[0].col->set_alignment(LEFT_ALIGN); yyval.col = yyvsp[0].col; } + { yyvsp[0].col->set_alignment(LEFT_ALIGN); yyval.col = yyvsp[0].col; } break; case 68: #line 310 "eqn.y" -{ yyvsp[0].col->set_alignment(RIGHT_ALIGN); yyval.col = yyvsp[0].col; } + { yyvsp[0].col->set_alignment(RIGHT_ALIGN); yyval.col = yyvsp[0].col; } break; case 69: #line 312 "eqn.y" -{ yyvsp[0].col->set_alignment(CENTER_ALIGN); yyval.col = yyvsp[0].col; } + { yyvsp[0].col->set_alignment(CENTER_ALIGN); yyval.col = yyvsp[0].col; } break; case 70: #line 316 "eqn.y" -{ yyval.str = yyvsp[0].str; } + { yyval.str = yyvsp[0].str; } break; case 71: #line 318 "eqn.y" -{ yyval.str = yyvsp[0].str; } + { yyval.str = yyvsp[0].str; } break; case 72: #line 323 "eqn.y" -{ yyval.str = yyvsp[0].str; } + { yyval.str = yyvsp[0].str; } break; case 73: #line 325 "eqn.y" -{ yyval.str = strsave("{"); } + { yyval.str = strsave("{"); } break; case 74: #line 327 "eqn.y" -{ yyval.str = strsave("}"); } + { yyval.str = strsave("}"); } break; -#line 1114 "y.tab.c" +#line 1189 "eqn.cpp" } yyssp -= yym; yystate = *yyssp; @@ -1153,17 +1229,20 @@ break; printf("%sdebug: after reduction, shifting from state %d \ to state %d\n", YYPREFIX, *yyssp, yystate); #endif - if (yyssp >= yyss + yystacksize - 1) + if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } - *++yyssp = yystate; + *++yyssp = (short) yystate; *++yyvsp = yyval; goto yyloop; + yyoverflow: yyerror("yacc stack overflow"); + yyabort: return (1); + yyaccept: return (0); } diff --git a/contrib/groff/src/preproc/eqn/eqn.h b/contrib/groff/src/preproc/eqn/eqn.h index fca3e9793a..6cfa15f645 100644 --- a/contrib/groff/src/preproc/eqn/eqn.h +++ b/contrib/groff/src/preproc/eqn/eqn.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2007, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" @@ -29,6 +29,8 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "box.h" +typedef enum {troff, mathml} eqnmode_t; + extern char start_delim; extern char end_delim; extern int non_empty_flag; @@ -37,6 +39,8 @@ extern int draw_flag; extern int one_size_reduction_flag; extern int compatible_flag; extern int nroff; +extern eqnmode_t output_format; +extern int xhtml; void init_lex(const char *str, const char *filename, int lineno); void lex_error(const char *message, diff --git a/contrib/groff/src/preproc/eqn/eqn.man b/contrib/groff/src/preproc/eqn/eqn.man index 0f47771c23..c009dd3a7c 100644 --- a/contrib/groff/src/preproc/eqn/eqn.man +++ b/contrib/groff/src/preproc/eqn/eqn.man @@ -1,5 +1,6 @@ .ig -Copyright (C) 1989-2000, 2001, 2004, 2005 Free Software Foundation, Inc. +Copyright (C) 1989-2000, 2001, 2004, 2005, 2007, 2009 + Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice @@ -32,13 +33,6 @@ the original English. .. . . -.de TQ -. br -. ns -. TP \\$1 -.. -. -. .\" The BSD man macros can't handle " in arguments to font change macros, .\" so use \(ts instead of ". .tr \(ts" @@ -48,20 +42,11 @@ the original English. . . .SH NAME -@g@eqn \- format equations for troff +@g@eqn \- format equations for troff or MathML . . .SH SYNOPSIS -.nr a \n(.j -.ad l -.nr i \n(.i -.in +\w'\fB@g@eqn 'u -.ti \niu -.B @g@eqn -.de OP -. ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]" -. el .RB "[\ " "\\$1" "\ ]" -.. +.SY @g@eqn .OP \-rvCNR .OP \-d xy .OP \-T name @@ -70,9 +55,8 @@ the original English. .OP \-s n .OP \-p n .OP \-m n -.RI "[\ " files\|.\|.\|. "\ ]" -.br -.ad \na +.RI [ files\|.\|.\|. ] +.YS . .LP It is possible to have whitespace between a command line option and its @@ -97,11 +81,10 @@ The output of GNU .B eqn cannot be processed with Unix troff; it must be processed with GNU troff. -If no files are given on the command line, the standard input -will be read. +If no files are given on the command line, the standard input is read. A filename of .B \- -will cause the standard input to be read. +causes the standard input to be read. . .LP .B eqn @@ -116,7 +99,7 @@ and finally in the standard macro directory .BR @MACRODIR@ . If it exists, .B eqn -will process it before the other input files. +processes it before the other input files. The .B \-R option prevents this. @@ -130,6 +113,7 @@ it does not support low-resolution, typewriter-like devices . . .SH OPTIONS +. .TP .BI \-d xy Specify delimiters @@ -168,7 +152,7 @@ Only one size reduction. The minimum point-size is\~\c .IR n . .B eqn -will not reduce the size of subscripts or superscripts to +does not reduce the size of subscripts or superscripts to a smaller size than\~\c .IR n . . @@ -176,13 +160,16 @@ a smaller size than\~\c .BI \-T name The output is for device .IR name . -The only effect of this is to define a macro +Normally, the only effect of this is to define a macro .I name with a value of\~\c -.BR 1 . -Typically +.BR 1 ; .B eqnrc -will use this to provide definitions appropriate for the output device. +uses this to provide definitions appropriate for the output device. +However, if the specified device is \[lq]MathML\[rq], the output is +MathML markup rather than troff commands, and +.B eqnrc +is not loaded at all. The default output device is .BR @DEVICE@ . . @@ -212,7 +199,7 @@ This is equivalent to a command. This option is deprecated. .B eqn -will normally set equations at whatever the current point size +normally sets equations at whatever the current point size is when the equation is encountered. . .TP @@ -223,8 +210,8 @@ points smaller than the surrounding text. This option is deprecated. Normally .B eqn -makes sets subscripts and superscripts at 70% -of the size of the surrounding text. +sets subscripts and superscripts at 70% of the size of the +surrounding text. . . .SH USAGE @@ -233,9 +220,25 @@ Only the differences between GNU and Unix eqn are described here. . .LP -Most of the new features of GNU +GNU .B eqn -are based on \*(tx. +emits Presentation MathML output when invoked with the +.B "-T\~MathML" +option. +. +.LP +GNU eqn sets the input token +.B \&"..." +as three periods or low dots, rather than the three centered dots of +classic eqn. To get three centered dots, write +.B "cdots" +or +.BR "cdot cdot cdot". +. +.LP +Most of the new features of the GNU +.B eqn +input language are based on \*(tx. There are some references to the differences between \*(tx and GNU .B eqn below; @@ -349,6 +352,20 @@ subsection. . .SS New primitives .TP +.BI big\ e +Enlarges the expression it modifies; intended to have semantics like +CSS `large'. +In troff output, the point size is increased by\~5; +in MathML output, the expression uses +. +.RS +.IP +.EX + +.EE +.RE +. +.TP .IB e1\ smallover\ e2 This is similar to .BR over ; @@ -390,6 +407,9 @@ is defined as { type "operator" vcenter size +5 \e(*S } .RE . +.IP +(Note that vcenter is silently ignored when generating MathML.) +. .TP .IB e1\ accent\ e2 This sets @@ -399,7 +419,7 @@ as an accent over .I e2 is assumed to be at the correct height for a lowercase letter; .I e2 -will be moved down according if +is moved down according to whether .I e1 is taller or shorter than a lowercase letter. For example, @@ -432,7 +452,7 @@ as an accent under .I e2 is assumed to be at the correct height for a character without a descender; .I e2 -will be moved down if +is moved down if .I e1 has a descender. .B utilde @@ -454,8 +474,7 @@ but .I text is not subject to macro expansion because it is quoted; .I text -will be split up and the spacing between individual characters -will be adjusted. +is split up and the spacing between individual characters is adjusted. . .TP .BI nosplit\ text @@ -469,10 +488,10 @@ This has the same effect as .IP but because .I text -is not quoted it will be subject to macro expansion; +is not quoted it is subject to macro expansion; .I text -will not be split up -and the spacing between individual characters will not be adjusted. +is not split up +and the spacing between individual characters is not adjusted. . .TP .IB e\ opprime @@ -488,14 +507,14 @@ with .B opprime the\~\c .B 1 -will be tucked under the prime as a subscript to the\~\c +is tucked under the prime as a subscript to the\~\c .B A (as is conventional in mathematical typesetting), whereas with .B prime the\~\c .B 1 -will be a subscript to the prime character. +is a subscript to the prime character. The precedence of .B opprime is the same as that of @@ -508,7 +527,7 @@ and .BR uaccent . In unquoted text a\~\c .B ' -that is not the first character will be treated like +that is not the first character is treated like .BR opprime . . .TP @@ -522,7 +541,7 @@ macro named When the macro is called, the string .B 0s -will contain the output for\~\c +contains the output for\~\c .IR e , and the number registers .BR 0w , @@ -531,7 +550,7 @@ and the number registers .BR 0skern , and .BR 0skew -will contain the width, height, depth, subscript kern, and skew of\~\c +contain the width, height, depth, subscript kern, and skew of\~\c .IR e . (The .I "subscript kern" @@ -542,7 +561,7 @@ of an object says how far to the right of the center of the object an accent over the object should be placed.) The macro must modify .B 0s -so that it will output the desired result with its origin at the current +so that it outputs the desired result with its origin at the current point, and increase the current horizontal position by the width of the object. The number registers must also be modified so that they correspond to the @@ -670,15 +689,19 @@ The integer value\~\c using .BR groff 's .B \ex -escape. +escape (the value has no effect in MathML mode). Negative values are possible but have no effect. If there is more than a single value given in a matrix, the biggest one is used. . .SS Customization -The appearance of equations is controlled by a large number of parameters. -These can be set using -the +When +.B eqn +is generating troff markup, the appearance of equations is controlled +by a large number of parameters. They have no effect when generating +MathML mode, which pushes typesetting and fine motions downstream to +a MathML rendering engine. +These parameters can be set using the .B set command. . @@ -716,7 +739,7 @@ definitive. . TP .B minimum_size .B eqn -will not set anything at a smaller point-size than this. +doesn't set anything at a smaller point-size than this. The value is in points. . .TP @@ -726,12 +749,20 @@ The primitive emboldens an equation by overprinting two copies of the equation horizontally offset by this amount. +This parameter is not used in MathML mode; instead, fat text uses +. +.RS +.IP +.EX + +.EE +.RE . .TP .B over_hang -A fraction bar will be longer by twice this amount than +A fraction bar is longer by twice this amount than the maximum of the widths of the numerator and denominator; -in other words, it will overhang the numerator and +in other words, it overhangs the numerator and denominator by at least this amount. . .TP @@ -741,7 +772,7 @@ When or .B under is applied to a single character, -the line will be this long. +the line is this long. Normally, .B bar or @@ -756,7 +787,7 @@ Extensible delimiters produced with the .B left and .B right -primitives will have a combined height and depth of at least this many +primitives have a combined height and depth of at least this many thousandths of twice the maximum amount by which the sub-equation that the delimiters enclose extends away from the axis. . @@ -766,7 +797,7 @@ Extensible delimiters produced with the .B left and .B right -primitives will have a combined height and depth +primitives have a combined height and depth not less than the difference of twice the maximum amount by which the sub-equation that the delimiters enclose extends away from the axis @@ -819,29 +850,29 @@ escape sequence. .B num1 The .B over -command will shift up the numerator by at least this amount. +command shifts up the numerator by at least this amount. . .TP .B num2 The .B smallover -command will shift up the numerator by at least this amount. +command shifts up the numerator by at least this amount. . .TP .B denom1 The .B over -command will shift down the denominator by at least this amount. +command shifts down the denominator by at least this amount. . .TP .B denom2 The .B smallover -command will shift down the denominator by at least this amount. +command shifts down the denominator by at least this amount. . .TP .B sup1 -Normally superscripts will be shifted up by at least this amount. +Normally superscripts are shifted up by at least this amount. . .TP .B sup2 @@ -849,63 +880,63 @@ Superscripts within superscripts or upper limits or numerators of .B smallover fractions -will be shifted up by at least this amount. +are shifted up by at least this amount. This is usually less than sup1. . .TP .B sup3 Superscripts within denominators or square roots -or subscripts or lower limits will be shifted up by at least +or subscripts or lower limits are shifted up by at least this amount. This is usually less than sup2. . .TP .B sub1 -Subscripts will normally be shifted down by at least this amount. +Subscripts are normally shifted down by at least this amount. . .TP .B sub2 When there is both a subscript and a superscript, the subscript -will be shifted down by at least this amount. +is shifted down by at least this amount. . .TP .B sup_drop -The baseline of a superscript will be no more +The baseline of a superscript is no more than this much amount below the top of the object on which the superscript is set. . .TP .B sub_drop -The baseline of a subscript will be at least this much below +The baseline of a subscript is at least this much below the bottom of the object on which the subscript is set. . .TP .B big_op_spacing1 -The baseline of an upper limit will be at least this +The baseline of an upper limit is at least this much above the top of the object on which the limit is set. . .TP .B big_op_spacing2 -The baseline of a lower limit will be at least this +The baseline of a lower limit is at least this much below the bottom of the object on which the limit is set. . .TP .B big_op_spacing3 -The bottom of an upper limit will be at least this much above the +The bottom of an upper limit is at least this much above the top of the object on which the limit is set. . .TP .B big_op_spacing4 -The top of a lower limit will be at least this much below +The top of a lower limit is at least this much below the bottom of the object on which the limit is set. . .TP .B big_op_spacing5 -This much vertical space will be added above and below limits. +This much vertical space is added above and below limits. . .TP .B baseline_sep -The baselines of the rows in a pile or matrix will normally be +The baselines of the rows in a pile or matrix are normally this far apart. In most cases this should be equal to the sum of .B num1 @@ -915,21 +946,21 @@ and .TP .B shift_down The midpoint between the top baseline and the bottom baseline -in a matrix or pile will be shifted down by this much from the axis. +in a matrix or pile is shifted down by this much from the axis. In most cases this should be equal to .BR axis_height . . .TP .B column_sep -This much space will be added between columns in a matrix. +This much space is added between columns in a matrix. . .TP .B matrix_side_sep -This much space will be added at each side of a matrix. +This much space is added at each side of a matrix. . .TP .B draw_lines -If this is non-zero, lines will be drawn using the +If this is non-zero, lines are drawn using the .B \eD escape sequence, rather than with the .B \el @@ -940,7 +971,7 @@ character. .TP .B body_height The amount by which the height of the equation exceeds this -will be added as extra space before the line containing the equation +is added as extra space before the line containing the equation (using .BR \ex ). The default value is 85. @@ -948,7 +979,7 @@ The default value is 85. .TP .B body_depth The amount by which the depth of the equation exceeds this -will be added as extra space after the line containing the equation +is added as extra space after the line containing the equation (using .BR \ex ). The default value is 35. @@ -958,18 +989,18 @@ The default value is 35. If this is non-zero, then .B ndefine -will behave like +behaves like .B define and .B tdefine -will be ignored, +is ignored, otherwise .B tdefine -will behave like +behaves like .B define and .B ndefine -will be ignored. +is ignored. The default value is\~0 (This is typically changed to\~1 by the .B eqnrc @@ -994,19 +1025,19 @@ In a macro body, where .I n is between 1 and\~9, -will be replaced by the +is replaced by the .IR n-th argument if the macro is called with arguments; if there are fewer than .I n\~\c -arguments, it will be replaced by nothing. +arguments, it is replaced by nothing. A word containing a left parenthesis where the part of the word before the left parenthesis has been defined using the .B define command -will be recognized as a macro call with arguments; +is recognized as a macro call with arguments; characters following the left parenthesis -up to a matching right parenthesis will be treated as comma-separated +up to a matching right parenthesis are treated as comma-separated arguments; commas inside nested parentheses do not terminate an argument. . @@ -1016,7 +1047,7 @@ This is like the .B define command, but .I name -will not be recognized if called with arguments. +is not recognized if called with arguments. . .TP .BI include\ \(ts file \(ts @@ -1034,7 +1065,7 @@ beginning with .B .EQ or .B .EN -will be ignored. +are ignored. . .TP .BI ifdef\ name\ X\ anything\ X @@ -1131,10 +1162,10 @@ You can control which characters are treated as letters command described above. A type of .B letter -will cause a character to be set in italic type. +causes a character to be set in italic type. A type of .B digit -will cause a character to be set in roman type. +causes a character to be set in roman type. . . .SH FILES @@ -1142,10 +1173,75 @@ will cause a character to be set in roman type. .B @MACRODIR@/eqnrc Initialization file. . +.SH MATHML MODE LIMITATIONS +MathML is designed on the assumption that it cannot know the exact +physical characteristics of the media and devices on which it will +be rendered. +It does not support fine control of motions and sizes to the same +degree troff does. +Thus: +. +.IP * +.B eqn +parameters have no effect on the generated MathML. +. +.IP * +The +.BR special, +.BR up , +.BR down , +.BR fwd , +and +.B back +operations cannot be implemented, and yield a +MathML `' message instead. +. +.IP * +The +.B vcenter +keyword is silently ignored, as centering on the math axis is the +MathML default. +. +.IP * +Characters that +.B eqn +over troff sets extra large \(en notably the integral sign \(en +may appear too small and need to have their `' wrappers +adjusted by hand. +. +.LP +As in its troff mode, +.B eqn +in MathML mode leaves the +.B .EQ +and +.B .EN +delimiters in place for displayed equations, but emits no explicit +delimiters around inline equations. +They can, however, be recognized as strings that begin with `' +and end with `' and do not cross line boundaries. +. +.LP +See the +.B BUGS +section for translation limits specific to +.BR eqn . +. . .SH BUGS -Inline equations will be set at the point size that is current at the +Inline equations are set at the point size that is current at the beginning of the input line. +.LP +In MathML mode, the +.B mark +and +.B lineup +features don't work. +These could, in theory, be implemented with `' elements. +.LP +In MathML mode, each digit of a numeric literal gets a separate +`\:' pair, and decimal points are tagged with `\:'. +This is allowed by the specification, but inefficient. . . .SH "SEE ALSO" diff --git a/contrib/groff/src/preproc/eqn/eqn.y b/contrib/groff/src/preproc/eqn/eqn.y index 85157d6fce..a19eba3cb3 100644 --- a/contrib/groff/src/preproc/eqn/eqn.y +++ b/contrib/groff/src/preproc/eqn/eqn.y @@ -1,21 +1,21 @@ -/* Copyright (C) 1989, 1990, 1991, 1992, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2004, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ %{ #include #include diff --git a/contrib/groff/src/preproc/eqn/lex.cpp b/contrib/groff/src/preproc/eqn/lex.cpp index 6aa494dbf0..b328801d46 100644 --- a/contrib/groff/src/preproc/eqn/lex.cpp +++ b/contrib/groff/src/preproc/eqn/lex.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2005 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2005, 2007, + 2008, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "eqn.h" #include "eqn_tab.h" @@ -120,10 +120,12 @@ static struct { { "special", SPECIAL }, }; -static struct { +struct builtin_def { const char *name; const char *def; -} def_table[] = { +}; + +static struct builtin_def common_defs[] = { { "ALPHA", "\\(*A" }, { "BETA", "\\(*B" }, { "CHI", "\\(*X" }, @@ -215,11 +217,6 @@ static struct { { "and", "{roman \"and\"}" }, { "if", "{roman \"if\"}" }, { "for", "{roman \"for\"}" }, - { "sum", "{type \"operator\" vcenter size +5 \\(*S}" }, - { "prod", "{type \"operator\" vcenter size +5 \\(*P}" }, - { "int", "{type \"operator\" vcenter size +8 \\(is}" }, - { "union", "{type \"operator\" vcenter size +5 \\(cu}" }, - { "inter", "{type \"operator\" vcenter size +5 \\(ca}" }, { "times", "type \"binary\" \\(mu" }, { "ldots", "type \"inner\" { . . . }" }, { "inf", "\\(if" }, @@ -228,34 +225,59 @@ static struct { { "half", "{1 smallover 2}" }, { "hat_def", "roman \"^\"" }, { "hat", "accent { hat_def }" }, - { "dot_def", "back 15 \"\\v'-52M'.\\v'52M'\"" }, - { "dot", "accent { dot_def }" }, - { "dotdot_def", "back 25 \"\\v'-52M'..\\v'52M'\"" }, - { "dotdot", "accent { dotdot_def }" }, { "tilde_def", "\"~\"" }, { "tilde", "accent { tilde_def }" }, - { "utilde_def", "\"\\v'75M'~\\v'-75M'\"" }, - { "utilde", "uaccent { utilde_def }" }, - { "vec_def", "up 52 size -5 \\(->" }, - { "vec", "accent { vec_def }" }, - { "dyad_def", "up 52 size -5 {\\(<- back 60 \\(->}" }, - { "dyad", "accent { dyad_def }" }, { "==", "type \"relation\" \\(==" }, { "!=", "type \"relation\" \\(!=" }, { "+-", "type \"binary\" \\(+-" }, { "->", "type \"relation\" \\(->" }, { "<-", "type \"relation\" \\(<-" }, - { "<<", "{ < back 20 < }" }, - { ">>", "{ > back 20 > }" }, - { "...", "type \"inner\" vcenter { . . . }" }, + { "<<", "type \"relation\" \\(<<" }, + { ">>", "type \"relation\" \\(>>" }, { "prime", "'" }, { "approx", "type \"relation\" \"\\(~=\"" }, { "grad", "\\(gr" }, { "del", "\\(gr" }, - { "cdot", "type \"binary\" vcenter ." }, + { "cdot", "type \"binary\" \\(md" }, + { "cdots", "type \"inner\" { \\(md \\(md \\(md }" }, { "dollar", "$" }, }; +/* composite definitions that require troff size and motion operators */ +static struct builtin_def troff_defs[] = { + { "sum", "{type \"operator\" vcenter size +5 \\(*S}" }, + { "prod", "{type \"operator\" vcenter size +5 \\(*P}" }, + { "int", "{type \"operator\" vcenter size +8 \\(is}" }, + { "union", "{type \"operator\" vcenter size +5 \\(cu}" }, + { "inter", "{type \"operator\" vcenter size +5 \\(ca}" }, + { "dot_def", "up 52 back 15 \".\"" }, + { "dot", "accent { dot_def }" }, + { "dotdot_def", "up 52 back 25 \"..\"" }, + { "dotdot", "accent { dotdot_def }" }, + { "utilde_def", "down 75 \"~\"" }, + { "utilde", "uaccent { utilde_def }" }, + { "vec_def", "up 52 size -5 \\(->" }, + { "vec", "accent { vec_def }" }, + { "dyad_def", "up 52 size -5 { \\(<> }" }, + { "dyad", "accent { dyad_def }" }, + { "...", "type \"inner\" vcenter { . . . }" }, +}; + +/* equivalent definitions for MathML mode */ +static struct builtin_def mathml_defs[] = { + { "sum", "{type \"operator\" size big \\(*S}" }, + { "prod", "{type \"operator\" size big \\(*P}" }, + { "int", "{type \"operator\" size big \\(is}" }, + { "union", "{type \"operator\" size big \\(cu}" }, + { "inter", "{type \"operator\" size big \\(ca}" }, + { "dot", "accent { \".\" }" }, + { "dotdot", "accent { \"..\" }" }, + { "utilde", "uaccent { \"~\" }" }, + { "vec", "accent { \\(-> }" }, + { "dyad", "accent { \\(<> }" }, + { "...", "type \"inner\" { . . . }" }, +}; + void init_table(const char *device) { unsigned int i; @@ -265,12 +287,30 @@ void init_table(const char *device) def->tok = token_table[i].token; macro_table.define(token_table[i].name, def); } - for (i = 0; i < sizeof(def_table)/sizeof(def_table[0]); i++) { + for (i = 0; i < sizeof(common_defs)/sizeof(common_defs[0]); i++) { definition *def = new definition[1]; def->is_macro = 1; - def->contents = strsave(def_table[i].def); + def->contents = strsave(common_defs[i].def); def->is_simple = 1; - macro_table.define(def_table[i].name, def); + macro_table.define(common_defs[i].name, def); + } + if (output_format == troff) { + for (i = 0; i < sizeof(troff_defs)/sizeof(troff_defs[0]); i++) { + definition *def = new definition[1]; + def->is_macro = 1; + def->contents = strsave(troff_defs[i].def); + def->is_simple = 1; + macro_table.define(troff_defs[i].name, def); + } + } + else if (output_format == mathml) { + for (i = 0; i < sizeof(mathml_defs)/sizeof(mathml_defs[0]); i++) { + definition *def = new definition[1]; + def->is_macro = 1; + def->contents = strsave(mathml_defs[i].def); + def->is_simple = 1; + macro_table.define(mathml_defs[i].name, def); + } } definition *def = new definition[1]; def->is_macro = 1; diff --git a/contrib/groff/src/preproc/eqn/limit.cpp b/contrib/groff/src/preproc/eqn/limit.cpp index b9f35f97ef..5a633365b1 100644 --- a/contrib/groff/src/preproc/eqn/limit.cpp +++ b/contrib/groff/src/preproc/eqn/limit.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2007, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "eqn.h" #include "pbox.h" @@ -139,33 +139,56 @@ int limit_box::compute_metrics(int style) void limit_box::output() { - printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid); - if (to != 0) { + if (output_format == troff) { + printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid); + if (to != 0) { + printf("\\Z" DELIMITER_CHAR); + printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid); + printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u" + "+(-\\n[" WIDTH_FORMAT "]u+\\n[" SUB_KERN_FORMAT "]u/2u)'", + uid, to->uid, p->uid); + to->output(); + printf(DELIMITER_CHAR); + } + if (from != 0) { + printf("\\Z" DELIMITER_CHAR); + printf("\\v'\\n[" SUB_LOWER_FORMAT "]u'", uid); + printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u" + "+(-\\n[" SUB_KERN_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u)'", + uid, p->uid, from->uid); + from->output(); + printf(DELIMITER_CHAR); + } + printf("\\s[\\n[" SIZE_FORMAT "]u]", uid); printf("\\Z" DELIMITER_CHAR); - printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid); printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u" - "+(-\\n[" WIDTH_FORMAT "]u+\\n[" SUB_KERN_FORMAT "]u/2u)'", - uid, to->uid, p->uid); - to->output(); + "-(\\n[" WIDTH_FORMAT "]u/2u)'", + uid, p->uid); + p->output(); printf(DELIMITER_CHAR); + printf("\\h'\\n[" WIDTH_FORMAT "]u'", uid); } - if (from != 0) { - printf("\\Z" DELIMITER_CHAR); - printf("\\v'\\n[" SUB_LOWER_FORMAT "]u'", uid); - printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u" - "+(-\\n[" SUB_KERN_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u)'", - uid, p->uid, from->uid); - from->output(); - printf(DELIMITER_CHAR); + else if (output_format == mathml) { + if (from != 0 && to != 0) { + printf(""); + p->output(); + from->output(); + to->output(); + printf(""); + } + else if (from != 0) { + printf(""); + p->output(); + from->output(); + printf(""); + } + else if (to != 0) { + printf(""); + p->output(); + to->output(); + printf(""); + } } - printf("\\s[\\n[" SIZE_FORMAT "]u]", uid); - printf("\\Z" DELIMITER_CHAR); - printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u" - "-(\\n[" WIDTH_FORMAT "]u/2u)'", - uid, p->uid); - p->output(); - printf(DELIMITER_CHAR); - printf("\\h'\\n[" WIDTH_FORMAT "]u'", uid); } void limit_box::debug_print() diff --git a/contrib/groff/src/preproc/eqn/list.cpp b/contrib/groff/src/preproc/eqn/list.cpp index 003562afa5..ed656d1373 100644 --- a/contrib/groff/src/preproc/eqn/list.cpp +++ b/contrib/groff/src/preproc/eqn/list.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2007, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "eqn.h" #include "pbox.h" @@ -208,8 +208,10 @@ void list_box::compute_subscript_kern() void list_box::output() { + if (output_format == mathml) + printf(""); for (int i = 0; i < list.len; i++) { - if (i > 0) { + if (output_format == troff && i > 0) { int n = compute_spacing(is_script, list.p[i-1]->spacing_type, list.p[i]->spacing_type); @@ -218,6 +220,8 @@ void list_box::output() } list.p[i]->output(); } + if (output_format == mathml) + printf(""); } void list_box::handle_char_type(int st, int ft) diff --git a/contrib/groff/src/preproc/eqn/main.cpp b/contrib/groff/src/preproc/eqn/main.cpp index 7971e2c2dc..e784c2c561 100644 --- a/contrib/groff/src/preproc/eqn/main.cpp +++ b/contrib/groff/src/preproc/eqn/main.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2005, 2007, + 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "eqn.h" #include "stringclass.h" @@ -45,7 +45,8 @@ int one_size_reduction_flag = 0; int compatible_flag = 0; int no_newline_in_delim_flag = 0; int html = 0; - +int xhtml = 0; +eqnmode_t output_format; int read_line(FILE *fp, string *p) { @@ -67,7 +68,8 @@ void do_file(FILE *fp, const char *filename) { string linebuf; string str; - printf(".lf 1 %s\n", filename); + if (output_format == troff) + printf(".lf 1 %s\n", filename); current_filename = filename; current_lineno = 0; while (read_line(fp, &linebuf)) { @@ -110,11 +112,15 @@ void do_file(FILE *fp, const char *filename) inline_flag = 0; yyparse(); restore_compatibility(); - if (non_empty_flag) { - printf(".lf %d\n", current_lineno - 1); - output_string(); - } - printf(".lf %d\n", current_lineno); + if (non_empty_flag) + if (output_format == mathml) + putchar('\n'); + else { + printf(".lf %d\n", current_lineno - 1); + output_string(); + } + if (output_format == troff) + printf(".lf %d\n", current_lineno); put_string(linebuf, stdout); } else if (start_delim != '\0' && linebuf.search(start_delim) >= 0 @@ -171,18 +177,25 @@ static int inline_equation(FILE *fp, string &linebuf, string &str) ptr = &linebuf[0]; } str += '\0'; - if (html) { + if (output_format == troff && html) { printf(".as1 %s ", LINE_STRING); html_begin_suppress(); printf("\n"); } init_lex(str.contents(), current_filename, start_lineno); yyparse(); - if (html) { + if (output_format == troff && html) { printf(".as1 %s ", LINE_STRING); html_end_suppress(); printf("\n"); } + if (output_format == mathml) + printf("\n"); + if (xhtml) { + /* skip leading spaces */ + while ((*ptr != '\0') && (*ptr == ' ')) + ptr++; + } start = delim_search(ptr, start_delim); if (start == 0) { char *nl = strchr(ptr, '\n'); @@ -193,9 +206,11 @@ static int inline_equation(FILE *fp, string &linebuf, string &str) } } restore_compatibility(); - printf(".lf %d\n", current_lineno); + if (output_format == troff) + printf(".lf %d\n", current_lineno); output_string(); - printf(".lf %d\n", current_lineno + 1); + if (output_format == troff) + printf(".lf %d\n", current_lineno + 1); return 1; } @@ -279,11 +294,9 @@ int main(int argc, char **argv) config_macro_path.command_line_dir(optarg); break; case 'v': - { - printf("GNU eqn (groff) version %s\n", Version_string); - exit(0); - break; - } + printf("GNU eqn (groff) version %s\n", Version_string); + exit(0); + break; case 'd': if (optarg[0] == '\0' || optarg[1] == '\0') error("-d requires two character argument"); @@ -305,6 +318,16 @@ int main(int argc, char **argv) device = "ps"; html = 1; } + else if (strcmp(device, "MathML") == 0) { + output_format = mathml; + load_startup_file = 0; + } + else if (strcmp(device, "mathml:xhtml") == 0) { + device = "MathML"; + output_format = mathml; + load_startup_file = 0; + xhtml = 1; + } break; case 's': if (!set_gsize(optarg)) @@ -351,19 +374,21 @@ int main(int argc, char **argv) } init_table(device); init_char_table(); - printf(".if !'\\*(.T'%s' " - ".if !'\\*(.T'html' " // the html device uses `-Tps' to render - // equations as images - ".tm warning: %s should have been given a `-T\\*(.T' option\n", - device, program_name); - printf(".if '\\*(.T'html' " - ".if !'%s'ps' " - ".tm warning: %s should have been given a `-Tps' option\n", - device, program_name); - printf(".if '\\*(.T'html' " - ".if !'%s'ps' " - ".tm warning: (it is advisable to invoke groff via: groff -Thtml -e)\n", - device); + if (output_format == troff) { + printf(".if !'\\*(.T'%s' " + ".if !'\\*(.T'html' " // the html device uses `-Tps' to render + // equations as images + ".tm warning: %s should have been given a `-T\\*(.T' option\n", + device, program_name); + printf(".if '\\*(.T'html' " + ".if !'%s'ps' " + ".tm warning: %s should have been given a `-Tps' option\n", + device, program_name); + printf(".if '\\*(.T'html' " + ".if !'%s'ps' " + ".tm warning: (it is advisable to invoke groff via: groff -Thtml -e)\n", + device); + } if (load_startup_file) { char *path; FILE *fp = config_macro_path.open_file(STARTUP_FILE, &path); diff --git a/contrib/groff/src/preproc/eqn/mark.cpp b/contrib/groff/src/preproc/eqn/mark.cpp index 9fa65790c6..04783220c2 100644 --- a/contrib/groff/src/preproc/eqn/mark.cpp +++ b/contrib/groff/src/preproc/eqn/mark.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "eqn.h" #include "pbox.h" diff --git a/contrib/groff/src/preproc/eqn/neqn.man b/contrib/groff/src/preproc/eqn/neqn.man index 27261c419c..e09ff60be5 100644 --- a/contrib/groff/src/preproc/eqn/neqn.man +++ b/contrib/groff/src/preproc/eqn/neqn.man @@ -1,5 +1,5 @@ .ig -Copyright (C) 2001 Free Software Foundation, Inc. +Copyright (C) 2001, 2009 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice diff --git a/contrib/groff/src/preproc/eqn/other.cpp b/contrib/groff/src/preproc/eqn/other.cpp index 9f360df679..5cfdd1245d 100644 --- a/contrib/groff/src/preproc/eqn/other.cpp +++ b/contrib/groff/src/preproc/eqn/other.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2007, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "eqn.h" #include "pbox.h" @@ -65,17 +65,25 @@ int accent_box::compute_metrics(int style) void accent_box::output() { - printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u+\\n[" - SKEW_FORMAT "]u'", - p->uid, ab->uid, p->uid); - printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid); - ab->output(); - printf("\\h'-\\n[" WIDTH_FORMAT "]u'", ab->uid); - printf("\\v'\\n[" SUP_RAISE_FORMAT "]u'", uid); - printf("\\h'-(\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u+\\n[" - SKEW_FORMAT "]u)'", - p->uid, ab->uid, p->uid); - p->output(); + if (output_format == troff) { + printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u+\\n[" + SKEW_FORMAT "]u'", + p->uid, ab->uid, p->uid); + printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid); + ab->output(); + printf("\\h'-\\n[" WIDTH_FORMAT "]u'", ab->uid); + printf("\\v'\\n[" SUP_RAISE_FORMAT "]u'", uid); + printf("\\h'-(\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u+\\n[" + SKEW_FORMAT "]u)'", + p->uid, ab->uid, p->uid); + p->output(); + } + else if (output_format == mathml) { + printf(""); + p->output(); + ab->output(); + printf("") + } } #endif @@ -110,19 +118,27 @@ int accent_box::compute_metrics(int style) void accent_box::output() { - printf("\\Z" DELIMITER_CHAR); - printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u+\\n[" SKEW_FORMAT "]u" - "-(\\n[" WIDTH_FORMAT "]u/2u)'", - uid, p->uid, ab->uid); - printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid); - ab->output(); - printf(DELIMITER_CHAR); - printf("\\Z" DELIMITER_CHAR); - printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u-(\\n[" WIDTH_FORMAT "]u/2u)'", - uid, p->uid); - p->output(); - printf(DELIMITER_CHAR); - printf("\\h'\\n[" WIDTH_FORMAT "]u'", uid); + if (output_format == troff) { + printf("\\Z" DELIMITER_CHAR); + printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u+\\n[" SKEW_FORMAT "]u" + "-(\\n[" WIDTH_FORMAT "]u/2u)'", + uid, p->uid, ab->uid); + printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid); + ab->output(); + printf(DELIMITER_CHAR); + printf("\\Z" DELIMITER_CHAR); + printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u-(\\n[" WIDTH_FORMAT "]u/2u)'", + uid, p->uid); + p->output(); + printf(DELIMITER_CHAR); + printf("\\h'\\n[" WIDTH_FORMAT "]u'", uid); + } + else if (output_format == mathml) { + printf(""); + p->output(); + ab->output(); + printf(""); + } } void accent_box::check_tabs(int level) @@ -153,10 +169,14 @@ overline_char_box::overline_char_box() void overline_char_box::output() { - printf("\\v'-%dM/2u-%dM'", 7*default_rule_thickness, x_height); - printf((draw_flag ? "\\D'l%dM 0'" : "\\l'%dM\\&\\(ru'"), - accent_width); - printf("\\v'%dM/2u+%dM'", 7*default_rule_thickness, x_height); + if (output_format == troff) { + printf("\\v'-%dM/2u-%dM'", 7*default_rule_thickness, x_height); + printf((draw_flag ? "\\D'l%dM 0'" : "\\l'%dM\\&\\(ru'"), + accent_width); + printf("\\v'%dM/2u+%dM'", 7*default_rule_thickness, x_height); + } + else if (output_format == mathml) + printf("¯"); } void overline_char_box::debug_print() @@ -197,16 +217,23 @@ int overline_box::compute_metrics(int style) void overline_box::output() { - // 9 - printf("\\Z" DELIMITER_CHAR); - printf("\\v'-\\n[" HEIGHT_FORMAT "]u-(%dM/2u)'", - p->uid, 7*default_rule_thickness); - if (draw_flag) - printf("\\D'l\\n[" WIDTH_FORMAT "]u 0'", p->uid); - else - printf("\\l'\\n[" WIDTH_FORMAT "]u\\&\\(ru'", p->uid); - printf(DELIMITER_CHAR); - p->output(); + if (output_format == troff) { + // 9 + printf("\\Z" DELIMITER_CHAR); + printf("\\v'-\\n[" HEIGHT_FORMAT "]u-(%dM/2u)'", + p->uid, 7*default_rule_thickness); + if (draw_flag) + printf("\\D'l\\n[" WIDTH_FORMAT "]u 0'", p->uid); + else + printf("\\l'\\n[" WIDTH_FORMAT "]u\\&\\(ru'", p->uid); + printf(DELIMITER_CHAR); + p->output(); + } + else if (output_format == mathml) { + printf(""); + p->output(); + printf("¯"); + } } void overline_box::debug_print() @@ -267,18 +294,26 @@ int uaccent_box::compute_metrics(int style) void uaccent_box::output() { - printf("\\Z" DELIMITER_CHAR); - printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u-(\\n[" WIDTH_FORMAT "]u/2u)'", - uid, ab->uid); - printf("\\v'\\n[" DEPTH_FORMAT "]u'", p->uid); - ab->output(); - printf(DELIMITER_CHAR); - printf("\\Z" DELIMITER_CHAR); - printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u-(\\n[" WIDTH_FORMAT "]u/2u)'", - uid, p->uid); - p->output(); - printf(DELIMITER_CHAR); - printf("\\h'\\n[" WIDTH_FORMAT "]u'", uid); + if (output_format == troff) { + printf("\\Z" DELIMITER_CHAR); + printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u-(\\n[" WIDTH_FORMAT "]u/2u)'", + uid, ab->uid); + printf("\\v'\\n[" DEPTH_FORMAT "]u'", p->uid); + ab->output(); + printf(DELIMITER_CHAR); + printf("\\Z" DELIMITER_CHAR); + printf("\\h'\\n[" LEFT_WIDTH_FORMAT "]u-(\\n[" WIDTH_FORMAT "]u/2u)'", + uid, p->uid); + p->output(); + printf(DELIMITER_CHAR); + printf("\\h'\\n[" WIDTH_FORMAT "]u'", uid); + } + else if (output_format == mathml) { + printf(""); + p->output(); + ab->output(); + printf(""); + } } void uaccent_box::check_tabs(int level) @@ -314,10 +349,14 @@ underline_char_box::underline_char_box() void underline_char_box::output() { - printf("\\v'%dM/2u'", 7*default_rule_thickness); - printf((draw_flag ? "\\D'l%dM 0'" : "\\l'%dM\\&\\(ru'"), - accent_width); - printf("\\v'-%dM/2u'", 7*default_rule_thickness); + if (output_format == troff) { + printf("\\v'%dM/2u'", 7*default_rule_thickness); + printf((draw_flag ? "\\D'l%dM 0'" : "\\l'%dM\\&\\(ru'"), + accent_width); + printf("\\v'-%dM/2u'", 7*default_rule_thickness); + } + else if (output_format == mathml) + printf("_"); } void underline_char_box::debug_print() @@ -360,16 +399,23 @@ int underline_box::compute_metrics(int style) void underline_box::output() { - // 10 - printf("\\Z" DELIMITER_CHAR); - printf("\\v'\\n[" DEPTH_FORMAT "]u+(%dM/2u)'", - p->uid, 7*default_rule_thickness); - if (draw_flag) - printf("\\D'l\\n[" WIDTH_FORMAT "]u 0'", p->uid); - else - printf("\\l'\\n[" WIDTH_FORMAT "]u\\&\\(ru'", p->uid); - printf(DELIMITER_CHAR); - p->output(); + if (output_format == troff) { + // 10 + printf("\\Z" DELIMITER_CHAR); + printf("\\v'\\n[" DEPTH_FORMAT "]u+(%dM/2u)'", + p->uid, 7*default_rule_thickness); + if (draw_flag) + printf("\\D'l\\n[" WIDTH_FORMAT "]u 0'", p->uid); + else + printf("\\l'\\n[" WIDTH_FORMAT "]u\\&\\(ru'", p->uid); + printf(DELIMITER_CHAR); + p->output(); + } + else if (output_format == mathml) { + printf(""); + p->output(); + printf("¯"); + } } // we want an underline box to have 0 subscript kern @@ -405,9 +451,16 @@ int size_box::compute_metrics(int style) void size_box::output() { - printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid); - p->output(); - printf("\\s[\\n[" SIZE_FORMAT "]u]", uid); + if (output_format == troff) { + printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid); + p->output(); + printf("\\s[\\n[" SIZE_FORMAT "]u]", uid); + } + else if (output_format == mathml) { + printf("", size); + p->output(); + printf(""); + } } size_box::~size_box() @@ -449,12 +502,36 @@ int font_box::compute_metrics(int style) void font_box::output() { - printf("\\f[%s]", f); - const char *old_roman_font = current_roman_font; - current_roman_font = f; - p->output(); - current_roman_font = old_roman_font; - printf("\\f[\\n[" FONT_FORMAT "]]", uid); + if (output_format == troff) { + printf("\\f[%s]", f); + const char *old_roman_font = current_roman_font; + current_roman_font = f; + p->output(); + current_roman_font = old_roman_font; + printf("\\f[\\n[" FONT_FORMAT "]]", uid); + } + else if (output_format == mathml) { + const char *mlfont = f; + // bold and italic are already in MathML; translate eqn roman here + switch (f[0]) { + case 'I': + case 'i': + mlfont = "italic"; + break; + case 'B': + case 'b': + mlfont = "bold"; + break; + case 'R': + case 'r': + default: + mlfont = "normal"; + break; + } + printf("", mlfont); + p->output(); + printf(""); + } } void font_box::debug_print() @@ -480,10 +557,17 @@ int fat_box::compute_metrics(int style) void fat_box::output() { - p->output(); - printf("\\h'-\\n[" WIDTH_FORMAT "]u'", p->uid); - printf("\\h'%dM'", fat_offset); - p->output(); + if (output_format == troff) { + p->output(); + printf("\\h'-\\n[" WIDTH_FORMAT "]u'", p->uid); + printf("\\h'%dM'", fat_offset); + p->output(); + } + else if (output_format == mathml) { + printf(""); + p->output(); + printf(""); + } } @@ -519,9 +603,16 @@ int vmotion_box::compute_metrics(int style) void vmotion_box::output() { - printf("\\v'%dM'", -n); - p->output(); - printf("\\v'%dM'", n); + if (output_format == troff) { + printf("\\v'%dM'", -n); + p->output(); + printf("\\v'%dM'", n); + } + else if (output_format == mathml) { + printf("eqn vertical motion cannot be expressed " + "in MathML"); + p->output(); + } } void vmotion_box::debug_print() @@ -552,8 +643,15 @@ int hmotion_box::compute_metrics(int style) void hmotion_box::output() { - printf("\\h'%dM'", n); - p->output(); + if (output_format == troff) { + printf("\\h'%dM'", n); + p->output(); + } + else if (output_format == mathml) { + printf("eqn horizontal motion cannot be expessed " + "in MathML"); + p->output(); + } } void hmotion_box::debug_print() @@ -587,9 +685,11 @@ int vcenter_box::compute_metrics(int style) void vcenter_box::output() { - printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid); + if (output_format == troff) + printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid); p->output(); - printf("\\v'\\n[" SUP_RAISE_FORMAT "]u'", uid); + if (output_format == troff) + printf("\\v'\\n[" SUP_RAISE_FORMAT "]u'", uid); } void vcenter_box::debug_print() diff --git a/contrib/groff/src/preproc/eqn/over.cpp b/contrib/groff/src/preproc/eqn/over.cpp index 302c5b5d50..ab2ee05dd4 100644 --- a/contrib/groff/src/preproc/eqn/over.cpp +++ b/contrib/groff/src/preproc/eqn/over.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002 +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2007, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "eqn.h" #include "pbox.h" @@ -118,64 +117,73 @@ int over_box::compute_metrics(int style) void over_box::output() { - if (reduce_size) - printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid); -#ifdef USE_Z - printf("\\Z" DELIMITER_CHAR); -#endif - // move up to the numerator baseline - printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid); - // move across so that it's centered - printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u'", - uid, num->uid); - - // print the numerator - num->output(); - -#ifdef USE_Z - printf(DELIMITER_CHAR); -#else - // back again - printf("\\h'-\\n[" WIDTH_FORMAT "]u'", num->uid); - printf("\\h'-(\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u)'", - uid, num->uid); - // down again - printf("\\v'\\n[" SUP_RAISE_FORMAT "]u'", uid); -#endif -#ifdef USE_Z - printf("\\Z" DELIMITER_CHAR); -#endif - // move down to the denominator baseline - printf("\\v'\\n[" SUB_LOWER_FORMAT "]u'", uid); - - // move across so that it's centered - printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u'", - uid, den->uid); - - // print the the denominator - den->output(); - -#ifdef USE_Z - printf(DELIMITER_CHAR); -#else - // back again - printf("\\h'-\\n[" WIDTH_FORMAT "]u'", den->uid); - printf("\\h'-(\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u)'", - uid, den->uid); - // up again - printf("\\v'-\\n[" SUB_LOWER_FORMAT "]u'", uid); -#endif - if (reduce_size) - printf("\\s[\\n[" SIZE_FORMAT "]u]", uid); - // draw the line - printf("\\h'%dM'", null_delimiter_space); - printf("\\v'-%dM'", axis_height); - fputs(draw_flag ? "\\D'l" : "\\l'", stdout); - printf("\\n[" WIDTH_FORMAT "]u-%dM", - uid, 2*null_delimiter_space); - fputs(draw_flag ? " 0'" : "\\&\\(ru'", stdout); - printf("\\v'%dM'", axis_height); - printf("\\h'%dM'", null_delimiter_space); + if (output_format == troff) { + if (reduce_size) + printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid); + #ifdef USE_Z + printf("\\Z" DELIMITER_CHAR); + #endif + // move up to the numerator baseline + printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid); + // move across so that it's centered + printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u'", + uid, num->uid); + + // print the numerator + num->output(); + + #ifdef USE_Z + printf(DELIMITER_CHAR); + #else + // back again + printf("\\h'-\\n[" WIDTH_FORMAT "]u'", num->uid); + printf("\\h'-(\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u)'", + uid, num->uid); + // down again + printf("\\v'\\n[" SUP_RAISE_FORMAT "]u'", uid); + #endif + #ifdef USE_Z + printf("\\Z" DELIMITER_CHAR); + #endif + // move down to the denominator baseline + printf("\\v'\\n[" SUB_LOWER_FORMAT "]u'", uid); + + // move across so that it's centered + printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u'", + uid, den->uid); + + // print the the denominator + den->output(); + + #ifdef USE_Z + printf(DELIMITER_CHAR); + #else + // back again + printf("\\h'-\\n[" WIDTH_FORMAT "]u'", den->uid); + printf("\\h'-(\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u)'", + uid, den->uid); + // up again + printf("\\v'-\\n[" SUB_LOWER_FORMAT "]u'", uid); + #endif + if (reduce_size) + printf("\\s[\\n[" SIZE_FORMAT "]u]", uid); + // draw the line + printf("\\h'%dM'", null_delimiter_space); + printf("\\v'-%dM'", axis_height); + fputs(draw_flag ? "\\D'l" : "\\l'", stdout); + printf("\\n[" WIDTH_FORMAT "]u-%dM", + uid, 2*null_delimiter_space); + fputs(draw_flag ? " 0'" : "\\&\\(ru'", stdout); + printf("\\v'%dM'", axis_height); + printf("\\h'%dM'", null_delimiter_space); + } + else if (output_format == mathml) { + // FIXME: passing a displaystyle attribute doesn't validate. + printf(""); + num->output(); + den->output(); + printf(""); + } } void over_box::debug_print() diff --git a/contrib/groff/src/preproc/eqn/pbox.h b/contrib/groff/src/preproc/eqn/pbox.h index f100f21656..a2f35d30d7 100644 --- a/contrib/groff/src/preproc/eqn/pbox.h +++ b/contrib/groff/src/preproc/eqn/pbox.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ extern int fat_offset; diff --git a/contrib/groff/src/preproc/eqn/pile.cpp b/contrib/groff/src/preproc/eqn/pile.cpp index 10d1708809..239e81b33f 100644 --- a/contrib/groff/src/preproc/eqn/pile.cpp +++ b/contrib/groff/src/preproc/eqn/pile.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2004, 2007, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ // piles and matrices #include "eqn.h" @@ -56,45 +56,70 @@ int pile_box::compute_metrics(int style) void pile_box::output() { - int i; - printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid); - for (i = 0; i < col.len; i++) { + if (output_format == troff) { + int i; + printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid); + for (i = 0; i < col.len; i++) { + switch (col.align) { + case LEFT_ALIGN: + break; + case CENTER_ALIGN: + printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u'", + uid, col.p[i]->uid); + break; + case RIGHT_ALIGN: + printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u'", + uid, col.p[i]->uid); + break; + default: + assert(0); + } + col.p[i]->output(); + printf("\\h'-\\n[" WIDTH_FORMAT "]u'", col.p[i]->uid); + switch (col.align) { + case LEFT_ALIGN: + break; + case CENTER_ALIGN: + printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u'", + col.p[i]->uid, uid); + break; + case RIGHT_ALIGN: + printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u'", + col.p[i]->uid, uid); + break; + default: + assert(0); + } + if (i != col.len - 1) + printf("\\v'\\n[" BASELINE_SEP_FORMAT "]u'", uid); + } + printf("\\v'\\n[" SUP_RAISE_FORMAT "]u'", uid); + printf("\\v'-(%du*\\n[" BASELINE_SEP_FORMAT "]u)'", col.len - 1, uid); + printf("\\h'\\n[" WIDTH_FORMAT "]u'", uid); + } + else if (output_format == mathml) { + const char *av; switch (col.align) { case LEFT_ALIGN: - break; - case CENTER_ALIGN: - printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u'", - uid, col.p[i]->uid); + av = "left"; break; case RIGHT_ALIGN: - printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u'", - uid, col.p[i]->uid); - break; - default: - assert(0); - } - col.p[i]->output(); - printf("\\h'-\\n[" WIDTH_FORMAT "]u'", col.p[i]->uid); - switch (col.align) { - case LEFT_ALIGN: + av = "right"; break; case CENTER_ALIGN: - printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u'", - col.p[i]->uid, uid); - break; - case RIGHT_ALIGN: - printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u'", - col.p[i]->uid, uid); + av = "center"; break; default: assert(0); } - if (i != col.len - 1) - printf("\\v'\\n[" BASELINE_SEP_FORMAT "]u'", uid); + printf("", av); + for (int i = 0; i < col.len; i++) { + printf(""); + col.p[i]->output(); + printf(""); + } + printf(""); } - printf("\\v'\\n[" SUP_RAISE_FORMAT "]u'", uid); - printf("\\v'-(%du*\\n[" BASELINE_SEP_FORMAT "]u)'", col.len - 1, uid); - printf("\\h'\\n[" WIDTH_FORMAT "]u'", uid); } pile_box::pile_box(box *pp) : col(pp) @@ -163,51 +188,81 @@ int matrix_box::compute_metrics(int style) void matrix_box::output() { - printf("\\h'%dM'", matrix_side_sep); - for (int i = 0; i < len; i++) { - int j; - printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid); - for (j = 0; j < p[i]->len; j++) { - switch (p[i]->align) { - case LEFT_ALIGN: - break; - case CENTER_ALIGN: - printf("\\h'\\n[" COLUMN_WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u'", - uid, i, p[i]->p[j]->uid); - break; - case RIGHT_ALIGN: - printf("\\h'\\n[" COLUMN_WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u'", - uid, i, p[i]->p[j]->uid); - break; - default: - assert(0); + if (output_format == troff) { + printf("\\h'%dM'", matrix_side_sep); + for (int i = 0; i < len; i++) { + int j; + printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid); + for (j = 0; j < p[i]->len; j++) { + switch (p[i]->align) { + case LEFT_ALIGN: + break; + case CENTER_ALIGN: + printf("\\h'\\n[" COLUMN_WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u'", + uid, i, p[i]->p[j]->uid); + break; + case RIGHT_ALIGN: + printf("\\h'\\n[" COLUMN_WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u'", + uid, i, p[i]->p[j]->uid); + break; + default: + assert(0); + } + p[i]->p[j]->output(); + printf("\\h'-\\n[" WIDTH_FORMAT "]u'", p[i]->p[j]->uid); + switch (p[i]->align) { + case LEFT_ALIGN: + break; + case CENTER_ALIGN: + printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" COLUMN_WIDTH_FORMAT "]u/2u'", + p[i]->p[j]->uid, uid, i); + break; + case RIGHT_ALIGN: + printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" COLUMN_WIDTH_FORMAT "]u'", + p[i]->p[j]->uid, uid, i); + break; + default: + assert(0); + } + if (j != p[i]->len - 1) + printf("\\v'\\n[" BASELINE_SEP_FORMAT "]u'", uid); } - p[i]->p[j]->output(); - printf("\\h'-\\n[" WIDTH_FORMAT "]u'", p[i]->p[j]->uid); - switch (p[i]->align) { - case LEFT_ALIGN: - break; - case CENTER_ALIGN: - printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" COLUMN_WIDTH_FORMAT "]u/2u'", - p[i]->p[j]->uid, uid, i); - break; - case RIGHT_ALIGN: - printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" COLUMN_WIDTH_FORMAT "]u'", - p[i]->p[j]->uid, uid, i); - break; - default: - assert(0); + printf("\\v'\\n[" SUP_RAISE_FORMAT "]u'", uid); + printf("\\v'-(%du*\\n[" BASELINE_SEP_FORMAT "]u)'", p[i]->len - 1, uid); + printf("\\h'\\n[" COLUMN_WIDTH_FORMAT "]u'", uid, i); + if (i != len - 1) + printf("\\h'%dM'", column_sep); + } + printf("\\h'%dM'", matrix_side_sep); + } + else if (output_format == mathml) { + int n = p[0]->len; // Each column must have the same number of rows in it + printf(""); + for (int i = 0; i < n; i++) { + printf(""); + for (int j = 0; j < len; j++) { + const char *av; + switch (p[j]->align) { + case LEFT_ALIGN: + av = "left"; + break; + case RIGHT_ALIGN: + av = "right"; + break; + case CENTER_ALIGN: + av = "center"; + break; + default: + assert(0); + } + printf("", av); + p[j]->p[i]->output(); + printf(""); } - if (j != p[i]->len - 1) - printf("\\v'\\n[" BASELINE_SEP_FORMAT "]u'", uid); + printf(""); } - printf("\\v'\\n[" SUP_RAISE_FORMAT "]u'", uid); - printf("\\v'-(%du*\\n[" BASELINE_SEP_FORMAT "]u)'", p[i]->len - 1, uid); - printf("\\h'\\n[" COLUMN_WIDTH_FORMAT "]u'", uid, i); - if (i != len - 1) - printf("\\h'%dM'", column_sep); + printf(""); } - printf("\\h'%dM'", matrix_side_sep); } matrix_box::matrix_box(column *pp) diff --git a/contrib/groff/src/preproc/eqn/script.cpp b/contrib/groff/src/preproc/eqn/script.cpp index a9de742871..e50c6b661f 100644 --- a/contrib/groff/src/preproc/eqn/script.cpp +++ b/contrib/groff/src/preproc/eqn/script.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2004, 2007, 2008, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "eqn.h" #include "pbox.h" @@ -168,26 +167,49 @@ int script_box::compute_metrics(int style) void script_box::output() { - p->output(); - if (sup != 0) { - printf("\\Z" DELIMITER_CHAR); - printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid); - printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid); - sup->output(); - printf("\\s[\\n[" SIZE_FORMAT "]u]", uid); - printf(DELIMITER_CHAR); + if (output_format == troff) { + p->output(); + if (sup != 0) { + printf("\\Z" DELIMITER_CHAR); + printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid); + printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid); + sup->output(); + printf("\\s[\\n[" SIZE_FORMAT "]u]", uid); + printf(DELIMITER_CHAR); + } + if (sub != 0) { + printf("\\Z" DELIMITER_CHAR); + printf("\\v'\\n[" SUB_LOWER_FORMAT "]u'", uid); + printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid); + printf("\\h'-\\n[" SUB_KERN_FORMAT "]u'", p->uid); + sub->output(); + printf("\\s[\\n[" SIZE_FORMAT "]u]", uid); + printf(DELIMITER_CHAR); + } + printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u'", + uid, p->uid); } - if (sub != 0) { - printf("\\Z" DELIMITER_CHAR); - printf("\\v'\\n[" SUB_LOWER_FORMAT "]u'", uid); - printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid); - printf("\\h'-\\n[" SUB_KERN_FORMAT "]u'", p->uid); - sub->output(); - printf("\\s[\\n[" SIZE_FORMAT "]u]", uid); - printf(DELIMITER_CHAR); + else if (output_format == mathml) { + if (sup != 0 && sub != 0) { + printf(""); + p->output(); + sub->output(); + sup->output(); + printf(""); + } + else if (sup != 0) { + printf(""); + p->output(); + sup->output(); + printf(""); + } + else if (sub != 0) { + printf(""); + p->output(); + sub->output(); + printf(""); + } } - printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u'", - uid, p->uid); } void script_box::hint(unsigned flags) diff --git a/contrib/groff/src/preproc/eqn/special.cpp b/contrib/groff/src/preproc/eqn/special.cpp index 172686a505..e9793a5fe6 100644 --- a/contrib/groff/src/preproc/eqn/special.cpp +++ b/contrib/groff/src/preproc/eqn/special.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2007, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "eqn.h" #include "pbox.h" @@ -104,7 +104,10 @@ void special_box::compute_skew() void special_box::output() { - printf("\\*[" STRING_FORMAT "]", uid); + if (output_format == troff) + printf("\\*[" STRING_FORMAT "]", uid); + else if (output_format == mathml) + printf("eqn specials cannot be expressed in MathML"); } void special_box::debug_print() diff --git a/contrib/groff/src/preproc/eqn/sqrt.cpp b/contrib/groff/src/preproc/eqn/sqrt.cpp index 8f3373ff9c..99cb783f73 100644 --- a/contrib/groff/src/preproc/eqn/sqrt.cpp +++ b/contrib/groff/src/preproc/eqn/sqrt.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2003 +/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2003, 2007, 2008, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "eqn.h" #include "pbox.h" @@ -93,7 +92,8 @@ int sqrt_box::compute_metrics(int style) printf(".de " TEMP_MACRO "\n" ".nr " SQRT_WIDTH_FORMAT " 0\\w" DELIMITER_CHAR "\\*[" SQRT_STRING_FORMAT "]" DELIMITER_CHAR "\n" - ".if \\\\n[rst]-\\\\n[rsb]-%dM<\\n[" TEMP_REG "]" + ".if \\\\n[rst]" + "&(\\\\n[rst]-\\\\n[rsb]-%dM<\\n[" TEMP_REG "])" "&(\\\\n[.ps]<\\n[" MAX_SIZE_REG "]) \\{" ".ps +1\n" "." TEMP_MACRO "\n" @@ -150,21 +150,28 @@ int sqrt_box::compute_metrics(int style) void sqrt_box::output() { - printf("\\Z" DELIMITER_CHAR); - printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid); - printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid); - printf("\\*[" SQRT_STRING_FORMAT "]", uid); - printf("\\s[\\n[" SIZE_FORMAT "]u]", uid); - printf(DELIMITER_CHAR); - - printf("\\Z" DELIMITER_CHAR); - printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u" - "+\\n[" SQRT_WIDTH_FORMAT "]u/2u'", - uid, p->uid, uid); - p->output(); - printf(DELIMITER_CHAR); - - printf("\\h'\\n[" WIDTH_FORMAT "]u'", uid); + if (output_format == troff) { + printf("\\Z" DELIMITER_CHAR); + printf("\\s[\\n[" SMALL_SIZE_FORMAT "]u]", uid); + printf("\\v'-\\n[" SUP_RAISE_FORMAT "]u'", uid); + printf("\\*[" SQRT_STRING_FORMAT "]", uid); + printf("\\s[\\n[" SIZE_FORMAT "]u]", uid); + printf(DELIMITER_CHAR); + + printf("\\Z" DELIMITER_CHAR); + printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u" + "+\\n[" SQRT_WIDTH_FORMAT "]u/2u'", + uid, p->uid, uid); + p->output(); + printf(DELIMITER_CHAR); + + printf("\\h'\\n[" WIDTH_FORMAT "]u'", uid); + } + else if (output_format == mathml) { + printf(""); + p->output(); + printf(""); + } } void sqrt_box::debug_print() diff --git a/contrib/groff/src/preproc/eqn/text.cpp b/contrib/groff/src/preproc/eqn/text.cpp index e39221276b..36ea9a7035 100644 --- a/contrib/groff/src/preproc/eqn/text.cpp +++ b/contrib/groff/src/preproc/eqn/text.cpp @@ -1,27 +1,407 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2003 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2003, 2007, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ +#include #include "eqn.h" #include "pbox.h" #include "ptable.h" +struct map { + const char *from; + const char *to; +}; + +struct map entity_table[] = { + // Classic troff special characters + {"%", "­"}, // ISOnum + {"'", "´"}, // ISOdia + {"!=", "≠"}, // ISOtech + {"**", "∗"}, // ISOtech + {"*a", "α"}, // ISOgrk3 + {"*A", "A"}, + {"*b", "β"}, // ISOgrk3 + {"*B", "B"}, + {"*d", "δ"}, // ISOgrk3 + {"*D", "Δ"}, // ISOgrk3 + {"*e", "ε"}, // ISOgrk3 + {"*E", "E"}, + {"*f", "φ"}, // ISOgrk3 + {"*F", "Φ"}, // ISOgrk3 + {"*g", "γ"}, // ISOgrk3 + {"*G", "Γ"}, // ISOgrk3 + {"*h", "θ"}, // ISOgrk3 + {"*H", "Θ"}, // ISOgrk3 + {"*i", "ι"}, // ISOgrk3 + {"*I", "I"}, + {"*k", "κ"}, // ISOgrk3 + {"*K", "K;"}, + {"*l", "&lamda;"}, // ISOgrk3 + {"*L", "Λ"}, // ISOgrk3 + {"*m", "μ"}, // ISOgrk3 + {"*M", "M"}, + {"*n", "ν"}, // ISOgrk3 + {"*N", "N"}, + {"*o", "o"}, + {"*O", "O"}, + {"*p", "π"}, // ISOgrk3 + {"*P", "Π"}, // ISOgrk3 + {"*q", "ψ"}, // ISOgrk3 + {"*Q", "&PSI;"}, // ISOgrk3 + {"*r", "ρ"}, // ISOgrk3 + {"*R", "R"}, + {"*s", "σ"}, // ISOgrk3 + {"*S", "Σ"}, // ISOgrk3 + {"*t", "τ"}, // ISOgrk3 + {"*T", "Τ"}, // ISOgrk3 + {"*u", "υ"}, // ISOgrk3 + {"*U", "Υ"}, // ISOgrk3 + {"*w", "ω"}, // ISOgrk3 + {"*W", "Ω"}, // ISOgrk3 + {"*x", "χ"}, // ISOgrk3 + {"*X", "Χ"}, // ISOgrk3 + {"*y", "η"}, // ISOgrk3 + {"*Y", "Η"}, // ISOgrk3 + {"*z", "ζ"}, // ISOgrk3 + {"*Z", "Ζ"}, // ISOgrk3 + {"+-", "±"}, // ISOnum + {"->", "→"}, // ISOnum + {"12", "½"}, // ISOnum + {"14", "¼"}, // ISOnum + {"34", "¾"}, // ISOnum + {"<-", "←"}, // ISOnum + {"==", "≡"}, // ISOtech + {"Fi", "ffi"}, // ISOpub + {"Fl", "ffl"}, // ISOpub + {"aa", "´"}, // ISOdia + {"ap", "∼"}, // ISOtech + {"bl", "&phonexb;"}, // ISOpub + {"br", "│"}, // ISObox + {"bs", "☎"}, // ISOpub (for the Bell logo) + {"bu", "•"}, // ISOpub + {"bv", "|"}, // ISOnum + {"ca", "∩"}, // ISOtech + {"ci", "○"}, // ISOpub + {"co", "©"}, // ISOnum + {"ct", "¢"}, // ISOnum + {"cu", "∪"}, // ISOtech + {"da", "↓"}, // ISOnum + {"de", "°"}, // ISOnum + {"dg", "†"}, // ISOpub + {"dd", "‡"}, // ISOpub + {"di", "÷"}, // ISOnum + {"em", "—"}, // ISOpub + {"eq", "="}, // ISOnum + {"es", "∅"}, // ISOamso + {"ff", "ff"}, // ISOpub + {"fi", "fi"}, // ISOpub + {"fl", "fl"}, // ISOpub + {"fm", "′"}, // ISOtech + {"ge", "≥"}, // ISOtech + {"gr", "∇"}, // ISOtech + {"hy", "‐"}, // ISOnum + {"ib", "⊆"}, // ISOtech + {"if", "∞"}, // ISOtech + {"ip", "⊇"}, // ISOtech + {"is", "∫"}, // ISOtech + {"le", "≤"}, // ISOtech + // Some pile characters go here + {"mi", "−"}, // ISOtech + {"mo", "∈"}, // ISOtech + {"mu", "×"}, // ISOnum + {"no", "¬"}, // ISOnum + {"or", "|"}, // ISOnum + {"pl", "+"}, // ISOnum + {"pt", "∝"}, // ISOtech + {"rg", "™"}, // ISOnum + // More pile characters go here + {"rn", "¯"}, // ISOdia + {"ru", "_"}, // ISOnum + {"sb", "⊂"}, // ISOtech + {"sc", "§"}, // ISOnum + {"sl", "/"}, + {"sp", "⊃"}, // ISOtech + {"sq", "▪"}, // ISOpub + {"sr", "√"}, // ISOtech + {"ts", "ς"}, // ISOgrk3 + {"ua", "↑"}, // ISOnum + {"ul", "_"}, + {"~=", "≅"}, // ISOtech + // Extended specials supported by groff; see groff_char(7). + // These are listed in the order they occur on that man page. + {"-D", "Ð"}, // ISOlat: Icelandic uppercase eth + {"Sd", "ð"}, // ISOlat1: Icelandic lowercase eth + {"TP", "Þ"}, // ISOlat1: Icelandic uppercase thorn + {"Tp", "þ"}, // ISOlat1: Icelandic lowercase thorn + {"ss", "ß"}, // ISOlat1 + // Ligatures + // ff, fi, fl, ffi, ffl from old troff go here + {"AE", "Æ"}, // ISOlat1 + {"ae", "æ"}, // ISOlat1 + {"OE", "Œ"}, // ISOlat2 + {"oe", "œ"}, // ISOlat2 + {"IJ", "ij"}, // ISOlat2: Dutch IJ ligature + {"ij", "IJ"}, // ISOlat2: Dutch ij ligature + {".i", "ı"}, // ISOlat2,ISOamso + {".j", "&jnodot;"}, // ISOamso (undocumented but in 1.19) + // Accented characters + {"'A", "Á"}, // ISOlat1 + {"'C", "Ć"}, // ISOlat2 + {"'E", "É"}, // ISOlat1 + {"'I", "Í"}, // ISOlat1 + {"'O", "Ó"}, // ISOlat1 + {"'U", "Ú"}, // ISOlat1 + {"'Y", "Ý"}, // ISOlat1 + {"'a", "á"}, // ISOlat1 + {"'c", "ć"}, // ISOlat2 + {"'e", "é"}, // ISOlat1 + {"'i", "í"}, // ISOlat1 + {"'o", "ó"}, // ISOlat1 + {"'u", "ú"}, // ISOlat1 + {"'y", "ý"}, // ISOlat1 + {":A", "Ä"}, // ISOlat1 + {":E", "Ë"}, // ISOlat1 + {":I", "Ï"}, // ISOlat1 + {":O", "Ö"}, // ISOlat1 + {":U", "Ü"}, // ISOlat1 + {":Y", "Ÿ"}, // ISOlat2 + {":a", "ä"}, // ISOlat1 + {":e", "ë"}, // ISOlat1 + {":i", "ï"}, // ISOlat1 + {":o", "ö"}, // ISOlat1 + {":u", "ü"}, // ISOlat1 + {":y", "ÿ"}, // ISOlat1 + {"^A", "Â"}, // ISOlat1 + {"^E", "Ê"}, // ISOlat1 + {"^I", "Î"}, // ISOlat1 + {"^O", "Ô"}, // ISOlat1 + {"^U", "Û"}, // ISOlat1 + {"^a", "â"}, // ISOlat1 + {"^e", "ê"}, // ISOlat1 + {"^i", "î"}, // ISOlat1 + {"^o", "ô"}, // ISOlat1 + {"^u", "û"}, // ISOlat1 + {"`A", "À"}, // ISOlat1 + {"`E", "È"}, // ISOlat1 + {"`I", "Ì"}, // ISOlat1 + {"`O", "Ò"}, // ISOlat1 + {"`U", "Ù"}, // ISOlat1 + {"`a", "à"}, // ISOlat1 + {"`e", "è"}, // ISOlat1 + {"`i", "ì"}, // ISOlat1 + {"`o", "ò"}, // ISOlat1 + {"`u", "ù"}, // ISOlat1 + {"~A", "Ã"}, // ISOlat1 + {"~N", "Ñ"}, // ISOlat1 + {"~O", "Õ"}, // ISOlat1 + {"~a", "ã"}, // ISOlat1 + {"~n", "ñ"}, // ISOlat1 + {"~o", "õ"}, // ISOlat1 + {"vS", "Š"}, // ISOlat2 + {"vs", "š"}, // ISOlat2 + {"vZ", "Ž"}, // ISOlat2 + {"vz", "ž"}, // ISOlat2 + {",C", "Ç"}, // ISOlat1 + {",c", "ç"}, // ISOlat1 + {"/L", "Ł"}, // ISOlat2: Polish L with a slash + {"/l", "ł"}, // ISOlat2: Polish l with a slash + {"/O", "Ø"}, // ISOlat1 + {"/o", "ø"}, // ISOlat1 + {"oA", "Å"}, // ISOlat1 + {"oa", "å"}, // ISOlat1 + // Accents + {"a\"","˝"}, // ISOdia: double acute accent (Hungarian umlaut) + {"a-", "¯"}, // ISOdia: macron or bar accent + {"a.", "˙"}, // ISOdia: dot above + {"a^", "ˆ"}, // ISOdia: circumflex accent + {"aa", "´"}, // ISOdia: acute accent + {"ga", "`"}, // ISOdia: grave accent + {"ab", "˘"}, // ISOdia: breve accent + {"ac", "¸"}, // ISOdia: cedilla accent + {"ad", "¨"}, // ISOdia: umlaut or dieresis + {"ah", "ˇ"}, // ISOdia: caron (aka hacek accent) + {"ao", "˚"}, // ISOdia: ring or circle accent + {"a~", "˜"}, // ISOdia: tilde accent + {"ho", "˛"}, // ISOdia: hook or ogonek accent + {"ha", "^"}, // ASCII circumflex, hat, caret + {"ti", "~"}, // ASCII tilde, large tilde + // Quotes + {"Bq", "‚"}, // ISOpub: low double comma quote + {"bq", "„"}, // ISOpub: low single comma quote + {"lq", "“"}, // ISOnum + {"rq", "”"}, // ISOpub + {"oq", "‘"}, // ISOnum: single open quote + {"cq", "’"}, // ISOnum: single closing quote (ASCII 39) + {"aq", "&zerosp;'"}, // apostrophe quote + {"dq", "\""}, // double quote (ASCII 34) + {"Fo", "«"}, // ISOnum + {"Fc", "»"}, // ISOnum + //{"fo", "&fo;"}, + //{"fc", "&fc;"}, + // Punctuation + {"r!", "¡"}, // ISOnum + {"r?", "¿"}, // ISOnum + // Old troff \(em goes here + {"en", "–"}, // ISOpub: en dash + // Old troff \(hy goes here + // Brackets + {"lB", "["}, // ISOnum: left (square) bracket + {"rB", "]"}, // ISOnum: right (square) bracket + {"lC", "{"}, // ISOnum: left (curly) brace + {"rC", "}"}, // ISOnum: right (curly) brace + {"la", "⟨"}, // ISOtech: left angle bracket + {"ra", "⟩"}, // ISOtech: right angle bracket + // Old troff \(bv goes here + // Bracket-pile characters could go here. + // Arrows + // Old troff \(<- and \(-> go here + {"<>", "↔"}, // ISOamsa + {"da", "↓"}, // ISOnum + {"ua", "↑"}, // ISOnum + {"lA", "⇐"}, // ISOtech + {"rA", "⇒"}, // ISOtech + {"hA", "⇔"}, // ISOtech: horizontal double-headed arrow + {"dA", "⇓"}, // ISOamsa + {"uA", "⇑"}, // ISOamsa + {"vA", "⇕"}, // ISOamsa: vertical double-headed double arrow + //{"an", "&an;"}, + // Lines + {"-h", "ℏ"}, // ISOamso: h-bar (Planck's constant) + // Old troff \(or goes here + {"ba", "|"}, // ISOnum + // Old troff \(br, \{u, \(ul, \(bv go here + {"bb", "¦"}, // ISOnum + {"sl", "/"}, + {"rs", "\"}, // ISOnum + // Text markers + // Old troff \(ci, \(bu, \(dd, \(dg go here + {"lz", "◊"}, // ISOpub + // Old troff sq goes here + {"ps", "¶"}, // ISOnum: paragraph or pilcrow sign + {"sc", "§"}, // ISOnum (in old troff) + // Old troff \(lh, \{h go here + {"at", "@"}, // ISOnum + {"sh", "#"}, // ISOnum + //{"CR", "&CR;"}, + {"OK", "✓"}, // ISOpub + // Legalize + // Old troff \(co, \{g go here + {"tm", "™"}, // ISOnum + // Currency symbols + {"Do", "$"}, // ISOnum + {"ct", "¢"}, // ISOnum + {"eu", "€"}, + {"Eu", "€"}, + {"Ye", "¥"}, // ISOnum + {"Po", "£"}, // ISOnum + {"Cs", "¤"}, // ISOnum: currency sign + {"Fn", "&fnof"}, // ISOtech + // Units + // Old troff de goes here + {"%0", "‰"}, // ISOtech: per thousand, per mille sign + // Old troff \(fm goes here + {"sd", "″"}, // ISOtech + {"mc", "µ"}, // ISOnum + {"Of", "ª"}, // ISOnum + {"Om", "º"}, // ISOnum + // Logical symbols + {"AN", "∧"}, // ISOtech + {"OR", "∨"}, // ISOtech + // Old troff \(no goes here + {"te", "∃"}, // ISOtech: there exists, existential quantifier + {"fa", "∀"}, // ISOtech: for all, universal quantifier + {"st", "&bepsi"}, // ISOamsr: such that + {"3d", "∴"}, // ISOtech + {"tf", "∴"}, // ISOtech + // Mathematical symbols + // Old troff "12", "14", "34" goes here + {"S1", "¹"}, // ISOnum + {"S2", "²"}, // ISOnum + {"S3", "³"}, // ISOnum + // Old troff \(pl", \-, \(+- go here + {"t+-", "±"}, // ISOnum + {"-+", "∓"}, // ISOtech + {"pc", "·"}, // ISOnum + {"md", "·"}, // ISOnum + // Old troff \(mu goes here + {"tmu", "×"}, // ISOnum + {"c*", "⊗"}, // ISOamsb: multiply sign in a circle + {"c+", "⊕"}, // ISOamsb: plus sign in a circle + // Old troff \(di goes here + {"tdi", "÷"}, // ISOnum + {"f/", "―"}, // ISOnum: horizintal bar for fractions + // Old troff \(** goes here + {"<=", "≤"}, // ISOtech + {">=", "≥"}, // ISOtech + {"<<", "≪"}, // ISOamsr + {">>", "≫"}, // ISOamsr + {"!=", "≠"}, // ISOtech + // Old troff \(eq and \(== go here + {"=~", "≅"}, // ISOamsr + // Old troff \(ap goes here + {"~~", "≈"}, // ISOtech + // This appears to be an error in the groff table. + // It clashes with the Bell Labs use of ~= for a congruence sign + // {"~=", "≈"}, // ISOamsr + // Old troff \(pt, \(es, \(mo go here + {"nm", "∉"}, // ISOtech + {"nb", "⊄"}, // ISOamsr + {"nc", "⊅"}, // ISOamsn + {"ne", "≢"}, // ISOamsn + // Old troff \(sb, \(sp, \(ib, \(ip, \(ca, \(cu go here + {"/_", "∠"}, // ISOamso + {"pp", "⊥"}, // ISOtech + // Old troff \(is goes here + {"sum", "∑"}, // ISOamsb + {"product", "∏"}, // ISOamsb + {"gr", "∇"}, // ISOtech + // Old troff \(sr. \{n, \(if go here + {"Ah", "ℵ"}, // ISOtech + {"Im", "ℑ"}, // ISOamso: Fraktur I, imaginary + {"Re", "ℜ"}, // ISOamso: Fraktur R, real + {"wp", "℘"}, // ISOamso + {"pd", "∂"}, // ISOtech: partial differentiation sign + // Their table duplicates the Greek letters here. + // We list only the variant forms here, mapping them into + // the ISO Greek 4 variants (which may or may not be correct :-() + {"+f", "&b.phiv;"}, // ISOgrk4: variant phi + {"+h", "&b.thetas;"}, // ISOgrk4: variant theta + {"+p", "&b.omega;"}, // ISOgrk4: variant pi, looking like omega + // Card symbols + {"CL", "♣"}, // ISOpub: club suit + {"SP", "♠"}, // ISOpub: spade suit + {"HE", "♥"}, // ISOpub: heart suit + {"DI", "♦"}, // ISOpub: diamond suit +}; + +const char *special_to_entity(const char *sp) +{ + struct map *mp; + for (mp = entity_table; + mp < entity_table + sizeof(entity_table)/sizeof(entity_table[0]); + mp++) { + if (strcmp(mp->from, sp) == 0) + return mp->to; + } + return NULL; +} + class char_box : public simple_box { unsigned char c; char next_is_italic; @@ -48,6 +428,18 @@ public: void handle_char_type(int, int); }; +enum spacing_type { + s_ordinary, + s_operator, + s_binary, + s_relation, + s_opening, + s_closing, + s_punctuation, + s_inner, + s_suppress +}; + const char *spacing_type_table[] = { "ordinary", "operator", @@ -115,24 +507,24 @@ static void set_special_char_type(const char *ch, int st, int ft) void init_char_table() { - set_special_char_type("pl", 2, -1); // binary - set_special_char_type("mi", 2, -1); - set_special_char_type("eq", 3, -1); // relation - set_special_char_type("<=", 3, -1); - set_special_char_type(">=", 3, -1); - char_table['}'].spacing_type = 5; // closing - char_table[')'].spacing_type = 5; - char_table[']'].spacing_type = 5; - char_table['{'].spacing_type = 4; // opening - char_table['('].spacing_type = 4; - char_table['['].spacing_type = 4; - char_table[','].spacing_type = 6; // punctuation - char_table[';'].spacing_type = 6; - char_table[':'].spacing_type = 6; - char_table['.'].spacing_type = 6; - char_table['>'].spacing_type = 3; - char_table['<'].spacing_type = 3; - char_table['*'].spacing_type = 2; // binary + set_special_char_type("pl", s_binary, -1); + set_special_char_type("mi", s_binary, -1); + set_special_char_type("eq", s_relation, -1); + set_special_char_type("<=", s_relation, -1); + set_special_char_type(">=", s_relation, -1); + char_table['}'].spacing_type = s_closing; + char_table[')'].spacing_type = s_closing; + char_table[']'].spacing_type = s_closing; + char_table['{'].spacing_type = s_opening; + char_table['('].spacing_type = s_opening; + char_table['['].spacing_type = s_opening; + char_table[','].spacing_type = s_punctuation; + char_table[';'].spacing_type = s_punctuation; + char_table[':'].spacing_type = s_punctuation; + char_table['.'].spacing_type = s_punctuation; + char_table['>'].spacing_type = s_relation; + char_table['<'].spacing_type = s_relation; + char_table['*'].spacing_type = s_binary; for (int i = 0; i < 256; i++) if (csalpha(i)) char_table[i].font_type = LETTER_TYPE; @@ -180,21 +572,45 @@ void char_box::hint(unsigned flags) void char_box::output() { - int font_type = char_table[c].font_type; - if (font_type != LETTER_TYPE) - printf("\\f[%s]", current_roman_font); - if (!prev_is_italic) - fputs("\\,", stdout); - if (c == '\\') - fputs("\\e", stdout); - else - putchar(c); - if (!next_is_italic) - fputs("\\/", stdout); - else - fputs("\\&", stdout); // suppress ligaturing and kerning - if (font_type != LETTER_TYPE) - fputs("\\fP", stdout); + if (output_format == troff) { + int font_type = char_table[c].font_type; + if (font_type != LETTER_TYPE) + printf("\\f[%s]", current_roman_font); + if (!prev_is_italic) + fputs("\\,", stdout); + if (c == '\\') + fputs("\\e", stdout); + else + putchar(c); + if (!next_is_italic) + fputs("\\/", stdout); + else + fputs("\\&", stdout); // suppress ligaturing and kerning + if (font_type != LETTER_TYPE) + fputs("\\fP", stdout); + } + else if (output_format == mathml) { + if (isdigit(c)) + printf(""); + else if (char_table[c].spacing_type) + printf(""); + else + printf(""); + if (c == '<') + printf("<"); + else if (c == '>') + printf(">"); + else if (c == '&') + printf("&"); + else + putchar(c); + if (isdigit(c)) + printf(""); + else if (char_table[c].spacing_type) + printf(""); + else + printf(""); + } } int char_box::left_is_italic() @@ -237,12 +653,21 @@ special_char_box::~special_char_box() void special_char_box::output() { - int font_type = get_special_char_font_type(s); - if (font_type != LETTER_TYPE) - printf("\\f[%s]", current_roman_font); - printf("\\,\\[%s]\\/", s); - if (font_type != LETTER_TYPE) - printf("\\fP"); + if (output_format == troff) { + int font_type = get_special_char_font_type(s); + if (font_type != LETTER_TYPE) + printf("\\f[%s]", current_roman_font); + printf("\\,\\[%s]\\/", s); + if (font_type != LETTER_TYPE) + printf("\\fP"); + } + else if (output_format == mathml) { + const char *entity = special_to_entity(s); + if (entity != NULL) + printf("%s", entity); + else + printf("unknown eqn/troff special char %s", s); + } } int special_char_box::is_char() diff --git a/contrib/groff/src/preproc/grn/grn.man b/contrib/groff/src/preproc/grn/grn.man index 575b4ee70c..e723ae43f9 100644 --- a/contrib/groff/src/preproc/grn/grn.man +++ b/contrib/groff/src/preproc/grn/grn.man @@ -1,6 +1,7 @@ '\" t .ig -Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +Copyright (C) 2000, 2001, 2002, 2003, 2004, 2006, 2009 + Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice @@ -341,9 +342,9 @@ However, .I gremlin text is now processed by .IR @g@troff , -so anything legal in a single line of +so anything valid in a single line of .I @g@troff -input is legal in a line of +input is valid in a line of .I gremlin text (barring `.' directives at the beginning of a line). Thus, it is possible to have equations within a @@ -547,7 +548,7 @@ version). After the points comes a line containing two decimal values, giving the brush and size for the element. The brush determines the style in which things are drawn. -For vectors, arcs, and curves there are six legal brush values: +For vectors, arcs, and curves there are six valid brush values: .sp .TS center, tab(@); @@ -560,7 +561,7 @@ ncw(0.1i)l. 6 \(mi@@medium solid lines .TE .sp -For polygons, one more value, 0, is legal. +For polygons, one more value, 0, is valid. It specifies a polygon with an invisible border. For text, the brush selects a font as follows: .sp diff --git a/contrib/groff/src/preproc/grn/hdb.cpp b/contrib/groff/src/preproc/grn/hdb.cpp index 5f54040dd5..408609a097 100644 --- a/contrib/groff/src/preproc/grn/hdb.cpp +++ b/contrib/groff/src/preproc/grn/hdb.cpp @@ -6,8 +6,8 @@ * gremlin picture editor. */ -#include "gprint.h" #include +#include "gprint.h" #include #include diff --git a/contrib/groff/src/preproc/grn/main.cpp b/contrib/groff/src/preproc/grn/main.cpp index c939647f2c..401109ad6d 100644 --- a/contrib/groff/src/preproc/grn/main.cpp +++ b/contrib/groff/src/preproc/grn/main.cpp @@ -97,6 +97,20 @@ extern POINT *PTMakePoint(double x, double y, POINT **pplist); /* #define DEFSTIPPLE "gs" */ #define DEFSTIPPLE "cf" +/* + * This grn implementation emits `.st' requests to control stipple effects, + * but groff does not (currently) support any such request. + * + * This hack disables the emission of such requests, without destroying the + * infrastructure necessary to support the feature in the future; to enable + * the emission of `.st' requests, at a future date when groff can support + * them, simply rewrite the following #define as: + * + * #define USE_ST_REQUEST stipple + * + * with accompanying comment: ``emit `.st' requests as required''. + */ +#define USE_ST_REQUEST 0 /* never emit `.st' requests */ #define MAXINLINE 100 /* input line length */ @@ -205,9 +219,9 @@ int linenum = 0; /* line number of input file */ char inputline[MAXINLINE]; /* spot to filter through the file */ char *c1 = inputline; /* c1, c2, and c3 will be used to */ char *c2 = inputline + 1; /* hunt for lines that begin with */ -char *c3 = inputline + 2; /* ".GS" by looking individually */ +char *c3 = inputline + 2; /* `.GS' by looking individually */ char *c4 = inputline + 3; /* needed for compatibility mode */ -char GScommand[MAXINLINE]; /* put user's ".GS" command line here */ +char GScommand[MAXINLINE]; /* put user's `.GS' command line here */ char gremlinfile[MAXINLINE]; /* filename to use for a picture */ int SUNFILE = FALSE; /* TRUE if SUN gremlin file */ int compatibility_flag = FALSE; /* TRUE if in compatibility mode */ @@ -566,7 +580,7 @@ conv(register FILE *fp, ".sp -1\n", xright - xleft, ybottom - ytop, GScommand); - if (stipple) /* stipple requested for this picture */ + if (USE_ST_REQUEST) /* stipple requested for this picture */ printf(".st %s\n", stipple); lastx = xleft; /* note where we are (upper left */ lastyline = lasty = ytop; /* corner of the picture) */ @@ -632,7 +646,7 @@ conv(register FILE *fp, printf("\\D't %du'\n", DEFTHICK); if (flyback) /* make sure we end up at top of */ printf(".sp -1\n"); /* picture if `flying back' */ - if (stipple) /* restore stipple to previous */ + if (USE_ST_REQUEST) /* restore stipple to previous */ printf(".st\n"); printf(".br\n" ".ft \\n(g3\n" diff --git a/contrib/groff/src/preproc/html/pre-html.cpp b/contrib/groff/src/preproc/html/pre-html.cpp index 6f8a46aee0..50c2de5e92 100644 --- a/contrib/groff/src/preproc/html/pre-html.cpp +++ b/contrib/groff/src/preproc/html/pre-html.cpp @@ -1,22 +1,24 @@ // -*- C++ -*- -/* Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. - Written by Gaius Mulley (gaius@glam.ac.uk). - -This file is part of groff. - -groff is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. - -groff is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +/* Copyright (C) 2000, 2001, 2002, 2003, 2004, 2007, 2008, 2009 + * Free Software Foundation, Inc. + * Written by Gaius Mulley (gaius@glam.ac.uk). + * + * This file is part of groff. + * + * groff is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * groff is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with groff; see the file COPYING. If not, write to the Free Software + * Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. + */ #define PREHTMLC @@ -54,6 +56,10 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "nonposix.h" +#if 0 +# define DEBUGGING +#endif + /* Establish some definitions to facilitate discrimination between differing runtime environments. */ @@ -160,10 +166,6 @@ extern "C" const char *Version_string; #define REGION_TEMPLATE_SHORT "rg" #define REGION_TEMPLATE_LONG "-regions-" -#if 0 -# define DEBUGGING -#endif - #if !defined(TRUE) # define TRUE (1==1) #endif @@ -175,6 +177,8 @@ typedef enum { CENTERED, LEFT, RIGHT, INLINE } IMAGE_ALIGNMENT; +typedef enum {xhtml, html4} html_dialect; + static int postscriptRes = -1; // postscript resolution, // dots per inch static int stdoutfd = 1; // output file descriptor - @@ -208,6 +212,7 @@ static char *troffFileName = NULL; // output of pre-html output which static char *htmlFileName = NULL; // output of pre-html output which // is sent to troff -Thtml #endif +static int eqn_flag = FALSE; // must we preprocess via eqn? static char *linebuf = NULL; // for scanning devps/DESC static int linebufsize = 0; @@ -215,6 +220,7 @@ static const char *image_gen = NULL; // the `gs' program const char *const FONT_ENV_VAR = "GROFF_FONT_PATH"; static search_path font_path(FONT_ENV_VAR, FONTPATH, 0, 0); +static html_dialect dialect = html4; /* @@ -311,28 +317,37 @@ static unsigned int get_resolution(void) void html_system(const char *s, int redirect_stdout) { - // Redirect standard error to the null device. This is more - // portable than using "2> /dev/null", since it doesn't require a - // Unixy shell. - int save_stderr = dup(2); - int save_stdout = dup(1); - int fdnull = open(NULL_DEV, O_WRONLY|O_BINARY, 0666); - if (save_stderr > 2 && fdnull > 2) - dup2(fdnull, 2); - if (redirect_stdout && save_stdout > 1 && fdnull > 1) - dup2(fdnull, 1); - if (fdnull >= 0) - close(fdnull); - int status = system(s); - dup2(save_stderr, 2); - if (redirect_stdout) - dup2(save_stdout, 1); - if (status == -1) - fprintf(stderr, "Calling `%s' failed\n", s); - else if (status) - fprintf(stderr, "Calling `%s' returned status %d\n", s, status); - close(save_stderr); - close(save_stdout); +#if defined(DEBUGGING) + if (debug) { + fprintf(stderr, "executing: "); + fwrite(s, sizeof(char), strlen(s), stderr); + fflush(stderr); + } +#endif + { + // Redirect standard error to the null device. This is more + // portable than using "2> /dev/null", since it doesn't require a + // Unixy shell. + int save_stderr = dup(2); + int save_stdout = dup(1); + int fdnull = open(NULL_DEV, O_WRONLY|O_BINARY, 0666); + if (save_stderr > 2 && fdnull > 2) + dup2(fdnull, 2); + if (redirect_stdout && save_stdout > 1 && fdnull > 1) + dup2(fdnull, 1); + if (fdnull >= 0) + close(fdnull); + int status = system(s); + dup2(save_stderr, 2); + if (redirect_stdout) + dup2(save_stdout, 1); + if (status == -1) + fprintf(stderr, "Calling `%s' failed\n", s); + else if (status) + fprintf(stderr, "Calling `%s' returned status %d\n", s, status); + close(save_stderr); + close(save_stdout); + } } /* @@ -919,12 +934,6 @@ int imageList::createPage(int pageno) if (s == NULL) sys_fatal("make_message"); -#if defined(DEBUGGING) - if (debug) { - fwrite(s, sizeof(char), strlen(s), stderr); - fflush(stderr); - } -#endif html_system(s, 1); s = make_message("echo showpage | " @@ -943,12 +952,6 @@ int imageList::createPage(int pageno) psPageName); if (s == NULL) sys_fatal("make_message"); -#if defined(DEBUGGING) - if (debug) { - fwrite(s, sizeof(char), strlen(s), stderr); - fflush(stderr); - } -#endif html_system(s, 1); free(s); currentPageNo = pageno; @@ -1029,12 +1032,6 @@ void imageList::createImage(imageItem *i) if (s == NULL) sys_fatal("make_message"); -#if defined(DEBUGGING) - if (debug) { - fprintf(stderr, s); - fflush(stderr); - } -#endif html_system(s, 0); free(s); } @@ -1199,7 +1196,8 @@ static void alterDeviceTo(int argc, char *argv[], int toImage) if (toImage) { while (i < argc) { - if (strcmp(argv[i], "-Thtml") == 0) + if ((strcmp(argv[i], "-Thtml") == 0) || + (strcmp(argv[i], "-Txhtml") == 0)) argv[i] = (char *)IMAGE_DEVICE; i++; } @@ -1208,7 +1206,10 @@ static void alterDeviceTo(int argc, char *argv[], int toImage) else { while (i < argc) { if (strcmp(argv[i], IMAGE_DEVICE) == 0) - argv[i] = (char *)"-Thtml"; + if (dialect == xhtml) + argv[i] = (char *)"-Txhtml"; + else + argv[i] = (char *)"-Thtml"; i++; } argv[troff_arg] = (char *)"groff"; /* use groff -Z */ @@ -1216,10 +1217,10 @@ static void alterDeviceTo(int argc, char *argv[], int toImage) } /* - * addZ - Append -Z onto the command list for groff. + * addArg - Append newarg onto the command list for groff. */ -char **addZ(int argc, char *argv[]) +char **addArg(int argc, char *argv[], char *newarg) { char **new_argv = (char **)malloc((argc + 2) * sizeof(char *)); int i = 0; @@ -1231,7 +1232,7 @@ char **addZ(int argc, char *argv[]) new_argv[i] = argv[i]; i++; } - new_argv[i] = (char *)"-Z"; + new_argv[i] = newarg; while (i < argc) { new_argv[i + 1] = argv[i]; i++; @@ -1276,12 +1277,37 @@ void dump_args(int argc, char *argv[]) fprintf(stderr, "\n"); } -int char_buffer::run_output_filter(int filter, int /* argc */, char **argv) +/* + * print_args - print arguments as if they were issued on the command line. + */ + +#if defined(DEBUGGING) + +void print_args(int argc, char *argv[]) +{ + if (debug) { + fprintf(stderr, "executing: "); + for (int i = 0; i < argc; i++) + fprintf(stderr, "%s ", argv[i]); + fprintf(stderr, "\n"); + } +} + +#else + +void print_args(int, char **) +{ +} + +#endif + +int char_buffer::run_output_filter(int filter, int argc, char **argv) { int pipedes[2]; PID_T child_pid; int status; + print_args(argc, argv); if (pipe(pipedes) < 0) sys_fatal("pipe"); @@ -1439,16 +1465,25 @@ int char_buffer::do_html(int argc, char *argv[]) alterDeviceTo(argc, argv, 0); argv += troff_arg; // skip all arguments up to groff argc -= troff_arg; - argv = addZ(argc, argv); + argv = addArg(argc, argv, (char *)"-Z"); argc++; - s = "-dwww-image-template="; + s = (char *)"-dwww-image-template="; s += macroset_template; // do not combine these statements, // otherwise they will not work s += '\0'; // the trailing `\0' is ignored argv = addRegDef(argc, argv, s.contents()); argc++; + if (dialect == xhtml) { + argv = addRegDef(argc, argv, "-rxhtml=1"); + argc++; + if (eqn_flag) { + argv = addRegDef(argc, argv, "-e"); + argc++; + } + } + #if defined(DEBUGGING) # define HTML_DEBUG_STREAM OUTPUT_STREAM(htmlFileName) // slight security risk so only enabled if compiled with defined(DEBUGGING) @@ -1486,6 +1521,15 @@ int char_buffer::do_image(int argc, char *argv[]) argv = addRegDef(argc, argv, "-P-pletter"); argc++; + if (dialect == xhtml) { + if (eqn_flag) { + argv = addRegDef(argc, argv, "-rxhtml=1"); + argc++; + } + argv = addRegDef(argc, argv, "-e"); + argc++; + } + #if defined(DEBUGGING) # define IMAGE_DEBUG_STREAM OUTPUT_STREAM(troffFileName) // slight security risk so only enabled if compiled with defined(DEBUGGING) @@ -1508,21 +1552,14 @@ static char_buffer inputFile; static void usage(FILE *stream) { fprintf(stream, - "usage: %s troffname [-Iimage_name] [-Dimage_directory]\n" - " [-P-o vertical_image_offset] [-P-i image_resolution]\n" - " [troff flags]\n", - program_name); - fprintf(stream, - " vertical_image_offset (default %d/72 of an inch)\n", - vertical_offset); - fprintf(stream, - " image_resolution (default %d) pixels per inch\n", - image_res); - fprintf(stream, - " image_name is the name of the stem for all images\n" - " (default is grohtml-)\n"); - fprintf(stream, - " place all png files into image_directory\n"); + "\n" + "This program is not intended to be called stand-alone;\n" + "it is part of the groff pipeline to produce HTML output.\n" + "\n" + "If there is ever the need to call it manually (e.g., for\n" + "debugging purposes), add command line option `-V' while calling\n" + "the `groff' program to see which arguments are passed to it.\n" + "\n"); } /* @@ -1545,7 +1582,7 @@ static int scanArguments(int argc, char **argv) { "version", no_argument, 0, 'v' }, { NULL, 0, 0, 0 } }; - while ((c = getopt_long(argc, argv, "+a:bdD:F:g:hi:I:j:lno:prs:S:v", + while ((c = getopt_long(argc, argv, "+a:bdD:eF:g:hi:I:j:lno:prs:S:vVx:y", long_options, NULL)) != EOF) switch(c) { @@ -1568,6 +1605,9 @@ static int scanArguments(int argc, char **argv) case 'D': image_dir = optarg; break; + case 'e': + eqn_flag = TRUE; + break; case 'F': font_path.command_line_dir(optarg); break; @@ -1615,6 +1655,21 @@ static int scanArguments(int argc, char **argv) case 'v': printf("GNU pre-grohtml (groff) version %s\n", Version_string); exit(0); + case 'V': + // handled by post-grohtml (create validator button) + break; + case 'x': + // html dialect + if (strcmp(optarg, "x") == 0) + dialect = xhtml; + else if (strcmp(optarg, "4") == 0) + dialect = html4; + else + printf("unsupported html dialect %s (defaulting to html4)\n", optarg); + break; + case 'y': + // handled by post-grohtml (create groff signature) + break; case CHAR_MAX + 1: // --help usage(stdout); exit(0); diff --git a/contrib/groff/src/preproc/html/pre-html.h b/contrib/groff/src/preproc/html/pre-html.h index 3eedb21c72..8a207225cc 100644 --- a/contrib/groff/src/preproc/html/pre-html.h +++ b/contrib/groff/src/preproc/html/pre-html.h @@ -1,25 +1,26 @@ // -*- C++ -*- -/* Copyright (C) 2000, 2001 Free Software Foundation, Inc. - Written by Gaius Mulley (gaius@glam.ac.uk). - -This file is part of groff. - -groff is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. - -groff is distributed in the hope that it will be useful, but WITHOUT ANY -WARRANTY; without even the implied warranty of MERCHANTABILITY or -FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +/* Copyright (C) 2000, 2001, 2009 Free Software Foundation, Inc. + * Written by Gaius Mulley (gaius@glam.ac.uk). + * + * This file is part of groff. + * + * groff is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free + * Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * groff is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with groff; see the file COPYING. If not, write to the Free Software + * Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. + */ /* - * defines functions implemented within pre-html.c + * defines functions implemented within pre-html.cpp */ #if !defined(PREHTMLH) diff --git a/contrib/groff/src/preproc/html/pushback.cpp b/contrib/groff/src/preproc/html/pushback.cpp index b715587835..60ca9ff7dc 100644 --- a/contrib/groff/src/preproc/html/pushback.cpp +++ b/contrib/groff/src/preproc/html/pushback.cpp @@ -1,22 +1,21 @@ // -*- C++ -*- -/* Copyright (C) 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001, 2003, 2004, 2005, 2009 Free Software Foundation, Inc. Written by Gaius Mulley (gaius@glam.ac.uk). This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" diff --git a/contrib/groff/src/preproc/html/pushback.h b/contrib/groff/src/preproc/html/pushback.h index 3fddad66f1..9f4e215f17 100644 --- a/contrib/groff/src/preproc/html/pushback.h +++ b/contrib/groff/src/preproc/html/pushback.h @@ -1,22 +1,22 @@ // -*- C -*- -/* Copyright (C) 2000, 2001, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001, 2003, 2004, 2009 + Free Software Foundation, Inc. Written by Gaius Mulley (gaius@glam.ac.uk). This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #define eof (char)-1 diff --git a/contrib/groff/src/preproc/pic/common.cpp b/contrib/groff/src/preproc/pic/common.cpp index 47a23cd920..e3e965cc61 100644 --- a/contrib/groff/src/preproc/pic/common.cpp +++ b/contrib/groff/src/preproc/pic/common.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2003 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2003, 2007, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "pic.h" #include "common.h" @@ -319,9 +319,10 @@ void common_output::solid_arc(const position ¢, double rad, void common_output::rounded_box(const position ¢, const distance &dim, - double rad, const line_type <, double fill) + double rad, const line_type <, + double fill, char *color_fill) { - if (fill >= 0.0) + if (fill >= 0.0 || color_fill) filled_rounded_box(cent, dim, rad, fill); switch (lt.type) { case line_type::invisible: diff --git a/contrib/groff/src/preproc/pic/common.h b/contrib/groff/src/preproc/pic/common.h index 50238344d8..affac8859e 100644 --- a/contrib/groff/src/preproc/pic/common.h +++ b/contrib/groff/src/preproc/pic/common.h @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 1993, 2003 +/* Copyright (C) 1989, 1990, 1991, 1992, 1993, 2003, 2007, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ class common_output : public output { private: @@ -53,7 +52,8 @@ protected: const line_type &); void solid_rounded_box(const position &, const distance &, double, const line_type &); - void filled_rounded_box(const position &, const distance &, double, double); + void filled_rounded_box(const position &, const distance &, double, + double); public: void start_picture(double sc, const position &ll, const position &ur) = 0; void finish_picture() = 0; @@ -68,7 +68,7 @@ public: void ellipse(const position &, const distance &, const line_type &, double) = 0; void rounded_box(const position &, const distance &, double, - const line_type &, double); + const line_type &, double, char *); void set_color(char *, char *) = 0; void reset_color() = 0; char *get_last_filled() = 0; diff --git a/contrib/groff/src/preproc/pic/lex.cpp b/contrib/groff/src/preproc/pic/lex.cpp index ceca368546..73ef9a1fb3 100644 --- a/contrib/groff/src/preproc/pic/lex.cpp +++ b/contrib/groff/src/preproc/pic/lex.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2002, 2003, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2002, 2003, 2004, 2006, + 2007, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "pic.h" #include "ptable.h" @@ -29,6 +29,16 @@ implement_ptable(char) PTABLE(char) macro_table; +// First character of the range representing $1-$. +// All of them must be invalid input characters. +#ifndef IS_EBCDIC_HOST +#define ARG1 0x80 +#define MAX_ARG 32 +#else +#define ARG1 0x30 +#define MAX_ARG 16 +#endif + class macro_input : public input { char *s; char *p; @@ -44,7 +54,7 @@ class argument_macro_input : public input { char *p; char *ap; int argc; - char *argv[9]; + char *argv[MAX_ARG]; public: argument_macro_input(const char *, int, char **); ~argument_macro_input(); @@ -154,17 +164,29 @@ int macro_input::peek() return (unsigned char)*p; } -// Character representing $1. Must be invalid input character. -#define ARG1 14 - char *process_body(const char *body) { char *s = strsave(body); int j = 0; for (int i = 0; s[i] != '\0'; i++) - if (s[i] == '$' && s[i+1] >= '0' && s[i+1] <= '9') { - if (s[i+1] != '0') - s[j++] = ARG1 + s[++i] - '1'; + if (s[i] == '$' && csdigit(s[i + 1])) { + int n = 0; + int start = i; + i++; + while (csdigit(s[i])) + if (n > MAX_ARG) + i++; + else + n = 10 * n + s[i++] - '0'; + if (n > MAX_ARG) { + string arg; + for (int k = start; k < i; k++) + arg += s[k]; + lex_error("invalid macro argument number %1", arg.contents()); + } + else if (n > 0) + s[j++] = ARG1 + n - 1; + i--; } else s[j++] = s[i]; @@ -172,7 +194,6 @@ char *process_body(const char *body) return s; } - argument_macro_input::argument_macro_input(const char *body, int ac, char **av) : ap(0), argc(ac) { @@ -181,7 +202,6 @@ argument_macro_input::argument_macro_input(const char *body, int ac, char **av) p = s = process_body(body); } - argument_macro_input::~argument_macro_input() { for (int i = 0; i < argc; i++) @@ -198,8 +218,9 @@ int argument_macro_input::get() } if (p == 0) return EOF; - while (*p >= ARG1 && *p <= ARG1 + 8) { - int i = *p++ - ARG1; + while ((unsigned char)*p >= ARG1 + && (unsigned char)*p <= ARG1 + MAX_ARG - 1) { + int i = (unsigned char)*p++ - ARG1; if (i < argc && argv[i] != 0 && argv[i][0] != '\0') { ap = argv[i]; return (unsigned char)*ap++; @@ -219,8 +240,9 @@ int argument_macro_input::peek() } if (p == 0) return EOF; - while (*p >= ARG1 && *p <= ARG1 + 8) { - int i = *p++ - ARG1; + while ((unsigned char)*p >= ARG1 + && (unsigned char)*p <= ARG1 + MAX_ARG - 1) { + int i = (unsigned char)*p++ - ARG1; if (i < argc && argv[i] != 0 && argv[i][0] != '\0') { ap = argv[i]; return (unsigned char)*ap; @@ -359,10 +381,11 @@ int token_int; void interpolate_macro_with_args(const char *body) { - char *argv[9]; + char *argv[MAX_ARG]; int argc = 0; + int ignore = 0; int i; - for (i = 0; i < 9; i++) + for (i = 0; i < MAX_ARG; i++) argv[i] = 0; int level = 0; int c; @@ -378,11 +401,19 @@ void interpolate_macro_with_args(const char *body) if (state == NORMAL && level == 0 && (c == ',' || c == ')')) { if (token_buffer.length() > 0) { token_buffer += '\0'; - argv[argc] = strsave(token_buffer.contents()); + if (!ignore) { + if (argc == MAX_ARG) { + lex_warning("only %1 macro arguments supported", MAX_ARG); + ignore = 1; + } + else + argv[argc] = strsave(token_buffer.contents()); + } } // for `foo()', argc = 0 if (argc > 0 || c != ')' || i > 0) - argc++; + if (!ignore) + argc++; break; } token_buffer += char(c); @@ -526,6 +557,8 @@ int lookup_keyword(const char *str, int len) { "wid", WIDTH }, { "width", WIDTH }, { "with", WITH }, + { "xslanted", XSLANTED }, + { "yslanted", YSLANTED }, }; const keyword *start = table; @@ -1441,7 +1474,7 @@ class copy_thru_input : public input { char *until; const char *p; const char *ap; - int argv[9]; + int argv[MAX_ARG]; int argc; string line; int get_line(); @@ -1540,8 +1573,9 @@ int copy_thru_input::get() p = 0; return '\n'; } - while (*p >= ARG1 && *p <= ARG1 + 8) { - int i = *p++ - ARG1; + while ((unsigned char)*p >= ARG1 + && (unsigned char)*p <= ARG1 + MAX_ARG - 1) { + int i = (unsigned char)*p++ - ARG1; if (i < argc && line[argv[i]] != '\0') { ap = line.contents() + argv[i]; return (unsigned char)*ap++; @@ -1568,8 +1602,9 @@ int copy_thru_input::peek() } if (*p == '\0') return '\n'; - while (*p >= ARG1 && *p <= ARG1 + 8) { - int i = *p++ - ARG1; + while ((unsigned char)*p >= ARG1 + && (unsigned char)*p <= ARG1 + MAX_ARG - 1) { + int i = (unsigned char)*p++ - ARG1; if (i < argc && line[argv[i]] != '\0') { ap = line.contents() + argv[i]; return (unsigned char)*ap; @@ -1593,7 +1628,7 @@ int copy_thru_input::get_line() c = inget(); if (c == EOF || c == '\n') break; - if (argc == 9) { + if (argc == MAX_ARG) { do { c = inget(); } while (c != '\n' && c != EOF); diff --git a/contrib/groff/src/preproc/pic/main.cpp b/contrib/groff/src/preproc/pic/main.cpp index 0e05f77cd2..3b974165af 100644 --- a/contrib/groff/src/preproc/pic/main.cpp +++ b/contrib/groff/src/preproc/pic/main.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989-1992, 2000, 2001, 2002, 2003 +/* Copyright (C) 1989-1992, 2000, 2001, 2002, 2003, 2006, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "pic.h" @@ -34,7 +33,7 @@ int driver_extension_flag = 1; int compatible_flag = 0; int safer_flag = 1; int command_char = '.'; // the character that introduces lines - // that should be passed through tranparently + // that should be passed through transparently static int lf_flag = 1; // non-zero if we should attempt to understand // lines beginning with `.lf' @@ -473,9 +472,9 @@ void do_whole_file(const char *filename) void usage(FILE *stream) { - fprintf(stream, "usage: %s [ -nvC ] [ filename ... ]\n", program_name); + fprintf(stream, "usage: %s [ -nvCSU ] [ filename ... ]\n", program_name); #ifdef TEX_SUPPORT - fprintf(stream, " %s -t [ -cvzC ] [ filename ... ]\n", program_name); + fprintf(stream, " %s -t [ -cvzCSU ] [ filename ... ]\n", program_name); #endif #ifdef FIG_SUPPORT fprintf(stream, " %s -f [ -v ] [ filename ]\n", program_name); diff --git a/contrib/groff/src/preproc/pic/object.cpp b/contrib/groff/src/preproc/pic/object.cpp index aefbd45e39..62415793e1 100644 --- a/contrib/groff/src/preproc/pic/object.cpp +++ b/contrib/groff/src/preproc/pic/object.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004, 2005 +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004, 2005, + 2006, 2007, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "pic.h" #include "ptable.h" @@ -412,6 +412,8 @@ object_spec::object_spec(object_type t) : type(t) segment_is_absolute = 0; text = 0; shaded = 0; + xslanted = 0; + yslanted = 0; outlined = 0; with = 0; dir = RIGHT_DIRECTION; @@ -564,6 +566,8 @@ public: void set_outline_color(char *); char *get_outline_color(); virtual void set_fill(double); + virtual void set_xslanted(double); + virtual void set_yslanted(double); virtual void set_fill_color(char *); }; @@ -593,6 +597,14 @@ void graphic_object::set_fill(double) { } +void graphic_object::set_xslanted(double) +{ +} + +void graphic_object::set_yslanted(double) +{ +} + void graphic_object::set_fill_color(char *c) { color_fill = strsave(c); @@ -700,14 +712,18 @@ public: closed_object(const position &); object_type type() = 0; void set_fill(double); + void set_xslanted(double); + void set_yslanted(double); void set_fill_color(char *fill); protected: double fill; // < 0 if not filled + double xslanted; // !=0 if x is slanted + double yslanted; // !=0 if y is slanted char *color_fill; // = 0 if not colored }; closed_object::closed_object(const position &pos) -: rectangle_object(pos), fill(-1.0), color_fill(0) +: rectangle_object(pos), fill(-1.0), xslanted(0), yslanted(0), color_fill(0) { } @@ -717,6 +733,19 @@ void closed_object::set_fill(double f) fill = f; } +/* accept positive and negative values */ +void closed_object::set_xslanted(double s) +{ + //assert(s >= 0.0); + xslanted = s; +} +/* accept positive and negative values */ +void closed_object::set_yslanted(double s) +{ + //assert(s >= 0.0); + yslanted = s; +} + void closed_object::set_fill_color(char *f) { color_fill = strsave(f); @@ -774,15 +803,17 @@ void box_object::print() if (xrad == 0.0) { distance dim2 = dim/2.0; position vec[4]; - vec[0] = cent + position(dim2.x, -dim2.y); - vec[1] = cent + position(dim2.x, dim2.y); - vec[2] = cent + position(-dim2.x, dim2.y); - vec[3] = cent + position(-dim2.x, -dim2.y); + /* error("x slanted %1", xslanted); */ + /* error("y slanted %1", yslanted); */ + vec[0] = cent + position(dim2.x, -(dim2.y - yslanted)); /* lr */ + vec[1] = cent + position(dim2.x + xslanted, dim2.y + yslanted); /* ur */ + vec[2] = cent + position(-(dim2.x - xslanted), dim2.y); /* ul */ + vec[3] = cent + position(-(dim2.x), -dim2.y); /* ll */ out->polygon(vec, 4, lt, fill); } else { distance abs_dim(fabs(dim.x), fabs(dim.y)); - out->rounded_box(cent, abs_dim, fabs(xrad), lt, fill); + out->rounded_box(cent, abs_dim, fabs(xrad), lt, fill, color_fill); } out->reset_color(); } @@ -1418,8 +1449,16 @@ linear_object *object_spec::make_line(position *curpos, direction *dirp) static position last_line; static int have_last_line = 0; *dirp = dir; - // No need to look at at since `at' attribute sets `from' attribute. - position startpos = (flags & HAS_FROM) ? from : *curpos; + // We handle `at' only in conjunction with `with', otherwise it is + // the same as the `from' attribute. + position startpos; + if ((flags & HAS_AT) && (flags & HAS_WITH)) + // handled later -- we need the end position + startpos = *curpos; + else if (flags & HAS_FROM) + startpos = from; + else + startpos = *curpos; if (!(flags & HAS_SEGMENT)) { if ((flags & IS_SAME) && (type == LINE_OBJECT || type == ARROW_OBJECT) && have_last_line) @@ -1464,6 +1503,21 @@ linear_object *object_spec::make_line(position *curpos, direction *dirp) s->pos = endpos; s->is_absolute = 1; // to avoid confusion } + if ((flags & HAS_AT) && (flags & HAS_WITH)) { + // `tmpobj' works for arrows and splines too -- we only need positions + line_object tmpobj(startpos, endpos, 0, 0); + position pos = at; + place offset; + place here; + here.obj = &tmpobj; + if (!with->follow(here, &offset)) + return 0; + pos -= offset; + for (s = segment_list; s; s = s->next) + s->pos += pos; + startpos += pos; + endpos += pos; + } // handle chop line_object *p = 0; position *v = new position[nsegments]; @@ -1872,6 +1926,10 @@ object *object_spec::make_object(position *curpos, direction *dirp) obj->set_thickness(th); if (flags & IS_OUTLINED) obj->set_outline_color(outlined); + if (flags & IS_XSLANTED) + obj->set_xslanted(xslanted); + if (flags & IS_YSLANTED) + obj->set_yslanted(yslanted); if (flags & (IS_DEFAULT_FILLED | IS_FILLED)) { if (flags & IS_SHADED) obj->set_fill_color(shaded); diff --git a/contrib/groff/src/preproc/pic/object.h b/contrib/groff/src/preproc/pic/object.h index 9f7f4bc337..1472483a85 100644 --- a/contrib/groff/src/preproc/pic/object.h +++ b/contrib/groff/src/preproc/pic/object.h @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2002, 2004, 2007, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ struct place; @@ -133,29 +132,31 @@ struct text_item { ~text_item(); }; -const unsigned long IS_DOTTED = 01; -const unsigned long IS_DASHED = 02; -const unsigned long IS_CLOCKWISE = 04; -const unsigned long IS_INVISIBLE = 020; -const unsigned long HAS_LEFT_ARROW_HEAD = 040; -const unsigned long HAS_RIGHT_ARROW_HEAD = 0100; -const unsigned long HAS_SEGMENT = 0200; -const unsigned long IS_SAME = 0400; -const unsigned long HAS_FROM = 01000; -const unsigned long HAS_AT = 02000; -const unsigned long HAS_WITH = 04000; -const unsigned long HAS_HEIGHT = 010000; -const unsigned long HAS_WIDTH = 020000; -const unsigned long HAS_RADIUS = 040000; -const unsigned long HAS_TO = 0100000; -const unsigned long IS_CHOPPED = 0200000; -const unsigned long IS_DEFAULT_CHOPPED = 0400000; -const unsigned long HAS_THICKNESS = 01000000; -const unsigned long IS_FILLED = 02000000; -const unsigned long IS_DEFAULT_FILLED = 04000000; -const unsigned long IS_ALIGNED = 010000000; -const unsigned long IS_SHADED = 020000000; -const unsigned long IS_OUTLINED = 040000000; +const unsigned long IS_DOTTED = 01; +const unsigned long IS_DASHED = 02; +const unsigned long IS_CLOCKWISE = 04; +const unsigned long IS_INVISIBLE = 020; +const unsigned long HAS_LEFT_ARROW_HEAD = 040; +const unsigned long HAS_RIGHT_ARROW_HEAD = 0100; +const unsigned long HAS_SEGMENT = 0200; +const unsigned long IS_SAME = 0400; +const unsigned long HAS_FROM = 01000; +const unsigned long HAS_AT = 02000; +const unsigned long HAS_WITH = 04000; +const unsigned long HAS_HEIGHT = 010000; +const unsigned long HAS_WIDTH = 020000; +const unsigned long HAS_RADIUS = 040000; +const unsigned long HAS_TO = 0100000; +const unsigned long IS_CHOPPED = 0200000; +const unsigned long IS_DEFAULT_CHOPPED = 0400000; +const unsigned long HAS_THICKNESS = 01000000; +const unsigned long IS_FILLED = 02000000; +const unsigned long IS_DEFAULT_FILLED = 04000000; +const unsigned long IS_ALIGNED = 010000000; +const unsigned long IS_SHADED = 020000000; +const unsigned long IS_OUTLINED = 040000000; +const unsigned long IS_XSLANTED = 0100000000; +const unsigned long IS_YSLANTED = 0200000000; struct segment { int is_absolute; @@ -189,6 +190,8 @@ struct object_spec { double end_chop; double thickness; double fill; + double xslanted; + double yslanted; char *shaded; char *outlined; direction dir; diff --git a/contrib/groff/src/preproc/pic/output.h b/contrib/groff/src/preproc/pic/output.h index aa03e776bb..729376b342 100644 --- a/contrib/groff/src/preproc/pic/output.h +++ b/contrib/groff/src/preproc/pic/output.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2007, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ struct line_type { enum { invisible, solid, dotted, dashed } type; @@ -54,7 +54,7 @@ public: virtual void ellipse(const position &, const distance &, const line_type &, double) = 0; virtual void rounded_box(const position &, const distance &, double, - const line_type &, double) = 0; + const line_type &, double, char *) = 0; virtual void command(const char *, const char *, int) = 0; virtual void set_location(const char *, int) {} virtual void set_color(char *, char *) = 0; diff --git a/contrib/groff/src/preproc/pic/pic.cpp b/contrib/groff/src/preproc/pic/pic.cpp index d6f959bbb4..fabe79b47c 100644 --- a/contrib/groff/src/preproc/pic/pic.cpp +++ b/contrib/groff/src/preproc/pic/pic.cpp @@ -1,12 +1,35 @@ #ifndef lint -static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93 (groff)"; +static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; #endif + +#include +#include + #define YYBYACC 1 #define YYMAJOR 1 #define YYMINOR 9 -#define yyclearin (yychar=(-1)) -#define yyerrok (yyerrflag=0) -#define YYRECOVERING (yyerrflag!=0) +#define YYPATCH 20081224 + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +#ifdef YYPARSE_PARAM_TYPE +#define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +#else +#define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +#endif +#else +#define YYPARSE_DECL() yyparse(void) +#endif /* YYPARSE_PARAM */ + +extern int YYPARSE_DECL(); + +static int yygrowstack(void); #define YYPREFIX "yy" #line 21 "pic.y" #include "pic.h" @@ -69,7 +92,7 @@ typedef union { graphics_state state; object_type obtype; } YYSTYPE; -#line 73 "y.tab.c" +#line 95 "pic.cpp" #define LABEL 257 #define VARIABLE 258 #define NUMBER 259 @@ -82,23 +105,23 @@ typedef union { #define RIGHT_ARROW_HEAD 266 #define DOUBLE_ARROW_HEAD 267 #define LAST 268 -#define UP 269 -#define DOWN 270 -#define LEFT 271 -#define RIGHT 272 -#define BOX 273 -#define CIRCLE 274 -#define ELLIPSE 275 -#define ARC 276 -#define LINE 277 -#define ARROW 278 -#define MOVE 279 -#define SPLINE 280 -#define HEIGHT 281 -#define RADIUS 282 -#define FIGNAME 283 -#define WIDTH 284 -#define DIAMETER 285 +#define BOX 269 +#define CIRCLE 270 +#define ELLIPSE 271 +#define ARC 272 +#define LINE 273 +#define ARROW 274 +#define MOVE 275 +#define SPLINE 276 +#define HEIGHT 277 +#define RADIUS 278 +#define FIGNAME 279 +#define WIDTH 280 +#define DIAMETER 281 +#define UP 282 +#define DOWN 283 +#define RIGHT 284 +#define LEFT 285 #define FROM 286 #define TO 287 #define AT 288 @@ -185,13 +208,15 @@ typedef union { #define COLORED 369 #define OUTLINED 370 #define SHADED 371 -#define ALIGNED 372 -#define SPRINTF 373 -#define COMMAND 374 -#define DEFINE 375 -#define UNDEF 376 +#define XSLANTED 372 +#define YSLANTED 373 +#define ALIGNED 374 +#define SPRINTF 375 +#define COMMAND 376 +#define DEFINE 377 +#define UNDEF 378 #define YYERRCODE 256 -short yylhs[] = { -1, +static const short yylhs[] = { -1, 0, 0, 16, 17, 17, 29, 29, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 31, 31, 33, 34, 31, 35, 36, 31, 37, 31, @@ -205,21 +230,21 @@ short yylhs[] = { -1, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 26, 26, 25, 25, 19, 19, 19, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 45, - 45, 5, 5, 13, 13, 13, 13, 13, 14, 14, - 14, 22, 22, 21, 21, 8, 8, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 11, 11, 12, 12, - 12, 10, 10, 10, 10, 10, 10, 9, 9, 9, + 18, 18, 18, 18, 26, 26, 25, 25, 19, 19, + 19, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 45, 45, 5, 5, 13, 13, 13, 13, 13, + 14, 14, 14, 22, 22, 21, 21, 8, 8, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 11, 11, + 12, 12, 12, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, }; -short yylen[] = { 2, +static const short yylen[] = { 2, 1, 1, 3, 1, 3, 0, 1, 1, 2, 3, 3, 4, 1, 1, 1, 1, 1, 2, 2, 0, 3, 2, 0, 0, 7, 0, 0, 6, 0, 10, @@ -231,1712 +256,1950 @@ short yylen[] = { 2, 1, 1, 2, 3, 0, 4, 3, 3, 3, 3, 2, 2, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 3, 2, - 3, 2, 3, 3, 3, 3, 2, 3, 2, 2, + 3, 2, 3, 3, 3, 3, 3, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 3, 2, 1, 5, 0, 3, 1, 1, 3, 1, - 3, 5, 3, 5, 5, 5, 7, 6, 8, 1, - 4, 3, 3, 1, 2, 2, 3, 1, 1, 1, - 3, 1, 3, 1, 2, 2, 2, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 2, 3, 1, 1, - 2, 1, 5, 4, 3, 3, 2, 1, 1, 1, + 2, 2, 3, 2, 1, 5, 0, 3, 1, 1, + 3, 1, 3, 5, 3, 5, 5, 5, 7, 6, + 8, 1, 4, 3, 3, 1, 2, 2, 3, 1, + 1, 1, 3, 1, 3, 1, 2, 2, 2, 1, + 1, 1, 1, 1, 1, 1, 2, 1, 2, 3, + 1, 1, 2, 1, 5, 4, 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, - 3, 3, 2, 3, 4, 4, 6, 4, 4, 4, - 6, 6, 4, 4, 3, 4, 3, 3, 3, 3, - 3, 3, 3, 3, 2, + 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, + 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, + 3, 3, 3, 3, 2, 3, 4, 4, 6, 4, + 4, 4, 6, 6, 4, 4, 3, 4, 3, 3, + 3, 3, 3, 3, 3, 3, 2, }; -short yydefred[] = { 0, - 8, 0, 2, 0, 0, 0, 0, 133, 17, 13, - 14, 15, 16, 74, 75, 76, 77, 78, 79, 80, - 81, 0, 0, 20, 0, 0, 0, 0, 0, 0, +static const short yydefred[] = { 0, + 8, 0, 2, 0, 0, 0, 0, 135, 17, 74, + 75, 76, 77, 78, 79, 80, 81, 0, 13, 14, + 16, 15, 0, 20, 0, 0, 0, 0, 0, 0, 0, 85, 68, 0, 4, 0, 0, 82, 71, 0, - 9, 0, 0, 0, 0, 0, 26, 0, 159, 220, - 221, 162, 164, 201, 202, 158, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 199, 200, - 0, 0, 207, 208, 213, 214, 215, 216, 217, 219, - 218, 0, 0, 0, 0, 0, 140, 137, 160, 0, + 9, 0, 0, 0, 0, 0, 26, 0, 161, 222, + 223, 164, 166, 204, 203, 160, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 201, 202, + 0, 0, 209, 210, 215, 216, 217, 218, 219, 221, + 220, 0, 0, 0, 0, 0, 142, 139, 162, 0, 0, 0, 0, 0, 0, 44, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, - 0, 0, 32, 3, 0, 121, 122, 123, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 106, 107, 0, 0, 0, 119, 120, 127, 128, - 129, 130, 124, 125, 0, 0, 0, 0, 0, 132, - 0, 126, 39, 0, 0, 11, 0, 37, 36, 10, - 23, 0, 21, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 203, 205, 209, 211, 204, 206, - 210, 212, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 150, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 222, 223, 224, 225, 226, 0, 155, 0, 0, 176, - 168, 169, 170, 171, 172, 173, 174, 0, 167, 165, - 166, 42, 0, 0, 60, 0, 0, 0, 46, 0, - 0, 0, 0, 84, 135, 0, 0, 0, 0, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, - 182, 0, 0, 0, 105, 0, 0, 0, 0, 0, - 115, 116, 114, 40, 0, 0, 0, 0, 0, 0, - 65, 0, 12, 0, 27, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 245, 0, 0, 0, 0, 234, - 153, 139, 0, 0, 0, 163, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 161, 141, 143, 175, 0, - 0, 56, 0, 0, 0, 0, 0, 54, 0, 0, - 53, 52, 0, 86, 69, 33, 179, 187, 0, 0, - 0, 177, 0, 0, 181, 0, 0, 24, 0, 235, - 236, 0, 238, 239, 240, 0, 0, 243, 244, 246, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, - 0, 134, 0, 0, 186, 185, 0, 178, 0, 0, - 28, 0, 0, 0, 0, 0, 145, 142, 144, 151, - 0, 0, 0, 0, 73, 70, 184, 0, 25, 49, - 237, 241, 242, 0, 0, 148, 0, 0, 183, 0, - 147, 0, 0, 29, 149, 0, 0, 30, + 0, 0, 32, 3, 0, 123, 124, 125, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 106, 107, 0, 0, 0, 121, 122, 129, 130, + 131, 132, 126, 127, 0, 0, 0, 0, 0, 0, + 0, 134, 0, 128, 39, 0, 0, 11, 0, 37, + 36, 10, 23, 0, 21, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 207, 205, 211, 213, + 208, 206, 212, 214, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 152, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 224, 225, 226, 227, 228, 0, 157, 0, + 0, 178, 170, 171, 172, 173, 174, 175, 176, 0, + 169, 167, 168, 42, 0, 0, 60, 0, 0, 0, + 46, 0, 0, 0, 0, 84, 137, 0, 0, 0, + 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 103, 0, 184, 0, 0, 0, 105, 0, 0, 0, + 0, 0, 117, 118, 116, 0, 0, 40, 0, 0, + 0, 0, 0, 0, 65, 0, 12, 0, 27, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, + 0, 0, 0, 236, 155, 141, 0, 0, 0, 165, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, + 143, 145, 177, 0, 0, 56, 0, 0, 0, 0, + 0, 54, 0, 0, 53, 52, 0, 86, 69, 33, + 181, 189, 0, 0, 0, 179, 0, 0, 183, 0, + 0, 24, 0, 237, 238, 0, 240, 241, 242, 0, + 0, 245, 246, 248, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 47, 0, 136, 0, 0, 188, 187, + 0, 180, 0, 0, 28, 0, 0, 0, 0, 0, + 147, 144, 146, 153, 0, 0, 0, 0, 73, 70, + 186, 0, 25, 49, 239, 243, 244, 0, 0, 150, + 0, 0, 185, 0, 149, 0, 0, 29, 151, 0, + 0, 30, }; -short yydgoto[] = { 2, - 112, 194, 114, 438, 97, 98, 34, 99, 100, 279, - 280, 281, 115, 102, 35, 3, 36, 37, 103, 239, - 104, 105, 170, 411, 363, 116, 107, 108, 257, 5, - 39, 48, 304, 409, 172, 379, 447, 259, 40, 356, - 122, 426, 403, 121, 218, +static const short yydgoto[] = { 2, + 112, 196, 114, 442, 97, 98, 34, 99, 100, 281, + 282, 283, 115, 102, 35, 3, 36, 37, 103, 241, + 104, 105, 172, 415, 367, 116, 107, 108, 259, 5, + 39, 48, 308, 413, 174, 383, 451, 261, 40, 360, + 122, 430, 407, 121, 220, }; -short yysindex[] = { -58, - 0, 0, 0, 5077, -43, -21, -2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 19, -242, 0,12299, -173,12422, -155,13019, 85, -12299, 0, 0, -214, 0, -58,11880, 0, 0, -42, - 0, -58,12422, 76, -160, -195, 0, -118, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 108, 120, 127, - 133, 137, 154, 161, 162, 173, 174, 179, 0, 0, - -193, -119, 0, 0, 0, 0, 0, 0, 0, 0, - 0,12539,12422,13019,13019, -34, 0, 0, 0, -51, - 170, 585, 46, 495, 329, 0,12299, 0, 110,12422, -12422, 1768, -71, -227, 170, -197, 0, -22, -50,12299, - -58, -58, 0, 0,13489, 0, 0, 0,13382,13382, -13382,13382,13019,13019,13019,13019,13142,13142,13142,12779, -13259, 0, 0,13382,13382,13382, 0, 0, 0, 0, - 0, 0, 0, 0,13019,13382, -228, -228, -228, 0, - 1792, 0, 0, -30,11548, 0,12422, 0, 0, 0, - 0, -28, 0,12422,12422,12422,12422,12422,12422,12422, -12422,12422,11997,12422, 0, 0, 0, 0, 0, 0, - 0, 0, 1315, 194, 198, -11, 299, -10, 159, 159, - -47, 0,13019,13019,13019,13019,13019,13019,13019,13142, -13019,13019,13019,13019,13019,13019,13019,13142, -8, 211, - 0, 0, 0, 0, 0, 2, 0,13259,13259, 0, - 0, 0, 0, 0, 0, 0, 0, 177, 0, 0, - 0, 0,13019, 159, 0,12422,12422,13019, 0,12422, -12422, -228, -228, 0, 0, 180, 5077, 147, 25, 0, - 1792, 1792, 1792, 1792, 1792, 1792, 1792, 1792, -34, 46, - 46, 46, 1842, 318, 318, 29,12182, -51, 0, 525, - 0, 46,12662, 1336, 0, 1792, 1792, 1792, 1792, 1792, - 0, 0, 0, 0, -21, -2, 0, 0, 0, 170, - 0, 46, 0, 27, 0, 251, 264, 262, 292, 293, - 295, 301, 304, 308, 0, 312, 313,13142,13142, 0, - 0, 0,13142,13259,13259, 0, 57, 1194, 6, 1166, - 1166, 506, 506, 1792, -1, 343, 506, 388, 388, 159, - 159, 159, 159, -16, 211, 0, 0, 0, 0, 3170, - 1194, 0, 394, 14, 506, 103, 1194, 0, 394, 14, - 0, 0, 21, 0, 0, 0, 0, 0, 495, 986, - 986, 0, 324, 118, 0, 1756, 198, 0, 12, 0, - 0,12422, 0, 0, 0,12422,12422, 0, 0, 0, - 389, 7, 131, 351, 353, 79,13142,13142,13019, 0, -13019, 0, 5077, 986, 0, 0, 986, 0, 12, 135, - 0, 361, 363, 365,13142,13142, 0, 0, 0, 0, - 56, 46, 2233, 1792, 0, 0, 0, 367, 0, 0, - 0, 0, 0, 205, 296, 0,12902, 64, 0, 370, - 0,13019, 1792, 0, 0, 1792, 151, 0, +static const short yysindex[] = { -49, + 0, 0, 0, 5473, -26, -10, -15, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, + 0, 0, -238, 0,13272, -185,13356, -178,13858, 45, +13272, 0, 0, -255, 0, -49,12851, 0, 0, -36, + 0, -49,13356, 72, -231, -198, 0, -107, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 119, 123, 128, + 139, 162, 164, 174, 175, 178, 179, 181, 0, 0, + -266, -233, 0, 0, 0, 0, 0, 0, 0, 0, + 0,13521,13356,13858,13858, 1079, 0, 0, 0, -17, + 186, 454, 98, 997, 874, 0,13272, 0, 183,13356, +13356, 1218, -56, -288, 186, -234, 0, -22, -18,13272, + -49, -49, 0, 0, 5011, 0, 0, 0,13858,13858, +13858,13858,14111,14111,14111,14111,13942,13942,13942,13689, +14027, 0, 0,14111,14111,14111, 0, 0, 0, 0, + 0, 0, 0, 0,13858,14111, -243, -243, -243,13858, +13858, 0, 1664, 0, 0, -6,12604, 0,13356, 0, + 0, 0, 0, -14, 0,13356,13356,13356,13356,13356, +13356,13356,13356,13356,12970,13356, 0, 0, 0, 0, + 0, 0, 0, 0, 1543, 217, 228, -39, 84, 6, + 192, 192, -16, 0,13858,13858,13858,13858,13858,13858, +13858,13942,13858,13858,13858,13858,13858,13858,13858,13942, + 4, 245, 0, 0, 0, 0, 0, 48, 0,14027, +14027, 0, 0, 0, 0, 0, 0, 0, 0, 214, + 0, 0, 0, 0,13858, 192, 0,13356,13356,13858, + 0,13356,13356, -243, -243, 0, 0, 226, 5473, 185, + 63, 0, 1664, 1664, 1664, 1664, 1664, 1664, 1664, 1664, + 1079, 98, 98, 98, 2203, 820, 820, 69,13153, -17, + 0, 465, 0, 98,13605, -13, 0, 1664, 1664, 1664, + 1664, 1664, 0, 0, 0, 1664, 1664, 0, -10, -15, + 0, 0, 0, 186, 0, 98, 0, 73, 0, 293, + 302, 300, 305, 306, 313, 317, 319, 316, 0, 323, + 330,13942,13942, 0, 0, 0,13942,14027,14027, 0, + 70, 2125, 1688, 107, 107, 54, 54, 1664, 194, 234, + 54, 109, 109, 192, 192, 192, 192, -38, 245, 0, + 0, 0, 0, 394, 2125, 0, 2114, 26, 54, 126, + 2125, 0, 2114, 26, 0, 0, 34, 0, 0, 0, + 0, 0, 997, 870, 870, 0, 337, 129, 0, 325, + 228, 0, 27, 0, 0,13356, 0, 0, 0,13356, +13356, 0, 0, 0, 272, -32, 121, 350, 368, 108, +13942,13942,13858, 0,13858, 0, 5473, 870, 0, 0, + 870, 0, 27, 152, 0, 374, 377, 381,13942,13942, + 0, 0, 0, 0, -8, 98, 1652, 1664, 0, 0, + 0, 388, 0, 0, 0, 0, 0, 14, 221, 0, +13774, 87, 0, 389, 0,13858, 1664, 0, 0, 1664, + 188, 0, }; -short yyrindex[] = { 5, - 0, 0, 0, 424, 200, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, - 0, 0, 0, 31, 0, 34, 102, 0, 0, 139, - 0,11744, 0, 0, 0, 639, 0, 0, 0, 0, +static const short yyrindex[] = { 320, + 0, 0, 0, 440, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, + 0, 0, 0, 289, 0, 83, 324, 0, 0, 365, + 0,12714, 0, 0, 0, 373, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0,10124, 0, 0, 0, 0, - 4478, 9516,10459, 0, 0, 0, 691, 0, 0, 0, - 0, 1713, 0, 2171, 0, 0, 0,11366, 0, 692, - 5532, 5532, 0, 0, 136, 0, 0, 0,10701,10765, -10277,10580, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,10829,10955,11019, 0, 0, 0, 0, - 0, 0, 0, 0, 0,11083, 0, 0, 0, 0, - 5277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,10957, 0, 0, 0, 0, + 4751,10318,11167, 0, 0, 0, 597, 0, 0, 0, + 0, 587, 0, 1560, 0, 0, 0,12201, 0, 626, + 5937, 5937, 0, 0, 124, 0, 0, 0, 0, 0, + 0, 0,11428,11546,11096,11278, 0, 0, 0, 0, + 0, 0, 0,11680,11804,11932, 0, 0, 0, 0, + 0, 0, 0, 0, 0,12056, 0, 0, 0, 0, + 0, 0, 5334, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 385, 0, 421, 441, 0, 0, 356, 697, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3104, + 0, 0, 0, 0, 407, 0, 278, 383, 0, 0, + 575, 694, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0,10627, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0,12555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 5394, 5735, 5852, 6193, 6310, 6651, 6768, 7109, 0, 7226, - 7567, 7684, 9818, -213, 169, 0, 0, 9399, 0, 9912, - 0, 8025, 0, 0, 0, 8142, 8483, 8600, 8941, 9058, - 0, 0, 0, 0,11436, 1656, 2507, 2965, 321, 362, + 0, 0, 5679, 5798, 6143, 6262, 6607, 6726, 7071, 7190, + 0, 7535, 7654, 7999,10437, -205, 191, 0, 0, 9973, + 0,10742, 0, 8118, 0, 0, 0, 8463, 8582, 8927, + 9046, 9391, 0, 0, 0, 9510, 9855, 0,12268, 2007, + 2510, 2872, 659, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 4020, 4361, 3445, - 3562, 2188, 2529, 4936,10001, 0, 2646, 1730, 2071, 814, - 1155, 1272, 1613, 0, 3903, 0, 0, 0, 0, 0, - 33, 0, 4451, 3118, 2987, 0, 326, 0, 3990, 4906, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 385, 0, 0, 701, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 452, 455, 0, 0, 0, 0, 0, - 0, 0, 720, 0, 0, 0, 0, 0, 701, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 4819, 92, 32, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 396, 0, 0, 0, 0, 460, - 0, 0, 96, 0, 0, 97, 0, 0, + 0, 4287, 4406, 3478, 3823, 2431, 2550, 5215,10820, 0, + 2895, 1967, 2086, 1039, 1158, 1503, 1622, 0, 3942, 0, + 0, 0, 0, 0, 9, 0, 349, 366, 3014, 0, + 1, 0, 379, 3448, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 407, + 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 401, 419, 0, + 0, 0, 0, 0, 0, 0, 1015, 0, 0, 0, + 0, 0, 633, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4870, 111, 43, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 411, 0, + 0, 0, 0, 432, 0, 0, 141, 0, 0, 151, + 0, 0, }; -short yygindex[] = { 0, - -25, 401, -104, 0, -78, 280, 0, 0, 1852, 0, - 0, -238, 104, -81, -108, 43, 0, 0, 2253, -44, - 0, 0, 0, 38, 0, 50, 417, -36, 22, 414, +static const short yygindex[] = { 0, + -25, 220, -19, 0, -53, 298, 0, 0, -66, 0, + 0, -118, 33, -84, -111, 90, 0, 0,10234, -102, + 0, 0, 0, 88, 0, 40, 471, -79, 103, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 269, + 0, 0, 0, 0, 315, }; -#define YYTABLESIZE 13863 -short yytable[] = { 96, - 1, 164, 216, 118, 6, 96, 245, 214, 212, 209, - 213, 161, 215, 195, 216, 41, 260, 46, 220, 214, - 212, 4, 213, 35, 215, 210, 228, 211, 229, 322, - 31, 8, 253, 6, 368, 216, 42, 248, 373, 211, - 214, 212, 216, 213, 93, 215, 162, 214, 212, 228, - 213, 229, 215, 38, 162, 44, 301, 124, 43, 217, - 241, 402, 285, 165, 401, 248, 193, 211, 199, 200, - 242, 217, 136, 253, 106, 136, 253, 185, 186, 45, - 106, 96, 35, 242, 109, 244, 162, 93, 228, 31, - 229, 253, 217, 47, 96, 6, 168, 169, 228, 217, - 229, 64, 117, 261, 262, 263, 264, 265, 266, 267, - 268, 269, 269, 269, 269, 284, 35, 436, 286, 287, - 288, 250, 251, 31, 119, 253, 6, 6, 101, 289, - 290, 405, 406, 123, 101, 7, 167, 345, 34, 269, - 171, 352, 354, 173, 30, 358, 360, 174, 35, 347, - 348, 189, 190, 252, 253, 31, 106, 253, 6, 175, - 64, 187, 188, 256, 258, 427, 176, 254, 428, 106, - 243, 417, 177, 228, 38, 229, 178, 328, 329, 330, - 331, 332, 333, 334, 335, 337, 338, 339, 340, 341, - 342, 343, 269, 179, 64, 196, 220, 34, 195, 7, - 180, 181, 284, 284, 377, 49, 291, 292, 293, 255, - 101, 52, 182, 183, 38, 163, 53, 350, 184, 249, - 351, 353, 355, 101, 357, 359, 64, 294, 7, 370, - 371, 34, 7, 305, 320, 191, 192, 8, 321, 7, - 101, 101, 101, 101, 7, 394, 395, 228, 49, 229, - 219, 193, 217, 326, 52, 327, 226, 376, 346, 53, - 7, 6, 6, 34, 6, 6, 440, 201, 300, 349, - 202, 365, 364, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 372, 366, 6, 378, 398, - 7, 380, 335, 269, 425, 7, 253, 269, 284, 284, - 201, 361, 362, 202, 381, 382, 38, 221, 222, 223, - 224, 225, 416, 101, 203, 204, 205, 206, 207, 208, - 66, 101, 7, 253, 404, 55, 203, 204, 205, 206, - 207, 208, 383, 384, 253, 385, 441, 253, 228, 6, - 229, 324, 323, 325, 386, 6, 6, 387, 388, 6, - 30, 6, 389, 390, 203, 233, 205, 206, 207, 208, - 396, 67, 250, 137, 400, 137, 55, 407, 6, 55, - 6, 269, 269, 423, 408, 424, 410, 6, 6, 66, - 196, 253, 253, 420, 55, 228, 397, 229, 233, 269, - 269, 418, 233, 419, 430, 233, 233, 233, 233, 233, - 233, 431, 233, 432, 138, 433, 138, 439, 238, 444, - 445, 443, 448, 66, 233, 233, 446, 233, 55, 238, - 67, 101, 101, 1, 216, 50, 101, 113, 164, 214, - 216, 228, 415, 229, 215, 214, 212, 61, 213, 146, - 215, 62, 63, 166, 299, 66, 429, 120, 233, 125, - 55, 233, 38, 248, 67, 211, 7, 7, 7, 7, - 7, 319, 7, 140, 140, 140, 0, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 233, 217, 7, 138, 138, 138, 67, 217, 221, 222, - 223, 224, 225, 198, 141, 141, 141, 143, 143, 143, - 101, 101, 148, 148, 148, 0, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 101, 101, +#define YYTABLESIZE 14474 +static const short yytable[] = { 96, + 55, 326, 243, 118, 230, 96, 231, 166, 255, 1, + 230, 163, 231, 262, 218, 222, 8, 187, 188, 216, + 214, 46, 215, 218, 217, 170, 171, 244, 216, 214, + 211, 215, 41, 217, 230, 229, 231, 250, 197, 213, + 244, 55, 44, 38, 55, 43, 250, 42, 213, 255, + 191, 192, 255, 440, 164, 305, 230, 101, 231, 55, + 252, 253, 164, 101, 106, 45, 195, 255, 201, 202, + 106, 219, 109, 280, 406, 444, 164, 405, 93, 117, + 219, 96, 6, 138, 119, 246, 138, 287, 189, 190, + 218, 247, 123, 55, 96, 216, 214, 47, 215, 93, + 217, 255, 4, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 271, 271, 271, 286, 254, 255, 288, 289, + 290, 193, 194, 7, 198, 55, 328, 327, 329, 291, + 292, 30, 169, 255, 296, 297, 349, 173, 124, 101, + 230, 271, 231, 218, 167, 218, 106, 219, 216, 214, + 216, 215, 101, 217, 175, 217, 372, 256, 176, 106, + 377, 421, 177, 230, 38, 231, 250, 178, 213, 101, + 101, 101, 101, 374, 375, 6, 351, 352, 179, 332, + 333, 334, 335, 336, 337, 338, 339, 341, 342, 343, + 344, 345, 346, 347, 271, 222, 293, 294, 295, 304, + 219, 180, 219, 181, 286, 286, 38, 6, 371, 7, + 258, 260, 280, 182, 183, 379, 7, 184, 185, 354, + 186, 165, 355, 357, 359, 197, 361, 363, 356, 358, + 218, 381, 362, 364, 251, 216, 214, 8, 215, 49, + 217, 257, 7, 245, 101, 52, 113, 309, 7, 7, + 53, 298, 101, 195, 7, 409, 410, 324, 35, 380, + 49, 445, 168, 230, 55, 231, 52, 402, 325, 330, + 408, 53, 255, 420, 398, 399, 230, 401, 231, 223, + 224, 225, 226, 227, 221, 219, 331, 219, 31, 431, + 228, 55, 432, 365, 366, 429, 339, 271, 38, 255, + 7, 271, 286, 286, 350, 7, 353, 371, 371, 369, + 255, 198, 200, 255, 230, 419, 231, 35, 368, 6, + 142, 142, 142, 64, 370, 376, 205, 206, 207, 208, + 209, 210, 7, 384, 382, 205, 206, 207, 208, 209, + 210, 371, 385, 386, 371, 387, 388, 31, 256, 55, + 55, 35, 30, 389, 101, 101, 392, 255, 255, 101, + 390, 218, 391, 393, 34, 59, 216, 214, 211, 215, + 394, 217, 22, 400, 252, 271, 271, 427, 58, 428, + 411, 31, 64, 35, 250, 412, 213, 404, 307, 256, + 422, 414, 256, 271, 271, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 320, 321, 59, 256, 423, 59, + 6, 434, 424, 31, 435, 447, 64, 436, 219, 58, + 450, 437, 58, 34, 59, 140, 140, 140, 443, 449, + 218, 22, 448, 101, 101, 216, 214, 58, 215, 1, + 217, 256, 6, 143, 143, 143, 38, 50, 64, 452, + 166, 101, 101, 250, 148, 213, 61, 34, 59, 209, + 210, 145, 145, 145, 303, 22, 7, 7, 7, 7, + 7, 58, 7, 256, 150, 150, 150, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 62, 219, 7, 34, + 59, 7, 7, 7, 7, 203, 63, 22, 204, 228, + 433, 120, 125, 58, 223, 224, 225, 226, 227, 323, + 378, 0, 0, 0, 0, 0, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 7, 7, 7, 7, - 7, 7, 216, 0, 7, 0, 7, 214, 212, 0, - 213, 0, 215, 0, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 0, 7, 0, 303, 0, 0, - 374, 0, 7, 7, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 316, 317, 238, 0, 0, 230, 55, - 231, 232, 233, 234, 235, 236, 240, 237, 0, 217, - 0, 231, 232, 233, 234, 235, 236, 0, 237, 0, - 0, 0, 233, 233, 233, 233, 55, 0, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 0, 0, - 226, 0, 0, 0, 0, 0, 233, 233, 22, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 0, 0, + 7, 7, 0, 0, 7, 0, 7, 0, 0, 0, + 0, 0, 0, 0, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 235, 7, 6, 6, 0, 6, + 6, 0, 0, 0, 7, 7, 50, 0, 6, 6, + 6, 6, 6, 6, 6, 6, 19, 0, 6, 0, + 0, 6, 6, 6, 6, 416, 0, 235, 0, 417, + 418, 235, 256, 0, 235, 235, 235, 235, 235, 235, + 0, 235, 0, 0, 0, 18, 0, 50, 0, 59, + 50, 0, 48, 235, 235, 0, 235, 0, 0, 256, + 0, 0, 58, 0, 0, 50, 0, 0, 0, 0, + 256, 0, 0, 256, 6, 19, 59, 0, 66, 0, + 6, 6, 0, 67, 6, 0, 6, 235, 0, 58, + 235, 0, 0, 248, 249, 207, 208, 209, 210, 50, + 403, 0, 0, 6, 18, 6, 0, 0, 0, 19, + 0, 48, 0, 257, 6, 6, 0, 0, 256, 235, + 0, 139, 0, 139, 0, 0, 140, 0, 140, 0, + 0, 50, 0, 0, 0, 59, 0, 66, 18, 0, + 0, 19, 67, 0, 0, 48, 257, 0, 58, 0, + 257, 0, 0, 257, 257, 257, 257, 257, 257, 0, + 257, 0, 205, 206, 207, 208, 209, 210, 54, 55, + 18, 66, 257, 257, 0, 257, 67, 48, 0, 0, + 0, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 66, 0, 0, 257, 0, 67, 257, + 79, 80, 81, 82, 0, 0, 0, 0, 0, 0, + 0, 79, 80, 81, 82, 0, 0, 0, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 0, 257, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 0, 0, + 0, 235, 235, 235, 235, 0, 0, 235, 235, 235, + 235, 235, 235, 0, 0, 0, 0, 0, 0, 0, + 50, 235, 235, 0, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 50, 0, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 0, 0, 0, 0, 0, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 0, + 240, 235, 235, 235, 235, 278, 0, 235, 235, 0, + 235, 0, 0, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 0, 0, + 0, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 257, 257, 257, 257, 0, 0, 257, 257, 257, 257, + 257, 257, 0, 0, 240, 0, 0, 0, 0, 0, + 257, 257, 0, 257, 257, 257, 257, 257, 257, 257, + 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, + 257, 257, 257, 257, 257, 257, 0, 0, 257, 257, + 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, + 257, 257, 0, 0, 72, 0, 0, 257, 257, 257, + 257, 257, 257, 257, 257, 257, 257, 257, 0, 0, + 257, 257, 257, 257, 0, 0, 257, 257, 231, 257, + 0, 0, 257, 257, 257, 257, 257, 257, 257, 257, + 257, 257, 257, 257, 257, 257, 257, 0, 0, 0, + 257, 257, 257, 257, 257, 257, 257, 257, 257, 0, + 0, 231, 0, 72, 0, 231, 0, 0, 231, 231, + 231, 231, 231, 231, 0, 231, 0, 240, 233, 234, + 235, 236, 237, 238, 0, 239, 0, 231, 231, 0, + 231, 0, 0, 0, 0, 0, 0, 72, 0, 0, + 0, 0, 0, 0, 0, 218, 0, 0, 0, 0, + 216, 214, 211, 215, 0, 217, 0, 0, 0, 0, + 0, 231, 0, 232, 231, 0, 0, 0, 212, 72, + 213, 242, 233, 234, 235, 236, 237, 238, 0, 239, + 0, 0, 0, 54, 55, 0, 0, 232, 0, 0, + 0, 0, 0, 231, 0, 0, 0, 0, 0, 0, + 0, 0, 219, 0, 0, 0, 0, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 0, 0, + 232, 0, 0, 0, 232, 0, 0, 232, 232, 232, + 232, 232, 232, 0, 232, 0, 79, 80, 81, 82, + 0, 0, 0, 0, 0, 0, 232, 232, 0, 232, + 0, 0, 0, 0, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 232, 0, 0, 232, 218, 0, 232, 0, 0, 216, + 214, 0, 215, 0, 217, 233, 234, 235, 236, 237, + 238, 0, 239, 0, 0, 0, 0, 250, 0, 213, + 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 231, 231, 231, 231, 0, + 0, 231, 231, 231, 231, 231, 231, 0, 0, 0, + 0, 219, 0, 0, 0, 231, 231, 0, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 0, 0, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 0, 0, 0, + 0, 0, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 0, 0, 231, 231, 231, 231, 0, + 203, 231, 231, 204, 231, 0, 0, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 0, 0, 0, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 232, 232, 232, 232, 0, 0, + 232, 232, 232, 232, 232, 232, 0, 205, 206, 207, + 208, 209, 210, 0, 232, 232, 0, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 0, 0, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 0, 0, 0, 0, + 0, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 0, 0, 232, 232, 232, 232, 0, 0, + 232, 232, 233, 232, 0, 0, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 0, 0, 0, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 0, 0, 233, 0, 0, 0, 233, + 0, 0, 233, 233, 233, 233, 233, 233, 0, 233, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, + 0, 233, 233, 0, 233, 0, 248, 249, 207, 208, + 209, 210, 0, 0, 0, 0, 0, 0, 0, 218, + 0, 0, 0, 0, 216, 214, 211, 215, 0, 217, + 0, 0, 0, 0, 0, 233, 0, 0, 233, 0, + 51, 0, 322, 51, 213, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 51, 0, + 0, 234, 0, 0, 0, 0, 0, 233, 0, 0, + 0, 0, 0, 0, 0, 0, 219, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 51, 0, 234, 0, 0, 0, 234, 0, + 0, 234, 234, 234, 234, 234, 234, 0, 234, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 234, 234, 0, 234, 51, 0, 0, 0, 218, 0, + 0, 0, 0, 216, 214, 0, 215, 0, 217, 0, + 218, 0, 0, 0, 0, 216, 214, 0, 215, 0, + 217, 250, 0, 213, 234, 0, 0, 234, 0, 0, + 0, 0, 0, 250, 218, 213, 0, 0, 0, 216, + 214, 0, 215, 0, 217, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 219, 234, 250, 0, 213, + 0, 0, 0, 0, 0, 0, 0, 219, 0, 233, + 233, 233, 233, 0, 0, 233, 233, 233, 233, 233, + 233, 0, 0, 0, 0, 0, 0, 0, 0, 233, + 233, 219, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 55, 55, 0, 0, 0, 233, + 233, 233, 233, 233, 233, 0, 0, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 19, 18, 233, 233, 233, 233, 255, 22, 233, 233, - 48, 233, 0, 0, 233, 233, 233, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, 72, - 0, 0, 233, 233, 233, 233, 233, 233, 233, 255, - 0, 22, 0, 255, 0, 0, 255, 255, 255, 255, - 255, 255, 246, 255, 205, 206, 207, 208, 0, 19, - 18, 0, 0, 0, 230, 255, 255, 0, 255, 48, - 0, 0, 0, 22, 0, 0, 0, 231, 232, 233, - 234, 235, 236, 0, 237, 0, 0, 0, 72, 0, - 0, 0, 412, 19, 18, 0, 413, 414, 0, 255, - 0, 0, 255, 48, 0, 54, 55, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 72, 229, 0, 19, 18, 0, 0, 0, - 0, 255, 0, 0, 0, 48, 0, 0, 0, 0, - 0, 0, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 0, 72, 0, 229, 0, 0, 0, - 229, 0, 0, 229, 229, 229, 229, 229, 229, 0, - 229, 79, 80, 81, 82, 0, 0, 0, 0, 0, - 0, 0, 229, 229, 0, 229, 0, 0, 0, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 0, 0, - 0, 0, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 0, 0, 0, 229, 0, 0, 229, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 79, 80, 81, 82, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 229, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 0, 0, - 0, 0, 0, 255, 255, 255, 255, 0, 0, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 0, 0, 0, 0, 0, 0, 0, 255, 255, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, - 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 276, 0, 255, 255, 255, 255, 0, 0, 255, - 255, 0, 255, 0, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, - 229, 229, 229, 229, 0, 0, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 0, 0, 0, 0, - 0, 0, 0, 0, 229, 229, 0, 229, 229, 229, + 233, 0, 0, 51, 0, 0, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 0, 0, 233, + 233, 233, 233, 0, 203, 233, 233, 204, 233, 0, + 51, 233, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 0, 0, 0, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 234, 234, + 234, 234, 0, 0, 234, 234, 234, 234, 234, 234, + 0, 248, 249, 207, 208, 209, 210, 0, 234, 234, + 0, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 0, 0, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 0, 441, 0, 0, 0, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 0, 0, 234, 234, + 234, 234, 0, 0, 234, 234, 229, 234, 0, 0, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 0, 0, 0, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 0, 0, 229, + 205, 206, 207, 208, 209, 210, 229, 229, 0, 229, + 229, 229, 205, 206, 207, 208, 209, 210, 0, 0, + 0, 0, 0, 0, 0, 229, 229, 0, 229, 0, + 0, 0, 0, 0, 0, 0, 205, 0, 207, 208, + 209, 210, 0, 222, 0, 0, 0, 0, 222, 222, + 222, 222, 0, 222, 0, 0, 0, 0, 0, 229, + 0, 0, 229, 0, 0, 0, 222, 0, 222, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 0, 0, + 0, 229, 0, 0, 0, 0, 0, 0, 0, 0, + 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 230, 230, 0, 230, 230, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 230, 230, 0, 230, 0, 0, + 218, 0, 0, 0, 0, 216, 214, 0, 215, 0, + 217, 218, 0, 0, 0, 0, 216, 214, 0, 215, + 0, 217, 0, 250, 0, 213, 0, 0, 230, 0, + 0, 230, 0, 0, 250, 0, 213, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 219, 0, 0, + 230, 0, 0, 0, 0, 0, 0, 0, 219, 0, + 0, 0, 0, 229, 229, 229, 229, 0, 0, 229, + 229, 229, 229, 229, 229, 0, 0, 0, 0, 0, + 0, 0, 0, 229, 229, 0, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 0, 0, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 0, + 0, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 0, 0, 0, 0, 0, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 0, 0, 0, 0, 0, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, 0, 0, - 229, 229, 229, 229, 230, 0, 229, 229, 0, 229, - 0, 0, 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 0, 0, 0, - 229, 229, 229, 229, 229, 229, 229, 230, 0, 0, - 0, 230, 0, 0, 230, 230, 230, 230, 230, 230, - 0, 230, 216, 0, 0, 0, 0, 214, 212, 0, - 213, 0, 215, 230, 230, 0, 230, 0, 0, 0, - 0, 0, 0, 0, 0, 248, 0, 211, 0, 0, - 216, 0, 0, 0, 0, 214, 212, 0, 213, 0, - 215, 0, 0, 0, 0, 0, 0, 230, 0, 0, - 230, 0, 0, 248, 0, 211, 54, 55, 0, 217, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 231, 0, 0, 0, 0, 0, 0, 0, 230, - 0, 0, 0, 0, 0, 0, 0, 217, 0, 0, - 0, 0, 0, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 231, 0, 0, 0, 231, 0, - 0, 231, 231, 231, 231, 231, 231, 0, 231, 0, - 0, 0, 79, 80, 81, 82, 0, 0, 0, 0, - 231, 231, 0, 231, 0, 0, 0, 0, 0, 0, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 0, - 0, 216, 0, 0, 0, 0, 214, 212, 209, 213, - 0, 215, 0, 0, 231, 0, 0, 231, 0, 0, - 0, 0, 216, 0, 318, 0, 211, 214, 212, 209, - 213, 0, 215, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 248, 231, 211, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 217, 0, - 0, 230, 230, 230, 230, 0, 0, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 0, 0, 217, - 0, 0, 0, 0, 0, 230, 230, 0, 230, 230, + 229, 0, 0, 229, 229, 229, 229, 0, 222, 229, + 229, 222, 229, 0, 0, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 0, 0, 0, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 230, 230, 230, 230, 0, 0, 230, 230, + 230, 230, 230, 230, 0, 222, 222, 222, 222, 222, + 222, 0, 230, 230, 0, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 0, 0, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 0, 0, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 0, 0, 0, 0, 0, 230, 230, + 230, 230, 230, 230, 0, 0, 0, 0, 0, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 0, 0, 230, 230, 230, 230, 0, 0, 230, 230, + 250, 230, 0, 0, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, 0, - 0, 230, 230, 230, 230, 0, 0, 230, 230, 0, - 230, 0, 0, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, 207, 208, - 0, 230, 230, 230, 230, 230, 230, 230, 231, 231, - 231, 231, 0, 0, 231, 231, 231, 231, 231, 231, - 231, 231, 231, 231, 205, 206, 207, 208, 0, 0, - 0, 0, 231, 231, 0, 231, 231, 231, 231, 231, - 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, - 231, 231, 231, 231, 0, 0, 231, 231, 231, 231, - 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, - 0, 0, 0, 0, 0, 231, 231, 231, 231, 231, - 231, 231, 231, 231, 231, 231, 0, 0, 231, 231, - 231, 231, 232, 0, 231, 231, 201, 231, 0, 202, - 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, - 231, 231, 231, 231, 231, 0, 0, 0, 231, 231, - 231, 231, 231, 231, 231, 232, 0, 0, 0, 232, - 0, 0, 232, 232, 232, 232, 232, 232, 0, 232, - 0, 0, 0, 246, 247, 205, 206, 207, 208, 0, - 0, 232, 232, 0, 232, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 203, 204, 205, 206, 207, 208, - 0, 0, 220, 0, 0, 0, 0, 220, 220, 220, - 220, 0, 220, 0, 0, 232, 0, 0, 232, 0, - 0, 0, 50, 0, 0, 220, 0, 220, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, - 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 220, - 0, 0, 0, 50, 0, 0, 50, 0, 0, 0, - 0, 0, 227, 0, 0, 0, 0, 0, 0, 227, - 227, 50, 227, 227, 227, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 227, 227, - 0, 227, 216, 0, 0, 0, 0, 214, 212, 209, - 213, 0, 215, 0, 216, 50, 0, 0, 0, 214, - 212, 0, 213, 0, 215, 248, 0, 211, 0, 0, - 0, 0, 227, 0, 0, 227, 0, 248, 216, 211, - 0, 0, 0, 214, 212, 0, 213, 50, 215, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 217, - 0, 248, 0, 211, 227, 0, 0, 0, 0, 0, - 0, 217, 0, 0, 0, 0, 0, 0, 0, 232, - 232, 232, 232, 0, 0, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 217, 0, 0, 0, 0, - 0, 0, 0, 232, 232, 0, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 0, 0, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 0, 0, 0, 0, 0, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 0, 0, 232, - 232, 232, 232, 227, 0, 232, 232, 220, 232, 0, - 220, 232, 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 50, 0, 0, 232, - 232, 232, 232, 232, 232, 232, 227, 227, 227, 227, - 0, 278, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 0, 50, 220, 220, 220, 220, 220, 220, - 227, 227, 0, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 0, 0, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 0, 0, - 0, 0, 0, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 0, 0, 227, 227, 227, 227, - 228, 0, 227, 227, 0, 227, 0, 0, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 0, 0, 0, 227, 227, 227, 227, - 227, 227, 227, 228, 246, 247, 205, 206, 207, 208, - 228, 228, 0, 228, 228, 228, 246, 247, 205, 206, - 207, 208, 0, 0, 367, 0, 0, 0, 278, 228, - 228, 375, 228, 0, 0, 0, 0, 0, 0, 0, - 203, 204, 205, 206, 207, 208, 0, 0, 0, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 0, 0, 0, 228, 0, 0, 228, 0, 0, 0, - 51, 0, 0, 0, 0, 0, 0, 0, 79, 80, - 81, 82, 0, 0, 0, 0, 0, 248, 0, 0, - 0, 0, 0, 0, 0, 228, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 0, 0, 0, 0, 0, - 0, 51, 0, 0, 51, 0, 0, 0, 0, 0, - 248, 367, 367, 0, 0, 0, 0, 248, 248, 51, - 0, 248, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 248, 248, 0, 248, - 0, 0, 0, 0, 0, 367, 0, 0, 367, 0, - 0, 0, 0, 51, 0, 0, 0, 0, 0, 216, - 0, 0, 0, 0, 214, 212, 0, 213, 0, 215, - 248, 0, 0, 248, 0, 0, 0, 0, 0, 0, - 0, 0, 248, 0, 211, 51, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 248, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 217, 228, 228, 228, - 228, 0, 0, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 0, 197, 0, 0, 0, 0, 0, - 0, 228, 228, 0, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 0, 0, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, 228, 270, - 271, 272, 282, 0, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 0, 0, 228, 228, 228, - 228, 0, 0, 228, 228, 0, 228, 302, 0, 228, - 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 51, 0, 0, 228, 228, 228, - 228, 228, 228, 228, 248, 248, 248, 248, 0, 0, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 0, 51, 336, 0, 0, 0, 0, 0, 248, 248, - 344, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 0, 0, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 15, 0, 0, 0, - 0, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 248, 437, 0, 248, 248, 248, 248, 250, 197, - 248, 248, 0, 248, 0, 0, 248, 248, 248, 248, - 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, - 248, 0, 0, 0, 248, 248, 248, 248, 248, 248, - 248, 250, 0, 0, 0, 15, 0, 0, 250, 250, - 391, 392, 250, 0, 0, 393, 0, 0, 0, 0, - 0, 203, 204, 205, 206, 207, 208, 250, 250, 0, - 250, 0, 0, 0, 0, 0, 0, 0, 0, 15, - 0, 0, 201, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 250, 0, 0, 250, 0, 0, 0, 0, 0, - 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 249, 0, 0, 0, 421, - 422, 0, 0, 250, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 434, 435, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, - 0, 0, 0, 0, 0, 249, 249, 0, 0, 249, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 249, 249, 0, 249, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, - 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 201, 0, 0, 0, 0, 0, 201, - 249, 0, 0, 0, 201, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 250, 250, 250, 250, 0, - 0, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 0, 0, 0, 0, 0, 0, 0, 201, 250, - 250, 0, 250, 250, 250, 250, 250, 250, 250, 250, + 0, 0, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 0, 248, 250, 207, 208, 209, 210, 0, 0, + 250, 250, 0, 0, 250, 207, 208, 209, 210, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, + 250, 0, 250, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 0, 0, 250, 0, 0, 250, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, + 80, 81, 82, 0, 0, 0, 0, 0, 0, 252, + 0, 0, 0, 0, 0, 250, 0, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 252, 0, 0, 0, 0, 0, 0, 252, + 252, 0, 0, 252, 0, 0, 0, 0, 0, 0, + 0, 0, 16, 0, 0, 204, 0, 0, 252, 252, + 0, 252, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, + 0, 0, 252, 0, 0, 252, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 252, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 250, 250, 250, + 250, 0, 0, 250, 250, 250, 250, 250, 250, 0, + 0, 0, 0, 0, 0, 0, 0, 250, 250, 0, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 0, 0, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 250, 250, 250, 250, 250, 0, 0, 0, - 0, 0, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 250, 0, 0, 250, 250, 250, 250, 0, - 0, 250, 250, 0, 250, 0, 0, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, - 250, 250, 0, 0, 0, 250, 250, 250, 250, 250, - 250, 250, 249, 249, 249, 249, 0, 0, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 0, 0, - 0, 0, 0, 0, 0, 0, 249, 249, 0, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 0, 0, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 16, 0, 0, 0, 0, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, - 0, 0, 249, 249, 249, 249, 247, 0, 249, 249, - 0, 249, 0, 0, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 249, 0, - 0, 0, 249, 249, 249, 249, 249, 249, 249, 247, - 0, 0, 0, 16, 0, 0, 247, 247, 0, 0, - 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 247, 247, 0, 247, 0, - 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, - 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, - 0, 0, 247, 0, 0, 0, 0, 0, 0, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 156, 0, 0, 0, 0, 0, 0, - 0, 247, 0, 0, 0, 0, 0, 59, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 156, 0, 0, 0, - 0, 0, 0, 156, 156, 0, 156, 156, 156, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, - 0, 59, 156, 0, 0, 156, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 156, 0, 0, 156, - 0, 0, 0, 0, 0, 0, 216, 0, 0, 0, - 59, 214, 212, 0, 213, 0, 215, 0, 0, 0, - 0, 202, 0, 0, 0, 0, 0, 202, 156, 248, - 0, 211, 202, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 59, 247, 247, 247, 247, 0, 0, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 0, - 0, 0, 0, 217, 0, 0, 202, 247, 247, 0, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 0, - 0, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 0, 0, 0, 0, 0, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 0, 0, 247, 247, 247, 247, 0, 0, 247, - 247, 0, 247, 0, 0, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 0, 0, 0, 247, 247, 247, 247, 247, 247, 247, - 156, 156, 156, 156, 0, 0, 156, 0, 156, 156, - 156, 156, 156, 156, 156, 156, 0, 0, 0, 0, - 0, 59, 0, 0, 156, 156, 0, 156, 156, 156, - 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, - 156, 156, 156, 156, 156, 0, 0, 0, 59, 156, - 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, - 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, - 156, 156, 156, 156, 156, 156, 156, 156, 0, 0, - 156, 156, 156, 156, 252, 0, 156, 156, 0, 0, - 0, 0, 0, 0, 0, 0, 399, 0, 156, 156, - 156, 156, 156, 156, 156, 156, 156, 59, 0, 0, - 156, 156, 156, 156, 156, 156, 156, 252, 0, 0, - 0, 0, 0, 0, 252, 252, 0, 0, 252, 0, + 250, 250, 250, 0, 0, 250, 250, 250, 250, 250, + 250, 250, 250, 250, 250, 250, 250, 250, 250, 0, + 0, 0, 0, 0, 250, 250, 250, 250, 250, 250, + 250, 250, 250, 250, 250, 0, 204, 250, 250, 250, + 250, 0, 204, 250, 250, 0, 250, 204, 0, 250, + 250, 250, 250, 250, 250, 250, 250, 250, 250, 250, + 250, 250, 250, 250, 0, 0, 0, 250, 250, 250, + 250, 250, 250, 250, 250, 250, 252, 252, 252, 252, + 0, 204, 252, 252, 252, 252, 252, 252, 0, 0, + 0, 0, 0, 0, 0, 0, 252, 252, 0, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 0, 0, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 0, 0, + 0, 15, 0, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 252, 0, 0, 252, 252, 252, 252, + 0, 0, 252, 252, 251, 252, 0, 0, 252, 252, + 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + 252, 252, 252, 0, 0, 0, 252, 252, 252, 252, + 252, 252, 252, 252, 252, 0, 0, 251, 0, 0, + 15, 0, 0, 0, 251, 251, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 252, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 203, 204, - 205, 206, 207, 208, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 252, 0, 0, - 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 251, 251, 0, 251, 0, 0, 0, + 0, 0, 0, 0, 15, 0, 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 251, 0, 0, 0, 0, 0, 0, 0, 252, + 0, 0, 0, 0, 0, 0, 0, 251, 0, 0, + 251, 0, 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 249, 0, 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 251, 0, 0, 0, 0, 0, - 0, 251, 251, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, + 0, 0, 0, 249, 249, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 249, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 251, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 249, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 251, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, + 0, 0, 0, 0, 203, 0, 0, 0, 249, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 252, 252, 252, 252, 0, 0, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 0, 0, 0, - 0, 0, 0, 0, 0, 252, 252, 0, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 0, 0, 252, - 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 0, 0, 0, 0, 0, 252, 252, - 252, 252, 252, 252, 252, 252, 252, 252, 252, 0, - 0, 252, 252, 252, 252, 0, 0, 252, 252, 0, - 252, 0, 0, 252, 252, 252, 252, 0, 0, 252, - 252, 252, 252, 252, 252, 252, 252, 252, 0, 0, - 0, 252, 252, 252, 252, 252, 252, 252, 251, 251, - 251, 251, 0, 0, 251, 251, 251, 251, 251, 251, - 251, 251, 251, 251, 0, 0, 0, 0, 0, 0, - 0, 0, 251, 251, 0, 251, 251, 251, 251, 251, + 0, 251, 251, 251, 251, 0, 0, 251, 251, 251, + 251, 251, 251, 0, 0, 0, 0, 0, 0, 0, + 0, 251, 251, 203, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, - 251, 251, 251, 251, 0, 0, 251, 251, 251, 251, + 251, 251, 251, 251, 251, 251, 251, 0, 0, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, - 0, 0, 0, 0, 0, 251, 251, 251, 251, 251, - 251, 251, 251, 251, 251, 251, 0, 0, 251, 251, - 251, 251, 157, 0, 251, 251, 0, 251, 0, 0, - 251, 251, 251, 251, 0, 0, 251, 251, 251, 251, - 251, 251, 251, 251, 251, 0, 0, 0, 251, 251, - 251, 251, 251, 251, 251, 157, 0, 0, 0, 0, - 0, 0, 157, 157, 0, 157, 157, 157, 0, 0, + 251, 251, 251, 0, 0, 0, 0, 0, 251, 251, + 251, 251, 251, 251, 251, 251, 251, 251, 251, 0, + 0, 251, 251, 251, 251, 0, 0, 251, 251, 0, + 251, 0, 0, 251, 251, 251, 251, 251, 251, 251, + 251, 251, 251, 251, 251, 251, 251, 251, 0, 0, + 0, 251, 251, 251, 251, 251, 251, 251, 251, 251, + 249, 249, 249, 249, 0, 0, 249, 249, 249, 249, + 249, 249, 0, 0, 0, 0, 0, 0, 0, 0, + 249, 249, 0, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 0, 0, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 0, 0, 0, 0, 0, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 0, 0, + 249, 249, 249, 249, 0, 0, 249, 249, 158, 249, + 0, 0, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 0, 0, 0, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 0, + 0, 158, 0, 0, 0, 0, 0, 0, 158, 158, + 0, 158, 158, 158, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 158, 0, 0, + 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, + 0, 158, 0, 0, 158, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 254, 0, 0, + 0, 0, 0, 158, 0, 0, 0, 0, 57, 0, + 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, + 254, 0, 0, 0, 0, 0, 0, 254, 254, 0, + 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, + 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 254, 0, 57, 254, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 158, 158, 158, 158, 0, + 0, 158, 0, 158, 158, 158, 158, 0, 0, 0, + 0, 0, 0, 0, 0, 158, 158, 0, 158, 158, + 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, + 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, + 0, 0, 0, 0, 158, 158, 158, 158, 158, 158, + 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, + 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, + 158, 158, 158, 0, 0, 158, 158, 158, 158, 0, + 0, 158, 158, 0, 0, 0, 0, 0, 0, 0, + 0, 57, 0, 158, 158, 158, 158, 158, 158, 158, + 158, 158, 0, 0, 0, 158, 158, 158, 158, 158, + 158, 158, 158, 158, 254, 254, 254, 254, 57, 0, + 254, 254, 254, 254, 254, 254, 0, 0, 0, 0, + 0, 0, 0, 0, 254, 254, 0, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 0, 0, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 254, 254, 254, 0, 57, 0, 0, + 0, 254, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 254, 0, 0, 254, 254, 254, 254, 0, 0, + 254, 254, 253, 254, 0, 0, 254, 254, 254, 254, + 0, 0, 254, 254, 254, 254, 254, 254, 254, 254, + 254, 0, 0, 0, 254, 254, 254, 254, 254, 254, + 254, 254, 254, 0, 0, 253, 0, 0, 0, 0, + 0, 0, 253, 253, 0, 0, 253, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 253, 0, 0, 253, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 157, 0, 0, 157, 0, 0, 0, 0, 0, + 0, 159, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, - 0, 0, 0, 0, 0, 157, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, + 0, 159, 159, 0, 159, 159, 159, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 159, 0, 0, 159, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 159, 0, 0, 159, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, - 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, - 58, 0, 0, 58, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 58, 0, - 0, 0, 253, 0, 0, 0, 0, 0, 0, 253, - 253, 0, 0, 253, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 253, 0, - 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 253, 0, 58, 253, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, - 157, 157, 157, 0, 0, 157, 0, 157, 157, 157, - 157, 157, 157, 157, 157, 0, 0, 0, 0, 0, - 0, 0, 0, 157, 157, 0, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 157, 0, 0, 0, 0, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 0, 0, 157, - 157, 157, 157, 0, 0, 157, 157, 0, 0, 0, - 0, 0, 0, 58, 0, 0, 0, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 0, 0, 0, 157, - 157, 157, 157, 157, 157, 157, 253, 253, 253, 253, - 58, 0, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 0, 0, 0, 0, 0, 0, 0, 0, - 253, 253, 0, 253, 253, 253, 253, 253, 253, 253, + 253, 253, 253, 0, 0, 253, 253, 253, 253, 253, + 253, 0, 0, 0, 0, 0, 0, 0, 0, 253, + 253, 0, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 0, 0, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 0, 58, - 0, 0, 0, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 0, 0, 253, 253, 253, 253, - 254, 0, 253, 253, 0, 253, 0, 0, 253, 253, - 0, 0, 0, 0, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 0, 0, 0, 253, 253, 253, 253, - 253, 253, 253, 254, 0, 0, 0, 0, 0, 0, - 254, 254, 0, 0, 254, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, + 253, 253, 253, 253, 253, 0, 0, 253, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 253, 253, 253, + 253, 0, 0, 0, 0, 0, 253, 253, 253, 253, + 253, 253, 253, 253, 253, 253, 253, 0, 0, 253, + 253, 253, 253, 0, 0, 253, 253, 0, 253, 0, + 0, 253, 253, 253, 253, 0, 0, 253, 253, 253, + 253, 253, 253, 253, 253, 253, 0, 0, 0, 253, + 253, 253, 253, 253, 253, 253, 253, 253, 159, 159, + 159, 159, 0, 0, 159, 0, 159, 159, 159, 159, + 0, 0, 0, 0, 0, 0, 0, 0, 159, 159, + 0, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 0, 0, 0, 0, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 0, 0, 159, 159, + 159, 159, 0, 0, 159, 159, 255, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 0, 0, 0, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 0, 0, 255, + 0, 0, 0, 0, 0, 0, 255, 255, 0, 0, + 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 254, 0, 0, 254, 0, 0, 254, 0, 0, 0, + 0, 0, 0, 0, 0, 256, 0, 0, 0, 0, + 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, - 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, - 0, 254, 0, 0, 254, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 254, - 138, 0, 0, 0, 0, 0, 0, 138, 138, 0, - 138, 138, 138, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 138, 0, 0, 138, - 0, 0, 0, 254, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, + 0, 0, 0, 0, 0, 256, 256, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 138, 0, 0, 138, 0, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 256, 0, + 0, 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 254, 254, 254, - 254, 0, 0, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 0, 0, 0, 0, 0, 0, 0, - 0, 254, 254, 0, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 0, 0, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, 0, - 0, 0, 0, 0, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 0, 0, 254, 254, 254, - 254, 0, 0, 254, 254, 0, 254, 0, 0, 0, - 254, 0, 0, 0, 254, 254, 254, 254, 254, 254, - 254, 254, 254, 254, 0, 0, 0, 254, 254, 254, - 254, 254, 254, 254, 138, 138, 138, 138, 0, 0, - 138, 254, 138, 138, 138, 138, 138, 138, 138, 138, - 0, 0, 254, 0, 0, 254, 0, 0, 138, 138, - 0, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, 138, 0, - 0, 0, 0, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 0, 0, 0, 0, - 254, 138, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 0, 0, 138, 138, 138, 138, 146, 0, - 138, 138, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 138, 138, 138, 138, 138, 138, 138, 138, - 138, 0, 0, 0, 138, 138, 138, 138, 138, 138, - 138, 146, 0, 0, 0, 0, 0, 0, 146, 146, - 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 146, 0, 0, - 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, - 0, 146, 0, 0, 146, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 152, 0, 0, 0, 0, - 0, 0, 0, 146, 0, 0, 57, 0, 0, 57, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 57, 0, 0, 0, 152, 0, - 0, 0, 0, 0, 0, 152, 152, 0, 0, 152, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 152, 0, 0, 0, 57, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 152, 0, - 57, 152, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 152, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 146, 146, 146, 146, 0, - 0, 146, 0, 146, 146, 146, 146, 146, 146, 146, - 146, 0, 0, 0, 0, 0, 0, 0, 0, 146, - 146, 0, 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, - 0, 0, 0, 0, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 0, 0, 0, - 0, 0, 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 0, 0, 146, 146, 146, 146, 0, - 0, 146, 146, 0, 0, 0, 0, 32, 0, 57, - 0, 0, 0, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 0, 0, 0, 146, 146, 146, 146, 146, - 146, 146, 152, 152, 152, 152, 57, 0, 152, 33, - 152, 152, 152, 152, 152, 152, 152, 152, 0, 0, - 0, 0, 0, 0, 0, 0, 152, 152, 0, 152, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 152, 152, 152, 152, 152, 152, 152, 0, 0, 0, - 0, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 152, 152, 152, 152, 0, 57, 0, 0, 0, 152, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, - 0, 0, 152, 152, 152, 152, 91, 0, 152, 152, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 152, 152, 152, 152, 152, 152, 152, 152, 152, 0, - 0, 0, 152, 152, 152, 152, 152, 152, 152, 91, - 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 6, 7, 91, 8, 9, 0, 0, - 0, 0, 0, 0, 0, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 0, 0, 22, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, - 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, + 256, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 255, 255, 255, 255, 0, 0, 255, + 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, + 0, 0, 0, 255, 255, 0, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, + 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 0, 0, 255, 255, 255, 255, 0, 0, 255, + 255, 0, 255, 0, 0, 255, 255, 0, 0, 0, + 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 256, 256, 256, 256, 0, 0, 256, 256, + 256, 256, 256, 256, 0, 0, 0, 0, 0, 0, + 0, 0, 256, 256, 0, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 0, 0, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 0, 0, 0, 0, 0, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 0, 0, 256, 256, 256, 256, 0, 0, 256, 256, + 140, 256, 0, 0, 0, 256, 0, 0, 0, 0, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 0, + 0, 0, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 0, 0, 140, 0, 0, 0, 0, 0, 0, + 140, 140, 0, 140, 140, 140, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 140, + 0, 0, 140, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 140, 0, 0, 140, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, + 0, 0, 0, 0, 0, 140, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 148, 0, 0, 0, 0, 0, 0, 148, + 148, 0, 0, 148, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 148, 0, + 0, 148, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 148, 0, 0, 148, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 148, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 140, 140, 140, + 140, 0, 0, 140, 0, 140, 140, 140, 140, 0, + 0, 0, 0, 0, 0, 0, 0, 140, 140, 0, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, + 140, 140, 0, 0, 0, 0, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 140, 140, 140, 41, + 0, 0, 0, 0, 140, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 140, 0, 0, 140, 140, 140, + 140, 0, 0, 140, 140, 0, 0, 0, 0, 0, + 0, 32, 0, 0, 0, 140, 140, 140, 140, 140, + 140, 140, 140, 140, 0, 0, 0, 140, 140, 140, + 140, 140, 140, 140, 140, 140, 148, 148, 148, 148, + 0, 0, 148, 33, 148, 148, 148, 148, 0, 0, + 0, 0, 0, 0, 0, 0, 148, 148, 0, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, + 148, 0, 0, 0, 0, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 148, 148, 148, 0, 0, + 0, 0, 0, 148, 148, 148, 148, 148, 148, 148, + 148, 148, 148, 148, 0, 0, 148, 148, 148, 148, + 0, 0, 148, 148, 154, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 148, 148, 148, 148, 148, 148, + 148, 148, 148, 0, 0, 0, 148, 148, 148, 148, + 148, 148, 148, 148, 148, 0, 0, 154, 0, 0, + 0, 0, 0, 0, 154, 154, 0, 0, 154, 0, + 0, 0, 0, 0, 0, 0, 0, 6, 7, 0, + 8, 9, 0, 154, 0, 0, 0, 0, 0, 10, + 11, 12, 13, 14, 15, 16, 17, 0, 0, 18, + 0, 0, 19, 20, 21, 22, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 154, 0, 0, + 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, - 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 23, 0, 0, 0, 0, 0, 24, 25, 0, - 0, 26, 0, 27, 0, 0, 93, 0, 0, 0, - 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, - 28, 0, 29, 0, 0, 0, 0, 0, 0, 30, - 31, 0, 93, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 91, 0, 0, 0, 0, 0, 154, + 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, + 0, 24, 25, 0, 0, 26, 0, 27, 0, 0, + 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, + 0, 0, 0, 91, 28, 0, 29, 0, 0, 0, + 0, 0, 0, 0, 0, 30, 31, 0, 0, 0, + 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 93, 0, 0, 93, + 0, 0, 0, 0, 0, 0, 91, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 91, 91, 91, 91, 0, 0, 91, - 0, 91, 91, 91, 91, 91, 91, 91, 91, 0, - 0, 0, 0, 0, 0, 0, 0, 91, 91, 0, + 0, 154, 154, 154, 154, 0, 0, 154, 0, 154, + 154, 154, 154, 0, 0, 0, 0, 0, 0, 0, + 0, 154, 154, 0, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 154, 154, 154, 0, 0, 0, 0, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 154, 154, 154, 0, 0, 0, 0, 0, 154, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 154, 0, + 0, 154, 154, 154, 154, 0, 0, 154, 154, 0, + 0, 0, 0, 32, 0, 0, 0, 0, 0, 154, + 154, 154, 154, 154, 154, 154, 154, 154, 0, 0, + 0, 154, 154, 154, 154, 154, 154, 154, 154, 154, + 91, 91, 91, 91, 0, 33, 91, 0, 91, 91, + 91, 91, 0, 0, 0, 0, 0, 0, 0, 0, + 91, 91, 0, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, 0, 0, - 0, 0, 0, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 0, 0, 0, 0, 0, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 91, 0, 0, 91, 91, 91, 91, 0, 0, 91, - 91, 0, 6, 0, 0, 0, 0, 0, 0, 0, - 0, 91, 91, 91, 91, 91, 91, 91, 91, 91, - 0, 0, 0, 91, 91, 91, 91, 91, 91, 91, - 93, 93, 93, 93, 6, 0, 93, 0, 93, 93, - 93, 93, 93, 93, 93, 93, 0, 0, 0, 0, - 0, 0, 0, 0, 93, 93, 0, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 0, 0, 0, 0, 0, - 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 0, 0, 0, 0, 0, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, 0, 0, - 93, 93, 93, 93, 95, 0, 93, 93, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 0, 0, 0, - 93, 93, 93, 93, 93, 93, 93, 95, 0, 0, - 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, - 0, 6, 6, 95, 0, 0, 0, 0, 0, 0, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 0, 0, 6, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, - 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 99, 0, 0, 0, 0, 0, 0, 0, 95, - 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, - 0, 0, 6, 6, 0, 0, 6, 0, 6, 0, - 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, - 0, 99, 0, 0, 0, 6, 0, 6, 0, 0, - 0, 0, 0, 0, 6, 6, 0, 0, 0, 0, - 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 91, 91, 0, 0, 0, 0, 0, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 0, 0, + 91, 91, 91, 91, 0, 0, 91, 91, 87, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 0, 0, 0, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 0, + 0, 87, 0, 0, 0, 0, 0, 0, 87, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, + 7, 0, 8, 9, 0, 0, 0, 87, 0, 0, + 0, 10, 11, 12, 13, 14, 15, 16, 17, 0, + 0, 18, 0, 0, 19, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 87, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 99, 0, 0, 99, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, + 0, 0, 0, 87, 0, 0, 0, 23, 0, 0, + 0, 0, 0, 24, 25, 0, 0, 26, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 88, 0, 0, 0, 0, 0, 28, 88, 29, 0, + 0, 0, 0, 0, 0, 0, 0, 30, 31, 0, + 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 95, 95, 95, 95, 0, 0, 95, 0, 95, - 95, 95, 95, 95, 95, 95, 95, 0, 0, 0, - 0, 0, 0, 0, 0, 95, 95, 0, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 0, 0, 0, 0, - 0, 95, 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 0, 0, 0, 0, 0, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 95, 0, - 0, 95, 95, 95, 95, 0, 0, 95, 95, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, - 95, 95, 95, 95, 95, 95, 95, 95, 0, 0, - 0, 95, 95, 95, 95, 95, 95, 95, 99, 99, - 99, 99, 0, 0, 99, 0, 99, 99, 99, 99, - 99, 99, 99, 99, 0, 0, 0, 0, 0, 0, - 0, 0, 99, 99, 0, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 0, 0, 0, 0, 0, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 0, 0, 0, 0, 0, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 0, 0, 99, 99, - 99, 99, 97, 0, 99, 99, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 0, 0, 0, 99, 99, - 99, 99, 99, 99, 99, 97, 0, 0, 0, 0, - 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, + 88, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 97, 0, 0, 97, 0, + 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 87, 87, 87, 87, 0, + 0, 87, 0, 87, 87, 87, 87, 0, 0, 0, + 0, 0, 0, 0, 0, 87, 87, 0, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 0, 0, 0, 0, 0, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 0, 0, 0, + 0, 0, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 0, 0, 87, 87, 87, 87, 0, + 0, 87, 87, 0, 0, 0, 0, 6, 0, 0, + 0, 0, 0, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 0, 0, 0, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 88, 88, 88, 88, 0, 6, + 88, 0, 88, 88, 88, 88, 0, 0, 0, 0, + 0, 0, 0, 0, 88, 88, 0, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 0, + 0, 0, 0, 0, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 0, 0, 0, 0, + 0, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 0, 0, 88, 88, 88, 88, 0, 0, + 88, 88, 89, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 0, 0, 0, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 0, 0, 89, 0, 0, 0, 0, + 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6, 6, 0, 6, 6, 0, 0, + 0, 89, 0, 0, 0, 6, 6, 6, 6, 6, + 6, 6, 6, 0, 0, 6, 0, 0, 6, 6, + 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 89, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, - 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 90, 0, 0, 0, 0, 0, 89, 0, 0, + 0, 6, 0, 0, 0, 0, 0, 6, 6, 0, + 0, 6, 0, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, + 6, 90, 6, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, + 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 87, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, + 0, 0, 0, 0, 90, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 89, + 89, 89, 89, 0, 0, 89, 0, 89, 89, 89, + 89, 0, 0, 0, 0, 0, 0, 0, 0, 89, + 89, 0, 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 0, 0, 0, 0, 0, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, + 89, 0, 0, 0, 0, 0, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 0, 0, 89, + 89, 89, 89, 0, 0, 89, 89, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 0, 0, 0, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, + 90, 90, 0, 0, 90, 0, 90, 90, 90, 90, + 0, 0, 0, 0, 0, 0, 0, 0, 90, 90, + 0, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 0, 0, 0, 0, 0, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 0, 0, 0, 0, 0, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 0, 0, 90, 90, + 90, 90, 0, 0, 90, 90, 93, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 0, 0, 0, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 0, 0, 93, + 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 87, 0, 0, 87, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, - 97, 97, 97, 0, 0, 97, 0, 97, 97, 97, - 97, 97, 97, 97, 97, 0, 0, 0, 0, 0, - 0, 0, 0, 97, 97, 0, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 0, 0, 0, 0, 0, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 0, 0, 0, 0, 0, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 0, 0, 97, - 97, 97, 97, 0, 0, 97, 97, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 0, 0, 0, 97, - 97, 97, 97, 97, 97, 97, 87, 87, 87, 87, - 0, 0, 87, 0, 87, 87, 87, 87, 87, 87, - 87, 87, 0, 0, 0, 0, 0, 0, 0, 0, - 87, 87, 0, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 87, 0, 0, 0, 0, 0, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 0, 0, - 0, 0, 0, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 0, 0, 87, 87, 87, 87, - 88, 0, 87, 87, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 0, 0, 0, 87, 87, 87, 87, - 87, 87, 87, 88, 0, 0, 0, 0, 0, 0, - 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, + 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, + 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, + 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 88, 0, 0, 88, 0, 0, 0, + 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 89, 0, 0, - 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, + 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 89, 0, 0, 0, + 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 93, 93, 93, 93, 0, 0, 93, + 0, 93, 93, 93, 93, 0, 0, 0, 0, 0, + 0, 0, 0, 93, 93, 0, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 0, 0, + 0, 0, 0, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 0, 0, 0, 0, 0, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 0, 0, 93, 93, 93, 93, 0, 0, 93, + 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 0, 0, 0, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 95, 95, 95, 95, 0, 0, 95, 0, + 95, 95, 95, 95, 0, 0, 0, 0, 0, 0, + 0, 0, 95, 95, 0, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 0, 0, 0, + 0, 0, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 0, 0, 0, 0, 0, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 0, 0, 95, 95, 95, 95, 0, 0, 95, 95, + 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 0, + 0, 0, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 0, 0, 97, 0, 0, 0, 0, 0, 0, + 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 89, 0, 0, 89, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 97, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, + 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 89, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, - 88, 0, 0, 88, 0, 88, 88, 88, 88, 88, - 88, 88, 88, 0, 0, 0, 0, 0, 0, 0, - 0, 88, 88, 0, 88, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, - 88, 88, 0, 0, 0, 0, 0, 88, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 88, 88, 0, - 0, 0, 0, 0, 88, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 88, 0, 0, 88, 88, 88, - 88, 0, 0, 88, 88, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 0, 0, 0, 88, 88, 88, - 88, 88, 88, 88, 89, 89, 89, 89, 0, 0, - 89, 0, 89, 89, 89, 89, 89, 89, 89, 89, - 0, 0, 0, 0, 0, 0, 0, 0, 89, 89, - 0, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 0, - 0, 0, 0, 0, 89, 89, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 0, 0, 0, 0, - 0, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 89, 0, 0, 89, 89, 89, 89, 90, 0, - 89, 89, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 89, 89, 89, 89, 89, 89, 89, 89, - 89, 0, 0, 0, 89, 89, 89, 89, 89, 89, - 89, 90, 0, 0, 0, 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, + 0, 0, 99, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 90, 0, 0, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, - 0, 0, 0, 90, 0, 0, 0, 0, 0, 0, + 0, 0, 99, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, - 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, + 97, 0, 0, 97, 0, 97, 97, 97, 97, 0, + 0, 0, 0, 0, 0, 0, 0, 97, 97, 0, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 0, 0, 0, 0, 0, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, + 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 0, 0, 97, 97, 97, + 97, 0, 0, 97, 97, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 0, 0, 0, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 99, 99, 99, 99, + 0, 0, 99, 0, 99, 99, 99, 99, 0, 0, + 0, 0, 0, 0, 0, 0, 99, 99, 0, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 0, 0, 0, 0, 0, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 0, 0, + 0, 0, 0, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 0, 0, 99, 99, 99, 99, + 0, 0, 99, 99, 100, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 0, 0, 0, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 0, 0, 100, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 100, 0, - 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 90, 90, 90, 90, 0, - 0, 90, 0, 90, 90, 90, 90, 90, 90, 90, - 90, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 90, 0, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 0, 0, 0, 0, 0, 90, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 0, 0, 0, - 0, 0, 90, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 90, 0, 0, 90, 90, 90, 90, 0, - 0, 90, 90, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 90, 90, 90, 90, 90, 90, 90, - 90, 90, 0, 0, 0, 90, 90, 90, 90, 90, - 90, 90, 100, 100, 100, 100, 0, 0, 100, 0, - 100, 100, 100, 100, 100, 100, 100, 100, 0, 0, - 0, 0, 0, 0, 0, 0, 100, 100, 0, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 0, 0, 0, - 0, 0, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 0, 0, 0, 0, 0, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 0, 0, 100, 100, 100, 100, 101, 0, 100, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 0, - 0, 0, 100, 100, 100, 100, 100, 100, 100, 101, - 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, + 0, 0, 0, 101, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, + 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, - 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, - 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 102, 0, 0, 102, + 0, 0, 0, 0, 0, 0, 101, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 102, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 101, 101, 101, 101, 0, 0, 101, - 0, 101, 101, 101, 101, 101, 101, 101, 101, 0, - 0, 0, 0, 0, 0, 0, 0, 101, 101, 0, + 0, 100, 100, 100, 100, 0, 0, 100, 0, 100, + 100, 100, 100, 0, 0, 0, 0, 0, 0, 0, + 0, 100, 100, 0, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 100, 100, 100, 0, 0, 0, 0, + 0, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 100, 100, 100, 0, 0, 0, 0, 0, 100, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 100, 0, + 0, 100, 100, 100, 100, 0, 0, 100, 100, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, + 100, 100, 100, 100, 100, 100, 100, 100, 0, 0, + 0, 100, 100, 100, 100, 100, 100, 100, 100, 100, + 101, 101, 101, 101, 0, 0, 101, 0, 101, 101, + 101, 101, 0, 0, 0, 0, 0, 0, 0, 0, + 101, 101, 0, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 101, 101, 101, 101, 101, 101, 101, 101, 0, 0, - 0, 0, 0, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 0, 0, 0, 0, 0, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 101, 0, 0, 101, 101, 101, 101, 0, 0, 101, - 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 101, 101, 101, 101, 101, 101, 101, 101, 101, - 0, 0, 0, 101, 101, 101, 101, 101, 101, 101, - 102, 102, 102, 102, 0, 0, 102, 0, 102, 102, - 102, 102, 102, 102, 102, 102, 0, 0, 0, 0, - 0, 0, 0, 0, 102, 102, 0, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 0, 0, 0, 0, 0, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 0, 0, 0, 0, 0, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 0, 0, - 102, 102, 102, 102, 104, 0, 102, 102, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 0, 0, 0, - 102, 102, 102, 102, 102, 102, 102, 104, 0, 0, - 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, + 101, 101, 0, 0, 0, 0, 0, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 0, 0, + 101, 101, 101, 101, 0, 0, 101, 101, 102, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 0, 0, 0, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 0, + 0, 102, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, - 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 109, 0, 0, 0, 0, 0, 0, 0, 104, + 0, 102, 0, 0, 102, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, + 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, - 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, + 104, 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 109, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 104, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 104, 104, 104, 104, 0, 0, 104, 0, 104, - 104, 104, 104, 104, 104, 104, 104, 0, 0, 0, - 0, 0, 0, 0, 0, 104, 104, 0, 104, 104, + 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 102, 102, 102, 102, 0, + 0, 102, 0, 102, 102, 102, 102, 0, 0, 0, + 0, 0, 0, 0, 0, 102, 102, 0, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, + 0, 0, 0, 0, 0, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 102, 102, 102, 0, 0, 0, + 0, 0, 102, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 102, 0, 0, 102, 102, 102, 102, 0, + 0, 102, 102, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 102, 102, 102, 102, 102, 102, 102, + 102, 102, 0, 0, 0, 102, 102, 102, 102, 102, + 102, 102, 102, 102, 104, 104, 104, 104, 0, 0, + 104, 0, 104, 104, 104, 104, 0, 0, 0, 0, + 0, 0, 0, 0, 104, 104, 0, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 0, + 0, 0, 0, 0, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 0, 0, 0, 0, 0, 104, 104, 104, 104, 104, 104, 104, 104, 104, - 104, 104, 104, 0, 0, 0, 0, 0, 104, 104, - 104, 104, 104, 104, 104, 104, 104, 104, 104, 0, - 0, 104, 104, 104, 104, 0, 0, 104, 104, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, - 104, 104, 104, 104, 104, 104, 104, 104, 0, 0, - 0, 104, 104, 104, 104, 104, 104, 104, 109, 109, - 109, 109, 0, 0, 109, 0, 109, 109, 109, 109, - 109, 109, 109, 109, 0, 0, 0, 0, 0, 0, - 0, 0, 109, 109, 0, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 0, 0, 0, 0, 0, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 0, 0, 0, 0, 0, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 0, 0, 109, 109, - 109, 109, 111, 0, 109, 109, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 0, 0, 0, 109, 109, - 109, 109, 109, 109, 109, 111, 0, 0, 0, 0, - 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, + 104, 104, 0, 0, 104, 104, 104, 104, 0, 0, + 104, 104, 109, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 0, 0, 0, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 0, 0, 109, 0, 0, 0, 0, + 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 111, 0, 0, 111, 0, + 0, 0, 0, 0, 0, 109, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, - 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 111, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 118, 0, 0, 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 118, 0, + 0, 0, 0, 0, 111, 0, 0, 0, 0, 0, + 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 118, 0, 0, 118, 0, 0, 0, 0, + 0, 0, 0, 0, 111, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 118, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, - 111, 111, 111, 0, 0, 111, 0, 111, 111, 111, - 111, 111, 111, 111, 111, 0, 0, 0, 0, 0, - 0, 0, 0, 111, 111, 0, 111, 111, 111, 111, + 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, + 109, 109, 109, 0, 0, 109, 0, 109, 109, 109, + 109, 0, 0, 0, 0, 0, 0, 0, 0, 109, + 109, 0, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 109, 109, 0, 0, 0, 0, 0, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 0, 0, 0, 0, 0, 109, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 0, 0, 109, + 109, 109, 109, 0, 0, 109, 109, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 0, 0, 0, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 111, 111, + 111, 111, 0, 0, 111, 0, 111, 111, 111, 111, + 0, 0, 0, 0, 0, 0, 0, 0, 111, 111, + 0, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, - 111, 111, 111, 111, 0, 0, 0, 0, 0, 111, + 111, 111, 111, 0, 0, 0, 0, 0, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, - 111, 0, 0, 0, 0, 0, 111, 111, 111, 111, - 111, 111, 111, 111, 111, 111, 111, 0, 0, 111, - 111, 111, 111, 0, 0, 111, 111, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 111, 111, 111, - 111, 111, 111, 111, 111, 111, 0, 0, 0, 111, - 111, 111, 111, 111, 111, 111, 118, 118, 118, 118, - 0, 0, 118, 0, 118, 118, 118, 118, 118, 118, - 118, 118, 0, 0, 0, 0, 0, 0, 0, 0, - 118, 118, 0, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 0, 0, 0, 0, 0, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 0, 0, - 0, 0, 0, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 0, 0, 118, 118, 118, 118, - 131, 0, 118, 118, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 0, 0, 0, 118, 118, 118, 118, - 118, 118, 118, 131, 0, 0, 0, 0, 0, 0, - 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 131, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 131, 0, 0, 131, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, - 0, 0, 0, 0, 0, 131, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 113, 0, 0, 0, 0, 0, 0, 113, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 113, 0, 0, 113, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 131, 131, 131, - 131, 0, 0, 131, 0, 131, 131, 131, 131, 131, - 131, 131, 131, 0, 0, 0, 0, 0, 0, 0, - 0, 131, 131, 0, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 0, 0, 0, 0, 0, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 0, - 0, 0, 0, 0, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 0, 0, 131, 131, 131, - 131, 0, 0, 131, 131, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 0, 0, 0, 131, 131, 131, - 131, 131, 131, 131, 113, 113, 113, 113, 0, 0, - 113, 0, 113, 113, 113, 113, 113, 113, 113, 113, - 0, 0, 0, 0, 0, 0, 0, 0, 113, 113, - 0, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 0, - 0, 0, 0, 0, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 0, 0, 0, 0, - 0, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 0, 0, 113, 113, 113, 113, 179, 0, - 113, 113, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 0, 0, 0, 113, 113, 113, 113, 113, 113, - 113, 179, 0, 0, 0, 0, 0, 0, 179, 0, - 0, 0, 179, 179, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 179, 0, 0, + 0, 0, 0, 0, 0, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 0, 0, 111, 111, + 111, 111, 0, 0, 111, 111, 120, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 0, 0, 0, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 0, 0, 120, + 0, 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 179, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 120, + 0, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 154, 0, 0, 0, 0, - 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, + 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, - 0, 0, 0, 0, 0, 154, 154, 0, 154, 154, - 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 154, 0, 0, 154, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, + 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 154, 0, - 0, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 133, 0, + 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 179, 179, 179, 0, - 0, 0, 0, 179, 179, 179, 0, 179, 179, 179, - 179, 0, 0, 0, 0, 0, 0, 0, 0, 179, - 179, 0, 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, - 0, 0, 0, 0, 0, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 0, 0, 0, - 0, 0, 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 0, 0, 179, 179, 179, 179, 0, - 0, 179, 179, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 0, 0, 0, 179, 179, 179, 179, 179, - 179, 179, 154, 154, 154, 154, 0, 0, 154, 0, - 154, 154, 154, 154, 154, 154, 154, 154, 0, 0, - 0, 0, 0, 0, 0, 0, 154, 154, 0, 154, - 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, - 154, 154, 154, 154, 154, 154, 154, 159, 0, 0, - 0, 154, 154, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 154, 154, 154, 154, 154, 154, - 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, - 159, 0, 0, 0, 0, 0, 0, 159, 154, 154, - 159, 0, 159, 159, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, - 0, 0, 154, 154, 154, 154, 154, 154, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 120, 120, 120, 120, 0, 0, 120, + 0, 120, 120, 120, 120, 0, 0, 0, 0, 0, + 0, 0, 0, 120, 120, 0, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 120, 120, 120, 0, 0, + 0, 0, 0, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 120, 120, 120, 0, 0, 0, 0, 0, + 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 120, 0, 0, 120, 120, 120, 120, 0, 0, 120, + 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 120, 120, 120, 120, 120, 120, 120, 120, 120, + 0, 0, 0, 120, 120, 120, 120, 120, 120, 120, + 120, 120, 133, 133, 133, 133, 0, 0, 133, 0, + 133, 133, 133, 133, 0, 0, 0, 0, 0, 0, + 0, 0, 133, 133, 0, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 0, 0, 0, + 0, 0, 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 0, 0, 0, 0, 0, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, + 0, 0, 133, 133, 133, 133, 0, 0, 133, 133, + 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 0, + 0, 0, 133, 133, 133, 133, 133, 133, 133, 133, + 133, 0, 0, 113, 0, 0, 0, 0, 0, 0, + 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 159, 180, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 159, 0, 180, 0, 0, 0, 0, 0, - 0, 180, 180, 0, 0, 180, 180, 0, 0, 0, + 0, 0, 0, 113, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 180, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, + 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 247, 0, 0, 0, 180, 0, 0, 180, 0, 0, + 0, 0, 114, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 247, 0, 0, 180, 0, 0, 0, - 247, 247, 0, 0, 247, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, - 247, 0, 247, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 159, 159, 159, 159, 0, 0, - 159, 0, 159, 159, 159, 159, 159, 159, 159, 159, - 0, 0, 0, 247, 0, 0, 247, 0, 159, 159, - 0, 159, 159, 159, 159, 159, 159, 159, 159, 159, - 159, 159, 159, 159, 159, 159, 159, 159, 159, 0, - 0, 0, 0, 43, 159, 247, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 159, 159, 159, 159, - 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, - 159, 159, 0, 0, 0, 0, 43, 0, 0, 0, - 159, 159, 0, 43, 0, 0, 0, 0, 180, 180, - 180, 180, 0, 0, 180, 0, 180, 180, 180, 180, - 180, 180, 43, 0, 159, 159, 159, 159, 159, 159, - 159, 0, 180, 180, 0, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, - 180, 180, 180, 0, 0, 0, 43, 0, 180, 43, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 180, 180, 180, 180, 180, - 180, 180, 180, 180, 180, 180, 0, 0, 43, 0, - 0, 0, 0, 0, 180, 180, 0, 247, 247, 247, - 247, 0, 0, 247, 0, 0, 0, 0, 247, 0, - 0, 247, 247, 0, 0, 0, 98, 0, 180, 180, - 180, 180, 180, 180, 180, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 247, 247, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 0, - 0, 0, 0, 0, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 247, 98, 0, 247, 247, 247, - 247, 0, 0, 0, 0, 0, 0, 0, 0, 247, - 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, - 247, 247, 247, 247, 0, 0, 0, 0, 0, 98, - 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, - 43, 43, 43, 43, 0, 0, 43, 0, 0, 0, - 0, 43, 0, 0, 43, 43, 0, 0, 0, 0, - 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 0, 0, 0, 0, 0, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, 45, 0, - 43, 43, 43, 43, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 0, 0, 0, - 0, 45, 0, 0, 0, 0, 43, 0, 45, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, - 0, 98, 98, 98, 0, 98, 98, 98, 98, 0, - 0, 45, 0, 0, 45, 0, 0, 98, 98, 0, - 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, - 98, 98, 98, 98, 98, 98, 98, 98, 201, 96, - 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, - 98, 0, 0, 0, 0, 0, 255, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, - 0, 0, 0, 98, 98, 98, 98, 98, 98, 98, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 255, 0, 0, 0, 255, 255, 255, - 255, 255, 96, 255, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 255, 255, 0, 255, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 92, 0, 0, 0, 96, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 45, 45, 45, 45, 255, - 0, 45, 0, 0, 0, 0, 45, 0, 0, 45, - 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 255, 0, 0, 0, 0, 0, 0, 0, 92, - 0, 0, 0, 0, 94, 45, 45, 45, 45, 45, - 45, 45, 45, 45, 45, 45, 45, 0, 0, 0, - 0, 0, 45, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 45, 92, 0, 45, 45, 45, 45, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 45, 45, 45, 45, 45, 45, 45, - 45, 45, 0, 94, 0, 92, 0, 0, 108, 0, - 0, 45, 0, 0, 0, 0, 0, 0, 0, 96, - 0, 0, 0, 0, 96, 96, 96, 0, 96, 96, - 96, 96, 0, 0, 0, 0, 0, 94, 0, 0, - 96, 96, 0, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, - 96, 202, 0, 0, 0, 0, 0, 108, 0, 94, - 255, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 114, 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, - 0, 108, 96, 96, 0, 0, 0, 0, 255, 0, - 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 96, 96, 96, - 96, 96, 96, 108, 110, 0, 0, 0, 0, 0, - 92, 0, 0, 0, 0, 92, 92, 92, 0, 92, - 92, 92, 92, 0, 0, 255, 255, 255, 255, 255, - 255, 92, 92, 0, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 110, 0, 0, 0, 0, 117, 0, - 0, 0, 0, 0, 94, 0, 0, 0, 0, 94, - 94, 94, 0, 94, 94, 94, 94, 0, 0, 0, - 0, 0, 0, 92, 92, 94, 94, 110, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 0, 92, 92, 92, - 92, 92, 92, 92, 0, 0, 0, 117, 0, 110, - 0, 0, 112, 0, 0, 0, 0, 0, 108, 0, - 0, 0, 0, 108, 108, 108, 0, 108, 108, 108, - 108, 0, 0, 0, 0, 0, 0, 94, 94, 108, - 108, 117, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 0, 94, 94, 94, 94, 94, 94, 94, 0, 0, - 0, 112, 0, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 114, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 113, 113, 113, + 113, 0, 0, 113, 0, 113, 113, 113, 113, 0, + 0, 0, 0, 0, 0, 0, 0, 113, 113, 0, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 0, 0, 0, 0, 0, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 0, + 0, 0, 0, 0, 113, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 113, 0, 0, 113, 113, 113, + 113, 0, 0, 113, 113, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 113, 113, 113, 113, 113, + 113, 113, 113, 113, 0, 0, 0, 113, 113, 113, + 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, + 0, 0, 114, 0, 114, 114, 114, 114, 0, 0, + 0, 0, 0, 0, 0, 0, 114, 114, 0, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, + 114, 0, 0, 0, 0, 0, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 114, 114, 114, 0, 0, + 0, 0, 0, 114, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 114, 0, 0, 114, 114, 114, 114, + 0, 0, 114, 114, 115, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 114, 114, 114, 114, 114, 114, + 114, 114, 114, 0, 0, 0, 114, 114, 114, 114, + 114, 114, 114, 114, 114, 0, 0, 115, 0, 0, + 0, 0, 0, 0, 115, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 115, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 115, 0, 0, + 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 181, 0, 0, 0, 0, 0, 0, 115, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, + 0, 0, 181, 0, 0, 0, 181, 181, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 181, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 181, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 115, 115, 115, 115, 0, 0, 115, 0, 115, + 115, 115, 115, 0, 0, 0, 0, 0, 0, 0, + 0, 115, 115, 0, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 0, 0, 0, 0, + 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 0, 0, 0, 0, 0, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 0, + 0, 115, 115, 115, 115, 0, 0, 115, 115, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 0, 0, + 0, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 181, 181, 181, 0, 0, 0, 0, 181, 181, 181, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, + 181, 0, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 181, 181, 181, 0, 0, 0, 0, 0, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, + 181, 0, 0, 0, 0, 0, 181, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 181, 0, 0, 181, + 181, 181, 181, 0, 0, 181, 181, 156, 0, 0, + 0, 0, 0, 0, 0, 199, 0, 181, 181, 181, + 181, 181, 181, 181, 181, 181, 0, 0, 0, 181, + 181, 181, 181, 181, 181, 181, 181, 181, 0, 0, + 156, 0, 0, 0, 0, 0, 0, 156, 156, 0, + 156, 156, 156, 0, 0, 0, 0, 0, 0, 0, + 272, 273, 274, 284, 0, 0, 156, 0, 0, 156, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 156, 0, 0, 156, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, + 0, 0, 156, 0, 0, 340, 0, 0, 0, 0, + 0, 0, 0, 348, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, + 0, 0, 0, 0, 0, 0, 161, 0, 0, 161, + 0, 161, 161, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, + 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 395, 396, 0, 0, 0, + 397, 161, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 156, 156, 156, 0, 0, + 156, 0, 156, 156, 156, 156, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 156, 0, 156, 156, 156, + 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, + 156, 156, 156, 156, 156, 156, 156, 156, 156, 0, + 0, 0, 0, 156, 156, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 425, 426, 156, 156, 156, 156, + 156, 156, 156, 156, 156, 156, 156, 156, 156, 156, + 156, 156, 438, 439, 0, 0, 0, 0, 0, 0, + 156, 156, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 156, 156, 156, 156, 156, + 156, 156, 156, 161, 161, 161, 161, 0, 0, 161, + 0, 161, 161, 161, 161, 0, 0, 0, 0, 0, + 0, 0, 0, 161, 161, 0, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 0, 0, + 0, 182, 0, 161, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 0, 0, 0, 182, 0, 0, 0, 0, 161, + 161, 182, 182, 0, 0, 182, 182, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 182, 0, 0, 161, 161, 161, 161, 161, 161, 161, + 161, 161, 0, 0, 0, 0, 0, 0, 0, 249, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 182, 0, 0, 182, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 0, 0, 0, 0, 249, + 249, 0, 0, 249, 0, 0, 182, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 249, 249, + 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 108, 108, 0, 0, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 108, 108, 108, 108, 108, - 108, 108, 0, 0, 0, 0, 0, 112, 0, 0, - 0, 0, 0, 0, 110, 0, 0, 0, 0, 110, - 110, 110, 0, 110, 110, 110, 110, 0, 0, 0, - 0, 0, 0, 0, 0, 110, 110, 0, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 117, 0, - 0, 0, 0, 117, 117, 117, 0, 117, 117, 117, - 117, 0, 0, 0, 0, 0, 0, 110, 110, 117, - 117, 0, 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, - 0, 110, 110, 110, 110, 110, 110, 110, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 112, 0, 0, 0, 0, 112, 112, 112, - 0, 112, 112, 112, 112, 0, 0, 0, 0, 0, - 0, 117, 117, 112, 112, 83, 112, 112, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 112, 112, 0, 117, 117, 117, 117, 117, - 117, 117, 0, 0, 0, 0, 0, 0, 83, 0, - 0, 0, 0, 0, 0, 83, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 112, 112, 0, 0, 0, - 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 112, - 112, 112, 112, 112, 112, 112, 0, 0, 83, 0, - 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, - 159, 159, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, + 0, 0, 0, 0, 0, 0, 43, 0, 182, 182, + 182, 182, 0, 0, 182, 0, 182, 182, 182, 182, + 0, 0, 0, 0, 0, 43, 0, 0, 182, 182, + 0, 182, 182, 182, 182, 0, 0, 182, 182, 182, + 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, + 182, 182, 182, 0, 0, 0, 0, 0, 182, 43, + 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 182, 182, 182, 182, 182, + 182, 182, 182, 182, 182, 182, 249, 249, 249, 249, + 0, 43, 249, 0, 182, 182, 0, 249, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 0, 0, 249, 249, 0, 0, 0, 182, 182, + 182, 182, 182, 182, 182, 182, 182, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 249, 249, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 0, 0, + 0, 0, 0, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 249, 96, 0, 249, 249, 249, 249, + 0, 0, 0, 0, 0, 0, 45, 0, 249, 249, + 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, + 249, 249, 249, 0, 0, 0, 0, 0, 96, 0, + 0, 0, 0, 0, 249, 0, 0, 0, 0, 45, + 0, 0, 0, 0, 0, 0, 45, 0, 0, 0, + 0, 0, 0, 43, 43, 43, 43, 0, 0, 43, + 96, 0, 0, 0, 43, 45, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, + 0, 0, 45, 43, 43, 43, 43, 43, 43, 43, + 43, 43, 43, 43, 43, 0, 0, 98, 0, 0, + 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, + 43, 45, 0, 43, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 43, 43, 43, 43, 43, 43, 43, 43, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 43, 0, 0, 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 95, 0, 0, 0, 0, 0, 0, 92, 0, 0, - 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, + 96, 96, 96, 0, 0, 0, 0, 0, 0, 0, + 98, 0, 96, 96, 0, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 204, 0, 0, + 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 45, 45, 45, 45, 92, 0, 45, + 0, 0, 0, 0, 45, 0, 0, 0, 96, 96, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 0, 0, 45, 45, 45, 45, 45, 45, 45, + 45, 45, 45, 45, 45, 0, 92, 0, 0, 0, + 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 45, 0, 0, 45, 45, 45, 45, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 92, 45, 45, 45, 45, 45, 45, 45, 45, 45, + 0, 0, 0, 0, 0, 0, 0, 98, 0, 0, + 0, 45, 98, 98, 98, 94, 0, 0, 0, 0, + 0, 0, 92, 0, 98, 98, 0, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 83, 83, 83, 0, 0, 0, 83, 0, - 83, 83, 83, 83, 83, 83, 83, 83, 32, 0, - 0, 0, 0, 93, 0, 0, 83, 83, 0, 83, - 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 83, 83, 83, 0, 0, 0, - 33, 0, 83, 83, 83, 83, 83, 83, 83, 83, - 83, 83, 83, 83, 0, 0, 0, 0, 0, 83, - 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, - 0, 0, 83, 83, 83, 83, 159, 159, 83, 83, + 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 83, 83, 83, 83, 83, 83, 83, 83, 83, 0, - 0, 0, 83, 83, 83, 83, 83, 83, 0, 0, - 0, 0, 0, 159, 159, 159, 159, 159, 159, 159, - 159, 159, 159, 159, 159, 159, 159, 159, 159, 0, + 98, 98, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 94, 0, + 0, 0, 0, 0, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 159, 159, 159, 159, 6, 0, 0, 0, - 0, 0, 0, 6, 0, 0, 0, 0, 6, 0, - 159, 159, 159, 159, 159, 159, 159, 159, 159, 0, - 0, 0, 0, 0, 295, 296, 51, 8, 9, 0, - 52, 0, 0, 0, 0, 53, 10, 11, 297, 298, - 14, 15, 16, 17, 18, 19, 20, 21, 0, 0, - 22, 0, 0, 0, 6, 0, 0, 0, 0, 6, + 94, 0, 0, 0, 0, 0, 0, 0, 0, 108, + 0, 0, 0, 0, 0, 0, 0, 92, 0, 0, + 0, 0, 92, 92, 92, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 92, 92, 0, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 56, 57, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 6, 0, 0, 0, - 0, 68, 69, 70, 71, 72, 73, 74, 75, 76, - 77, 78, 23, 0, 79, 80, 81, 82, 24, 25, - 0, 0, 26, 0, 27, 0, 0, 0, 0, 0, - 0, 0, 83, 84, 85, 86, 87, 88, 89, 90, - 91, 28, 95, 29, 0, 0, 0, 0, 0, 110, - 30, 31, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 92, 92, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 110, 108, 94, 0, 0, 0, 0, + 94, 94, 94, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 94, 94, 0, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, + 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 94, 94, + 0, 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 6, 6, 6, 6, 0, 6, 0, 0, 0, - 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 0, 0, 6, 0, 0, 111, - 0, 0, 0, 0, 0, 0, 110, 315, 0, 0, - 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 0, 0, 0, 0, 0, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, - 6, 6, 6, 6, 6, 6, 0, 0, 6, 0, - 6, 0, 93, 0, 0, 0, 0, 0, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, - 0, 0, 0, 0, 0, 0, 6, 6, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 49, 50, 51, 8, - 0, 0, 52, 0, 126, 127, 128, 53, 129, 130, - 131, 132, 0, 0, 0, 0, 0, 0, 0, 0, - 133, 134, 0, 135, 136, 137, 138, 139, 140, 141, - 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, - 152, 0, 0, 0, 0, 0, 56, 57, 58, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 0, 0, - 0, 0, 0, 68, 69, 70, 71, 72, 73, 74, - 75, 76, 77, 78, 111, 0, 79, 80, 81, 82, - 0, 92, 153, 154, 0, 0, 94, 276, 0, 0, - 0, 0, 0, 0, 83, 84, 85, 86, 87, 88, - 89, 90, 91, 0, 0, 0, 155, 156, 157, 158, - 159, 160, 30, 49, 50, 51, 8, 0, 0, 52, - 0, 0, 0, 0, 53, 0, 0, 54, 55, 0, - 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, + 0, 0, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 0, 0, 0, 0, 0, 0, 0, 110, 0, + 0, 119, 0, 0, 0, 0, 0, 0, 0, 108, + 0, 0, 0, 0, 108, 108, 108, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 108, 108, 0, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 0, 0, 0, 0, 0, - 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, - 78, 95, 0, 79, 80, 81, 82, 0, 92, 0, - 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, - 0, 83, 84, 85, 86, 87, 88, 89, 90, 91, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, + 0, 0, 108, 108, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 112, 119, 0, 0, 0, + 0, 0, 0, 110, 0, 0, 0, 0, 110, 110, + 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 110, 110, 0, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 112, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 110, 110, 112, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 0, + 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 119, 0, 0, 0, 0, 119, 119, 119, 0, + 83, 0, 0, 0, 0, 0, 0, 0, 119, 119, + 0, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, + 119, 119, 119, 83, 0, 0, 0, 0, 0, 0, + 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, + 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, + 0, 0, 0, 0, 119, 119, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 83, 0, 0, 83, 0, 119, 119, + 119, 119, 119, 119, 119, 119, 119, 0, 0, 0, + 161, 0, 161, 161, 0, 112, 0, 0, 0, 0, + 112, 112, 112, 0, 0, 83, 161, 0, 0, 0, + 0, 0, 112, 112, 0, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 112, 112, 112, 112, 112, 112, 0, 0, 0, + 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 161, 0, 0, 0, 0, 0, 112, 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, - 51, 8, 0, 0, 52, 0, 0, 0, 0, 53, - 0, 0, 54, 55, 111, 0, 0, 0, 0, 0, - 0, 110, 0, 0, 0, 0, 94, 0, 0, 0, + 0, 0, 112, 112, 112, 112, 112, 112, 112, 112, + 112, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 0, 0, 0, 0, 0, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 0, 93, 79, 80, - 81, 82, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 30, 49, 50, 51, 8, 0, - 0, 52, 0, 0, 0, 0, 53, 0, 0, 54, - 55, 111, 0, 0, 0, 0, 0, 0, 92, 0, - 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 83, 83, 83, + 0, 0, 0, 83, 0, 83, 83, 83, 83, 0, + 0, 0, 0, 0, 0, 0, 0, 83, 83, 0, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, + 83, 83, 0, 0, 0, 0, 0, 83, 83, 83, + 83, 83, 83, 83, 83, 83, 83, 83, 83, 0, + 0, 0, 0, 0, 83, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 83, 0, 0, 83, 83, 83, + 83, 0, 0, 83, 83, 0, 0, 0, 0, 0, + 0, 161, 161, 0, 257, 83, 83, 83, 83, 83, + 83, 83, 83, 83, 0, 0, 0, 83, 83, 83, + 83, 83, 83, 83, 83, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 257, 0, 0, 0, 257, 257, 257, 257, 257, + 0, 257, 0, 0, 161, 161, 161, 161, 0, 0, + 0, 0, 0, 257, 257, 0, 257, 0, 0, 0, + 0, 0, 161, 161, 161, 161, 161, 161, 161, 161, + 161, 0, 0, 0, 0, 0, 95, 0, 0, 0, + 0, 0, 0, 92, 0, 0, 0, 257, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 0, 0, 0, - 0, 0, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 0, 93, 79, 80, 81, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 30, 0, 0, 0, 0, 0, 0, 49, 50, - 51, 8, 0, 0, 52, 0, 0, 0, 0, 53, - 0, 0, 54, 55, 111, 0, 0, 0, 0, 0, - 0, 283, 0, 0, 0, 0, 94, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 0, 0, 0, 0, 0, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 0, 93, 79, 80, - 81, 82, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 30, 49, 50, 51, 8, 0, - 0, 52, 0, 0, 0, 0, 53, 0, 0, 54, - 55, 95, 0, 0, 0, 0, 0, 0, 277, 0, - 0, 0, 0, 94, 276, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 32, 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 0, 0, 0, - 0, 0, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 0, 93, 79, 80, 81, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 30, 0, 0, 0, 0, 0, 0, 49, 50, - 51, 8, 0, 0, 52, 0, 0, 0, 0, 53, - 0, 0, 54, 55, 95, 0, 0, 0, 0, 0, - 0, 110, 0, 442, 0, 0, 94, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 0, 0, 0, 0, 0, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 0, 93, 79, 80, - 81, 82, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 30, 273, 50, 51, 0, 0, - 0, 274, 0, 0, 0, 0, 275, 0, 0, 54, - 55, 95, 0, 0, 0, 0, 0, 0, 110, 0, - 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 0, 6, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 0, 0, 0, - 0, 0, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 0, 93, 79, 80, 81, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, - 51, 0, 0, 0, 52, 0, 0, 0, 0, 53, - 0, 0, 54, 55, 95, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 0, 0, 0, 0, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, + 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 257, 0, 0, 257, + 299, 300, 51, 8, 9, 0, 52, 0, 0, 0, + 0, 53, 10, 11, 12, 13, 14, 15, 16, 17, + 0, 0, 18, 95, 0, 19, 20, 301, 302, 0, + 110, 0, 0, 0, 0, 94, 0, 0, 0, 0, + 0, 0, 0, 257, 257, 257, 257, 257, 257, 0, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 0, 0, 0, 0, 0, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 23, 0, + 79, 80, 81, 82, 24, 25, 93, 0, 26, 0, + 27, 0, 0, 0, 0, 0, 0, 0, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 28, 0, 29, + 6, 6, 6, 6, 6, 0, 6, 0, 30, 31, + 0, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 0, 0, 6, 0, 0, 6, 6, 6, 6, 0, + 0, 0, 111, 0, 0, 0, 0, 0, 0, 110, + 319, 0, 0, 0, 94, 0, 0, 0, 0, 0, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 0, 0, 0, 0, 0, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, + 6, 6, 6, 6, 6, 6, 0, 0, 6, 0, + 6, 0, 0, 0, 0, 93, 0, 0, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 0, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 6, 6, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 49, 50, 51, + 8, 0, 0, 52, 0, 126, 127, 128, 53, 0, + 0, 0, 0, 0, 0, 0, 0, 129, 130, 0, + 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, + 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, + 151, 152, 0, 0, 0, 0, 0, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 0, + 0, 0, 0, 0, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 111, 0, 79, 80, 81, + 82, 0, 92, 153, 154, 0, 0, 94, 278, 0, + 0, 0, 0, 0, 0, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 0, 0, 0, 155, 156, 157, + 158, 159, 160, 161, 162, 30, 49, 50, 51, 8, + 0, 0, 52, 0, 0, 0, 0, 53, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 93, 0, + 0, 0, 0, 54, 55, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 0, 0, + 0, 0, 0, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 95, 0, 79, 80, 81, 82, 0, 92, 0, 0, 0, 0, 94, 0, 0, 0, + 0, 0, 0, 0, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 93, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 111, 0, + 0, 0, 0, 0, 0, 110, 0, 0, 0, 0, + 94, 0, 0, 0, 0, 0, 0, 0, 0, 49, + 50, 51, 8, 0, 0, 52, 0, 0, 0, 0, + 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 54, 55, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 93, 0, 0, 0, 0, 0, 0, 0, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 0, 0, 0, 0, 0, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 0, 0, 79, + 80, 81, 82, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 30, 49, 50, + 51, 8, 0, 0, 52, 0, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 111, 0, 54, 55, 0, 0, 0, + 92, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 0, 0, 0, 0, 0, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 0, 93, 79, 80, - 81, 82, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 50, 51, 0, 0, - 0, 52, 0, 0, 0, 0, 53, 0, 0, 54, - 55, 95, 0, 0, 0, 0, 0, 0, 283, 0, - 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, + 73, 74, 75, 76, 77, 78, 0, 0, 79, 80, + 81, 82, 49, 50, 51, 8, 93, 0, 52, 0, + 0, 0, 0, 53, 0, 0, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 0, 0, 111, 0, 54, + 55, 0, 0, 0, 285, 0, 30, 0, 0, 94, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 0, 0, 0, 0, 0, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 0, 0, 79, 80, 81, 82, 0, 0, 0, 0, + 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 0, + 0, 95, 0, 0, 0, 0, 0, 0, 279, 0, + 30, 0, 0, 94, 278, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 0, 0, 0, - 0, 0, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 0, 93, 79, 80, 81, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, - 51, 0, 0, 0, 52, 0, 0, 0, 0, 53, - 0, 0, 54, 55, 95, 0, 0, 0, 0, 0, - 0, 110, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, - 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, - 0, 0, 0, 0, 0, 68, 69, 70, 71, 72, - 73, 74, 75, 76, 77, 78, 0, 93, 79, 80, - 81, 82, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 50, 51, 0, 0, - 0, 52, 0, 0, 0, 0, 53, 0, 0, 54, - 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 41, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 49, 50, 51, + 8, 0, 0, 52, 93, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 55, 95, 0, 0, 0, + 0, 0, 0, 110, 0, 446, 0, 0, 94, 0, + 0, 0, 0, 0, 0, 0, 0, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 0, + 0, 0, 0, 0, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 0, 0, 79, 80, 81, + 82, 49, 50, 51, 8, 0, 0, 52, 0, 93, + 0, 0, 53, 0, 0, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 0, 0, 0, 0, 54, 55, + 95, 0, 0, 0, 0, 30, 0, 110, 0, 0, + 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, + 0, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 0, 0, 0, 0, 0, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 0, + 0, 79, 80, 81, 82, 275, 50, 51, 0, 0, + 0, 276, 0, 93, 0, 0, 277, 0, 0, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 0, 0, + 0, 0, 54, 55, 95, 0, 0, 0, 0, 30, + 0, 92, 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, 58, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 0, 0, 32, + 61, 62, 63, 64, 65, 66, 67, 0, 0, 0, 0, 0, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 0, 0, 79, 80, 81, 82, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 33, 0, 83, 84, 85, 86, 87, 88, 89, - 90, 91, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 49, 50, - 51, 0, 0, 0, 52, 0, 0, 0, 0, 53, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 49, 50, 51, 0, 0, 0, 52, 93, 0, 0, + 0, 53, 0, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 0, 0, 0, 0, 0, 54, 55, 95, + 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, + 0, 94, 0, 0, 0, 0, 0, 0, 0, 0, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 0, 0, 0, 0, 0, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, 0, 0, + 79, 80, 81, 82, 49, 50, 51, 0, 0, 0, + 52, 0, 93, 0, 0, 53, 0, 0, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 0, 0, 0, + 0, 54, 55, 95, 0, 0, 0, 0, 0, 0, + 110, 0, 0, 0, 0, 94, 0, 0, 0, 0, + 0, 0, 0, 0, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 0, 0, 0, 0, + 0, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 0, 0, 79, 80, 81, 82, 49, 50, + 51, 0, 0, 0, 52, 0, 93, 0, 0, 53, + 0, 0, 83, 84, 85, 86, 87, 88, 89, 90, + 91, 0, 0, 0, 0, 54, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 0, 0, 0, 0, 0, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 0, 0, 79, 80, - 81, 82, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 6, 7, 0, 8, 9, - 0, 0, 0, 0, 0, 0, 0, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 0, - 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 81, 82, 0, 49, 50, 51, 0, 0, 0, 52, + 0, 0, 0, 0, 53, 0, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 0, 0, 0, 0, 0, + 54, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 0, 0, 0, 0, 0, + 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + 78, 0, 0, 79, 80, 81, 82, 49, 50, 51, + 0, 0, 0, 52, 0, 0, 0, 0, 53, 0, + 0, 83, 84, 85, 86, 87, 88, 89, 90, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 23, 0, 0, 0, 0, 0, 24, - 25, 0, 0, 26, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 28, 0, 29, 0, 0, 0, 0, 0, - 0, 30, 31, + 0, 0, 0, 0, 0, 0, 0, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 0, + 0, 0, 0, 0, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 0, 0, 79, 80, 81, + 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 83, 84, 85, 86, 87, + 88, 89, 90, 91, }; -short yycheck[] = { 25, - 59, 44, 37, 29, 0, 31, 111, 42, 43, 44, - 45, 37, 47, 92, 37, 59, 125, 260, 100, 42, - 43, 0, 45, 0, 47, 60, 43, 62, 45, 41, - 0, 260, 0, 0, 273, 37, 58, 60, 277, 62, - 42, 43, 37, 45, 96, 47, 260, 42, 43, 43, - 45, 45, 47, 4, 268, 58, 165, 36, 61, 94, - 105, 41, 141, 42, 44, 60, 92, 62, 94, 95, - 107, 94, 41, 41, 25, 44, 44, 271, 272, 61, - 31, 107, 59, 120, 258, 111, 37, 96, 43, 59, - 45, 59, 94, 336, 120, 91, 257, 258, 43, 94, - 45, 0, 258, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 93, 62, 144, 145, - 146, 349, 350, 93, 40, 93, 93, 123, 25, 155, - 156, 370, 371, 348, 31, 0, 61, 219, 0, 165, - 336, 246, 247, 262, 373, 250, 251, 40, 125, 228, - 229, 271, 272, 351, 352, 125, 107, 125, 125, 40, - 59, 355, 356, 121, 122, 404, 40, 118, 407, 120, - 61, 41, 40, 43, 125, 45, 40, 203, 204, 205, +static const short yycheck[] = { 25, + 0, 41, 105, 29, 43, 31, 45, 44, 0, 59, + 43, 37, 45, 125, 37, 100, 260, 284, 285, 42, + 43, 260, 45, 37, 47, 257, 258, 107, 42, 43, + 44, 45, 59, 47, 43, 102, 45, 60, 92, 62, + 120, 41, 58, 4, 44, 61, 60, 58, 62, 41, + 284, 285, 44, 62, 260, 167, 43, 25, 45, 59, + 349, 350, 268, 31, 25, 61, 92, 59, 94, 95, + 31, 94, 258, 140, 41, 62, 37, 44, 96, 258, + 94, 107, 0, 41, 40, 111, 44, 141, 355, 356, + 37, 111, 348, 93, 120, 42, 43, 336, 45, 96, + 47, 93, 0, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 351, 352, 144, 145, + 146, 355, 356, 0, 92, 125, 43, 44, 45, 155, + 156, 375, 61, 125, 160, 161, 221, 336, 36, 107, + 43, 167, 45, 37, 42, 37, 107, 94, 42, 43, + 42, 45, 120, 47, 262, 47, 275, 118, 40, 120, + 279, 41, 40, 43, 125, 45, 60, 40, 62, 137, + 138, 139, 140, 276, 277, 93, 230, 231, 40, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 40, 93, 92, 278, 59, 277, 0, - 40, 40, 228, 229, 283, 257, 157, 158, 159, 260, - 107, 263, 40, 40, 165, 258, 268, 243, 40, 291, - 246, 247, 248, 120, 250, 251, 125, 258, 93, 274, - 275, 93, 33, 262, 41, 355, 356, 260, 41, 40, - 137, 138, 139, 140, 45, 324, 325, 43, 257, 45, - 302, 277, 94, 264, 263, 303, 46, 283, 257, 268, - 125, 257, 258, 125, 260, 261, 62, 302, 165, 93, - 305, 125, 93, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 257, 262, 283, 262, 306, - 91, 41, 318, 319, 403, 96, 264, 323, 324, 325, - 302, 252, 253, 305, 41, 44, 257, 319, 320, 321, - 322, 323, 306, 210, 349, 350, 351, 352, 353, 354, - 0, 218, 123, 291, 369, 0, 349, 350, 351, 352, - 353, 354, 41, 41, 302, 41, 41, 305, 43, 335, - 45, 43, 44, 45, 44, 341, 342, 44, 41, 345, - 373, 347, 41, 41, 349, 0, 351, 352, 353, 354, - 304, 0, 349, 43, 262, 45, 41, 44, 364, 44, - 366, 397, 398, 399, 257, 401, 365, 373, 374, 59, - 277, 349, 350, 305, 59, 43, 44, 45, 33, 415, - 416, 41, 37, 41, 260, 40, 41, 42, 43, 44, - 45, 41, 47, 41, 43, 41, 45, 41, 91, 346, - 41, 437, 262, 93, 59, 60, 442, 62, 93, 91, - 59, 318, 319, 0, 37, 41, 323, 27, 260, 42, - 37, 43, 44, 45, 47, 42, 43, 346, 45, 44, - 47, 346, 346, 43, 165, 125, 409, 31, 93, 36, - 125, 96, 403, 60, 93, 62, 257, 258, 259, 260, - 261, 193, 263, 43, 44, 45, -1, 268, 269, 270, - 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, - 125, 94, 283, 43, 44, 45, 125, 94, 319, 320, - 321, 322, 323, 93, 43, 44, 45, 43, 44, 45, - 397, 398, 43, 44, 45, -1, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 415, 416, + 216, 217, 218, 219, 220, 280, 157, 158, 159, 167, + 94, 40, 94, 40, 230, 231, 167, 125, 275, 0, + 121, 122, 279, 40, 40, 282, 93, 40, 40, 245, + 40, 258, 248, 249, 250, 279, 252, 253, 248, 249, + 37, 285, 252, 253, 291, 42, 43, 260, 45, 257, + 47, 260, 33, 61, 212, 263, 27, 262, 125, 40, + 268, 258, 220, 279, 45, 374, 375, 41, 0, 285, + 257, 41, 43, 43, 264, 45, 263, 306, 41, 264, + 373, 268, 264, 306, 328, 329, 43, 44, 45, 319, + 320, 321, 322, 323, 302, 94, 303, 94, 0, 408, + 46, 291, 411, 254, 255, 407, 322, 323, 259, 291, + 91, 327, 328, 329, 257, 96, 93, 374, 375, 125, + 302, 279, 93, 305, 43, 44, 45, 59, 93, 0, + 43, 44, 45, 0, 262, 257, 349, 350, 351, 352, + 353, 354, 123, 41, 262, 349, 350, 351, 352, 353, + 354, 408, 41, 44, 411, 41, 41, 59, 0, 349, + 350, 93, 375, 41, 322, 323, 41, 349, 350, 327, + 44, 37, 44, 41, 0, 0, 42, 43, 44, 45, + 41, 47, 0, 304, 349, 401, 402, 403, 0, 405, + 44, 93, 59, 125, 60, 257, 62, 262, 169, 41, + 41, 365, 44, 419, 420, 176, 177, 178, 179, 180, + 181, 182, 183, 184, 185, 186, 41, 59, 41, 44, + 91, 260, 305, 125, 41, 441, 93, 41, 94, 41, + 446, 41, 44, 59, 59, 43, 44, 45, 41, 41, + 37, 59, 346, 401, 402, 42, 43, 59, 45, 0, + 47, 93, 123, 43, 44, 45, 407, 41, 125, 262, + 260, 419, 420, 60, 44, 62, 346, 93, 93, 353, + 354, 43, 44, 45, 167, 93, 257, 258, 259, 260, + 261, 93, 263, 125, 43, 44, 45, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 346, 94, 279, 125, + 125, 282, 283, 284, 285, 302, 346, 125, 305, 46, + 413, 31, 36, 125, 319, 320, 321, 322, 323, 195, + 46, -1, -1, -1, -1, -1, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, - 341, 342, 37, -1, 345, -1, 347, 42, 43, -1, - 45, -1, 47, -1, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, -1, 366, -1, 167, -1, -1, - 46, -1, 373, 374, 174, 175, 176, 177, 178, 179, - 180, 181, 182, 183, 184, 91, -1, -1, 260, 264, - 273, 274, 275, 276, 277, 278, 268, 280, -1, 94, - -1, 273, 274, 275, 276, 277, 278, -1, 280, -1, - -1, -1, 257, 258, 259, 260, 291, -1, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, -1, -1, - 46, -1, -1, -1, -1, -1, 281, 282, 0, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, -1, -1, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 349, 350, -1, -1, -1, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 0, 0, 337, 338, 339, 340, 0, 59, 343, 344, - 0, 346, -1, -1, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 0, - -1, -1, 367, 368, 369, 370, 371, 372, 373, 33, - -1, 93, -1, 37, -1, -1, 40, 41, 42, 43, - 44, 45, 349, 47, 351, 352, 353, 354, -1, 59, - 59, -1, -1, -1, 260, 59, 60, -1, 62, 59, - -1, -1, -1, 125, -1, -1, -1, 273, 274, 275, - 276, 277, 278, -1, 280, -1, -1, -1, 59, -1, - -1, -1, 382, 93, 93, -1, 386, 387, -1, 93, - -1, -1, 96, 93, -1, 271, 272, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 93, 0, -1, 125, 125, -1, -1, -1, - -1, 125, -1, -1, -1, 125, -1, -1, -1, -1, - -1, -1, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, -1, 125, -1, 33, -1, -1, -1, + 341, 342, -1, -1, 345, -1, 347, -1, -1, -1, + -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 0, 366, 257, 258, -1, 260, + 261, -1, -1, -1, 375, 376, 0, -1, 269, 270, + 271, 272, 273, 274, 275, 276, 0, -1, 279, -1, + -1, 282, 283, 284, 285, 386, -1, 33, -1, 390, + 391, 37, 264, -1, 40, 41, 42, 43, 44, 45, + -1, 47, -1, -1, -1, 0, -1, 41, -1, 264, + 44, -1, 0, 59, 60, -1, 62, -1, -1, 291, + -1, -1, 264, -1, -1, 59, -1, -1, -1, -1, + 302, -1, -1, 305, 335, 59, 291, -1, 0, -1, + 341, 342, -1, 0, 345, -1, 347, 93, -1, 291, + 96, -1, -1, 349, 350, 351, 352, 353, 354, 93, + 287, -1, -1, 364, 59, 366, -1, -1, -1, 93, + -1, 59, -1, 0, 375, 376, -1, -1, 350, 125, + -1, 43, -1, 45, -1, -1, 43, -1, 45, -1, + -1, 125, -1, -1, -1, 350, -1, 59, 93, -1, + -1, 125, 59, -1, -1, 93, 33, -1, 350, -1, 37, -1, -1, 40, 41, 42, 43, 44, 45, -1, - 47, 337, 338, 339, 340, -1, -1, -1, -1, -1, - -1, -1, 59, 60, -1, 62, -1, -1, -1, 355, + 47, -1, 349, 350, 351, 352, 353, 354, 284, 285, + 125, 93, 59, 60, -1, 62, 93, 125, -1, -1, + -1, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 125, -1, -1, 93, -1, 125, 96, + 337, 338, 339, 340, -1, -1, -1, -1, -1, -1, + -1, 337, 338, 339, 340, -1, -1, -1, 355, 356, + 357, 358, 359, 360, 361, 362, 363, -1, 125, 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, - -1, -1, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, -1, -1, -1, 93, -1, -1, 96, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 337, 338, 339, 340, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 125, 355, + -1, 257, 258, 259, 260, -1, -1, 263, 264, 265, + 266, 267, 268, -1, -1, -1, -1, -1, -1, -1, + 264, 277, 278, -1, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 291, -1, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, + 91, 337, 338, 339, 340, 46, -1, 343, 344, -1, + 346, -1, -1, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, - -1, -1, -1, 257, 258, 259, 260, -1, -1, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, -1, - -1, -1, -1, -1, -1, -1, -1, 281, 282, -1, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, 302, -1, - -1, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 46, -1, 337, 338, 339, 340, -1, -1, 343, - 344, -1, 346, -1, -1, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, - -1, -1, -1, 367, 368, 369, 370, 371, 372, 373, + -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, 257, 258, 259, 260, -1, -1, 263, 264, 265, 266, - 267, 268, 269, 270, 271, 272, -1, -1, -1, -1, - -1, -1, -1, -1, 281, 282, -1, 284, 285, 286, + 267, 268, -1, -1, 91, -1, -1, -1, -1, -1, + 277, 278, -1, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, -1, -1, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, + 317, 318, -1, -1, 0, -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, -1, - 337, 338, 339, 340, 0, -1, 343, 344, -1, 346, + 337, 338, 339, 340, -1, -1, 343, 344, 0, 346, -1, -1, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, - 367, 368, 369, 370, 371, 372, 373, 33, -1, -1, - -1, 37, -1, -1, 40, 41, 42, 43, 44, 45, - -1, 47, 37, -1, -1, -1, -1, 42, 43, -1, - 45, -1, 47, 59, 60, -1, 62, -1, -1, -1, - -1, -1, -1, -1, -1, 60, -1, 62, -1, -1, + 367, 368, 369, 370, 371, 372, 373, 374, 375, -1, + -1, 33, -1, 59, -1, 37, -1, -1, 40, 41, + 42, 43, 44, 45, -1, 47, -1, 91, 269, 270, + 271, 272, 273, 274, -1, 276, -1, 59, 60, -1, + 62, -1, -1, -1, -1, -1, -1, 93, -1, -1, + -1, -1, -1, -1, -1, 37, -1, -1, -1, -1, + 42, 43, 44, 45, -1, 47, -1, -1, -1, -1, + -1, 93, -1, 260, 96, -1, -1, -1, 60, 125, + 62, 268, 269, 270, 271, 272, 273, 274, -1, 276, + -1, -1, -1, 284, 285, -1, -1, 0, -1, -1, + -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, + -1, -1, 94, -1, -1, -1, -1, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, + 33, -1, -1, -1, 37, -1, -1, 40, 41, 42, + 43, 44, 45, -1, 47, -1, 337, 338, 339, 340, + -1, -1, -1, -1, -1, -1, 59, 60, -1, 62, + -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, + 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 93, -1, -1, 96, 37, -1, 260, -1, -1, 42, + 43, -1, 45, -1, 47, 269, 270, 271, 272, 273, + 274, -1, 276, -1, -1, -1, -1, 60, -1, 62, + -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 257, 258, 259, 260, -1, + -1, 263, 264, 265, 266, 267, 268, -1, -1, -1, + -1, 94, -1, -1, -1, 277, 278, -1, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, -1, -1, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, + -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, -1, -1, 337, 338, 339, 340, -1, + 302, 343, 344, 305, 346, -1, -1, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, -1, -1, -1, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 257, 258, 259, 260, -1, -1, + 263, 264, 265, 266, 267, 268, -1, 349, 350, 351, + 352, 353, 354, -1, 277, 278, -1, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + -1, -1, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, + -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, -1, -1, 337, 338, 339, 340, -1, -1, + 343, 344, 0, 346, -1, -1, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, -1, -1, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, -1, -1, 33, -1, -1, -1, 37, + -1, -1, 40, 41, 42, 43, 44, 45, -1, 47, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, + -1, 59, 60, -1, 62, -1, 349, 350, 351, 352, + 353, 354, -1, -1, -1, -1, -1, -1, -1, 37, + -1, -1, -1, -1, 42, 43, 44, 45, -1, 47, + -1, -1, -1, -1, -1, 93, -1, -1, 96, -1, + 41, -1, 60, 44, 62, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, + -1, 0, -1, -1, -1, -1, -1, 125, -1, -1, + -1, -1, -1, -1, -1, -1, 94, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 93, -1, 33, -1, -1, -1, 37, -1, + -1, 40, 41, 42, 43, 44, 45, -1, 47, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 59, 60, -1, 62, 125, -1, -1, -1, 37, -1, + -1, -1, -1, 42, 43, -1, 45, -1, 47, -1, + 37, -1, -1, -1, -1, 42, 43, -1, 45, -1, + 47, 60, -1, 62, 93, -1, -1, 96, -1, -1, + -1, -1, -1, 60, 37, 62, -1, -1, -1, 42, + 43, -1, 45, -1, 47, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 94, 125, 60, -1, 62, + -1, -1, -1, -1, -1, -1, -1, 94, -1, 257, + 258, 259, 260, -1, -1, 263, 264, 265, 266, 267, + 268, -1, -1, -1, -1, -1, -1, -1, -1, 277, + 278, 94, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, -1, -1, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, -1, -1, 264, -1, -1, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, -1, -1, 337, + 338, 339, 340, -1, 302, 343, 344, 305, 346, -1, + 291, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, -1, -1, -1, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 257, 258, + 259, 260, -1, -1, 263, 264, 265, 266, 267, 268, + -1, 349, 350, 351, 352, 353, 354, -1, 277, 278, + -1, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, -1, -1, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + -1, 290, -1, -1, -1, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, + 339, 340, -1, -1, 343, 344, 0, 346, -1, -1, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, -1, -1, -1, 367, 368, + 369, 370, 371, 372, 373, 374, 375, -1, -1, 33, + 349, 350, 351, 352, 353, 354, 40, 41, -1, 43, + 44, 45, 349, 350, 351, 352, 353, 354, -1, -1, + -1, -1, -1, -1, -1, 59, 60, -1, 62, -1, + -1, -1, -1, -1, -1, -1, 349, -1, 351, 352, + 353, 354, -1, 37, -1, -1, -1, -1, 42, 43, + 44, 45, -1, 47, -1, -1, -1, -1, -1, 93, + -1, -1, 96, -1, -1, -1, 60, -1, 62, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, + -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, + 94, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, + -1, -1, -1, -1, -1, 40, 41, -1, 43, 44, + 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 59, 60, -1, 62, -1, -1, 37, -1, -1, -1, -1, 42, 43, -1, 45, -1, - 47, -1, -1, -1, -1, -1, -1, 93, -1, -1, - 96, -1, -1, 60, -1, 62, 271, 272, -1, 94, + 47, 37, -1, -1, -1, -1, 42, 43, -1, 45, + -1, 47, -1, 60, -1, 62, -1, -1, 93, -1, + -1, 96, -1, -1, 60, -1, 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 0, -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, 94, -1, -1, - -1, -1, -1, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 33, -1, -1, -1, 37, -1, - -1, 40, 41, 42, 43, 44, 45, -1, 47, -1, - -1, -1, 337, 338, 339, 340, -1, -1, -1, -1, - 59, 60, -1, 62, -1, -1, -1, -1, -1, -1, + 125, -1, -1, -1, -1, -1, -1, -1, 94, -1, + -1, -1, -1, 257, 258, 259, 260, -1, -1, 263, + 264, 265, 266, 267, 268, -1, -1, -1, -1, -1, + -1, -1, -1, 277, 278, -1, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, -1, + -1, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, -1, -1, 337, 338, 339, 340, -1, 302, 343, + 344, 305, 346, -1, -1, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + -1, -1, -1, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 257, 258, 259, 260, -1, -1, 263, 264, + 265, 266, 267, 268, -1, 349, 350, 351, 352, 353, + 354, -1, 277, 278, -1, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, -1, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + -1, -1, 337, 338, 339, 340, -1, -1, 343, 344, + 0, 346, -1, -1, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, - -1, 37, -1, -1, -1, -1, 42, 43, 44, 45, - -1, 47, -1, -1, 93, -1, -1, 96, -1, -1, - -1, -1, 37, -1, 60, -1, 62, 42, 43, 44, - 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 60, 125, 62, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 94, -1, + -1, -1, 367, 368, 369, 370, 371, 372, 373, 374, + 375, -1, 349, 33, 351, 352, 353, 354, -1, -1, + 40, 41, -1, -1, 44, 351, 352, 353, 354, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, + 60, -1, 62, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, -1, -1, 93, -1, -1, 96, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 337, + 338, 339, 340, -1, -1, -1, -1, -1, -1, 0, + -1, -1, -1, -1, -1, 125, -1, 355, 356, 357, + 358, 359, 360, 361, 362, 363, -1, -1, 59, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, + 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, + -1, -1, 93, -1, -1, 96, -1, -1, 59, 60, + -1, 62, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, + -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, + 260, -1, -1, 263, 264, 265, 266, 267, 268, -1, + -1, -1, -1, -1, -1, -1, -1, 277, 278, -1, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, -1, -1, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, + -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, -1, 257, 337, 338, 339, + 340, -1, 263, 343, 344, -1, 346, 268, -1, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, -1, -1, -1, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 257, 258, 259, 260, + -1, 302, 263, 264, 265, 266, 267, 268, -1, -1, + -1, -1, -1, -1, -1, -1, 277, 278, -1, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, -1, -1, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, + -1, 0, -1, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, -1, -1, 337, 338, 339, 340, + -1, -1, 343, 344, 0, 346, -1, -1, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, -1, -1, -1, 367, 368, 369, 370, + 371, 372, 373, 374, 375, -1, -1, 33, -1, -1, + 59, -1, -1, -1, 40, 41, -1, -1, 44, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, 60, -1, 62, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, 96, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, + 96, -1, -1, -1, -1, -1, 125, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 0, -1, -1, -1, -1, -1, 125, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, + -1, -1, -1, 40, 41, -1, -1, 44, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 59, 60, -1, 62, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 93, -1, -1, 96, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 257, -1, + -1, -1, -1, -1, 263, -1, -1, -1, 125, 268, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, -1, -1, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, -1, -1, 94, - -1, -1, -1, -1, -1, 281, 282, -1, 284, 285, + 266, 267, 268, -1, -1, -1, -1, -1, -1, -1, + -1, 277, 278, 302, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, -1, -1, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, @@ -1944,446 +2207,313 @@ short yycheck[] = { 25, 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, 339, 340, -1, -1, 343, 344, -1, 346, -1, -1, 349, 350, 351, 352, 353, 354, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 353, 354, - -1, 367, 368, 369, 370, 371, 372, 373, 257, 258, - 259, 260, -1, -1, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, 351, 352, 353, 354, -1, -1, - -1, -1, 281, 282, -1, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, -1, -1, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, 0, -1, 343, 344, 302, 346, -1, 305, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, -1, -1, -1, 367, 368, - 369, 370, 371, 372, 373, 33, -1, -1, -1, 37, - -1, -1, 40, 41, 42, 43, 44, 45, -1, 47, - -1, -1, -1, 349, 350, 351, 352, 353, 354, -1, - -1, 59, 60, -1, 62, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 349, 350, 351, 352, 353, 354, - -1, -1, 37, -1, -1, -1, -1, 42, 43, 44, - 45, -1, 47, -1, -1, 93, -1, -1, 96, -1, - -1, -1, 0, -1, -1, 60, -1, 62, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, - -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 94, - -1, -1, -1, 41, -1, -1, 44, -1, -1, -1, - -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, - 41, 59, 43, 44, 45, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 59, 60, - -1, 62, 37, -1, -1, -1, -1, 42, 43, 44, - 45, -1, 47, -1, 37, 93, -1, -1, -1, 42, - 43, -1, 45, -1, 47, 60, -1, 62, -1, -1, - -1, -1, 93, -1, -1, 96, -1, 60, 37, 62, - -1, -1, -1, 42, 43, -1, 45, 125, 47, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 94, - -1, 60, -1, 62, 125, -1, -1, -1, -1, -1, - -1, 94, -1, -1, -1, -1, -1, -1, -1, 257, + 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, + -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 257, 258, 259, 260, -1, -1, 263, 264, 265, 266, + 267, 268, -1, -1, -1, -1, -1, -1, -1, -1, + 277, 278, -1, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, -1, -1, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, -1, -1, + 337, 338, 339, 340, -1, -1, 343, 344, 0, 346, + -1, -1, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, + 367, 368, 369, 370, 371, 372, 373, 374, 375, -1, + -1, 33, -1, -1, -1, -1, -1, -1, 40, 41, + -1, 43, 44, 45, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, + 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, + -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, + -1, -1, -1, 125, -1, -1, -1, -1, 41, -1, + -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, + 33, -1, -1, -1, -1, -1, -1, 40, 41, -1, + -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, + 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 93, -1, 125, 96, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 257, 258, 259, 260, -1, + -1, 263, -1, 265, 266, 267, 268, -1, -1, -1, + -1, -1, -1, -1, -1, 277, 278, -1, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + -1, -1, -1, -1, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, -1, -1, 337, 338, 339, 340, -1, + -1, 343, 344, -1, -1, -1, -1, -1, -1, -1, + -1, 264, -1, 355, 356, 357, 358, 359, 360, 361, + 362, 363, -1, -1, -1, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 257, 258, 259, 260, 291, -1, + 263, 264, 265, 266, 267, 268, -1, -1, -1, -1, + -1, -1, -1, -1, 277, 278, -1, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + -1, -1, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, -1, 350, -1, -1, + -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, -1, -1, 337, 338, 339, 340, -1, -1, + 343, 344, 0, 346, -1, -1, 349, 350, 351, 352, + -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, + 363, -1, -1, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, -1, -1, 33, -1, -1, -1, -1, + -1, -1, 40, 41, -1, -1, 44, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 93, -1, -1, 96, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 0, -1, -1, -1, -1, -1, 125, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, + -1, 40, 41, -1, 43, 44, 45, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 59, -1, -1, 62, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, 96, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, -1, -1, 263, 264, 265, 266, 267, - 268, 269, 270, 271, 272, 94, -1, -1, -1, -1, - -1, -1, -1, 281, 282, -1, 284, 285, 286, 287, + 268, -1, -1, -1, -1, -1, -1, -1, -1, 277, + 278, -1, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, -1, -1, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, -1, 337, - 338, 339, 340, 102, -1, 343, 344, 302, 346, -1, - 305, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 264, -1, -1, 367, - 368, 369, 370, 371, 372, 373, 257, 258, 259, 260, - -1, 140, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, -1, 291, 349, 350, 351, 352, 353, 354, - 281, 282, -1, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, -1, -1, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, - -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, 339, 340, - 0, -1, 343, 344, -1, 346, -1, -1, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, -1, -1, -1, 367, 368, 369, 370, - 371, 372, 373, 33, 349, 350, 351, 352, 353, 354, - 40, 41, -1, 43, 44, 45, 349, 350, 351, 352, - 353, 354, -1, -1, 273, -1, -1, -1, 277, 59, - 60, 280, 62, -1, -1, -1, -1, -1, -1, -1, - 349, 350, 351, 352, 353, 354, -1, -1, -1, 308, + 338, 339, 340, -1, -1, 343, 344, -1, 346, -1, + -1, 349, 350, 351, 352, -1, -1, 355, 356, 357, + 358, 359, 360, 361, 362, 363, -1, -1, -1, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 257, 258, + 259, 260, -1, -1, 263, -1, 265, 266, 267, 268, + -1, -1, -1, -1, -1, -1, -1, -1, 277, 278, + -1, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, -1, -1, -1, -1, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - -1, -1, -1, 93, -1, -1, 96, -1, -1, -1, - 0, -1, -1, -1, -1, -1, -1, -1, 337, 338, - 339, 340, -1, -1, -1, -1, -1, 0, -1, -1, - -1, -1, -1, -1, -1, 125, 355, 356, 357, 358, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, 41, -1, -1, 44, -1, -1, -1, -1, -1, - 33, 370, 371, -1, -1, -1, -1, 40, 41, 59, - -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 59, 60, -1, 62, - -1, -1, -1, -1, -1, 404, -1, -1, 407, -1, - -1, -1, -1, 93, -1, -1, -1, -1, -1, 37, - -1, -1, -1, -1, 42, 43, -1, 45, -1, 47, - 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, - -1, -1, 60, -1, 62, 125, -1, -1, -1, -1, + 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, + 339, 340, -1, -1, 343, 344, 0, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, + 359, 360, 361, 362, 363, -1, -1, -1, 367, 368, + 369, 370, 371, 372, 373, 374, 375, -1, -1, 33, + -1, -1, -1, -1, -1, -1, 40, 41, -1, -1, + 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 94, 257, 258, 259, - 260, -1, -1, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, -1, 92, -1, -1, -1, -1, -1, - -1, 281, 282, -1, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, -1, -1, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, 137, - 138, 139, 140, -1, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, -1, -1, 337, 338, 339, - 340, -1, -1, 343, 344, -1, 346, 165, -1, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 264, -1, -1, 367, 368, 369, - 370, 371, 372, 373, 257, 258, 259, 260, -1, -1, - 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, - -1, 291, 210, -1, -1, -1, -1, -1, 281, 282, - 218, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, - -1, -1, 305, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 0, -1, -1, -1, - -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 290, -1, 337, 338, 339, 340, 0, 277, - 343, 344, -1, 346, -1, -1, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, -1, -1, -1, 367, 368, 369, 370, 371, 372, - 373, 33, -1, -1, -1, 59, -1, -1, 40, 41, - 318, 319, 44, -1, -1, 323, -1, -1, -1, -1, - -1, 349, 350, 351, 352, 353, 354, 59, 60, -1, - 62, -1, -1, -1, -1, -1, -1, -1, -1, 93, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 0, -1, -1, -1, 397, - 398, -1, -1, 125, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 415, 416, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 59, 60, -1, 62, -1, -1, + -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 257, -1, -1, -1, -1, -1, 263, - 125, -1, -1, -1, 268, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 257, 258, 259, 260, -1, - -1, 263, 264, 265, 266, 267, 268, 269, 270, 271, - 272, -1, -1, -1, -1, -1, -1, -1, 302, 281, - 282, -1, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - 302, -1, -1, 305, 306, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, - -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, -1, -1, 337, 338, 339, 340, -1, - -1, 343, 344, -1, 346, -1, -1, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, -1, -1, -1, 367, 368, 369, 370, 371, - 372, 373, 257, 258, 259, 260, -1, -1, 263, 264, - 265, 266, 267, 268, 269, 270, 271, 272, -1, -1, - -1, -1, -1, -1, -1, -1, 281, 282, -1, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 302, -1, -1, - 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 0, -1, -1, -1, -1, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - -1, -1, 337, 338, 339, 340, 0, -1, 343, 344, - -1, 346, -1, -1, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, - -1, -1, 367, 368, 369, 370, 371, 372, 373, 33, - -1, -1, -1, 59, -1, -1, 40, 41, -1, -1, - 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 59, 60, -1, 62, -1, - -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, - 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, - -1, -1, 96, -1, -1, -1, -1, -1, -1, 125, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, - -1, 125, -1, -1, -1, -1, -1, 0, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, - -1, -1, -1, 40, 41, -1, 43, 44, 45, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 41, -1, - -1, 44, 59, -1, -1, 62, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 93, -1, -1, 96, - -1, -1, -1, -1, -1, -1, 37, -1, -1, -1, - 93, 42, 43, -1, 45, -1, 47, -1, -1, -1, - -1, 257, -1, -1, -1, -1, -1, 263, 125, 60, - -1, 62, 268, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 125, 257, 258, 259, 260, -1, -1, 263, - 264, 265, 266, 267, 268, 269, 270, 271, 272, -1, - -1, -1, -1, 94, -1, -1, 302, 281, 282, -1, + 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 257, 258, 259, 260, -1, -1, 263, + 264, 265, 266, 267, 268, -1, -1, -1, -1, -1, + -1, -1, -1, 277, 278, -1, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, -1, -1, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, 339, 340, -1, -1, 343, - 344, -1, 346, -1, -1, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 344, -1, 346, -1, -1, 349, 350, -1, -1, -1, + -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, 367, 368, 369, 370, 371, 372, 373, - 257, 258, 259, 260, -1, -1, 263, -1, 265, 266, - 267, 268, 269, 270, 271, 272, -1, -1, -1, -1, - -1, 264, -1, -1, 281, 282, -1, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, - 297, 298, 299, 300, 301, -1, -1, -1, 291, 306, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, -1, -1, - 337, 338, 339, 340, 0, -1, 343, 344, -1, -1, - -1, -1, -1, -1, -1, -1, 287, -1, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 350, -1, -1, - 367, 368, 369, 370, 371, 372, 373, 33, -1, -1, - -1, -1, -1, -1, 40, 41, -1, -1, 44, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 349, 350, - 351, 352, 353, 354, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, - 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 0, -1, -1, -1, -1, -1, -1, -1, 125, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, - -1, 40, 41, -1, -1, 44, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 93, -1, -1, 96, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, + 374, 375, 257, 258, 259, 260, -1, -1, 263, 264, + 265, 266, 267, 268, -1, -1, -1, -1, -1, -1, + -1, -1, 277, 278, -1, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, -1, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + -1, -1, 337, 338, 339, 340, -1, -1, 343, 344, + 0, 346, -1, -1, -1, 350, -1, -1, -1, -1, + 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, + -1, -1, 367, 368, 369, 370, 371, 372, 373, 374, + 375, -1, -1, 33, -1, -1, -1, -1, -1, -1, + 40, 41, -1, 43, 44, 45, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, + -1, -1, 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 257, 258, 259, 260, -1, -1, 263, 264, 265, - 266, 267, 268, 269, 270, 271, 272, -1, -1, -1, - -1, -1, -1, -1, -1, 281, 282, -1, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, 302, -1, -1, 305, - 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, 339, 340, -1, -1, 343, 344, -1, - 346, -1, -1, 349, 350, 351, 352, -1, -1, 355, - 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, - -1, 367, 368, 369, 370, 371, 372, 373, 257, 258, - 259, 260, -1, -1, 263, 264, 265, 266, 267, 268, - 269, 270, 271, 272, -1, -1, -1, -1, -1, -1, - -1, -1, 281, 282, -1, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, 302, -1, -1, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, 0, -1, 343, 344, -1, 346, -1, -1, - 349, 350, 351, 352, -1, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, -1, -1, -1, 367, 368, - 369, 370, 371, 372, 373, 33, -1, -1, -1, -1, - -1, -1, 40, 41, -1, 43, 44, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 59, -1, -1, 62, -1, -1, -1, -1, -1, + -1, -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, - -1, -1, -1, -1, -1, 93, -1, -1, 96, -1, + -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, - -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, - 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, - -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, + -1, 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 93, -1, 125, 96, -1, -1, -1, -1, + -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, - 258, 259, 260, -1, -1, 263, -1, 265, 266, 267, - 268, 269, 270, 271, 272, -1, -1, -1, -1, -1, - -1, -1, -1, 281, 282, -1, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, -1, -1, -1, -1, 306, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, -1, -1, 337, - 338, 339, 340, -1, -1, 343, 344, -1, -1, -1, - -1, -1, -1, 264, -1, -1, -1, 355, 356, 357, - 358, 359, 360, 361, 362, 363, -1, -1, -1, 367, - 368, 369, 370, 371, 372, 373, 257, 258, 259, 260, - 291, -1, 263, 264, 265, 266, 267, 268, 269, 270, - 271, 272, -1, -1, -1, -1, -1, -1, -1, -1, - 281, 282, -1, 284, 285, 286, 287, 288, 289, 290, + -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, + 260, -1, -1, 263, -1, 265, 266, 267, 268, -1, + -1, -1, -1, -1, -1, -1, -1, 277, 278, -1, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, -1, -1, -1, -1, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 59, + -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, -1, -1, 337, 338, 339, + 340, -1, -1, 343, 344, -1, -1, -1, -1, -1, + -1, 91, -1, -1, -1, 355, 356, 357, 358, 359, + 360, 361, 362, 363, -1, -1, -1, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 257, 258, 259, 260, + -1, -1, 263, 123, 265, 266, 267, 268, -1, -1, + -1, -1, -1, -1, -1, -1, 277, 278, -1, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, -1, -1, 305, 306, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, -1, 350, + 301, -1, -1, -1, -1, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, 339, 340, - 0, -1, 343, 344, -1, 346, -1, -1, 349, 350, + -1, -1, 343, 344, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, 367, 368, 369, 370, - 371, 372, 373, 33, -1, -1, -1, -1, -1, -1, - 40, 41, -1, -1, 44, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 371, 372, 373, 374, 375, -1, -1, 33, -1, -1, + -1, -1, -1, -1, 40, 41, -1, -1, 44, -1, + -1, -1, -1, -1, -1, -1, -1, 257, 258, -1, + 260, 261, -1, 59, -1, -1, -1, -1, -1, 269, + 270, 271, 272, 273, 274, 275, 276, -1, -1, 279, + -1, -1, 282, 283, 284, 285, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 0, -1, -1, 93, -1, -1, 96, -1, -1, -1, + -1, -1, -1, 0, -1, -1, -1, -1, -1, 125, + -1, -1, -1, -1, -1, 335, -1, -1, -1, -1, + -1, 341, 342, -1, -1, 345, -1, 347, -1, -1, + -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, + -1, -1, -1, 40, 364, -1, 366, -1, -1, -1, + -1, -1, -1, -1, -1, 375, 376, -1, -1, -1, + -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, - -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, - -1, 41, -1, -1, 44, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, - 33, -1, -1, -1, -1, -1, -1, 40, 41, -1, - 43, 44, 45, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 59, -1, -1, 62, - -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 93, -1, -1, 96, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, - 260, -1, -1, 263, 264, 265, 266, 267, 268, 269, - 270, 271, 272, -1, -1, -1, -1, -1, -1, -1, - -1, 281, 282, -1, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, 302, -1, -1, 305, 306, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, - -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, -1, -1, 337, 338, 339, - 340, -1, -1, 343, 344, -1, 346, -1, -1, -1, - 350, -1, -1, -1, 264, 355, 356, 357, 358, 359, - 360, 361, 362, 363, -1, -1, -1, 367, 368, 369, - 370, 371, 372, 373, 257, 258, 259, 260, -1, -1, - 263, 291, 265, 266, 267, 268, 269, 270, 271, 272, - -1, -1, 302, -1, -1, 305, -1, -1, 281, 282, - -1, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, - -1, -1, -1, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, - 350, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, -1, -1, 337, 338, 339, 340, 0, -1, - 343, 344, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, - 363, -1, -1, -1, 367, 368, 369, 370, 371, 372, - 373, 33, -1, -1, -1, -1, -1, -1, 40, 41, - -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, - 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 257, 258, 259, 260, -1, -1, 263, -1, 265, + 266, 267, 268, -1, -1, -1, -1, -1, -1, -1, + -1, 277, 278, -1, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, -1, -1, -1, -1, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, + -1, 337, 338, 339, 340, -1, -1, 343, 344, -1, + -1, -1, -1, 91, -1, -1, -1, -1, -1, 355, + 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, + -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 257, 258, 259, 260, -1, 123, 263, -1, 265, 266, + 267, 268, -1, -1, -1, -1, -1, -1, -1, -1, + 277, 278, -1, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, -1, -1, -1, -1, -1, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, -1, -1, + 337, 338, 339, 340, -1, -1, 343, 344, 0, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 355, 356, + 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, + 367, 368, 369, 370, 371, 372, 373, 374, 375, -1, + -1, 33, -1, -1, -1, -1, -1, -1, 40, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, + 258, -1, 260, 261, -1, -1, -1, 59, -1, -1, + -1, 269, 270, 271, 272, 273, 274, 275, 276, -1, + -1, 279, -1, -1, 282, 283, 284, 285, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, - -1, -1, -1, 125, -1, -1, 41, -1, -1, 44, + -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, + -1, -1, -1, 125, -1, -1, -1, 335, -1, -1, + -1, -1, -1, 341, 342, -1, -1, 345, -1, 347, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 59, -1, -1, -1, 33, -1, - -1, -1, -1, -1, -1, 40, 41, -1, -1, 44, + 33, -1, -1, -1, -1, -1, 364, 40, 366, -1, + -1, -1, -1, -1, -1, -1, -1, 375, 376, -1, + -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 59, -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, - 125, 96, -1, -1, -1, -1, -1, -1, -1, -1, + 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, -1, - -1, 263, -1, 265, 266, 267, 268, 269, 270, 271, - 272, -1, -1, -1, -1, -1, -1, -1, -1, 281, - 282, -1, 284, 285, 286, 287, 288, 289, 290, 291, + -1, 263, -1, 265, 266, 267, 268, -1, -1, -1, + -1, -1, -1, -1, -1, 277, 278, -1, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, -1, -1, -1, 306, 307, 308, 309, 310, 311, + -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, 339, 340, -1, - -1, 343, 344, -1, -1, -1, -1, 91, -1, 264, + -1, 343, 344, -1, -1, -1, -1, 91, -1, -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, 367, 368, 369, 370, 371, - 372, 373, 257, 258, 259, 260, 291, -1, 263, 123, - 265, 266, 267, 268, 269, 270, 271, 272, -1, -1, - -1, -1, -1, -1, -1, -1, 281, 282, -1, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, -1, -1, -1, - -1, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, -1, 350, -1, -1, -1, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - -1, -1, 337, 338, 339, 340, 0, -1, 343, 344, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, - -1, -1, 367, 368, 369, 370, 371, 372, 373, 33, - -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, + 372, 373, 374, 375, 257, 258, 259, 260, -1, 123, + 263, -1, 265, 266, 267, 268, -1, -1, -1, -1, + -1, -1, -1, -1, 277, 278, -1, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, + -1, -1, -1, -1, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, + -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, -1, -1, 337, 338, 339, 340, -1, -1, + 343, 344, 0, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, + 363, -1, -1, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, -1, -1, 33, -1, -1, -1, -1, + -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 257, 258, -1, 260, 261, -1, -1, + -1, 59, -1, -1, -1, 269, 270, 271, 272, 273, + 274, 275, 276, -1, -1, 279, -1, -1, 282, 283, + 284, 285, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 257, 258, 59, 260, 261, -1, -1, - -1, -1, -1, -1, -1, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, -1, -1, 283, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, - -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, - -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 0, -1, -1, -1, -1, -1, 125, -1, -1, -1, 335, -1, -1, -1, -1, -1, 341, 342, -1, - -1, 345, -1, 347, -1, -1, 33, -1, -1, -1, - -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, - 364, -1, 366, -1, -1, -1, -1, -1, -1, 373, - 374, -1, 59, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 93, -1, -1, 96, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 125, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 257, 258, 259, 260, -1, -1, 263, - -1, 265, 266, 267, 268, 269, 270, 271, 272, -1, - -1, -1, -1, -1, -1, -1, -1, 281, 282, -1, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, - -1, -1, -1, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, -1, -1, 337, 338, 339, 340, -1, -1, 343, - 344, -1, 91, -1, -1, -1, -1, -1, -1, -1, - -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, - -1, -1, -1, 367, 368, 369, 370, 371, 372, 373, - 257, 258, 259, 260, 123, -1, 263, -1, 265, 266, - 267, 268, 269, 270, 271, 272, -1, -1, -1, -1, - -1, -1, -1, -1, 281, 282, -1, 284, 285, 286, - 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, - 297, 298, 299, 300, 301, -1, -1, -1, -1, -1, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, -1, -1, - 337, 338, 339, 340, 0, -1, 343, 344, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 355, 356, - 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, - 367, 368, 369, 370, 371, 372, 373, 33, -1, -1, - -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, - -1, 260, 261, 59, -1, -1, -1, -1, -1, -1, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, -1, -1, 283, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, - 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 0, -1, -1, -1, -1, -1, -1, -1, 125, - -1, -1, -1, -1, -1, -1, 335, -1, -1, -1, - -1, -1, 341, 342, -1, -1, 345, -1, 347, -1, + -1, 345, -1, 347, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, - -1, 40, -1, -1, -1, 364, -1, 366, -1, -1, - -1, -1, -1, -1, 373, 374, -1, -1, -1, -1, + 364, 40, 366, -1, -1, -1, -1, -1, -1, -1, + -1, 375, 376, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -2391,77 +2521,78 @@ short yycheck[] = { 25, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 257, 258, 259, 260, -1, -1, 263, -1, 265, - 266, 267, 268, 269, 270, 271, 272, -1, -1, -1, - -1, -1, -1, -1, -1, 281, 282, -1, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, -1, -1, -1, -1, - -1, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, 339, 340, -1, -1, 343, 344, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 355, - 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, - -1, 367, 368, 369, 370, 371, 372, 373, 257, 258, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, + 258, 259, 260, -1, -1, 263, -1, 265, 266, 267, + 268, -1, -1, -1, -1, -1, -1, -1, -1, 277, + 278, -1, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, -1, -1, -1, -1, -1, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, -1, -1, -1, -1, -1, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, -1, -1, 337, + 338, 339, 340, -1, -1, 343, 344, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 355, 356, 357, + 358, 359, 360, 361, 362, 363, -1, -1, -1, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 257, 258, 259, 260, -1, -1, 263, -1, 265, 266, 267, 268, - 269, 270, 271, 272, -1, -1, -1, -1, -1, -1, - -1, -1, 281, 282, -1, 284, 285, 286, 287, 288, + -1, -1, -1, -1, -1, -1, -1, -1, 277, 278, + -1, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, 0, -1, 343, 344, -1, -1, -1, -1, + 339, 340, -1, -1, 343, 344, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, 367, 368, - 369, 370, 371, 372, 373, 33, -1, -1, -1, -1, - -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 369, 370, 371, 372, 373, 374, 375, -1, -1, 33, + -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 93, -1, -1, 96, -1, + -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, - -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, + -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, + -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, + -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, + -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, + -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, - 258, 259, 260, -1, -1, 263, -1, 265, 266, 267, - 268, 269, 270, 271, 272, -1, -1, -1, -1, -1, - -1, -1, -1, 281, 282, -1, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, -1, -1, -1, -1, -1, 307, - 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, -1, -1, -1, -1, -1, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 334, -1, -1, 337, - 338, 339, 340, -1, -1, 343, 344, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 355, 356, 357, - 358, 359, 360, 361, 362, 363, -1, -1, -1, 367, - 368, 369, 370, 371, 372, 373, 257, 258, 259, 260, - -1, -1, 263, -1, 265, 266, 267, 268, 269, 270, - 271, 272, -1, -1, -1, -1, -1, -1, -1, -1, - 281, 282, -1, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, -1, -1, -1, -1, -1, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, - -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, 339, 340, - 0, -1, 343, 344, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, - 361, 362, 363, -1, -1, -1, 367, 368, 369, 370, - 371, 372, 373, 33, -1, -1, -1, -1, -1, -1, + 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 257, 258, 259, 260, -1, -1, 263, + -1, 265, 266, 267, 268, -1, -1, -1, -1, -1, + -1, -1, -1, 277, 278, -1, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, + -1, -1, -1, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, -1, -1, 337, 338, 339, 340, -1, -1, 343, + 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, + -1, -1, -1, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 257, 258, 259, 260, -1, -1, 263, -1, + 265, 266, 267, 268, -1, -1, -1, -1, -1, -1, + -1, -1, 277, 278, -1, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, -1, -1, -1, + -1, -1, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + -1, -1, 337, 338, 339, 340, -1, -1, 343, 344, + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, + -1, -1, 367, 368, 369, 370, 371, 372, 373, 374, + 375, -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -2469,24 +2600,24 @@ short yycheck[] = { 25, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, + -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, + -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, - 260, -1, -1, 263, -1, 265, 266, 267, 268, 269, - 270, 271, 272, -1, -1, -1, -1, -1, -1, -1, - -1, 281, 282, -1, 284, 285, 286, 287, 288, 289, + 260, -1, -1, 263, -1, 265, 266, 267, 268, -1, + -1, -1, -1, -1, -1, -1, -1, 277, 278, -1, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, @@ -2495,74 +2626,29 @@ short yycheck[] = { 25, 340, -1, -1, 343, 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, 367, 368, 369, - 370, 371, 372, 373, 257, 258, 259, 260, -1, -1, - 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, - -1, -1, -1, -1, -1, -1, -1, -1, 281, 282, - -1, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, - -1, -1, -1, -1, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, - -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, -1, -1, 337, 338, 339, 340, 0, -1, - 343, 344, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, - 363, -1, -1, -1, 367, 368, 369, 370, 371, 372, - 373, 33, -1, -1, -1, -1, -1, -1, 40, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, - -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, - -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, - -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 257, 258, 259, 260, -1, - -1, 263, -1, 265, 266, 267, 268, 269, 270, 271, - 272, -1, -1, -1, -1, -1, -1, -1, -1, 281, - 282, -1, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, - -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, -1, -1, 337, 338, 339, 340, -1, - -1, 343, 344, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, -1, -1, -1, 367, 368, 369, 370, 371, - 372, 373, 257, 258, 259, 260, -1, -1, 263, -1, - 265, 266, 267, 268, 269, 270, 271, 272, -1, -1, - -1, -1, -1, -1, -1, -1, 281, 282, -1, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, -1, -1, -1, - -1, -1, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - -1, -1, 337, 338, 339, 340, 0, -1, 343, 344, + 370, 371, 372, 373, 374, 375, 257, 258, 259, 260, + -1, -1, 263, -1, 265, 266, 267, 268, -1, -1, + -1, -1, -1, -1, -1, -1, 277, 278, -1, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, -1, -1, -1, -1, -1, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, + -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, -1, -1, 337, 338, 339, 340, + -1, -1, 343, 344, 0, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, + 361, 362, 363, -1, -1, -1, 367, 368, 369, 370, + 371, 372, 373, 374, 375, -1, -1, 33, -1, -1, + -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, - -1, -1, 367, 368, 369, 370, 371, 372, 373, 33, - -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, + -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, - -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 0, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, - -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, @@ -2575,76 +2661,77 @@ short yycheck[] = { 25, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 257, 258, 259, 260, -1, -1, 263, - -1, 265, 266, 267, 268, 269, 270, 271, 272, -1, - -1, -1, -1, -1, -1, -1, -1, 281, 282, -1, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, - -1, -1, -1, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, -1, -1, 337, 338, 339, 340, -1, -1, 343, - 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, - -1, -1, -1, 367, 368, 369, 370, 371, 372, 373, + -1, 257, 258, 259, 260, -1, -1, 263, -1, 265, + 266, 267, 268, -1, -1, -1, -1, -1, -1, -1, + -1, 277, 278, -1, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, -1, -1, -1, -1, + -1, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, + -1, 337, 338, 339, 340, -1, -1, 343, 344, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 355, + 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, + -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, 257, 258, 259, 260, -1, -1, 263, -1, 265, 266, - 267, 268, 269, 270, 271, 272, -1, -1, -1, -1, - -1, -1, -1, -1, 281, 282, -1, 284, 285, 286, + 267, 268, -1, -1, -1, -1, -1, -1, -1, -1, + 277, 278, -1, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, -1, - 337, 338, 339, 340, 0, -1, 343, 344, -1, -1, + 337, 338, 339, 340, -1, -1, 343, 344, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, - 367, 368, 369, 370, 371, 372, 373, 33, -1, -1, - -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, + 367, 368, 369, 370, 371, 372, 373, 374, 375, -1, + -1, 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, - 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 0, -1, -1, -1, -1, -1, -1, -1, 125, + -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, + -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, - -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, + 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 257, 258, 259, 260, -1, -1, 263, -1, 265, - 266, 267, 268, 269, 270, 271, 272, -1, -1, -1, - -1, -1, -1, -1, -1, 281, 282, -1, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, -1, -1, -1, -1, - -1, 307, 308, 309, 310, 311, 312, 313, 314, 315, - 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, - -1, 337, 338, 339, 340, -1, -1, 343, 344, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 355, - 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, - -1, 367, 368, 369, 370, 371, 372, 373, 257, 258, - 259, 260, -1, -1, 263, -1, 265, 266, 267, 268, - 269, 270, 271, 272, -1, -1, -1, -1, -1, -1, - -1, -1, 281, 282, -1, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, -1, -1, -1, -1, -1, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, 0, -1, 343, 344, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, -1, -1, -1, 367, 368, - 369, 370, 371, 372, 373, 33, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 257, 258, 259, 260, -1, + -1, 263, -1, 265, 266, 267, 268, -1, -1, -1, + -1, -1, -1, -1, -1, 277, 278, -1, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, + -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, -1, -1, 337, 338, 339, 340, -1, + -1, 343, 344, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, + 362, 363, -1, -1, -1, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 257, 258, 259, 260, -1, -1, + 263, -1, 265, 266, 267, 268, -1, -1, -1, -1, + -1, -1, -1, -1, 277, 278, -1, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, + -1, -1, -1, -1, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, + -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, -1, -1, 337, 338, 339, 340, -1, -1, + 343, 344, 0, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, + 363, -1, -1, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, @@ -2652,24 +2739,24 @@ short yycheck[] = { 25, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, - -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 0, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, + -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, + -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, -1, -1, 263, -1, 265, 266, 267, - 268, 269, 270, 271, 272, -1, -1, -1, -1, -1, - -1, -1, -1, 281, 282, -1, 284, 285, 286, 287, + 268, -1, -1, -1, -1, -1, -1, -1, -1, 277, + 278, -1, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, @@ -2678,19 +2765,66 @@ short yycheck[] = { 25, 338, 339, 340, -1, -1, 343, 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, 367, - 368, 369, 370, 371, 372, 373, 257, 258, 259, 260, - -1, -1, 263, -1, 265, 266, 267, 268, 269, 270, - 271, 272, -1, -1, -1, -1, -1, -1, -1, -1, - 281, 282, -1, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, -1, -1, -1, -1, -1, 307, 308, 309, 310, - 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, - -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, -1, -1, 337, 338, 339, 340, - 0, -1, 343, 344, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, - 361, 362, 363, -1, -1, -1, 367, 368, 369, 370, - 371, 372, 373, 33, -1, -1, -1, -1, -1, -1, + 368, 369, 370, 371, 372, 373, 374, 375, 257, 258, + 259, 260, -1, -1, 263, -1, 265, 266, 267, 268, + -1, -1, -1, -1, -1, -1, -1, -1, 277, 278, + -1, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, -1, -1, -1, -1, -1, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, + 339, 340, -1, -1, 343, 344, 0, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, + 359, 360, 361, 362, 363, -1, -1, -1, 367, 368, + 369, 370, 371, 372, 373, 374, 375, -1, -1, 33, + -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, + -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, + -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, + -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, + -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 257, 258, 259, 260, -1, -1, 263, + -1, 265, 266, 267, 268, -1, -1, -1, -1, -1, + -1, -1, -1, 277, 278, -1, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, + -1, -1, -1, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, -1, -1, 337, 338, 339, 340, -1, -1, 343, + 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, + -1, -1, -1, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 257, 258, 259, 260, -1, -1, 263, -1, + 265, 266, 267, 268, -1, -1, -1, -1, -1, -1, + -1, -1, 277, 278, -1, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, -1, -1, -1, + -1, -1, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + -1, -1, 337, 338, 339, 340, -1, -1, 343, 344, + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, + -1, -1, 367, 368, 369, 370, 371, 372, 373, 374, + 375, -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -2698,24 +2832,24 @@ short yycheck[] = { 25, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, + -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, + -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, - 260, -1, -1, 263, -1, 265, 266, 267, 268, 269, - 270, 271, 272, -1, -1, -1, -1, -1, -1, -1, - -1, 281, 282, -1, 284, 285, 286, 287, 288, 289, + 260, -1, -1, 263, -1, 265, 266, 267, 268, -1, + -1, -1, -1, -1, -1, -1, -1, 277, 278, -1, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, @@ -2724,470 +2858,487 @@ short yycheck[] = { 25, 340, -1, -1, 343, 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, 367, 368, 369, - 370, 371, 372, 373, 257, 258, 259, 260, -1, -1, - 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, - -1, -1, -1, -1, -1, -1, -1, -1, 281, 282, - -1, 284, 285, 286, 287, 288, 289, 290, 291, 292, - 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, - -1, -1, -1, -1, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, - -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, -1, -1, 337, 338, 339, 340, 0, -1, - 343, 344, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, - 363, -1, -1, -1, 367, 368, 369, 370, 371, 372, - 373, 33, -1, -1, -1, -1, -1, -1, 40, -1, - -1, -1, 44, 45, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 370, 371, 372, 373, 374, 375, 257, 258, 259, 260, + -1, -1, 263, -1, 265, 266, 267, 268, -1, -1, + -1, -1, -1, -1, -1, -1, 277, 278, -1, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, -1, -1, -1, -1, -1, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, + -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, -1, -1, 337, 338, 339, 340, + -1, -1, 343, 344, 0, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, + 361, 362, 363, -1, -1, -1, 367, 368, 369, 370, + 371, 372, 373, 374, 375, -1, -1, 33, -1, -1, + -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, - -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, - -1, -1, -1, -1, -1, 40, 41, -1, 43, 44, - 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 59, -1, -1, 62, -1, -1, + -1, -1, 0, -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, - -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 33, -1, -1, -1, -1, + -1, -1, 40, -1, -1, -1, 44, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 258, 259, 260, -1, - -1, -1, -1, 265, 266, 267, -1, 269, 270, 271, - 272, -1, -1, -1, -1, -1, -1, -1, -1, 281, - 282, -1, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, - -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, -1, -1, 337, 338, 339, 340, -1, - -1, 343, 344, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, -1, -1, -1, 367, 368, 369, 370, 371, - 372, 373, 257, 258, 259, 260, -1, -1, 263, -1, - 265, 266, 267, 268, 269, 270, 271, 272, -1, -1, - -1, -1, -1, -1, -1, -1, 281, 282, -1, 284, - 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 295, 296, 297, 298, 299, 300, 301, 0, -1, -1, - -1, 306, 307, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 319, 320, 321, 322, 323, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 33, -1, -1, -1, -1, -1, -1, 40, 343, 344, - 43, -1, 45, 46, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, - -1, -1, 367, 368, 369, 370, 371, 372, 373, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 93, 0, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 125, -1, 33, -1, -1, -1, -1, -1, - -1, 40, 41, -1, -1, 44, 45, -1, -1, -1, + -1, 257, 258, 259, 260, -1, -1, 263, -1, 265, + 266, 267, 268, -1, -1, -1, -1, -1, -1, -1, + -1, 277, 278, -1, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, -1, -1, -1, -1, + -1, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, + -1, 337, 338, 339, 340, -1, -1, 343, 344, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 355, + 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, + -1, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 258, 259, 260, -1, -1, -1, -1, 265, 266, 267, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 277, + 278, -1, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, -1, -1, -1, -1, -1, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, -1, -1, -1, -1, -1, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, -1, -1, 337, + 338, 339, 340, -1, -1, 343, 344, 0, -1, -1, + -1, -1, -1, -1, -1, 92, -1, 355, 356, 357, + 358, 359, 360, 361, 362, 363, -1, -1, -1, 367, + 368, 369, 370, 371, 372, 373, 374, 375, -1, -1, + 33, -1, -1, -1, -1, -1, -1, 40, 41, -1, + 43, 44, 45, -1, -1, -1, -1, -1, -1, -1, + 137, 138, 139, 140, -1, -1, 59, -1, -1, 62, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 167, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 0, -1, -1, -1, 93, -1, -1, 96, -1, -1, + -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, + -1, -1, 125, -1, -1, 212, -1, -1, -1, -1, + -1, -1, -1, 220, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, + -1, -1, -1, -1, -1, -1, 40, -1, -1, 43, + -1, 45, 46, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 279, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, + -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 33, -1, -1, 125, -1, -1, -1, - 40, 41, -1, -1, 44, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, - 60, -1, 62, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 322, 323, -1, -1, -1, + 327, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, -1, -1, - 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, - -1, -1, -1, 93, -1, -1, 96, -1, 281, 282, - -1, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 263, -1, 265, 266, 267, 268, -1, -1, -1, -1, + -1, -1, -1, -1, 277, 278, -1, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, - -1, -1, -1, 0, 307, 125, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 319, 320, 321, 322, + -1, -1, -1, 306, 307, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 401, 402, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, -1, -1, -1, -1, 33, -1, -1, -1, - 343, 344, -1, 40, -1, -1, -1, -1, 257, 258, + 333, 334, 419, 420, -1, -1, -1, -1, -1, -1, + 343, 344, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 257, 258, 259, 260, -1, -1, 263, + -1, 265, 266, 267, 268, -1, -1, -1, -1, -1, + -1, -1, -1, 277, 278, -1, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, + -1, 0, -1, 307, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, -1, -1, -1, 33, -1, -1, -1, -1, 343, + 344, 40, 41, -1, -1, 44, 45, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 59, -1, -1, 367, 368, 369, 370, 371, 372, 373, + 374, 375, -1, -1, -1, -1, -1, -1, -1, 0, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, 96, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, + 41, -1, -1, 44, -1, -1, 125, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 59, 60, + -1, 62, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, + -1, -1, -1, -1, -1, -1, 40, -1, 257, 258, 259, 260, -1, -1, 263, -1, 265, 266, 267, 268, - 269, 270, 59, -1, 367, 368, 369, 370, 371, 372, - 373, -1, 281, 282, -1, 284, 285, 286, 287, 288, + -1, -1, -1, -1, -1, 59, -1, -1, 277, 278, + -1, 280, 281, 282, 283, -1, -1, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, - 299, 300, 301, -1, -1, -1, 93, -1, 307, 96, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 299, 300, 301, -1, -1, -1, -1, -1, 307, 93, + -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, -1, 125, -1, - -1, -1, -1, -1, 343, 344, -1, 257, 258, 259, - 260, -1, -1, 263, -1, -1, -1, -1, 268, -1, - -1, 271, 272, -1, -1, -1, 0, -1, 367, 368, - 369, 370, 371, 372, 373, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 307, 308, 309, - 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, - -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 59, -1, 337, 338, 339, - 340, -1, -1, -1, -1, -1, -1, -1, -1, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, -1, -1, -1, -1, -1, 93, - -1, -1, -1, 373, -1, -1, -1, -1, -1, -1, - 257, 258, 259, 260, -1, -1, 263, -1, -1, -1, - -1, 268, -1, -1, 271, 272, -1, -1, -1, -1, - -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, + 329, 330, 331, 332, 333, 334, 257, 258, 259, 260, + -1, 125, 263, -1, 343, 344, -1, 268, -1, -1, + -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, + -1, -1, -1, 284, 285, -1, -1, -1, 367, 368, + 369, 370, 371, 372, 373, 374, 375, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, + -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 59, -1, 337, 338, 339, 340, + -1, -1, -1, -1, -1, -1, 0, -1, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, -1, -1, -1, -1, -1, 93, -1, + -1, -1, -1, -1, 375, -1, -1, -1, -1, 33, + -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, + -1, -1, -1, 257, 258, 259, 260, -1, -1, 263, + 125, -1, -1, -1, 268, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 284, 285, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, + -1, -1, 96, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, -1, -1, 0, -1, -1, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 125, -1, 337, 338, 339, 340, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, - 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 0, -1, - 337, 338, 339, 340, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 355, 356, - 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, - -1, 33, -1, -1, -1, -1, 373, -1, 40, -1, + -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, + -1, 375, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 260, -1, -1, -1, - -1, 265, 266, 267, -1, 269, 270, 271, 272, -1, - -1, 93, -1, -1, 96, -1, -1, 281, 282, -1, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, 302, 0, - -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, + 265, 266, 267, -1, -1, -1, -1, -1, -1, -1, + 93, -1, 277, 278, -1, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, -1, -1, + -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 257, 258, 259, 260, 0, -1, 263, + -1, -1, -1, -1, 268, -1, -1, -1, 343, 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 343, - 344, -1, -1, -1, -1, -1, 0, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, - -1, -1, -1, 367, 368, 369, 370, 371, 372, 373, + 284, 285, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 367, 368, 369, 370, 371, 372, 373, 374, + 375, -1, -1, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, -1, 59, -1, -1, -1, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, -1, -1, 337, 338, 339, 340, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 37, -1, -1, -1, 41, 42, 43, - 44, 45, 93, 47, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 59, 60, -1, 62, -1, + 93, 355, 356, 357, 358, 359, 360, 361, 362, 363, + -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, + -1, 375, 265, 266, 267, 0, -1, -1, -1, -1, + -1, -1, 125, -1, 277, 278, -1, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 0, -1, -1, -1, 125, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 257, 258, 259, 260, 93, - -1, 263, -1, -1, -1, -1, 268, -1, -1, 271, - 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 125, -1, -1, -1, -1, -1, -1, -1, 59, - -1, -1, -1, -1, 0, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, - -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 93, -1, 337, 338, 339, 340, -1, + -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, -1, 59, -1, 125, -1, -1, 0, -1, - -1, 373, -1, -1, -1, -1, -1, -1, -1, 260, - -1, -1, -1, -1, 265, 266, 267, -1, 269, 270, - 271, 272, -1, -1, -1, -1, -1, 93, -1, -1, - 281, 282, -1, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, 302, -1, -1, -1, -1, -1, 59, -1, 125, - 264, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 343, 344, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, + -1, -1, -1, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 125, -1, -1, -1, -1, -1, -1, -1, -1, 0, + -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, + -1, -1, 265, 266, 267, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 277, 278, -1, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 291, -1, -1, - -1, 93, 343, 344, -1, -1, -1, -1, 302, -1, - -1, 305, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 367, 368, 369, 370, - 371, 372, 373, 125, 0, -1, -1, -1, -1, -1, - 260, -1, -1, -1, -1, 265, 266, 267, -1, 269, - 270, 271, 272, -1, -1, 349, 350, 351, 352, 353, - 354, 281, 282, -1, 284, 285, 286, 287, 288, 289, - 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, - 300, 301, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 59, -1, -1, -1, -1, 0, -1, - -1, -1, -1, -1, 260, -1, -1, -1, -1, 265, - 266, 267, -1, 269, 270, 271, 272, -1, -1, -1, - -1, -1, -1, 343, 344, 281, 282, 93, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, -1, 367, 368, 369, - 370, 371, 372, 373, -1, -1, -1, 59, -1, 125, - -1, -1, 0, -1, -1, -1, -1, -1, 260, -1, - -1, -1, -1, 265, 266, 267, -1, 269, 270, 271, - 272, -1, -1, -1, -1, -1, -1, 343, 344, 281, - 282, 93, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, 367, 368, 369, 370, 371, 372, 373, -1, -1, - -1, 59, -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 343, 344, -1, -1, 93, -1, -1, -1, -1, + 343, 344, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 367, 368, 369, 370, 371, - 372, 373, -1, -1, -1, -1, -1, 125, -1, -1, - -1, -1, -1, -1, 260, -1, -1, -1, -1, 265, - 266, 267, -1, 269, 270, 271, 272, -1, -1, -1, - -1, -1, -1, -1, -1, 281, 282, -1, 284, 285, - 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, - 296, 297, 298, 299, 300, 301, -1, -1, -1, -1, + -1, -1, -1, -1, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 0, 125, 260, -1, -1, -1, -1, + 265, 266, 267, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 277, 278, -1, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, - -1, -1, -1, 265, 266, 267, -1, 269, 270, 271, - 272, -1, -1, -1, -1, -1, -1, 343, 344, 281, - 282, -1, 284, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, - -1, 367, 368, 369, 370, 371, 372, 373, -1, -1, + -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 260, -1, -1, -1, -1, 265, 266, 267, - -1, 269, 270, 271, 272, -1, -1, -1, -1, -1, - -1, 343, 344, 281, 282, 0, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 298, 299, 300, 301, -1, 367, 368, 369, 370, 371, - 372, 373, -1, -1, -1, -1, -1, -1, 33, -1, - -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 343, 344, + -1, -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 59, 343, 344, -1, -1, -1, - -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 367, - 368, 369, 370, 371, 372, 373, -1, -1, 93, -1, - -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 43, -1, - 45, 46, -1, -1, -1, -1, -1, -1, -1, -1, - 125, -1, -1, -1, 59, -1, -1, -1, -1, -1, + -1, -1, 367, 368, 369, 370, 371, 372, 373, 374, + 375, -1, -1, -1, -1, -1, -1, -1, 125, -1, + -1, 0, -1, -1, -1, -1, -1, -1, -1, 260, + -1, -1, -1, -1, 265, 266, 267, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 277, 278, -1, 280, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, + -1, -1, 343, 344, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 0, 125, -1, -1, -1, + -1, -1, -1, 260, -1, -1, -1, -1, 265, 266, + 267, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 277, 278, -1, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 343, 344, 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, - -1, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 367, 368, 369, 370, 371, 372, 373, 374, 375, -1, + 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 260, -1, -1, -1, -1, 265, 266, 267, -1, + 0, -1, -1, -1, -1, -1, -1, -1, 277, 278, + -1, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 33, -1, -1, -1, -1, -1, -1, + 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, + -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, + -1, -1, -1, -1, 343, 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 257, 258, 259, -1, -1, -1, 263, -1, - 265, 266, 267, 268, 269, 270, 271, 272, 91, -1, - -1, -1, -1, 96, -1, -1, 281, 282, -1, 284, + -1, -1, -1, 93, -1, -1, 96, -1, 367, 368, + 369, 370, 371, 372, 373, 374, 375, -1, -1, -1, + 43, -1, 45, 46, -1, 260, -1, -1, -1, -1, + 265, 266, 267, -1, -1, 125, 59, -1, -1, -1, + -1, -1, 277, 278, -1, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, -1, -1, -1, - 123, -1, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - -1, -1, 337, 338, 339, 340, 271, 272, 343, 344, + 93, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, - -1, -1, 367, 368, 369, 370, 371, 372, -1, -1, - -1, -1, -1, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, 322, 323, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 337, 338, 339, 340, 33, -1, -1, -1, - -1, -1, -1, 40, -1, -1, -1, -1, 45, -1, - 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, 257, 258, 259, 260, 261, -1, - 263, -1, -1, -1, -1, 268, 269, 270, 271, 272, - 273, 274, 275, 276, 277, 278, 279, 280, -1, -1, - 283, -1, -1, -1, 91, -1, -1, -1, -1, 96, + -1, -1, 125, -1, -1, -1, -1, -1, 343, 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 123, -1, -1, -1, - -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, -1, 337, 338, 339, 340, 341, 342, - -1, -1, 345, -1, 347, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 367, 368, 369, 370, 371, 372, 373, 374, + 375, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, + -1, -1, -1, 263, -1, 265, 266, 267, 268, -1, + -1, -1, -1, -1, -1, -1, -1, 277, 278, -1, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, -1, -1, -1, -1, -1, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, + -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, -1, -1, 337, 338, 339, + 340, -1, -1, 343, 344, -1, -1, -1, -1, -1, + -1, 284, 285, -1, 0, 355, 356, 357, 358, 359, + 360, 361, 362, 363, -1, -1, -1, 367, 368, 369, + 370, 371, 372, 373, 374, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 37, -1, -1, -1, 41, 42, 43, 44, 45, + -1, 47, -1, -1, 337, 338, 339, 340, -1, -1, + -1, -1, -1, 59, 60, -1, 62, -1, -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 33, 366, -1, -1, -1, -1, -1, 40, - 373, 374, -1, -1, 45, -1, -1, -1, -1, -1, + 363, -1, -1, -1, -1, -1, 33, -1, -1, -1, + -1, -1, -1, 40, -1, -1, -1, 93, 45, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 91, -1, -1, -1, -1, 96, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 123, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, + -1, -1, -1, 40, -1, -1, -1, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 91, -1, -1, -1, -1, 96, + -1, -1, -1, -1, -1, -1, -1, -1, 264, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 123, -1, -1, -1, + -1, -1, -1, -1, -1, 291, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 302, -1, -1, 305, 257, 258, 259, 260, 261, -1, 263, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, - 277, 278, 279, 280, -1, -1, 283, -1, -1, 33, - -1, -1, -1, -1, -1, -1, 40, 41, -1, -1, - -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 279, 33, -1, 282, 283, 284, 285, -1, + 40, -1, -1, -1, -1, 45, -1, -1, -1, -1, + -1, -1, -1, 349, 350, 351, 352, 353, 354, -1, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, -1, + 337, 338, 339, 340, 341, 342, 96, -1, 345, -1, + 347, -1, -1, -1, -1, -1, -1, -1, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, + 257, 258, 259, 260, 261, -1, 263, -1, 375, 376, + -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, + -1, -1, 279, -1, -1, 282, 283, 284, 285, -1, + -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, + 41, -1, -1, -1, 45, -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, -1, 337, 338, 339, 340, 341, 342, -1, -1, 345, -1, - 347, -1, 96, -1, -1, -1, -1, -1, 355, 356, + 347, -1, -1, -1, -1, 96, -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, - -1, -1, -1, -1, -1, -1, 373, 374, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 375, 376, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, - -1, -1, 263, -1, 265, 266, 267, 268, 269, 270, - 271, 272, -1, -1, -1, -1, -1, -1, -1, -1, - 281, 282, -1, 284, 285, 286, 287, 288, 289, 290, - 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, - 301, -1, -1, -1, -1, -1, 307, 308, 309, 310, + -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, + 260, -1, -1, 263, -1, 265, 266, 267, 268, -1, + -1, -1, -1, -1, -1, -1, -1, 277, 278, -1, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, -1, -1, -1, -1, -1, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, + -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, 33, -1, 337, 338, 339, + 340, -1, 40, 343, 344, -1, -1, 45, 46, -1, + -1, -1, -1, -1, -1, 355, 356, 357, 358, 359, + 360, 361, 362, 363, -1, -1, -1, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 257, 258, 259, 260, + -1, -1, 263, -1, -1, -1, -1, 268, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 96, -1, + -1, -1, -1, 284, 285, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 33, -1, 337, 338, 339, 340, - -1, 40, 343, 344, -1, -1, 45, 46, -1, -1, - -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, - 361, 362, 363, -1, -1, -1, 367, 368, 369, 370, - 371, 372, 373, 257, 258, 259, 260, -1, -1, 263, - -1, -1, -1, -1, 268, -1, -1, 271, 272, -1, - -1, -1, -1, -1, -1, -1, -1, 96, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 33, -1, 337, 338, 339, 340, -1, 40, -1, - -1, -1, -1, 45, -1, -1, -1, -1, -1, -1, - -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 373, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 96, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, - 259, 260, -1, -1, 263, -1, -1, -1, -1, 268, - -1, -1, 271, 272, 33, -1, -1, -1, -1, -1, - -1, 40, -1, -1, -1, -1, 45, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, 96, 337, 338, - 339, 340, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 373, 257, 258, 259, 260, -1, - -1, 263, -1, -1, -1, -1, 268, -1, -1, 271, - 272, 33, -1, -1, -1, -1, -1, -1, 40, -1, - -1, -1, -1, 45, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, - -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, -1, 96, 337, 338, 339, 340, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 373, -1, -1, -1, -1, -1, -1, 257, 258, - 259, 260, -1, -1, 263, -1, -1, -1, -1, 268, - -1, -1, 271, 272, 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, 45, -1, -1, -1, + -1, -1, -1, -1, 355, 356, 357, 358, 359, 360, + 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 375, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, 96, 337, 338, - 339, 340, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 373, 257, 258, 259, 260, -1, - -1, 263, -1, -1, -1, -1, 268, -1, -1, 271, - 272, 33, -1, -1, -1, -1, -1, -1, 40, -1, - -1, -1, -1, 45, 46, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, - -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, -1, 96, 337, 338, 339, 340, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, + -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, + 45, -1, -1, -1, -1, -1, -1, -1, -1, 257, + 258, 259, 260, -1, -1, 263, -1, -1, -1, -1, + 268, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 284, 285, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 373, -1, -1, -1, -1, -1, -1, 257, 258, + -1, 96, -1, -1, -1, -1, -1, -1, -1, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, -1, -1, -1, -1, -1, 324, 325, 326, 327, + 328, 329, 330, 331, 332, 333, 334, -1, -1, 337, + 338, 339, 340, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 355, 356, 357, + 358, 359, 360, 361, 362, 363, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 375, 257, 258, 259, 260, -1, -1, 263, -1, -1, -1, -1, 268, - -1, -1, 271, 272, 33, -1, -1, -1, -1, -1, - -1, 40, -1, 42, -1, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 33, -1, 284, 285, -1, -1, -1, + 40, -1, -1, -1, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, 96, 337, 338, - 339, 340, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 373, 257, 258, 259, -1, -1, - -1, 263, -1, -1, -1, -1, 268, -1, -1, 271, - 272, 33, -1, -1, -1, -1, -1, -1, 40, -1, - -1, -1, -1, 45, -1, -1, -1, -1, -1, -1, + 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, + 339, 340, 257, 258, 259, 260, 96, -1, 263, -1, + -1, -1, -1, 268, -1, -1, 355, 356, 357, 358, + 359, 360, 361, 362, 363, -1, -1, 33, -1, 284, + 285, -1, -1, -1, 40, -1, 375, -1, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, - -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, -1, 96, 337, 338, 339, 340, -1, + -1, -1, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + -1, -1, 337, 338, 339, 340, -1, -1, -1, -1, + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, + -1, 33, -1, -1, -1, -1, -1, -1, 40, -1, + 375, -1, -1, 45, 46, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, - 259, -1, -1, -1, 263, -1, -1, -1, -1, 268, - -1, -1, 271, 272, 33, -1, -1, -1, -1, -1, - -1, 40, -1, -1, -1, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, 96, 337, 338, - 339, 340, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 257, 258, 259, -1, -1, - -1, 263, -1, -1, -1, -1, 268, -1, -1, 271, - 272, 33, -1, -1, -1, -1, -1, -1, 40, -1, - -1, -1, -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, - -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 334, -1, 96, 337, 338, 339, 340, -1, + -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, + 260, -1, -1, 263, 96, -1, -1, -1, 268, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, - 259, -1, -1, -1, 263, -1, -1, -1, -1, 268, - -1, -1, 271, 272, 33, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 284, 285, 33, -1, -1, -1, + -1, -1, -1, 40, -1, 42, -1, -1, 45, -1, + -1, -1, -1, -1, -1, -1, -1, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, + -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, -1, -1, 337, 338, 339, + 340, 257, 258, 259, 260, -1, -1, 263, -1, 96, + -1, -1, 268, -1, -1, 355, 356, 357, 358, 359, + 360, 361, 362, 363, -1, -1, -1, -1, 284, 285, + 33, -1, -1, -1, -1, 375, -1, 40, -1, -1, + -1, -1, 45, -1, -1, -1, -1, -1, -1, -1, + -1, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, + 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, + -1, 337, 338, 339, 340, 257, 258, 259, -1, -1, + -1, 263, -1, 96, -1, -1, 268, -1, -1, 355, + 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, + -1, -1, 284, 285, 33, -1, -1, -1, -1, 375, -1, 40, -1, -1, -1, -1, 45, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 307, 308, - 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, - -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, -1, 96, 337, 338, - 339, 340, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 257, 258, 259, -1, -1, - -1, 263, -1, -1, -1, -1, 268, -1, -1, 271, - 272, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, - 312, 313, 314, 315, 316, 317, 318, -1, -1, 91, + 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, 339, 340, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 123, -1, 355, 356, 357, 358, 359, 360, 361, - 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, - 259, -1, -1, -1, 263, -1, -1, -1, -1, 268, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 257, 258, 259, -1, -1, -1, 263, 96, -1, -1, + -1, 268, -1, 355, 356, 357, 358, 359, 360, 361, + 362, 363, -1, -1, -1, -1, -1, 284, 285, 33, + -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, + -1, 45, -1, -1, -1, -1, -1, -1, -1, -1, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, -1, -1, + 337, 338, 339, 340, 257, 258, 259, -1, -1, -1, + 263, -1, 96, -1, -1, 268, -1, -1, 355, 356, + 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, + -1, 284, 285, 33, -1, -1, -1, -1, -1, -1, + 40, -1, -1, -1, -1, 45, -1, -1, -1, -1, + -1, -1, -1, -1, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, + -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, -1, -1, 337, 338, 339, 340, 257, 258, + 259, -1, -1, -1, 263, -1, 96, -1, -1, 268, + -1, -1, 355, 356, 357, 358, 359, 360, 361, 362, + 363, -1, -1, -1, -1, 284, 285, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, -1, -1, 337, 338, - 339, 340, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 257, 258, -1, 260, 261, - -1, -1, -1, -1, -1, -1, -1, 269, 270, 271, - 272, 273, 274, 275, 276, 277, 278, 279, 280, -1, - -1, 283, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 339, 340, -1, 257, 258, 259, -1, -1, -1, 263, + -1, -1, -1, -1, 268, -1, 355, 356, 357, 358, + 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, + 284, 285, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, -1, -1, -1, -1, -1, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, -1, -1, 337, 338, 339, 340, 257, 258, 259, + -1, -1, -1, 263, -1, -1, -1, -1, 268, -1, + -1, 355, 356, 357, 358, 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 335, -1, -1, -1, -1, -1, 341, - 342, -1, -1, 345, -1, 347, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 364, -1, 366, -1, -1, -1, -1, -1, - -1, 373, 374, + -1, -1, -1, -1, -1, -1, -1, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, -1, + -1, -1, -1, -1, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334, -1, -1, 337, 338, 339, + 340, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 355, 356, 357, 358, 359, + 360, 361, 362, 363, }; #define YYFINAL 2 #ifndef YYDEBUG #define YYDEBUG 0 #endif -#define YYMAXTOKEN 376 +#define YYMAXTOKEN 378 #if YYDEBUG -char *yyname[] = { +static const char *yyname[] = { + "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, "'!'",0,0,0,"'%'",0,0,"'('","')'","'*'","'+'","','","'-'","'.'","'/'",0,0,0,0,0, 0,0,0,0,0,"':'","';'","'<'","'='","'>'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -3197,21 +3348,21 @@ char *yyname[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"LABEL","VARIABLE","NUMBER", "TEXT","COMMAND_LINE","DELIMITED","ORDINAL","TH","LEFT_ARROW_HEAD", -"RIGHT_ARROW_HEAD","DOUBLE_ARROW_HEAD","LAST","UP","DOWN","LEFT","RIGHT","BOX", -"CIRCLE","ELLIPSE","ARC","LINE","ARROW","MOVE","SPLINE","HEIGHT","RADIUS", -"FIGNAME","WIDTH","DIAMETER","FROM","TO","AT","WITH","BY","THEN","SOLID", -"DOTTED","DASHED","CHOP","SAME","INVISIBLE","LJUST","RJUST","ABOVE","BELOW", -"OF","THE","WAY","BETWEEN","AND","HERE","DOT_N","DOT_E","DOT_W","DOT_S", -"DOT_NE","DOT_SE","DOT_NW","DOT_SW","DOT_C","DOT_START","DOT_END","DOT_X", -"DOT_Y","DOT_HT","DOT_WID","DOT_RAD","SIN","COS","ATAN2","LOG","EXP","SQRT", -"K_MAX","K_MIN","INT","RAND","SRAND","COPY","THRU","TOP","BOTTOM","UPPER", -"LOWER","SH","PRINT","CW","CCW","FOR","DO","IF","ELSE","ANDAND","OROR", -"NOTEQUAL","EQUALEQUAL","LESSEQUAL","GREATEREQUAL","LEFT_CORNER","RIGHT_CORNER", -"NORTH","SOUTH","EAST","WEST","CENTER","END","START","RESET","UNTIL","PLOT", -"THICKNESS","FILL","COLORED","OUTLINED","SHADED","ALIGNED","SPRINTF","COMMAND", -"DEFINE","UNDEF", +"RIGHT_ARROW_HEAD","DOUBLE_ARROW_HEAD","LAST","BOX","CIRCLE","ELLIPSE","ARC", +"LINE","ARROW","MOVE","SPLINE","HEIGHT","RADIUS","FIGNAME","WIDTH","DIAMETER", +"UP","DOWN","RIGHT","LEFT","FROM","TO","AT","WITH","BY","THEN","SOLID","DOTTED", +"DASHED","CHOP","SAME","INVISIBLE","LJUST","RJUST","ABOVE","BELOW","OF","THE", +"WAY","BETWEEN","AND","HERE","DOT_N","DOT_E","DOT_W","DOT_S","DOT_NE","DOT_SE", +"DOT_NW","DOT_SW","DOT_C","DOT_START","DOT_END","DOT_X","DOT_Y","DOT_HT", +"DOT_WID","DOT_RAD","SIN","COS","ATAN2","LOG","EXP","SQRT","K_MAX","K_MIN", +"INT","RAND","SRAND","COPY","THRU","TOP","BOTTOM","UPPER","LOWER","SH","PRINT", +"CW","CCW","FOR","DO","IF","ELSE","ANDAND","OROR","NOTEQUAL","EQUALEQUAL", +"LESSEQUAL","GREATEREQUAL","LEFT_CORNER","RIGHT_CORNER","NORTH","SOUTH","EAST", +"WEST","CENTER","END","START","RESET","UNTIL","PLOT","THICKNESS","FILL", +"COLORED","OUTLINED","SHADED","XSLANTED","YSLANTED","ALIGNED","SPRINTF", +"COMMAND","DEFINE","UNDEF", }; -char *yyrule[] = { +static const char *yyrule[] = { "$accept : top", "top : optional_separator", "top : element_list", @@ -3326,6 +3477,8 @@ char *yyrule[] = { "object_spec : object_spec DASHED expr", "object_spec : object_spec FILL", "object_spec : object_spec FILL expr", +"object_spec : object_spec XSLANTED expr", +"object_spec : object_spec YSLANTED expr", "object_spec : object_spec SHADED text", "object_spec : object_spec COLORED text", "object_spec : object_spec OUTLINED text", @@ -3468,31 +3621,43 @@ char *yyrule[] = { "expr : expr ANDAND expr", "expr : expr OROR expr", "expr : '!' expr", + }; #endif +#if YYDEBUG +#include +#endif + +/* define the initial stack-sizes */ #ifdef YYSTACKSIZE #undef YYMAXDEPTH -#define YYMAXDEPTH YYSTACKSIZE +#define YYMAXDEPTH YYSTACKSIZE #else #ifdef YYMAXDEPTH #define YYSTACKSIZE YYMAXDEPTH #else #define YYSTACKSIZE 500 -#define YYMAXDEPTH 500 +#define YYMAXDEPTH 500 #endif #endif -int yydebug; -int yynerrs; -int yyerrflag; -int yychar; -short *yyssp; + +#define YYINITSTACKSIZE 500 + +int yydebug; +int yynerrs; +int yyerrflag; +int yychar; +short *yyssp; YYSTYPE *yyvsp; -YYSTYPE yyval; -YYSTYPE yylval; -short yyss[YYSTACKSIZE]; -YYSTYPE yyvs[YYSTACKSIZE]; -#define yystacksize YYSTACKSIZE -#line 1643 "pic.y" +YYSTYPE yyval; +YYSTYPE yylval; + +/* variables for the parser stack */ +static short *yyss; +static short *yysslim; +static YYSTYPE *yyvs; +static unsigned yystacksize; +#line 1667 "pic.y" /* bison defines const to be empty unless __STDC__ is defined, which it isn't under cfront */ @@ -3749,24 +3914,57 @@ char *do_sprintf(const char *form, const double *v, int nv) result += '\0'; return strsave(result.contents()); } -#line 3753 "y.tab.c" -#define YYABORT goto yyabort +#line 3917 "pic.cpp" +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(void) +{ + int i; + unsigned newsize; + short *newss; + YYSTYPE *newvs; + + if ((newsize = yystacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return -1; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = yyssp - yyss; + newss = (yyss != 0) + ? (short *)realloc(yyss, newsize * sizeof(*newss)) + : (short *)malloc(newsize * sizeof(*newss)); + if (newss == 0) + return -1; + + yyss = newss; + yyssp = newss + i; + newvs = (yyvs != 0) + ? (YYSTYPE *)realloc(yyvs, newsize * sizeof(*newvs)) + : (YYSTYPE *)malloc(newsize * sizeof(*newvs)); + if (newvs == 0) + return -1; + + yyvs = newvs; + yyvsp = newvs + i; + yystacksize = newsize; + yysslim = yyss + newsize - 1; + return 0; +} + +#define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept -#define YYERROR goto yyerrlab +#define YYERROR goto yyerrlab + int -#if defined(__STDC__) -yyparse(void) -#else -yyparse() -#endif +YYPARSE_DECL() { - register int yym, yyn, yystate; + int yym, yyn, yystate; #if YYDEBUG - register char *yys; - extern char *getenv(); + const char *yys; - if (yys = getenv("YYDEBUG")) + if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') @@ -3776,11 +3974,14 @@ yyparse() yynerrs = 0; yyerrflag = 0; - yychar = (-1); + yychar = YYEMPTY; + yystate = 0; + if (yyss == NULL && yygrowstack()) goto yyoverflow; yyssp = yyss; yyvsp = yyvs; - *yyssp = yystate = 0; + yystate = 0; + *yyssp = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; @@ -3806,13 +4007,14 @@ yyloop: printf("%sdebug: state %d, shifting to state %d\n", YYPREFIX, yystate, yytable[yyn]); #endif - if (yyssp >= yyss + yystacksize - 1) + if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } - *++yyssp = yystate = yytable[yyn]; + yystate = yytable[yyn]; + *++yyssp = yytable[yyn]; *++yyvsp = yylval; - yychar = (-1); + yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } @@ -3823,16 +4025,14 @@ yyloop: goto yyreduce; } if (yyerrflag) goto yyinrecovery; -#ifdef lint - goto yynewerror; -#endif -yynewerror: + yyerror("syntax error"); -#ifdef lint + goto yyerrlab; -#endif + yyerrlab: ++yynerrs; + yyinrecovery: if (yyerrflag < 3) { @@ -3847,11 +4047,12 @@ yyinrecovery: printf("%sdebug: state %d, error recovery shifting\ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); #endif - if (yyssp >= yyss + yystacksize - 1) + if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } - *++yyssp = yystate = yytable[yyn]; + yystate = yytable[yyn]; + *++yyssp = yytable[yyn]; *++yyvsp = yylval; goto yyloop; } @@ -3881,9 +4082,10 @@ yyinrecovery: YYPREFIX, yystate, yychar, yys); } #endif - yychar = (-1); + yychar = YYEMPTY; goto yyloop; } + yyreduce: #if YYDEBUG if (yydebug) @@ -3891,31 +4093,34 @@ yyreduce: YYPREFIX, yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; - yyval = yyvsp[1-yym]; + if (yym) + yyval = yyvsp[1-yym]; + else + memset(&yyval, 0, sizeof yyval); switch (yyn) { case 2: -#line 278 "pic.y" -{ +#line 277 "pic.y" + { if (olist.head) print_picture(olist.head); } break; case 3: -#line 287 "pic.y" -{ yyval.pl = yyvsp[-1].pl; } +#line 286 "pic.y" + { yyval.pl = yyvsp[-1].pl; } break; case 4: -#line 292 "pic.y" -{ yyval.pl = yyvsp[0].pl; } +#line 291 "pic.y" + { yyval.pl = yyvsp[0].pl; } break; case 5: -#line 294 "pic.y" -{ yyval.pl = yyvsp[-2].pl; } +#line 293 "pic.y" + { yyval.pl = yyvsp[-2].pl; } break; case 10: -#line 309 "pic.y" -{ +#line 308 "pic.y" + { a_delete graphname; graphname = new char[strlen(yyvsp[0].str) + 1]; strcpy(graphname, yyvsp[0].str); @@ -3923,15 +4128,15 @@ case 10: } break; case 11: -#line 317 "pic.y" -{ +#line 316 "pic.y" + { define_variable(yyvsp[-2].str, yyvsp[0].x); a_delete yyvsp[-2].str; } break; case 12: -#line 322 "pic.y" -{ +#line 321 "pic.y" + { place *p = lookup_label(yyvsp[-3].str); if (!p) { lex_error("variable `%1' not defined", yyvsp[-3].str); @@ -3944,50 +4149,50 @@ case 12: } break; case 13: -#line 334 "pic.y" -{ current_direction = UP_DIRECTION; } +#line 333 "pic.y" + { current_direction = UP_DIRECTION; } break; case 14: -#line 336 "pic.y" -{ current_direction = DOWN_DIRECTION; } +#line 335 "pic.y" + { current_direction = DOWN_DIRECTION; } break; case 15: -#line 338 "pic.y" -{ current_direction = LEFT_DIRECTION; } +#line 337 "pic.y" + { current_direction = LEFT_DIRECTION; } break; case 16: -#line 340 "pic.y" -{ current_direction = RIGHT_DIRECTION; } +#line 339 "pic.y" + { current_direction = RIGHT_DIRECTION; } break; case 17: -#line 342 "pic.y" -{ +#line 341 "pic.y" + { olist.append(make_command_object(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, yyvsp[0].lstr.lineno)); } break; case 18: -#line 347 "pic.y" -{ +#line 346 "pic.y" + { olist.append(make_command_object(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, yyvsp[0].lstr.lineno)); } break; case 19: -#line 352 "pic.y" -{ +#line 351 "pic.y" + { fprintf(stderr, "%s\n", yyvsp[0].lstr.str); a_delete yyvsp[0].lstr.str; fflush(stderr); } break; case 20: -#line 358 "pic.y" -{ delim_flag = 1; } +#line 357 "pic.y" + { delim_flag = 1; } break; case 21: -#line 360 "pic.y" -{ +#line 359 "pic.y" + { delim_flag = 0; if (safer_flag) lex_error("unsafe to run command `%1'", yyvsp[0].str); @@ -3997,8 +4202,8 @@ case 21: } break; case 22: -#line 369 "pic.y" -{ +#line 368 "pic.y" + { if (yychar < 0) do_lookahead(); do_copy(yyvsp[0].lstr.str); @@ -4006,16 +4211,16 @@ case 22: } break; case 23: -#line 376 "pic.y" -{ delim_flag = 2; } +#line 375 "pic.y" + { delim_flag = 2; } break; case 24: -#line 378 "pic.y" -{ delim_flag = 0; } +#line 377 "pic.y" + { delim_flag = 0; } break; case 25: -#line 380 "pic.y" -{ +#line 379 "pic.y" + { if (yychar < 0) do_lookahead(); copy_file_thru(yyvsp[-5].lstr.str, yyvsp[-2].str, yyvsp[0].str); @@ -4025,16 +4230,16 @@ case 25: } break; case 26: -#line 389 "pic.y" -{ delim_flag = 2; } +#line 388 "pic.y" + { delim_flag = 2; } break; case 27: -#line 391 "pic.y" -{ delim_flag = 0; } +#line 390 "pic.y" + { delim_flag = 0; } break; case 28: -#line 393 "pic.y" -{ +#line 392 "pic.y" + { if (yychar < 0) do_lookahead(); copy_rest_thru(yyvsp[-2].str, yyvsp[0].str); @@ -4043,12 +4248,12 @@ case 28: } break; case 29: -#line 401 "pic.y" -{ delim_flag = 1; } +#line 400 "pic.y" + { delim_flag = 1; } break; case 30: -#line 403 "pic.y" -{ +#line 402 "pic.y" + { delim_flag = 0; if (yychar < 0) do_lookahead(); @@ -4056,8 +4261,8 @@ case 30: } break; case 31: -#line 410 "pic.y" -{ +#line 409 "pic.y" + { if (yychar < 0) do_lookahead(); if (yyvsp[0].if_data.x != 0.0) @@ -4066,12 +4271,12 @@ case 31: } break; case 32: -#line 418 "pic.y" -{ delim_flag = 1; } +#line 417 "pic.y" + { delim_flag = 1; } break; case 33: -#line 420 "pic.y" -{ +#line 419 "pic.y" + { delim_flag = 0; if (yychar < 0) do_lookahead(); @@ -4084,37 +4289,37 @@ case 33: } break; case 35: -#line 433 "pic.y" -{ define_variable("scale", 1.0); } +#line 432 "pic.y" + { define_variable("scale", 1.0); } break; case 38: -#line 443 "pic.y" -{ +#line 442 "pic.y" + { reset(yyvsp[0].str); a_delete yyvsp[0].str; } break; case 39: -#line 448 "pic.y" -{ +#line 447 "pic.y" + { reset(yyvsp[0].str); a_delete yyvsp[0].str; } break; case 40: -#line 453 "pic.y" -{ +#line 452 "pic.y" + { reset(yyvsp[0].str); a_delete yyvsp[0].str; } break; case 41: -#line 461 "pic.y" -{ yyval.lstr = yyvsp[0].lstr; } +#line 460 "pic.y" + { yyval.lstr = yyvsp[0].lstr; } break; case 42: -#line 463 "pic.y" -{ +#line 462 "pic.y" + { yyval.lstr.str = new char[strlen(yyvsp[-1].lstr.str) + strlen(yyvsp[0].lstr.str) + 1]; strcpy(yyval.lstr.str, yyvsp[-1].lstr.str); strcat(yyval.lstr.str, yyvsp[0].lstr.str); @@ -4131,8 +4336,8 @@ case 42: } break; case 43: -#line 482 "pic.y" -{ +#line 481 "pic.y" + { yyval.lstr.str = new char[GDIGITS + 1]; sprintf(yyval.lstr.str, "%g", yyvsp[0].x); yyval.lstr.filename = 0; @@ -4140,12 +4345,12 @@ case 43: } break; case 44: -#line 489 "pic.y" -{ yyval.lstr = yyvsp[0].lstr; } +#line 488 "pic.y" + { yyval.lstr = yyvsp[0].lstr; } break; case 45: -#line 491 "pic.y" -{ +#line 490 "pic.y" + { yyval.lstr.str = new char[GDIGITS + 2 + GDIGITS + 1]; sprintf(yyval.lstr.str, "%g, %g", yyvsp[0].pair.x, yyvsp[0].pair.y); yyval.lstr.filename = 0; @@ -4153,101 +4358,101 @@ case 45: } break; case 46: -#line 501 "pic.y" -{ delim_flag = 1; } +#line 500 "pic.y" + { delim_flag = 1; } break; case 47: -#line 503 "pic.y" -{ +#line 502 "pic.y" + { delim_flag = 0; yyval.if_data.x = yyvsp[-3].x; yyval.if_data.body = yyvsp[0].str; } break; case 48: -#line 512 "pic.y" -{ yyval.str = 0; } +#line 511 "pic.y" + { yyval.str = 0; } break; case 49: -#line 514 "pic.y" -{ yyval.str = yyvsp[0].lstr.str; } +#line 513 "pic.y" + { yyval.str = yyvsp[0].lstr.str; } break; case 50: -#line 519 "pic.y" -{ yyval.x = yyvsp[0].x; } +#line 518 "pic.y" + { yyval.x = yyvsp[0].x; } break; case 51: -#line 521 "pic.y" -{ yyval.x = yyvsp[0].x; } +#line 520 "pic.y" + { yyval.x = yyvsp[0].x; } break; case 52: -#line 526 "pic.y" -{ +#line 525 "pic.y" + { yyval.x = strcmp(yyvsp[-2].lstr.str, yyvsp[0].lstr.str) == 0; a_delete yyvsp[-2].lstr.str; a_delete yyvsp[0].lstr.str; } break; case 53: -#line 532 "pic.y" -{ +#line 531 "pic.y" + { yyval.x = strcmp(yyvsp[-2].lstr.str, yyvsp[0].lstr.str) != 0; a_delete yyvsp[-2].lstr.str; a_delete yyvsp[0].lstr.str; } break; case 54: -#line 538 "pic.y" -{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } +#line 537 "pic.y" + { yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } break; case 55: -#line 540 "pic.y" -{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } +#line 539 "pic.y" + { yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } break; case 56: -#line 542 "pic.y" -{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } +#line 541 "pic.y" + { yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } break; case 57: -#line 544 "pic.y" -{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } +#line 543 "pic.y" + { yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } break; case 58: -#line 546 "pic.y" -{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } +#line 545 "pic.y" + { yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } break; case 59: -#line 548 "pic.y" -{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } +#line 547 "pic.y" + { yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } break; case 60: -#line 550 "pic.y" -{ yyval.x = (yyvsp[0].x == 0.0); } +#line 549 "pic.y" + { yyval.x = (yyvsp[0].x == 0.0); } break; case 61: -#line 556 "pic.y" -{ +#line 555 "pic.y" + { yyval.by.val = 1.0; yyval.by.is_multiplicative = 0; } break; case 62: -#line 561 "pic.y" -{ +#line 560 "pic.y" + { yyval.by.val = yyvsp[0].x; yyval.by.is_multiplicative = 0; } break; case 63: -#line 566 "pic.y" -{ +#line 565 "pic.y" + { yyval.by.val = yyvsp[0].x; yyval.by.is_multiplicative = 1; } break; case 64: -#line 574 "pic.y" -{ +#line 573 "pic.y" + { yyval.pl.obj = yyvsp[0].spec->make_object(¤t_position, ¤t_direction); if (yyval.pl.obj == 0) @@ -4262,16 +4467,16 @@ case 64: } break; case 65: -#line 588 "pic.y" -{ +#line 587 "pic.y" + { yyval.pl = yyvsp[0].pl; define_label(yyvsp[-3].str, & yyval.pl); a_delete yyvsp[-3].str; } break; case 66: -#line 594 "pic.y" -{ +#line 593 "pic.y" + { yyval.pl.obj = 0; yyval.pl.x = yyvsp[0].pair.x; yyval.pl.y = yyvsp[0].pair.y; @@ -4280,73 +4485,73 @@ case 66: } break; case 67: -#line 602 "pic.y" -{ +#line 601 "pic.y" + { yyval.pl = yyvsp[0].pl; define_label(yyvsp[-3].str, & yyval.pl); a_delete yyvsp[-3].str; } break; case 68: -#line 608 "pic.y" -{ +#line 607 "pic.y" + { yyval.state.x = current_position.x; yyval.state.y = current_position.y; yyval.state.dir = current_direction; } break; case 69: -#line 614 "pic.y" -{ +#line 613 "pic.y" + { current_position.x = yyvsp[-2].state.x; current_position.y = yyvsp[-2].state.y; current_direction = yyvsp[-2].state.dir; } break; case 70: -#line 620 "pic.y" -{ +#line 619 "pic.y" + { yyval.pl = yyvsp[-3].pl; } break; case 71: -#line 624 "pic.y" -{ +#line 623 "pic.y" + { yyval.pl.obj = 0; yyval.pl.x = current_position.x; yyval.pl.y = current_position.y; } break; case 72: -#line 633 "pic.y" -{} +#line 632 "pic.y" + {} break; case 73: -#line 635 "pic.y" -{} +#line 634 "pic.y" + {} break; case 74: -#line 640 "pic.y" -{ yyval.spec = new object_spec(BOX_OBJECT); } +#line 639 "pic.y" + { yyval.spec = new object_spec(BOX_OBJECT); } break; case 75: -#line 642 "pic.y" -{ yyval.spec = new object_spec(CIRCLE_OBJECT); } +#line 641 "pic.y" + { yyval.spec = new object_spec(CIRCLE_OBJECT); } break; case 76: -#line 644 "pic.y" -{ yyval.spec = new object_spec(ELLIPSE_OBJECT); } +#line 643 "pic.y" + { yyval.spec = new object_spec(ELLIPSE_OBJECT); } break; case 77: -#line 646 "pic.y" -{ +#line 645 "pic.y" + { yyval.spec = new object_spec(ARC_OBJECT); yyval.spec->dir = current_direction; } break; case 78: -#line 651 "pic.y" -{ +#line 650 "pic.y" + { yyval.spec = new object_spec(LINE_OBJECT); lookup_variable("lineht", & yyval.spec->segment_height); lookup_variable("linewid", & yyval.spec->segment_width); @@ -4354,8 +4559,8 @@ case 78: } break; case 79: -#line 658 "pic.y" -{ +#line 657 "pic.y" + { yyval.spec = new object_spec(ARROW_OBJECT); lookup_variable("lineht", & yyval.spec->segment_height); lookup_variable("linewid", & yyval.spec->segment_width); @@ -4363,8 +4568,8 @@ case 79: } break; case 80: -#line 665 "pic.y" -{ +#line 664 "pic.y" + { yyval.spec = new object_spec(MOVE_OBJECT); lookup_variable("moveht", & yyval.spec->segment_height); lookup_variable("movewid", & yyval.spec->segment_width); @@ -4372,8 +4577,8 @@ case 80: } break; case 81: -#line 672 "pic.y" -{ +#line 671 "pic.y" + { yyval.spec = new object_spec(SPLINE_OBJECT); lookup_variable("lineht", & yyval.spec->segment_height); lookup_variable("linewid", & yyval.spec->segment_width); @@ -4381,22 +4586,22 @@ case 81: } break; case 82: -#line 679 "pic.y" -{ +#line 678 "pic.y" + { yyval.spec = new object_spec(TEXT_OBJECT); yyval.spec->text = new text_item(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, yyvsp[0].lstr.lineno); } break; case 83: -#line 684 "pic.y" -{ +#line 683 "pic.y" + { yyval.spec = new object_spec(TEXT_OBJECT); yyval.spec->text = new text_item(format_number(0, yyvsp[0].x), 0, -1); } break; case 84: -#line 689 "pic.y" -{ +#line 688 "pic.y" + { yyval.spec = new object_spec(TEXT_OBJECT); yyval.spec->text = new text_item(format_number(yyvsp[0].lstr.str, yyvsp[-1].x), yyvsp[0].lstr.filename, yyvsp[0].lstr.lineno); @@ -4404,8 +4609,8 @@ case 84: } break; case 85: -#line 696 "pic.y" -{ +#line 695 "pic.y" + { saved_state *p = new saved_state; yyval.pstate = p; p->x = current_position.x; @@ -4421,8 +4626,8 @@ case 85: } break; case 86: -#line 711 "pic.y" -{ +#line 710 "pic.y" + { current_position.x = yyvsp[-2].pstate->x; current_position.y = yyvsp[-2].pstate->y; current_direction = yyvsp[-2].pstate->dir; @@ -4435,40 +4640,40 @@ case 86: } break; case 87: -#line 723 "pic.y" -{ +#line 722 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->height = yyvsp[0].x; yyval.spec->flags |= HAS_HEIGHT; } break; case 88: -#line 729 "pic.y" -{ +#line 728 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->radius = yyvsp[0].x; yyval.spec->flags |= HAS_RADIUS; } break; case 89: -#line 735 "pic.y" -{ +#line 734 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->width = yyvsp[0].x; yyval.spec->flags |= HAS_WIDTH; } break; case 90: -#line 741 "pic.y" -{ +#line 740 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->radius = yyvsp[0].x/2.0; yyval.spec->flags |= HAS_RADIUS; } break; case 91: -#line 747 "pic.y" -{ +#line 746 "pic.y" + { yyval.spec = yyvsp[-1].spec; yyval.spec->flags |= HAS_SEGMENT; switch (yyval.spec->dir) { @@ -4488,8 +4693,8 @@ case 91: } break; case 92: -#line 766 "pic.y" -{ +#line 765 "pic.y" + { yyval.spec = yyvsp[-1].spec; yyval.spec->dir = UP_DIRECTION; yyval.spec->flags |= HAS_SEGMENT; @@ -4497,8 +4702,8 @@ case 92: } break; case 93: -#line 773 "pic.y" -{ +#line 772 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->dir = UP_DIRECTION; yyval.spec->flags |= HAS_SEGMENT; @@ -4506,8 +4711,8 @@ case 93: } break; case 94: -#line 780 "pic.y" -{ +#line 779 "pic.y" + { yyval.spec = yyvsp[-1].spec; yyval.spec->dir = DOWN_DIRECTION; yyval.spec->flags |= HAS_SEGMENT; @@ -4515,8 +4720,8 @@ case 94: } break; case 95: -#line 787 "pic.y" -{ +#line 786 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->dir = DOWN_DIRECTION; yyval.spec->flags |= HAS_SEGMENT; @@ -4524,8 +4729,8 @@ case 95: } break; case 96: -#line 794 "pic.y" -{ +#line 793 "pic.y" + { yyval.spec = yyvsp[-1].spec; yyval.spec->dir = RIGHT_DIRECTION; yyval.spec->flags |= HAS_SEGMENT; @@ -4533,8 +4738,8 @@ case 96: } break; case 97: -#line 801 "pic.y" -{ +#line 800 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->dir = RIGHT_DIRECTION; yyval.spec->flags |= HAS_SEGMENT; @@ -4542,8 +4747,8 @@ case 97: } break; case 98: -#line 808 "pic.y" -{ +#line 807 "pic.y" + { yyval.spec = yyvsp[-1].spec; yyval.spec->dir = LEFT_DIRECTION; yyval.spec->flags |= HAS_SEGMENT; @@ -4551,8 +4756,8 @@ case 98: } break; case 99: -#line 815 "pic.y" -{ +#line 814 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->dir = LEFT_DIRECTION; yyval.spec->flags |= HAS_SEGMENT; @@ -4560,8 +4765,8 @@ case 99: } break; case 100: -#line 822 "pic.y" -{ +#line 821 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->flags |= HAS_FROM; yyval.spec->from.x = yyvsp[0].pair.x; @@ -4569,8 +4774,8 @@ case 100: } break; case 101: -#line 829 "pic.y" -{ +#line 828 "pic.y" + { yyval.spec = yyvsp[-2].spec; if (yyval.spec->flags & HAS_SEGMENT) yyval.spec->segment_list = new segment(yyval.spec->segment_pos, @@ -4586,8 +4791,8 @@ case 101: } break; case 102: -#line 844 "pic.y" -{ +#line 843 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->flags |= HAS_AT; yyval.spec->at.x = yyvsp[0].pair.x; @@ -4600,16 +4805,16 @@ case 102: } break; case 103: -#line 856 "pic.y" -{ +#line 855 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->flags |= HAS_WITH; yyval.spec->with = yyvsp[0].pth; } break; case 104: -#line 862 "pic.y" -{ +#line 861 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->flags |= HAS_WITH; position pos; @@ -4619,8 +4824,8 @@ case 104: } break; case 105: -#line 871 "pic.y" -{ +#line 870 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->flags |= HAS_SEGMENT; yyval.spec->segment_pos.x += yyvsp[0].pair.x; @@ -4628,84 +4833,113 @@ case 105: } break; case 106: -#line 878 "pic.y" -{ +#line 877 "pic.y" + { yyval.spec = yyvsp[-1].spec; - if (yyval.spec->flags & HAS_SEGMENT) { - yyval.spec->segment_list = new segment(yyval.spec->segment_pos, - yyval.spec->segment_is_absolute, - yyval.spec->segment_list); - yyval.spec->flags &= ~HAS_SEGMENT; - yyval.spec->segment_pos.x = yyval.spec->segment_pos.y = 0.0; - yyval.spec->segment_is_absolute = 0; - } + if (!(yyval.spec->flags & HAS_SEGMENT)) + switch (yyval.spec->dir) { + case UP_DIRECTION: + yyval.spec->segment_pos.y += yyval.spec->segment_width; + break; + case DOWN_DIRECTION: + yyval.spec->segment_pos.y -= yyval.spec->segment_width; + break; + case RIGHT_DIRECTION: + yyval.spec->segment_pos.x += yyval.spec->segment_width; + break; + case LEFT_DIRECTION: + yyval.spec->segment_pos.x -= yyval.spec->segment_width; + break; + } + yyval.spec->segment_list = new segment(yyval.spec->segment_pos, + yyval.spec->segment_is_absolute, + yyval.spec->segment_list); + yyval.spec->flags &= ~HAS_SEGMENT; + yyval.spec->segment_pos.x = yyval.spec->segment_pos.y = 0.0; + yyval.spec->segment_is_absolute = 0; } break; case 107: -#line 890 "pic.y" -{ +#line 902 "pic.y" + { yyval.spec = yyvsp[-1].spec; /* nothing*/ } break; case 108: -#line 894 "pic.y" -{ +#line 906 "pic.y" + { yyval.spec = yyvsp[-1].spec; yyval.spec->flags |= IS_DOTTED; lookup_variable("dashwid", & yyval.spec->dash_width); } break; case 109: -#line 900 "pic.y" -{ +#line 912 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->flags |= IS_DOTTED; yyval.spec->dash_width = yyvsp[0].x; } break; case 110: -#line 906 "pic.y" -{ +#line 918 "pic.y" + { yyval.spec = yyvsp[-1].spec; yyval.spec->flags |= IS_DASHED; lookup_variable("dashwid", & yyval.spec->dash_width); } break; case 111: -#line 912 "pic.y" -{ +#line 924 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->flags |= IS_DASHED; yyval.spec->dash_width = yyvsp[0].x; } break; case 112: -#line 918 "pic.y" -{ +#line 930 "pic.y" + { yyval.spec = yyvsp[-1].spec; yyval.spec->flags |= IS_DEFAULT_FILLED; } break; case 113: -#line 923 "pic.y" -{ +#line 935 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->flags |= IS_FILLED; yyval.spec->fill = yyvsp[0].x; } break; case 114: -#line 929 "pic.y" -{ +#line 941 "pic.y" + { + yyval.spec = yyvsp[-2].spec; + yyval.spec->flags |= IS_XSLANTED; + yyval.spec->xslanted = yyvsp[0].x; + } +break; +case 115: +#line 947 "pic.y" + { + yyval.spec = yyvsp[-2].spec; + yyval.spec->flags |= IS_YSLANTED; + yyval.spec->yslanted = yyvsp[0].x; + } +break; +case 116: +#line 953 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->flags |= (IS_SHADED | IS_FILLED); yyval.spec->shaded = new char[strlen(yyvsp[0].lstr.str)+1]; strcpy(yyval.spec->shaded, yyvsp[0].lstr.str); } break; -case 115: -#line 936 "pic.y" -{ +case 117: +#line 960 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->flags |= (IS_SHADED | IS_OUTLINED | IS_FILLED); yyval.spec->shaded = new char[strlen(yyvsp[0].lstr.str)+1]; @@ -4714,18 +4948,18 @@ case 115: strcpy(yyval.spec->outlined, yyvsp[0].lstr.str); } break; -case 116: -#line 945 "pic.y" -{ +case 118: +#line 969 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->flags |= IS_OUTLINED; yyval.spec->outlined = new char[strlen(yyvsp[0].lstr.str)+1]; strcpy(yyval.spec->outlined, yyvsp[0].lstr.str); } break; -case 117: -#line 952 "pic.y" -{ +case 119: +#line 976 "pic.y" + { yyval.spec = yyvsp[-1].spec; /* line chop chop means line chop 0 chop 0*/ if (yyval.spec->flags & IS_DEFAULT_CHOPPED) { @@ -4741,9 +4975,9 @@ case 117: } } break; -case 118: -#line 968 "pic.y" -{ +case 120: +#line 992 "pic.y" + { yyval.spec = yyvsp[-2].spec; if (yyval.spec->flags & IS_DEFAULT_CHOPPED) { yyval.spec->flags |= IS_CHOPPED; @@ -4760,58 +4994,58 @@ case 118: } } break; -case 119: -#line 985 "pic.y" -{ +case 121: +#line 1009 "pic.y" + { yyval.spec = yyvsp[-1].spec; yyval.spec->flags |= IS_SAME; } break; -case 120: -#line 990 "pic.y" -{ +case 122: +#line 1014 "pic.y" + { yyval.spec = yyvsp[-1].spec; yyval.spec->flags |= IS_INVISIBLE; } break; -case 121: -#line 995 "pic.y" -{ +case 123: +#line 1019 "pic.y" + { yyval.spec = yyvsp[-1].spec; yyval.spec->flags |= HAS_LEFT_ARROW_HEAD; } break; -case 122: -#line 1000 "pic.y" -{ +case 124: +#line 1024 "pic.y" + { yyval.spec = yyvsp[-1].spec; yyval.spec->flags |= HAS_RIGHT_ARROW_HEAD; } break; -case 123: -#line 1005 "pic.y" -{ +case 125: +#line 1029 "pic.y" + { yyval.spec = yyvsp[-1].spec; yyval.spec->flags |= (HAS_LEFT_ARROW_HEAD|HAS_RIGHT_ARROW_HEAD); } break; -case 124: -#line 1010 "pic.y" -{ +case 126: +#line 1034 "pic.y" + { yyval.spec = yyvsp[-1].spec; yyval.spec->flags |= IS_CLOCKWISE; } break; -case 125: -#line 1015 "pic.y" -{ +case 127: +#line 1039 "pic.y" + { yyval.spec = yyvsp[-1].spec; yyval.spec->flags &= ~IS_CLOCKWISE; } break; -case 126: -#line 1020 "pic.y" -{ +case 128: +#line 1044 "pic.y" + { yyval.spec = yyvsp[-1].spec; text_item **p; for (p = & yyval.spec->text; *p; p = &(*p)->next) @@ -4819,9 +5053,9 @@ case 126: *p = new text_item(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, yyvsp[0].lstr.lineno); } break; -case 127: -#line 1028 "pic.y" -{ +case 129: +#line 1052 "pic.y" + { yyval.spec = yyvsp[-1].spec; if (yyval.spec->text) { text_item *p; @@ -4831,9 +5065,9 @@ case 127: } } break; -case 128: -#line 1038 "pic.y" -{ +case 130: +#line 1062 "pic.y" + { yyval.spec = yyvsp[-1].spec; if (yyval.spec->text) { text_item *p; @@ -4843,9 +5077,9 @@ case 128: } } break; -case 129: -#line 1048 "pic.y" -{ +case 131: +#line 1072 "pic.y" + { yyval.spec = yyvsp[-1].spec; if (yyval.spec->text) { text_item *p; @@ -4855,9 +5089,9 @@ case 129: } } break; -case 130: -#line 1058 "pic.y" -{ +case 132: +#line 1082 "pic.y" + { yyval.spec = yyvsp[-1].spec; if (yyval.spec->text) { text_item *p; @@ -4867,28 +5101,28 @@ case 130: } } break; -case 131: -#line 1068 "pic.y" -{ +case 133: +#line 1092 "pic.y" + { yyval.spec = yyvsp[-2].spec; yyval.spec->flags |= HAS_THICKNESS; yyval.spec->thickness = yyvsp[0].x; } break; -case 132: -#line 1074 "pic.y" -{ +case 134: +#line 1098 "pic.y" + { yyval.spec = yyvsp[-1].spec; yyval.spec->flags |= IS_ALIGNED; } break; -case 133: -#line 1082 "pic.y" -{ yyval.lstr = yyvsp[0].lstr; } +case 135: +#line 1106 "pic.y" + { yyval.lstr = yyvsp[0].lstr; } break; -case 134: -#line 1084 "pic.y" -{ +case 136: +#line 1108 "pic.y" + { yyval.lstr.filename = yyvsp[-2].lstr.filename; yyval.lstr.lineno = yyvsp[-2].lstr.lineno; yyval.lstr.str = do_sprintf(yyvsp[-2].lstr.str, yyvsp[-1].dv.v, yyvsp[-1].dv.nv); @@ -4896,17 +5130,17 @@ case 134: a_delete yyvsp[-2].lstr.str; } break; -case 135: -#line 1095 "pic.y" -{ +case 137: +#line 1119 "pic.y" + { yyval.dv.v = 0; yyval.dv.nv = 0; yyval.dv.maxv = 0; } break; -case 136: -#line 1101 "pic.y" -{ +case 138: +#line 1125 "pic.y" + { yyval.dv = yyvsp[-2].dv; if (yyval.dv.nv >= yyval.dv.maxv) { if (yyval.dv.nv == 0) { @@ -4933,143 +5167,143 @@ case 136: yyval.dv.nv += 1; } break; -case 137: -#line 1131 "pic.y" -{ yyval.pair = yyvsp[0].pair; } +case 139: +#line 1155 "pic.y" + { yyval.pair = yyvsp[0].pair; } break; -case 138: -#line 1133 "pic.y" -{ +case 140: +#line 1157 "pic.y" + { position pos = yyvsp[0].pl; yyval.pair.x = pos.x; yyval.pair.y = pos.y; } break; -case 139: -#line 1139 "pic.y" -{ +case 141: +#line 1163 "pic.y" + { position pos = yyvsp[-1].pl; yyval.pair.x = pos.x; yyval.pair.y = pos.y; } break; -case 140: -#line 1148 "pic.y" -{ yyval.pair = yyvsp[0].pair; } +case 142: +#line 1172 "pic.y" + { yyval.pair = yyvsp[0].pair; } break; -case 141: -#line 1150 "pic.y" -{ +case 143: +#line 1174 "pic.y" + { yyval.pair.x = yyvsp[-2].pair.x + yyvsp[0].pair.x; yyval.pair.y = yyvsp[-2].pair.y + yyvsp[0].pair.y; } break; -case 142: -#line 1155 "pic.y" -{ +case 144: +#line 1179 "pic.y" + { yyval.pair.x = yyvsp[-3].pair.x + yyvsp[-1].pair.x; yyval.pair.y = yyvsp[-3].pair.y + yyvsp[-1].pair.y; } break; -case 143: -#line 1160 "pic.y" -{ +case 145: +#line 1184 "pic.y" + { yyval.pair.x = yyvsp[-2].pair.x - yyvsp[0].pair.x; yyval.pair.y = yyvsp[-2].pair.y - yyvsp[0].pair.y; } break; -case 144: -#line 1165 "pic.y" -{ +case 146: +#line 1189 "pic.y" + { yyval.pair.x = yyvsp[-3].pair.x - yyvsp[-1].pair.x; yyval.pair.y = yyvsp[-3].pair.y - yyvsp[-1].pair.y; } break; -case 145: -#line 1170 "pic.y" -{ +case 147: +#line 1194 "pic.y" + { yyval.pair.x = yyvsp[-3].pair.x; yyval.pair.y = yyvsp[-1].pair.y; } break; -case 146: -#line 1175 "pic.y" -{ +case 148: +#line 1199 "pic.y" + { yyval.pair.x = (1.0 - yyvsp[-4].x)*yyvsp[-2].pair.x + yyvsp[-4].x*yyvsp[0].pair.x; yyval.pair.y = (1.0 - yyvsp[-4].x)*yyvsp[-2].pair.y + yyvsp[-4].x*yyvsp[0].pair.y; } break; -case 147: -#line 1180 "pic.y" -{ +case 149: +#line 1204 "pic.y" + { yyval.pair.x = (1.0 - yyvsp[-5].x)*yyvsp[-3].pair.x + yyvsp[-5].x*yyvsp[-1].pair.x; yyval.pair.y = (1.0 - yyvsp[-5].x)*yyvsp[-3].pair.y + yyvsp[-5].x*yyvsp[-1].pair.y; } break; -case 148: -#line 1185 "pic.y" -{ +case 150: +#line 1209 "pic.y" + { yyval.pair.x = (1.0 - yyvsp[-5].x)*yyvsp[-3].pair.x + yyvsp[-5].x*yyvsp[-1].pair.x; yyval.pair.y = (1.0 - yyvsp[-5].x)*yyvsp[-3].pair.y + yyvsp[-5].x*yyvsp[-1].pair.y; } break; -case 149: -#line 1190 "pic.y" -{ +case 151: +#line 1214 "pic.y" + { yyval.pair.x = (1.0 - yyvsp[-6].x)*yyvsp[-4].pair.x + yyvsp[-6].x*yyvsp[-2].pair.x; yyval.pair.y = (1.0 - yyvsp[-6].x)*yyvsp[-4].pair.y + yyvsp[-6].x*yyvsp[-2].pair.y; } break; -case 152: -#line 1203 "pic.y" -{ +case 154: +#line 1227 "pic.y" + { yyval.pair.x = yyvsp[-2].x; yyval.pair.y = yyvsp[0].x; } break; -case 153: -#line 1208 "pic.y" -{ yyval.pair = yyvsp[-1].pair; } +case 155: +#line 1232 "pic.y" + { yyval.pair = yyvsp[-1].pair; } break; -case 154: -#line 1214 "pic.y" -{ yyval.pl = yyvsp[0].pl; } +case 156: +#line 1238 "pic.y" + { yyval.pl = yyvsp[0].pl; } break; -case 155: -#line 1216 "pic.y" -{ +case 157: +#line 1240 "pic.y" + { path pth(yyvsp[0].crn); if (!pth.follow(yyvsp[-1].pl, & yyval.pl)) YYABORT; } break; -case 156: -#line 1222 "pic.y" -{ +case 158: +#line 1246 "pic.y" + { path pth(yyvsp[-1].crn); if (!pth.follow(yyvsp[0].pl, & yyval.pl)) YYABORT; } break; -case 157: -#line 1228 "pic.y" -{ +case 159: +#line 1252 "pic.y" + { path pth(yyvsp[-2].crn); if (!pth.follow(yyvsp[0].pl, & yyval.pl)) YYABORT; } break; -case 158: -#line 1234 "pic.y" -{ +case 160: +#line 1258 "pic.y" + { yyval.pl.x = current_position.x; yyval.pl.y = current_position.y; yyval.pl.obj = 0; } break; -case 159: -#line 1243 "pic.y" -{ +case 161: +#line 1267 "pic.y" + { place *p = lookup_label(yyvsp[0].str); if (!p) { lex_error("there is no place `%1'", yyvsp[0].str); @@ -5079,40 +5313,40 @@ case 159: a_delete yyvsp[0].str; } break; -case 160: -#line 1253 "pic.y" -{ yyval.pl.obj = yyvsp[0].obj; } +case 162: +#line 1277 "pic.y" + { yyval.pl.obj = yyvsp[0].obj; } break; -case 161: -#line 1255 "pic.y" -{ +case 163: +#line 1279 "pic.y" + { path pth(yyvsp[0].str); if (!pth.follow(yyvsp[-2].pl, & yyval.pl)) YYABORT; } break; -case 162: -#line 1264 "pic.y" -{ yyval.n = yyvsp[0].n; } +case 164: +#line 1288 "pic.y" + { yyval.n = yyvsp[0].n; } break; -case 163: -#line 1266 "pic.y" -{ +case 165: +#line 1290 "pic.y" + { /* XXX Check for overflow (and non-integers?).*/ yyval.n = (int)yyvsp[-1].x; } break; -case 164: -#line 1274 "pic.y" -{ yyval.n = 1; } +case 166: +#line 1298 "pic.y" + { yyval.n = 1; } break; -case 165: -#line 1276 "pic.y" -{ yyval.n = yyvsp[-1].n; } +case 167: +#line 1300 "pic.y" + { yyval.n = yyvsp[-1].n; } break; -case 166: -#line 1281 "pic.y" -{ +case 168: +#line 1305 "pic.y" + { int count = 0; object *p; for (p = olist.head; p != 0; p = p->next) @@ -5127,9 +5361,9 @@ case 166: } } break; -case 167: -#line 1296 "pic.y" -{ +case 169: +#line 1320 "pic.y" + { int count = 0; object *p; for (p = olist.tail; p != 0; p = p->prev) @@ -5144,242 +5378,242 @@ case 167: } } break; -case 168: -#line 1314 "pic.y" -{ yyval.obtype = BOX_OBJECT; } -break; -case 169: -#line 1316 "pic.y" -{ yyval.obtype = CIRCLE_OBJECT; } -break; case 170: -#line 1318 "pic.y" -{ yyval.obtype = ELLIPSE_OBJECT; } +#line 1338 "pic.y" + { yyval.obtype = BOX_OBJECT; } break; case 171: -#line 1320 "pic.y" -{ yyval.obtype = ARC_OBJECT; } +#line 1340 "pic.y" + { yyval.obtype = CIRCLE_OBJECT; } break; case 172: -#line 1322 "pic.y" -{ yyval.obtype = LINE_OBJECT; } +#line 1342 "pic.y" + { yyval.obtype = ELLIPSE_OBJECT; } break; case 173: -#line 1324 "pic.y" -{ yyval.obtype = ARROW_OBJECT; } +#line 1344 "pic.y" + { yyval.obtype = ARC_OBJECT; } break; case 174: -#line 1326 "pic.y" -{ yyval.obtype = SPLINE_OBJECT; } +#line 1346 "pic.y" + { yyval.obtype = LINE_OBJECT; } break; case 175: -#line 1328 "pic.y" -{ yyval.obtype = BLOCK_OBJECT; } +#line 1348 "pic.y" + { yyval.obtype = ARROW_OBJECT; } break; case 176: -#line 1330 "pic.y" -{ yyval.obtype = TEXT_OBJECT; } +#line 1350 "pic.y" + { yyval.obtype = SPLINE_OBJECT; } break; case 177: -#line 1335 "pic.y" -{ yyval.pth = new path(yyvsp[0].str); } +#line 1352 "pic.y" + { yyval.obtype = BLOCK_OBJECT; } break; case 178: -#line 1337 "pic.y" -{ - yyval.pth = yyvsp[-2].pth; - yyval.pth->append(yyvsp[0].str); - } +#line 1354 "pic.y" + { yyval.obtype = TEXT_OBJECT; } break; case 179: -#line 1345 "pic.y" -{ yyval.pth = new path(yyvsp[0].crn); } +#line 1359 "pic.y" + { yyval.pth = new path(yyvsp[0].str); } break; case 180: -#line 1349 "pic.y" -{ yyval.pth = yyvsp[0].pth; } +#line 1361 "pic.y" + { + yyval.pth = yyvsp[-2].pth; + yyval.pth->append(yyvsp[0].str); + } break; case 181: -#line 1351 "pic.y" -{ +#line 1369 "pic.y" + { yyval.pth = new path(yyvsp[0].crn); } +break; +case 182: +#line 1373 "pic.y" + { yyval.pth = yyvsp[0].pth; } +break; +case 183: +#line 1375 "pic.y" + { yyval.pth = yyvsp[-1].pth; yyval.pth->append(yyvsp[0].crn); } break; -case 182: -#line 1359 "pic.y" -{ yyval.pth = yyvsp[0].pth; } +case 184: +#line 1383 "pic.y" + { yyval.pth = yyvsp[0].pth; } break; -case 183: -#line 1361 "pic.y" -{ +case 185: +#line 1385 "pic.y" + { yyval.pth = yyvsp[-3].pth; yyval.pth->set_ypath(yyvsp[-1].pth); } break; -case 184: -#line 1367 "pic.y" -{ +case 186: +#line 1391 "pic.y" + { lex_warning("`%1%2 last %3' in `with' argument ignored", yyvsp[-3].n, ordinal_postfix(yyvsp[-3].n), object_type_name(yyvsp[-1].obtype)); yyval.pth = yyvsp[0].pth; } break; -case 185: -#line 1373 "pic.y" -{ +case 187: +#line 1397 "pic.y" + { lex_warning("`last %1' in `with' argument ignored", object_type_name(yyvsp[-1].obtype)); yyval.pth = yyvsp[0].pth; } break; -case 186: -#line 1379 "pic.y" -{ +case 188: +#line 1403 "pic.y" + { lex_warning("`%1%2 %3' in `with' argument ignored", yyvsp[-2].n, ordinal_postfix(yyvsp[-2].n), object_type_name(yyvsp[-1].obtype)); yyval.pth = yyvsp[0].pth; } break; -case 187: -#line 1385 "pic.y" -{ +case 189: +#line 1409 "pic.y" + { lex_warning("initial `%1' in `with' argument ignored", yyvsp[-1].str); a_delete yyvsp[-1].str; yyval.pth = yyvsp[0].pth; } break; -case 188: -#line 1394 "pic.y" -{ yyval.crn = &object::north; } -break; -case 189: -#line 1396 "pic.y" -{ yyval.crn = &object::east; } -break; case 190: -#line 1398 "pic.y" -{ yyval.crn = &object::west; } +#line 1418 "pic.y" + { yyval.crn = &object::north; } break; case 191: -#line 1400 "pic.y" -{ yyval.crn = &object::south; } +#line 1420 "pic.y" + { yyval.crn = &object::east; } break; case 192: -#line 1402 "pic.y" -{ yyval.crn = &object::north_east; } +#line 1422 "pic.y" + { yyval.crn = &object::west; } break; case 193: -#line 1404 "pic.y" -{ yyval.crn = &object:: south_east; } +#line 1424 "pic.y" + { yyval.crn = &object::south; } break; case 194: -#line 1406 "pic.y" -{ yyval.crn = &object::north_west; } +#line 1426 "pic.y" + { yyval.crn = &object::north_east; } break; case 195: -#line 1408 "pic.y" -{ yyval.crn = &object::south_west; } +#line 1428 "pic.y" + { yyval.crn = &object:: south_east; } break; case 196: -#line 1410 "pic.y" -{ yyval.crn = &object::center; } +#line 1430 "pic.y" + { yyval.crn = &object::north_west; } break; case 197: -#line 1412 "pic.y" -{ yyval.crn = &object::start; } +#line 1432 "pic.y" + { yyval.crn = &object::south_west; } break; case 198: -#line 1414 "pic.y" -{ yyval.crn = &object::end; } +#line 1434 "pic.y" + { yyval.crn = &object::center; } break; case 199: -#line 1416 "pic.y" -{ yyval.crn = &object::north; } +#line 1436 "pic.y" + { yyval.crn = &object::start; } break; case 200: -#line 1418 "pic.y" -{ yyval.crn = &object::south; } +#line 1438 "pic.y" + { yyval.crn = &object::end; } break; case 201: -#line 1420 "pic.y" -{ yyval.crn = &object::west; } +#line 1440 "pic.y" + { yyval.crn = &object::north; } break; case 202: -#line 1422 "pic.y" -{ yyval.crn = &object::east; } +#line 1442 "pic.y" + { yyval.crn = &object::south; } break; case 203: -#line 1424 "pic.y" -{ yyval.crn = &object::north_west; } +#line 1444 "pic.y" + { yyval.crn = &object::west; } break; case 204: -#line 1426 "pic.y" -{ yyval.crn = &object::south_west; } +#line 1446 "pic.y" + { yyval.crn = &object::east; } break; case 205: -#line 1428 "pic.y" -{ yyval.crn = &object::north_east; } +#line 1448 "pic.y" + { yyval.crn = &object::north_west; } break; case 206: -#line 1430 "pic.y" -{ yyval.crn = &object::south_east; } +#line 1450 "pic.y" + { yyval.crn = &object::south_west; } break; case 207: -#line 1432 "pic.y" -{ yyval.crn = &object::west; } +#line 1452 "pic.y" + { yyval.crn = &object::north_east; } break; case 208: -#line 1434 "pic.y" -{ yyval.crn = &object::east; } +#line 1454 "pic.y" + { yyval.crn = &object::south_east; } break; case 209: -#line 1436 "pic.y" -{ yyval.crn = &object::north_west; } +#line 1456 "pic.y" + { yyval.crn = &object::west; } break; case 210: -#line 1438 "pic.y" -{ yyval.crn = &object::south_west; } +#line 1458 "pic.y" + { yyval.crn = &object::east; } break; case 211: -#line 1440 "pic.y" -{ yyval.crn = &object::north_east; } +#line 1460 "pic.y" + { yyval.crn = &object::north_west; } break; case 212: -#line 1442 "pic.y" -{ yyval.crn = &object::south_east; } +#line 1462 "pic.y" + { yyval.crn = &object::south_west; } break; case 213: -#line 1444 "pic.y" -{ yyval.crn = &object::north; } +#line 1464 "pic.y" + { yyval.crn = &object::north_east; } break; case 214: -#line 1446 "pic.y" -{ yyval.crn = &object::south; } +#line 1466 "pic.y" + { yyval.crn = &object::south_east; } break; case 215: -#line 1448 "pic.y" -{ yyval.crn = &object::east; } +#line 1468 "pic.y" + { yyval.crn = &object::north; } break; case 216: -#line 1450 "pic.y" -{ yyval.crn = &object::west; } +#line 1470 "pic.y" + { yyval.crn = &object::south; } break; case 217: -#line 1452 "pic.y" -{ yyval.crn = &object::center; } +#line 1472 "pic.y" + { yyval.crn = &object::east; } break; case 218: -#line 1454 "pic.y" -{ yyval.crn = &object::start; } +#line 1474 "pic.y" + { yyval.crn = &object::west; } break; case 219: -#line 1456 "pic.y" -{ yyval.crn = &object::end; } +#line 1476 "pic.y" + { yyval.crn = &object::center; } break; case 220: -#line 1461 "pic.y" -{ +#line 1478 "pic.y" + { yyval.crn = &object::start; } +break; +case 221: +#line 1480 "pic.y" + { yyval.crn = &object::end; } +break; +case 222: +#line 1485 "pic.y" + { if (!lookup_variable(yyvsp[0].str, & yyval.x)) { lex_error("there is no variable `%1'", yyvsp[0].str); YYABORT; @@ -5387,70 +5621,70 @@ case 220: a_delete yyvsp[0].str; } break; -case 221: -#line 1469 "pic.y" -{ yyval.x = yyvsp[0].x; } +case 223: +#line 1493 "pic.y" + { yyval.x = yyvsp[0].x; } break; -case 222: -#line 1471 "pic.y" -{ +case 224: +#line 1495 "pic.y" + { if (yyvsp[-1].pl.obj != 0) yyval.x = yyvsp[-1].pl.obj->origin().x; else yyval.x = yyvsp[-1].pl.x; } break; -case 223: -#line 1478 "pic.y" -{ +case 225: +#line 1502 "pic.y" + { if (yyvsp[-1].pl.obj != 0) yyval.x = yyvsp[-1].pl.obj->origin().y; else yyval.x = yyvsp[-1].pl.y; } break; -case 224: -#line 1485 "pic.y" -{ +case 226: +#line 1509 "pic.y" + { if (yyvsp[-1].pl.obj != 0) yyval.x = yyvsp[-1].pl.obj->height(); else yyval.x = 0.0; } break; -case 225: -#line 1492 "pic.y" -{ +case 227: +#line 1516 "pic.y" + { if (yyvsp[-1].pl.obj != 0) yyval.x = yyvsp[-1].pl.obj->width(); else yyval.x = 0.0; } break; -case 226: -#line 1499 "pic.y" -{ +case 228: +#line 1523 "pic.y" + { if (yyvsp[-1].pl.obj != 0) yyval.x = yyvsp[-1].pl.obj->radius(); else yyval.x = 0.0; } break; -case 227: -#line 1506 "pic.y" -{ yyval.x = yyvsp[-2].x + yyvsp[0].x; } -break; -case 228: -#line 1508 "pic.y" -{ yyval.x = yyvsp[-2].x - yyvsp[0].x; } -break; case 229: -#line 1510 "pic.y" -{ yyval.x = yyvsp[-2].x * yyvsp[0].x; } +#line 1530 "pic.y" + { yyval.x = yyvsp[-2].x + yyvsp[0].x; } break; case 230: -#line 1512 "pic.y" -{ +#line 1532 "pic.y" + { yyval.x = yyvsp[-2].x - yyvsp[0].x; } +break; +case 231: +#line 1534 "pic.y" + { yyval.x = yyvsp[-2].x * yyvsp[0].x; } +break; +case 232: +#line 1536 "pic.y" + { if (yyvsp[0].x == 0.0) { lex_error("division by zero"); YYABORT; @@ -5458,9 +5692,9 @@ case 230: yyval.x = yyvsp[-2].x/yyvsp[0].x; } break; -case 231: -#line 1520 "pic.y" -{ +case 233: +#line 1544 "pic.y" + { if (yyvsp[0].x == 0.0) { lex_error("modulus by zero"); YYABORT; @@ -5468,9 +5702,9 @@ case 231: yyval.x = fmod(yyvsp[-2].x, yyvsp[0].x); } break; -case 232: -#line 1528 "pic.y" -{ +case 234: +#line 1552 "pic.y" + { errno = 0; yyval.x = pow(yyvsp[-2].x, yyvsp[0].x); if (errno == EDOM) { @@ -5483,17 +5717,17 @@ case 232: } } break; -case 233: -#line 1541 "pic.y" -{ yyval.x = -yyvsp[0].x; } +case 235: +#line 1565 "pic.y" + { yyval.x = -yyvsp[0].x; } break; -case 234: -#line 1543 "pic.y" -{ yyval.x = yyvsp[-1].x; } +case 236: +#line 1567 "pic.y" + { yyval.x = yyvsp[-1].x; } break; -case 235: -#line 1545 "pic.y" -{ +case 237: +#line 1569 "pic.y" + { errno = 0; yyval.x = sin(yyvsp[-1].x); if (errno == ERANGE) { @@ -5502,9 +5736,9 @@ case 235: } } break; -case 236: -#line 1554 "pic.y" -{ +case 238: +#line 1578 "pic.y" + { errno = 0; yyval.x = cos(yyvsp[-1].x); if (errno == ERANGE) { @@ -5513,9 +5747,9 @@ case 236: } } break; -case 237: -#line 1563 "pic.y" -{ +case 239: +#line 1587 "pic.y" + { errno = 0; yyval.x = atan2(yyvsp[-3].x, yyvsp[-1].x); if (errno == EDOM) { @@ -5528,9 +5762,9 @@ case 237: } } break; -case 238: -#line 1576 "pic.y" -{ +case 240: +#line 1600 "pic.y" + { errno = 0; yyval.x = log10(yyvsp[-1].x); if (errno == ERANGE) { @@ -5539,9 +5773,9 @@ case 238: } } break; -case 239: -#line 1585 "pic.y" -{ +case 241: +#line 1609 "pic.y" + { errno = 0; yyval.x = pow(10.0, yyvsp[-1].x); if (errno == ERANGE) { @@ -5550,9 +5784,9 @@ case 239: } } break; -case 240: -#line 1594 "pic.y" -{ +case 242: +#line 1618 "pic.y" + { errno = 0; yyval.x = sqrt(yyvsp[-1].x); if (errno == EDOM) { @@ -5561,74 +5795,74 @@ case 240: } } break; -case 241: -#line 1603 "pic.y" -{ yyval.x = yyvsp[-3].x > yyvsp[-1].x ? yyvsp[-3].x : yyvsp[-1].x; } -break; -case 242: -#line 1605 "pic.y" -{ yyval.x = yyvsp[-3].x < yyvsp[-1].x ? yyvsp[-3].x : yyvsp[-1].x; } -break; case 243: -#line 1607 "pic.y" -{ yyval.x = floor(yyvsp[-1].x); } +#line 1627 "pic.y" + { yyval.x = yyvsp[-3].x > yyvsp[-1].x ? yyvsp[-3].x : yyvsp[-1].x; } break; case 244: -#line 1609 "pic.y" -{ yyval.x = 1.0 + floor(((rand()&0x7fff)/double(0x7fff))*yyvsp[-1].x); } +#line 1629 "pic.y" + { yyval.x = yyvsp[-3].x < yyvsp[-1].x ? yyvsp[-3].x : yyvsp[-1].x; } break; case 245: -#line 1611 "pic.y" -{ +#line 1631 "pic.y" + { yyval.x = yyvsp[-1].x < 0 ? -floor(-yyvsp[-1].x) : floor(yyvsp[-1].x); } +break; +case 246: +#line 1633 "pic.y" + { yyval.x = 1.0 + floor(((rand()&0x7fff)/double(0x7fff))*yyvsp[-1].x); } +break; +case 247: +#line 1635 "pic.y" + { /* return a random number in the range [0,1) */ /* portable, but not very random */ yyval.x = (rand() & 0x7fff) / double(0x8000); } break; -case 246: -#line 1617 "pic.y" -{ +case 248: +#line 1641 "pic.y" + { yyval.x = 0; srand((unsigned int)yyvsp[-1].x); } break; -case 247: -#line 1622 "pic.y" -{ yyval.x = (yyvsp[-2].x < yyvsp[0].x); } -break; -case 248: -#line 1624 "pic.y" -{ yyval.x = (yyvsp[-2].x <= yyvsp[0].x); } -break; case 249: -#line 1626 "pic.y" -{ yyval.x = (yyvsp[-2].x > yyvsp[0].x); } +#line 1646 "pic.y" + { yyval.x = (yyvsp[-2].x < yyvsp[0].x); } break; case 250: -#line 1628 "pic.y" -{ yyval.x = (yyvsp[-2].x >= yyvsp[0].x); } +#line 1648 "pic.y" + { yyval.x = (yyvsp[-2].x <= yyvsp[0].x); } break; case 251: -#line 1630 "pic.y" -{ yyval.x = (yyvsp[-2].x == yyvsp[0].x); } +#line 1650 "pic.y" + { yyval.x = (yyvsp[-2].x > yyvsp[0].x); } break; case 252: -#line 1632 "pic.y" -{ yyval.x = (yyvsp[-2].x != yyvsp[0].x); } +#line 1652 "pic.y" + { yyval.x = (yyvsp[-2].x >= yyvsp[0].x); } break; case 253: -#line 1634 "pic.y" -{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } +#line 1654 "pic.y" + { yyval.x = (yyvsp[-2].x == yyvsp[0].x); } break; case 254: -#line 1636 "pic.y" -{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } +#line 1656 "pic.y" + { yyval.x = (yyvsp[-2].x != yyvsp[0].x); } break; case 255: -#line 1638 "pic.y" -{ yyval.x = (yyvsp[0].x == 0.0); } +#line 1658 "pic.y" + { yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } +break; +case 256: +#line 1660 "pic.y" + { yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } break; -#line 5632 "y.tab.c" +case 257: +#line 1662 "pic.y" + { yyval.x = (yyvsp[0].x == 0.0); } +break; +#line 5865 "pic.cpp" } yyssp -= yym; yystate = *yyssp; @@ -5671,17 +5905,20 @@ break; printf("%sdebug: after reduction, shifting from state %d \ to state %d\n", YYPREFIX, *yyssp, yystate); #endif - if (yyssp >= yyss + yystacksize - 1) + if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } - *++yyssp = yystate; + *++yyssp = (short) yystate; *++yyvsp = yyval; goto yyloop; + yyoverflow: yyerror("yacc stack overflow"); + yyabort: return (1); + yyaccept: return (0); } diff --git a/contrib/groff/src/preproc/pic/pic.h b/contrib/groff/src/preproc/pic/pic.h index e3b850a96e..b32b7d6d64 100644 --- a/contrib/groff/src/preproc/pic/pic.h +++ b/contrib/groff/src/preproc/pic/pic.h @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2003, 2005 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2003, 2005, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" diff --git a/contrib/groff/src/preproc/pic/pic.man b/contrib/groff/src/preproc/pic/pic.man index c54cfbef59..144f0a1b6e 100644 --- a/contrib/groff/src/preproc/pic/pic.man +++ b/contrib/groff/src/preproc/pic/pic.man @@ -1,5 +1,6 @@ .ig -Copyright (C) 1989-2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. +Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2007, 2009 + Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice @@ -735,6 +736,17 @@ has a value of\ 0. A box with rounded corners can be dotted or dashed. . .LP +Boxes can have slanted sides. +This effectively changes the shape of a box from a rectangle to an +arbitrary parallelogram. +The +.B xslanted +and +.B yslanted +attributes specify the x and y\~offset of the box's upper right corner +from its default position. +. +.LP The .B .PS line can have a second argument specifying a maximum height for @@ -818,7 +830,7 @@ variable, nor by the width or height given in the line. . .LP -Boxes (including boxes with rounded corners), +Boxes (including boxes with rounded corners or slanted sides), circles and ellipses can be filled by giving them an attribute of .BR fill [ ed ]. This takes an optional argument of an expression with a value between diff --git a/contrib/groff/src/preproc/pic/pic.y b/contrib/groff/src/preproc/pic/pic.y index 83d0fe0222..6a5fbcc9bb 100644 --- a/contrib/groff/src/preproc/pic/pic.y +++ b/contrib/groff/src/preproc/pic/pic.y @@ -1,4 +1,5 @@ -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005, + 2006, 2007, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -6,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ %{ #include "pic.h" #include "ptable.h" @@ -93,10 +93,6 @@ char *do_sprintf(const char *form, const double *v, int nv); %token RIGHT_ARROW_HEAD %token DOUBLE_ARROW_HEAD %token LAST -%token UP -%token DOWN -%token LEFT -%token RIGHT %token BOX %token CIRCLE %token ELLIPSE @@ -200,6 +196,8 @@ char *do_sprintf(const char *form, const double *v, int nv); %token COLORED %token OUTLINED %token SHADED +%token XSLANTED +%token YSLANTED %token ALIGNED %token SPRINTF %token COMMAND @@ -224,6 +222,7 @@ box "foo" above ljust == box ("foo" above ljust) precedence than left and right, so that eg `line chop left' parses properly. */ %left CHOP SOLID DASHED DOTTED UP DOWN FILL COLORED OUTLINED +%left XSLANTED YSLANTED %left LABEL %left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST @@ -877,14 +876,27 @@ object_spec: | object_spec THEN { $$ = $1; - if ($$->flags & HAS_SEGMENT) { - $$->segment_list = new segment($$->segment_pos, - $$->segment_is_absolute, - $$->segment_list); - $$->flags &= ~HAS_SEGMENT; - $$->segment_pos.x = $$->segment_pos.y = 0.0; - $$->segment_is_absolute = 0; - } + if (!($$->flags & HAS_SEGMENT)) + switch ($$->dir) { + case UP_DIRECTION: + $$->segment_pos.y += $$->segment_width; + break; + case DOWN_DIRECTION: + $$->segment_pos.y -= $$->segment_width; + break; + case RIGHT_DIRECTION: + $$->segment_pos.x += $$->segment_width; + break; + case LEFT_DIRECTION: + $$->segment_pos.x -= $$->segment_width; + break; + } + $$->segment_list = new segment($$->segment_pos, + $$->segment_is_absolute, + $$->segment_list); + $$->flags &= ~HAS_SEGMENT; + $$->segment_pos.x = $$->segment_pos.y = 0.0; + $$->segment_is_absolute = 0; } | object_spec SOLID { @@ -925,6 +937,18 @@ object_spec: $$->flags |= IS_FILLED; $$->fill = $3; } + | object_spec XSLANTED expr + { + $$ = $1; + $$->flags |= IS_XSLANTED; + $$->xslanted = $3; + } + | object_spec YSLANTED expr + { + $$ = $1; + $$->flags |= IS_YSLANTED; + $$->yslanted = $3; + } | object_spec SHADED text { $$ = $1; @@ -1604,7 +1628,7 @@ expr: | K_MIN '(' any_expr ',' any_expr ')' { $$ = $3 < $5 ? $3 : $5; } | INT '(' any_expr ')' - { $$ = floor($3); } + { $$ = $3 < 0 ? -floor(-$3) : floor($3); } | RAND '(' any_expr ')' { $$ = 1.0 + floor(((rand()&0x7fff)/double(0x7fff))*$3); } | RAND '(' ')' diff --git a/contrib/groff/src/preproc/pic/pic_tab.h b/contrib/groff/src/preproc/pic/pic_tab.h index 12611ba94e..89835eb050 100644 --- a/contrib/groff/src/preproc/pic/pic_tab.h +++ b/contrib/groff/src/preproc/pic/pic_tab.h @@ -10,23 +10,23 @@ #define RIGHT_ARROW_HEAD 266 #define DOUBLE_ARROW_HEAD 267 #define LAST 268 -#define UP 269 -#define DOWN 270 -#define LEFT 271 -#define RIGHT 272 -#define BOX 273 -#define CIRCLE 274 -#define ELLIPSE 275 -#define ARC 276 -#define LINE 277 -#define ARROW 278 -#define MOVE 279 -#define SPLINE 280 -#define HEIGHT 281 -#define RADIUS 282 -#define FIGNAME 283 -#define WIDTH 284 -#define DIAMETER 285 +#define BOX 269 +#define CIRCLE 270 +#define ELLIPSE 271 +#define ARC 272 +#define LINE 273 +#define ARROW 274 +#define MOVE 275 +#define SPLINE 276 +#define HEIGHT 277 +#define RADIUS 278 +#define FIGNAME 279 +#define WIDTH 280 +#define DIAMETER 281 +#define UP 282 +#define DOWN 283 +#define RIGHT 284 +#define LEFT 285 #define FROM 286 #define TO 287 #define AT 288 @@ -113,11 +113,13 @@ #define COLORED 369 #define OUTLINED 370 #define SHADED 371 -#define ALIGNED 372 -#define SPRINTF 373 -#define COMMAND 374 -#define DEFINE 375 -#define UNDEF 376 +#define XSLANTED 372 +#define YSLANTED 373 +#define ALIGNED 374 +#define SPRINTF 375 +#define COMMAND 376 +#define DEFINE 377 +#define UNDEF 378 typedef union { char *str; int n; diff --git a/contrib/groff/src/preproc/pic/position.h b/contrib/groff/src/preproc/pic/position.h index c62e3e7bd0..a548c90afa 100644 --- a/contrib/groff/src/preproc/pic/position.h +++ b/contrib/groff/src/preproc/pic/position.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ struct place; struct position { diff --git a/contrib/groff/src/preproc/pic/tex.cpp b/contrib/groff/src/preproc/pic/tex.cpp index f997b868d6..99cf20489e 100644 --- a/contrib/groff/src/preproc/pic/tex.cpp +++ b/contrib/groff/src/preproc/pic/tex.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2003 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2003, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "pic.h" diff --git a/contrib/groff/src/preproc/pic/text.h b/contrib/groff/src/preproc/pic/text.h index f9d3487507..10379861a4 100644 --- a/contrib/groff/src/preproc/pic/text.h +++ b/contrib/groff/src/preproc/pic/text.h @@ -1,4 +1,22 @@ // -*- C++ -*- +/* Copyright (C) 1989, 2009 Free Software Foundation, Inc. + Written by James Clark (jjc@jclark.com) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ + enum hadjustment { CENTER_ADJUST, diff --git a/contrib/groff/src/preproc/pic/troff.cpp b/contrib/groff/src/preproc/pic/troff.cpp index 688ca47b9c..dfd19baf91 100644 --- a/contrib/groff/src/preproc/pic/troff.cpp +++ b/contrib/groff/src/preproc/pic/troff.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2005 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2005, + 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "pic.h" #include "common.h" diff --git a/contrib/groff/src/preproc/preconv/Makefile.sub b/contrib/groff/src/preproc/preconv/Makefile.sub new file mode 100644 index 0000000000..e53050f169 --- /dev/null +++ b/contrib/groff/src/preproc/preconv/Makefile.sub @@ -0,0 +1,7 @@ +PROG=preconv$(EXEEXT) +MAN1=preconv.n +XLIBS=$(LIBGROFF) +MLIB=$(LIBM) +EXTRA_LDFLAGS=$(LIBICONV) +OBJS=preconv.$(OBJEXT) +CCSRCS=$(srcdir)/preconv.cpp diff --git a/contrib/groff/src/preproc/preconv/preconv.cpp b/contrib/groff/src/preproc/preconv/preconv.cpp new file mode 100644 index 0000000000..d09fc1c000 --- /dev/null +++ b/contrib/groff/src/preproc/preconv/preconv.cpp @@ -0,0 +1,1196 @@ +// -*- C++ -*- +/* Copyright (C) 2005, 2006, 2008, 2009 + Free Software Foundation, Inc. + Written by Werner Lemberg (wl@gnu.org) + +This file is part of groff. + +groff is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or +(at your option) any later version. + +groff is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ + +#include "lib.h" + +#include +#include +#include +#include "errarg.h" +#include "error.h" +#include "localcharset.h" +#include "nonposix.h" +#include "stringclass.h" + +#include + +#if HAVE_ICONV +# include +# ifdef WORDS_BIGENDIAN +# define UNICODE "UTF-32BE" +# else +# define UNICODE "UTF-32LE" +# endif +#endif + +#define MAX_VAR_LEN 100 + +extern "C" const char *Version_string; + +char default_encoding[MAX_VAR_LEN]; +char user_encoding[MAX_VAR_LEN]; +char encoding_string[MAX_VAR_LEN]; +int debug_flag = 0; +int raw_flag = 0; + +struct conversion { + const char *from; + const char *to; +}; + +// The official list of MIME tags can be found at +// +// http://www.iana.org/assignments/character-sets +// +// For encodings which don't have a MIME tag we use GNU iconv's encoding +// names (which also work with the portable GNU libiconv package). They +// are marked with `*'. +// +// Encodings specific to XEmacs and Emacs are marked as such; no mark means +// that they are used by both Emacs and XEmacs. +// +// Encodings marked with `--' are special to Emacs, XEmacs, or other +// applications and shouldn't be used for data exchange. +// +// `Not covered' means that the encoding can be handled neither by GNU iconv +// nor by libiconv, or just one of them has support for it. +// +// A special case is VIQR encoding: Despite of having a MIME tag it is +// missing in both libiconv 1.10 and iconv (coming with GNU libc 2.3.6). +// +// Finally, we add all aliases of GNU iconv for `ascii', `latin1', and +// `utf8' to catch those encoding names before iconv is called. +// +// Note that most entries are commented out -- only a small, (rather) +// reliable and stable subset of encodings is recognized (for coding tags) +// which are still in greater use today (January 2006). Most notably, all +// Windows-specific encodings are not selected because they lack stability: +// Microsoft has changed the mappings instead of creating new versions. +// +// Please contact the groff list if you find the selection inadequate. + +static const conversion +emacs_to_mime[] = { + {"ascii", "US-ASCII"}, // Emacs + {"big5", "Big5"}, + {"chinese-big5", "Big5"}, // Emacs + {"chinese-euc", "GB2312"}, // XEmacs + {"chinese-iso-8bit", "GB2312"}, // Emacs + {"cn-big5", "Big5"}, + {"cn-gb", "GB2312"}, // Emacs + {"cn-gb-2312", "GB2312"}, + {"cp878", "KOI8-R"}, // Emacs + {"cp1047", "CP1047"}, // EBCDIC + {"csascii", "US-ASCII"}, // alias + {"csisolatin1", "ISO-8859-1"}, // alias + {"cyrillic-iso-8bit", "ISO-8859-5"}, // Emacs + {"cyrillic-koi8", "KOI8-R"}, // not KOI8!, Emacs + {"euc-china", "GB2312"}, // Emacs + {"euc-cn", "GB2312"}, // Emacs + {"euc-japan", "EUC-JP"}, + {"euc-japan-1990", "EUC-JP"}, // Emacs + {"euc-jp", "EUC-JP"}, + {"euc-korea", "EUC-KR"}, + {"euc-kr", "EUC-KR"}, + {"gb2312", "GB2312"}, + {"greek-iso-8bit", "ISO-8859-7"}, + {"iso-10646/utf8", "UTF-8"}, // alias + {"iso-10646/utf-8", "UTF-8"}, // alias + {"iso-8859-1", "ISO-8859-1"}, + {"iso-8859-13", "ISO-8859-13"}, // Emacs + {"iso-8859-15", "ISO-8859-15"}, + {"iso-8859-2", "ISO-8859-2"}, + {"iso-8859-5", "ISO-8859-5"}, + {"iso-8859-7", "ISO-8859-7"}, + {"iso-8859-9", "ISO-8859-9"}, + {"iso-latin-1", "ISO-8859-1"}, + {"iso-latin-2", "ISO-8859-2"}, // Emacs + {"iso-latin-5", "ISO-8859-9"}, // Emacs + {"iso-latin-7", "ISO-8859-13"}, // Emacs + {"iso-latin-9", "ISO-8859-15"}, // Emacs + {"japanese-iso-8bit", "EUC-JP"}, // Emacs + {"japanese-euc", "EUC-JP"}, // XEmacs + {"jis8", "EUC-JP"}, // XEmacs + {"koi8", "KOI8-R"}, // not KOI8!, Emacs + {"koi8-r", "KOI8-R"}, + {"korean-euc", "EUC-KR"}, // XEmacs + {"korean-iso-8bit", "EUC-KR"}, // Emacs + {"latin1", "ISO-8859-1"}, // alias + {"latin-0", "ISO-8859-15"}, // Emacs + {"latin-1", "ISO-8859-1"}, // Emacs + {"latin-2", "ISO-8859-2"}, // Emacs + {"latin-5", "ISO-8859-9"}, // Emacs + {"latin-7", "ISO-8859-13"}, // Emacs + {"latin-9", "ISO-8859-15"}, // Emacs + {"mule-utf-16", "UTF-16"}, // Emacs + {"mule-utf-16be", "UTF-16BE"}, // Emacs + {"mule-utf-16-be", "UTF-16BE"}, // Emacs + {"mule-utf-16be-with-signature", "UTF-16"}, // Emacs, not UTF-16BE + {"mule-utf-16le", "UTF-16LE"}, // Emacs + {"mule-utf-16-le", "UTF-16LE"}, // Emacs + {"mule-utf-16le-with-signature", "UTF-16"}, // Emacs, not UTF-16LE + {"mule-utf-8", "UTF-8"}, // Emacs + {"us-ascii", "US-ASCII"}, // Emacs + {"utf8", "UTF-8"}, // alias + {"utf-16", "UTF-16"}, // Emacs + {"utf-16be", "UTF-16BE"}, // Emacs + {"utf-16-be", "UTF-16BE"}, // Emacs + {"utf-16be-with-signature", "UTF-16"}, // Emacs, not UTF-16BE + {"utf-16-be-with-signature", "UTF-16"}, // Emacs, not UTF-16BE + {"utf-16le", "UTF-16LE"}, // Emacs + {"utf-16-le", "UTF-16LE"}, // Emacs + {"utf-16le-with-signature", "UTF-16"}, // Emacs, not UTF-16LE + {"utf-16-le-with-signature", "UTF-16"}, // Emacs, not UTF-16LE + {"utf-8", "UTF-8"}, // Emacs + +// {"alternativnyj", ""}, // ? +// {"arabic-iso-8bit", "ISO-8859-6"}, // Emacs +// {"binary", ""}, // -- +// {"chinese-hz", "HZ-GB-2312"}, // Emacs +// {"chinese-iso-7bit", "ISO-2022-CN"}, // Emacs +// {"chinese-iso-8bit-with-esc", ""}, // -- +// {"compound-text", ""}, // -- +// {"compound-text-with-extension", ""}, // -- +// {"cp1125", "cp1125"}, // * +// {"cp1250", "windows-1250"},// Emacs +// {"cp1251", "windows-1251"},// Emacs +// {"cp1252", "windows-1252"},// Emacs +// {"cp1253", "windows-1253"},// Emacs +// {"cp1254", "windows-1254"},// Emacs +// {"cp1255", "windows-1255"},// Emacs +// {"cp1256", "windows-1256"},// Emacs +// {"cp1257", "windows-1257"},// Emacs +// {"cp1258", "windows-1258"},// Emacs +// {"cp437", "cp437"}, // Emacs +// {"cp720", ""}, // not covered +// {"cp737", "cp737"}, // *, Emacs +// {"cp775", "cp775"}, // Emacs +// {"cp850", "cp850"}, // Emacs +// {"cp851", "cp851"}, // Emacs +// {"cp852", "cp852"}, // Emacs +// {"cp855", "cp855"}, // Emacs +// {"cp857", "cp857"}, // Emacs +// {"cp860", "cp860"}, // Emacs +// {"cp861", "cp861"}, // Emacs +// {"cp862", "cp862"}, // Emacs +// {"cp863", "cp863"}, // Emacs +// {"cp864", "cp864"}, // Emacs +// {"cp865", "cp865"}, // Emacs +// {"cp866", "cp866"}, // Emacs +// {"cp866u", "cp1125"}, // *, Emacs +// {"cp869", "cp869"}, // Emacs +// {"cp874", "cp874"}, // *, Emacs +// {"cp932", "cp932"}, // *, Emacs +// {"cp936", "cp936"}, // Emacs +// {"cp949", "cp949"}, // *, Emacs +// {"cp950", "cp950"}, // *, Emacs +// {"ctext", ""}, // -- +// {"ctext-no-compositions", ""}, // -- +// {"ctext-with-extensions", ""}, // -- +// {"cyrillic-alternativnyj", ""}, // ?, Emacs +// {"cyrillic-iso-8bit-with-esc", ""}, // -- +// {"cyrillic-koi8-t", "KOI8-T"}, // *, Emacs +// {"devanagari", ""}, // not covered +// {"dos", ""}, // -- +// {"emacs-mule", ""}, // -- +// {"euc-jisx0213", "EUC-JISX0213"},// *, XEmacs? +// {"euc-jisx0213-with-esc", ""}, // XEmacs? +// {"euc-taiwan", "EUC-TW"}, // *, Emacs +// {"euc-tw", "EUC-TW"}, // *, Emacs +// {"georgian-ps", "GEORGIAN-PS"}, // *, Emacs +// {"greek-iso-8bit-with-esc", ""}, // -- +// {"hebrew-iso-8bit", "ISO-8859-8"}, // Emacs +// {"hebrew-iso-8bit-with-esc", ""}, // -- +// {"hz", "HZ-GB-2312"}, +// {"hz-gb-2312", "HZ-GB-2312"}, +// {"in-is13194", ""}, // not covered +// {"in-is13194-devanagari", ""}, // not covered +// {"in-is13194-with-esc", ""}, // -- +// {"iso-2022-7", ""}, // XEmacs? +// {"iso-2022-7bit", ""}, // -- +// {"iso-2022-7bit-lock", ""}, // -- +// {"iso-2022-7bit-lock-ss2", ""}, // -- +// {"iso-2022-7bit-ss2", ""}, // -- +// {"iso-2022-8", ""}, // XEmacs? +// {"iso-2022-8bit", ""}, // XEmacs? +// {"iso-2022-8bit-lock", ""}, // XEmacs? +// {"iso-2022-8bit-lock-ss2", ""}, // XEmacs? +// {"iso-2022-8bit-ss2", ""}, // -- +// {"iso-2022-cjk", ""}, // -- +// {"iso-2022-cn", "ISO-2022-CN"}, // Emacs +// {"iso-2022-cn-ext", "ISO-2022-CN-EXT"},// Emacs +// {"iso-2022-int-1", ""}, // -- +// {"iso-2022-jp", "ISO-2022-JP"}, +// {"iso-2022-jp-1978-irv", "ISO-2022-JP"}, +// {"iso-2022-jp-2", "ISO-2022-JP-2"}, +// {"iso-2022-jp-3", "ISO-2022-JP-3"},// *, XEmacs? +// {"iso-2022-jp-3-compatible", ""}, // XEmacs? +// {"iso-2022-jp-3-strict", "ISO-2022-JP-3"},// *, XEmacs? +// {"iso-2022-kr", "ISO-2022-KR"}, +// {"iso-2022-lock", ""}, // XEmacs? +// {"iso-8859-10", "ISO-8859-10"}, // Emacs +// {"iso-8859-11", "ISO-8859-11"}, // *, Emacs +// {"iso-8859-14", "ISO-8859-14"}, // Emacs +// {"iso-8859-16", "ISO-8859-16"}, +// {"iso-8859-3", "ISO-8859-3"}, +// {"iso-8859-4", "ISO-8859-4"}, +// {"iso-8859-6", "ISO-8859-6"}, +// {"iso-8859-8", "ISO-8859-8"}, +// {"iso-8859-8-e", "ISO-8859-8"}, +// {"iso-8859-8-i", "ISO-8859-8"}, // Emacs +// {"iso-latin-10", "ISO-8859-16"}, // Emacs +// {"iso-latin-1-with-esc", ""}, // -- +// {"iso-latin-2-with-esc", ""}, // -- +// {"iso-latin-3", "ISO-8859-3"}, // Emacs +// {"iso-latin-3-with-esc", ""}, // -- +// {"iso-latin-4", "ISO-8859-4"}, // Emacs +// {"iso-latin-4-with-esc", ""}, // -- +// {"iso-latin-5-with-esc", ""}, // -- +// {"iso-latin-6", "ISO-8859-10"}, // Emacs +// {"iso-latin-8", "ISO-8859-14"}, // Emacs +// {"iso-safe", ""}, // -- +// {"japanese-iso-7bit-1978-irv", "ISO-2022-JP"}, // Emacs +// {"japanese-iso-8bit-with-esc", ""}, // -- +// {"japanese-shift-jis", "Shift_JIS"}, // Emacs +// {"japanese-shift-jisx0213", ""}, // XEmacs? +// {"jis7", "ISO-2022-JP"}, // Xemacs +// {"junet", "ISO-2022-JP"}, +// {"koi8-t", "KOI8-T"}, // *, Emacs +// {"koi8-u", "KOI8-U"}, // Emacs +// {"korean-iso-7bit-lock", "ISO-2022-KR"}, +// {"korean-iso-8bit-with-esc", ""}, // -- +// {"lao", ""}, // not covered +// {"lao-with-esc", ""}, // -- +// {"latin-10", "ISO-8859-16"}, // Emacs +// {"latin-3", "ISO-8859-3"}, // Emacs +// {"latin-4", "ISO-8859-4"}, // Emacs +// {"latin-6", "ISO-8859-10"}, // Emacs +// {"latin-8", "ISO-8859-14"}, // Emacs +// {"mac", ""}, // -- +// {"mac-roman", "MACINTOSH"}, // Emacs +// {"mik", ""}, // not covered +// {"next", "NEXTSTEP"}, // *, Emacs +// {"no-conversion", ""}, // -- +// {"old-jis", "ISO-2022-JP"}, +// {"pt154", "PT154"}, // Emacs +// {"raw-text", ""}, // -- +// {"ruscii", "cp1125"}, // *, Emacs +// {"shift-jis", "Shift_JIS"}, // XEmacs +// {"shift_jis", "Shift_JIS"}, +// {"shift_jisx0213", "Shift_JISX0213"},// *, XEmacs? +// {"sjis", "Shift_JIS"}, // Emacs +// {"tcvn", "TCVN"}, // *, Emacs +// {"tcvn-5712", "TCVN"}, // *, Emacs +// {"thai-tis620", "TIS-620"}, +// {"thai-tis620-with-esc", ""}, // -- +// {"th-tis620", "TIS-620"}, +// {"tibetan", ""}, // not covered +// {"tibetan-iso-8bit", ""}, // not covered +// {"tibetan-iso-8bit-with-esc", ""}, // -- +// {"tis-620", "TIS-620"}, +// {"tis620", "TIS-620"}, +// {"undecided", ""}, // -- +// {"unix", ""}, // -- +// {"utf-7", "UTF-7"}, // Emacs +// {"utf-7-safe", ""}, // XEmacs? +// {"utf-8-ws", "UTF-8"}, // XEmacs? +// {"vietnamese-tcvn", "TCVN"}, // *, Emacs +// {"vietnamese-viqr", "VIQR"}, // not covered +// {"vietnamese-viscii", "VISCII"}, +// {"vietnamese-vscii", ""}, // not covered +// {"viqr", "VIQR"}, // not covered +// {"viscii", "VISCII"}, +// {"vscii", ""}, // not covered +// {"windows-037", ""}, // not covered +// {"windows-10000", ""}, // not covered +// {"windows-10001", ""}, // not covered +// {"windows-10006", ""}, // not covered +// {"windows-10007", ""}, // not covered +// {"windows-10029", ""}, // not covered +// {"windows-10079", ""}, // not covered +// {"windows-10081", ""}, // not covered +// {"windows-1026", ""}, // not covered +// {"windows-1200", ""}, // not covered +// {"windows-1250", "windows-1250"}, +// {"windows-1251", "windows-1251"}, +// {"windows-1252", "windows-1252"}, +// {"windows-1253", "windows-1253"}, +// {"windows-1254", "windows-1254"}, +// {"windows-1255", "windows-1255"}, +// {"windows-1256", "windows-1256"}, +// {"windows-1257", "windows-1257"}, +// {"windows-1258", "windows-1258"}, +// {"windows-1361", "cp1361"}, // *, XEmacs +// {"windows-437", "cp437"}, // XEmacs +// {"windows-500", ""}, // not covered +// {"windows-708", ""}, // not covered +// {"windows-709", ""}, // not covered +// {"windows-710", ""}, // not covered +// {"windows-720", ""}, // not covered +// {"windows-737", "cp737"}, // *, XEmacs +// {"windows-775", "cp775"}, // XEmacs +// {"windows-850", "cp850"}, // XEmacs +// {"windows-852", "cp852"}, // XEmacs +// {"windows-855", "cp855"}, // XEmacs +// {"windows-857", "cp857"}, // XEmacs +// {"windows-860", "cp860"}, // XEmacs +// {"windows-861", "cp861"}, // XEmacs +// {"windows-862", "cp862"}, // XEmacs +// {"windows-863", "cp863"}, // XEmacs +// {"windows-864", "cp864"}, // XEmacs +// {"windows-865", "cp865"}, // XEmacs +// {"windows-866", "cp866"}, // XEmacs +// {"windows-869", "cp869"}, // XEmacs +// {"windows-874", "cp874"}, // XEmacs +// {"windows-875", ""}, // not covered +// {"windows-932", "cp932"}, // *, XEmacs +// {"windows-936", "cp936"}, // XEmacs +// {"windows-949", "cp949"}, // *, XEmacs +// {"windows-950", "cp950"}, // *, XEmacs +// {"x-ctext", ""}, // -- +// {"x-ctext-with-extensions", ""}, // -- + + {NULL, NULL}, +}; + +// --------------------------------------------------------- +// Convert encoding name from emacs to mime. +// --------------------------------------------------------- +char * +emacs2mime(char *emacs_enc) +{ + int emacs_enc_len = strlen(emacs_enc); + if (emacs_enc_len > 4 + && !strcasecmp(emacs_enc + emacs_enc_len - 4, "-dos")) + emacs_enc[emacs_enc_len - 4] = 0; + if (emacs_enc_len > 4 + && !strcasecmp(emacs_enc + emacs_enc_len - 4, "-mac")) + emacs_enc[emacs_enc_len - 4] = 0; + if (emacs_enc_len > 5 + && !strcasecmp(emacs_enc + emacs_enc_len - 5, "-unix")) + emacs_enc[emacs_enc_len - 5] = 0; + for (const conversion *table = emacs_to_mime; table->from; table++) + if (!strcasecmp(emacs_enc, table->from)) + return (char *)table->to; + return emacs_enc; +} + +// --------------------------------------------------------- +// Print out Unicode entity if value is greater than 0x7F. +// --------------------------------------------------------- +inline void +unicode_entity(int u) +{ + if (u < 0x80) + putchar(u); + else { + // Handle soft hyphen specially -- it is an input character only, + // not a glyph. + if (u == 0xAD) { + putchar('\\'); + putchar('%'); + } + else + printf("\\[u%04X]", u); + } +} + +// --------------------------------------------------------- +// Conversion functions. All functions take `data', which +// normally holds the first two lines, and a file pointer. +// --------------------------------------------------------- + +// Conversion from ISO-8859-1 (aka Latin-1) to Unicode. +void +conversion_latin1(FILE *fp, const string &data) +{ + int len = data.length(); + const unsigned char *ptr = (const unsigned char *)data.contents(); + for (int i = 0; i < len; i++) + unicode_entity(ptr[i]); + int c = -1; + while ((c = getc(fp)) != EOF) + unicode_entity(c); +} + +// A future version of groff shall support UTF-8 natively. +// In this case, the UTF-8 stuff here in this file will be +// moved to the troff program. + +struct utf8 { + FILE *fp; + unsigned char s[6]; + enum { + FIRST = 0, + SECOND, + THIRD, + FOURTH, + FIFTH, + SIXTH + } byte; + int expected_bytes; + int invalid_warning; + int incomplete_warning; + utf8(FILE *); + ~utf8(); + void add(unsigned char); + void invalid(); + void incomplete(); +}; + +utf8::utf8(FILE *f) : fp(f), byte(FIRST), expected_bytes(1), + invalid_warning(1), incomplete_warning(1) +{ + // empty +} + +utf8::~utf8() +{ + if (byte != FIRST) + incomplete(); +} + +inline void +utf8::add(unsigned char c) +{ + s[byte] = c; + if (byte == FIRST) { + if (c < 0x80) + unicode_entity(c); + else if (c < 0xC0) + invalid(); + else if (c < 0xE0) { + expected_bytes = 2; + byte = SECOND; + } + else if (c < 0xF0) { + expected_bytes = 3; + byte = SECOND; + } + else if (c < 0xF8) { + expected_bytes = 4; + byte = SECOND; + } + else if (c < 0xFC) { + expected_bytes = 5; + byte = SECOND; + } + else if (c < 0xFE) { + expected_bytes = 6; + byte = SECOND; + } + else + invalid(); + return; + } + if (c < 0x80 || c > 0xBF) { + incomplete(); + add(c); + return; + } + switch (byte) { + case FIRST: + // can't happen + break; + case SECOND: + if (expected_bytes == 2) { + if (s[0] < 0xC2) + invalid(); + else + unicode_entity(((s[0] & 0x1F) << 6) + | (s[1] ^ 0x80)); + byte = FIRST; + } + else + byte = THIRD; + break; + case THIRD: + if (expected_bytes == 3) { + if (!(s[0] >= 0xE1 || s[1] >= 0xA0)) + invalid(); + else + unicode_entity(((s[0] & 0x1F) << 12) + | ((s[1] ^ 0x80) << 6) + | (s[2] ^ 0x80)); + byte = FIRST; + } + else + byte = FOURTH; + break; + case FOURTH: + // We reject everything greater than 0x10FFFF. + if (expected_bytes == 4) { + if (!((s[0] >= 0xF1 || s[1] >= 0x90) + && (s[0] < 0xF4 || (s[0] == 0xF4 && s[1] < 0x90)))) + invalid(); + else + unicode_entity(((s[0] & 0x07) << 18) + | ((s[1] ^ 0x80) << 12) + | ((s[2] ^ 0x80) << 6) + | (s[3] ^ 0x80)); + byte = FIRST; + } + else + byte = FIFTH; + break; + case FIFTH: + if (expected_bytes == 5) { + invalid(); + byte = FIRST; + } + else + byte = SIXTH; + break; + case SIXTH: + invalid(); + byte = FIRST; + break; + } +} + +void +utf8::invalid() +{ + if (debug_flag && invalid_warning) { + fprintf(stderr, " invalid byte(s) found in input stream --\n" + " each such sequence replaced with 0xFFFD\n"); + invalid_warning = 0; + } + unicode_entity(0xFFFD); + byte = FIRST; +} + +void +utf8::incomplete() +{ + if (debug_flag && incomplete_warning) { + fprintf(stderr, " incomplete sequence(s) found in input stream --\n" + " each such sequence replaced with 0xFFFD\n"); + incomplete_warning = 0; + } + unicode_entity(0xFFFD); + byte = FIRST; +} + +// Conversion from UTF-8 to Unicode. +void +conversion_utf8(FILE *fp, const string &data) +{ + utf8 u(fp); + int len = data.length(); + const unsigned char *ptr = (const unsigned char *)data.contents(); + for (int i = 0; i < len; i++) + u.add(ptr[i]); + int c = -1; + while ((c = getc(fp)) != EOF) + u.add(c); + return; +} + +// Conversion from cp1047 (EBCDIC) to UTF-8. +void +conversion_cp1047(FILE *fp, const string &data) +{ + static unsigned char cp1047[] = { + 0x00, 0x01, 0x02, 0x03, 0x9C, 0x09, 0x86, 0x7F, // 0x00 + 0x97, 0x8D, 0x8E, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, + 0x10, 0x11, 0x12, 0x13, 0x9D, 0x85, 0x08, 0x87, // 0x10 + 0x18, 0x19, 0x92, 0x8F, 0x1C, 0x1D, 0x1E, 0x1F, + 0x80, 0x81, 0x82, 0x83, 0x84, 0x0A, 0x17, 0x1B, // 0x20 + 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x05, 0x06, 0x07, + 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, // 0x30 + 0x98, 0x99, 0x9A, 0x9B, 0x14, 0x15, 0x9E, 0x1A, + 0x20, 0xA0, 0xE2, 0xE4, 0xE0, 0xE1, 0xE3, 0xE5, // 0x40 + 0xE7, 0xF1, 0xA2, 0x2E, 0x3C, 0x28, 0x2B, 0x7C, + 0x26, 0xE9, 0xEA, 0xEB, 0xE8, 0xED, 0xEE, 0xEF, // 0x50 + 0xEC, 0xDF, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0x5E, + 0x2D, 0x2F, 0xC2, 0xC4, 0xC0, 0xC1, 0xC3, 0xC5, // 0x60 + 0xC7, 0xD1, 0xA6, 0x2C, 0x25, 0x5F, 0x3E, 0x3F, + 0xF8, 0xC9, 0xCA, 0xCB, 0xC8, 0xCD, 0xCE, 0xCF, // 0x70 + 0xCC, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22, + 0xD8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, // 0x80 + 0x68, 0x69, 0xAB, 0xBB, 0xF0, 0xFD, 0xFE, 0xB1, + 0xB0, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, // 0x90 + 0x71, 0x72, 0xAA, 0xBA, 0xE6, 0xB8, 0xC6, 0xA4, + 0xB5, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, // 0xA0 + 0x79, 0x7A, 0xA1, 0xBF, 0xD0, 0x5B, 0xDE, 0xAE, + 0xAC, 0xA3, 0xA5, 0xB7, 0xA9, 0xA7, 0xB6, 0xBC, // 0xB0 + 0xBD, 0xBE, 0xDD, 0xA8, 0xAF, 0x5D, 0xB4, 0xD7, + 0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, // 0xC0 + 0x48, 0x49, 0xAD, 0xF4, 0xF6, 0xF2, 0xF3, 0xF5, + 0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, // 0xD0 + 0x51, 0x52, 0xB9, 0xFB, 0xFC, 0xF9, 0xFA, 0xFF, + 0x5C, 0xF7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, // 0xE0 + 0x59, 0x5A, 0xB2, 0xD4, 0xD6, 0xD2, 0xD3, 0xD5, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, // 0xF0 + 0x38, 0x39, 0xB3, 0xDB, 0xDC, 0xD9, 0xDA, 0x9F, + }; + int len = data.length(); + const unsigned char *ptr = (const unsigned char *)data.contents(); + for (int i = 0; i < len; i++) + unicode_entity(cp1047[ptr[i]]); + int c = -1; + while ((c = getc(fp)) != EOF) + unicode_entity(cp1047[c]); +} + +// Locale-sensible conversion. +#if HAVE_ICONV +void +conversion_iconv(FILE *fp, const string &data, char *enc) +{ + iconv_t handle = iconv_open(UNICODE, enc); + if (handle == (iconv_t)-1) { + if (errno == EINVAL) { + error("encoding system `%1' not supported by iconv()", enc); + return; + } + fatal("iconv_open failed"); + } + char inbuf[BUFSIZ]; + int outbuf[BUFSIZ]; + char *outptr = (char *)outbuf; + size_t outbytes_left = BUFSIZ * sizeof (int); + // Handle `data'. + char *inptr = (char *)data.contents(); + size_t inbytes_left = data.length(); + char *limit; + while (inbytes_left > 0) { + size_t status = iconv(handle, + (ICONV_CONST char **)&inptr, &inbytes_left, + &outptr, &outbytes_left); + if (status == (size_t)-1) { + if (errno == EILSEQ) { + // Invalid byte sequence. XXX + inptr++; + inbytes_left--; + } + else if (errno == E2BIG) { + // Output buffer is full. + limit = (char *)outbuf + BUFSIZ * sizeof (int) - outbytes_left; + for (int *ptr = outbuf; (char *)ptr < limit; ptr++) + unicode_entity(*ptr); + memmove(outbuf, outptr, outbytes_left); + outptr = (char *)outbuf + outbytes_left; + outbytes_left = BUFSIZ * sizeof (int) - outbytes_left; + } + else if (errno == EINVAL) { + // `data' ends with partial input sequence. + memcpy(inbuf, inptr, inbytes_left); + break; + } + } + } + // Handle `fp' and switch to `inbuf'. + size_t read_bytes; + char *read_start = inbuf + inbytes_left; + while ((read_bytes = fread(read_start, 1, BUFSIZ - inbytes_left, fp)) > 0) { + inptr = inbuf; + inbytes_left += read_bytes; + while (inbytes_left > 0) { + size_t status = iconv(handle, + (ICONV_CONST char **)&inptr, &inbytes_left, + &outptr, &outbytes_left); + if (status == (size_t)-1) { + if (errno == EILSEQ) { + // Invalid byte sequence. XXX + inptr++; + inbytes_left--; + } + else if (errno == E2BIG) { + // Output buffer is full. + limit = (char *)outbuf + BUFSIZ * sizeof (int) - outbytes_left; + for (int *ptr = outbuf; (char *)ptr < limit; ptr++) + unicode_entity(*ptr); + memmove(outbuf, outptr, outbytes_left); + outptr = (char *)outbuf + outbytes_left; + outbytes_left = BUFSIZ * sizeof (int) - outbytes_left; + } + else if (errno == EINVAL) { + // `inbuf' ends with partial input sequence. + memmove(inbuf, inptr, inbytes_left); + break; + } + } + } + read_start = inbuf + inbytes_left; + } + iconv_close(handle); + // XXX use ferror? + limit = (char *)outbuf + BUFSIZ * sizeof (int) - outbytes_left; + for (int *ptr = outbuf; (char *)ptr < limit; ptr++) + unicode_entity(*ptr); +} +#endif /* HAVE_ICONV */ + +// --------------------------------------------------------- +// Handle Byte Order Mark. +// +// Since we have a chicken-and-egg problem it's necessary +// to handle the BOM manually if it is in the data stream. +// As documented in the Unicode book it is very unlikely +// that any normal text file (regardless of the encoding) +// starts with the bytes which represent a BOM. +// +// Return the BOM in string `BOM'; `data' then starts with +// the byte after the BOM. This function reads (at most) +// four bytes from the data stream. +// +// Return encoding if a BOM is found, NULL otherwise. +// --------------------------------------------------------- +const char * +get_BOM(FILE *fp, string &BOM, string &data) +{ + // The BOM is U+FEFF. We have thus the following possible + // representations. + // + // UTF-8: 0xEFBBBF + // UTF-16: 0xFEFF or 0xFFFE + // UTF-32: 0x0000FEFF or 0xFFFE0000 + static struct { + int len; + const char *str; + const char *name; + } BOM_table[] = { + {4, "\x00\x00\xFE\xFF", "UTF-32"}, + {4, "\xFF\xFE\x00\x00", "UTF-32"}, + {3, "\xEF\xBB\xBF", "UTF-8"}, + {2, "\xFE\xFF", "UTF-16"}, + {2, "\xFF\xFE", "UTF-16"}, + }; + const int BOM_table_len = sizeof (BOM_table) / sizeof (BOM_table[0]); + char BOM_string[4]; + const char *retval = NULL; + int len; + for (len = 0; len < 4; len++) { + int c = getc(fp); + if (c == EOF) + break; + BOM_string[len] = char(c); + } + int i; + for (i = 0; i < BOM_table_len; i++) { + if (BOM_table[i].len <= len + && memcmp(BOM_string, BOM_table[i].str, BOM_table[i].len) == 0) + break; + } + int j = 0; + if (i < BOM_table_len) { + for (; j < BOM_table[i].len; j++) + BOM += BOM_string[j]; + retval = BOM_table[i].name; + } + for (; j < len; j++) + data += BOM_string[j]; + return retval; +} + +// --------------------------------------------------------- +// Get first two lines from input stream. +// +// Return string (allocated with `new') without zero bytes +// or NULL in case no coding tag can occur in the data +// (which is stored unmodified in `data'). +// --------------------------------------------------------- +char * +get_tag_lines(FILE *fp, string &data) +{ + int newline_count = 0; + int c, prev = -1; + // Handle CR, LF, and CRLF as line separators. + for (int i = 0; i < data.length(); i++) { + c = data[i]; + if (c == '\n' || c == '\r') + newline_count++; + if (c == '\n' && prev == '\r') + newline_count--; + prev = c; + } + if (newline_count > 1) + return NULL; + int emit_warning = 1; + for (int lines = newline_count; lines < 2; lines++) { + while ((c = getc(fp)) != EOF) { + if (c == '\0' && debug_flag && emit_warning) { + fprintf(stderr, + " null byte(s) found in input stream --\n" + " search for coding tag might return false result\n"); + emit_warning = 0; + } + data += char(c); + if (c == '\n' || c == '\r') + break; + } + // Handle CR, LF, and CRLF as line separators. + if (c == '\r') { + c = getc(fp); + if (c != EOF && c != '\n') + ungetc(c, fp); + else + data += char(c); + } + } + return data.extract(); +} + +// --------------------------------------------------------- +// Check whether C string starts with a comment. +// +// Return 1 if true, 0 otherwise. +// --------------------------------------------------------- +int +is_comment_line(char *s) +{ + if (!s || !*s) + return 0; + if (*s == '.' || *s == '\'') + { + s++; + while (*s == ' ' || *s == '\t') + s++; + if (*s && *s == '\\') + { + s++; + if (*s == '"' || *s == '#') + return 1; + } + } + else if (*s == '\\') + { + s++; + if (*s == '#') + return 1; + } + return 0; +} + +// --------------------------------------------------------- +// Get a value/variable pair from a local variables list +// in a C string which look like this: +// +// : ; : ; ... +// +// Leading and trailing blanks are ignored. There might be +// more than one blank after `:' and `;'. +// +// Return position of next value/variable pair or NULL if +// at end of data. +// --------------------------------------------------------- +char * +get_variable_value_pair(char *d1, char **variable, char **value) +{ + static char var[MAX_VAR_LEN], val[MAX_VAR_LEN]; + *variable = var; + *value = val; + while (*d1 == ' ' || *d1 == '\t') + d1++; + // Get variable. + int l = 0; + while (l < MAX_VAR_LEN - 1 && *d1 && !strchr(";: \t", *d1)) + var[l++] = *(d1++); + var[l] = 0; + // Skip everything until `:', `;', or end of data. + while (*d1 && *d1 != ':' && *d1 != ';') + d1++; + val[0] = 0; + if (!*d1) + return NULL; + if (*d1 == ';') + return d1 + 1; + d1++; + while (*d1 == ' ' || *d1 == '\t') + d1++; + // Get value. + l = 0; + while (l < MAX_VAR_LEN - 1 && *d1 && !strchr("; \t", *d1)) + val[l++] = *(d1++); + val[l] = 0; + // Skip everything until `;' or end of data. + while (*d1 && *d1 != ';') + d1++; + if (*d1 == ';') + return d1 + 1; + return NULL; +} + +// --------------------------------------------------------- +// Check coding tag in the read buffer. +// +// We search for the following line: +// +// ... -*--*- +// +// (`...' might be anything). +// +// can be one of the following syntax forms at the +// beginning of the line: +// +// .\" .\# '\" '\# \# +// +// There can be whitespace after the leading `.' or "'". +// +// The local variables list must occur within the first +// comment block at the very beginning of the data stream. +// +// Within the , we search for +// +// coding: +// +// which specifies the coding system used for the data +// stream. +// +// Return if found, NULL otherwise. +// +// Note that null bytes in the data are skipped before applying +// the algorithm. This should work even with files encoded as +// UTF-16 or UTF-32 (or its siblings) in most cases. +// +// XXX Add support for tag at the end of buffer. +// --------------------------------------------------------- +char * +check_coding_tag(FILE *fp, string &data) +{ + char *inbuf = get_tag_lines(fp, data); + char *lineend; + for (char *p = inbuf; is_comment_line(p); p = lineend + 1) { + if ((lineend = strchr(p, '\n')) == NULL) + break; + *lineend = 0; // switch temporarily to '\0' + char *d1 = strstr(p, "-*-"); + char *d2 = 0; + if (d1) + d2 = strstr(d1 + 3, "-*-"); + *lineend = '\n'; // restore newline + if (!d1 || !d2) + continue; + *d2 = 0; // switch temporarily to '\0' + d1 += 3; + while (d1) { + char *variable, *value; + d1 = get_variable_value_pair(d1, &variable, &value); + if (!strcasecmp(variable, "coding")) { + *d2 = '-'; // restore '-' + a_delete inbuf; + return value; + } + } + *d2 = '-'; // restore '-' + } + a_delete inbuf; + return NULL; +} + +// --------------------------------------------------------- +// Handle an input file. If filename is `-' handle stdin. +// +// Return 1 on success, 0 otherwise. +// --------------------------------------------------------- +int +do_file(const char *filename) +{ + FILE *fp; + string BOM, data; + if (strcmp(filename, "-")) { + if (debug_flag) + fprintf(stderr, "file `%s':\n", filename); + fp = fopen(filename, FOPEN_RB); + if (!fp) { + error("can't open `%1': %2", filename, strerror(errno)); + return 0; + } + } + else { + if (debug_flag) + fprintf(stderr, "standard input:\n"); + SET_BINARY(fileno(stdin)); + fp = stdin; + } + const char *BOM_encoding = get_BOM(fp, BOM, data); + // Determine the encoding. + char *encoding; + if (user_encoding[0]) { + if (debug_flag) { + fprintf(stderr, " user-specified encoding `%s', " + "no search for coding tag\n", + user_encoding); + if (BOM_encoding && strcmp(BOM_encoding, user_encoding)) + fprintf(stderr, " but BOM in data stream implies encoding `%s'!\n", + BOM_encoding); + } + encoding = (char *)user_encoding; + } + else if (BOM_encoding) { + if (debug_flag) + fprintf(stderr, " found BOM, no search for coding tag\n"); + encoding = (char *)BOM_encoding; + } + else { + // `check_coding_tag' returns a pointer to a static array (or NULL). + char *file_encoding = check_coding_tag(fp, data); + if (!file_encoding) { + if (debug_flag) + fprintf(stderr, " no file encoding\n"); + file_encoding = default_encoding; + } + else + if (debug_flag) + fprintf(stderr, " file encoding: `%s'\n", file_encoding); + encoding = file_encoding; + } + strncpy(encoding_string, encoding, MAX_VAR_LEN - 1); + encoding_string[MAX_VAR_LEN - 1] = 0; + encoding = encoding_string; + // Translate from MIME & Emacs encoding names to locale encoding names. + encoding = emacs2mime(encoding_string); + if (encoding[0] == '\0') { + error("encoding `%1' not supported, not a portable encoding", + encoding_string); + return 0; + } + if (debug_flag) + fprintf(stderr, " encoding used: `%s'\n", encoding); + if (!raw_flag) + printf(".lf 1 %s\n", filename); + int success = 1; + // Call converter (converters write to stdout). + if (!strcasecmp(encoding, "ISO-8859-1")) + conversion_latin1(fp, BOM + data); + else if (!strcasecmp(encoding, "UTF-8")) + conversion_utf8(fp, data); + else if (!strcasecmp(encoding, "cp1047")) + conversion_cp1047(fp, BOM + data); + else { +#if HAVE_ICONV + conversion_iconv(fp, BOM + data, encoding); +#else + error("encoding system `%1' not supported", encoding); + success = 0; +#endif /* HAVE_ICONV */ + } + if (fp != stdin) + fclose(fp); + return success; +} + +// --------------------------------------------------------- +// Print usage. +// --------------------------------------------------------- +void +usage(FILE *stream) +{ + fprintf(stream, "usage: %s [ option ] [ files ]\n" + "\n" + "-d show debugging messages\n" + "-D encoding specify default encoding\n" + "-e encoding specify input encoding\n" + "-h print this message\n" + "-r don't add .lf requests\n" + "-v print version number\n" + "\n" + "The default encoding is `%s'.\n", + program_name, default_encoding); +} + +// --------------------------------------------------------- +// Main routine. +// --------------------------------------------------------- +int +main(int argc, char **argv) +{ + program_name = argv[0]; + // Determine the default encoding. This must be done before + // getopt() is called since the usage message shows the default + // encoding. + setlocale(LC_ALL, ""); + char *locale = getlocale(LC_CTYPE); + if (!locale || !strcmp(locale, "C") || !strcmp(locale, "POSIX")) + strcpy(default_encoding, "latin1"); + else { + strncpy(default_encoding, locale_charset(), MAX_VAR_LEN - 1); + default_encoding[MAX_VAR_LEN - 1] = 0; + } + + program_name = argv[0]; + int opt; + static const struct option long_options[] = { + { "help", no_argument, 0, 'h' }, + { "version", no_argument, 0, 'v' }, + { NULL, 0, 0, 0 } + }; + // Parse the command line options. + while ((opt = getopt_long(argc, argv, + "dD:e:hrv", long_options, NULL)) != EOF) + switch (opt) { + case 'v': + printf("GNU preconv (groff) version %s %s iconv support\n", + Version_string, +#ifdef HAVE_ICONV + "with" +#else + "without" +#endif /* HAVE_ICONV */ + ); + exit(0); + break; + case 'd': + debug_flag = 1; + break; + case 'e': + if (optarg) { + strncpy(user_encoding, optarg, MAX_VAR_LEN - 1); + user_encoding[MAX_VAR_LEN - 1] = 0; + } + else + user_encoding[0] = 0; + break; + case 'D': + if (optarg) { + strncpy(default_encoding, optarg, MAX_VAR_LEN - 1); + default_encoding[MAX_VAR_LEN - 1] = 0; + } + break; + case 'r': + raw_flag = 1; + break; + case 'h': + usage(stdout); + exit(0); + break; + case '?': + usage(stderr); + exit(1); + break; + default: + assert(0); + } + int nbad = 0; + if (debug_flag) + fprintf(stderr, "default encoding: `%s'\n", default_encoding); + if (optind >= argc) + nbad += !do_file("-"); + else + for (int i = optind; i < argc; i++) + nbad += !do_file(argv[i]); + if (ferror(stdout) || fflush(stdout) < 0) + fatal("output error"); + return nbad != 0; +} + +/* end of preconv.cpp */ diff --git a/contrib/groff/src/preproc/preconv/preconv.man b/contrib/groff/src/preproc/preconv/preconv.man new file mode 100644 index 0000000000..05fcf3e174 --- /dev/null +++ b/contrib/groff/src/preproc/preconv/preconv.man @@ -0,0 +1,299 @@ +.ig +Copyright (C) 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided that the +entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + +Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be included in +translations approved by the Free Software Foundation instead of in +the original English. +.. +. +.TH PRECONV @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@" +. +. +.SH NAME +preconv \- convert encoding of input files to something GNU troff understands +. +. +.SH SYNOPSIS +.SY preconv +.OP \-dr +.OP \-e encoding +.RI [ files +.IR .\|.\|. ] +. +.SY preconv +.B \-h +| +.B \-\-help +. +.SY preconv +.B \-v +| +.B \-\-version +.YS +. +.PP +It is possible to have whitespace between the +.B \-e +command line option and its parameter. +. +. +.SH DESCRIPTION +.B preconv +reads +.I files +and converts its encoding(s) to a form GNU +.BR troff (@MAN1EXT@) +can process, sending the data to standard output. +Currently, this means ASCII characters and `\e[uXXXX]' entities, where +`XXXX' is a hexadecimal number with four to six digits, representing a +Unicode input code. +Normally, +.B preconv +should be invoked with the +.B \-k +and +.B \-K +options of +.BR groff . +. +. +.SH OPTIONS +.TP +.B \-d +Emit debugging messages to standard error (mainly the used encoding). +. +.TP +.BI \-D encoding +Specify default encoding if everything fails (see below). +. +.TP +.BI \-e encoding +Specify input encoding explicitly, overriding all other methods. +This corresponds to +.BR groff 's +.BI \-K encoding +option. +Without this switch, +.B preconv +uses the algorithm described below to select the input encoding. +. +.TP +.B \-\-help +.TQ +.B \-h +Print help message. +. +.TP +.B \-r +Do not add .lf requests. +. +.TP +.B \-\-version +.TQ +.B \-v +Print version number. +. +. +.SH USAGE +.B preconv +tries to find the input encoding with the following algorithm. +. +.IP 1. +If the input encoding has been explicitly specified with option +.BR \-e , +use it. +. +.IP 2. +Otherwise, check whether the input starts with a +.I Byte Order Mark +(BOM, see below). +If found, use it. +. +.IP 3. +Finally, check whether there is a known +.I coding tag +(see below) in either the first or second input line. +If found, use it. +. +.IP 4. +If everything fails, use a default encoding as given with option +.BR \-D , +by the current locale, or `latin1' if the locale is set to `C', +`POSIX', or empty (in that order). +. +.PP +Note that the +.B groff +program supports a +.B GROFF_ENCODING +environment variable which is eventually expanded to option +.BR \-k . +. +.SS "Byte Order Mark" +The Unicode Standard defines character U+FEFF as the Byte Order Mark +(BOM). +On the other hand, value U+FFFE is guaranteed not be a Unicode character at +all. +This allows to detect the byte order within the data stream (either +big-endian or lower-endian), and the MIME encodings \%`UTF-16' and +\%`UTF-32' mandate that the data stream starts with U+FEFF. +Similarly, the data stream encoded as \%`UTF-8' might start with a BOM (to +ease the conversion from and to \%UTF-16 and \%UTF-32). +In all cases, the byte order mark is +.I not +part of the data but part of the encoding protocol; in other words, +.BR preconv 's +output doesn't contain it. +. +.PP +Note that U+FEFF not at the start of the input data actually is emitted; +it has then the meaning of a `zero width no-break space' character \[en] +something not needed normally in +.BR groff . +. +.SS "Coding Tags" +Editors which support more than a single character encoding need tags +within the input files to mark the file's encoding. +While it is possible to guess the right input encoding with the help of +heuristic algorithms for data which represents a greater amount of a natural +language, it is still just a guess. +Additionally, all algorithms fail easily for input which is either too short +or doesn't represent a natural language. +. +.PP +For these reasons, +.B preconv +supports the coding tag convention (with some restrictions) as used by +.B "GNU Emacs" +and +.B XEmacs +(and probably other programs too). +. +.PP +Coding tags in +.B "GNU Emacs" +and +.B XEmacs +are stored in so-called +.IR "File Variables" . +.B preconv +recognizes the following syntax form which must be put into a troff comment +in the first or second line. +. +.RS +.PP +\-*\- +.IR tag1 : +.IR value1 ; +.IR tag2 : +.IR value2 ; +\&.\|.\|.\& \-*\- +.RE +. +.PP +The only relevant tag for +.B preconv +is `coding' which can take the values listed below. +Here an example line which tells +.B Emacs +to edit a file in troff mode, and to use \%latin2 as its encoding. +. +.RS +.PP +.EX +\&.\[rs]" \-*\- mode: troff; coding: latin-2 \-*\- +.EE +.RE +. +.PP +The following list gives all MIME coding tags (either lowercase or +uppercase) supported by +.BR preconv ; +this list is hard-coded in the source. +. +.RS +.PP +.ad l +\%big5, \%cp1047, \%euc-jp, \%euc-kr, \%gb2312, \%iso-8859-1, \%iso-8859-2, +\%iso-8859-5, \%iso-8859-7, \%iso-8859-9, \%iso-8859-13, \%iso-8859-15, +\%koi8-r, \%us-ascii, \%utf-8, \%utf-16, \%utf-16be, \%utf-16le +.ad +.RE +. +.PP +In addition, the following hard-coded list of other tags is recognized which +eventually map to values from the list above. +. +.RS +.PP +.ad l +\%ascii, \%chinese-big5, \%chinese-euc, \%chinese-iso-8bit, \%cn-big5, +\%\%cn-gb, \%cn-gb-2312, \%cp878, \%csascii, \%csisolatin1, +\%cyrillic-iso-8bit, \%cyrillic-koi8, \%euc-china, \%euc-cn, \%euc-japan, +\%euc-japan-1990, \%euc-korea, \%greek-iso-8bit, \%iso-10646/utf8, +\%iso-10646/utf-8, \%iso-latin-1, \%iso-latin-2, \%iso-latin-5, +\%iso-latin-7, \%iso-latin-9, \%japanese-euc, \%japanese-iso-8bit, \%jis8, +\%koi8, \%korean-euc, \%korean-iso-8bit, \%latin-0, \%latin1, \%latin-1, +\%latin-2, \%latin-5, \%latin-7, \%latin-9, \%mule-utf-8, \%mule-utf-16, +\%mule-utf-16be, \%mule-utf-16-be, \%mule-utf-16be-with-signature, +\%mule-utf-16le, \%mule-utf-16-le, \%mule-utf-16le-with-signature, \%utf8, +\%utf-16-be, \%utf-16-be-with-signature, \%utf-16be-with-signature, +\%utf-16-le, \%utf-16-le-with-signature, \%utf-16le-with-signature +.ad +.RE +. +.PP +Those tags are taken from +.B "GNU Emacs" +and +.BR XEmacs , +together with some aliases. +Trailing \%`-dos', \%`-unix', and \%`-mac' suffixes of coding tags (which +give the end-of-line convention used in the file) are stripped off before +the comparison with the above tags happens. +. +.SS "Iconv Issues" +.B preconv +by itself only supports three encodings: \%latin-1, cp1047, and \%UTF-8; +all other encodings are passed to the +.B iconv +library functions. +At compile time it is searched and checked for a valid +.B iconv +implementation; a call to `preconv \-\-version' shows whether +.B iconv +is used. +. +. +.SH BUGS +.B preconv +doesn't support +.I "local variable lists" +yet. +This is a different syntax form to specify local variables at the end of a +file. +. +. +.SH "SEE ALSO" +.BR groff (@MAN1EXT@) +.br +the +.B "GNU Emacs" +and +.B XEmacs +info pages +. +.\" Local Variables: +.\" mode: nroff +.\" End: diff --git a/contrib/groff/src/preproc/refer/command.cpp b/contrib/groff/src/preproc/refer/command.cpp index 441f9534e1..33bc9c235e 100644 --- a/contrib/groff/src/preproc/refer/command.cpp +++ b/contrib/groff/src/preproc/refer/command.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2004, 2006, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "refer.h" #include "refid.h" @@ -409,6 +408,7 @@ static void no_default_database_command(int, argument *) static void bibliography_command(int argc, argument *argv) { + have_bibliography = 1; const char *saved_filename = current_filename; int saved_lineno = current_lineno; int saved_label_in_text = label_in_text; diff --git a/contrib/groff/src/preproc/refer/command.h b/contrib/groff/src/preproc/refer/command.h index f0472ac8b6..9ad0707f74 100644 --- a/contrib/groff/src/preproc/refer/command.h +++ b/contrib/groff/src/preproc/refer/command.h @@ -1,26 +1,27 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2006, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ void process_commands(const char *file); void process_commands(string &s, const char *file, int lineno); +extern int have_bibliography; extern int accumulate; extern int move_punctuation; extern int search_default; diff --git a/contrib/groff/src/preproc/refer/label.cpp b/contrib/groff/src/preproc/refer/label.cpp index e39022d461..268fc46c2e 100644 --- a/contrib/groff/src/preproc/refer/label.cpp +++ b/contrib/groff/src/preproc/refer/label.cpp @@ -1,14 +1,37 @@ #ifndef lint -static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93 (groff)"; +static const char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; #endif + +#include +#include + #define YYBYACC 1 #define YYMAJOR 1 #define YYMINOR 9 -#define yyclearin (yychar=(-1)) -#define yyerrok (yyerrflag=0) -#define YYRECOVERING (yyerrflag!=0) +#define YYPATCH 20081224 + +#define YYEMPTY (-1) +#define yyclearin (yychar = YYEMPTY) +#define yyerrok (yyerrflag = 0) +#define YYRECOVERING() (yyerrflag != 0) + +/* compatibility with bison */ +#ifdef YYPARSE_PARAM +/* compatibility with FreeBSD */ +#ifdef YYPARSE_PARAM_TYPE +#define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) +#else +#define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) +#endif +#else +#define YYPARSE_DECL() yyparse(void) +#endif /* YYPARSE_PARAM */ + +extern int YYPARSE_DECL(); + +static int yygrowstack(void); #define YYPREFIX "yy" -#line 23 "label.y" +#line 22 "label.y" #include "refer.h" #include "refid.h" @@ -206,59 +229,59 @@ static expression *parse_result; string literals; -#line 222 "label.y" +#line 221 "label.y" typedef union { int num; expression *expr; struct { int ndigits; int val; } dig; struct { int start; int len; } str; } YYSTYPE; -#line 217 "y.tab.c" +#line 239 "label.cpp" #define TOKEN_LETTER 257 #define TOKEN_LITERAL 258 #define TOKEN_DIGIT 259 #define YYERRCODE 256 -short yylhs[] = { -1, +static const short yylhs[] = { -1, 0, 1, 1, 6, 6, 2, 2, 2, 3, 3, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 9, 7, 7, 8, 8, 10, 10, 10, }; -short yylen[] = { 2, +static const short yylen[] = { 2, 1, 1, 5, 0, 1, 1, 3, 3, 1, 2, 1, 3, 1, 1, 1, 2, 2, 2, 5, 3, 3, 2, 3, 3, 0, 1, 1, 2, 1, 2, 0, 1, 1, }; -short yydefred[] = { 0, +static const short yydefred[] = { 0, 0, 14, 13, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 27, 0, 17, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 28, 30, 23, 24, 0, 0, 0, 32, 33, 0, 0, 0, 0, 0, 0, 3, 0, 19, }; -short yydgoto[] = { 7, +static const short yydgoto[] = { 7, 8, 9, 10, 11, 12, 13, 15, 18, 47, 39, }; -short yysindex[] = { -32, +static const short yysindex[] = { -32, -257, 0, 0, -240, -32, -32, 0, 0, -18, -32, -36, -114, 0, 0, -246, 0, 0, -241, -14, -39, -32, -32, -32, -114, -21, -257, -257, 0, -32, 0, 0, 0, 0, -25, -32, -32, 0, 0, -223, -246, -246, -36, -32, -257, 0, -246, 0, }; -short yyrindex[] = { 35, +static const short yyrindex[] = { 35, 1, 0, 0, 0, -5, -4, 0, 0, 14, 208, 159, 224, 0, 0, 11, 0, 0, 40, 0, 0, 2, 0, 0, 253, -220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 281, 0, 0, 0, 50, 105, 214, 0, 115, 0, 149, 0, }; -short yygindex[] = { 0, +static const short yygindex[] = { 0, 19, 0, 7, 37, -10, 10, -23, 0, 0, 0, }; #define YYTABLESIZE 511 -short yytable[] = { 24, +static const short yytable[] = { 24, 15, 14, 40, 41, 4, 28, 26, 5, 27, 25, 16, 29, 30, 2, 19, 20, 16, 31, 17, 23, 46, 37, 33, 38, 24, 24, 32, 6, 35, 36, @@ -312,7 +335,7 @@ short yytable[] = { 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, }; -short yycheck[] = { 10, +static const short yycheck[] = { 10, 0, 259, 26, 27, 37, 42, 43, 40, 45, 46, 0, 126, 259, 0, 5, 6, 257, 259, 259, 38, 44, 43, 62, 45, 35, 36, 41, 60, 22, 23, @@ -372,7 +395,8 @@ short yycheck[] = { 10, #endif #define YYMAXTOKEN 259 #if YYDEBUG -char *yyname[] = { +static const char *yyname[] = { + "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'",0,"'-'","'.'",0,0,0,0,0,0,0,0,0,0,0, "':'",0,"'<'",0,"'>'","'?'","'@'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -382,7 +406,7 @@ char *yyname[] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,"TOKEN_LETTER","TOKEN_LITERAL","TOKEN_DIGIT", }; -char *yyrule[] = { +static const char *yyrule[] = { "$accept : expr", "expr : optional_conditional", "conditional : alternative", @@ -417,31 +441,43 @@ char *yyrule[] = { "flag :", "flag : '+'", "flag : '-'", + }; #endif +#if YYDEBUG +#include +#endif + +/* define the initial stack-sizes */ #ifdef YYSTACKSIZE #undef YYMAXDEPTH -#define YYMAXDEPTH YYSTACKSIZE +#define YYMAXDEPTH YYSTACKSIZE #else #ifdef YYMAXDEPTH #define YYSTACKSIZE YYMAXDEPTH #else #define YYSTACKSIZE 500 -#define YYMAXDEPTH 500 +#define YYMAXDEPTH 500 #endif #endif -int yydebug; -int yynerrs; -int yyerrflag; -int yychar; -short *yyssp; + +#define YYINITSTACKSIZE 500 + +int yydebug; +int yynerrs; +int yyerrflag; +int yychar; +short *yyssp; YYSTYPE *yyvsp; -YYSTYPE yyval; -YYSTYPE yylval; -short yyss[YYSTACKSIZE]; -YYSTYPE yyvs[YYSTACKSIZE]; -#define yystacksize YYSTACKSIZE -#line 398 "label.y" +YYSTYPE yyval; +YYSTYPE yylval; + +/* variables for the parser stack */ +static short *yyss; +static short *yysslim; +static YYSTYPE *yyvs; +static unsigned yystacksize; +#line 397 "label.y" /* bison defines const to be empty unless __STDC__ is defined, which it isn't under cfront */ @@ -1238,24 +1274,57 @@ int reference::get_nauthors() const } return nauthors; } -#line 1242 "y.tab.c" -#define YYABORT goto yyabort +#line 1277 "label.cpp" +/* allocate initial stack or double stack size, up to YYMAXDEPTH */ +static int yygrowstack(void) +{ + int i; + unsigned newsize; + short *newss; + YYSTYPE *newvs; + + if ((newsize = yystacksize) == 0) + newsize = YYINITSTACKSIZE; + else if (newsize >= YYMAXDEPTH) + return -1; + else if ((newsize *= 2) > YYMAXDEPTH) + newsize = YYMAXDEPTH; + + i = yyssp - yyss; + newss = (yyss != 0) + ? (short *)realloc(yyss, newsize * sizeof(*newss)) + : (short *)malloc(newsize * sizeof(*newss)); + if (newss == 0) + return -1; + + yyss = newss; + yyssp = newss + i; + newvs = (yyvs != 0) + ? (YYSTYPE *)realloc(yyvs, newsize * sizeof(*newvs)) + : (YYSTYPE *)malloc(newsize * sizeof(*newvs)); + if (newvs == 0) + return -1; + + yyvs = newvs; + yyvsp = newvs + i; + yystacksize = newsize; + yysslim = yyss + newsize - 1; + return 0; +} + +#define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept -#define YYERROR goto yyerrlab +#define YYERROR goto yyerrlab + int -#if defined(__STDC__) -yyparse(void) -#else -yyparse() -#endif +YYPARSE_DECL() { - register int yym, yyn, yystate; + int yym, yyn, yystate; #if YYDEBUG - register char *yys; - extern char *getenv(); + const char *yys; - if (yys = getenv("YYDEBUG")) + if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') @@ -1265,11 +1334,14 @@ yyparse() yynerrs = 0; yyerrflag = 0; - yychar = (-1); + yychar = YYEMPTY; + yystate = 0; + if (yyss == NULL && yygrowstack()) goto yyoverflow; yyssp = yyss; yyvsp = yyvs; - *yyssp = yystate = 0; + yystate = 0; + *yyssp = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; @@ -1295,13 +1367,14 @@ yyloop: printf("%sdebug: state %d, shifting to state %d\n", YYPREFIX, yystate, yytable[yyn]); #endif - if (yyssp >= yyss + yystacksize - 1) + if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } - *++yyssp = yystate = yytable[yyn]; + yystate = yytable[yyn]; + *++yyssp = yytable[yyn]; *++yyvsp = yylval; - yychar = (-1); + yychar = YYEMPTY; if (yyerrflag > 0) --yyerrflag; goto yyloop; } @@ -1312,16 +1385,14 @@ yyloop: goto yyreduce; } if (yyerrflag) goto yyinrecovery; -#ifdef lint - goto yynewerror; -#endif -yynewerror: + yyerror("syntax error"); -#ifdef lint + goto yyerrlab; -#endif + yyerrlab: ++yynerrs; + yyinrecovery: if (yyerrflag < 3) { @@ -1336,11 +1407,12 @@ yyinrecovery: printf("%sdebug: state %d, error recovery shifting\ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); #endif - if (yyssp >= yyss + yystacksize - 1) + if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } - *++yyssp = yystate = yytable[yyn]; + yystate = yytable[yyn]; + *++yyssp = yytable[yyn]; *++yyvsp = yylval; goto yyloop; } @@ -1370,9 +1442,10 @@ yyinrecovery: YYPREFIX, yystate, yychar, yys); } #endif - yychar = (-1); + yychar = YYEMPTY; goto yyloop; } + yyreduce: #if YYDEBUG if (yydebug) @@ -1380,79 +1453,82 @@ yyreduce: YYPREFIX, yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; - yyval = yyvsp[1-yym]; + if (yym) + yyval = yyvsp[1-yym]; + else + memset(&yyval, 0, sizeof yyval); switch (yyn) { case 1: -#line 251 "label.y" -{ parse_result = (yyvsp[0].expr ? new analyzed_expr(yyvsp[0].expr) : 0); } +#line 250 "label.y" + { parse_result = (yyvsp[0].expr ? new analyzed_expr(yyvsp[0].expr) : 0); } break; case 2: -#line 256 "label.y" -{ yyval.expr = yyvsp[0].expr; } +#line 255 "label.y" + { yyval.expr = yyvsp[0].expr; } break; case 3: -#line 258 "label.y" -{ yyval.expr = new conditional_expr(yyvsp[-4].expr, yyvsp[-2].expr, yyvsp[0].expr); } +#line 257 "label.y" + { yyval.expr = new conditional_expr(yyvsp[-4].expr, yyvsp[-2].expr, yyvsp[0].expr); } break; case 4: -#line 263 "label.y" -{ yyval.expr = 0; } +#line 262 "label.y" + { yyval.expr = 0; } break; case 5: -#line 265 "label.y" -{ yyval.expr = yyvsp[0].expr; } +#line 264 "label.y" + { yyval.expr = yyvsp[0].expr; } break; case 6: -#line 270 "label.y" -{ yyval.expr = yyvsp[0].expr; } +#line 269 "label.y" + { yyval.expr = yyvsp[0].expr; } break; case 7: -#line 272 "label.y" -{ yyval.expr = new alternative_expr(yyvsp[-2].expr, yyvsp[0].expr); } +#line 271 "label.y" + { yyval.expr = new alternative_expr(yyvsp[-2].expr, yyvsp[0].expr); } break; case 8: -#line 274 "label.y" -{ yyval.expr = new conditional_expr(yyvsp[-2].expr, yyvsp[0].expr, 0); } +#line 273 "label.y" + { yyval.expr = new conditional_expr(yyvsp[-2].expr, yyvsp[0].expr, 0); } break; case 9: -#line 279 "label.y" -{ yyval.expr = yyvsp[0].expr; } +#line 278 "label.y" + { yyval.expr = yyvsp[0].expr; } break; case 10: -#line 281 "label.y" -{ yyval.expr = new list_expr(yyvsp[-1].expr, yyvsp[0].expr); } +#line 280 "label.y" + { yyval.expr = new list_expr(yyvsp[-1].expr, yyvsp[0].expr); } break; case 11: -#line 286 "label.y" -{ yyval.expr = yyvsp[0].expr; } +#line 285 "label.y" + { yyval.expr = yyvsp[0].expr; } break; case 12: -#line 288 "label.y" -{ yyval.expr = new substitute_expr(yyvsp[-2].expr, yyvsp[0].expr); } +#line 287 "label.y" + { yyval.expr = new substitute_expr(yyvsp[-2].expr, yyvsp[0].expr); } break; case 13: -#line 293 "label.y" -{ yyval.expr = new at_expr; } +#line 292 "label.y" + { yyval.expr = new at_expr; } break; case 14: -#line 295 "label.y" -{ +#line 294 "label.y" + { yyval.expr = new literal_expr(literals.contents() + yyvsp[0].str.start, yyvsp[0].str.len); } break; case 15: -#line 300 "label.y" -{ yyval.expr = new field_expr(yyvsp[0].num, 0); } +#line 299 "label.y" + { yyval.expr = new field_expr(yyvsp[0].num, 0); } break; case 16: -#line 302 "label.y" -{ yyval.expr = new field_expr(yyvsp[-1].num, yyvsp[0].num - 1); } +#line 301 "label.y" + { yyval.expr = new field_expr(yyvsp[-1].num, yyvsp[0].num - 1); } break; case 17: -#line 304 "label.y" -{ +#line 303 "label.y" + { switch (yyvsp[0].num) { case 'I': case 'i': @@ -1468,14 +1544,14 @@ case 17: } break; case 18: -#line 320 "label.y" -{ +#line 319 "label.y" + { yyval.expr = new format_expr('0', yyvsp[0].dig.ndigits, yyvsp[0].dig.val); } break; case 19: -#line 324 "label.y" -{ +#line 323 "label.y" + { switch (yyvsp[-1].num) { case 'l': yyval.expr = new map_expr(yyvsp[-4].expr, lowercase); @@ -1506,62 +1582,62 @@ case 19: } break; case 20: -#line 355 "label.y" -{ yyval.expr = new truncate_expr(yyvsp[-2].expr, yyvsp[0].num); } +#line 354 "label.y" + { yyval.expr = new truncate_expr(yyvsp[-2].expr, yyvsp[0].num); } break; case 21: -#line 357 "label.y" -{ yyval.expr = new truncate_expr(yyvsp[-2].expr, -yyvsp[0].num); } +#line 356 "label.y" + { yyval.expr = new truncate_expr(yyvsp[-2].expr, -yyvsp[0].num); } break; case 22: -#line 359 "label.y" -{ yyval.expr = new star_expr(yyvsp[-1].expr); } +#line 358 "label.y" + { yyval.expr = new star_expr(yyvsp[-1].expr); } break; case 23: -#line 361 "label.y" -{ yyval.expr = yyvsp[-1].expr; } +#line 360 "label.y" + { yyval.expr = yyvsp[-1].expr; } break; case 24: -#line 363 "label.y" -{ yyval.expr = new separator_expr(yyvsp[-1].expr); } +#line 362 "label.y" + { yyval.expr = new separator_expr(yyvsp[-1].expr); } break; case 25: -#line 368 "label.y" -{ yyval.num = -1; } +#line 367 "label.y" + { yyval.num = -1; } break; case 26: -#line 370 "label.y" -{ yyval.num = yyvsp[0].num; } +#line 369 "label.y" + { yyval.num = yyvsp[0].num; } break; case 27: -#line 375 "label.y" -{ yyval.num = yyvsp[0].num; } +#line 374 "label.y" + { yyval.num = yyvsp[0].num; } break; case 28: -#line 377 "label.y" -{ yyval.num = yyvsp[-1].num*10 + yyvsp[0].num; } +#line 376 "label.y" + { yyval.num = yyvsp[-1].num*10 + yyvsp[0].num; } break; case 29: -#line 382 "label.y" -{ yyval.dig.ndigits = 1; yyval.dig.val = yyvsp[0].num; } +#line 381 "label.y" + { yyval.dig.ndigits = 1; yyval.dig.val = yyvsp[0].num; } break; case 30: -#line 384 "label.y" -{ yyval.dig.ndigits = yyvsp[-1].dig.ndigits + 1; yyval.dig.val = yyvsp[-1].dig.val*10 + yyvsp[0].num; } +#line 383 "label.y" + { yyval.dig.ndigits = yyvsp[-1].dig.ndigits + 1; yyval.dig.val = yyvsp[-1].dig.val*10 + yyvsp[0].num; } break; case 31: -#line 390 "label.y" -{ yyval.num = 0; } +#line 389 "label.y" + { yyval.num = 0; } break; case 32: -#line 392 "label.y" -{ yyval.num = 1; } +#line 391 "label.y" + { yyval.num = 1; } break; case 33: -#line 394 "label.y" -{ yyval.num = -1; } +#line 393 "label.y" + { yyval.num = -1; } break; -#line 1565 "y.tab.c" +#line 1640 "label.cpp" } yyssp -= yym; yystate = *yyssp; @@ -1604,17 +1680,20 @@ break; printf("%sdebug: after reduction, shifting from state %d \ to state %d\n", YYPREFIX, *yyssp, yystate); #endif - if (yyssp >= yyss + yystacksize - 1) + if (yyssp >= yysslim && yygrowstack()) { goto yyoverflow; } - *++yyssp = yystate; + *++yyssp = (short) yystate; *++yyvsp = yyval; goto yyloop; + yyoverflow: yyerror("yacc stack overflow"); + yyabort: return (1); + yyaccept: return (0); } diff --git a/contrib/groff/src/preproc/refer/label.y b/contrib/groff/src/preproc/refer/label.y index d76f95ef3c..072392d1e8 100644 --- a/contrib/groff/src/preproc/refer/label.y +++ b/contrib/groff/src/preproc/refer/label.y @@ -1,5 +1,5 @@ /* -*- C++ -*- - Copyright (C) 1989, 1990, 1991, 1992, 2000, 2004 + Copyright (C) 1989, 1990, 1991, 1992, 2000, 2004, 2007, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ %{ diff --git a/contrib/groff/src/preproc/refer/ref.cpp b/contrib/groff/src/preproc/refer/ref.cpp index 59c69d52b6..1b599174bc 100644 --- a/contrib/groff/src/preproc/refer/ref.cpp +++ b/contrib/groff/src/preproc/refer/ref.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2003 +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2003, 2008, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "refer.h" #include "refid.h" @@ -420,8 +419,11 @@ void reference::compute_sort_key() return; sort_fields += '\0'; const char *sf = sort_fields.contents(); + int first_time = 1; while (*sf != '\0') { - sort_key += SORT_SEP; + if (!first_time) + sort_key += SORT_SEP; + first_time = 0; char f = *sf++; int n = 1; if (*sf == '+') { diff --git a/contrib/groff/src/preproc/refer/ref.h b/contrib/groff/src/preproc/refer/ref.h index ffb81ac869..5dc45c2f06 100644 --- a/contrib/groff/src/preproc/refer/ref.h +++ b/contrib/groff/src/preproc/refer/ref.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2005 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2005, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ // declarations to avoid friend name injection problems int compare_reference(const reference &, const reference &); diff --git a/contrib/groff/src/preproc/refer/refer.cpp b/contrib/groff/src/preproc/refer/refer.cpp index 66afa4b385..292d0e7ad4 100644 --- a/contrib/groff/src/preproc/refer/refer.cpp +++ b/contrib/groff/src/preproc/refer/refer.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989-1992, 2000, 2001, 2002, 2004 +/* Copyright (C) 1989-1992, 2000, 2001, 2002, 2004, 2006, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "refer.h" #include "refid.h" @@ -51,6 +50,7 @@ string discard_fields = "XYZ"; string pre_label = "\\*([."; string post_label = "\\*(.]"; string sep_label = ", "; +int have_bibliography = 0; int accumulate = 0; int move_punctuation = 0; int abbreviate_label_ranges = 0; @@ -940,7 +940,8 @@ void output_references() { assert(accumulate); if (!hash_table_size) { - error("nothing to reference (probably `bibliography' before `sort')"); + if (have_bibliography) + error("nothing to reference (probably `bibliography' before `sort')"); accumulate = 0; nreferences = 0; return; diff --git a/contrib/groff/src/preproc/refer/refer.h b/contrib/groff/src/preproc/refer/refer.h index ac871cfae7..5b2faa4133 100644 --- a/contrib/groff/src/preproc/refer/refer.h +++ b/contrib/groff/src/preproc/refer/refer.h @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2004, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" diff --git a/contrib/groff/src/preproc/refer/refer.man b/contrib/groff/src/preproc/refer/refer.man index 0881657d40..966de55e6e 100644 --- a/contrib/groff/src/preproc/refer/refer.man +++ b/contrib/groff/src/preproc/refer/refer.man @@ -1,5 +1,5 @@ .ig -Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2005 +Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of @@ -781,7 +781,7 @@ of the form . .LP is encountered, -after all input files hve been processed, +after all input files have been processed, and whenever .B .R1 line is recognized. @@ -799,7 +799,7 @@ print it at the end of the reference as a paragraph preceded by the line . .LP If -.I macro +.I string is omitted it will default to .BR AP ; if diff --git a/contrib/groff/src/preproc/refer/token.cpp b/contrib/groff/src/preproc/refer/token.cpp index 1eb30062f8..cdd75be6af 100644 --- a/contrib/groff/src/preproc/refer/token.cpp +++ b/contrib/groff/src/preproc/refer/token.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2001 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "refer.h" #include "token.h" diff --git a/contrib/groff/src/preproc/refer/token.h b/contrib/groff/src/preproc/refer/token.h index 7d3404942f..cc967dc198 100644 --- a/contrib/groff/src/preproc/refer/token.h +++ b/contrib/groff/src/preproc/refer/token.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ enum token_type { TOKEN_OTHER, diff --git a/contrib/groff/src/preproc/soelim/soelim.cpp b/contrib/groff/src/preproc/soelim/soelim.cpp index 235dfe6644..57732fd1c9 100644 --- a/contrib/groff/src/preproc/soelim/soelim.cpp +++ b/contrib/groff/src/preproc/soelim/soelim.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989-1992, 2000, 2001, 2003, 2004, 2005 +/* Copyright (C) 1989-1992, 2000, 2001, 2003, 2004, 2005, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" @@ -40,12 +39,12 @@ int tex_flag = 0; extern "C" const char *Version_string; -int do_file(const char *filename); +int do_file(const char *); void usage(FILE *stream) { - fprintf(stream, "usage: %s [ -Crtv ] [ -I file ] [ files ]\n", program_name); + fprintf(stream, "usage: %s [ -Crtv ] [ -I dir ] [ files ]\n", program_name); } int main(int argc, char **argv) @@ -60,11 +59,9 @@ int main(int argc, char **argv) while ((opt = getopt_long(argc, argv, "CI:rtv", long_options, NULL)) != EOF) switch (opt) { case 'v': - { - printf("GNU soelim (groff) version %s\n", Version_string); - exit(0); - break; - } + printf("GNU soelim (groff) version %s\n", Version_string); + exit(0); + break; case 'C': compatible_flag = 1; break; @@ -101,8 +98,8 @@ int main(int argc, char **argv) void set_location() { - if(!raw_flag) { - if(!tex_flag) + if (!raw_flag) { + if (!tex_flag) printf(".lf %d %s\n", current_lineno, current_filename); else printf("%% file %s, line %d\n", current_filename, current_lineno); diff --git a/contrib/groff/src/preproc/soelim/soelim.man b/contrib/groff/src/preproc/soelim/soelim.man index fb17e3644f..ebf4e4e38b 100644 --- a/contrib/groff/src/preproc/soelim/soelim.man +++ b/contrib/groff/src/preproc/soelim/soelim.man @@ -1,6 +1,7 @@ '\" p .ig -Copyright (C) 1989-2000, 2001, 2003, 2004 Free Software Foundation, Inc. +Copyright (C) 1989-2000, 2001, 2003, 2004, 2006, 2008, 2009 +Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice @@ -22,38 +23,40 @@ the original English. . .TH @G@SOELIM @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@" . +. .SH NAME +. @g@soelim \- interpret .so requests in groff input . +. .SH SYNOPSIS -.B @g@soelim -[ -.B \-Crtv -] -[ -.BI \-I dir -] -[ -.IR files \|.\|.\|.\| -] +. +.SY @g@soelim +.OP \-Crtv +.OP \-I dir +.RI [ files +.IR \|.\|.\|. ] +.YS . .PP It is possible to have whitespace between the .B \-I command line option and its parameter. . +. .SH DESCRIPTION +. .B @g@soelim reads .I files and replaces lines of the form .IP -.BI .so\ file +.BI .so\~ file .LP by the contents of .IR file . It is useful if files included with -.B so +.B .so need to be preprocessed. Normally, .B @g@soelim @@ -63,8 +66,18 @@ option of .BR groff . . .PP -Note that there must be no whitespace between the leading dot and -the two characters `s' and `o'. Otherwise, only +To embed `\[rs]' in the file name, write `\[rs]\[rs]' or `\[rs]e'. +To embed a space, write `\[rs]\ '. +Any other escape sequence in +.I file +makes +.B soelim +ignore the whole line. +. +.PP +Note that there must be no whitespace between the leading dot and the two +characters `s' and `o'. +Otherwise, only .B groff interprets the .B .so @@ -72,7 +85,9 @@ request (and .B soelim ignores it). . +. .SH OPTIONS +. .TP .B \-C Recognize @@ -81,34 +96,47 @@ even when followed by a character other than space or newline. . .TP .BI \-I dir -This option may be used to specify a directory to search for -files (both those on the command line and those named in -.B \&.so +This option may be used to add a directory to the search path for files +(both those on the command line and those named in +.B .so requests). -The current directory is always searched first. -This option may be specified more than once, -the directories will be searched in the order specified. -No directory search is performed for files specified using an absolute path. +The search path is initialized with the current directory. +This option may be specified more than once; the directories are then +searched in the order specified (but before the current directory). +If you want to make the current directory be read before other directories, +add +.B \-I.\& +at the appropriate place. +.IP +No directory search is performed for files with an absolute file name. . .TP .B \-r -Do not add .lf requests (for general use, with non-groff files). +Do not add +.B .lf +requests (for general use, with non-groff files). . .TP .B \-t -Don't emit .lf requests but TeX comment lines (starting with `%') giving -the current file and line number. +Don't emit +.B .lf +requests but TeX comment lines (starting with `%') giving the current file +and line number. . .TP .B \-v Print the version number. . +. .SH USAGE +. The normal processing sequence of groff is this: . .PP .ie t \{\ .PS +.ps 10 +.vs 12 box invisible width 0.5 height 0.4 "input" "file"; move to last box .bottom; down; @@ -131,6 +159,8 @@ move to last box .bottom; down; arrow 0.3; box invisible width 0.5 height 0.4 "output" "file" +.ps +.vs .PE .\} .el \{\ @@ -163,8 +193,7 @@ required for to source files. . .PP -If a file to be sourced should also be preprocessed, it must -already be read +If a file to be sourced should also be preprocessed, it must already be read .I before the input file passes through the preprocessor. This is handled by @@ -173,6 +202,8 @@ This is handled by .PP .ie t \{\ .PS +.ps 10 +.vs 12 box invisible width 0.5 height 0.4 "input" "file"; move to last box .bottom; down; @@ -192,6 +223,8 @@ move to last box .bottom; down; arrow 0.3; box invisible width 0.5 height 0.4 "output" "file" +.ps +.vs .PE .\} .el \{\ @@ -208,7 +241,9 @@ box invisible width 0.5 height 0.4 "output" "file" .fi .\} . +. .SH "SEE ALSO" +. .BR groff (@MAN1EXT@) . .\" Local Variables: diff --git a/contrib/groff/src/preproc/tbl/main.cpp b/contrib/groff/src/preproc/tbl/main.cpp index d79adb0bf8..e9fec7c2ef 100644 --- a/contrib/groff/src/preproc/tbl/main.cpp +++ b/contrib/groff/src/preproc/tbl/main.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005, + 2007, 2008, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "table.h" @@ -508,6 +508,9 @@ options *process_options(table_input &in) opt->decimal_point_char = arg[0]; } } + else if (strieq(p, "experimental")) { + opt->flags |= table::EXPERIMENTAL; + } else { error("unrecognised global option `%1'", p); // delete opt; @@ -619,6 +622,7 @@ struct format { int *separation; string *width; char *equal; + char *expand; entry_format **entry; char **vline; @@ -635,8 +639,11 @@ format::format(int nr, int nc) : nrows(nr), ncolumns(nc) separation[i] = -1; width = new string[ncolumns]; equal = new char[ncolumns]; - for (i = 0; i < ncolumns; i++) + expand = new char[ncolumns]; + for (i = 0; i < ncolumns; i++) { equal[i] = 0; + expand[i] = 0; + } entry = new entry_format *[nrows]; for (i = 0; i < nrows; i++) entry[i] = new entry_format[ncolumns]; @@ -676,6 +683,7 @@ format::~format() a_delete separation; ad_delete(ncolumns) width; a_delete equal; + a_delete expand; for (int i = 0; i < nrows; i++) { a_delete vline[i]; ad_delete(ncolumns) entry[i]; @@ -692,6 +700,7 @@ struct input_entry_format : public entry_format { int pre_vline; int last_column; int equal; + int expand; input_entry_format(format_type, input_entry_format * = 0); ~input_entry_format(); void debug_print(); @@ -705,6 +714,7 @@ input_entry_format::input_entry_format(format_type t, input_entry_format *p) vline = 0; pre_vline = 0; equal = 0; + expand = 0; } input_entry_format::~input_entry_format() @@ -734,6 +744,8 @@ void input_entry_format::debug_print() } if (equal) putc('e', stderr); + if (expand) + putc('x', stderr); if (separation >= 0) fprintf(stderr, "%d", separation); for (i = 0; i < vline; i++) @@ -750,6 +762,7 @@ format *process_format(table_input &in, options *opt, format *current_format = 0) { input_entry_format *list = 0; + int have_expand = 0; int c = in.get(); for (;;) { int pre_vline = 0; @@ -837,26 +850,6 @@ format *process_format(table_input &in, options *opt, int success = 1; do { switch (c) { - case 't': - case 'T': - c = in.get(); - list->vertical_alignment = entry_modifier::TOP; - break; - case 'd': - case 'D': - c = in.get(); - list->vertical_alignment = entry_modifier::BOTTOM; - break; - case 'u': - case 'U': - c = in.get(); - list->stagger = 1; - break; - case 'z': - case 'Z': - c = in.get(); - list->zero_width = 1; - break; case '0': case '1': case '2': @@ -876,6 +869,23 @@ format *process_format(table_input &in, options *opt, list->separation = w; } break; + case 'B': + case 'b': + c = in.get(); + list->font = "B"; + break; + case 'd': + case 'D': + c = in.get(); + list->vertical_alignment = entry_modifier::BOTTOM; + break; + case 'e': + case 'E': + c = in.get(); + list->equal = 1; + // `e' and `x' are mutually exclusive + list->expand = 0; + break; case 'f': case 'F': do { @@ -910,8 +920,13 @@ format *process_format(table_input &in, options *opt, } } break; - case 'x': - case 'X': + case 'I': + case 'i': + c = in.get(); + list->font = "I"; + break; + case 'm': + case 'M': do { c = in.get(); } while (c == ' ' || c == '\t'); @@ -944,33 +959,6 @@ format *process_format(table_input &in, options *opt, } } break; - case 'v': - case 'V': - c = in.get(); - list->vertical_spacing.val = 0; - list->vertical_spacing.inc = 0; - if (c == '+' || c == '-') { - list->vertical_spacing.inc = (c == '+' ? 1 : -1); - c = in.get(); - } - if (c == EOF || !csdigit(c)) { - error("`v' modifier must be followed by number"); - list->vertical_spacing.inc = 0; - } - else { - do { - list->vertical_spacing.val *= 10; - list->vertical_spacing.val += c - '0'; - c = in.get(); - } while (c != EOF && csdigit(c)); - } - if (list->vertical_spacing.val > MAX_VERTICAL_SPACING - || list->vertical_spacing.val < -MAX_VERTICAL_SPACING) { - error("unreasonable vertical spacing"); - list->vertical_spacing.val = 0; - list->vertical_spacing.inc = 0; - } - break; case 'p': case 'P': c = in.get(); @@ -998,6 +986,43 @@ format *process_format(table_input &in, options *opt, list->point_size.inc = 0; } break; + case 't': + case 'T': + c = in.get(); + list->vertical_alignment = entry_modifier::TOP; + break; + case 'u': + case 'U': + c = in.get(); + list->stagger = 1; + break; + case 'v': + case 'V': + c = in.get(); + list->vertical_spacing.val = 0; + list->vertical_spacing.inc = 0; + if (c == '+' || c == '-') { + list->vertical_spacing.inc = (c == '+' ? 1 : -1); + c = in.get(); + } + if (c == EOF || !csdigit(c)) { + error("`v' modifier must be followed by number"); + list->vertical_spacing.inc = 0; + } + else { + do { + list->vertical_spacing.val *= 10; + list->vertical_spacing.val += c - '0'; + c = in.get(); + } while (c != EOF && csdigit(c)); + } + if (list->vertical_spacing.val > MAX_VERTICAL_SPACING + || list->vertical_spacing.val < -MAX_VERTICAL_SPACING) { + error("unreasonable vertical spacing"); + list->vertical_spacing.val = 0; + list->vertical_spacing.inc = 0; + } + break; case 'w': case 'W': c = in.get(); @@ -1033,25 +1058,26 @@ format *process_format(table_input &in, options *opt, } while (c != EOF && csdigit(c)); } } + // `w' and `x' are mutually exclusive + list->expand = 0; break; - case 'e': - case 'E': - c = in.get(); - list->equal++; - break; - case '|': + case 'x': + case 'X': c = in.get(); - list->vline++; + list->expand = 1; + // `x' and `e' are mutually exclusive + list->equal = 0; + // `x' and `w' are mutually exclusive + list->width = ""; break; - case 'B': - case 'b': + case 'z': + case 'Z': c = in.get(); - list->font = "B"; + list->zero_width = 1; break; - case 'I': - case 'i': + case '|': c = in.get(); - list->font = "I"; + list->vline++; break; case ' ': case '\t': @@ -1139,7 +1165,7 @@ format *process_format(table_input &in, options *opt, col = 0; for (tem = list; tem; tem = tem->next) { f->entry[row][col] = *tem; - if (col < ncolumns-1) { + if (col < ncolumns - 1) { // use the greatest separation if (tem->separation > f->separation[col]) { if (current_format) @@ -1156,17 +1182,25 @@ format *process_format(table_input &in, options *opt, else f->equal[col] = 1; } + if (tem->expand && !f->expand[col]) { + if (current_format) + error("cannot change which columns are expanded in continued format"); + else { + f->expand[col] = 1; + have_expand = 1; + } + } if (!tem->width.empty()) { // use the last width if (!f->width[col].empty() && f->width[col] != tem->width) - error("multiple widths for column %1", col+1); + error("multiple widths for column %1", col + 1); f->width[col] = tem->width; } if (tem->pre_vline) { assert(col == 0); f->vline[row][col] = tem->pre_vline; } - f->vline[row][col+1] = tem->vline; + f->vline[row][col + 1] = tem->vline; if (tem->last_column) { row++; col = 0; @@ -1176,7 +1210,7 @@ format *process_format(table_input &in, options *opt, } free_input_entry_format_list(list); for (col = 0; col < ncolumns; col++) { - entry_format *e = f->entry[f->nrows-1] + col; + entry_format *e = f->entry[f->nrows - 1] + col; if (e->type != FORMAT_HLINE && e->type != FORMAT_DOUBLE_HLINE && e->type != FORMAT_SPAN) @@ -1187,6 +1221,10 @@ format *process_format(table_input &in, options *opt, delete f; return 0; } + if (have_expand && (opt->flags & table::EXPAND)) { + error("ignoring global `expand' option because of `x' specifiers"); + opt->flags &= ~table::EXPAND; + } return f; } @@ -1487,6 +1525,9 @@ table *process_data(table_input &in, format *f, options *opt) for (i = 0; i < ncolumns; i++) if (f->equal[i]) tbl->set_equal_column(i); + for (i = 0; i < ncolumns; i++) + if (f->expand[i]) + tbl->set_expand_column(i); return tbl; } diff --git a/contrib/groff/src/preproc/tbl/table.cpp b/contrib/groff/src/preproc/tbl/table.cpp index 8312386aaf..e36b8aa41d 100644 --- a/contrib/groff/src/preproc/tbl/table.cpp +++ b/contrib/groff/src/preproc/tbl/table.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2003, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2003, 2004, 2007, 2008, + 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "table.h" @@ -63,6 +63,8 @@ const int DEFAULT_COLUMN_SEPARATION = 3; // this must be one character #define COMPATIBLE_REG PREFIX "c" +#define EXPAND_REG PREFIX "expand" + #define LEADER_REG PREFIX LEADER #define BLOCK_WIDTH_PREFIX PREFIX "tbw" @@ -79,25 +81,24 @@ const int DEFAULT_COLUMN_SEPARATION = 3; #define COLUMN_DIVIDE_PREFIX PREFIX "cd" #define ROW_TOP_PREFIX PREFIX "rt" -string block_width_reg(int r, int c); -string block_diversion_name(int r, int c); -string block_height_reg(int r, int c); -string span_width_reg(int start_col, int end_col); -string span_left_numeric_width_reg(int start_col, int end_col); -string span_right_numeric_width_reg(int start_col, int end_col); -string span_alphabetic_width_reg(int start_col, int end_col); -string column_separation_reg(int col); -string row_start_reg(int r); -string column_start_reg(int c); -string column_end_reg(int c); -string column_divide_reg(int c); -string row_top_reg(int r); +string block_width_reg(int, int); +string block_diversion_name(int, int); +string block_height_reg(int, int); +string span_width_reg(int, int); +string span_left_numeric_width_reg(int, int); +string span_right_numeric_width_reg(int, int); +string span_alphabetic_width_reg(int, int); +string column_separation_reg(int); +string row_start_reg(int); +string column_start_reg(int); +string column_end_reg(int); +string column_divide_reg(int); +string row_top_reg(int); void set_inline_modifier(const entry_modifier *); -void restore_inline_modifier(const entry_modifier *m); +void restore_inline_modifier(const entry_modifier *); void set_modifier(const entry_modifier *); -int find_decimal_point(const char *s, char decimal_point_char, - const char *delim); +int find_decimal_point(const char *, char, const char *); string an_empty_string; int location_force_filename = 0; @@ -148,12 +149,13 @@ protected: int end_row; int start_col; int end_col; + const table *parent; const entry_modifier *mod; public: void set_location(); - table_entry(const entry_modifier *); + table_entry(const table *, const entry_modifier *); virtual ~table_entry(); - virtual int divert(int ncols, const string *mw, int *sep); + virtual int divert(int, const string *, int *, int); virtual void do_width(); virtual void do_depth(); virtual void print() = 0; @@ -168,7 +170,7 @@ public: class simple_entry : public table_entry { public: - simple_entry(const entry_modifier *); + simple_entry(const table *, const entry_modifier *); void print(); void position_vertically(); simple_entry *to_simple_entry(); @@ -178,7 +180,7 @@ public: class empty_entry : public simple_entry { public: - empty_entry(const entry_modifier *); + empty_entry(const table *, const entry_modifier *); int line_type(); }; @@ -187,7 +189,7 @@ protected: char *contents; void print_contents(); public: - text_entry(char *, const entry_modifier *); + text_entry(const table *, const entry_modifier *, char *); ~text_entry(); }; @@ -200,33 +202,33 @@ void text_entry::print_contents() class repeated_char_entry : public text_entry { public: - repeated_char_entry(char *s, const entry_modifier *m); + repeated_char_entry(const table *, const entry_modifier *, char *); void simple_print(int); }; class simple_text_entry : public text_entry { public: - simple_text_entry(char *s, const entry_modifier *m); + simple_text_entry(const table *, const entry_modifier *, char *); void do_width(); }; class left_text_entry : public simple_text_entry { public: - left_text_entry(char *s, const entry_modifier *m); + left_text_entry(const table *, const entry_modifier *, char *); void simple_print(int); void add_tab(); }; class right_text_entry : public simple_text_entry { public: - right_text_entry(char *s, const entry_modifier *m); + right_text_entry(const table *, const entry_modifier *, char *); void simple_print(int); void add_tab(); }; class center_text_entry : public simple_text_entry { public: - center_text_entry(char *s, const entry_modifier *m); + center_text_entry(const table *, const entry_modifier *, char *); void simple_print(int); void add_tab(); }; @@ -234,14 +236,14 @@ public: class numeric_text_entry : public text_entry { int dot_pos; public: - numeric_text_entry(char *s, const entry_modifier *m, int pos); + numeric_text_entry(const table *, const entry_modifier *, char *, int); void do_width(); void simple_print(int); }; class alphabetic_text_entry : public text_entry { public: - alphabetic_text_entry(char *s, const entry_modifier *m); + alphabetic_text_entry(const table *, const entry_modifier *, char *); void do_width(); void simple_print(int); void add_tab(); @@ -252,7 +254,7 @@ protected: char double_vrule_on_right; char double_vrule_on_left; public: - line_entry(const entry_modifier *); + line_entry(const table *, const entry_modifier *); void note_double_vrule_on_right(int); void note_double_vrule_on_left(int); void simple_print(int) = 0; @@ -260,7 +262,7 @@ public: class single_line_entry : public line_entry { public: - single_line_entry(const entry_modifier *m); + single_line_entry(const table *, const entry_modifier *); void simple_print(int); single_line_entry *to_single_line_entry(); int line_type(); @@ -268,7 +270,7 @@ public: class double_line_entry : public line_entry { public: - double_line_entry(const entry_modifier *m); + double_line_entry(const table *, const entry_modifier *); void simple_print(int); double_line_entry *to_double_line_entry(); int line_type(); @@ -276,14 +278,14 @@ public: class short_line_entry : public simple_entry { public: - short_line_entry(const entry_modifier *m); + short_line_entry(const table *, const entry_modifier *); void simple_print(int); int line_type(); }; class short_double_line_entry : public simple_entry { public: - short_double_line_entry(const entry_modifier *m); + short_double_line_entry(const table *, const entry_modifier *); void simple_print(int); int line_type(); }; @@ -291,12 +293,11 @@ public: class block_entry : public table_entry { char *contents; protected: - void do_divert(int alphabetic, int ncols, const string *mw, int *sep); + void do_divert(int, int, const string *, int *, int); public: - block_entry(char *s, const entry_modifier *m); + block_entry(const table *, const entry_modifier *, char *); ~block_entry(); - int divert(int ncols, const string *mw, int *sep); - void do_width(); + int divert(int, const string *, int *, int); void do_depth(); void position_vertically(); void print() = 0; @@ -304,32 +305,32 @@ public: class left_block_entry : public block_entry { public: - left_block_entry(char *s, const entry_modifier *m); + left_block_entry(const table *, const entry_modifier *, char *); void print(); }; class right_block_entry : public block_entry { public: - right_block_entry(char *s, const entry_modifier *m); + right_block_entry(const table *, const entry_modifier *, char *); void print(); }; class center_block_entry : public block_entry { public: - center_block_entry(char *s, const entry_modifier *m); + center_block_entry(const table *, const entry_modifier *, char *); void print(); }; class alphabetic_block_entry : public block_entry { public: - alphabetic_block_entry(char *s, const entry_modifier *m); + alphabetic_block_entry(const table *, const entry_modifier *, char *); void print(); - int divert(int ncols, const string *mw, int *sep); + int divert(int, const string *, int *, int); }; -table_entry::table_entry(const entry_modifier *m) +table_entry::table_entry(const table *p, const entry_modifier *m) : next(0), input_lineno(-1), input_filename(0), - start_row(-1), end_row(-1), start_col(-1), end_col(-1), mod(m) + start_row(-1), end_row(-1), start_col(-1), end_col(-1), parent(p), mod(m) { } @@ -337,7 +338,7 @@ table_entry::~table_entry() { } -int table_entry::divert(int, const string *, int *) +int table_entry::divert(int, const string *, int *, int) { return 0; } @@ -383,7 +384,8 @@ void table_entry::note_double_vrule_on_left(int) { } -simple_entry::simple_entry(const entry_modifier *m) : table_entry(m) +simple_entry::simple_entry(const table *p, const entry_modifier *m) +: table_entry(p, m) { } @@ -436,8 +438,8 @@ simple_entry *simple_entry::to_simple_entry() return this; } -empty_entry::empty_entry(const entry_modifier *m) -: simple_entry(m) +empty_entry::empty_entry(const table *p, const entry_modifier *m) +: simple_entry(p, m) { } @@ -446,8 +448,8 @@ int empty_entry::line_type() return 0; } -text_entry::text_entry(char *s, const entry_modifier *m) -: simple_entry(m), contents(s) +text_entry::text_entry(const table *p, const entry_modifier *m, char *s) +: simple_entry(p, m), contents(s) { } @@ -456,8 +458,9 @@ text_entry::~text_entry() a_delete contents; } -repeated_char_entry::repeated_char_entry(char *s, const entry_modifier *m) -: text_entry(s, m) +repeated_char_entry::repeated_char_entry(const table *p, + const entry_modifier *m, char *s) +: text_entry(p, m, s) { } @@ -472,8 +475,9 @@ void repeated_char_entry::simple_print(int) restore_inline_modifier(mod); } -simple_text_entry::simple_text_entry(char *s, const entry_modifier *m) -: text_entry(s, m) +simple_text_entry::simple_text_entry(const table *p, + const entry_modifier *m, char *s) +: text_entry(p, m, s) { } @@ -486,8 +490,9 @@ void simple_text_entry::do_width() prints(DELIMITER_CHAR "\n"); } -left_text_entry::left_text_entry(char *s, const entry_modifier *m) -: simple_text_entry(s, m) +left_text_entry::left_text_entry(const table *p, + const entry_modifier *m, char *s) +: simple_text_entry(p, m, s) { } @@ -504,8 +509,9 @@ void left_text_entry::add_tab() printfs(" \\n[%1]u", column_end_reg(end_col)); } -right_text_entry::right_text_entry(char *s, const entry_modifier *m) -: simple_text_entry(s, m) +right_text_entry::right_text_entry(const table *p, + const entry_modifier *m, char *s) +: simple_text_entry(p, m, s) { } @@ -522,8 +528,9 @@ void right_text_entry::add_tab() printfs(" \\n[%1]u", column_end_reg(end_col)); } -center_text_entry::center_text_entry(char *s, const entry_modifier *m) -: simple_text_entry(s, m) +center_text_entry::center_text_entry(const table *p, + const entry_modifier *m, char *s) +: simple_text_entry(p, m, s) { } @@ -540,8 +547,10 @@ void center_text_entry::add_tab() printfs(" \\n[%1]u", column_end_reg(end_col)); } -numeric_text_entry::numeric_text_entry(char *s, const entry_modifier *m, int pos) -: text_entry(s, m), dot_pos(pos) +numeric_text_entry::numeric_text_entry(const table *p, + const entry_modifier *m, + char *s, int pos) +: text_entry(p, m, s), dot_pos(pos) { } @@ -584,8 +593,10 @@ void numeric_text_entry::simple_print(int) print_contents(); } -alphabetic_text_entry::alphabetic_text_entry(char *s, const entry_modifier *m) -: text_entry(s, m) +alphabetic_text_entry::alphabetic_text_entry(const table *p, + const entry_modifier *m, + char *s) +: text_entry(p, m, s) { } @@ -614,8 +625,8 @@ void alphabetic_text_entry::add_tab() printfs(" \\n[%1]u", column_end_reg(end_col)); } -block_entry::block_entry(char *s, const entry_modifier *m) -: table_entry(m), contents(s) +block_entry::block_entry(const table *p, const entry_modifier *m, char *s) +: table_entry(p, m), contents(s) { } @@ -651,22 +662,33 @@ void block_entry::position_vertically() prints(".sp -.5v\n"); } -int block_entry::divert(int ncols, const string *mw, int *sep) +int block_entry::divert(int ncols, const string *mw, int *sep, int do_expand) { - do_divert(0, ncols, mw, sep); + do_divert(0, ncols, mw, sep, do_expand); return 1; } void block_entry::do_divert(int alphabetic, int ncols, const string *mw, - int *sep) + int *sep, int do_expand) { + int i; + for (i = start_col; i <= end_col; i++) + if (parent->expand[i]) + break; + if (i > end_col) { + if (do_expand) + return; + } + else { + if (!do_expand) + return; + } printfs(".di %1\n", block_diversion_name(start_row, start_col)); prints(".if \\n[" SAVED_FILL_REG "] .fi\n" ".in 0\n"); prints(".ll "); - int i; for (i = start_col; i <= end_col; i++) - if (mw[i].empty()) + if (mw[i].empty() && !parent->expand[i]) break; if (i > end_col) { // Every column spanned by this entry has a minimum width. @@ -676,11 +698,16 @@ void block_entry::do_divert(int alphabetic, int ncols, const string *mw, printfs("+%1n", as_string(sep[j - 1])); prints('+'); } - printfs("(n;%1)", mw[j]); + if (parent->expand[j]) + prints("\\n[" EXPAND_REG "]u"); + else + printfs("(n;%1)", mw[j]); } printfs(">?\\n[%1]u", span_width_reg(start_col, end_col)); } else + // Assign each column with a block entry 1/(n+1) of the line + // width, where n is the column count. printfs("(u;\\n[%1]>?(\\n[.l]*%2/%3))", span_width_reg(start_col, end_col), as_string(end_col - start_col + 1), @@ -701,7 +728,8 @@ void block_entry::do_divert(int alphabetic, int ncols, const string *mw, span_alphabetic_width_reg(start_col, end_col)); } else - printfs(".nr %1 \\n[%1]>?\\n[dl]\n", span_width_reg(start_col, end_col)); + printfs(".nr %1 \\n[%1]>?\\n[dl]\n", + span_width_reg(start_col, end_col)); } printfs(".nr %1 \\n[dn]\n", block_height_reg(start_row, start_col)); printfs(".nr %1 \\n[dl]\n", block_width_reg(start_row, start_col)); @@ -712,11 +740,6 @@ void block_entry::do_divert(int alphabetic, int ncols, const string *mw, location_force_filename = 1; } -void block_entry::do_width() -{ - // do nothing; the action happens in divert -} - void block_entry::do_depth() { printfs(".nr " BOTTOM_REG " \\n[" BOTTOM_REG "]>?(\\n[%1]+\\n[%2])\n", @@ -724,8 +747,9 @@ void block_entry::do_depth() block_height_reg(start_row, start_col)); } -left_block_entry::left_block_entry(char *s, const entry_modifier *m) -: block_entry(s, m) +left_block_entry::left_block_entry(const table *p, + const entry_modifier *m, char *s) +: block_entry(p, m, s) { } @@ -736,8 +760,9 @@ void left_block_entry::print() prints(".in\n"); } -right_block_entry::right_block_entry(char *s, const entry_modifier *m) -: block_entry(s, m) +right_block_entry::right_block_entry(const table *p, + const entry_modifier *m, char *s) +: block_entry(p, m, s) { } @@ -751,8 +776,9 @@ void right_block_entry::print() prints(".in\n"); } -center_block_entry::center_block_entry(char *s, const entry_modifier *m) -: block_entry(s, m) +center_block_entry::center_block_entry(const table *p, + const entry_modifier *m, char *s) +: block_entry(p, m, s) { } @@ -766,15 +792,17 @@ void center_block_entry::print() prints(".in\n"); } -alphabetic_block_entry::alphabetic_block_entry(char *s, - const entry_modifier *m) -: block_entry(s, m) +alphabetic_block_entry::alphabetic_block_entry(const table *p, + const entry_modifier *m, + char *s) +: block_entry(p, m, s) { } -int alphabetic_block_entry::divert(int ncols, const string *mw, int *sep) +int alphabetic_block_entry::divert(int ncols, const string *mw, int *sep, + int do_expand) { - do_divert(1, ncols, mw, sep); + do_divert(1, ncols, mw, sep, do_expand); return 1; } @@ -788,8 +816,8 @@ void alphabetic_block_entry::print() prints(".in\n"); } -line_entry::line_entry(const entry_modifier *m) -: simple_entry(m), double_vrule_on_right(0), double_vrule_on_left(0) +line_entry::line_entry(const table *p, const entry_modifier *m) +: simple_entry(p, m), double_vrule_on_right(0), double_vrule_on_left(0) { } @@ -803,8 +831,8 @@ void line_entry::note_double_vrule_on_left(int is_corner) double_vrule_on_left = is_corner ? 1 : 2; } -single_line_entry::single_line_entry(const entry_modifier *m) -: line_entry(m) +single_line_entry::single_line_entry(const table *p, const entry_modifier *m) +: line_entry(p, m) { } @@ -840,8 +868,8 @@ single_line_entry *single_line_entry::to_single_line_entry() return this; } -double_line_entry::double_line_entry(const entry_modifier *m) -: line_entry(m) +double_line_entry::double_line_entry(const table *p, const entry_modifier *m) +: line_entry(p, m) { } @@ -887,8 +915,8 @@ double_line_entry *double_line_entry::to_double_line_entry() return this; } -short_line_entry::short_line_entry(const entry_modifier *m) -: simple_entry(m) +short_line_entry::short_line_entry(const table *p, const entry_modifier *m) +: simple_entry(p, m) { } @@ -914,8 +942,9 @@ void short_line_entry::simple_print(int dont_move) prints("\\v'.5v'"); } -short_double_line_entry::short_double_line_entry(const entry_modifier *m) -: simple_entry(m) +short_double_line_entry::short_double_line_entry(const table *p, + const entry_modifier *m) +: simple_entry(p, m) { } @@ -1021,7 +1050,7 @@ struct text_stuff : public stuff { const char *filename; int lineno; - text_stuff(const string &, int r, const char *fn, int ln); + text_stuff(const string &, int, const char *, int); ~text_stuff(); void print(table *); }; @@ -1046,7 +1075,7 @@ void text_stuff::print(table *) } struct single_hline_stuff : public stuff { - single_hline_stuff(int r); + single_hline_stuff(int); void print(table *); int is_single_line(); }; @@ -1067,7 +1096,7 @@ int single_hline_stuff::is_single_line() } struct double_hline_stuff : stuff { - double_hline_stuff(int r); + double_hline_stuff(int); void print(table *); int is_double_line(); }; @@ -1096,13 +1125,14 @@ struct vertical_rule { string top_adjust; string bot_adjust; - vertical_rule(int sr, int er, int c, int dbl, vertical_rule *); + vertical_rule(int, int, int, int, vertical_rule *); ~vertical_rule(); void contribute_to_bottom_macro(table *); void print(); }; -vertical_rule::vertical_rule(int sr, int er, int c, int dbl, vertical_rule *p) +vertical_rule::vertical_rule(int sr, int er, int c, int dbl, + vertical_rule *p) : next(p), start_row(sr), end_row(er), col(c), is_double(dbl) { } @@ -1197,19 +1227,22 @@ void vertical_rule::print() } table::table(int nc, unsigned f, int ls, char dpc) -: flags(f), nrows(0), ncolumns(nc), linesize(ls), decimal_point_char(dpc), +: nrows(0), ncolumns(nc), linesize(ls), decimal_point_char(dpc), vrule_list(0), stuff_list(0), span_list(0), entry_list(0), entry_list_tailp(&entry_list), entry(0), vline(0), row_is_all_lines(0), left_separation(0), right_separation(0), - allocated_rows(0) + total_separation(0), allocated_rows(0), flags(f) { minimum_width = new string[ncolumns]; column_separation = ncolumns > 1 ? new int[ncolumns - 1] : 0; equal = new char[ncolumns]; + expand = new char[ncolumns]; int i; - for (i = 0; i < ncolumns; i++) + for (i = 0; i < ncolumns; i++) { equal[i] = 0; - for (i = 0; i < ncolumns-1; i++) + expand[i] = 0; + } + for (i = 0; i < ncolumns - 1; i++) column_separation[i] = DEFAULT_COLUMN_SEPARATION; delim[0] = delim[1] = '\0'; } @@ -1230,6 +1263,7 @@ table::~table() ad_delete(ncolumns) minimum_width; a_delete column_separation; a_delete equal; + a_delete expand; while (stuff_list) { stuff *tem = stuff_list; stuff_list = stuff_list->next; @@ -1272,6 +1306,12 @@ void table::set_equal_column(int c) equal[c] = 1; } +void table::set_expand_column(int c) +{ + assert(c >= 0 && c < ncolumns); + expand[c] = 1; +} + void table::add_stuff(stuff *p) { stuff **pp; @@ -1280,7 +1320,8 @@ void table::add_stuff(stuff *p) *pp = p; } -void table::add_text_line(int r, const string &s, const char *filename, int lineno) +void table::add_text_line(int r, const string &s, const char *filename, + int lineno) { add_stuff(new text_stuff(s, r, filename, lineno)); } @@ -1449,10 +1490,10 @@ void table::add_entry(int r, int c, const string &str, const entry_format *f, allocate(r); table_entry *e = 0; if (str == "\\_") { - e = new short_line_entry(f); + e = new short_line_entry(this, f); } else if (str == "\\=") { - e = new short_double_line_entry(f); + e = new short_double_line_entry(this, f); } else if (str == "_") { single_line_entry *lefte; @@ -1464,7 +1505,7 @@ void table::add_entry(int r, int c, const string &str, const entry_format *f, entry[r][c] = lefte; } else - e = new single_line_entry(f); + e = new single_line_entry(this, f); } else if (str == "=") { double_line_entry *lefte; @@ -1476,7 +1517,7 @@ void table::add_entry(int r, int c, const string &str, const entry_format *f, entry[r][c] = lefte; } else - e = new double_line_entry(f); + e = new double_line_entry(this, f); } else if (str == "\\^") { do_vspan(r, c); @@ -1486,7 +1527,7 @@ void table::add_entry(int r, int c, const string &str, const entry_format *f, error_with_file_and_line(fn, ln, "bad repeated character"); else { char *s = str.substring(2, str.length() - 2).extract(); - e = new repeated_char_entry(s, f); + e = new repeated_char_entry(this, f, s); } } else { @@ -1501,63 +1542,63 @@ void table::add_entry(int r, int c, const string &str, const entry_format *f, if (!str.empty()) { s = str.extract(); if (is_block) - e = new left_block_entry(s, f); + e = new left_block_entry(this, f, s); else - e = new left_text_entry(s, f); + e = new left_text_entry(this, f, s); } else - e = new empty_entry(f); + e = new empty_entry(this, f); break; case FORMAT_CENTER: if (!str.empty()) { s = str.extract(); if (is_block) - e = new center_block_entry(s, f); + e = new center_block_entry(this, f, s); else - e = new center_text_entry(s, f); + e = new center_text_entry(this, f, s); } else - e = new empty_entry(f); + e = new empty_entry(this, f); break; case FORMAT_RIGHT: if (!str.empty()) { s = str.extract(); if (is_block) - e = new right_block_entry(s, f); + e = new right_block_entry(this, f, s); else - e = new right_text_entry(s, f); + e = new right_text_entry(this, f, s); } else - e = new empty_entry(f); + e = new empty_entry(this, f); break; case FORMAT_NUMERIC: if (!str.empty()) { s = str.extract(); if (is_block) { error_with_file_and_line(fn, ln, "can't have numeric text block"); - e = new left_block_entry(s, f); + e = new left_block_entry(this, f, s); } else { int pos = find_decimal_point(s, decimal_point_char, delim); if (pos < 0) - e = new center_text_entry(s, f); + e = new center_text_entry(this, f, s); else - e = new numeric_text_entry(s, f, pos); + e = new numeric_text_entry(this, f, s, pos); } } else - e = new empty_entry(f); + e = new empty_entry(this, f); break; case FORMAT_ALPHABETIC: if (!str.empty()) { s = str.extract(); if (is_block) - e = new alphabetic_block_entry(s, f); + e = new alphabetic_block_entry(this, f, s); else - e = new alphabetic_text_entry(s, f); + e = new alphabetic_text_entry(this, f, s); } else - e = new empty_entry(f); + e = new empty_entry(this, f); break; case FORMAT_VSPAN: do_vspan(r, c); @@ -1566,13 +1607,13 @@ void table::add_entry(int r, int c, const string &str, const entry_format *f, if (str.length() != 0) error_with_file_and_line(fn, ln, "non-empty data entry for `_' format ignored"); - e = new single_line_entry(f); + e = new single_line_entry(this, f); break; case FORMAT_DOUBLE_HLINE: if (str.length() != 0) error_with_file_and_line(fn, ln, "non-empty data entry for `=' format ignored"); - e = new double_line_entry(f); + e = new double_line_entry(this, f); break; default: assert(0); @@ -1686,6 +1727,15 @@ void table::determine_row_type() } } +int table::count_expand_columns() +{ + int count = 0; + for (int i = 0; i < ncolumns; i++) + if (expand[i]) + count++; + return count; +} + void table::init_output() { prints(".nr " COMPATIBLE_REG " \\n(.C\n" @@ -1940,7 +1990,7 @@ void table::divide_span(int start_col, int end_col) span_width_reg(i, i)); int equal_flag = 0; for (i = start_col; i <= end_col && !equal_flag; i++) - if (equal[i]) + if (equal[i] || expand[i]) equal_flag = 1; if (equal_flag) { for (i = 0; i < ncolumns; i++) @@ -1951,13 +2001,25 @@ void table::divide_span(int start_col, int end_col) prints(".\\}\n"); } -void table::sum_columns(int start_col, int end_col) +void table::sum_columns(int start_col, int end_col, int do_expand) { assert(end_col > start_col); + int i; + for (i = start_col; i <= end_col; i++) + if (expand[i]) + break; + if (i > end_col) { + if (do_expand) + return; + } + else { + if (!do_expand) + return; + } printfs(".nr %1 \\n[%2]", span_width_reg(start_col, end_col), span_width_reg(start_col, start_col)); - for (int i = start_col + 1; i <= end_col; i++) + for (i = start_col + 1; i <= end_col; i++) printfs("+(%1*\\n[" SEPARATION_FACTOR_REG "])+\\n[%2]", as_string(column_separation[i - 1]), span_width_reg(i, i)); @@ -2004,9 +2066,33 @@ void table::build_span_list() } } -void table::compute_separation_factor() +void table::compute_expand_width() { - if (flags & (ALLBOX|BOX|DOUBLEBOX)) + int i; + int colcount = count_expand_columns(); + prints(".nr " EXPAND_REG " \\n[.l]-\\n[.i]"); + for (i = 0; i < ncolumns; i++) + if (!expand[i]) + printfs("-\\n[%1]", span_width_reg(i, i)); + if (total_separation) + printfs("-%1n", as_string(total_separation)); + prints("\n"); + prints(".if \\n[" EXPAND_REG "]<0 \\{"); + entry_list->set_location(); + prints(".tm warning: around line \\n[.c]: table wider than line width\n" + ".nr " EXPAND_REG " 0\n" + ".\\}\n"); + if (colcount > 1) + printfs(".nr " EXPAND_REG " \\n[" EXPAND_REG "]/%1\n", + as_string(colcount)); + for (i = 0; i < ncolumns; i++) + if (expand[i]) + printfs(".nr %1 \\n[%1]>?\\n[" EXPAND_REG "]\n", span_width_reg(i, i)); +} + +void table::compute_total_separation() +{ + if (flags & (ALLBOX | BOX | DOUBLEBOX)) left_separation = right_separation = 1; else { for (int i = 0; i < nrows; i++) { @@ -2016,19 +2102,28 @@ void table::compute_separation_factor() right_separation = 1; } } - if (flags & EXPAND) { - int total_sep = left_separation + right_separation; - int i; - for (i = 0; i < ncolumns - 1; i++) - total_sep += column_separation[i]; - if (total_sep != 0) { - // Don't let the separation factor be negative. - prints(".nr " SEPARATION_FACTOR_REG " \\n[.l]-\\n[.i]"); - for (i = 0; i < ncolumns; i++) - printfs("-\\n[%1]", span_width_reg(i, i)); - printfs("/%1>?0\n", as_string(total_sep)); - } - } + total_separation = left_separation + right_separation; + int i; + for (i = 0; i < ncolumns - 1; i++) + total_separation += column_separation[i]; +} + +void table::compute_separation_factor() +{ + // Don't let the separation factor be negative. + prints(".nr " SEPARATION_FACTOR_REG " \\n[.l]-\\n[.i]"); + for (int i = 0; i < ncolumns; i++) + printfs("-\\n[%1]", span_width_reg(i, i)); + printfs("/%1\n", as_string(total_separation)); + prints(".ie \\n[" SEPARATION_FACTOR_REG "]<=0 \\{"); + entry_list->set_location(); + prints(".tm warning: around line \\n[.c]: column separation set to zero\n" + ".nr " SEPARATION_FACTOR_REG " 0\n" + ".\\}\n" + ".el .if \\n[" SEPARATION_FACTOR_REG "]<1n \\{"); + entry_list->set_location(); + prints(".tm warning: around line \\n[.c]: table squeezed horizontally to fit line length\n" + ".\\}\n"); } void table::compute_column_positions() @@ -2094,47 +2189,72 @@ void table::compute_widths() build_span_list(); int i; horizontal_span *p; + // These values get refined later. prints(".nr " SEPARATION_FACTOR_REG " 1n\n"); for (i = 0; i < ncolumns; i++) { init_span_reg(i, i); if (!minimum_width[i].empty()) - printfs(".nr %1 %2\n", span_width_reg(i, i), minimum_width[i]); + printfs(".nr %1 (n;%2)\n", span_width_reg(i, i), minimum_width[i]); } for (p = span_list; p; p = p->next) init_span_reg(p->start_col, p->end_col); + // Compute all field widths except for blocks. table_entry *q; for (q = entry_list; q; q = q->next) if (!q->mod->zero_width) q->do_width(); + // Compute all span widths, not handling blocks yet. for (i = 0; i < ncolumns; i++) compute_span_width(i, i); for (p = span_list; p; p = p->next) compute_span_width(p->start_col, p->end_col); + // Making columns equal normally increases the width of some columns. make_columns_equal(); // Note that divide_span keeps equal width columns equal. + // This function might increase the width of some columns, too. for (p = span_list; p; p = p->next) divide_span(p->start_col, p->end_col); + compute_total_separation(); for (p = span_list; p; p = p->next) - sum_columns(p->start_col, p->end_col); + sum_columns(p->start_col, p->end_col, 0); + // Now handle unexpanded blocks. int had_spanning_block = 0; int had_equal_block = 0; for (q = entry_list; q; q = q->next) if (q->divert(ncolumns, minimum_width, - (flags & EXPAND) ? column_separation : 0)) { + (flags & EXPAND) ? column_separation : 0, 0)) { if (q->end_col > q->start_col) had_spanning_block = 1; for (i = q->start_col; i <= q->end_col && !had_equal_block; i++) if (equal[i]) had_equal_block = 1; } + // Adjust widths. if (had_equal_block) make_columns_equal(); if (had_spanning_block) for (p = span_list; p; p = p->next) divide_span(p->start_col, p->end_col); - compute_separation_factor(); - for (p = span_list; p; p = p->next) - sum_columns(p->start_col, p->end_col); + compute_expand_width(); + if ((flags & EXPAND) && total_separation != 0) { + compute_separation_factor(); + for (p = span_list; p; p = p->next) + sum_columns(p->start_col, p->end_col, 0); + } + else { + // Handle expanded blocks. + for (p = span_list; p; p = p->next) + sum_columns(p->start_col, p->end_col, 1); + for (q = entry_list; q; q = q->next) + if (q->divert(ncolumns, minimum_width, 0, 1)) { + if (q->end_col > q->start_col) + had_spanning_block = 1; + } + // Adjust widths again. + if (had_spanning_block) + for (p = span_list; p; p = p->next) + divide_span(p->start_col, p->end_col); + } compute_column_positions(); } @@ -2367,7 +2487,8 @@ void table::compute_vrule_bot_adjust(int end_row, int col, string &result) } } -void table::add_vertical_rule(int start_row, int end_row, int col, int is_double) +void table::add_vertical_rule(int start_row, int end_row, + int col, int is_double) { vrule_list = new vertical_rule(start_row, end_row, col, is_double, vrule_list); @@ -2395,7 +2516,7 @@ void table::build_vrule_list() } } } - if (flags & (BOX|ALLBOX|DOUBLEBOX)) { + if (flags & (BOX | ALLBOX | DOUBLEBOX)) { add_vertical_rule(0, nrows - 1, 0, 0); add_vertical_rule(0, nrows - 1, ncolumns, 0); } @@ -2439,7 +2560,7 @@ void table::define_bottom_macro() ".if !\\n[" SUPPRESS_BOTTOM_REG "] \\{" "." REPEATED_VPT_MACRO " 0\n" ".mk " SAVED_VERTICAL_POS_REG "\n"); - if (flags & (BOX|ALLBOX|DOUBLEBOX)) { + if (flags & (BOX | ALLBOX | DOUBLEBOX)) { prints(".if \\n[T.]&\\n[" NEED_BOTTOM_RULE_REG "] \\{"); print_single_hline(0); prints(".\\}\n"); @@ -2524,7 +2645,7 @@ void table::do_row(int r) had_line = 1; } } - // Change the row *after* printing the stuff list (which might contain .TH). + // change the row *after* printing the stuff list (which might contain .TH) printfs("\\*[" TRANSPARENT_STRING_NAME "].nr " CURRENT_ROW_REG " %1\n", as_string(r)); if (!had_line && row_is_all_lines[r]) @@ -2669,7 +2790,7 @@ void table::do_row(int r) void table::do_top() { prints(".fc \002\003\n"); - if (!(flags & NOKEEP) && (flags & (BOX|DOUBLEBOX|ALLBOX))) + if (!(flags & NOKEEP) && (flags & (BOX | DOUBLEBOX | ALLBOX))) prints("." TABLE_KEEP_MACRO_NAME "\n"); if (flags & DOUBLEBOX) { prints(".ls 1\n" @@ -2689,7 +2810,7 @@ void table::do_top() prints(".ls\n" ".vs\n"); } - else if (flags & (ALLBOX|BOX)) { + else if (flags & (ALLBOX | BOX)) { print_single_hline(0); } //printfs(".mk %1\n", row_top_reg(0)); @@ -2707,7 +2828,7 @@ void table::do_bottom() prints(".nr " NEED_BOTTOM_RULE_REG " 1\n" ".nr T. 1\n" ".T#\n"); - if (!(flags & NOKEEP) && (flags & (BOX|DOUBLEBOX|ALLBOX))) + if (!(flags & NOKEEP) && (flags & (BOX | DOUBLEBOX | ALLBOX))) prints("." TABLE_RELEASE_MACRO_NAME "\n"); if (flags & DOUBLEBOX) prints(".sp " DOUBLE_LINE_SEP "\n"); diff --git a/contrib/groff/src/preproc/tbl/table.h b/contrib/groff/src/preproc/tbl/table.h index 4b2497e215..cf5b60310f 100644 --- a/contrib/groff/src/preproc/tbl/table.h +++ b/contrib/groff/src/preproc/tbl/table.h @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004, 2007, + 2008, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" @@ -84,7 +84,6 @@ struct stuff; struct vertical_rule; class table { - unsigned flags; int nrows; int ncolumns; int linesize; @@ -103,14 +102,17 @@ class table { char *equal; int left_separation; int right_separation; + int total_separation; int allocated_rows; void build_span_list(); + void compute_expand_width(); void do_hspan(int r, int c); void do_vspan(int r, int c); void allocate(int r); void compute_widths(); void divide_span(int, int); - void sum_columns(int, int); + void sum_columns(int, int, int); + void compute_total_separation(); void compute_separation_factor(); void compute_column_positions(); void do_row(int); @@ -129,17 +131,20 @@ class table { void compute_vrule_top_adjust(int, int, string &); void compute_vrule_bot_adjust(int, int, string &); void determine_row_type(); + int count_expand_columns(); public: - /* used by flags */ + unsigned flags; enum { - CENTER = 01, - EXPAND = 02, - BOX = 04, - ALLBOX = 010, - DOUBLEBOX = 020, - NOKEEP = 040, - NOSPACES = 0100 + CENTER = 0x00000001, + EXPAND = 0x00000002, + BOX = 0x00000004, + ALLBOX = 0x00000008, + DOUBLEBOX = 0x00000010, + NOKEEP = 0x00000020, + NOSPACES = 0x00000040, + EXPERIMENTAL = 0x80000000 // undocumented; use as a hook for experiments }; + char *expand; table(int nc, unsigned flags, int linesize, char decimal_point_char); ~table(); @@ -154,6 +159,7 @@ public: void set_minimum_width(int c, const string &w); void set_column_separation(int c, int n); void set_equal_column(int c); + void set_expand_column(int c); void set_delim(char c1, char c2); void print_single_hline(int r); void print_double_hline(int r); diff --git a/contrib/groff/src/preproc/tbl/tbl.man b/contrib/groff/src/preproc/tbl/tbl.man index 00dfe4f830..3618c2e82c 100644 --- a/contrib/groff/src/preproc/tbl/tbl.man +++ b/contrib/groff/src/preproc/tbl/tbl.man @@ -1,5 +1,7 @@ +'\" t .ig -Copyright (C) 1989-1995, 2001, 2002, 2003, 2004 +Copyright (C) 1989-1995, 2001, 2002, 2003, 2004, 2006, 2007, 2008, + 2009 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of @@ -17,19 +19,20 @@ versions, except that this permission notice may be included in translations approved by the Free Software Foundation instead of in the original English. .. +. +. .TH @G@TBL @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@" +. +. .SH NAME @g@tbl \- format tables for troff . . .SH SYNOPSIS -.B @g@tbl -[ -.B \-Cv -] -[ -.IR files \|.\|.\|.\& -] +.SY @g@tbl +.OP \-Cv +.RI [ files\~ .\|.\|.] +.YS . . .SH DESCRIPTION @@ -53,11 +56,9 @@ cannot be processed with Unix .BR troff ; it must be processed with GNU .BR troff . -If no files are given on the command line, the standard input -will be read. -A filename of +If no files are given on the command line or a filename of .B \- -will cause the standard input to be read. +is given, the standard input is read. . . .SH OPTIONS @@ -70,6 +71,7 @@ and .B .TE even when followed by a character other than space or newline. Leader characters (\[rs]a) are handled as interpreted. +. .TP .B \-v Print the version number. @@ -82,61 +84,70 @@ expects to find table descriptions wrapped in the (table start) and .B .TE (table end) macros. +. +. +.SS Global options The line immediately following the .B .TS -macro may contain any of the following global options (ignoring the case -of characters -- Unix tbl only accepts options with all characters lowercase -or all characters uppercase): +macro may contain any of the following global options (ignoring the case of +characters \[en] Unix tbl only accepts options with all characters lowercase +or all characters uppercase), separated by spaces, tabs, or commas: +. +.TP +.B allbox +Enclose each item of the table in a box. +. +.TP +.B box +Enclose the table in a box. . .TP .B center -Centers the table (default is left-justified). +Center the table (default is left-justified). The alternative keyword name .B centre is also recognized (this is a GNU tbl extension). . .TP +.BI decimalpoint( c ) +Set the character to be recognized as the decimal point in numeric +columns (GNU tbl only). +. +.TP .BI delim( xy ) Use .I x -and +and\~\c .I y as start and end delimiters for .BR @g@eqn (@MAN1EXT@). . .TP -.B expand -Makes the table as wide as the current line length. +.B doublebox +Enclose the table in a double box. . .TP -.B box -Encloses the table in a box. +.B doubleframe +Same as doublebox (GNU tbl only). . .TP -.B doublebox -Encloses the table in a double box. +.B expand +Make the table as wide as the current line length (providing a column +separation factor). +Ignored if one or more `x' column specifiers are used (see below). . -.TP -.B allbox -Encloses each item of the table in a box. +.IP +In case the sum of the column widths is larger than the current line length, +the column separation factor is set to zero; such tables extend into the +right margin, and there is no column separation at all. . .TP .B frame Same as box (GNU tbl only). . .TP -.B doubleframe -Same as doublebox (GNU tbl only). -. -.TP -.BI tab( x ) -Uses the character -.I x -instead of a tab to separate items in a line of input data. -. -.TP .BI linesize( n ) -Sets lines or rules (e.g. from +Set lines or rules (e.g. from .BR box ) in .IR n -point @@ -147,123 +158,253 @@ type. Don't use diversions to prevent page breaks (GNU tbl only). Normally .B tbl -attempts to prevent undesirable breaks in the table by using diversions. +attempts to prevent undesirable breaks in boxed tables by using diversions. This can sometimes interact badly with macro packages' own use of diversions, when footnotes, for example, are used. . .TP -.BI decimalpoint( c ) -Set the character to be recognized as the decimal point in numeric -columns (GNU tbl only). -. -.TP .B nospaces Ignore leading and trailing spaces in data items (GNU tbl only). . +.TP +.BI tab( x ) +Use the character +.I x +instead of a tab to separate items in a line of input data. +. .LP The global options must end with a semicolon. -There might be whitespace after an option and its argument in parentheses. -.LP +There might be whitespace between an option and its argument in parentheses. +. +. +.SS Table format specification After global options come lines describing the format of each line of the table. Each such format line describes one line of the table itself, except that the last format line (which you must end with a period) describes all remaining lines of the table. -A single key character describes each column of each line of the table. -You may run format specs for multiple lines together on the same line by -separating them with commas. +A single-key character describes each column of each line of the table. +Key characters can be separated by spaces or tabs. +You may run format specifications for multiple lines together on the same +line by separating them with commas. +. .LP You may follow each key character with specifiers that determine the font and point size of the corresponding item, that determine column width, inter-column spacing, etc. +. .LP The longest format line defines the number of columns in the table; missing -format descriptors at the end of format lines are assumed to be `L'. +format descriptors at the end of format lines are assumed to be\~\c +.BR L . Extra columns in the data (which have no corresponding format entry) are ignored. +. .LP The available key characters are: . .TP -c,C -Centers item within the column. +.BR a , A +Center longest line in this column and then left-justifies all other lines +in this column with respect to that centered line. +The idea is to use such alphabetic subcolumns (hence the name of the key +character) in combination with\~ +.BR L ; +they are called subcolumns because +.BR A \~items +are indented by\~1n relative to +.BR L \~entries. +Example: +.RS +.IP +.EX +\&.TS +\&tab(;); +\&ln,an. +\&item one;1 +\&subitem two;2 +\&subitem three;3 +\&.T& +\&ln,an. +\&item eleven;11 +\&subitem twentytwo;22 +\&subitem thirtythree;33 +\&.TE +.EE +.RE +. +.IP +Result: +. +.RS +.IP +.TS +tab(;); +ln,an. +item one;1 +subitem two;2 +subitem three;3 +.T& +ln,an. +item eleven;11 +subitem twentytwo;22 +subitem thirtythree;33 +.TE +.RE . .TP -r,R -Right-justifies item within the column. +.BR c , C +Center item within the column. . .TP -l,L -Left-justifies item within the column. +.BR l , L +Left-justify item within the column. . .TP -n,N -Numerically justifies item in the column: Units positions of numbers are +.BR n , N +Numerically justify item in the column: Units positions of numbers are aligned vertically. +If there is one or more dots adjacent to a digit, use the rightmost one for +vertical alignment. +If there is no dot, use the rightmost digit for vertical alignment; +otherwise, center the item within the column. +Alignment can be forced to a certain position using `\[rs]&'; if there is +one or more instances of this special (non-printing) character present +within the data, use the leftmost one for alignment. +Example: +.RS +.IP +.EX +\&.TS +\&n. +\&1 +\&1.5 +\&1.5.3 +\&abcde +\&a\[rs]&bcde +\&.TE +.EE +.RE +. +.IP +Result: +. +.RS +.IP +.TS +n. +1 +1.5 +1.5.3 +abcde +a\&bcde +.TE +.RE +. +.IP +If numerical entries are combined with +.B L +or +.BR R \~entries +\[en] this can happen if the table format is changed with +.B .T& +\%\[en], +center the widest +.I number +(of the data entered under the +.BR N \~specifier +regime) relative to the widest +.B L +or +.BR R \~entry, +preserving the alignment of all numerical entries. +Contrary to +.BR A \~type +entries, there is no extra indentation. +. +.IP +Using equations (to be processed with +.BR eqn ) +within columns which use the +.BR N \~specifier +is problematic in most cases due to +.BR tbl 's +algorithm for finding the vertical alignment, as described above. +Using the global +.B delim +option, however, it is possible to make +.B tbl +ignore the data within +.B eqn +delimiters for that purpose. +. . .TP -s,S -Spans previous item on the left into this column. +.BR r , R +Right-justify item within the column. . .TP -a,A -Centers longest line in this column and then left-justifies all other lines -in this column with respect to that centered line. +.BR s , S +Span previous item on the left into this column. +Not allowed for the first column. . .TP -^ -Spans down entry from previous row in this column. +.B ^ +Span down entry from previous row in this column. +Not allowed for the first row. . .TP -_,- -Replaces this entry with a horizontal line. +.BR _ , - +Replace this entry with a horizontal line. . .TP -= +.B = . -Replaces this entry with a double horizontal line. +Replace this entry with a double horizontal line. . .TP -| +.B | The corresponding column becomes a vertical rule (if two of these are adjacent, a double vertical rule). . .LP -A vertical bar to the left of the first key-letter or to the right of the +A vertical bar to the left of the first key letter or to the right of the last one produces a line at the edge of the table. +. .LP -Here are the specifiers that can appear in suffixes to column key letters: +To change the data format within a table, use the +.B .T& +command (at the start of a line). +It is followed by format and data lines (but no global options) similar to +the +.B .TS +request. . -.TP -b,B -Short form of fB (make affected entries bold). . -.TP -i,I -Short form of fI (make affected entries italic). +.SS Column specifiers +Here are the specifiers that can appear in suffixes to column key letters +(in any order): . .TP -t,T -Start an item vertically spanning rows at the top of its range rather than -vertically centering it. +.BR b , B +Short form of +.B fB +(make affected entries bold). . .TP -d,D +.BR d , D Start an item vertically spanning rows at the bottom of its range rather than vertically centering it (GNU tbl only). . .TP -v,V -Followed by a number, this indicates the vertical line spacing to be used in -a multi-line table entry. -If signed, the current vertical line spacing is incremented or decremented -(using a signed number instead of a signed digit is a GNU tbl extension). -A vertical line spacing specifier followed by a column separation number -must be separated by one or more blanks. -No effect if the corresponding table entry isn't a text block. +.BR e , E +Make equally-spaced columns. +All columns marked with this specifier get the same width; this happens +after the affected column widths have been computed (this means that the +largest width value rules). . .TP -f,F +.BR f , F Either of these specifiers may be followed by a font name (either one or two characters long), font number (a single digit), or long name in parentheses (the last form is a GNU tbl extension). @@ -271,26 +412,13 @@ A one-letter font name must be separated by one or more blanks from whatever follows. . .TP -p,P -Followed by a number, this does a point size change for the affected fields. -If signed, the current point size is incremented or decremented (using a -signed number instead of a signed digit is a GNU tbl extension). -A point size specifier followed by a column separation number must be -separated by one or more blanks. +.BR i , I +Short form of +.B fI +(make affected entries italic). . .TP -w,W -Minimal column width value. -Must be followed either by a -.BR @g@troff (@MAN1EXT@) -width expression in parentheses or a unitless integer. -If no unit is given, en units are used. -Also used as the default line length for included text blocks. -If used multiple times to specify the width for a particular column, -the last entry takes effect. -. -.TP -x,X +.BR m , M This is a GNU tbl extension. Either of these specifiers may be followed by a macro name (either one or two characters long), @@ -317,24 +445,91 @@ are output. Thus the macro can overwrite other modification specifiers. . .TP -e,E -Make equally-spaced columns. +.BR p , P +Followed by a number, this does a point size change for the affected fields. +If signed, the current point size is incremented or decremented (using a +signed number instead of a signed digit is a GNU tbl extension). +A point size specifier followed by a column separation number must be +separated by one or more blanks. . .TP -u,U +.BR t , T +Start an item vertically spanning rows at the top of its range rather than +vertically centering it. +. +.TP +.BR u , U Move the corresponding column up one half-line. . .TP -z,Z -Ignore the corresponding column for width-calculation purposes. +.BR v , V +Followed by a number, this indicates the vertical line spacing to be used in +a multi-line table entry. +If signed, the current vertical line spacing is incremented or decremented +(using a signed number instead of a signed digit is a GNU tbl extension). +A vertical line spacing specifier followed by a column separation number +must be separated by one or more blanks. +No effect if the corresponding table entry isn't a text block. +. +.TP +.BR w , W +Minimal column width value. +Must be followed either by a +.BR @g@troff (@MAN1EXT@) +width expression in parentheses or a unitless integer. +If no unit is given, en units are used. +Also used as the default line length for included text blocks. +If used multiple times to specify the width for a particular column, +the last entry takes effect. +. +.TP +.BR x , X +An expanded column. +After computing all column widths without an +.BR x \~specifier, +use the remaining line width for this column. +If there is more than one expanded column, distribute the remaining +horizontal space evenly among the affected columns (this is a GNU +extension). +This feature has the same effect as specifying a minimum column width. +. +.TP +.BR z , Z +Ignore the corresponding column for width-calculation purposes, this is, +don't use the fields but only the specifiers of this column to compute +its width. . .LP A number suffix on a key character is interpreted as a column -separation in ens (multiplied in proportion if the +separation in en units (multiplied in proportion if the .B expand -option is on). +option is on \[en] in case of overfull tables this might be zero). Default separation is 3n. +. .LP +The column +.RB specifier\~ x +is mutually exclusive with +.B e +.RB and\~ w +(but +.B e +is not mutually exclusive +.RB with\~ w ); +if specified multiple times for a particular column, the last entry takes +effect: +.BR x \~unsets +both +.B e +.RB and\~ w , +while either +.B e +or +.B w +.RB overrides\~ x . +. +. +.SS Table data The format lines are followed by lines containing the actual data for the table, followed finally by .BR .TE . @@ -343,35 +538,85 @@ the character specified with the .B tab option). Long input lines can be broken across multiple lines if the last character -on the line is `\e' (which vanishes after concatenation). +on the line is `\[rs]' (which vanishes after concatenation). +. +.LP +Note that +.B @g@tbl +computes the column widths line by line, applying \[rs]w on each entry +which isn't a text block. +As a consequence, constructions like +.IP +.EX +\&.TS +\&c,l. +\&\[rs]s[20]MM +\&MMMM +\&.TE +.EE +. +.LP +fail; you must either say +.IP +.EX +\&.TS +\&cp20,lp20. +\&MM +\&MMMM +\&.TE +.EE +. +.LP +or +. +.IP +.EX +\&.TS +\&c,l. +\&\[rs]s[20]MM +\&\[rs]s[20]MMMM +\&.TE +.EE +. .LP A dot starting a line, followed by anything but a digit is handled as a troff command, passed through without changes. The table position is unchanged in this case. +. .LP If a data line consists of only `_' or `=', a single or double line, respectively, is drawn across the table at that point; if a single item in a data line consists of only `_' or `=', then that item is replaced by a single or double line, joining its neighbours. -If a data item consists only of `\e_' or `\e=', a single or double line, +If a data item consists only of `\[rs]_' or `\[rs]=', a single or double line, respectively, is drawn across the field at that point which does not join its neighbours. +. .LP -A data item consisting only of `\eRx' (`x' any character) is replaced by +A data item consisting only of `\[rs]Rx' (`x' any character) is replaced by repetitions of character `x' as wide as the column (not joining its neighbours). +. .LP -A data item consisting only of `\e^' indicates that the field immediately +A data item consisting only of `\[rs]^' indicates that the field immediately above spans downward over this row. -.LP +. +. +.SS Text blocks A text block can be used to enter data as a single entry which would be too long as a simple string between tabs. It is started with `T{' and closed with `T}'. The former must end a line, and the latter must start a line, probably -followed by other data columns (separated with tabs). +followed by other data columns (separated with tabs or the character given +with the +.B tab +global option). +. +.LP By default, the text block is formatted with the settings which were active before entering the table, possibly overridden by the -.B v +.BR m , +.BR v , and .B w tbl specifiers. @@ -382,14 +627,49 @@ right before the starting (and .B .ad after the table). +. .LP -To change the data format within a table, use the -.B .T& -command (at the start of a line). -It is followed by format and data lines (but no global options) similar to -the +If either `w' or `x' specifiers are not given for +.I all +columns of a text block span, the default length of the text block (to be +more precise, the line length used to process the text block diversion) is +computed as L\[tmu]C/(N+1), where `L' is the current line length, `C' the +number of columns spanned by the text block, and `N' the total number of +columns in the table. +Note, however, that the actual diversion width as returned in register +.B \[rs]n[dl] +is used eventually as the text block width. +If necessary, you can also control the text block width with a direct +insertion of a +.B .ll +request right after `T{'. +. +. +.SS Miscellaneous +The number register +.B \[rs]n[TW] +holds the table width; it can't be used within the table itself but is defined +right before calling +.B .TE +so that this macro can make use of it. +. +.LP +.B tbl +also defines a macro +.B .T# +which produces the bottom and side lines of a boxed table. +While +.B tbl +does call this macro itself at the end of the table, it can be used by +macro packages to create boxes for multi-page tables by calling it within the +page footer. +An example of this is shown by the +.B \-ms +macros which provide this functionality if a table starts with +.B .TS\ H +instead of the standard call to the .B .TS -request. +macro. . . .SH "INTERACTION WITH @G@EQN" @@ -408,10 +688,13 @@ the first 200. Table continuation .RB ( .T& ) lines are not restricted to the first 200 lines. +. .LP Numeric and alphabetic items may appear in the same column. +. .LP Numeric and alphabetic items may span horizontally. +. .LP .B @g@tbl uses register, string, macro and diversion names beginning with the digit\~\c @@ -422,6 +705,43 @@ you should avoid using any names beginning with a\~\c .BR 3 . . . +.SH "GNU TBL WITHIN MACROS" +Since +.B @g@tbl +defines its own macros (right before each table) it is necessary to use +an `end-of-macro' macro. Additionally, the escape character has to be switched +off. Here an example. +.IP +.EX +\&.eo +\&.de ATABLE .. +\&.TS +\&allbox tab(;); +\&cl. +\&\[rs]$1;\[rs]$2 +\&.TE +\&... +\&.ec +\&.ATABLE A table +\&.ATABLE Another table +\&.ATABLE And \[dq]another one\[dq] +.EE +. +.LP +Note, however, that not all features of +.B @g@tbl +can be wrapped into a macro because +.B @g@tbl +sees the input earlier than +.BR @g@troff . +For example, number formatting with vertically aligned decimal points +fails if those numbers are passed on as macro parameters because +decimal point alignment is handled by +.B @g@tbl +itself: It only sees `\[rs]$1', `\[rs]$2', etc., and therefore can't +recognize the decimal point. +. +. .SH BUGS You should use .BR .TS\ H / .TH @@ -434,8 +754,10 @@ of the table, place the line immediately after the format section. Do not enclose a multi-page table within keep/release macros, or divert it in any other way. +. .LP A text block within a table must be able to fit on one page. +. .LP The .B bp @@ -443,43 +765,43 @@ request cannot be used to force a page-break in a multi-page table. Instead, define .B BP as follows +. .IP -.B .de BP -.br -.B .ie '\e\en(.z'' .bp \e\e$1 -.br -.B .el \e!.BP \e\e$1 -.br -.B .. -.br +.EX +\&.de BP +\&. ie '\[rs]\[rs]n(.z'' .bp \[rs]\[rs]$1 +\&. el \[rs]!.BP \[rs]\[rs]$1 +\&.. +.EE +. .LP and use .B BP instead of .BR bp . +. .LP -Using \ea directly in a table to get leaders will not work (except in +Using \[rs]a directly in a table to get leaders does not work (except in compatibility mode). -This is correct behaviour: \ea is an +This is correct behaviour: \[rs]a is an .B uninterpreted leader. To get leaders use a real leader, either by using a control A or like this: +. .IP -.nf -.ft B -\&.ds a \ea +.EX +\&.ds a \[rs]a \&.TS -tab(;); -lw(1i) l. -A\e*a;B +\&tab(;); +\&lw(1i) l. +\&A\[rs]*a;B \&.TE -.ft -.fi +.EE . . .SH REFERENCE -Lesk, M.E.: "TBL -- A Program to Format Tables". +Lesk, M.E.: "TBL \[en] A Program to Format Tables". For copyright reasons it cannot be included in the groff distribution, but copies can be found with a title search on the World Wide Web. . diff --git a/contrib/groff/src/roff/groff/groff.cpp b/contrib/groff/src/roff/groff/groff.cpp index 5e18757352..847b1add0d 100644 --- a/contrib/groff/src/roff/groff/groff.cpp +++ b/contrib/groff/src/roff/groff/groff.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989-2000, 2001, 2002, 2003, 2004 +/* Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, + 2008, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ // A front end for groff. @@ -51,7 +51,8 @@ extern "C" { #endif /* NEED_DECLARATION_PUTENV */ // The number of commands must be in sync with MAX_COMMANDS in pipeline.h -const int SOELIM_INDEX = 0; +const int PRECONV_INDEX = 0; +const int SOELIM_INDEX = PRECONV_INDEX + 1; const int REFER_INDEX = SOELIM_INDEX + 1; const int GRAP_INDEX = REFER_INDEX + 1; const int PIC_INDEX = GRAP_INDEX + 1; @@ -73,6 +74,7 @@ class possible_command { public: possible_command(); ~possible_command(); + void clear_name(); void set_name(const char *); void set_name(const char *, const char *); const char *get_name(); @@ -110,6 +112,7 @@ int main(int argc, char **argv) setbuf(stderr, stderr_buf); assert(NCOMMANDS <= MAX_COMMANDS); string Pargs, Largs, Fargs; + int Kflag = 0; int vflag = 0; int Vflag = 0; int zflag = 0; @@ -117,8 +120,11 @@ int main(int argc, char **argv) int Xflag = 0; int oflag = 0; int safer_flag = 1; + int is_xhtml = 0; + int eflag = 0; int opt; const char *command_prefix = getenv("GROFF_COMMAND_PREFIX"); + const char *encoding = getenv("GROFF_ENCODING"); if (!command_prefix) command_prefix = PROG_PREFIX; commands[TROFF_INDEX].set_name(command_prefix, "troff"); @@ -127,9 +133,10 @@ int main(int argc, char **argv) { "version", no_argument, 0, 'v' }, { NULL, 0, 0, 0 } }; - while ((opt = getopt_long(argc, argv, - "abcCd:eEf:F:gGhiI:lL:m:M:n:No:pP:r:RsStT:UvVw:W:XzZ", - long_options, NULL)) + while ((opt = getopt_long( + argc, argv, + "abcCd:D:eEf:F:gGhiI:lkK:L:m:M:n:No:pP:r:RsStT:UvVw:W:XzZ", + long_options, NULL)) != EOF) { char buf[3]; buf[0] = '-'; @@ -149,6 +156,17 @@ int main(int argc, char **argv) Pargs += optarg; Pargs += '\0'; break; + case 'D': + commands[PRECONV_INDEX].set_name(command_prefix, "preconv"); + commands[PRECONV_INDEX].append_arg("-D", optarg); + break; + case 'K': + commands[PRECONV_INDEX].append_arg("-e", optarg); + Kflag = 1; + // fall through + case 'k': + commands[PRECONV_INDEX].set_name(command_prefix, "preconv"); + break; case 't': commands[TBL_INDEX].set_name(command_prefix, "tbl"); break; @@ -162,6 +180,7 @@ int main(int argc, char **argv) commands[GRAP_INDEX].set_name(command_prefix, "grap"); break; case 'e': + eflag = 1; commands[EQN_INDEX].set_name(command_prefix, "eqn"); break; case 's': @@ -185,16 +204,15 @@ int main(int argc, char **argv) break; case 'v': vflag = 1; - { - printf("GNU groff version %s\n", Version_string); - printf("Copyright (C) 2004 Free Software Foundation, Inc.\n" - "GNU groff comes with ABSOLUTELY NO WARRANTY.\n" - "You may redistribute copies of groff and its subprograms\n" - "under the terms of the GNU General Public License.\n" - "For more information about these matters, see the file named COPYING.\n"); - printf("\ncalled subprograms:\n\n"); - fflush(stdout); - } + printf("GNU groff version %s\n", Version_string); + printf( + "Copyright (C) 2009 Free Software Foundation, Inc.\n" + "GNU groff comes with ABSOLUTELY NO WARRANTY.\n" + "You may redistribute copies of groff and its subprograms\n" + "under the terms of the GNU General Public License.\n" + "For more information about these matters, see the file named COPYING.\n"); + printf("\ncalled subprograms:\n\n"); + fflush(stdout); commands[POST_INDEX].append_arg(buf); // fall through case 'C': @@ -227,10 +245,21 @@ int main(int argc, char **argv) safer_flag = 0; break; case 'T': - if (strcmp(optarg, "html") == 0) { + if (strcmp(optarg, "xhtml") == 0) { // force soelim to aid the html preprocessor commands[SOELIM_INDEX].set_name(command_prefix, "soelim"); + Pargs += "-x"; + Pargs += '\0'; + Pargs += 'x'; + Pargs += '\0'; + is_xhtml = 1; + device = "html"; + break; } + if (strcmp(optarg, "html") == 0) + // force soelim to aid the html preprocessor + commands[SOELIM_INDEX].set_name(command_prefix, "soelim"); + if (strcmp(optarg, "Xps") == 0) { warning("-TXps option is obsolete: use -X -Tps instead"); device = "ps"; @@ -284,10 +313,15 @@ int main(int argc, char **argv) break; } } - if (safer_flag) - commands[PIC_INDEX].append_arg("-S"); - else + if (encoding) { + commands[PRECONV_INDEX].set_name(command_prefix, "preconv"); + if (!Kflag && *encoding) + commands[PRECONV_INDEX].append_arg("-e", encoding); + } + if (!safer_flag) { commands[TROFF_INDEX].insert_arg("-U"); + commands[PIC_INDEX].append_arg("-U"); + } font::set_unknown_desc_command_handler(handle_unknown_desc_command); if (!font::load_desc()) fatal("invalid device `%1'", device); @@ -298,6 +332,8 @@ int main(int argc, char **argv) commands[TROFF_INDEX].set_name(predriver); // pass the device arguments to the predrivers as well commands[TROFF_INDEX].insert_args(Pargs); + if (eflag && is_xhtml) + commands[TROFF_INDEX].insert_arg("-e"); if (vflag) commands[TROFF_INDEX].insert_arg("-v"); } @@ -309,7 +345,8 @@ int main(int argc, char **argv) } if (postdriver) commands[POST_INDEX].set_name(postdriver); - int gxditview_flag = postdriver && strcmp(xbasename(postdriver), GXDITVIEW) == 0; + int gxditview_flag = postdriver + && strcmp(xbasename(postdriver), GXDITVIEW) == 0; if (gxditview_flag && argc - optind == 1) { commands[POST_INDEX].append_arg("-title"); commands[POST_INDEX].append_arg(argv[optind]); @@ -355,11 +392,21 @@ int main(int argc, char **argv) commands[SPOOL_INDEX].set_name(0); } commands[TROFF_INDEX].append_arg("-T", device); - // html renders equations as images via ps if (strcmp(device, "html") == 0) { - if (oflag) - fatal("`-o' option is invalid with device `html'"); - commands[EQN_INDEX].append_arg("-Tps:html"); + if (is_xhtml) { + if (oflag) + fatal("`-o' option is invalid with device `xhtml'"); + if (zflag) + commands[EQN_INDEX].append_arg("-Tmathml:xhtml"); + else if (eflag) + commands[EQN_INDEX].clear_name(); + } + else { + if (oflag) + fatal("`-o' option is invalid with device `html'"); + // html renders equations as images via ps + commands[EQN_INDEX].append_arg("-Tps:html"); + } } else commands[EQN_INDEX].append_arg("-T", device); @@ -526,6 +573,14 @@ void possible_command::set_name(const char *s) name = strsave(s); } +void possible_command::clear_name() +{ + a_delete name; + a_delete argv; + name = NULL; + argv = NULL; +} + void possible_command::set_name(const char *s1, const char *s2) { a_delete name; @@ -690,9 +745,9 @@ char **possible_command::get_argv() void synopsis(FILE *stream) { fprintf(stream, -"usage: %s [-abceghilpstvzCENRSUVXZ] [-Fdir] [-mname] [-Tdev] [-ffam]\n" +"usage: %s [-abceghiklpstvzCENRSUVXZ] [-Fdir] [-mname] [-Tdev] [-ffam]\n" " [-wname] [-Wname] [-Mdir] [-dcs] [-rcn] [-nnum] [-olist] [-Parg]\n" -" [-Larg] [-Idir] [files...]\n", +" [-Darg] [-Karg] [-Larg] [-Idir] [files...]\n", program_name); } @@ -701,6 +756,7 @@ void help() synopsis(stdout); fputs("\n" "-h\tprint this message\n" +"-k\tpreprocess with preconv\n" "-t\tpreprocess with tbl\n" "-p\tpreprocess with pic\n" "-e\tpreprocess with eqn\n" @@ -737,6 +793,8 @@ void help() "-S\tenable safer mode (the default)\n" "-U\tenable unsafe mode\n" "-Idir\tsearch dir for soelim, troff, and grops. Implies -s\n" +"-Karg\tuse arg as input encoding. Implies -k\n" +"-Darg\tuse arg as default input encoding. Implies -k\n" "\n", stdout); exit(0); diff --git a/contrib/groff/src/roff/groff/groff.man b/contrib/groff/src/roff/groff/groff.man index 9e6a4ace07..ca2948f640 100644 --- a/contrib/groff/src/roff/groff/groff.man +++ b/contrib/groff/src/roff/groff/groff.man @@ -1,13 +1,12 @@ .ig groff.man -Last update: 01 Jul 2005 - -Copyright (C) 1989, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +Copyright (C) 1989, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +Free Software Foundation, Inc. Rewritten in 2002 by Bernd Warken Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being this .ig-section and AUTHOR, with no Front-Cover Texts, and with no Back-Cover Texts. @@ -16,215 +15,20 @@ A copy of the Free Documentation License is included as a file called FDL in the main directory of the groff source package. .. . -.\" -------------------------------------------------------------------- -.\" Setup -.\" -------------------------------------------------------------------- -. -.do nr groff_C \n[.C] -.cp 0 -. -.mso www.tmac -. -.\" set adjust to both -.ad b -. -.\" fonts of fixed length -. -.if n \{\ -. mso tty-char.tmac -. ftr CR R -. ftr CI I -. ftr CB B -.\} -. -.if '\*[.T]'dvi' \ -. ftr CB CW -. -.\" -------------------------------------------------------------------- -.\" String definitions -. -.ds @- "\-\" -.ds @-- "\-\^\-\" -. -.ds Ellipsis .\|.\|.\" -. . .\" -------------------------------------------------------------------- -.\" Begin of macro definitions -.de c -.\" this is like a comment request when escape mechanism is off -.. -.eo -. -.c -------------------------------------------------------------------- -.de TP+ -.br -.ns -.TP \$1 -.. -.c -------------------------------------------------------------------- -.c Like TP, but if specified indent is more than half -.c the current line-length - indent, use the default indent. -.de Tp -. ie \n[.$]=0:((0\$1)*2u>(\n.lu-\n(.iu)) .TP -. el .TP "\$1" -.. -.c -------------------------------------------------------------------- -.de Text -. nop \)\$* -.. -.c -------------------------------------------------------------------- -.de Synopsis -. ds @arg1 \$1\" -. nr @old_indent \n[.i] -. ad l -. in +\w'\f[B]\*[@arg1]\0'u -. ti \n[@old_indent]u -. B \*[@arg1]\0\c -. rr @old_indent -. rm @arg1 -.. -.c -------------------------------------------------------------------- -.de EndSynopsis -. ad -. in -.. -.c -------------------------------------------------------------------- -.c ShortOpt[] (name [arg]) -.c -.c short option in synopsis -.c -.de ShortOpt[] -. if \n[.$]=0 \ -. return -. ds @opt \$1\" -. shift -. ie \n[.$]=0 \ -. Text \f[R][\f[]\f[CB]\*[@-]\*[@opt]\f[]\f[R]]\f[] -. el \ -. Text \f[R][\f[]\f[CB]\*[@-]\*[@opt]\~\f[]\f[I]\/\$*\f[]\f[R]]\f[] -. rm @opt -.. -.c -------------------------------------------------------------------- -.c Option in synopsis (short option) -.de SynOpt -. if \n[.$]=0 \ -. return -. ds @opt \$1\" -. shift -. ie \n[.$]=0 \ -. Text \f[R][\f[]\f[CB]\*[@-]\*[@opt]\f[]\f[R]]\f[] -. el \ -. Text \f[R][\f[]\f[CB]\*[@-]\*[@opt]\~\f[]\f[I]\/\$*\f[]\f[R]]\f[] -. rm @opt -.. -.c -------------------------------------------------------------------- -.c ShortOpt ([char [punct]]) -.c -.c `-c' somewhere in the text -.c second arg is punctuation -.c -.de ShortOpt -. ds @opt \$1\" -. shift -. Text \f[CB]\*[@-]\*[@opt]\f[]\/\$* -. rm @opt -.. -.c -------------------------------------------------------------------- -.c LongOpt ([name [punct]]) -.c -.c `--name' somewhere in the text -.c second arg is punctuation -.c -.de LongOpt -. ds @opt \$1\" -. shift -. Text \f[CB]\*[@--]\f[]\f[B]\*[@opt]\f[]\/\$* -. rm @opt -.. -.c -------------------------------------------------------------------- -.c OptDef (shortopt [longopt [argument]]) -.c -.c option documentation -.c args : `shortopt', `longopt' can be "" -.c -.de OptDef -. ds @short -. ds @long -. ds @arg -. if \n[.$]>=1 \{\ -. ds @arg1 "\$1\" -. if !'\*[@arg1]'' \ -. ds @short "\f[CB]\*[@-]\*[@arg1]\f[]\" -. if \n[.$]>=2 \{\ -. if !'\*[@short]'' \ -. as @short \f[CW]\0\f[] -. ds @arg2 "\$2\" -. if !'\*[@arg2]'' \ -. ds @long "\f[CB]\*[@--]\f[]\f[B]\*[@arg2]\f[]\" -. if \n[.$]>=3 \{\ -. if !'\*[@long]'' \ -. as @long \|=\|\" -. shift 2 -. ds @arg \f[I]\$*\" -. \} -. \} -. \} -. IP "\f[R]\*[@short]\*[@long]\*[@arg]\f[]" -. rm @arg -. rm @arg1 -. rm @arg2 -. rm @short -. rm @long -.. -.c -------------------------------------------------------------------- -.c Continuation of an OptDef header. -.de OptDef+ -. br -. ns -. OptDef \$@ -.. -.c -------------------------------------------------------------------- -.c Environment variable +.\" Environment variable .de EnvVar . SM -. BR \%\$1 \$2 -.. -.c -------------------------------------------------------------------- -.c a shell command line -.de ShellCommand -. nr @font \n[.f] -. c replace argument separator by unbreakable space -. ds @args \$1\"" -. shift -. while (\n[.$]>0) \{\ -. ds @args \*[@args]\~\$1 -. shift -. \} -. br -. ad l -. nh -. Text \f[I]sh#\h'1m'\f[P]\f[CR]\*[@args]\f[P]\&\" -. ft R -. ft P -. hy -. ad -. ft \n[@font] -. br -. rr @font -. rm @args +. BR \%\\$1 \\$2 .. -.c -------------------------------------------------------------------- -.c `char or string' +.\" -------------------------------------------------------------------- +.\" `char or string' .de Quoted . ft CR -. Text \[oq]\$*\[cq] +\[oq]\\$*\[cq] . ft .. -.c -------------------------------------------------------------------- -.c End of macro definitions -.ec -. . .\" -------------------------------------------------------------------- .\" Title @@ -239,54 +43,37 @@ groff \- front-end for the groff document formatting system .SH SYNOPSIS .\" -------------------------------------------------------------------- . -.ad l -.Synopsis groff -.ShortOpt[] abcegilpstzCEGNRSUVXZ -.ShortOpt[] d cs -.ShortOpt[] f fam -.ShortOpt[] F dir -.ShortOpt[] I dir -.ShortOpt[] L arg -.ShortOpt[] m name -.ShortOpt[] M dir -.ShortOpt[] n num -.ShortOpt[] o list -.ShortOpt[] P arg -.ShortOpt[] r cn -.ShortOpt[] T dev -.ShortOpt[] w name -.ShortOpt[] W name -.RI [ file -.Text \*[Ellipsis]] -.EndSynopsis -. -.Synopsis groff -.ShortOpt h +.SY groff +.OP \-abcegiklpstzCEGNRSUVXZ +.OP \-d cs +.OP \-D arg +.OP \-f fam +.OP \-F dir +.OP \-I dir +.OP \-K arg +.OP \-L arg +.OP \-m name +.OP \-M dir +.OP \-n num +.OP \-o list +.OP \-P arg +.OP \-r cn +.OP \-T dev +.OP \-w name +.OP \-W name +.RI [ file\~ .\|.\|.] +. +.SY groff +.B \-h | -.LongOpt help -.EndSynopsis +.B \-\-help . -.Synopsis groff -.ShortOpt v +.SY groff +.B \-v | -.LongOpt version -.RI [ option -.Text \*[Ellipsis]] -.EndSynopsis -. -.P -The command line is parsed according to the usual GNU convention. -. -The whitespace between a command line option and its argument is -optional. -. -Options can be grouped behind a single -.ShortOpt -(minus character). -. -A filename of -.ShortOpt -(minus character) denotes the standard input. +.B \-\-version +.RI [ option\~ .\|.\|.] +.YS . . .\" -------------------------------------------------------------------- @@ -304,7 +91,9 @@ The program and macro suite is the implementation of a .BR roff (@MAN7EXT@) system within the free software collection -.URL http://\:www.gnu.org "GNU" . +.UR http://\:www.gnu.org +GNU +.UE . . The .I groff @@ -326,6 +115,20 @@ uses pipes only). .\" -------------------------------------------------------------------- .SH OPTIONS .\" -------------------------------------------------------------------- +.P +The command line is parsed according to the usual \f[CR]GNU\f[] +convention. +. +The whitespace between a command line option and its argument is +optional. +. +Options can be grouped behind a single `\-' (minus character). +. +A filename of +.B \- +(minus character) denotes the standard input. +. +.P . As .B groff @@ -356,31 +159,49 @@ or are differently interpreted by .BR groff . . . -.OptDef e +.TP +.BI \-D\ arg +Set default input encoding used by +.B preconv +to +.IR arg . +. +Implies +.BR \-k . +. +. +.TP +.B \-e Preprocess with .BR @g@eqn . . . -.OptDef g +.TP +.B \-g Preprocess with .BR @g@grn . . . -.OptDef G +.TP +.B \-G Preprocess with .BR grap . . . -.OptDef h help +.TP +.B \-h +.TQ +.B \-\-help Print a help message. . . -.OptDef I "" dir +.TP +.BI \-I\ dir This option may be used to specify a directory to search for files (both those on the command line and those named in -.B \&.psbb +.B .psbb and -.B \&.so +.B .so requests, and .B \eX'ps: import' and @@ -388,14 +209,41 @@ and escapes). The current directory is always searched first. This option may be specified more than once; -the directories will be searched in the order specified. +the directories are searched in the order specified. No directory search is performed for files specified using an absolute path. This option implies the -.ShortOpt s +.B \-s option. . . -.OptDef l +.TP +.B \-k +Preprocess with +.BR preconv . +This is run before any other preprocessor. +. +Please refer to +.BR preconv 's +manual page for its behaviour if no +.B \-K +(or +.BR \-D ) +option is specified. +. +. +.TP +.BI \-K\ arg +Set input encoding used by +.B preconv +to +.IR arg . +. +Implies +.BR \-k . +. +. +.TP +.B \-l Send the output to a spooler program for printing. . The command that should be used for this is specified by the @@ -407,72 +255,91 @@ If this command is not present, the output is piped into the program by default. . See options -.ShortOpt L +.B \-L and -.ShortOpt X . +.BR \-X . . . -.OptDef L "" arg +.TP +.BI \-L\ arg Pass .I arg to the spooler program. Several arguments should be passed with a separate -.ShortOpt L +-L option each. . Note that .B groff does not prepend -.ShortOpt\" just a minus sign +`-' (a minus sign) to .I arg before passing it to the spooler program. . . -.OptDef N +.TP +.B \-N Don't allow newlines within .I eqn delimiters. . This is the same as the -.ShortOpt N +.B \-N option in .BR @g@eqn . . . -.OptDef p +.TP +.B \-p Preprocess with .BR @g@pic . . . -.OptDef P "" "\*[@-]option" -.OptDef+ P "" "\*[@-]option \f[CB]\*[@-]P\f[] arg" +.TP +.BI \-P\ \-option +.TQ +.BI \-P\ \-option \ \-P\ arg Pass -.I \*[@-]option +.I \-option or -.I \*[@-]option arg +.I "\-option\~arg" to the postprocessor. . The option must be specified with the necessary preceding minus sign(s) -.Quoted \*[@-] +.Quoted - or -.Quoted \*[@--] -because groff does not prepend any dashes before passing it to the -postprocessor. +.Quoted -- +because +.B groff +does not prepend any dashes before passing it to the postprocessor. +. +For example, to pass a title to the +.B \%gxditview +postprocessor, the shell command . -For example, to pass a title to the \%gxditview postprocessor, the shell -command +.RS .IP -.ShellCommand groff \*[@-]X \*[@-]P \*[@-]title \*[@-]P 'groff it' \f[I]foo\f[] +.EX +groff -X -P -title -P 'groff it' \f[I]foo\f[] +.EE +.RE +. .IP is equivalent to +. +.RS .IP -.ShellCommand groff \*[@-]X \*[@-]Z \f[I]foo\f[] | \ -gxditview \*[@-]title 'groff it' \*[@-] +.EX +groff -X -Z \f[I]foo\f[] | \ +gxditview -title 'groff it' - +.EE +.RE . . -.OptDef R +.TP +.B \-R Preprocess with .BR @g@refer . . @@ -488,16 +355,18 @@ See for more details. . . -.OptDef s +.TP +.B \-s Preprocess with .BR @g@soelim . . . -.OptDef S +.TP +.B \-S Safer mode. . Pass the -.ShortOpt S +.B \-S option to .B @g@pic and disable the following @@ -512,12 +381,14 @@ and For security reasons, safer mode is enabled by default. . . -.OptDef t +.TP +.B \-t Preprocess with .BR @g@tbl . . . -.OptDef T "" dev +.TP +.BI \-T\ dev Set output device to .IR dev . For this device, @@ -541,48 +412,69 @@ are . .RS .RS -.IP dvi +.TP +dvi TeX DVI format (postprocessor is .BR grodvi ). -.IP html -HTML output (preprocessors are +. +.TP +html +.TQ +xhtml +HTML and XHTML output (preprocessors are .B @g@soelim and .BR \%pre-grohtml , postprocessor is .BR \%post-grohtml ). -.IP lbp +. +.TP +lbp Canon CAPSL printers (\%LBP-4 and \%LBP-8 series laser printers; postprocessor is .BR grolbp ). -.IP lj4 +. +.TP +lj4 HP LaserJet4 compatible (or other PCL5 compatible) printers (postprocessor is .BR grolj4 ). -.IP ps +. +.TP +ps PostScript output (postprocessor is .BR grops ). .RE .RE . +. .IP For the following TTY output devices (postprocessor is always .BR grotty ), -.ShortOpt T +.B \-T selects the output encoding: +. .RS .RS -.IP ascii -7bit ASCII. -.IP cp1047 +.TP +ascii +7bit \f[CR]ASCII\f[]. +. +.TP +cp1047 \%Latin-1 character set for EBCDIC hosts. -.IP latin1 +. +.TP +latin1 ISO \%8859-1. -.IP utf8 +. +.TP +utf8 Unicode character set in \%UTF-8 encoding. .RE .RE . +. .IP The following arguments select .B \%gxditview @@ -590,14 +482,18 @@ as the `postprocessor' (it is rather a viewing program): . .RS .RS -.IP X75 -75dpi resolution, 10pt document base font. -.IP X75-12 -75dpi resolution, 12pt document base font. -.IP X100 -100dpi resolution, 10pt document base font. -.IP X100-12 -100dpi resolution, 12pt document base font. +.TP +X75 +75\|dpi resolution, 10\|pt document base font. +.TP +X75-12 +75\|dpi resolution, 12\|pt document base font. +.TP +X100 +100\|dpi resolution, 10\|pt document base font. +.TP +X100-12 +100\|dpi resolution, 12\|pt document base font. .RE .RE . @@ -606,43 +502,49 @@ The default device is .BR @DEVICE@ . . . -.OptDef U +.TP +.B \-U Unsafe mode. . Reverts to the (old) unsafe behaviour; see option -.ShortOpt S . +.BR \-S . . . -.OptDef v version +.TP +.B \-v +.TQ +.B \-\-version Output version information of .B groff and of all programs that are run by it; that is, the given command line is parsed in the usual way, passing -.ShortOpt v +.B \-v to all subprograms. . . -.OptDef V +.TP +.B \-V Output the pipeline that would be run by .BR groff (as a wrapper program) on the standard output, but do not execute it. If given more than once, -the commands will be both printed on the standard error and run. +the commands are both printed on the standard error and run. . . -.OptDef X +.TP +.B \-X Use .B \%gxditview instead of using the usual postprocessor to (pre)view a document. . The printing spooler behavior as outlined with options -.ShortOpt l +.B \-l and -.ShortOpt L +.B \-L is carried over to .BR \%gxditview (@MAN1EXT@) by determining an argument for the -.B \*[@-]printCommand +.B \-printCommand option of .BR \%gxditview (@MAN1EXT@). . @@ -650,47 +552,49 @@ This sets the default .B Print action and the corresponding menu entry to that value. . -.ShortOpt X +.B \-X only produces good results with -.ShortOpt Tps , -.ShortOpt TX75 , -.ShortOpt TX75-12 , -.ShortOpt TX100 , +.BR \-Tps , +.BR \-TX75 , +.BR \-TX75-12 , +.BR \-TX100 , and -.ShortOpt TX100-12 . +.BR \-TX100-12 . . The default resolution for previewing -.ShortOpt Tps +.B \-Tps output is 75\|dpi; this can be changed by passing the -.ShortOpt resolution +.B \-resolution option to .BR \%gxditview , for example . +.RS .IP -.ShellCommand groff \*[@-]X \*[@-]P\*[@-]resolution \*[@-]P100 \*[@-]man foo.1 +.EX +groff -X -P-resolution -P100 -man foo.1 +.EE +.RE . . -.OptDef z +.TP +.B \-z Suppress output generated by .BR @g@troff . -Only error messages will be printed. +Only error messages are printed. . . -.OptDef Z -Print the +.TP +.B \-Z +Do not automatically postprocess .I groff intermediate output -to standard output; see -.BR \%groff_out (@MAN5EXT@). -Normally -.BR groff -calls automatically a postprocessor. -. -With this option, the output of +in the usual manner. +This will cause the .B @g@troff -for the device, the so-called -.I intermediate output -is issued without postprocessing. +.I output +to appear on standard output, +replacing the usual postprocessor output; see +.BR \%groff_out (@MAN5EXT@). . . .\" -------------------------------------------------------------------- @@ -700,70 +604,93 @@ is issued without postprocessing. The following options are transparently handed over to the formatter program .B @g@troff -that is called by groff subsequently. +that is called by +.B groff +subsequently. . These options are described in more detail in .BR @g@troff (@MAN1EXT@). . -.OptDef a -ascii approximation of output. +.TP +.B \-a +\f[CR]ASCII\f[] approximation of output. . -.OptDef b -backtrace on error or warning. +.TP +.B \-b +Backtrace on error or warning. . -.OptDef c -disable color output. +.TP +.B \-c +Disable color output. . Please consult the .BR \%grotty (@MAN1EXT@) man page for more details. . -.OptDef C -enable compatibility mode. +.TP +.B \-C +Enable compatibility mode. . -.OptDef d "" cs -.OptDef+ d "" name=s -define string. +.TP +.BI \-d\ cs +.TQ +.BI \-d\ name = s +Define string. . -.OptDef E -disable +.TP +.B \-E +Disable .B @g@troff error messages. . -.OptDef f "" fam -set default font family. +.TP +.BI \-f\ fam +Set default font family. . -.OptDef F "" dir -set path for font DESC files. +.TP +.BI \-F\ dir +Set path for font DESC files. . -.OptDef i -process standard input after the specified input files. +.TP +.B \-i +Process standard input after the specified input files. . -.OptDef m "" name -include macro file \f[I]name\f[]\f[B].tmac\f[] (or -\f[B]tmac.\f[]\f[I]name\f[]); see also +.TP +.BI \-m\ name +Include macro file +.IB name .tmac +(or +.BI tmac. name\c +); see also .BR \%groff_tmac (@MAN5EXT@). . -.OptDef M "" dir -path for macro files. +.TP +.BI \-M\ dir +Path for macro files. . -.OptDef n "" num -number the first page +.TP +.BI \-n\ num +Number the first page .IR num . . -.OptDef o "" list -output only pages in +.TP +.BI \-o\ list +Output only pages in .IR list . . -.OptDef r "" cn -.OptDef+ r "" name=n -set number register. +.TP +.BI \-r\ cn +.TQ +.BI \-r\ name = n +Set number register. . -.OptDef w "" name -enable warning +.TP +.BI \-w\ name +Enable warning .IR name . . -.OptDef W "" name +.TP +.BI \-W\ name disable warning .IR name . . @@ -776,22 +703,31 @@ The .I groff system implements the infrastructure of classical roff; see .BR roff (@MAN7EXT@) -for a survey on how a roff system works in general. +for a survey on how a +.I roff +system works in general. . -Due to the front-end programs available within the groff system, using +Due to the front-end programs available within the +.I groff +system, using .I groff is much easier than .IR "classical roff" . . -This section gives an overview of the parts that constitute the groff +This section gives an overview of the parts that constitute the +.I groff system. . It complements .BR roff (@MAN7EXT@) -with groff-specific features. +with +.IR groff -specific +features. . This section can be regarded as a guide to the documentation around -the groff system. +the +.I groff +system. . . .\" -------------------------------------------------------------------- @@ -830,10 +766,10 @@ uses the command line option to pass options to output devices; for example, the following selects A4 paper in landscape orientation for the PS device: . -.RS -.P -groff -Tps -P-pa4 -P-l .\|.\|. -.RE +.IP +.EX +groff -Tps -P-pa4 -P-l ... +.EE . . .\" -------------------------------------------------------------------- @@ -857,51 +793,76 @@ can be avoided. .P The .BR grog (@MAN1EXT@) -program can be used for guessing the correct groff command line to -format a file. +program can be used for guessing the correct +.I groff +command line to format a file. . .P The .BR \%groffer (@MAN1EXT@) -program is an allround-viewer for groff files and man pages. +program is an allround-viewer for +.I groff +files and man pages. . . .\" -------------------------------------------------------------------- .SS Preprocessors .\" -------------------------------------------------------------------- . -The groff preprocessors are reimplementations of the classical -preprocessors with moderate extensions. +The +.I groff +preprocessors are reimplementations of the classical preprocessors +with moderate extensions. . -The preprocessors distributed with the +The standard preprocessors distributed with the .I groff package are . .TP .BR @g@eqn (@MAN1EXT@) for mathematical formul\(ae, +. .TP .BR @g@grn (@MAN1EXT@) for including .BR gremlin (1) pictures, +. .TP .BR @g@pic (@MAN1EXT@) for drawing diagrams, +. +.TP +.BR @g@chem (@MAN1EXT@) +for chemical structure diagrams, +. .TP .BR \%@g@refer (@MAN1EXT@) for bibliographic references, +. .TP .BR \%@g@soelim (@MAN1EXT@) for including macro files from standard locations, . .P and +. .TP .BR @g@tbl (@MAN1EXT@) for tables. . .P +A new preprocessor not available in classical +.I troff +is +.BR \%preconv (@MAN1EXT@) +which converts various input encodings to something +.B groff +can understand. +. +It is always run first before any other preprocessor. +. +.P Besides these, there are some internal preprocessors that are automatically run with some devices. . @@ -913,10 +874,12 @@ These aren't visible to the user. .\" -------------------------------------------------------------------- . Macro packages can be included by option -.ShortOpt m . +.BR \-m . . -The groff system implements and extends all classical macro packages -in a compatible way and adds some packages of its own. +The +.I groff +system implements and extends all classical macro packages in a +compatible way and adds some packages of its own. . Actually, the following macro packages come with .IR groff : @@ -926,10 +889,9 @@ Actually, the following macro packages come with The traditional man page format; see .BR \%groff_man (@MAN7EXT@). It can be specified on the command line as -.ShortOpt man +.B \-man or -.ShortOpt m -.BR man . +.BR \-m\~man . . .TP .B mandoc @@ -941,20 +903,18 @@ or the format and branches to the corresponding macro package. . It can be specified on the command line as -.ShortOpt mandoc +.B \%\-mandoc or -.ShortOpt m -.BR mandoc . +.BR \-m\~\%mandoc . . .TP .B mdoc -The BSD-style man page format; see +The \f[CR]BSD\f[]-style man page format; see .BR \%groff_mdoc (@MAN7EXT@). It can be specified on the command line as -.ShortOpt mdoc +.B \-mdoc or -.ShortOpt m -.BR mdoc . +.BR \-m\~mdoc . . .TP .B me @@ -963,10 +923,9 @@ The classical document format; see .BR \%groff_me (@MAN7EXT@). It can be specified on the command line as -.ShortOpt me +.B \-me or -.ShortOpt m -.BR me . +.BR \-m\~me . . .TP .B mm @@ -975,10 +934,9 @@ The classical document format; see .BR \%groff_mm (@MAN7EXT@). It can be specified on the command line as -.ShortOpt mm +.B \-mm or -.ShortOpt m -.BR mm . +.BR \-m\~mm . . .TP .B ms @@ -987,14 +945,15 @@ The classical document format; see .BR \%groff_ms (@MAN7EXT@). It can be specified on the command line as -.ShortOpt ms +.B \-ms or -.ShortOpt m -.BR ms . +.BR \-m\~ms . . .TP .B www -HTML-like macros for inclusion in arbitrary groff documents; see +HTML-like macros for inclusion in arbitrary +.I groff +documents; see .BR \%groff_www (@MAN7EXT@). . .P @@ -1009,16 +968,23 @@ not mentioned here. .SS "Programming Language" .\" -------------------------------------------------------------------- . -General concepts common to all roff programming languages are -described in +General concepts common to all +.I roff +programming languages are described in .BR roff (@MAN7EXT@). . .P -The groff extensions to the classical troff language are documented in +The +.I groff +extensions to the classical +.I troff +language are documented in .BR \%groff_diff (@MAN7EXT@). . .P -The groff language as a whole is described in the (still incomplete) +The +.I groff +language as a whole is described in the (still incomplete) .IR "groff info file" ; a short (but complete) reference can be found in .BR groff (@MAN7EXT@). @@ -1028,23 +994,35 @@ a short (but complete) reference can be found in .SS Formatters .\" -------------------------------------------------------------------- . -The central roff formatter within the groff system is +The central +.I roff +formatter within the +.I groff +system is .BR @g@troff (@MAN1EXT@). -It provides the features of both the classical troff and nroff, as -well as the groff extensions. +It provides the features of both the classical +.I troff +and +.IR nroff , +as well as the +.I groff +extensions. . The command line option -.ShortOpt C +.B \-C switches .B @g@troff into .I "compatibility mode" -which tries to emulate classical roff as much as possible. +which tries to emulate classical +.I roff +as much as possible. . .P There is a shell script .BR @g@nroff (@MAN1EXT@) -that emulates the behavior of classical nroff. +that emulates the behavior of classical +.BR nroff . . It tries to automatically select the proper output encoding, according to the current locale. @@ -1060,14 +1038,18 @@ see .SS Devices .\" -------------------------------------------------------------------- . -In roff, the output targets are called +In +.IR roff , +the output targets are called .IR devices . -A device can be a piece of hardware, e.g. a printer, or a software +A device can be a piece of hardware, e.g., a printer, or a software file format. . A device is specified by the option -.ShortOpt T . -The groff devices are as follows. +.BR \-T . +The +.I groff +devices are as follows. . .TP .B ascii @@ -1077,7 +1059,7 @@ character set. . .TP .B cp1047 -Text output using the EBCDIC code page IBM cp1047 (e.g. OS/390 Unix). +Text output using the EBCDIC code page IBM cp1047 (e.g., OS/390 Unix). . .TP .B dvi @@ -1112,11 +1094,16 @@ encoding; see .BR unicode (7). . .TP +.B xhtml +XHTML output. +. +.TP .B X75 75dpi X Window System output suitable for the previewers .BR \%xditview (1x) and .BR \%gxditview (@MAN1EXT@). +. A variant for a 12\|pt document base font is .BR \%X75-12 . . @@ -1126,6 +1113,7 @@ A variant for a 12\|pt document base font is .BR \%xditview (1x) and .BR \%gxditview (@MAN1EXT@). +. A variant for a 12\|pt document base font is .BR \%X100-12 . . @@ -1136,7 +1124,7 @@ command in the device description file; see .BR \%groff_font (@MAN5EXT@). . This can be overridden with the -.B \*[@-]X +.B -X option. . .P @@ -1148,17 +1136,20 @@ The default device is .SS Postprocessors .\" -------------------------------------------------------------------- . -groff provides 3\~hardware postprocessors: +.I groff +provides 3\~hardware postprocessors: . .TP .BR \%grolbp (@MAN1EXT@) for some Canon printers, +. .TP .BR \%grolj4 (@MAN1EXT@) for printers compatible to the HP LaserJet\~4 and PCL5, +. .TP .BR \%grotty (@MAN1EXT@) -for text output using various encodings, e.g. on text-oriented +for text output using various encodings, e.g., on text-oriented terminals or line-printers. . .P @@ -1170,53 +1161,88 @@ Consequently, there isn't an urgent need for more hardware device postprocessors. . .P -The groff software devices for conversion into other document file -formats are +The +.I groff +software devices for conversion into other document file formats are . .TP .BR \%grodvi (@MAN1EXT@) for the DVI format, +. .TP .BR \%grohtml (@MAN1EXT@) -for HTML format, +for HTML and XHTML formats, +. .TP .BR grops (@MAN1EXT@) for PostScript. . .P Combined with the many existing free conversion tools this should -be sufficient to convert a troff document into virtually any existing -data format. +be sufficient to convert a +.I troff +document into virtually any existing data format. . . .\" -------------------------------------------------------------------- .SS Utilities .\" -------------------------------------------------------------------- . -The following utility programs around groff are available. +The following utility programs around +.I groff +are available. . .TP .BR \%addftinfo (@MAN1EXT@) -Add information to troff font description files for use with groff. +Add information to +.I troff +font description files for use with +.IR groff . . .TP .BR \%afmtodit (@MAN1EXT@) Create font description files for PostScript device. . .TP +.BR \%eqn2graph (@MAN1EXT@) +Convert an +.B eqn +image into a cropped image. +. +.TP +.BR \%gdiffmk (@MAN1EXT@) +Mark differences between +.IR groff , +.IR nroff , +or +.I troff +files. +. +.TP +.BR \%grap2graph (@MAN1EXT@) +Convert a +.B grap +diagram into a cropped bitmap image. +. +.TP .BR \%groffer (@MAN1EXT@) -General viewer program for groff files and man pages. +General viewer program for +.I groff +files and man pages. . .TP .BR \%gxditview (@MAN1EXT@) -The groff X viewer, the GNU version of xditview. +The +.I groff +X viewer, the \f[CR]GNU\f[] version of +.BR xditview . . .TP .BR \%hpftodit (@MAN1EXT@) Create font description files for lj4 device. . .TP -.BR \%indxbib (@MAN1EXT@) +.BR \%@g@indxbib (@MAN1EXT@) Make inverted index for bibliographic databases. . .TP @@ -1224,12 +1250,23 @@ Make inverted index for bibliographic databases. Search bibliographic databases. . .TP -.BR \%lookbib (@MAN1EXT@) +.BR \%@g@lookbib (@MAN1EXT@) Interactively search bibliographic databases. . .TP +.BR \%pdfroff (@MAN1EXT@) +Create PDF documents using +.BR groff . +. +.TP .BR \%pfbtops (@MAN1EXT@) -Translate a PostScript font in .pfb format to ASCII. +Translate a PostScript font in .pfb format to \f[CR]ASCII\f[]. +. +.TP +.BR \%pic2graph (@MAN1EXT@) +Convert a +.B pic +diagram into a cropped image. . .TP .BR \%tfmtodit (@MAN1EXT@) @@ -1237,7 +1274,14 @@ Create font description files for TeX DVI device. . .TP .BR \%xditview (1x) -roff viewer distributed with X window. +.I roff +viewer distributed with X window. +. +.TP +.BR \%xtotroff (@MAN1EXT@) +Convert X font metrics into \f[CR]GNU\f[] +.I troff +font metrics. . . .\" -------------------------------------------------------------------- @@ -1249,21 +1293,25 @@ colon; this may vary depending on the operating system. . For example, DOS and Windows use a semicolon instead. . +. .TP .EnvVar GROFF_BIN_PATH This search path, followed by .EnvVar $PATH , -will be used for commands that are executed by +is used for commands that are executed by .BR groff . . -If it is not set then the directory where the groff binaries were -installed is prepended to +If it is not set then the directory where the +.I groff +binaries were installed is prepended to .EnvVar PATH . . +. .TP .EnvVar GROFF_COMMAND_PREFIX -When there is a need to run different roff implementations at the same -time +When there is a need to run different +.I roff +implementations at the same time .I groff provides the facility to prepend a prefix to most of its programs that could provoke name clashings at run time (default is to have none). @@ -1285,23 +1333,24 @@ version of . By setting .EnvVar GROFF_COMMAND_PREFIX -to different values, the different roff installations can be -addressed. +to different values, the different +.I roff +installations can be addressed. . More exactly, if it is set to prefix .I xxx then .B groff -as a wrapper program will internally call +as a wrapper program internally calls .IB xxx troff instead of .BR troff . This also applies to the preprocessors -.BR \%eqn , -.BR \%grn , -.BR \%pic , +.BR eqn , +.BR grn , +.BR pic , .BR \%refer , -.BR \%tbl , +.BR tbl , .BR \%soelim , and to the utilities .B \%@g@indxbib @@ -1311,7 +1360,40 @@ and This feature does not apply to any programs different from the ones above (most notably .B groff -itself) since they are unique to the groff package. +itself) since they are unique to the +.I groff +package. +. +. +.TP +.EnvVar GROFF_ENCODING +The value of this environment value is passed to the +.B preconv +preprocessor to select the encoding of input files. +. +Setting this option implies +.BR groff 's +command line option +.B \-k +(this is, +.B groff +actually always calls +.BR preconv ). +. +If set without a value, +.B groff +calls +.B preconv +without arguments. +. +An explicit +.B \-K +command line option overrides the value of +.EnvVar GROFF_ENCODING . +. +See +.BR preconv (@MAN1EXT@) +for details. . . .TP @@ -1341,13 +1423,13 @@ for more details. . .TP .EnvVar GROFF_TMPDIR -The directory in which temporary files will be created. +The directory in which temporary files are created. . If this is not set but the environment variable .EnvVar TMPDIR -instead, temporary files will be created in the directory +instead, temporary files are created in the directory .EnvVar $TMPDIR . -On MS-DOS and Windows\ 32 platforms, the environment variables +On MS-DOS and Windows\~32 platforms, the environment variables .EnvVar TMP and .EnvVar TEMP @@ -1356,7 +1438,7 @@ and and .EnvVar TMPDIR . . -Otherwise, temporary files will be created in +Otherwise, temporary files are created in .BR /tmp . The .BR \%@g@refer (@MAN1EXT@), @@ -1376,7 +1458,7 @@ If this is not set the device is used as default. . This device name is overwritten by the option -.ShortOpt T . +.BR \-T . . . .\" -------------------------------------------------------------------- @@ -1402,8 +1484,9 @@ Note that more than a single directory is searched for those files as documented in .BR \%groff_tmac (@MAN5EXT@). . -For the groff installation corresponding to this document, it is -located at +For the +.I groff +installation corresponding to this document, it is located at .IR @MACRODIR@ . . The following files contained in the @@ -1413,7 +1496,8 @@ have a special meaning: . .TP .B troffrc -Initialization file for troff. +Initialization file for +.IR troff . . This is interpreted by .B @g@troff @@ -1422,13 +1506,15 @@ before reading the macro sets and any input. . .TP .B troffrc-end -Final startup file for troff, it is parsed after all macro sets have -been read. +Final startup file for +.IR troff . +. +It is parsed after all macro sets have been read. . . .TP .IB name .tmac -.TP+ +.TQ .BI tmac. name Macro file for macro package .IR name . @@ -1443,12 +1529,13 @@ This contains all information related to output devices. Note that more than a single directory is searched for those files; see .BR @g@troff (@MAN1EXT@). . -For the groff installation corresponding to this document, it is -located at +For the +.I groff +installation corresponding to this document, it is located at .IR @FONTDIR@ . . The following files contained in the -.I groff font directory +.I "groff font directory" have a special meaning: . . @@ -1478,38 +1565,52 @@ program as a wrapper around .BR @g@troff . . .P -To process a roff file using the preprocessors +To process a +.I roff +file using the preprocessors .B tbl and .B pic and the .B me -macro set, classical troff had to be called by +macro set, classical +.I troff +had to be called by . -.P -.ShellCommand pic foo.me | tbl | troff \*[@-]me \*[@-]Tlatin1 | grotty +.IP +.EX +pic foo.me | tbl | troff -me -Tlatin1 | grotty +.EE . .P Using .BR groff , this pipe can be shortened to the equivalent command -.P -.ShellCommand groff \*[@-]p \*[@-]t \*[@-]me \*[@-]T latin1 foo.me +. +.IP +.EX +groff -p -t -me -T latin1 foo.me +.EE . .P An even easier way to call this is to use .BR grog (@MAN1EXT@) to guess the preprocessor and macro options and execute the generated command (by using backquotes to specify shell command substitution) -.P -.ShellCommand \`grog \*[@-]Tlatin1 foo.me\` +. +.IP +.EX +\`grog -Tlatin1 foo.me\` +.EE . .P The simplest way is to view the contents in an automated way by calling . -.P -.ShellCommand groffer foo.me +.IP +.EX +groffer foo.me +.EE . . .\" -------------------------------------------------------------------- @@ -1517,102 +1618,136 @@ calling .\" -------------------------------------------------------------------- . .P -On EBCDIC hosts (e.g. OS/390 Unix), output devices +On \f[CR]EBCDIC\f[] hosts (e.g., \f[CR]OS/390 Unix\f[]), output +devices .B ascii and .B latin1 aren't available. . -Similarly, output for EBCDIC code page +Similarly, output for \f[CR]EBCDIC\f[] code page .B cp1047 -is not available on ASCII based operating systems. +is not available on \f[CR]ASCII\f[] based operating systems. . .P -Report bugs to bug-groff@gnu.org. +Report bugs to +.MT bug-groff@gnu.org +the groff maling list +.ME . . -Include a complete, self-contained example that will allow the bug to -be reproduced, and say which version of groff you are using. +Include a complete, self-contained example that allows the bug to +be reproduced, and say which version of +.I groff +you are using. . . .\" -------------------------------------------------------------------- .SH AVAILABILITY .\" -------------------------------------------------------------------- . -Information on how to get groff and related information is available -at the -.URL http://\:www.gnu.org/\:software/\:groff "GNU website" . -The most recent released version of groff is available for anonymous -ftp at the -.URL ftp://ftp.ffii.org/\:pub/\:groff/\:devel/\:groff-current.tar.gz \ - "groff development site" . +Information on how to get +.I groff +and related information is available at the +.UR http://\:www.gnu.org/\:software/\:groff +groff GNU website +.UE . . -.P -Three groff mailing lists are available: -.TP -.MTO bug-groff@gnu.org -for reporting bugs, +The most recent released version of +.I groff +is available at the +.UR http://\:groff.ffii.org/\:groff/\:devel/\:groff-current.tar.gz +groff development site +.UE . . -.TP -.MTO groff@gnu.org -for general discussion of groff, +.P +Three +.I groff +mailing lists are available: +.IP +.MT bug-groff@gnu.org +for reporting bugs +.ME . . -.TP -.MTO groff-commit@ffii.org +.IP +.MT groff@gnu.org +for general discussion of +.IR groff , +.ME . +.IP +.MT groff-commit@ffii.org +the groff commit list +.ME , a read-only list showing logs of commitments to the CVS repository. . .P Details on CVS access and much more can be found in the file .B README -at the top directory of the groff source package. +at the top directory of the +.I groff +source package. . .P There is a free implementation of the .B grap preprocessor, written by -.MTO faber@lunabase.org " Ted Faber" . +.MT faber@lunabase.org +Ted Faber +.ME . . The actual version can be found at the . -.URL http://\:www.lunabase.org/\:~faber/\:Vault/\:software/\:grap/ \ - "grap website" . -This is the only grap version supported by groff. +.UR http://\:www.lunabase.org/\:~faber/\:Vault/\:software/\:grap/ +grap website +.UE . +This is the only grap version supported by +.IR groff . . . .\" -------------------------------------------------------------------- .SH AUTHORS .\" -------------------------------------------------------------------- . -Copyright \(co 1989, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +Copyright \(co 1989, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +Free Software Foundation, Inc. . .P -This document is distributed under the terms of the FDL (GNU Free -Documentation License) version 1.1 or later. +This document is distributed under the terms of the \f[CR]FDL\f[] +(\f[CR]GNU Free Documentation License\f[]) version 1.3 or later. . -You should have received a copy of the FDL on your system, it is also -available on-line at the -.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" . +You should have received a copy of the \f[CR]FDL\f[] on your system, +it is also available on-line at the +.UR http://\:www.gnu.org/\:copyleft/\:fdl.html +GNU copyleft site +.UE . . .P -This document is based on the original groff man page written by -.MTO jjc@jclark.com "James Clark" . +This document is based on the original +.I groff +man page written by +.MT jjc@jclark.com +James Clark +.UE . . It was rewritten, enhanced, and put under the FDL license by -\m[blue]Bernd Warken\m[]. +Bernd Warken. . It is maintained by -.MTO wl@gnu.org "Werner Lemberg" . +.MT wl@gnu.org +Werner Lemberg +.ME . . .P .I groff -is a GNU free software project. +is a \f[CR]GNU\f[] free software project. . All parts of the .I groff package -are protected by GNU copyleft licenses. +are protected by \f[CR]GNU copyleft licenses\f[]. . -The software files are distributed under the terms of the GNU General -Public License (GPL), while the documentation files mostly use the GNU -Free Documentation License (FDL). +The software files are distributed under the terms of the \f[CR]GNU +General Public License\f[] (\f[CR]GPL\f[]), while the documentation +files mostly use the \f[CR]GNU Free Documentation License\f[] +(\f[CR]FDL\f[]). . . .\" -------------------------------------------------------------------- @@ -1620,18 +1755,20 @@ Free Documentation License (FDL). .\" -------------------------------------------------------------------- . The -.IR "groff info file" -contains all information on the groff system within a single document. -. -Beneath the detailed documentation of all aspects, it provides -examples and background information. +.I groff info file +contains all information on the +.I groff +system within a single document, providing many examples and +background information. . See .BR info (1) on how to read it. . .P -Due to its complex structure, the groff system has many man pages. +Due to its complex structure, the +.I groff +system has many man pages. . They can be read with .BR man (1) @@ -1658,6 +1795,8 @@ Roff preprocessors: .BR \%@g@eqn (@MAN1EXT@), .BR \%@g@grn (@MAN1EXT@), .BR \%@g@pic (@MAN1EXT@), +.BR \%@g@chem (@MAN1EXT@), +.BR \%preconv (@MAN1EXT@), .BR \%@g@refer (@MAN1EXT@), .BR \%@g@soelim (@MAN1EXT@), .BR \%@g@tbl (@MAN1EXT@), @@ -1677,9 +1816,7 @@ Roff formatter programs: .BR ditroff (@MAN7EXT@). . .TP -The -.I intermediate output -language: +The intermediate output language: .BR \%groff_out (@MAN7EXT@). . .TP @@ -1711,17 +1848,19 @@ The following utilities are available: .BR \%addftinfo (@MAN1EXT@), .BR \%afmtodit (@MAN1EXT@), .BR \%eqn2graph (@MAN1EXT@), +.BR \%gdiffmk (@MAN1EXT@), .BR \%grap2graph (@MAN1EXT@), .BR \%groffer (@MAN1EXT@), .BR \%gxditview (@MAN1EXT@), .BR \%hpftodit (@MAN1EXT@), .BR \%@g@indxbib (@MAN1EXT@), +.BR \%lkbib (@MAN1EXT@), .BR \%@g@lookbib (@MAN1EXT@), +.BR \%pdfroff (@MAN1EXT@), .BR \%pfbtops (@MAN1EXT@), .BR \%pic2graph (@MAN1EXT@), -.BR \%tfmtodit (@MAN1EXT@). -. -.cp \n[groff_C] +.BR \%tfmtodit (@MAN1EXT@), +.BR \%xtotroff (@MAN1EXT@). . .\" -------------------------------------------------------------------- .\" Emacs setup diff --git a/contrib/groff/src/roff/groff/pipeline.c b/contrib/groff/src/roff/groff/pipeline.c index d067ae9301..cea7593dfc 100644 --- a/contrib/groff/src/roff/groff/pipeline.c +++ b/contrib/groff/src/roff/groff/pipeline.c @@ -1,4 +1,5 @@ -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005, + 2006, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -6,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #ifdef HAVE_CONFIG_H #include @@ -168,7 +168,7 @@ const char *system_shell_dash_c(void) shell_name = system_shell_name(); - /* Assume that if the shell name ends in "sh", it's Unixy */ + /* Assume that if the shell name ends in `sh', it's Unixy */ if (strcasecmp(shell_name + strlen(shell_name) - strlen("sh"), "sh") == 0) dash_c = "-c"; else diff --git a/contrib/groff/src/roff/groff/pipeline.h b/contrib/groff/src/roff/groff/pipeline.h index 77bb11a053..20e775ac02 100644 --- a/contrib/groff/src/roff/groff/pipeline.h +++ b/contrib/groff/src/roff/groff/pipeline.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2002 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2002, 2005, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -6,17 +6,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #ifdef __cplusplus extern "C" { @@ -25,7 +24,7 @@ extern "C" { #endif /* run_pipeline can handle at most this many commands */ -#define MAX_COMMANDS 12 +#define MAX_COMMANDS 13 /* Children exit with this status if execvp fails. */ #define EXEC_FAILED_EXIT_STATUS 0xff diff --git a/contrib/groff/src/roff/grog/grog.man b/contrib/groff/src/roff/grog/grog.man index 44282337bd..c4a0b65fb6 100644 --- a/contrib/groff/src/roff/grog/grog.man +++ b/contrib/groff/src/roff/grog/grog.man @@ -1,40 +1,183 @@ +.TH GROG @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@" +. +.\" -------------------------------------------------------------------- +.\" Legalize +.\" -------------------------------------------------------------------- +. .ig -Copyright (C) 1989-2000, 2001, 2002, 2003 Free Software Foundation, Inc. +grog.1 - man page for grog (section 1) -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. +Source file position: /src/roff/grog/grog.man +Installed position: $prefix/share/man/man1/grog.1 -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the -entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - -Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be included in -translations approved by the Free Software Foundation instead of in -the original English. +Last Update: 5 Jan 2009 .. -.TH GROG @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@" +.de co +Copyright (C) 1989-2000, 2001, 2002, 2003, 2006, 2007, 2009 +Free Software Foundation, Inc. +. +Written by James Clark. +Maintained by +.MT wl@gnu.org +Werner Lemberg +.ME . +Rewritten and put under GPL by Bernd Warken. +. +.P +This file is part of +.IR grog , +which is part of +.IR groff , +a free software project. +. +You can redistribute it and/or modify it under the terms of the +.nh +.B "GNU General Public License" +.hy +(\f[CR]GPL\f[]) as published by the +.nh +.BR "Free Software Foundation" , +.hy +either version\~2, or (at your option) any later version. +. +.P +You should have received a copy of the \f[CR]GNU General Public +License\f[] along with +.IR groff , +see the files \%\f[CB]COPYING\f[] and \%\f[CB]LICENSE\f[] in the top +directory of the +.I groff +source package. +. +Or read the +.I man\~page +.BR gpl (1). +You can also write to the +.nh +.B "Free Software Foundation, 51 Franklin St - Fifth Floor, Boston," +.BR "MA 02110-1301, USA" . +.hy +.. +. +. +.\" -------------------------------------------------------------------- +.\" Local macros +.de FN +.I \\$1 +.. +. +. +.\" -------------------------------------------------------------------- .SH NAME +. grog \- guess options for groff command +. +. +.\" -------------------------------------------------------------------- .SH SYNOPSIS -.B grog -[ -.BI \- option -\|.\|.\|.\& -] -[ -.IR files\ \|.\|.\|.\& -] +. +.SY grog +.OP \-C +.RI [ \%groff\-option\~ .\|.\|.\&] +.OP \-\- +.RI [ \%filespec\~ .\|.\|.] +. +.SY grog +.B \-h +| +.B \-\-help +. +.SY grog +.B \-v +| +.B \-\-version +.YS +. +. +.\" -------------------------------------------------------------------- .SH DESCRIPTION +. .B grog -reads -.I files -and guesses which of the +reads the input (file names or standard input) and guesses which of +the .BR groff (@MAN1EXT@) -options +options are needed to perform the input with the +.B groff +program. +. +The corresponding +.B groff +command is output. +. +. +.\" -------------------------------------------------------------------- +.SH OPTIONS +. +The only +.B grog +options recognized are +.B \-C +(which is also passed on) to enable compatibility mode; +.B \-v +and +.B \-\-version +print information on the version number; and +.B \-h +and +.B \-\-help +print usage information. +. +.BR \-v , +.BR \-\-version , +.BR \-h , +and +.B \-\-help +stop the program directly without printing a +.B groff +command to standard output. +. +. +.P +All other specified short options (words starting with one minus +character +.BR \- ) +are interpreted as +.B groff +options or option clusters with or without argument. +. +No space is allowed between options and their argument. +. +Except from the +.BI \-m arg +options, all options will be passed on, i.e. they are included +unchanged in the command for the output without effecting the work of +.BR grog . +. +. +.P +A +.I filespec +argument can either be the name of an existing file or a single minus +.B \- +to mean standard input. +. +If no +.I filespec +is specified standard input is read automatically. +. +. +.\" -------------------------------------------------------------------- +.SH DETAILS +. +.B grog +reads all +.I filespec +parameters as a whole. +. +It tries to guess which of the following +.B groff +options are required for running the input under +.BR groff : .BR \-e , .BR \-man , .BR \-me , @@ -49,33 +192,327 @@ options .BR \-G , .BR \-s , and -.BR \-t -are required for printing -.IR files , -and prints the groff command including those options on the standard output. -A filename of -.B \- -is taken to refer to the standard input. -If no files are specified the standard input will be read. -Any specified options will be included in the printed command. -No space is allowed between options and their arguments. -The only options recognized are -.B \-C -(which is also passed on) to enable compatibility mode, and -.B \-v -to print the version number. -.LP -For example, -.IP -.B \`grog \-Tdvi paper.ms\` -.LP -will guess the appropriate command to print -.B paper.ms -and then run it after adding the -.B \-Tdvi +.BR \-t . +The guessed +.B groff +command including those options and the found +.I filespec +parameters is put on the standard output. +. +. +.P +It is possible to specify arbitrary +.B groff +options on the command line. +. +These are passed on the output without change, except for the +.BI \-m arg +options. +. +. +.P +The +.B groff +program has trouble when the wrong +.BI \-m arg +option or several of these options are specified. +. +In these cases, +.B grog +will print an error message and exit with an error code. +. +It is better to specify no +.BI \-m arg option. +. +Because such an option is only accepted and passed when +.B grog +does not find any of these options or the same option is found. +. +. +.P +If several different +.BI \-m arg +options are found by +.B grog +an error message is produced and the program is terminated with an +error code. +. +But the output is written with the wrong options nevertheless. +. +. +.P +Remember that it is not necessary to determine a macro package. +. +A +.I roff +file can also be written in the +.I groff +language without any macro package. +. +.B grog +will produce an output without an +.BI \-m arg +option. +. +. +.P +As +.B groff +also works with pure text files without any +.I roff +requests, +.B grog +cannot be used to identify a file to be a +.I roff +file. +. +. +.P +The +.BR groffer (@MAN1EXT@) +program heavily depends on a working +.BR grog . +. +. +.P +The +.B grog +source contains two files written in different programming languages: +. +.ft CB +grog.pl +.ft R +is the +.I Perl +version, while +.ft CB +grog.sh +.ft R +is a shell script using +BR awk (1). +During the run of +.BR make (1), +it is determined whether the system contains a suitable version of +.BR perl (1). +If so, +.ft CB +grog.pl +.ft R +is transformed into +.BR grog ; +otherwise +.ft CB +grog.sh +.ft R +is used instead. +. +. +.\" -------------------------------------------------------------------- +.SH EXAMPLES +. +.IP \(bu +Calling +. +.RS +.IP +.EX +grog meintro.me +.EE +.RE +. +.IP +results in +. +.RS +.IP +.EX +groff \-me meintro.me +.EE +.RE +. +.IP +So +.B grog +recognized that the file +.FN meintro.me +is written with the +.B \-me +macro package. +.RE +. +. +.IP \(bu +On the other hand, +. +.RS +.IP +.EX +grog pic.ms +.EE +.RE +. +.IP +outputs +. +.RS +.IP +.EX +groff \-pte \-ms pic.ms +.EE +.RE +. +.IP +Besides determining the macro package +.BR \-ms , +.B grog +recognized that the file +.FN pic.ms +additionally needs +.BR \-pte , +the combination of +.B \-p +for +.IR pic , +.B \-t +for +.IR tbl , +and +.B \-e +for +.IR eqn . +.RE +. +. +.IP \(bu +If both files are combined by the command +. +.RS +.IP +.EX +grog meintro.me pic.ms +.EE +.RE +. +.IP +an error message is sent to standard error because +.B groff +cannot work with two different macro packages: +. +.RS +.IP +.ft CR +grog: error: there are several macro packages: -me -ms +.ft +.RE +. +.IP +Additionally the corresponding output with the wrong options is printed +to standard output: +. +.RS +.IP +.EX +groff -pte -me -ms meintro.me pic.ms +.EE +.RE +. +.IP +But the program is terminated with an error code. +. +. +.IP \(bu +The call of +. +.RS +.IP +.EX +grog \-ksS \-Tdvi grnexmpl.g +.EE +.RE +. +.IP +contains several +.B groff +options that are just passed on the output without any interface to +.BR grog . +These are the option cluster +.B \-ksS +consisting of +.BR \-k , +.BR \-s , +and +.BR \-S ; +and the option +.B \-T +with argument +.BR dvi . +The output is +. +.RS +.IP +.EX +groff \-ksS \-Tdvi grnexmpl.g +.EE +.RE +. +.IP +so no additional option was added by +.BR grog . +As no option +.BI \-m arg +was found by +.B grog +this file does not use a macro package. +. +. +.IP \(bu +.B grog +can also handle files using the +.I chem +language. +. +The example +. +.RS +.IP +.EX +grog chAh_brackets.chem +.EE +.RE +. +.IP +outputs +. +.RS +.IP +.EX +chem chAh_brackets.chem | groff \-pe +.EE +.RE +. +.IP +So +.B chem +is run first and +.B groff +is appended. +. +The option +.B \-p +for +.B pic +is implied automatically by +.BR chem . +Additionally, the file uses +.I eqn +with +.BR \-e . +. +. +.\" -------------------------------------------------------------------- .SH "SEE ALSO" -.BR doctype (1), +. .BR groff (@MAN1EXT@), .BR @g@troff (@MAN1EXT@), .BR @g@tbl (@MAN1EXT@), @@ -84,7 +521,24 @@ option. .BR @g@refer (@MAN1EXT@), .BR @g@grn (@MAN1EXT@), .BR grap (1), -.BR @g@soelim (@MAN1EXT@) +.BR @g@soelim (@MAN1EXT@), +.BR groff_me (@MAN7EXT@), +.BR groff_ms (@MAN7EXT@), +.BR groff_mm (@MAN7EXT@), +.BR groff_mom (@MAN7EXT@), +.BR groff_man (@MAN7EXT@), +.BR groffer (@MAN1EXT@) +. +. +.\" -------------------------------------------------------------------- +.SH "COPYING" +. +.co +. +. +.\" -------------------------------------------------------------------- +.\" Emacs settings +.\" -------------------------------------------------------------------- . .\" Local Variables: .\" mode: nroff diff --git a/contrib/groff/src/roff/grog/grog.pl b/contrib/groff/src/roff/grog/grog.pl index b802fd56f2..24a4090fbc 100644 --- a/contrib/groff/src/roff/grog/grog.pl +++ b/contrib/groff/src/roff/grog/grog.pl @@ -1,222 +1,379 @@ -#! /usr/bin/perl -# grog -- guess options for groff command +#! /usr/bin/env perl +# grog - guess options for groff command # Inspired by doctype script in Kernighan & Pike, Unix Programming # Environment, pp 306-8. -$prog = $0; -$prog =~ s@.*/@@; +# Source file position: /src/roff/grog/grog.pl +# Installed position: /bin/grog -$sp = "[\\s\\n]"; +# Copyright (C) 1993, 2006, 2009 Free Software Foundation, Inc. +# Written by James Clark, maintained by Werner Lemberg. +# Rewritten and put under GPL by Bernd Warken. -push(@command, "groff"); +# This file is part of `grog', which is part of `groff'. -while ($ARGV[0] =~ /^-./) { - $arg = shift(@ARGV); - $sp = "" if $arg eq "-C"; - &usage(0) if $arg eq "-v" || $arg eq "--version"; - &help() if $arg eq "--help"; - last if $arg eq "--"; - push(@command, $arg); -} +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License (GPL) as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## +my $Last_Update = '5 Jan 2009'; +######################################################################## + +require v5.6; + +use warnings; +use strict; +use File::Spec; -@ARGV = ('-') unless @ARGV; -foreach $arg (@ARGV) { - &process($arg, 0); +my $Prog = $0; +{ + my ($v, $d, $f) = File::Spec->splitpath($Prog); + $Prog = $f; } -sub process { - local($filename, $level) = @_; - local(*FILE); +#my $Sp = "[\\s\\n]"; +my $Sp = qr([\s\n]); + +my @Command; # stores the final output +my @Mparams; # stores the options -m* +my %Groff; + +{ + my @filespec = (); + my $double_minus = 0; + my $was_minus = 0; + my $had_filespec = 0; - if (!open(FILE, $filename eq "-" ? $filename : "< $filename")) { - print STDERR "$prog: can't open \`$filename': $!\n"; - exit 1 unless $level; - return; + foreach my $arg (@ARGV) { + next unless $arg; + if ($double_minus) { + $had_filespec = 1; + if (-f $arg && -r $arg) { + push @filespec, $arg; + } else { + print STDERR "grog: $arg is not a readable file.\n"; + } + next; } - while () { - if (/^\.TS$sp/) { - $_ = ; - if (!/^\./) { - $tbl++; - $soelim++ if $level; - } - } - elsif (/^\.EQ$sp/) { - $_ = ; - if (!/^\./ || /^\.[0-9]/) { - $eqn++; - $soelim++ if $level; - } - } - elsif (/^\.GS$sp/) { - $_ = ; - if (!/^\./) { - $grn++; - $soelim++ if $level; - } - } - elsif (/^\.G1$sp/) { - $_ = ; - if (!/^\./) { - $grap++; - $pic++; - $soelim++ if $level; - } - } - elsif (/^\.PS$sp([ 0-9.<].*)?$/) { - if (/^\.PS\s*<\s*(\S+)/) { - $pic++; - $soelim++ if $level; - &process($1, $level); - } - else { - $_ = ; - if (!/^\./ || /^\.ps/) { - $pic++; - $soelim++ if $level; - } - } - } - elsif (/^\.R1$sp/) { - $refer++; - $soelim++ if $level; - } - elsif (/^\.\[/) { - $refer_open++; - $soelim++ if $level; - } - elsif (/^\.\]/) { - $refer_close++; - $soelim++ if $level; - } - elsif (/^\.[PLI]P$sp/) { - $PP++; - } - elsif (/^\.P$/) { - $P++; - } - elsif (/^\.(PH|SA)$sp/) { - $mm++; - } - elsif (/^\.TH$sp/) { - $TH++; - } - elsif (/^\.SH$sp/) { - $SH++; - } - elsif (/^\.([pnil]p|sh)$sp/) { - $me++; - } - elsif (/^\.Dd$sp/) { - $mdoc++; - } - elsif (/^\.(Tp|Dp|De|Cx|Cl)$sp/) { - $mdoc_old = 1; - } - # In the old version of -mdoc `Oo' is a toggle, in the new it's - # closed by `Oc'. - elsif (/^\.Oo$sp/) { - $Oo++; - s/^\.Oo/\. /; - redo; - } - # The test for `Oo' and `Oc' not starting a line (as allowed by the - # new implementation of -mdoc) is not complete; it assumes that - # macro arguments are well behaved, i.e., "" is used within "..." to - # indicate a doublequote as a string element, and weird features - # like `.foo a"b' are not used. - elsif (/^\..* Oo( |$)/) { - s/\\\".*//; - s/\"[^\"]*\"//g; - s/\".*//; - if (s/ Oo( |$)/ /) { - $Oo++; - } - redo; - } - elsif (/^\.Oc$sp/) { - $Oo--; - s/^\.Oc/\. /; - redo; - } - elsif (/^\..* Oc( |$)/) { - s/\\\".*//; - s/\"[^\"]*\"//g; - s/\".*//; - if (s/ Oc( |$)/ /) { - $Oo--; - } - redo; - } - elsif (/^\.(PRINTSTYLE|START)$sp/) { - $mom++; - } - if (/^\.so$sp/) { - chop; - s/^.so *//; - s/\\\".*//; - s/ .*$//; - &process($_, $level + 1) unless /\\/ || $_ eq ""; - } + + if ($arg eq '--') { + $double_minus = 1; + push(@Command, $arg); + next; } - close(FILE); -} + if ($arg eq '-') { + unless ($was_minus) { + push @filespec, $arg; + $was_minus = 1; + } + next; + } + + &version(0) if $arg eq '-v' || '--version' =~ /^$arg/; + &help() if $arg eq '-h' || '--help' =~ /^$arg/; + print STDERR "grog: wrong option $arg.\n" if $arg =~ /^--/; + + if ($arg =~ /^-m/) { + push @Mparams, $arg; + next; + } + $Sp = '' if $arg eq '-C'; -sub usage { - local($exit_status) = $_; - print "GNU grog (groff) version @VERSION@\n"; - exit $exit_status; + if ($arg =~ /^-/) { + push(@Command, $arg); + next; + } else { + $had_filespec = 1; + if (-f $arg && -r $arg) { + push @filespec, $arg; + } else { + print STDERR "grog: $arg is not a readable file.\n"; + } + next; + } + } + @filespec = ('-') if ! @filespec && ! $had_filespec; + exit 1 unless @filespec; + @ARGV = @filespec; } -sub help { - print "usage: grog [ option ...] [files...]\n"; - exit 0; +foreach my $arg (@ARGV) { + &process($arg, 0); } -$refer ||= $refer_open && $refer_close; +sub process { + my ($filename, $level) = @_; + local(*FILE); -if ($pic || $tbl || $eqn || $grn || $grap || $refer) { - $s = "-"; - $s .= "s" if $soelim; - $s .= "R" if $refer; - # grap must be run before pic - $s .= "G" if $grap; - $s .= "p" if $pic; - $s .= "g" if $grn; - $s .= "t" if $tbl; - $s .= "e" if $eqn; - push(@command, $s); -} + if (!open(FILE, $filename eq "-" ? $filename : "< $filename")) { + print STDERR "$Prog: can't open \`$filename': $!\n"; + exit 1 unless $level; + return; + } + while () { + chomp; + s/^[.']\s*/./; + s/^\s+|\s+$//g; + s/$/\n/; -if ($me > 0) { - push(@command, "-me"); -} -elsif ($SH > 0 && $TH > 0) { - push(@command, "-man"); -} -else ($mom > 0) { - push(@command, "-mom"); -} -elsif ($PP > 0) { - push(@command, "-ms"); + if (/^(.cstart)|(begin\s+chem)$/) { + $Groff{'chem'}++; + $Groff{'pic'}++; + } elsif (/^\.TS$Sp/) { + $_ = ; + if (!/^\./) { + $Groff{'tbl'}++; + $Groff{'soelim'}++ if $level; + } + } elsif (/^\.EQ$Sp/) { + $_ = ; + if (!/^\./ || /^\.[0-9]/) { + $Groff{'eqn'}++; + $Groff{'soelim'}++ if $level; + } + } elsif (/^\.GS$Sp/) { + $_ = ; + if (!/^\./) { + $Groff{'grn'}++; + $Groff{'soelim'}++ if $level; + } + } elsif (/^\.G1$Sp/) { + $_ = ; + if (!/^\./) { + $Groff{'grap'}++; + $Groff{'pic'}++; + $Groff{'soelim'}++ if $level; + } +# } elsif (/^\.PS\Sp([ 0-9.<].*)?$/) { +# if (/^\.PS\s*<\s*(\S+)/) { +# $Groff{'pic'}++; +# $Groff{'soelim'}++ if $level; +# &process($1, $level); +# } else { +# $_ = ; +# if (!/^\./ || /^\.ps/) { +# $Groff{'pic'}++; +# $Groff{'soelim'}++ if $level; +# } +# } + } elsif (/^\.PS[\s\n<]/) { + $Groff{'pic'}++; + $Groff{'soelim'}++ if $level; + if (/^\.PS\s*<\s*(\S+)/) { + &process($1, $level); + } + } elsif (/^\.R1$Sp/) { + $Groff{'refer'}++; + $Groff{'soelim'}++ if $level; + } elsif (/^\.\[/) { + $Groff{'refer_open'}++; + $Groff{'soelim'}++ if $level; + } elsif (/^\.\]/) { + $Groff{'refer_close'}++; + $Groff{'soelim'}++ if $level; + } elsif (/^\.NH$Sp/) { + $Groff{'NH'}++; # for ms + } elsif (/^\.TL$Sp/) { + $Groff{'TL'}++; # for mm and ms + } elsif (/^\.PP$Sp/) { + $Groff{'PP'}++; # for mom and ms + } elsif (/^\.[IL]P$Sp/) { + $Groff{'ILP'}++; # for man and ms + } elsif (/^\.P$/) { + $Groff{'P'}++; + } elsif (/^\.(PH|SA)$Sp/) { + $Groff{'mm'}++; + } elsif (/^\.TH$Sp/) { + $Groff{'TH'}++; + } elsif (/^\.SH$Sp/) { + $Groff{'SH'}++; + } elsif (/^\.([pnil]p|sh)$Sp/) { + $Groff{'me'}++; + } elsif (/^\.Dd$Sp/) { + $Groff{'mdoc'}++; + } elsif (/^\.(Tp|Dp|De|Cx|Cl)$Sp/) { + $Groff{'mdoc_old'} = 1; + } + # In the old version of -mdoc `Oo' is a toggle, in the new it's + # closed by `Oc'. + elsif (/^\.Oo$Sp/) { + $Groff{'Oo'}++; + s/^\.Oo/\. /; + redo; + } + # The test for `Oo' and `Oc' not starting a line (as allowed by the + # new implementation of -mdoc) is not complete; it assumes that + # macro arguments are well behaved, i.e., "" is used within "..." to + # indicate a doublequote as a string element, and weird features + # like `.foo a"b' are not used. + elsif (/^\..* Oo( |$)/) { + s/\\\".*//; + s/\"[^\"]*\"//g; + s/\".*//; + if (s/ Oo( |$)/ /) { + $Groff{'Oo'}++; + } + redo; + } elsif (/^\.Oc$Sp/) { + $Groff{'Oo'}--; + s/^\.Oc/\. /; + redo; + } elsif (/^\..* Oc( |$)/) { + s/\\\".*//; + s/\"[^\"]*\"//g; + s/\".*//; + if (s/ Oc( |$)/ /) { + $Groff{'Oo'}--; + } + redo; + } elsif (/^\.(PRINTSTYLE|START)$Sp/) { + $Groff{'mom'}++; + } + if (/^\.so$Sp/) { + chop; + s/^.so *//; + s/\\\".*//; + s/ .*$//; + &process($_, $level + 1) unless /\\/ || $_ eq ""; + } + } + close(FILE); } -elsif ($P > 0 || $mm > 0) { - push(@command, "-mm"); + +sub help { + print < 0) { - push(@command, ($mdoc_old || $Oo > 0) ? "-mdoc-old" : "-mdoc"); + +sub version { + my ($exit_status) = @_; + print "Perl version of GNU $Prog of $Last_Update " . + "in groff version @VERSION@\n"; + exit $exit_status; } -push(@command, "--") if @ARGV && $ARGV[0] =~ /^-./; +{ + my @m = (); + my $is_man = 0; + my $is_mm = 0; + my $is_mom = 0; + + $Groff{'refer'} ||= $Groff{'refer_open'} && $Groff{'refer_close'}; -push(@command, @ARGV); + if ( $Groff{'pic'} || $Groff{'tbl'} || $Groff{'eqn'} || + $Groff{'grn'} || $Groff{'grap'} || $Groff{'refer'} ) { + my $s = "-"; + $s .= "s" if $Groff{'soelim'}; + $s .= "R" if $Groff{'refer'}; + # grap must be run before pic + $s .= "G" if $Groff{'grap'}; + $s .= "p" if $Groff{'pic'}; + $s .= "g" if $Groff{'grn'}; + $s .= "t" if $Groff{'tbl'}; + $s .= "e" if $Groff{'eqn'}; + push(@Command, $s); + } + + if ( $Groff{'me'} ) { + push(@m, '-me'); + push(@Command, '-me'); + } + if ( $Groff{'SH'} && $Groff{'TH'} ) { + push(@m, '-man'); + push(@Command, '-man'); + $is_man = 1; + } + if ( $Groff{'mom'} ) { + push(@m, '-mom'); + push(@Command, '-mom'); + $is_mom = 1; + } + if ( $Groff{'mm'} || ($Groff{'P'} && ! $is_man) ) { + push(@m, '-mm'); + push(@Command, '-mm'); + $is_mm = 1; + } + if ( $Groff{'NH'} || ($Groff{'TL'} && ! $is_mm) || + ($Groff{'ILP'} && ! $is_man) || + ($Groff{'PP'} && ! $is_mom && ! $is_man) ) { + # .PP occurs in -mom, -man and -ms, .IP and .LP occur in -man and -ms + push(@m, '-ms'); + push(@Command, '-ms'); + } + if ( $Groff{'mdoc'} ) { + my $s = ( $Groff{'mdoc_old'} || $Groff{'Oo'} ) ? '-mdoc-old' : '-mdoc'; + push(@m, $s); + push(@Command, $s); + } -# We could implement an option to execute the command here. + if ($Groff{'chem'}) { + my @chem = ('chem', @ARGV, '|', 'groff'); + unshift(@Command, @chem); + } else { + unshift @Command, 'groff'; + push(@Command, @ARGV); + } -foreach (@command) { - next unless /[\$\\\"\';&()|<> \t\n]/; - s/\'/\'\\\'\'/; + foreach (@Command) { + next unless /\s/; $_ = "'" . $_ . "'"; + } + + # We could implement an option to execute the command here. + +# foreach (@Command) { +# next unless /[\$\\\"\';&()|<> \t\n]/; +# s/\'/\'\\\'\'/; +# $_ = "'" . $_ . "'"; +# } + + my $n = scalar @m; + my $np = scalar @Mparams; + print STDERR "$Prog: more than 1 `-m' argument: @Mparams" if $np > 1; + if ($n == 0) { + unshift @Command, $Mparams[0] if $np == 1; + } elsif ($n == 1) { + if ($np == 1) { + print STDERR "$Prog: wrong `-m' argument: $Mparams[0]\n" + if $m[0] ne $Mparams[0]; + } + } else { + print STDERR "$Prog: error: there are several macro packages: @m\n"; + } + + print "@Command\n"; + + exit $n if $n > 1; + exit 0; } -print join(' ', @command), "\n"; +######################################################################## +### Emacs settings +# Local Variables: +# mode: CPerl +# End: diff --git a/contrib/groff/src/roff/grog/grog.sh b/contrib/groff/src/roff/grog/grog.sh index 1a937cb1b3..8f17078d79 100644 --- a/contrib/groff/src/roff/grog/grog.sh +++ b/contrib/groff/src/roff/grog/grog.sh @@ -2,43 +2,168 @@ # grog -- guess options for groff command # Like doctype in Kernighan & Pike, Unix Programming Environment, pp 306-8. +# Source file position: /src/roff/grog/grog.sh +# Installed position: /bin/grog + +# Copyright (C) 1993, 2006, 2009 Free Software Foundation, Inc. +# Written by James Clark, maintained by Werner Lemberg. +# Rewritten by and put under GPL Bernd Warken. + +# This file is part of `grog', which is part of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License (GPL) as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +######################################################################## +Last_Update='5 Jan 2009' +######################################################################## + soelim=@g@soelim opts= +mopt= +nr=0 sp="([ ]|$)" +double_minus=0 +was_minus=0 +filespec= +had_filespec=0 for arg do - case "$arg" in - --) - shift; break;; - -) - break;; - -C) - sp=; opts="$opts -C"; shift; break;; - -v | --version) - echo "GNU grog (groff) version @VERSION@" - exit 0;; - --help) - echo "usage: grog [ option ...] [files...]" - exit 0;; - -*) - opts="$opts $arg"; shift;; - *) - break;; - esac + if test _"${double_minus}"_ = _1_ + then + had_filespec=1 + if test -f "${arg}" && test -r "${arg}" + then + case "$arg" in + *" "*) + eval filespec="'${filespec} '"'\"'"'${arg}'"'\"' + ;; + *) + eval filespec="'${filespec} ${arg}'" + ;; + esac + else + echo "grog: ${arg} is not a readable file.">&2 + fi + continue + fi + case "$arg" in + --) + double_minus=1 + ;; + -) + # omit several - + if test _"${was_minus}"_ = _0_ + then + was_minus=1 + filespec="${filespec} -" + fi + ;; + -C) + sp=; opts="$opts -C"; + ;; + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo \ +"Shell version of GNU grog of $Last_Update in groff version @VERSION@"; + exit 0 + ;; + -h|--h|--he|--hel|--help) + cat <&2 + mopt= + fi + ;; + -*) + opts="$opts $arg" + ;; + *) + had_filespec=1 + if test -f "${arg}" && test -r "${arg}" + then + case "$arg" in + *" "*) + eval filespec="'${filespec} '"'\"'"'${arg}'"'\"' + ;; + *) + eval filespec="'${filespec} ${arg}'" + ;; + esac + else + echo "grog: ${arg} is not a readable file.">&2 + fi + ;; + esac done +if test _"${filespec}"_ = __ && test _"${had_filespec}"_ = _0_ +then + filespec='-' +fi +if test _"${filespec}"_ = __ +then + exit 1 +fi +if test "${double_minus}" = 1 +then + eval files="'-- ${filespec}'" +else + eval files="'${filespec}'" +fi +files=`echo $files|sed s/\"/\'/g` -egrep -h "^\.(\[|\])|((P|PS|[PLI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|.* Oo|Oc|.* Oc|TS|EQ|TH|SH|so|\[|R1|GS|G1|PH|SA)$sp)" $* \ -| sed -e '/^\.so/s/^.*$/.SO_START\ + +eval sed "'s/[ ]*$//'" '--' "${filespec}" \ +| sed 's/^[ ]*begin[ ][ ]*chem$/.cstart/' \ +| sed 's/^[.'"'"'][ ]*/./' \ +| @EGREP@ -h \ + "^\.(\[|\])|cstart|((P|PS|[PLI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|.* Oo|Oc|.* Oc|NH|TL|TS|TE|EQ|TH|SH|so|\[|R1|GS|G1|PH|SA)$sp)" \ +| sed '/^\.so/s/^.*$/.SO_START\ &\ .SO_END/' \ | $soelim \ -| egrep '^\.(P|PS|[PLI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|.* Oo|Oc|.* Oc|TS|EQ|TH|SH|\[|\]|R1|GS|G1|PH|SA|SO_START|SO_END)' \ +| @EGREP@ \ + '^\.(cstart|P|PS|[PLI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|.* Oo|Oc|.* Oc|NH|TL|TS|TE|EQ|TH|TL|NH|SH|\[|\]|R1|GS|G1|PH|SA|SO_START|SO_END)' \ | awk ' /^\.SO_START$/ { so = 1 } /^\.SO_END$/ { so = 0 } -/^\.TS/ { tbl++; if (so > 0) soelim++ } +/^\.cstart$/ { chem++ } +/^\.TS/ { tbl++; in_tbl = 1; if (so > 0) soelim++; } +/^\.TE/ { in_tbl = 0 } /^\.PS([ 0-9.<].*)?$/ { pic++; if (so > 0) soelim++ } /^\.EQ/ { eqn++; if (so > 0) soelim++ } /^\.R1/ { refer++; if (so > 0) soelim++ } @@ -46,8 +171,11 @@ egrep -h "^\.(\[|\])|((P|PS|[PLI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|.* Oo|Oc|.* O /^\.\]/ {refer_end++; if (so > 0) soelim++ } /^\.GS/ { grn++; if (so > 0) soelim++ } /^\.G1/ { grap++; pic++; if (so > 0) soelim++ } -/^\.TH/ { TH++ } -/^\.[PLI]P/ { PP++ } +/^\.TH/ { if (in_tbl != 1) TH++ } +/^\.PP/ { PP++ } +/^\.TL/ { TL++ } +/^\.NH/ { NH++ } +/^\.[IL]P/ { ILP++ } /^\.P$/ { P++ } /^\.SH/ { SH++ } /^\.(PH|SA)/ { mm++ } @@ -55,58 +183,99 @@ egrep -h "^\.(\[|\])|((P|PS|[PLI]P|[pnil]p|sh|Dd|Tp|Dp|De|Cx|Cl|Oo|.* Oo|Oc|.* O /^\.Dd/ { mdoc++ } /^\.(Tp|Dp|De|Cx|Cl)/ { mdoc_old++ } /^\.(O[oc]|.* O[oc]( |$))/ { - sub(/\\\".*/, "") - gsub(/\"[^\"]*\"/, "") - sub(/\".*/, "") - sub(/^\.Oo/, " Oo ") - sub(/^\.Oc/, " Oc ") - sub(/ Oo$/, " Oo ") - sub(/ Oc$/, " Oc ") - while (/ Oo /) { - sub(/ Oo /, " ") - Oo++ - } - while (/ Oc /) { - sub(/ Oc /, " ") - Oo-- - } + sub(/\\\".*/, "") + gsub(/\"[^\"]*\"/, "") + sub(/\".*/, "") + sub(/^\.Oo/, " Oo ") + sub(/^\.Oc/, " Oc ") + sub(/ Oo$/, " Oo ") + sub(/ Oc$/, " Oc ") + while (/ Oo /) { + sub(/ Oo /, " ") + Oo++ + } + while (/ Oc /) { + sub(/ Oc /, " ") + Oo-- + } } /^\.(PRINTSTYLE|START)/ { mom++ } END { - if (files ~ /^-/) - files = "-- " files - printf "groff" - refer = refer || (refer_start && refer_end) - if (pic > 0 || tbl > 0 || grn > 0 || grap > 0 || eqn > 0 || refer > 0) { - printf " -" - if (soelim > 0) printf "s" - if (refer > 0) printf "R" - if (grn > 0) printf "g" - if (grap > 0) printf "G" - if (pic > 0) printf "p" - if (tbl > 0) printf "t" - if (eqn > 0) printf "e" - } - if (me > 0) - printf " -me" - else if (SH > 0 && TH > 0) - printf " -man" - else if (mom > 0) - printf " -mom" - else if (PP > 0) - printf " -ms" - else if (P > 0 || mm > 0) - printf " -mm" - else if (mdoc > 0) { - if (mdoc_old > 0 || Oo > 0) - printf " -mdoc-old" - else - printf " -mdoc" - } - if (opts != "") - printf "%s", opts - if (files != "") - printf " %s", files - print "" -}' "opts=$opts" "files=$*" - + if (chem > 0) { + printf "chem %s | ", files + pic++ + files = "" + } + printf "groff" + refer = refer || (refer_start && refer_end) + if (pic > 0 || tbl > 0 || grn > 0 || grap > 0 || eqn > 0 || refer > 0) { + printf " -" + if (soelim > 0) printf "s" + if (refer > 0) printf "R" + if (grn > 0) printf "g" + if (grap > 0) printf "G" + if (pic > 0) printf "p" + if (tbl > 0) printf "t" + if (eqn > 0) printf "e" + } + mnr = 0 + m = "" + is_man = 0 + is_mm = 0 + is_mom = 0 + # me + if (me > 0) { + mnr++; m = "-me"; printf " -me" + } + # man + if (SH > 0 && TH > 0) { + mnr++; m = "-man"; printf " -man"; is_man = 1 + } + # mom + if (mom > 0) { + mnr++; m = "-mom"; printf " -mom"; is_mom = 1 + } + # mm + if ( mm > 0 || (P > 0 && is_man == 0) ) { + mnr++; m = "-mm"; printf " -mm"; is_mm = 1 + } + # ms + if ( NH > 0 || (TL > 0 && is_mm == 0) || (ILP > 0 && is_man == 0) || + (PP > 0 && is_mom == 0 && is_man == 0) ) { + # .TL also occurs in -mm, .IP and .LP also occur in -man + # .PP also occurs in -mom and -man + mnr++; m = "-ms"; printf " -ms" + } + # mdoc + if (mdoc > 0) { + mnr++ + if (mdoc_old > 0 || Oo > 0) { + m = "-mdoc-old"; printf " -mdoc-old" + } + else { + m = "-mdoc"; printf " -mdoc" + } + } + + if (mnr == 0) { + if (mopt != "") + printf "%s", mopt + } + + if (opts != "") + printf "%s", opts + if (files != "") + printf " %s", files + print "" + + if (mnr == 1) { + if (mopt != "" && m != mopt) + printf "grog: wrong option %s\n", mopt | "cat 1>&2" + } + if (mnr >= 2) { + err = "grog: error: there are several -m* arguments" + printf "%s\n", err | "cat 1>&2" + exit mnr + } +}' "opts=$opts" "mopt=$mopt" "files=$files" - diff --git a/contrib/groff/src/roff/nroff/nroff.man b/contrib/groff/src/roff/nroff/nroff.man index 0511b45b5c..54c6427875 100644 --- a/contrib/groff/src/roff/nroff/nroff.man +++ b/contrib/groff/src/roff/nroff/nroff.man @@ -1,5 +1,6 @@ .ig -Copyright (C) 1989-2001, 2002, 2003, 2005 Free Software Foundation, Inc. +Copyright (C) 1989-2001, 2002, 2003, 2005, 2007, 2009 + Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice @@ -23,18 +24,17 @@ the original English. @g@nroff \- emulate nroff command with groff . .SH SYNOPSIS -.nr a \n(.j -.ad l -.nr i \n(.i -.in +\w'\fB@g@nroff 'u -.ti \niu -.B @g@nroff +. +.\" Redefine OP because no spaces are allowed after an option's argument. .de OP -.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]" -.el .RB "[\ " "\\$1" "\ ]" +. ie \\n(.$-1 \ +. RI "[\fB\\$1\fP" "\\$2" "]" +. el \ +. RB "[" "\\$1" "]" .. -. -.OP \-CchipStUv + +.SY @g@nroff +.OP \-CchipStUvwW .OP \-d cs .OP \-M dir .OP \-m name @@ -42,9 +42,16 @@ the original English. .OP \-o list .OP \-r cn .OP \-T name -.RI "[\ " "file" "\ .\|.\|.\ ]" -.br -.ad \na +.RI [ file\~ .\|.\|.] +. +.SY @g@nroff +.B \-\-help +. +.SY @g@nroff +.B \-v +| +.B \-\-version +.YS . .SH DESCRIPTION The @@ -52,20 +59,23 @@ The script emulates the .B nroff command using groff. -Only +Only .BR ascii , .BR latin1 , .BR utf8 , and .B cp1047 -are valid arguments for the -.B -T -option, selecting the output encoding emitted by +are devices accepted by +.BR nroff +to select the output encoding emitted by .BR grotty , groff's TTY output device. -If an invalid or no -.BR \-T -option is given, +If neither the +.B GROFF_TYPESETTER +environment variable nor the +.B \-T +command line option (which overrides the environment variable) +specifies a (valid) device, .B @g@nroff checks the current locale to select a default output device. It first tries the @@ -99,8 +109,10 @@ The .BR \-m , .BR \-n , .BR \-o , +.BR \-r , +.BR \-w , and -.B \-r +.B \-W options have the effect described in .BR @g@troff (@MAN1EXT@). In addition, @@ -112,7 +124,7 @@ and .BR \-s (which are not implemented in .BR @g@troff ). -Options +Options .B \-p (pic), .B \-t @@ -121,21 +133,32 @@ Options (safer), and .B \-U (unsafe) are passed to -.BR groff . +.BR groff . .B \-v -shows the version number. +and +.B \-\-version +show the version number, +.B \-\-help +prints a help message. . .SH ENVIRONMENT .TP .SM +.B GROFF_TYPESETTER +The default device for +.BR groff . +If not set (which is the normal case), it defaults to `ps'. +. +.TP +.SM .B GROFF_BIN_PATH A colon separated list of directories in which to search for the .B groff executable before searching in PATH. If unset, `@BINDIR@' is used. +. .SH NOTES This shell script is basically intended for use with -.BR man (1), -so warnings are suppressed. +.BR man (1). nroff-style character definitions (in the file tty-char.tmac) are also loaded to emulate unrepresentable glyphs. . diff --git a/contrib/groff/src/roff/nroff/nroff.sh b/contrib/groff/src/roff/nroff/nroff.sh index 3120215534..d4bd8a0a6e 100644 --- a/contrib/groff/src/roff/nroff/nroff.sh +++ b/contrib/groff/src/roff/nroff/nroff.sh @@ -1,43 +1,70 @@ #! /bin/sh # Emulate nroff with groff. +# +# Copyright (C) 1992, 1993, 1994, 1999, 2000, 2001, 2002, 2003, +# 2004, 2005, 2007, 2009 +# Free Software Foundation, Inc. +# +# Written by James Clark, maintained by Werner Lemberg. + +# This file is of `groff'. + +# `groff' is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License (GPL) as published +# by the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. + +# `groff' is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . prog="$0" + # Default device. -# First try the "locale charmap" command, because it's most reliable. + +# Check the GROFF_TYPESETTER environment variable. +Tenv=$GROFF_TYPESETTER + +# Try the `locale charmap' command first because it is most reliable. # On systems where it doesn't exist, look at the environment variables. case "`exec 2>/dev/null ; locale charmap`" in UTF-8) - T=-Tutf8 ;; + Tloc=utf8 ;; ISO-8859-1 | ISO-8859-15) - T=-Tlatin1 ;; + Tloc=latin1 ;; IBM-1047) - T=-Tcp1047 ;; + Tloc=cp1047 ;; *) case "${LC_ALL-${LC_CTYPE-${LANG}}}" in *.UTF-8) - T=-Tutf8 ;; + Tloc=utf8 ;; iso_8859_1 | *.ISO-8859-1 | *.ISO8859-1 | \ iso_8859_15 | *.ISO-8859-15 | *.ISO8859-15) - T=-Tlatin1 ;; + Tloc=latin1 ;; *.IBM-1047) - T=-Tcp1047 ;; + Tloc=cp1047 ;; *) case "$LESSCHARSET" in utf-8) - T=-Tutf8 ;; + Tloc=utf8 ;; latin1) - T=-Tlatin1 ;; + Tloc=latin1 ;; cp1047) - T=-Tcp1047 ;; + Tloc=cp1047 ;; *) - T=-Tascii ;; - esac ;; - esac ;; + Tloc=ascii ;; + esac ;; + esac ;; esac -opts= # `for i; do' doesn't work with some versions of sh +Topt= +opts= for i do case $1 in @@ -48,16 +75,13 @@ for i -[eq] | -s*) # ignore these options ;; - -[dMmrnoT]) + -[dMmrnoTwW]) echo "$prog: option $1 requires an argument" >&2 exit 1 ;; - -[iptSUC] | -[dMmrno]*) + -[iptSUC] | -[dMmrnowW]*) opts="$opts $1" ;; - -Tascii | -Tlatin1 | -Tutf8 | -Tcp1047) - T=$1 ;; -T*) - # ignore other devices - ;; + Topt=$1 ;; -u*) # Solaris 2.2 through at least Solaris 9 `man' invokes # `nroff -u0 ... | col -x'. Ignore the -u0, @@ -69,7 +93,7 @@ for i exit 0 ;; --help) echo "usage: nroff [-CchipStUv] [-dCS] [-MDIR] [-mNAME] [-nNUM] [-oLIST]" - echo " [-rCN] [-Tname] [FILE...]" + echo " [-rCN] [-Tname] [-WNAME] [-wNAME] [FILE...]" exit 0 ;; --) shift @@ -85,14 +109,29 @@ for i shift done +if test "x$Topt" != x ; then + T=$Topt +else + if test "x$Tenv" != x ; then + T=-T$Tenv + fi +fi + +case $T in + -Tascii | -Tlatin1 | -Tutf8 | -Tcp1047) + ;; + *) + # ignore other devices and use locale fallback + T=-T$Tloc ;; +esac + # Set up the `GROFF_BIN_PATH' variable # to be exported in the current `GROFF_RUNTIME' environment. @GROFF_BIN_PATH_SETUP@ export GROFF_BIN_PATH -# This shell script is intended for use with man, so warnings are -# probably not wanted. Also load nroff-style character definitions. +# Load nroff-style character definitions too. PATH="$GROFF_RUNTIME$PATH" groff -mtty-char $T $opts ${1+"$@"} diff --git a/contrib/groff/src/roff/troff/charinfo.h b/contrib/groff/src/roff/troff/charinfo.h index 42190fd814..2c2c26850c 100644 --- a/contrib/groff/src/roff/troff/charinfo.h +++ b/contrib/groff/src/roff/troff/charinfo.h @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002 +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2006, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,25 +7,22 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ class macro; -class charinfo { +class charinfo : glyph { static int next_index; charinfo *translation; - int index; - int number; macro *mac; unsigned char special_translation; unsigned char hyphenation_code; @@ -39,14 +36,15 @@ class charinfo { // active for .asciify (set by .trin) char_mode mode; public: - enum { + enum { // Values for the flags bitmask. See groff + // manual, description of the `.cflags' request. ENDS_SENTENCE = 1, BREAK_BEFORE = 2, BREAK_AFTER = 4, OVERLAPS_HORIZONTALLY = 8, OVERLAPS_VERTICALLY = 16, TRANSPARENT = 32, - NUMBERED = 64 + IGNORE_HCODES = 64 }; enum { TRANSLATE_NONE, @@ -56,14 +54,15 @@ public: TRANSLATE_HYPHEN_INDICATOR }; symbol nm; - charinfo(symbol s); - int get_index(); + charinfo(symbol); + glyph *as_glyph(); int ends_sentence(); int overlaps_vertically(); int overlaps_horizontally(); int can_break_before(); int can_break_after(); int transparent(); + int ignore_hcodes(); unsigned char get_hyphenation_code(); unsigned char get_ascii_code(); unsigned char get_asciify_code(); @@ -124,9 +123,14 @@ inline int charinfo::transparent() return flags & TRANSPARENT; } +inline int charinfo::ignore_hcodes() +{ + return flags & IGNORE_HCODES; +} + inline int charinfo::numbered() { - return flags & NUMBERED; + return number >= 0; } inline int charinfo::is_normal() @@ -171,9 +175,9 @@ inline void charinfo::set_flags(unsigned char c) flags = c; } -inline int charinfo::get_index() +inline glyph *charinfo::as_glyph() { - return index; + return this; } inline void charinfo::set_translation_input() diff --git a/contrib/groff/src/roff/troff/column.cpp b/contrib/groff/src/roff/troff/column.cpp index 060b088d23..051a323101 100644 --- a/contrib/groff/src/roff/troff/column.cpp +++ b/contrib/groff/src/roff/troff/column.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #ifdef COLUMN diff --git a/contrib/groff/src/roff/troff/dictionary.cpp b/contrib/groff/src/roff/troff/dictionary.cpp index 37084b6678..0965c4e1bb 100644 --- a/contrib/groff/src/roff/troff/dictionary.cpp +++ b/contrib/groff/src/roff/troff/dictionary.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2004, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "troff.h" diff --git a/contrib/groff/src/roff/troff/dictionary.h b/contrib/groff/src/roff/troff/dictionary.h index 2baab0ab93..0607a3fd0b 100644 --- a/contrib/groff/src/roff/troff/dictionary.h +++ b/contrib/groff/src/roff/troff/dictionary.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ diff --git a/contrib/groff/src/roff/troff/div.cpp b/contrib/groff/src/roff/troff/div.cpp index 4cacd8da98..df7c979ac9 100644 --- a/contrib/groff/src/roff/troff/div.cpp +++ b/contrib/groff/src/roff/troff/div.cpp @@ -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, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ // diversions @@ -348,14 +347,16 @@ trap *top_level_diversion::find_next_trap(vunits *next_trap_pos) if (pt->position > vertical_position && pt->position < page_length && (next_trap == 0 || pt->position < *next_trap_pos)) { - next_trap = pt; - *next_trap_pos = pt->position; - } + next_trap = pt; + *next_trap_pos = pt->position; + } } else { vunits pos = pt->position; pos += page_length; - if (pos > 0 && pos > vertical_position && (next_trap == 0 || pos < *next_trap_pos)) { + if (pos > 0 + && pos > vertical_position + && (next_trap == 0 || pos < *next_trap_pos)) { next_trap = pt; *next_trap_pos = pos; } diff --git a/contrib/groff/src/roff/troff/div.h b/contrib/groff/src/roff/troff/div.h index c9ff9b4030..ce12e19f36 100644 --- a/contrib/groff/src/roff/troff/div.h +++ b/contrib/groff/src/roff/troff/div.h @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2004, 2005 +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2004, 2005, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ void do_divert(int append, int boxing); void end_diversions(); diff --git a/contrib/groff/src/roff/troff/env.cpp b/contrib/groff/src/roff/troff/env.cpp index 9de9a46aa5..56bfe21d4f 100644 --- a/contrib/groff/src/roff/troff/env.cpp +++ b/contrib/groff/src/roff/troff/env.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005, + 2006, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "troff.h" #include "dictionary.h" @@ -30,6 +30,7 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "token.h" #include "div.h" #include "reg.h" +#include "font.h" #include "charinfo.h" #include "macropath.h" #include "input.h" @@ -835,7 +836,8 @@ void environment::copy(const environment *e) current_tab = TAB_NONE; current_field = 0; margin_character_flags = e->margin_character_flags; - margin_character_node = e->margin_character_node; + if (e->margin_character_node) + margin_character_node = e->margin_character_node->copy(); margin_character_distance = e->margin_character_distance; numbering_nodes = 0; number_text_separation = e->number_text_separation; @@ -1555,8 +1557,8 @@ void margin_character() if (nd) { delete curenv->margin_character_node; curenv->margin_character_node = nd; - curenv->margin_character_flags = (MARGIN_CHARACTER_ON - |MARGIN_CHARACTER_NEXT); + curenv->margin_character_flags = MARGIN_CHARACTER_ON + | MARGIN_CHARACTER_NEXT; hunits d; if (has_arg() && get_hunits(&d, 'm')) curenv->margin_character_distance = d; @@ -2333,8 +2335,10 @@ void environment::do_break(int do_spread) wrap_up_tab(); if (line) { // this is so that hyphenation works - line = new space_node(H0, get_fill_color(), line); - space_total++; + if (line->nspaces() == 0) { + line = new space_node(H0, get_fill_color(), line); + space_total++; + } possibly_break_line(0, do_spread); } while (line != 0 && line->discardable()) { @@ -3129,6 +3133,11 @@ void horizontal_place_reg::set_value(units n) curenv->set_input_line_position(hunits(n)); } +int environment::get_zoom() +{ + return env_get_zoom(this); +} + const char *environment::get_font_family_string() { return family->nm.contents(); @@ -3221,6 +3230,156 @@ const char *environment::get_requested_point_size_string() return sptoa(curenv->get_requested_point_size()); } +void environment::print_env() +{ + // at the time of calling .pev, those values are always zero or + // meaningless: + // + // char_height, char_slant, + // interrupted + // current_tab, tab_width, tab_distance + // current_field, field_distance, pre_field_width, field_spaces, + // tab_field_spaces, tab_precedes_field + // composite + // + errprint(" previous line length: %1u\n", prev_line_length.to_units()); + errprint(" line length: %1u\n", line_length.to_units()); + errprint(" previous title length: %1u\n", prev_title_length.to_units()); + errprint(" title length: %1u\n", title_length.to_units()); + errprint(" previous size: %1p (%2s)\n", + prev_size.to_points(), prev_size.to_scaled_points()); + errprint(" size: %1p (%2s)\n", + size.to_points(), size.to_scaled_points()); + errprint(" previous requested size: %1s\n", prev_requested_size); + errprint(" requested size: %1s\n", requested_size); + errprint(" previous font number: %1\n", prev_fontno); + errprint(" font number: %1\n", fontno); + errprint(" previous family: `%1'\n", prev_family->nm.contents()); + errprint(" family: `%1'\n", family->nm.contents()); + errprint(" space size: %1/36 em\n", space_size); + errprint(" sentence space size: %1/36 em\n", sentence_space_size); + errprint(" previous line interrupted: %1\n", + prev_line_interrupted ? "yes" : "no"); + errprint(" fill mode: %1\n", fill ? "on" : "off"); + errprint(" adjust mode: %1\n", + adjust_mode == ADJUST_LEFT + ? "left" + : adjust_mode == ADJUST_BOTH + ? "both" + : adjust_mode == ADJUST_CENTER + ? "center" + : "right"); + if (center_lines) + errprint(" lines to center: %1\n", center_lines); + if (right_justify_lines) + errprint(" lines to right justify: %1\n", right_justify_lines); + errprint(" previous vertical spacing: %1u\n", + prev_vertical_spacing.to_units()); + errprint(" vertical spacing: %1u\n", vertical_spacing.to_units()); + errprint(" previous post-vertical spacing: %1u\n", + prev_post_vertical_spacing.to_units()); + errprint(" post-vertical spacing: %1u\n", + post_vertical_spacing.to_units()); + errprint(" previous line spacing: %1\n", prev_line_spacing); + errprint(" line spacing: %1\n", line_spacing); + errprint(" previous indentation: %1u\n", prev_indent.to_units()); + errprint(" indentation: %1u\n", indent.to_units()); + errprint(" temporary indentation: %1u\n", temporary_indent.to_units()); + errprint(" have temporary indentation: %1\n", + have_temporary_indent ? "yes" : "no"); + errprint(" currently used indentation: %1u\n", saved_indent.to_units()); + errprint(" target text length: %1u\n", target_text_length.to_units()); + if (underline_lines) { + errprint(" lines to underline: %1\n", underline_lines); + errprint(" font number before underlining: %1\n", pre_underline_fontno); + errprint(" underline spaces: %1\n", underline_spaces ? "yes" : "no"); + } + if (input_trap.contents()) { + errprint(" input trap macro: `%1'\n", input_trap.contents()); + errprint(" input trap line counter: %1\n", input_trap_count); + errprint(" continued input trap: %1\n", + continued_input_trap ? "yes" : "no"); + } + errprint(" previous text length: %1u\n", prev_text_length.to_units()); + errprint(" total width: %1u\n", width_total.to_units()); + errprint(" total number of spaces: %1\n", space_total); + errprint(" input line start: %1u\n", input_line_start.to_units()); + errprint(" line tabs: %1\n", line_tabs ? "yes" : "no"); + errprint(" discarding: %1\n", discarding ? "yes" : "no"); + errprint(" spread flag set: %1\n", spread_flag ? "yes" : "no"); // \p + if (margin_character_node) { + errprint(" margin character flags: %1\n", + margin_character_flags == MARGIN_CHARACTER_ON + ? "on" + : margin_character_flags == MARGIN_CHARACTER_NEXT + ? "next" + : margin_character_flags == MARGIN_CHARACTER_ON + | MARGIN_CHARACTER_NEXT + ? "on, next" + : "none"); + errprint(" margin character distance: %1u\n", + margin_character_distance.to_units()); + } + if (numbering_nodes) { + errprint(" line number digit width: %1u\n", + line_number_digit_width.to_units()); + errprint(" separation between number and text: %1 digit spaces\n", + number_text_separation); + errprint(" line number indentation: %1 digit spaces\n", + line_number_indent); + errprint(" print line numbers every %1line%1\n", + line_number_multiple > 1 ? i_to_a(line_number_multiple) : "", + line_number_multiple > 1 ? "s" : ""); + errprint(" lines not to enumerate: %1\n", no_number_count); + } + string hf = hyphenation_flags ? "on" : "off"; + if (hyphenation_flags & HYPHEN_LAST_LINE) + hf += ", not last line"; + if (hyphenation_flags & HYPHEN_LAST_CHARS) + hf += ", not last two chars"; + if (hyphenation_flags & HYPHEN_FIRST_CHARS) + hf += ", not first two chars"; + hf += '\0'; + errprint(" hyphenation_flags: %1\n", hf.contents()); + errprint(" number of consecutive hyphenated lines: %1\n", + hyphen_line_count); + errprint(" maximum number of consecutive hyphenated lines: %1\n", + hyphen_line_max); + errprint(" hyphenation space: %1u\n", hyphenation_space.to_units()); + errprint(" hyphenation margin: %1u\n", hyphenation_margin.to_units()); +#ifdef WIDOW_CONTROL + errprint(" widow control: %1\n", widow_control ? "yes" : "no"); +#endif /* WIDOW_CONTROL */ +} + +void print_env() +{ + errprint("Current Environment:\n"); + curenv->print_env(); + for (int i = 0; i < NENVIRONMENTS; i++) { + if (env_table[i]) { + errprint("Environment %1:\n", i); + if (env_table[i] != curenv) + env_table[i]->print_env(); + else + errprint(" current\n"); + } + } + dictionary_iterator iter(env_dictionary); + symbol s; + environment *e; + while (iter.get(&s, (void **)&e)) { + assert(!s.is_null()); + errprint("Environment %1:\n", s.contents()); + if (e != curenv) + e->print_env(); + else + errprint(" current\n"); + } + fflush(stderr); + skip_line(); +} + #define init_int_env_reg(name, func) \ number_reg_dictionary.define(name, new int_env_reg(&environment::func)) @@ -3269,6 +3428,7 @@ void init_env_requests() init_request("nh", no_hyphenate); init_request("nm", number_lines); init_request("nn", no_number); + init_request("pev", print_env); init_request("ps", point_size); init_request("pvs", post_vertical_spacing); init_request("rj", right_justify); @@ -3325,6 +3485,7 @@ void init_env_requests() init_int_env_reg(".u", get_fill); init_vunits_env_reg(".v", get_vertical_spacing); init_hunits_env_reg(".w", get_prev_char_width); + init_int_env_reg(".zoom", get_zoom); number_reg_dictionary.define("ct", new variable_reg(&ct_reg_contents)); number_reg_dictionary.define("hp", new horizontal_place_reg); number_reg_dictionary.define("ln", new variable_reg(&next_line_number)); @@ -3807,7 +3968,7 @@ void hyphenate(hyphen_list *h, unsigned flags) while (h && h->hyphenation_code == 0) h = h->next; int len = 0; - char hbuf[WORD_MAX+2]; + char hbuf[WORD_MAX + 2]; char *buf = hbuf + 1; hyphen_list *tem; for (tem = h; tem && len < WORD_MAX; tem = tem->next) { @@ -3831,14 +3992,14 @@ void hyphenate(hyphen_list *h, unsigned flags) } } else { - hbuf[0] = hbuf[len+1] = '.'; - int num[WORD_MAX+3]; - current_language->patterns.hyphenate(hbuf, len+2, num); + hbuf[0] = hbuf[len + 1] = '.'; + int num[WORD_MAX + 3]; + current_language->patterns.hyphenate(hbuf, len + 2, num); int i; num[2] = 0; - if (flags & 8) + if (flags & HYPHEN_FIRST_CHARS) num[3] = 0; - if (flags & 4) + if (flags & HYPHEN_LAST_CHARS) --len; for (i = 2, tem = h; i < len && tem; tem = tem->next, i++) if (num[i] & 1) diff --git a/contrib/groff/src/roff/troff/env.h b/contrib/groff/src/roff/troff/env.h index 2ee7bdcf3e..6161aabfa9 100644 --- a/contrib/groff/src/roff/troff/env.h +++ b/contrib/groff/src/roff/troff/env.h @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2004, 2005 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2004, 2005, + 2006, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ class statem; @@ -72,6 +72,7 @@ hunits env_space_width(environment *); hunits env_sentence_space_width(environment *); hunits env_narrow_space_width(environment *); hunits env_half_narrow_space_width(environment *); +int env_get_zoom(environment *); struct tab; @@ -263,6 +264,7 @@ public: environment(const environment *); // for temporary environment ~environment(); statem *construct_state(int only_eol); + void print_env(); void copy(const environment *); int is_dummy() { return dummy; } int is_empty(); @@ -280,6 +282,7 @@ public: int get_char_slant() { return char_slant; } hunits get_digit_width(); int get_font() { return fontno; }; // .f + int get_zoom(); // .zoom font_family *get_family() { return family; } int get_bold(); // .b int get_adjust_mode(); // .j @@ -398,7 +401,7 @@ public: friend void do_divert(int append, int boxing); }; - + extern environment *curenv; extern void pop_env(); extern void push_env(int); diff --git a/contrib/groff/src/roff/troff/hvunits.h b/contrib/groff/src/roff/troff/hvunits.h index 99e6692eb2..58041717a9 100644 --- a/contrib/groff/src/roff/troff/hvunits.h +++ b/contrib/groff/src/roff/troff/hvunits.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ class vunits { diff --git a/contrib/groff/src/roff/troff/input.cpp b/contrib/groff/src/roff/troff/input.cpp index 15077e947f..8038f70fce 100644 --- a/contrib/groff/src/roff/troff/input.cpp +++ b/contrib/groff/src/roff/troff/input.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005, + 2006, 2007, 2008, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #define DEBUGGING @@ -32,11 +32,11 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ #include "token.h" #include "div.h" #include "reg.h" +#include "font.h" #include "charinfo.h" #include "macropath.h" #include "input.h" #include "defs.h" -#include "font.h" #include "unicode.h" // Needed for getpid() and isatty() @@ -108,11 +108,11 @@ int is_html = 0; int begin_level = 0; // number of nested \O escapes int have_input = 0; // whether \f, \F, \D'F...', \H, \m, \M, - // \R, \s, or \S has been processed in - // token::next() + // \O[345], \R, \s, or \S has been processed + // in token::next() int old_have_input = 0; // value of have_input right before \n int tcommand_flag = 0; -int safer_flag = 1; // safer by default +int unsafe_flag = 0; // safer by default int have_string_arg = 0; // whether we have \*[foo bar...] @@ -127,18 +127,18 @@ search_path *mac_path = &safer_macro_path; // Defaults to the current directory. search_path include_search_path(0, 0, 0, 1); -static int get_copy(node**, int = 0); +static int get_copy(node**, int = 0, int = 0); static void copy_mode_error(const char *, const errarg & = empty_errarg, const errarg & = empty_errarg, const errarg & = empty_errarg); enum read_mode { ALLOW_EMPTY, WITH_ARGS, NO_ARGS }; -static symbol read_escape_name(read_mode mode = NO_ARGS); -static symbol read_long_escape_name(read_mode mode = NO_ARGS); +static symbol read_escape_name(read_mode = NO_ARGS); +static symbol read_long_escape_name(read_mode = NO_ARGS); static void interpolate_string(symbol); static void interpolate_string_with_args(symbol); -static void interpolate_macro(symbol); +static void interpolate_macro(symbol, int = 0); static void interpolate_number_format(symbol); static void interpolate_environment_variable(symbol); @@ -197,6 +197,8 @@ void restore_escape_char() skip_line(); } +struct arg_list; + class input_iterator { public: input_iterator(); @@ -216,6 +218,10 @@ private: virtual int has_args() { return 0; } virtual int nargs() { return 0; } virtual input_iterator *get_arg(int) { return 0; } + virtual arg_list *get_arg_list() { return 0; } + virtual symbol get_macro_name() { return NULL_SYMBOL; } + virtual int space_follows_arg(int) { return 0; } + virtual int get_break_flag() { return 0; } virtual int get_location(int, const char **, int *) { return 0; } virtual void backtrace() {} virtual int set_location(const char *, int) { return 0; } @@ -292,7 +298,7 @@ file_iterator::file_iterator(FILE *f, const char *fn, int po) if ((font::use_charnames_in_special) && (fn != 0)) { if (!the_output) init_output(); - the_output->put_filename(fn); + the_output->put_filename(fn, po); } } @@ -401,7 +407,7 @@ int file_iterator::set_location(const char *f, int ln) filename = f; if (!the_output) init_output(); - the_output->put_filename(f); + the_output->put_filename(f, 0); } lineno = ln; return 1; @@ -415,6 +421,10 @@ public: static int peek(); static void push(input_iterator *); static input_iterator *get_arg(int); + static arg_list *get_arg_list(); + static symbol get_macro_name(); + static int space_follows_arg(int); + static int get_break_flag(); static int nargs(); static int get_location(int, const char **, int *); static int set_location(const char *, int); @@ -496,10 +506,10 @@ int input_stack::finish_get(node **np) input_iterator *tem = top; check_end_diversion(tem); #if defined(DEBUGGING) - if (debug_state) - if (tem->is_diversion) - fprintf(stderr, - "in diversion level = %d\n", input_stack::get_div_level()); + if (debug_state) + if (tem->is_diversion) + fprintf(stderr, + "in diversion level = %d\n", input_stack::get_div_level()); #endif top = top->next; level--; @@ -621,6 +631,38 @@ input_iterator *input_stack::get_arg(int i) return 0; } +arg_list *input_stack::get_arg_list() +{ + input_iterator *p; + for (p = top; p != 0; p = p->next) + if (p->has_args()) + return p->get_arg_list(); + return 0; +} + +symbol input_stack::get_macro_name() +{ + input_iterator *p; + for (p = top; p != 0; p = p->next) + if (p->has_args()) + return p->get_macro_name(); + return NULL_SYMBOL; +} + +int input_stack::space_follows_arg(int i) +{ + input_iterator *p; + for (p = top; p != 0; p = p->next) + if (p->has_args()) + return p->space_follows_arg(i); + return 0; +} + +int input_stack::get_break_flag() +{ + return top->get_break_flag(); +} + void input_stack::shift(int n) { for (input_iterator *p = top; p; p = p->next) @@ -780,7 +822,7 @@ void shift() static char get_char_for_escape_name(int allow_space = 0) { - int c = get_copy(0); + int c = get_copy(0, 0, 1); switch (c) { case EOF: copy_mode_error("end of input in escape name"); @@ -864,7 +906,7 @@ static symbol read_long_escape_name(read_mode mode) if (buf == abuf) { if (i == 0) { if (mode != ALLOW_EMPTY) - copy_mode_error("empty escape name"); + copy_mode_error("empty escape name"); return EMPTY_SYMBOL; } return symbol(abuf); @@ -921,7 +963,7 @@ static symbol read_increment_and_escape_name(int *incp) return symbol(buf); } -static int get_copy(node **nd, int defining) +static int get_copy(node **nd, int defining, int handle_escape_E) { for (;;) { int c = input_stack::get(nd); @@ -947,6 +989,10 @@ static int get_copy(node **nd, int defining) input_stack::decrease_level(); continue; } + if (c == DOUBLE_QUOTE) + continue; + if (c == ESCAPE_E && handle_escape_E) + c = escape_char; if (c == ESCAPE_NEWLINE) { if (defining) return c; @@ -956,6 +1002,7 @@ static int get_copy(node **nd, int defining) } if (c != escape_char || escape_char <= 0) return c; + again: c = input_stack::peek(); switch(c) { case 0: @@ -1001,6 +1048,8 @@ static int get_copy(node **nd, int defining) return ESCAPE_e; case 'E': (void)input_stack::get(0); + if (handle_escape_E) + goto again; return ESCAPE_E; case 'n': { @@ -1699,6 +1748,8 @@ void token::next() case END_QUOTE: input_stack::decrease_level(); continue; + case DOUBLE_QUOTE: + continue; case EOF: type = TOKEN_EOF; return; @@ -2015,13 +2066,11 @@ void token::next() case 'H': // don't take height increments relative to previous height if // in compatibility mode - if (!compatible_flag && curenv->get_char_height()) - { + if (!compatible_flag && curenv->get_char_height()) { if (get_delim_number(&x, 'z', curenv->get_char_height())) curenv->set_char_height(x); } - else - { + else { if (get_delim_number(&x, 'z', curenv->get_requested_point_size())) curenv->set_char_height(x); } @@ -2071,6 +2120,10 @@ void token::next() case 'N': if (!get_delim_number(&val, 0)) break; + if (val < 0) { + warning(WARN_CHAR, "invalid numbered character %1", val); + break; + } type = TOKEN_NUMBERED_CHAR; return; case 'o': @@ -2571,8 +2624,12 @@ void do_request() if (nm.is_null()) skip_line(); else - interpolate_macro(nm); + interpolate_macro(nm, 1); compatible_flag = old_compatible_flag; + request_or_macro *p = lookup_request(nm); + macro *m = p->to_macro(); + if (m) + tok.next(); } inline int possibly_handle_first_page_transition() @@ -2976,7 +3033,7 @@ request::request(REQUEST_FUNCP pp) : p(pp) { } -void request::invoke(symbol) +void request::invoke(symbol, int) { (*p)(); } @@ -3151,7 +3208,7 @@ macro::~macro() } macro::macro() -: is_a_diversion(0) +: is_a_diversion(0), is_a_string(1) { if (!input_stack::get_location(1, &filename, &lineno)) { filename = 0; @@ -3164,14 +3221,15 @@ macro::macro() macro::macro(const macro &m) : filename(m.filename), lineno(m.lineno), len(m.len), - empty_macro(m.empty_macro), is_a_diversion(m.is_a_diversion), p(m.p) + empty_macro(m.empty_macro), is_a_diversion(m.is_a_diversion), + is_a_string(m.is_a_string), p(m.p) { if (p != 0) p->count++; } macro::macro(int is_div) - : is_a_diversion(is_div) +: is_a_diversion(is_div) { if (!input_stack::get_location(1, &filename, &lineno)) { filename = 0; @@ -3179,6 +3237,7 @@ macro::macro(int is_div) } len = 0; empty_macro = 1; + is_a_string = 1; p = 0; } @@ -3187,6 +3246,16 @@ int macro::is_diversion() return is_a_diversion; } +int macro::is_string() +{ + return is_a_string; +} + +void macro::clear_string_flag() +{ + is_a_string = 0; +} + macro ¯o::operator=(const macro &m) { // don't assign object @@ -3200,6 +3269,7 @@ macro ¯o::operator=(const macro &m) len = m.len; empty_macro = m.empty_macro; is_a_diversion = m.is_a_diversion; + is_a_string = m.is_a_string; return *this; } @@ -3339,15 +3409,17 @@ class string_iterator : public input_iterator { int count; // of characters remaining node *nd; int saved_compatible_flag; + int with_break; // inherited from the caller protected: symbol nm; string_iterator(); public: - string_iterator(const macro &m, const char *p = 0, symbol s = NULL_SYMBOL); + string_iterator(const macro &, const char * = 0, symbol = NULL_SYMBOL); int fill(node **); int peek(); int get_location(int, const char **, int *); void backtrace(); + int get_break_flag() { return with_break; } void save_compatible_flag(int f) { saved_compatible_flag = f; } int get_compatible_flag() { return saved_compatible_flag; } int is_diversion(); @@ -3368,6 +3440,7 @@ string_iterator::string_iterator(const macro &m, const char *p, symbol s) nd = 0; ptr = eptr = 0; } + with_break = input_stack::get_break_flag(); } string_iterator::string_iterator() @@ -3379,6 +3452,7 @@ string_iterator::string_iterator() how_invoked = 0; lineno = 1; count = 0; + with_break = input_stack::get_break_flag(); } int string_iterator::is_diversion() @@ -3567,15 +3641,31 @@ input_iterator *make_temp_iterator(const char *s) struct arg_list { macro mac; + int space_follows; arg_list *next; - arg_list(const macro &); + arg_list(const macro &, int); + arg_list(const arg_list *); ~arg_list(); }; -arg_list::arg_list(const macro &m) : mac(m), next(0) +arg_list::arg_list(const macro &m, int s) : mac(m), space_follows(s), next(0) { } +arg_list::arg_list(const arg_list *al) +: next(0) +{ + mac = al->mac; + space_follows = al->space_follows; + arg_list **a = &next; + arg_list *p = al->next; + while (p) { + *a = new arg_list(p->mac, p->space_follows); + p = p->next; + a = &(*a)->next; + } +} + arg_list::~arg_list() { } @@ -3583,15 +3673,20 @@ arg_list::~arg_list() class macro_iterator : public string_iterator { arg_list *args; int argc; + int with_break; // whether called as .foo or 'foo public: - macro_iterator(symbol, macro &, const char *how_invoked = "macro"); + macro_iterator(symbol, macro &, const char * = "macro", int = 0); macro_iterator(); ~macro_iterator(); int has_args() { return 1; } - input_iterator *get_arg(int i); + input_iterator *get_arg(int); + arg_list *get_arg_list(); + symbol get_macro_name(); + int space_follows_arg(int); + int get_break_flag() { return with_break; } int nargs() { return argc; } - void add_arg(const macro &m); - void shift(int n); + void add_arg(const macro &, int); + void shift(int); int is_macro() { return 1; } int is_diversion(); }; @@ -3612,12 +3707,36 @@ input_iterator *macro_iterator::get_arg(int i) return 0; } -void macro_iterator::add_arg(const macro &m) +arg_list *macro_iterator::get_arg_list() +{ + return args; +} + +symbol macro_iterator::get_macro_name() +{ + return nm; +} + +int macro_iterator::space_follows_arg(int i) +{ + if (i > 0 && i <= argc) { + arg_list *p = args; + for (int j = 1; j < i; j++) { + assert(p != 0); + p = p->next; + } + return p->space_follows; + } + else + return 0; +} + +void macro_iterator::add_arg(const macro &m, int s) { arg_list **p; for (p = &args; *p; p = &((*p)->next)) ; - *p = new arg_list(m); + *p = new arg_list(m, s); ++argc; } @@ -3668,7 +3787,7 @@ int operator==(const macro &m1, const macro &m2) return 1; } -static void interpolate_macro(symbol nm) +static void interpolate_macro(symbol nm, int no_next) { request_or_macro *p = (request_or_macro *)request_dictionary.lookup(nm); if (p == 0) { @@ -3686,7 +3805,7 @@ static void interpolate_macro(symbol nm) if (!m || !m->empty()) warned = warning(WARN_SPACE, "macro `%1' not defined " - "(probably missing space after `%2')", + "(possibly missing space after `%2')", nm.contents(), buf); } } @@ -3697,7 +3816,7 @@ static void interpolate_macro(symbol nm) } } if (p) - p->invoke(nm); + p->invoke(nm, no_next); else { skip_line(); return; @@ -3717,15 +3836,18 @@ static void decode_args(macro_iterator *mi) macro arg; int quote_input_level = 0; int done_tab_warning = 0; + arg.append(compatible_flag ? PUSH_COMP_MODE : PUSH_GROFF_MODE); + // we store discarded double quotes for \$^ if (c == '"') { + arg.append(DOUBLE_QUOTE); quote_input_level = input_stack::get_level(); c = get_copy(&n); } - arg.append(compatible_flag ? PUSH_COMP_MODE : PUSH_GROFF_MODE); while (c != EOF && c != '\n' && !(c == ' ' && quote_input_level == 0)) { if (quote_input_level > 0 && c == '"' && (compatible_flag || input_stack::get_level() == quote_input_level)) { + arg.append(DOUBLE_QUOTE); c = get_copy(&n); if (c == '"') { arg.append(c); @@ -3748,7 +3870,7 @@ static void decode_args(macro_iterator *mi) } } arg.append(POP_GROFFCOMP_MODE); - mi->add_arg(arg); + mi->add_arg(arg, (c == ' ')); } } } @@ -3799,16 +3921,19 @@ static void decode_string_args(macro_iterator *mi) c = get_copy(&n); } } - mi->add_arg(arg); + mi->add_arg(arg, (c == ' ')); } } -void macro::invoke(symbol nm) +void macro::invoke(symbol nm, int no_next) { macro_iterator *mi = new macro_iterator(nm, *this); decode_args(mi); input_stack::push(mi); - tok.next(); + // we must delay tok.next() in case the function has been called by + // do_request to assure proper handling of compatible_flag + if (!no_next) + tok.next(); } macro *macro::to_macro() @@ -3821,12 +3946,20 @@ int macro::empty() return empty_macro == 1; } -macro_iterator::macro_iterator(symbol s, macro &m, const char *how_called) -: string_iterator(m, how_called, s), args(0), argc(0) +macro_iterator::macro_iterator(symbol s, macro &m, const char *how_called, + int init_args) +: string_iterator(m, how_called, s), args(0), argc(0), with_break(break_flag) { + if (init_args) { + arg_list *al = input_stack::get_arg_list(); + if (al) { + args = new arg_list(al); + argc = input_stack::nargs(); + } + } } -macro_iterator::macro_iterator() : args(0), argc(0) +macro_iterator::macro_iterator() : args(0), argc(0), with_break(break_flag) { } @@ -3905,7 +4038,8 @@ static symbol composite_glyph_name(symbol nm) gl.clear(); int c; while ((c = p->get(0)) != EOF) - gl += c; + if (c != DOUBLE_QUOTE) + gl += c; gl += '\0'; const char *u = glyph_name_to_unicode(gl.contents()); if (!u) { @@ -4071,12 +4205,12 @@ void do_define_string(define_mode mode, comp_mode comp) mac.append((unsigned char)c); c = get_copy(&n); } + if (comp == COMP_DISABLE || comp == COMP_ENABLE) + mac.append(POP_GROFFCOMP_MODE); if (!mm) { mm = new macro; request_dictionary.define(nm, mm); } - if (comp == COMP_DISABLE || comp == COMP_ENABLE) - mac.append(POP_GROFFCOMP_MODE); *mm = mac; tok.next(); } @@ -4189,8 +4323,16 @@ static void interpolate_string(symbol nm) if (!m) error("you can only invoke a string or macro using \\*"); else { - string_iterator *si = new string_iterator(*m, "string", nm); - input_stack::push(si); + if (m->is_string()) { + string_iterator *si = new string_iterator(*m, "string", nm); + input_stack::push(si); + } + else { + // if a macro is called as a string, \$0 doesn't get changed + macro_iterator *mi = new macro_iterator(input_stack::get_macro_name(), + *m, "string", 1); + input_stack::push(mi); + } } } @@ -4221,7 +4363,8 @@ static void interpolate_arg(symbol nm) input_iterator *p = input_stack::get_arg(i); int c; while ((c = p->get(0)) != EOF) - args += c; + if (c != DOUBLE_QUOTE) + args += c; if (i != limit) args += ' '; } @@ -4235,12 +4378,13 @@ static void interpolate_arg(symbol nm) string args; for (int i = 1; i <= limit; i++) { args += '"'; - args += BEGIN_QUOTE; + args += char(BEGIN_QUOTE); input_iterator *p = input_stack::get_arg(i); int c; while ((c = p->get(0)) != EOF) - args += c; - args += END_QUOTE; + if (c != DOUBLE_QUOTE) + args += c; + args += char(END_QUOTE); args += '"'; if (i != limit) args += ' '; @@ -4250,6 +4394,25 @@ static void interpolate_arg(symbol nm) input_stack::push(make_temp_iterator(args.contents())); } } + else if (s[0] == '^' && s[1] == '\0') { + int limit = input_stack::nargs(); + string args; + int c = input_stack::peek(); + for (int i = 1; i <= limit; i++) { + input_iterator *p = input_stack::get_arg(i); + while ((c = p->get(0)) != EOF) { + if (c == DOUBLE_QUOTE) + c = '"'; + args += c; + } + if (input_stack::space_follows_arg(i)) + args += ' '; + } + if (limit > 0) { + args += '\0'; + input_stack::push(make_temp_iterator(args.contents())); + } + } else { const char *p; for (p = s; *p && csdigit(*p); p++) @@ -4358,6 +4521,8 @@ void do_define_macro(define_mode mode, calling_mode calling, comp_mode comp) else if (comp == COMP_ENABLE) mac.append(PUSH_COMP_MODE); for (;;) { + if (c == '\n') + mac.clear_string_flag(); while (c == ESCAPE_NEWLINE) { if (mode == DEFINE_NORMAL || mode == DEFINE_APPEND) mac.append(c); @@ -4543,12 +4708,12 @@ void chop_macro() // there due to empty am1 requests. for (;;) { if (m->get(m->len - 1) != POP_GROFFCOMP_MODE) - break; + break; have_restore = 1; m->len -= 1; if (m->get(m->len - 1) != PUSH_GROFF_MODE && m->get(m->len - 1) != PUSH_COMP_MODE) - break; + break; have_restore = 0; m->len -= 1; if (m->len == 0) @@ -4890,9 +5055,12 @@ static int read_size(int *x) else { token start(tok); tok.next(); - if (!(inc - ? get_number(&val, 'z') - : get_number(&val, 'z', curenv->get_requested_point_size()))) + c = tok.ch(); + if (!inc && (c == '-' || c == '+')) { + inc = c == '+' ? 1 : -1; + tok.next(); + } + if (!get_number(&val, 'z')) return 0; if (!(start.ch() == '[' && tok.ch() == ']') && start != tok) { if (start.ch() == '[') @@ -4923,7 +5091,7 @@ static int read_size(int *x) } if (*x <= 0) { warning(WARN_RANGE, - "\\s request results in non-positive point size; set to 1"); + "\\s escape results in non-positive point size; set to 1"); *x = 1; } return 1; @@ -5184,14 +5352,13 @@ static void encode_char(macro *mac, char c) const char *s = ci->get_symbol()->contents(); if (s[0] != (char)0) { mac->append('\\'); - mac->append('('); + mac->append('['); int i = 0; while (s[i] != (char)0) { mac->append(s[i]); i++; } - mac->append('\\'); - mac->append(')'); + mac->append(']'); } } else if (tok.stretchable_space() @@ -5248,6 +5415,41 @@ node *do_special() return new special_node(mac); } +void device_request() +{ + if (!tok.newline() && !tok.eof()) { + int c; + macro mac; + for (;;) { + c = get_copy(0); + if (c == '"') { + c = get_copy(0); + break; + } + if (c != ' ' && c != '\t') + break; + } + for (; c != '\n' && c != EOF; c = get_copy(0)) + mac.append(c); + curenv->add_node(new special_node(mac)); + } + tok.next(); +} + +void device_macro_request() +{ + symbol s = get_name(1); + if (!(s.is_null() || s.is_empty())) { + request_or_macro *p = lookup_request(s); + macro *m = p->to_macro(); + if (m) + curenv->add_node(new special_node(*m)); + else + error("can't transparently throughput a request"); + } + skip_line(); +} + void output_request() { if (!tok.newline() && !tok.eof()) { @@ -5293,9 +5495,11 @@ static node *do_suppress(symbol nm) return new suppress_node(1, 1); break; case '3': + have_input = 1; begin_level++; break; case '4': + have_input = 1; begin_level--; break; case '5': @@ -5321,6 +5525,8 @@ static node *do_suppress(symbol nm) image_no++; if (begin_level == 0) return new suppress_node(symbol(s), position, image_no); + else + have_input = 1; } break; default: @@ -5705,7 +5911,7 @@ void source() void pipe_source() { - if (safer_flag) { + if (!unsafe_flag) { error(".pso request not allowed in safer mode"); skip_line(); } @@ -5855,10 +6061,17 @@ void do_ps_file(FILE *fp, const char* filename) return; } while (ps_get_line(buf, fp, filename) != 0) { - if (buf[0] != '%' || buf[1] != '%' - || strncmp(buf + 2, "EndComments", 11) == 0) + // in header comments, `%X' (`X' any printable character except + // whitespace) is possible too + if (buf[0] == '%') { + if (strncmp(buf + 1, "%EndComments", 12) == 0) + break; + if (white_space(buf[1])) + break; + } + else break; - if (strncmp(buf + 2, "BoundingBox:", 12) == 0) { + if (strncmp(buf + 1, "%BoundingBox:", 13) == 0) { int res = parse_bounding_box(buf + 14, &bb); if (res == 1) { assign_registers(bb.llx, bb.lly, bb.urx, bb.ury); @@ -5878,7 +6091,7 @@ void do_ps_file(FILE *fp, const char* filename) if (bb_at_end) { long offset; int last_try = 0; - /* in the trailer, the last BoundingBox comment is significant */ + // in the trailer, the last BoundingBox comment is significant for (offset = 512; !last_try; offset *= 2) { int had_trailer = 0; int got_bb = 0; @@ -6172,7 +6385,7 @@ void do_open(int append) void open_request() { - if (safer_flag) { + if (!unsafe_flag) { error(".open request not allowed in safer mode"); skip_line(); } @@ -6182,7 +6395,7 @@ void open_request() void opena_request() { - if (safer_flag) { + if (!unsafe_flag) { error(".opena request not allowed in safer mode"); skip_line(); } @@ -6340,6 +6553,7 @@ static void init_charset_table() get_charinfo(symbol("dg"))->set_flags(charinfo::TRANSPARENT); get_charinfo(symbol("rq"))->set_flags(charinfo::TRANSPARENT); get_charinfo(symbol("em"))->set_flags(charinfo::BREAK_AFTER); + get_charinfo(symbol("hy"))->set_flags(charinfo::BREAK_AFTER); get_charinfo(symbol("ul"))->set_flags(charinfo::OVERLAPS_HORIZONTALLY); get_charinfo(symbol("rn"))->set_flags(charinfo::OVERLAPS_HORIZONTALLY); get_charinfo(symbol("radicalex"))->set_flags(charinfo::OVERLAPS_HORIZONTALLY); @@ -6771,6 +6985,16 @@ const char *filename_reg::get_string() return 0; } +class break_flag_reg : public reg { +public: + const char *get_string(); +}; + +const char *break_flag_reg::get_string() +{ + return i_to_a(input_stack::get_break_flag()); +} + class constant_reg : public reg { const char *s; public: @@ -6849,7 +7073,7 @@ char *read_string() void pipe_output() { - if (safer_flag) { + if (!unsafe_flag) { error(".pi request not allowed in safer mode"); skip_line(); } @@ -6876,7 +7100,7 @@ void pipe_output() pipe_command = s; } else - pipe_command = pc; + pipe_command = pc; } #endif /* not POPEN_MISSING */ } @@ -6886,7 +7110,7 @@ static int system_status; void system_request() { - if (safer_flag) { + if (!unsafe_flag) { error(".sy request not allowed in safer mode"); skip_line(); } @@ -7369,7 +7593,7 @@ int main(int argc, char **argv) // silently ignore these break; case 'U': - safer_flag = 0; // unsafe behaviour + unsafe_flag = 1; // unsafe behaviour break; #if defined(DEBUGGING) case 'D': @@ -7387,7 +7611,7 @@ int main(int argc, char **argv) default: assert(0); } - if (!safer_flag) + if (unsafe_flag) mac_path = ¯o_path; set_string(".T", device); init_charset_table(); @@ -7565,6 +7789,8 @@ void init_input_requests() init_request("defcolor", define_color); init_request("dei", define_indirect_macro); init_request("dei1", define_indirect_nocomp_macro); + init_request("device", device_request); + init_request("devicem", device_macro_request); init_request("do", do_request); init_request("ds", define_string); init_request("ds1", define_nocomp_string); @@ -7632,14 +7858,16 @@ void init_input_requests() init_request("writec", write_request_continue); init_request("writem", write_macro_request); number_reg_dictionary.define(".$", new nargs_reg); + number_reg_dictionary.define(".br", new break_flag_reg); number_reg_dictionary.define(".C", new constant_int_reg(&compatible_flag)); + number_reg_dictionary.define(".O", new variable_reg(&begin_level)); number_reg_dictionary.define(".c", new lineno_reg); number_reg_dictionary.define(".color", new constant_int_reg(&color_flag)); number_reg_dictionary.define(".F", new filename_reg); number_reg_dictionary.define(".g", new constant_reg("1")); number_reg_dictionary.define(".H", new constant_int_reg(&hresolution)); number_reg_dictionary.define(".R", new constant_reg("10000")); - number_reg_dictionary.define(".U", new constant_int_reg(&safer_flag)); + number_reg_dictionary.define(".U", new constant_int_reg(&unsafe_flag)); number_reg_dictionary.define(".V", new constant_int_reg(&vresolution)); number_reg_dictionary.define(".warn", new constant_int_reg(&warning_mask)); extern const char *major_version; @@ -8094,6 +8322,7 @@ charinfo::charinfo(symbol s) mode(CHAR_NORMAL), nm(s) { index = next_index++; + number = -1; } void charinfo::set_hyphenation_code(unsigned char c) @@ -8151,13 +8380,13 @@ macro *charinfo::setx_macro(macro *m, char_mode cm) void charinfo::set_number(int n) { + assert(n >= 0); number = n; - flags |= NUMBERED; } int charinfo::get_number() { - assert(flags & NUMBERED); + assert(number >= 0); return number; } @@ -8193,7 +8422,12 @@ charinfo *get_charinfo_by_number(int n) } } -int font::name_to_index(const char *nm) +// This overrides the same function from libgroff; while reading font +// definition files it puts single-letter glyph names into `charset_table' +// and converts glyph names of the form `\x' (`x' a single letter) into `x'. +// Consequently, symbol("x") refers to glyph name `\x', not `x'. + +glyph *name_to_glyph(const char *nm) { charinfo *ci; if (nm[1] == 0) @@ -8202,13 +8436,16 @@ int font::name_to_index(const char *nm) ci = get_charinfo(symbol(nm + 1)); else ci = get_charinfo(symbol(nm)); - if (ci == 0) - return -1; - else - return ci->get_index(); + return ci->as_glyph(); +} + +glyph *number_to_glyph(int n) +{ + return get_charinfo_by_number(n)->as_glyph(); } -int font::number_to_index(int n) +const char *glyph_to_name(glyph *g) { - return get_charinfo_by_number(n)->get_index(); + charinfo *ci = (charinfo *)g; // Every glyph is actually a charinfo. + return (ci->nm != UNNAMED_SYMBOL ? ci->nm.contents() : NULL); } diff --git a/contrib/groff/src/roff/troff/input.h b/contrib/groff/src/roff/troff/input.h index ba6e2e13d1..89c377799d 100644 --- a/contrib/groff/src/roff/troff/input.h +++ b/contrib/groff/src/roff/troff/input.h @@ -1,22 +1,21 @@ // -*- C++ -*- -/* Copyright (C) 2001, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2001, 2004, 2006, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ /* special character codes */ @@ -59,6 +58,7 @@ const int PUSH_COMP_MODE = 0212; const int POP_GROFFCOMP_MODE = 0213; const int BEGIN_QUOTE = 0214; const int END_QUOTE = 0215; +const int DOUBLE_QUOTE = 0216; #else /* IS_EBCDIC_HOST */ @@ -98,6 +98,7 @@ const int PUSH_COMP_MODE = 072; const int POP_GROFFCOMP_MODE = 073; const int BEGIN_QUOTE = 074; const int END_QUOTE = 075; +const int DOUBLE_QUOTE = 076; #endif /* IS_EBCDIC_HOST */ diff --git a/contrib/groff/src/roff/troff/mtsm.cpp b/contrib/groff/src/roff/troff/mtsm.cpp index 630e973209..83a6906660 100644 --- a/contrib/groff/src/roff/troff/mtsm.cpp +++ b/contrib/groff/src/roff/troff/mtsm.cpp @@ -1,22 +1,21 @@ // -*- C++ -*- -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2009 Free Software Foundation, Inc. Written by Gaius Mulley (gaius@glam.ac.uk) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #define DEBUGGING diff --git a/contrib/groff/src/roff/troff/mtsm.h b/contrib/groff/src/roff/troff/mtsm.h index 9ef909c39b..2da5560283 100644 --- a/contrib/groff/src/roff/troff/mtsm.h +++ b/contrib/groff/src/roff/troff/mtsm.h @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2009 Free Software Foundation, Inc. * * mtsm.h * @@ -14,17 +14,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ struct int_value { int value; diff --git a/contrib/groff/src/roff/troff/node.cpp b/contrib/groff/src/roff/troff/node.cpp index 0d874d3575..afe4998537 100644 --- a/contrib/groff/src/roff/troff/node.cpp +++ b/contrib/groff/src/roff/troff/node.cpp @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004, 2005, + 2006, 2008, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ extern int debug_state; @@ -37,8 +37,8 @@ extern int debug_state; #include "token.h" #include "div.h" #include "reg.h" -#include "charinfo.h" #include "font.h" +#include "charinfo.h" #include "input.h" #include "geometry.h" @@ -157,6 +157,8 @@ public: int get_bold(hunits *); int is_special(); int is_style(); + void set_zoom(int); + int get_zoom(); friend symbol get_font_name(int, environment *); friend symbol get_style_name(int); }; @@ -197,6 +199,7 @@ public: hunits get_track_kern(); tfont *get_plain(); font_size get_size(); + int get_zoom(); symbol get_name(); charinfo *get_lig(charinfo *c1, charinfo *c2); int get_kern(charinfo *c1, charinfo *c2, hunits *res); @@ -233,7 +236,7 @@ font_info::font_info(symbol nm, int n, symbol enm, font *f) inline int font_info::contains(charinfo *ci) { - return fm != 0 && fm->contains(ci->get_index()); + return fm != 0 && fm->contains(ci->as_glyph()); } inline int font_info::is_special() @@ -246,6 +249,19 @@ inline int font_info::is_style() return fm == 0; } +void font_info::set_zoom(int zoom) +{ + assert(fm != 0); + fm->set_zoom(zoom); +} + +inline int font_info::get_zoom() +{ + if (is_style()) + return 0; + return fm->get_zoom(); +} + tfont *make_tfont(tfont_spec &spec) { for (tfont *p = tfont::tfont_list; p; p = p->next) @@ -254,6 +270,12 @@ tfont *make_tfont(tfont_spec &spec) return new tfont(spec); } +int env_get_zoom(environment *env) +{ + int fontno = env->get_family()->make_definite(env->get_font()); + return font_table[fontno]->get_zoom(); +} + // this is the current_font, fontno is where we found the character, // presumably a special font @@ -298,7 +320,9 @@ tfont *font_info::get_tfont(font_size fs, int height, int slant, int fontno) } if (fontno != number) return make_tfont(spec); + // save font for comparison purposes last_tfont = make_tfont(spec); + // save font related values not contained in tfont last_size = fs; last_height = height; last_slant = slant; @@ -430,8 +454,8 @@ hunits font_info::get_space_width(font_size fs, int space_sz) hunits font_info::get_narrow_space_width(font_size fs) { charinfo *ci = get_charinfo(symbol("|")); - if (fm->contains(ci->get_index())) - return hunits(fm->get_width(ci->get_index(), fs.to_scaled_points())); + if (fm->contains(ci->as_glyph())) + return hunits(fm->get_width(ci->as_glyph(), fs.to_scaled_points())); else return hunits(fs.to_units()/6); } @@ -439,8 +463,8 @@ hunits font_info::get_narrow_space_width(font_size fs) hunits font_info::get_half_narrow_space_width(font_size fs) { charinfo *ci = get_charinfo(symbol("^")); - if (fm->contains(ci->get_index())) - return hunits(fm->get_width(ci->get_index(), fs.to_scaled_points())); + if (fm->contains(ci->as_glyph())) + return hunits(fm->get_width(ci->as_glyph(), fs.to_scaled_points())); else return hunits(fs.to_units()/12); } @@ -490,16 +514,16 @@ hunits tfont::get_width(charinfo *c) if (is_constant_spaced) return constant_space_width; else if (is_bold) - return (hunits(fm->get_width(c->get_index(), size.to_scaled_points())) + return (hunits(fm->get_width(c->as_glyph(), size.to_scaled_points())) + track_kern + bold_offset); else - return (hunits(fm->get_width(c->get_index(), size.to_scaled_points())) + return (hunits(fm->get_width(c->as_glyph(), size.to_scaled_points())) + track_kern); } vunits tfont::get_char_height(charinfo *c) { - vunits v = fm->get_height(c->get_index(), size.to_scaled_points()); + vunits v = fm->get_height(c->as_glyph(), size.to_scaled_points()); if (height != 0 && height != size.to_scaled_points()) return scale(v, height, size.to_scaled_points()); else @@ -508,7 +532,7 @@ vunits tfont::get_char_height(charinfo *c) vunits tfont::get_char_depth(charinfo *c) { - vunits v = fm->get_depth(c->get_index(), size.to_scaled_points()); + vunits v = fm->get_depth(c->as_glyph(), size.to_scaled_points()); if (height != 0 && height != size.to_scaled_points()) return scale(v, height, size.to_scaled_points()); else @@ -517,23 +541,23 @@ vunits tfont::get_char_depth(charinfo *c) hunits tfont::get_char_skew(charinfo *c) { - return hunits(fm->get_skew(c->get_index(), size.to_scaled_points(), slant)); + return hunits(fm->get_skew(c->as_glyph(), size.to_scaled_points(), slant)); } hunits tfont::get_italic_correction(charinfo *c) { - return hunits(fm->get_italic_correction(c->get_index(), size.to_scaled_points())); + return hunits(fm->get_italic_correction(c->as_glyph(), size.to_scaled_points())); } hunits tfont::get_left_italic_correction(charinfo *c) { - return hunits(fm->get_left_italic_correction(c->get_index(), + return hunits(fm->get_left_italic_correction(c->as_glyph(), size.to_scaled_points())); } hunits tfont::get_subscript_correction(charinfo *c) { - return hunits(fm->get_subscript_correction(c->get_index(), + return hunits(fm->get_subscript_correction(c->as_glyph(), size.to_scaled_points())); } @@ -544,12 +568,12 @@ inline int tfont::get_input_position() inline int tfont::contains(charinfo *ci) { - return fm->contains(ci->get_index()); + return fm->contains(ci->as_glyph()); } inline int tfont::get_character_type(charinfo *ci) { - return fm->get_character_type(ci->get_index()); + return fm->get_character_type(ci->as_glyph()); } inline int tfont::get_bold(hunits *res) @@ -587,6 +611,11 @@ inline font_size tfont::get_size() return size; } +inline int tfont::get_zoom() +{ + return fm->get_zoom(); +} + inline symbol tfont::get_name() { return name; @@ -641,7 +670,7 @@ charinfo *tfont::get_lig(charinfo *c1, charinfo *c2) break; } } - if (ci != 0 && fm->contains(ci->get_index())) + if (ci != 0 && fm->contains(ci->as_glyph())) return ci; return 0; } @@ -651,8 +680,8 @@ inline int tfont::get_kern(charinfo *c1, charinfo *c2, hunits *res) if (kern_mode == 0) return 0; else { - int n = fm->get_kern(c1->get_index(), - c2->get_index(), + int n = fm->get_kern(c1->as_glyph(), + c2->as_glyph(), size.to_scaled_points()); if (n) { *res = hunits(n); @@ -686,14 +715,14 @@ class real_output_file : public output_file { #ifndef POPEN_MISSING int piped; #endif - int printing; // decision via optional page list - int output_on; // \O[0] or \O[1] escape calls + int printing; // decision via optional page list + int output_on; // \O[0] or \O[1] escape calls virtual void really_transparent_char(unsigned char) = 0; virtual void really_print_line(hunits x, vunits y, node *n, vunits before, vunits after, hunits width) = 0; virtual void really_begin_page(int pageno, vunits page_length) = 0; virtual void really_copy_file(hunits x, vunits y, const char *filename); - virtual void really_put_filename(const char *filename); + virtual void really_put_filename(const char *, int); virtual void really_on(); virtual void really_off(); public: @@ -704,7 +733,7 @@ public: void transparent_char(unsigned char); void print_line(hunits x, vunits y, node *n, vunits before, vunits after, hunits width); void begin_page(int pageno, vunits page_length); - void put_filename(const char *filename); + void put_filename(const char *, int); void on(); void off(); int is_on(); @@ -793,7 +822,7 @@ public: void really_print_line(hunits x, vunits y, node *n, vunits before, vunits after, hunits width); void really_begin_page(int pageno, vunits page_length); void really_copy_file(hunits x, vunits y, const char *filename); - void really_put_filename(const char *filename); + void really_put_filename(const char *, int); void really_on(); void really_off(); void draw(char, hvpair *, int, font_size, color *, color *); @@ -1184,7 +1213,13 @@ void troff_output_file::set_font(tfont *tf) put('\n'); current_font_number = n; } - int size = tf->get_size().to_scaled_points(); + int zoom = tf->get_zoom(); + int size; + if (zoom) + size = scale(tf->get_size().to_scaled_points(), + zoom, 1000); + else + size = tf->get_size().to_scaled_points(); if (current_size != size) { put('s'); put(size); @@ -1469,11 +1504,15 @@ void troff_output_file::really_off() flush_tbuf(); } -void troff_output_file::really_put_filename(const char *filename) +void troff_output_file::really_put_filename(const char *filename, int po) { flush_tbuf(); put("F "); + if (po) + put("<"); put(filename); + if (po) + put(">"); put('\n'); } @@ -1587,7 +1626,7 @@ void output_file::trailer(vunits) { } -void output_file::put_filename(const char *) +void output_file::put_filename(const char *, int) { } @@ -1693,12 +1732,12 @@ void real_output_file::really_copy_file(hunits, vunits, const char *) // do nothing } -void real_output_file::put_filename(const char *filename) +void real_output_file::put_filename(const char *filename, int po) { - really_put_filename(filename); + really_put_filename(filename, po); } -void real_output_file::really_put_filename(const char *) +void real_output_file::really_put_filename(const char *, int) { } @@ -2799,15 +2838,19 @@ int break_char_node::ends_sentence() node *break_char_node::add_self(node *n, hyphen_list **p) { assert((*p)->hyphenation_code == 0); - if ((*p)->breakable && (break_code & 1)) { - n = new space_node(H0, col, n); - n->freeze_space(); + if (break_code & 1) { + if ((*p)->breakable || break_code & 4) { + n = new space_node(H0, col, n); + n->freeze_space(); + } } next = n; n = this; - if ((*p)->breakable && (break_code & 2)) { - n = new space_node(H0, col, n); - n->freeze_space(); + if (break_code & 2) { + if ((*p)->breakable || break_code & 4) { + n = new space_node(H0, col, n); + n->freeze_space(); + } } hyphen_list *pp = *p; *p = (*p)->next; @@ -4111,7 +4154,7 @@ void suppress_node::tprint(troff_output_file *out) // postscript (or other device) if (suppress_start_page > 0 && current_page != suppress_start_page) error("suppression limit registers span more than one page;\n" - "image description %1 will be wrong", image_no); + "image description %1 will be wrong", image_no); // if (topdiv->get_page_number() != suppress_start_page) // fprintf(stderr, "end of image and topdiv page = %d and suppress_start_page = %d\n", // topdiv->get_page_number(), suppress_start_page); @@ -4905,9 +4948,12 @@ node *make_glyph_node(charinfo *s, environment *env, int no_error_message = 0) warning(WARN_CHAR, "can't find character with input code %1", int(input_code)); } - else if (s->nm.contents()) - warning(WARN_CHAR, "can't find special character `%1'", - s->nm.contents()); + else if (s->nm.contents()) { + const char *nm = s->nm.contents(); + const char *backslash = (nm[1] == 0) ? "\\" : ""; + warning(WARN_CHAR, "can't find special character `%1%2'", + backslash, nm); + } } return 0; } @@ -5030,6 +5076,8 @@ node *node::add_char(charinfo *ci, environment *env, break_code = 1; if (ci->can_break_after()) break_code |= 2; + if (ci->ignore_hcodes()) + break_code |= 4; if (break_code) { node *next1 = res->next; res->next = 0; @@ -5491,8 +5539,12 @@ node *left_italic_corrected_node::add_self(node *nd, hyphen_list **p) nd = n->add_self(nd, p); n = 0; delete this; + return nd; + } + else { + next = nd; + return this; } - return nd; } int left_italic_corrected_node::character_type() @@ -6185,6 +6237,27 @@ void special_request() skip_line(); } +void font_zoom_request() +{ + int n = get_fontno(); + if (n >= 0) { + if (font_table[n]->is_style()) + warning(WARN_FONT, "can't set zoom factor for a style"); + else { + int zoom; + if (has_arg() && get_integer(&zoom)) { + if (zoom < 0) + warning(WARN_FONT, "can't use negative zoom factor"); + else + font_table[n]->set_zoom(zoom); + } + else + font_table[n]->set_zoom(0); + } + } + skip_line(); +} + int next_available_font_position() { int i; @@ -6463,6 +6536,7 @@ void init_node_requests() init_request("fp", font_position); init_request("fschar", define_font_special_character); init_request("fspecial", font_special_request); + init_request("fzoom", font_zoom_request); init_request("ftr", font_translate); init_request("kern", kern_request); init_request("lg", ligature); diff --git a/contrib/groff/src/roff/troff/node.h b/contrib/groff/src/roff/troff/node.h index c7c8b4188c..a598ae5265 100644 --- a/contrib/groff/src/roff/troff/node.h +++ b/contrib/groff/src/roff/troff/node.h @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2003, 2004,\ + 2006, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ struct hyphen_list { unsigned char hyphen; @@ -642,7 +642,7 @@ public: virtual void begin_page(int pageno, vunits page_length) = 0; virtual void copy_file(hunits x, vunits y, const char *filename) = 0; virtual int is_printing() = 0; - virtual void put_filename(const char *); + virtual void put_filename(const char *, int); virtual void on(); virtual void off(); #ifdef COLUMN diff --git a/contrib/groff/src/roff/troff/number.cpp b/contrib/groff/src/roff/troff/number.cpp index 0a4563e4b3..fc3f9803a8 100644 --- a/contrib/groff/src/roff/troff/number.cpp +++ b/contrib/groff/src/roff/troff/number.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2004, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "troff.h" diff --git a/contrib/groff/src/roff/troff/reg.cpp b/contrib/groff/src/roff/troff/reg.cpp index 4501090a5f..78f678116f 100644 --- a/contrib/groff/src/roff/troff/reg.cpp +++ b/contrib/groff/src/roff/troff/reg.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2004, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "troff.h" #include "dictionary.h" diff --git a/contrib/groff/src/roff/troff/reg.h b/contrib/groff/src/roff/troff/reg.h index bc2c3f2d44..51671ab2ac 100644 --- a/contrib/groff/src/roff/troff/reg.h +++ b/contrib/groff/src/roff/troff/reg.h @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2003 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2003, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ class reg : public object { diff --git a/contrib/groff/src/roff/troff/request.h b/contrib/groff/src/roff/troff/request.h index 24d25890fc..90d2961f1b 100644 --- a/contrib/groff/src/roff/troff/request.h +++ b/contrib/groff/src/roff/troff/request.h @@ -1,5 +1,6 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2004 +/* Copyright (C) 1989, 1990, 1991, 1992, 2000, 2001, 2002, 2004, 2008, + 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +8,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ typedef void (*REQUEST_FUNCP)(); @@ -26,14 +26,14 @@ class macro; class request_or_macro : public object { public: request_or_macro(); - virtual void invoke(symbol s) = 0; + virtual void invoke(symbol, int) = 0; virtual macro *to_macro(); }; class request : public request_or_macro { REQUEST_FUNCP p; public: - void invoke(symbol); + void invoke(symbol, int); request(REQUEST_FUNCP); }; @@ -50,6 +50,7 @@ class macro : public request_or_macro { int len; int empty_macro; int is_a_diversion; + int is_a_string; // if it contains no newline public: macro_header *p; macro(); @@ -59,17 +60,19 @@ public: macro &operator=(const macro &); void append(unsigned char); void append(node *); - void append_unsigned(unsigned int i); - void append_int(int i); + void append_unsigned(unsigned int); + void append_int(int); void append_str(const char *); void set(unsigned char, int); unsigned char get(int); int length(); - void invoke(symbol); + void invoke(symbol, int); macro *to_macro(); void print_size(); int empty(); int is_diversion(); + int is_string(); + void clear_string_flag(); friend class string_iterator; friend void chop_macro(); friend void substring_request(); @@ -83,7 +86,7 @@ extern void init_node_requests(); extern void init_reg_requests(); extern void init_env_requests(); extern void init_hyphen_requests(); -extern void init_request(const char *s, REQUEST_FUNCP f); +extern void init_request(const char *, REQUEST_FUNCP); class charinfo; class environment; diff --git a/contrib/groff/src/roff/troff/token.h b/contrib/groff/src/roff/troff/token.h index 6493976073..22a06aa220 100644 --- a/contrib/groff/src/roff/troff/token.h +++ b/contrib/groff/src/roff/troff/token.h @@ -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, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ class charinfo; diff --git a/contrib/groff/src/roff/troff/troff.h b/contrib/groff/src/roff/troff/troff.h index 661b3ed059..ab5db4068c 100644 --- a/contrib/groff/src/roff/troff/troff.h +++ b/contrib/groff/src/roff/troff/troff.h @@ -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, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" diff --git a/contrib/groff/src/roff/troff/troff.man b/contrib/groff/src/roff/troff/troff.man index 064a03fa7d..6c53f4d54c 100644 --- a/contrib/groff/src/roff/troff/troff.man +++ b/contrib/groff/src/roff/troff/troff.man @@ -2,11 +2,10 @@ .ig troff.man -Last update : 12 Oct 2003 - This file is part of groff, the GNU roff type-setting system. -Copyright (C) 1989, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. +Copyright (C) 1989, 2000, 2001, 2002, 2003, 2007, 2008, 2009 + Free Software Foundation, Inc. written by James Clark @@ -14,7 +13,7 @@ modified by Werner Lemberg Bernd Warken Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being this .ig-section and AUTHOR, with no Front-Cover Texts, and with no Back-Cover Texts. @@ -23,40 +22,6 @@ A copy of the Free Documentation License is included as a file called FDL in the main directory of the groff source package. .. . -. -.\" -------------------------------------------------------------------- -.\" Setup -.\" -------------------------------------------------------------------- -. -.do nr troff_C \n[.C] -.cp 0 -. -.mso www.tmac -. -.if n \{\ -. mso tty-char.tmac -. ftr CR R -. ftr CI I -. ftr CB B -.\} -. -.if '\*[.T]'dvi' \ -. ftr CB CW -. -.de TQ -.br -.ns -.TP \\$1 -.. -. -.\" Like TP, but if specified indent is more than half -.\" the current line-length - indent, use the default indent. -.de Tp -.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP -.el .TP "\\$1" -.. -. -. .\" -------------------------------------------------------------------- .\" Title .\" -------------------------------------------------------------------- @@ -70,16 +35,7 @@ FDL in the main directory of the groff source package. .SH SYNOPSIS .\" -------------------------------------------------------------------- . -.nr a \n(.j -.ad l -.nr i \n(.i -.in +\w'\fB@g@troff 'u -.ti \niu -.B @g@troff -.de OP -.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]" -.el .RB "[\ " "\\$1" "\ ]" -.. +.SY @g@troff .OP \-abcivzCERU .OP \-d cs .OP \-f fam @@ -93,12 +49,8 @@ FDL in the main directory of the groff source package. .OP \-T name .OP \-w name .OP \-W name -.RI "[\ " files\|.\|.\|. "\ ]" -.br -.ad \na -.P -It is possible to have whitespace between a command line option and -its parameter. +.RI [ file\~ .\|.\|.] +.YS . . .\" -------------------------------------------------------------------- @@ -121,6 +73,8 @@ appropriate order and with the appropriate options. .\" -------------------------------------------------------------------- .SH OPTIONS .\" -------------------------------------------------------------------- +It is possible to have whitespace between a command line option and +its parameter. . .TP \w'\-dname=s'u+2n .B \-a @@ -200,14 +154,19 @@ processed. . .TP .BI \-I dir -This option may be used to specify a directory to search for -files (both those on the command line and those named in +This option may be used to add a directory to the search path for files +(both those on the command line and those named in .B \&.psbb requests). -The current directory is always searched first. -This option may be specified more than once; -the directories will be searched in the order specified. -No directory search is performed for files specified using an absolute path. +The search path is initialized with the current directory. +This option may be specified more than once; the directories are then +searched in the order specified (but before the current directory). +If you want to make the current directory be read before other directories, +add +.B \-I.\& +at the appropriate place. +.IP +No directory search is performed for files with an absolute file name. . .TP .BI \-m name @@ -575,7 +534,7 @@ after these. .SH FILES .\" -------------------------------------------------------------------- . -.Tp \w'@FONTDIR@/devname/DESC'u+3n +.TP .B @MACRODIR@/troffrc Initialization file (called before any other macro package). . @@ -622,19 +581,26 @@ necessary. .SH AUTHOR .\" -------------------------------------------------------------------- . -Copyright (C) 1989, 2001, 2002, 2003 Free Software Foundation, Inc. +Copyright (C) 1989, 2001, 2002, 2003, 2007, 2008, 2009 +Free Software Foundation, Inc. . .P This document is distributed under the terms of the FDL (GNU Free -Documentation License) version 1.1 or later. +Documentation License) version 1.3 or later. . You should have received a copy of the FDL on your system, it is also available on-line at the -.URL http://www.gnu.org/copyleft/fdl.html "GNU copyleft site" . +.UR http://\:www.gnu.org/\:copyleft/\:fdl.html +GNU copyleft site +.UE . This document was written by James Clark, with modifications from -.MTO wl@gnu.org "Werner Lemberg" +.MT wl@gnu.org +Werner Lemberg +.ME and -.MTO bwarken@mayn.de "Bernd Warken" +.MT bwarken@mayn.de +Bernd Warken +.ME . . .P This document is part of @@ -694,8 +660,6 @@ cf.\& .BR info (@MAN1EXT@), presents all groff documentation within a single document. . -.cp \n[troff_C] -. .\" -------------------------------------------------------------------- .\" Emacs variables .\" -------------------------------------------------------------------- diff --git a/contrib/groff/src/utils/addftinfo/addftinfo.cpp b/contrib/groff/src/utils/addftinfo/addftinfo.cpp index b2fd15dbf8..0eec0ca0e5 100644 --- a/contrib/groff/src/utils/addftinfo/addftinfo.cpp +++ b/contrib/groff/src/utils/addftinfo/addftinfo.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989-1992, 2000, 2001 Free Software Foundation, Inc. +/* Copyright (C) 1989-1992, 2000, 2001, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" diff --git a/contrib/groff/src/utils/addftinfo/addftinfo.man b/contrib/groff/src/utils/addftinfo/addftinfo.man index a9b845517d..ba601fb322 100644 --- a/contrib/groff/src/utils/addftinfo/addftinfo.man +++ b/contrib/groff/src/utils/addftinfo/addftinfo.man @@ -1,5 +1,5 @@ .ig -Copyright (C) 1989-2000, 2001 Free Software Foundation, Inc. +Copyright (C) 1989-2000, 2001, 2009 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice diff --git a/contrib/groff/src/utils/addftinfo/guess.cpp b/contrib/groff/src/utils/addftinfo/guess.cpp index 7ae36dcdec..1d7f74ad7e 100644 --- a/contrib/groff/src/utils/addftinfo/guess.cpp +++ b/contrib/groff/src/utils/addftinfo/guess.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "guess.h" diff --git a/contrib/groff/src/utils/addftinfo/guess.h b/contrib/groff/src/utils/addftinfo/guess.h index 26f0883e8d..88efa4b5c8 100644 --- a/contrib/groff/src/utils/addftinfo/guess.h +++ b/contrib/groff/src/utils/addftinfo/guess.h @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989, 1990, 1991, 1992 Free Software Foundation, Inc. +/* Copyright (C) 1989, 1990, 1991, 1992, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ struct font_params { int italic; diff --git a/contrib/groff/src/utils/afmtodit/afmtodit.man b/contrib/groff/src/utils/afmtodit/afmtodit.man index 978de344ea..b741860571 100644 --- a/contrib/groff/src/utils/afmtodit/afmtodit.man +++ b/contrib/groff/src/utils/afmtodit/afmtodit.man @@ -1,5 +1,6 @@ .ig -Copyright (C) 1989-2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +Copyright (C) 1989-2000, 2001, 2002, 2003, 2005, 2006, 2008, 2009 + Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice @@ -45,10 +46,11 @@ afmtodit \- create font files for use with groff \-Tps .in +\w'\fBafmtodit 'u .ti \niu .B afmtodit -.OP \-mnsvx +.OP \-ckmnsvx .OP \-a n .OP \-d desc_file .OP \-e enc_file +.OP \-f internal_name .OP \-i n .I afm_file .I map_file @@ -57,7 +59,7 @@ afmtodit \- create font files for use with groff \-Tps .ad \na . .LP -The whitespace between an command line option and its argument is optional. +The whitespace between a command line option and its argument is optional. . .SH DESCRIPTION .B afmtodit @@ -104,14 +106,11 @@ If the file isn't found in the current directory, it is searched in the `devps/generate' subdirectory of the default font directory. . .LP -If a PostScript character is not named as -.BI uni XXXX -.RI ( XXXX -are four uppercase hexadecimal digits), and is not mentioned in +If a PostScript character is not mentioned in .IR map_file , and a generic groff glyph name can't be deduced using the Adobe Glyph List (AGL, built into -.BR afmtodit ), +.BR afmtodit ), then .B afmtodit puts the PostScript character into the groff font file as an unnamed @@ -119,6 +118,8 @@ character which can only be accessed by the .B \eN escape sequence in .BR troff . +In particular, this is true for glyph variants like `foo.bar'; all glyph +names containing one or more periods are mapped to unnamed entities. . If option .B \-e @@ -201,6 +202,10 @@ then use the option to give the font a smaller slant. . .TP +.B \-c +Include comments in the font file in order to identify the PS font. +. +.TP .BI \-d desc_file The device description file is .I desc_file @@ -226,6 +231,11 @@ If not found in the current directory, the `devps' subdirectory of the default font directory is searched. . .TP +.BI \-f name +The internal name of the groff font is set to +.IR name . +. +.TP .BI \-i n Generate an italic correction for each character so that the character's width plus the character's italic correction @@ -267,6 +277,11 @@ The font files distributed with groff were created using an option of for italic fonts. . .TP +.B \-k +Omit any kerning data from the groff font. +This should be used only for mono-spaced fonts. +. +.TP .B \-m Prevent negative left italic correction values. . diff --git a/contrib/groff/src/utils/afmtodit/afmtodit.pl b/contrib/groff/src/utils/afmtodit/afmtodit.pl index 0ff85de2ae..17b461d2b8 100644 --- a/contrib/groff/src/utils/afmtodit/afmtodit.pl +++ b/contrib/groff/src/utils/afmtodit/afmtodit.pl @@ -1,6 +1,7 @@ #! /usr/bin/perl -w # -*- Perl -*- -# Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2005 +# Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, +# 2009 # Free Software Foundation, Inc. # Written by James Clark (jjc@jclark.com) # @@ -8,6041 +9,20 @@ # # groff is free software; you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free -# Software Foundation; either version 2, or (at your option) any later -# version. +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. # # groff is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # for more details. # -# You should have received a copy of the GNU General Public License along -# with groff; see the file COPYING. If not, write to the Free Software -# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . use strict; -my %unicode_decomposed = ( - "00C0", "0041_0300", - "00C1", "0041_0301", - "00C2", "0041_0302", - "00C3", "0041_0303", - "00C4", "0041_0308", - "00C5", "0041_030A", - "00C7", "0043_0327", - "00C8", "0045_0300", - "00C9", "0045_0301", - "00CA", "0045_0302", - "00CB", "0045_0308", - "00CC", "0049_0300", - "00CD", "0049_0301", - "00CE", "0049_0302", - "00CF", "0049_0308", - "00D1", "004E_0303", - "00D2", "004F_0300", - "00D3", "004F_0301", - "00D4", "004F_0302", - "00D5", "004F_0303", - "00D6", "004F_0308", - "00D9", "0055_0300", - "00DA", "0055_0301", - "00DB", "0055_0302", - "00DC", "0055_0308", - "00DD", "0059_0301", - "00E0", "0061_0300", - "00E1", "0061_0301", - "00E2", "0061_0302", - "00E3", "0061_0303", - "00E4", "0061_0308", - "00E5", "0061_030A", - "00E7", "0063_0327", - "00E8", "0065_0300", - "00E9", "0065_0301", - "00EA", "0065_0302", - "00EB", "0065_0308", - "00EC", "0069_0300", - "00ED", "0069_0301", - "00EE", "0069_0302", - "00EF", "0069_0308", - "00F1", "006E_0303", - "00F2", "006F_0300", - "00F3", "006F_0301", - "00F4", "006F_0302", - "00F5", "006F_0303", - "00F6", "006F_0308", - "00F9", "0075_0300", - "00FA", "0075_0301", - "00FB", "0075_0302", - "00FC", "0075_0308", - "00FD", "0079_0301", - "00FF", "0079_0308", - "0100", "0041_0304", - "0101", "0061_0304", - "0102", "0041_0306", - "0103", "0061_0306", - "0104", "0041_0328", - "0105", "0061_0328", - "0106", "0043_0301", - "0107", "0063_0301", - "0108", "0043_0302", - "0109", "0063_0302", - "010A", "0043_0307", - "010B", "0063_0307", - "010C", "0043_030C", - "010D", "0063_030C", - "010E", "0044_030C", - "010F", "0064_030C", - "0112", "0045_0304", - "0113", "0065_0304", - "0114", "0045_0306", - "0115", "0065_0306", - "0116", "0045_0307", - "0117", "0065_0307", - "0118", "0045_0328", - "0119", "0065_0328", - "011A", "0045_030C", - "011B", "0065_030C", - "011C", "0047_0302", - "011D", "0067_0302", - "011E", "0047_0306", - "011F", "0067_0306", - "0120", "0047_0307", - "0121", "0067_0307", - "0122", "0047_0327", - "0123", "0067_0327", - "0124", "0048_0302", - "0125", "0068_0302", - "0128", "0049_0303", - "0129", "0069_0303", - "012A", "0049_0304", - "012B", "0069_0304", - "012C", "0049_0306", - "012D", "0069_0306", - "012E", "0049_0328", - "012F", "0069_0328", - "0130", "0049_0307", - "0134", "004A_0302", - "0135", "006A_0302", - "0136", "004B_0327", - "0137", "006B_0327", - "0139", "004C_0301", - "013A", "006C_0301", - "013B", "004C_0327", - "013C", "006C_0327", - "013D", "004C_030C", - "013E", "006C_030C", - "0143", "004E_0301", - "0144", "006E_0301", - "0145", "004E_0327", - "0146", "006E_0327", - "0147", "004E_030C", - "0148", "006E_030C", - "014C", "004F_0304", - "014D", "006F_0304", - "014E", "004F_0306", - "014F", "006F_0306", - "0150", "004F_030B", - "0151", "006F_030B", - "0154", "0052_0301", - "0155", "0072_0301", - "0156", "0052_0327", - "0157", "0072_0327", - "0158", "0052_030C", - "0159", "0072_030C", - "015A", "0053_0301", - "015B", "0073_0301", - "015C", "0053_0302", - "015D", "0073_0302", - "015E", "0053_0327", - "015F", "0073_0327", - "0160", "0053_030C", - "0161", "0073_030C", - "0162", "0054_0327", - "0163", "0074_0327", - "0164", "0054_030C", - "0165", "0074_030C", - "0168", "0055_0303", - "0169", "0075_0303", - "016A", "0055_0304", - "016B", "0075_0304", - "016C", "0055_0306", - "016D", "0075_0306", - "016E", "0055_030A", - "016F", "0075_030A", - "0170", "0055_030B", - "0171", "0075_030B", - "0172", "0055_0328", - "0173", "0075_0328", - "0174", "0057_0302", - "0175", "0077_0302", - "0176", "0059_0302", - "0177", "0079_0302", - "0178", "0059_0308", - "0179", "005A_0301", - "017A", "007A_0301", - "017B", "005A_0307", - "017C", "007A_0307", - "017D", "005A_030C", - "017E", "007A_030C", - "01A0", "004F_031B", - "01A1", "006F_031B", - "01AF", "0055_031B", - "01B0", "0075_031B", - "01CD", "0041_030C", - "01CE", "0061_030C", - "01CF", "0049_030C", - "01D0", "0069_030C", - "01D1", "004F_030C", - "01D2", "006F_030C", - "01D3", "0055_030C", - "01D4", "0075_030C", - "01D5", "0055_0308_0304", - "01D6", "0075_0308_0304", - "01D7", "0055_0308_0301", - "01D8", "0075_0308_0301", - "01D9", "0055_0308_030C", - "01DA", "0075_0308_030C", - "01DB", "0055_0308_0300", - "01DC", "0075_0308_0300", - "01DE", "0041_0308_0304", - "01DF", "0061_0308_0304", - "01E0", "0041_0307_0304", - "01E1", "0061_0307_0304", - "01E2", "00C6_0304", - "01E3", "00E6_0304", - "01E6", "0047_030C", - "01E7", "0067_030C", - "01E8", "004B_030C", - "01E9", "006B_030C", - "01EA", "004F_0328", - "01EB", "006F_0328", - "01EC", "004F_0328_0304", - "01ED", "006F_0328_0304", - "01EE", "01B7_030C", - "01EF", "0292_030C", - "01F0", "006A_030C", - "01F4", "0047_0301", - "01F5", "0067_0301", - "01F8", "004E_0300", - "01F9", "006E_0300", - "01FA", "0041_030A_0301", - "01FB", "0061_030A_0301", - "01FC", "00C6_0301", - "01FD", "00E6_0301", - "01FE", "00D8_0301", - "01FF", "00F8_0301", - "0200", "0041_030F", - "0201", "0061_030F", - "0202", "0041_0311", - "0203", "0061_0311", - "0204", "0045_030F", - "0205", "0065_030F", - "0206", "0045_0311", - "0207", "0065_0311", - "0208", "0049_030F", - "0209", "0069_030F", - "020A", "0049_0311", - "020B", "0069_0311", - "020C", "004F_030F", - "020D", "006F_030F", - "020E", "004F_0311", - "020F", "006F_0311", - "0210", "0052_030F", - "0211", "0072_030F", - "0212", "0052_0311", - "0213", "0072_0311", - "0214", "0055_030F", - "0215", "0075_030F", - "0216", "0055_0311", - "0217", "0075_0311", - "0218", "0053_0326", - "0219", "0073_0326", - "021A", "0054_0326", - "021B", "0074_0326", - "021E", "0048_030C", - "021F", "0068_030C", - "0226", "0041_0307", - "0227", "0061_0307", - "0228", "0045_0327", - "0229", "0065_0327", - "022A", "004F_0308_0304", - "022B", "006F_0308_0304", - "022C", "004F_0303_0304", - "022D", "006F_0303_0304", - "022E", "004F_0307", - "022F", "006F_0307", - "0230", "004F_0307_0304", - "0231", "006F_0307_0304", - "0232", "0059_0304", - "0233", "0079_0304", - "0340", "0300", - "0341", "0301", - "0343", "0313", - "0344", "0308_0301", - "0374", "02B9", - "037E", "003B", - "0385", "00A8_0301", - "0386", "0391_0301", - "0387", "00B7", - "0388", "0395_0301", - "0389", "0397_0301", - "038A", "0399_0301", - "038C", "039F_0301", - "038E", "03A5_0301", - "038F", "03A9_0301", - "0390", "03B9_0308_0301", - "03AA", "0399_0308", - "03AB", "03A5_0308", - "03AC", "03B1_0301", - "03AD", "03B5_0301", - "03AE", "03B7_0301", - "03AF", "03B9_0301", - "03B0", "03C5_0308_0301", - "03CA", "03B9_0308", - "03CB", "03C5_0308", - "03CC", "03BF_0301", - "03CD", "03C5_0301", - "03CE", "03C9_0301", - "03D3", "03D2_0301", - "03D4", "03D2_0308", - "0400", "0415_0300", - "0401", "0415_0308", - "0403", "0413_0301", - "0407", "0406_0308", - "040C", "041A_0301", - "040D", "0418_0300", - "040E", "0423_0306", - "0419", "0418_0306", - "0439", "0438_0306", - "0450", "0435_0300", - "0451", "0435_0308", - "0453", "0433_0301", - "0457", "0456_0308", - "045C", "043A_0301", - "045D", "0438_0300", - "045E", "0443_0306", - "0476", "0474_030F", - "0477", "0475_030F", - "04C1", "0416_0306", - "04C2", "0436_0306", - "04D0", "0410_0306", - "04D1", "0430_0306", - "04D2", "0410_0308", - "04D3", "0430_0308", - "04D6", "0415_0306", - "04D7", "0435_0306", - "04DA", "04D8_0308", - "04DB", "04D9_0308", - "04DC", "0416_0308", - "04DD", "0436_0308", - "04DE", "0417_0308", - "04DF", "0437_0308", - "04E2", "0418_0304", - "04E3", "0438_0304", - "04E4", "0418_0308", - "04E5", "0438_0308", - "04E6", "041E_0308", - "04E7", "043E_0308", - "04EA", "04E8_0308", - "04EB", "04E9_0308", - "04EC", "042D_0308", - "04ED", "044D_0308", - "04EE", "0423_0304", - "04EF", "0443_0304", - "04F0", "0423_0308", - "04F1", "0443_0308", - "04F2", "0423_030B", - "04F3", "0443_030B", - "04F4", "0427_0308", - "04F5", "0447_0308", - "04F8", "042B_0308", - "04F9", "044B_0308", - "0622", "0627_0653", - "0623", "0627_0654", - "0624", "0648_0654", - "0625", "0627_0655", - "0626", "064A_0654", - "06C0", "06D5_0654", - "06C2", "06C1_0654", - "06D3", "06D2_0654", - "0929", "0928_093C", - "0931", "0930_093C", - "0934", "0933_093C", - "0958", "0915_093C", - "0959", "0916_093C", - "095A", "0917_093C", - "095B", "091C_093C", - "095C", "0921_093C", - "095D", "0922_093C", - "095E", "092B_093C", - "095F", "092F_093C", - "09CB", "09C7_09BE", - "09CC", "09C7_09D7", - "09DC", "09A1_09BC", - "09DD", "09A2_09BC", - "09DF", "09AF_09BC", - "0A33", "0A32_0A3C", - "0A36", "0A38_0A3C", - "0A59", "0A16_0A3C", - "0A5A", "0A17_0A3C", - "0A5B", "0A1C_0A3C", - "0A5E", "0A2B_0A3C", - "0B48", "0B47_0B56", - "0B4B", "0B47_0B3E", - "0B4C", "0B47_0B57", - "0B5C", "0B21_0B3C", - "0B5D", "0B22_0B3C", - "0B94", "0B92_0BD7", - "0BCA", "0BC6_0BBE", - "0BCB", "0BC7_0BBE", - "0BCC", "0BC6_0BD7", - "0C48", "0C46_0C56", - "0CC0", "0CBF_0CD5", - "0CC7", "0CC6_0CD5", - "0CC8", "0CC6_0CD6", - "0CCA", "0CC6_0CC2", - "0CCB", "0CC6_0CC2_0CD5", - "0D4A", "0D46_0D3E", - "0D4B", "0D47_0D3E", - "0D4C", "0D46_0D57", - "0DDA", "0DD9_0DCA", - "0DDC", "0DD9_0DCF", - "0DDD", "0DD9_0DCF_0DCA", - "0DDE", "0DD9_0DDF", - "0F43", "0F42_0FB7", - "0F4D", "0F4C_0FB7", - "0F52", "0F51_0FB7", - "0F57", "0F56_0FB7", - "0F5C", "0F5B_0FB7", - "0F69", "0F40_0FB5", - "0F73", "0F71_0F72", - "0F75", "0F71_0F74", - "0F76", "0FB2_0F80", - "0F78", "0FB3_0F80", - "0F81", "0F71_0F80", - "0F93", "0F92_0FB7", - "0F9D", "0F9C_0FB7", - "0FA2", "0FA1_0FB7", - "0FA7", "0FA6_0FB7", - "0FAC", "0FAB_0FB7", - "0FB9", "0F90_0FB5", - "1026", "1025_102E", - "1E00", "0041_0325", - "1E01", "0061_0325", - "1E02", "0042_0307", - "1E03", "0062_0307", - "1E04", "0042_0323", - "1E05", "0062_0323", - "1E06", "0042_0331", - "1E07", "0062_0331", - "1E08", "0043_0327_0301", - "1E09", "0063_0327_0301", - "1E0A", "0044_0307", - "1E0B", "0064_0307", - "1E0C", "0044_0323", - "1E0D", "0064_0323", - "1E0E", "0044_0331", - "1E0F", "0064_0331", - "1E10", "0044_0327", - "1E11", "0064_0327", - "1E12", "0044_032D", - "1E13", "0064_032D", - "1E14", "0045_0304_0300", - "1E15", "0065_0304_0300", - "1E16", "0045_0304_0301", - "1E17", "0065_0304_0301", - "1E18", "0045_032D", - "1E19", "0065_032D", - "1E1A", "0045_0330", - "1E1B", "0065_0330", - "1E1C", "0045_0327_0306", - "1E1D", "0065_0327_0306", - "1E1E", "0046_0307", - "1E1F", "0066_0307", - "1E20", "0047_0304", - "1E21", "0067_0304", - "1E22", "0048_0307", - "1E23", "0068_0307", - "1E24", "0048_0323", - "1E25", "0068_0323", - "1E26", "0048_0308", - "1E27", "0068_0308", - "1E28", "0048_0327", - "1E29", "0068_0327", - "1E2A", "0048_032E", - "1E2B", "0068_032E", - "1E2C", "0049_0330", - "1E2D", "0069_0330", - "1E2E", "0049_0308_0301", - "1E2F", "0069_0308_0301", - "1E30", "004B_0301", - "1E31", "006B_0301", - "1E32", "004B_0323", - "1E33", "006B_0323", - "1E34", "004B_0331", - "1E35", "006B_0331", - "1E36", "004C_0323", - "1E37", "006C_0323", - "1E38", "004C_0323_0304", - "1E39", "006C_0323_0304", - "1E3A", "004C_0331", - "1E3B", "006C_0331", - "1E3C", "004C_032D", - "1E3D", "006C_032D", - "1E3E", "004D_0301", - "1E3F", "006D_0301", - "1E40", "004D_0307", - "1E41", "006D_0307", - "1E42", "004D_0323", - "1E43", "006D_0323", - "1E44", "004E_0307", - "1E45", "006E_0307", - "1E46", "004E_0323", - "1E47", "006E_0323", - "1E48", "004E_0331", - "1E49", "006E_0331", - "1E4A", "004E_032D", - "1E4B", "006E_032D", - "1E4C", "004F_0303_0301", - "1E4D", "006F_0303_0301", - "1E4E", "004F_0303_0308", - "1E4F", "006F_0303_0308", - "1E50", "004F_0304_0300", - "1E51", "006F_0304_0300", - "1E52", "004F_0304_0301", - "1E53", "006F_0304_0301", - "1E54", "0050_0301", - "1E55", "0070_0301", - "1E56", "0050_0307", - "1E57", "0070_0307", - "1E58", "0052_0307", - "1E59", "0072_0307", - "1E5A", "0052_0323", - "1E5B", "0072_0323", - "1E5C", "0052_0323_0304", - "1E5D", "0072_0323_0304", - "1E5E", "0052_0331", - "1E5F", "0072_0331", - "1E60", "0053_0307", - "1E61", "0073_0307", - "1E62", "0053_0323", - "1E63", "0073_0323", - "1E64", "0053_0301_0307", - "1E65", "0073_0301_0307", - "1E66", "0053_030C_0307", - "1E67", "0073_030C_0307", - "1E68", "0053_0323_0307", - "1E69", "0073_0323_0307", - "1E6A", "0054_0307", - "1E6B", "0074_0307", - "1E6C", "0054_0323", - "1E6D", "0074_0323", - "1E6E", "0054_0331", - "1E6F", "0074_0331", - "1E70", "0054_032D", - "1E71", "0074_032D", - "1E72", "0055_0324", - "1E73", "0075_0324", - "1E74", "0055_0330", - "1E75", "0075_0330", - "1E76", "0055_032D", - "1E77", "0075_032D", - "1E78", "0055_0303_0301", - "1E79", "0075_0303_0301", - "1E7A", "0055_0304_0308", - "1E7B", "0075_0304_0308", - "1E7C", "0056_0303", - "1E7D", "0076_0303", - "1E7E", "0056_0323", - "1E7F", "0076_0323", - "1E80", "0057_0300", - "1E81", "0077_0300", - "1E82", "0057_0301", - "1E83", "0077_0301", - "1E84", "0057_0308", - "1E85", "0077_0308", - "1E86", "0057_0307", - "1E87", "0077_0307", - "1E88", "0057_0323", - "1E89", "0077_0323", - "1E8A", "0058_0307", - "1E8B", "0078_0307", - "1E8C", "0058_0308", - "1E8D", "0078_0308", - "1E8E", "0059_0307", - "1E8F", "0079_0307", - "1E90", "005A_0302", - "1E91", "007A_0302", - "1E92", "005A_0323", - "1E93", "007A_0323", - "1E94", "005A_0331", - "1E95", "007A_0331", - "1E96", "0068_0331", - "1E97", "0074_0308", - "1E98", "0077_030A", - "1E99", "0079_030A", - "1E9B", "017F_0307", - "1EA0", "0041_0323", - "1EA1", "0061_0323", - "1EA2", "0041_0309", - "1EA3", "0061_0309", - "1EA4", "0041_0302_0301", - "1EA5", "0061_0302_0301", - "1EA6", "0041_0302_0300", - "1EA7", "0061_0302_0300", - "1EA8", "0041_0302_0309", - "1EA9", "0061_0302_0309", - "1EAA", "0041_0302_0303", - "1EAB", "0061_0302_0303", - "1EAC", "0041_0323_0302", - "1EAD", "0061_0323_0302", - "1EAE", "0041_0306_0301", - "1EAF", "0061_0306_0301", - "1EB0", "0041_0306_0300", - "1EB1", "0061_0306_0300", - "1EB2", "0041_0306_0309", - "1EB3", "0061_0306_0309", - "1EB4", "0041_0306_0303", - "1EB5", "0061_0306_0303", - "1EB6", "0041_0323_0306", - "1EB7", "0061_0323_0306", - "1EB8", "0045_0323", - "1EB9", "0065_0323", - "1EBA", "0045_0309", - "1EBB", "0065_0309", - "1EBC", "0045_0303", - "1EBD", "0065_0303", - "1EBE", "0045_0302_0301", - "1EBF", "0065_0302_0301", - "1EC0", "0045_0302_0300", - "1EC1", "0065_0302_0300", - "1EC2", "0045_0302_0309", - "1EC3", "0065_0302_0309", - "1EC4", "0045_0302_0303", - "1EC5", "0065_0302_0303", - "1EC6", "0045_0323_0302", - "1EC7", "0065_0323_0302", - "1EC8", "0049_0309", - "1EC9", "0069_0309", - "1ECA", "0049_0323", - "1ECB", "0069_0323", - "1ECC", "004F_0323", - "1ECD", "006F_0323", - "1ECE", "004F_0309", - "1ECF", "006F_0309", - "1ED0", "004F_0302_0301", - "1ED1", "006F_0302_0301", - "1ED2", "004F_0302_0300", - "1ED3", "006F_0302_0300", - "1ED4", "004F_0302_0309", - "1ED5", "006F_0302_0309", - "1ED6", "004F_0302_0303", - "1ED7", "006F_0302_0303", - "1ED8", "004F_0323_0302", - "1ED9", "006F_0323_0302", - "1EDA", "004F_031B_0301", - "1EDB", "006F_031B_0301", - "1EDC", "004F_031B_0300", - "1EDD", "006F_031B_0300", - "1EDE", "004F_031B_0309", - "1EDF", "006F_031B_0309", - "1EE0", "004F_031B_0303", - "1EE1", "006F_031B_0303", - "1EE2", "004F_031B_0323", - "1EE3", "006F_031B_0323", - "1EE4", "0055_0323", - "1EE5", "0075_0323", - "1EE6", "0055_0309", - "1EE7", "0075_0309", - "1EE8", "0055_031B_0301", - "1EE9", "0075_031B_0301", - "1EEA", "0055_031B_0300", - "1EEB", "0075_031B_0300", - "1EEC", "0055_031B_0309", - "1EED", "0075_031B_0309", - "1EEE", "0055_031B_0303", - "1EEF", "0075_031B_0303", - "1EF0", "0055_031B_0323", - "1EF1", "0075_031B_0323", - "1EF2", "0059_0300", - "1EF3", "0079_0300", - "1EF4", "0059_0323", - "1EF5", "0079_0323", - "1EF6", "0059_0309", - "1EF7", "0079_0309", - "1EF8", "0059_0303", - "1EF9", "0079_0303", - "1F00", "03B1_0313", - "1F01", "03B1_0314", - "1F02", "03B1_0313_0300", - "1F03", "03B1_0314_0300", - "1F04", "03B1_0313_0301", - "1F05", "03B1_0314_0301", - "1F06", "03B1_0313_0342", - "1F07", "03B1_0314_0342", - "1F08", "0391_0313", - "1F09", "0391_0314", - "1F0A", "0391_0313_0300", - "1F0B", "0391_0314_0300", - "1F0C", "0391_0313_0301", - "1F0D", "0391_0314_0301", - "1F0E", "0391_0313_0342", - "1F0F", "0391_0314_0342", - "1F10", "03B5_0313", - "1F11", "03B5_0314", - "1F12", "03B5_0313_0300", - "1F13", "03B5_0314_0300", - "1F14", "03B5_0313_0301", - "1F15", "03B5_0314_0301", - "1F18", "0395_0313", - "1F19", "0395_0314", - "1F1A", "0395_0313_0300", - "1F1B", "0395_0314_0300", - "1F1C", "0395_0313_0301", - "1F1D", "0395_0314_0301", - "1F20", "03B7_0313", - "1F21", "03B7_0314", - "1F22", "03B7_0313_0300", - "1F23", "03B7_0314_0300", - "1F24", "03B7_0313_0301", - "1F25", "03B7_0314_0301", - "1F26", "03B7_0313_0342", - "1F27", "03B7_0314_0342", - "1F28", "0397_0313", - "1F29", "0397_0314", - "1F2A", "0397_0313_0300", - "1F2B", "0397_0314_0300", - "1F2C", "0397_0313_0301", - "1F2D", "0397_0314_0301", - "1F2E", "0397_0313_0342", - "1F2F", "0397_0314_0342", - "1F30", "03B9_0313", - "1F31", "03B9_0314", - "1F32", "03B9_0313_0300", - "1F33", "03B9_0314_0300", - "1F34", "03B9_0313_0301", - "1F35", "03B9_0314_0301", - "1F36", "03B9_0313_0342", - "1F37", "03B9_0314_0342", - "1F38", "0399_0313", - "1F39", "0399_0314", - "1F3A", "0399_0313_0300", - "1F3B", "0399_0314_0300", - "1F3C", "0399_0313_0301", - "1F3D", "0399_0314_0301", - "1F3E", "0399_0313_0342", - "1F3F", "0399_0314_0342", - "1F40", "03BF_0313", - "1F41", "03BF_0314", - "1F42", "03BF_0313_0300", - "1F43", "03BF_0314_0300", - "1F44", "03BF_0313_0301", - "1F45", "03BF_0314_0301", - "1F48", "039F_0313", - "1F49", "039F_0314", - "1F4A", "039F_0313_0300", - "1F4B", "039F_0314_0300", - "1F4C", "039F_0313_0301", - "1F4D", "039F_0314_0301", - "1F50", "03C5_0313", - "1F51", "03C5_0314", - "1F52", "03C5_0313_0300", - "1F53", "03C5_0314_0300", - "1F54", "03C5_0313_0301", - "1F55", "03C5_0314_0301", - "1F56", "03C5_0313_0342", - "1F57", "03C5_0314_0342", - "1F59", "03A5_0314", - "1F5B", "03A5_0314_0300", - "1F5D", "03A5_0314_0301", - "1F5F", "03A5_0314_0342", - "1F60", "03C9_0313", - "1F61", "03C9_0314", - "1F62", "03C9_0313_0300", - "1F63", "03C9_0314_0300", - "1F64", "03C9_0313_0301", - "1F65", "03C9_0314_0301", - "1F66", "03C9_0313_0342", - "1F67", "03C9_0314_0342", - "1F68", "03A9_0313", - "1F69", "03A9_0314", - "1F6A", "03A9_0313_0300", - "1F6B", "03A9_0314_0300", - "1F6C", "03A9_0313_0301", - "1F6D", "03A9_0314_0301", - "1F6E", "03A9_0313_0342", - "1F6F", "03A9_0314_0342", - "1F70", "03B1_0300", - "1F71", "03B1_0301", - "1F72", "03B5_0300", - "1F73", "03B5_0301", - "1F74", "03B7_0300", - "1F75", "03B7_0301", - "1F76", "03B9_0300", - "1F77", "03B9_0301", - "1F78", "03BF_0300", - "1F79", "03BF_0301", - "1F7A", "03C5_0300", - "1F7B", "03C5_0301", - "1F7C", "03C9_0300", - "1F7D", "03C9_0301", - "1F80", "03B1_0313_0345", - "1F81", "03B1_0314_0345", - "1F82", "03B1_0313_0300_0345", - "1F83", "03B1_0314_0300_0345", - "1F84", "03B1_0313_0301_0345", - "1F85", "03B1_0314_0301_0345", - "1F86", "03B1_0313_0342_0345", - "1F87", "03B1_0314_0342_0345", - "1F88", "0391_0313_0345", - "1F89", "0391_0314_0345", - "1F8A", "0391_0313_0300_0345", - "1F8B", "0391_0314_0300_0345", - "1F8C", "0391_0313_0301_0345", - "1F8D", "0391_0314_0301_0345", - "1F8E", "0391_0313_0342_0345", - "1F8F", "0391_0314_0342_0345", - "1F90", "03B7_0313_0345", - "1F91", "03B7_0314_0345", - "1F92", "03B7_0313_0300_0345", - "1F93", "03B7_0314_0300_0345", - "1F94", "03B7_0313_0301_0345", - "1F95", "03B7_0314_0301_0345", - "1F96", "03B7_0313_0342_0345", - "1F97", "03B7_0314_0342_0345", - "1F98", "0397_0313_0345", - "1F99", "0397_0314_0345", - "1F9A", "0397_0313_0300_0345", - "1F9B", "0397_0314_0300_0345", - "1F9C", "0397_0313_0301_0345", - "1F9D", "0397_0314_0301_0345", - "1F9E", "0397_0313_0342_0345", - "1F9F", "0397_0314_0342_0345", - "1FA0", "03C9_0313_0345", - "1FA1", "03C9_0314_0345", - "1FA2", "03C9_0313_0300_0345", - "1FA3", "03C9_0314_0300_0345", - "1FA4", "03C9_0313_0301_0345", - "1FA5", "03C9_0314_0301_0345", - "1FA6", "03C9_0313_0342_0345", - "1FA7", "03C9_0314_0342_0345", - "1FA8", "03A9_0313_0345", - "1FA9", "03A9_0314_0345", - "1FAA", "03A9_0313_0300_0345", - "1FAB", "03A9_0314_0300_0345", - "1FAC", "03A9_0313_0301_0345", - "1FAD", "03A9_0314_0301_0345", - "1FAE", "03A9_0313_0342_0345", - "1FAF", "03A9_0314_0342_0345", - "1FB0", "03B1_0306", - "1FB1", "03B1_0304", - "1FB2", "03B1_0300_0345", - "1FB3", "03B1_0345", - "1FB4", "03B1_0301_0345", - "1FB6", "03B1_0342", - "1FB7", "03B1_0342_0345", - "1FB8", "0391_0306", - "1FB9", "0391_0304", - "1FBA", "0391_0300", - "1FBB", "0391_0301", - "1FBC", "0391_0345", - "1FBE", "03B9", - "1FC1", "00A8_0342", - "1FC2", "03B7_0300_0345", - "1FC3", "03B7_0345", - "1FC4", "03B7_0301_0345", - "1FC6", "03B7_0342", - "1FC7", "03B7_0342_0345", - "1FC8", "0395_0300", - "1FC9", "0395_0301", - "1FCA", "0397_0300", - "1FCB", "0397_0301", - "1FCC", "0397_0345", - "1FCD", "1FBF_0300", - "1FCE", "1FBF_0301", - "1FCF", "1FBF_0342", - "1FD0", "03B9_0306", - "1FD1", "03B9_0304", - "1FD2", "03B9_0308_0300", - "1FD3", "03B9_0308_0301", - "1FD6", "03B9_0342", - "1FD7", "03B9_0308_0342", - "1FD8", "0399_0306", - "1FD9", "0399_0304", - "1FDA", "0399_0300", - "1FDB", "0399_0301", - "1FDD", "1FFE_0300", - "1FDE", "1FFE_0301", - "1FDF", "1FFE_0342", - "1FE0", "03C5_0306", - "1FE1", "03C5_0304", - "1FE2", "03C5_0308_0300", - "1FE3", "03C5_0308_0301", - "1FE4", "03C1_0313", - "1FE5", "03C1_0314", - "1FE6", "03C5_0342", - "1FE7", "03C5_0308_0342", - "1FE8", "03A5_0306", - "1FE9", "03A5_0304", - "1FEA", "03A5_0300", - "1FEB", "03A5_0301", - "1FEC", "03A1_0314", - "1FED", "00A8_0300", - "1FEE", "00A8_0301", - "1FEF", "0060", - "1FF2", "03C9_0300_0345", - "1FF3", "03C9_0345", - "1FF4", "03C9_0301_0345", - "1FF6", "03C9_0342", - "1FF7", "03C9_0342_0345", - "1FF8", "039F_0300", - "1FF9", "039F_0301", - "1FFA", "03A9_0300", - "1FFB", "03A9_0301", - "1FFC", "03A9_0345", - "1FFD", "00B4", - "2000", "2002", - "2001", "2003", - "2126", "03A9", - "212A", "004B", - "212B", "0041_030A", - "219A", "2190_0338", - "219B", "2192_0338", - "21AE", "2194_0338", - "21CD", "21D0_0338", - "21CE", "21D4_0338", - "21CF", "21D2_0338", - "2204", "2203_0338", - "2209", "2208_0338", - "220C", "220B_0338", - "2224", "2223_0338", - "2226", "2225_0338", - "2241", "223C_0338", - "2244", "2243_0338", - "2247", "2245_0338", - "2249", "2248_0338", - "2260", "003D_0338", - "2262", "2261_0338", - "226D", "224D_0338", - "226E", "003C_0338", - "226F", "003E_0338", - "2270", "2264_0338", - "2271", "2265_0338", - "2274", "2272_0338", - "2275", "2273_0338", - "2278", "2276_0338", - "2279", "2277_0338", - "2280", "227A_0338", - "2281", "227B_0338", - "2284", "2282_0338", - "2285", "2283_0338", - "2288", "2286_0338", - "2289", "2287_0338", - "22AC", "22A2_0338", - "22AD", "22A8_0338", - "22AE", "22A9_0338", - "22AF", "22AB_0338", - "22E0", "227C_0338", - "22E1", "227D_0338", - "22E2", "2291_0338", - "22E3", "2292_0338", - "22EA", "22B2_0338", - "22EB", "22B3_0338", - "22EC", "22B4_0338", - "22ED", "22B5_0338", - "2329", "3008", - "232A", "3009", - "2ADC", "2ADD_0338", - "304C", "304B_3099", - "304E", "304D_3099", - "3050", "304F_3099", - "3052", "3051_3099", - "3054", "3053_3099", - "3056", "3055_3099", - "3058", "3057_3099", - "305A", "3059_3099", - "305C", "305B_3099", - "305E", "305D_3099", - "3060", "305F_3099", - "3062", "3061_3099", - "3065", "3064_3099", - "3067", "3066_3099", - "3069", "3068_3099", - "3070", "306F_3099", - "3071", "306F_309A", - "3073", "3072_3099", - "3074", "3072_309A", - "3076", "3075_3099", - "3077", "3075_309A", - "3079", "3078_3099", - "307A", "3078_309A", - "307C", "307B_3099", - "307D", "307B_309A", - "3094", "3046_3099", - "309E", "309D_3099", - "30AC", "30AB_3099", - "30AE", "30AD_3099", - "30B0", "30AF_3099", - "30B2", "30B1_3099", - "30B4", "30B3_3099", - "30B6", "30B5_3099", - "30B8", "30B7_3099", - "30BA", "30B9_3099", - "30BC", "30BB_3099", - "30BE", "30BD_3099", - "30C0", "30BF_3099", - "30C2", "30C1_3099", - "30C5", "30C4_3099", - "30C7", "30C6_3099", - "30C9", "30C8_3099", - "30D0", "30CF_3099", - "30D1", "30CF_309A", - "30D3", "30D2_3099", - "30D4", "30D2_309A", - "30D6", "30D5_3099", - "30D7", "30D5_309A", - "30D9", "30D8_3099", - "30DA", "30D8_309A", - "30DC", "30DB_3099", - "30DD", "30DB_309A", - "30F4", "30A6_3099", - "30F7", "30EF_3099", - "30F8", "30F0_3099", - "30F9", "30F1_3099", - "30FA", "30F2_3099", - "30FE", "30FD_3099", - "F900", "8C48", - "F901", "66F4", - "F902", "8ECA", - "F903", "8CC8", - "F904", "6ED1", - "F905", "4E32", - "F906", "53E5", - "F907", "9F9C", - "F908", "9F9C", - "F909", "5951", - "F90A", "91D1", - "F90B", "5587", - "F90C", "5948", - "F90D", "61F6", - "F90E", "7669", - "F90F", "7F85", - "F910", "863F", - "F911", "87BA", - "F912", "88F8", - "F913", "908F", - "F914", "6A02", - "F915", "6D1B", - "F916", "70D9", - "F917", "73DE", - "F918", "843D", - "F919", "916A", - "F91A", "99F1", - "F91B", "4E82", - "F91C", "5375", - "F91D", "6B04", - "F91E", "721B", - "F91F", "862D", - "F920", "9E1E", - "F921", "5D50", - "F922", "6FEB", - "F923", "85CD", - "F924", "8964", - "F925", "62C9", - "F926", "81D8", - "F927", "881F", - "F928", "5ECA", - "F929", "6717", - "F92A", "6D6A", - "F92B", "72FC", - "F92C", "90CE", - "F92D", "4F86", - "F92E", "51B7", - "F92F", "52DE", - "F930", "64C4", - "F931", "6AD3", - "F932", "7210", - "F933", "76E7", - "F934", "8001", - "F935", "8606", - "F936", "865C", - "F937", "8DEF", - "F938", "9732", - "F939", "9B6F", - "F93A", "9DFA", - "F93B", "788C", - "F93C", "797F", - "F93D", "7DA0", - "F93E", "83C9", - "F93F", "9304", - "F940", "9E7F", - "F941", "8AD6", - "F942", "58DF", - "F943", "5F04", - "F944", "7C60", - "F945", "807E", - "F946", "7262", - "F947", "78CA", - "F948", "8CC2", - "F949", "96F7", - "F94A", "58D8", - "F94B", "5C62", - "F94C", "6A13", - "F94D", "6DDA", - "F94E", "6F0F", - "F94F", "7D2F", - "F950", "7E37", - "F951", "964B", - "F952", "52D2", - "F953", "808B", - "F954", "51DC", - "F955", "51CC", - "F956", "7A1C", - "F957", "7DBE", - "F958", "83F1", - "F959", "9675", - "F95A", "8B80", - "F95B", "62CF", - "F95C", "6A02", - "F95D", "8AFE", - "F95E", "4E39", - "F95F", "5BE7", - "F960", "6012", - "F961", "7387", - "F962", "7570", - "F963", "5317", - "F964", "78FB", - "F965", "4FBF", - "F966", "5FA9", - "F967", "4E0D", - "F968", "6CCC", - "F969", "6578", - "F96A", "7D22", - "F96B", "53C3", - "F96C", "585E", - "F96D", "7701", - "F96E", "8449", - "F96F", "8AAA", - "F970", "6BBA", - "F971", "8FB0", - "F972", "6C88", - "F973", "62FE", - "F974", "82E5", - "F975", "63A0", - "F976", "7565", - "F977", "4EAE", - "F978", "5169", - "F979", "51C9", - "F97A", "6881", - "F97B", "7CE7", - "F97C", "826F", - "F97D", "8AD2", - "F97E", "91CF", - "F97F", "52F5", - "F980", "5442", - "F981", "5973", - "F982", "5EEC", - "F983", "65C5", - "F984", "6FFE", - "F985", "792A", - "F986", "95AD", - "F987", "9A6A", - "F988", "9E97", - "F989", "9ECE", - "F98A", "529B", - "F98B", "66C6", - "F98C", "6B77", - "F98D", "8F62", - "F98E", "5E74", - "F98F", "6190", - "F990", "6200", - "F991", "649A", - "F992", "6F23", - "F993", "7149", - "F994", "7489", - "F995", "79CA", - "F996", "7DF4", - "F997", "806F", - "F998", "8F26", - "F999", "84EE", - "F99A", "9023", - "F99B", "934A", - "F99C", "5217", - "F99D", "52A3", - "F99E", "54BD", - "F99F", "70C8", - "F9A0", "88C2", - "F9A1", "8AAA", - "F9A2", "5EC9", - "F9A3", "5FF5", - "F9A4", "637B", - "F9A5", "6BAE", - "F9A6", "7C3E", - "F9A7", "7375", - "F9A8", "4EE4", - "F9A9", "56F9", - "F9AA", "5BE7", - "F9AB", "5DBA", - "F9AC", "601C", - "F9AD", "73B2", - "F9AE", "7469", - "F9AF", "7F9A", - "F9B0", "8046", - "F9B1", "9234", - "F9B2", "96F6", - "F9B3", "9748", - "F9B4", "9818", - "F9B5", "4F8B", - "F9B6", "79AE", - "F9B7", "91B4", - "F9B8", "96B8", - "F9B9", "60E1", - "F9BA", "4E86", - "F9BB", "50DA", - "F9BC", "5BEE", - "F9BD", "5C3F", - "F9BE", "6599", - "F9BF", "6A02", - "F9C0", "71CE", - "F9C1", "7642", - "F9C2", "84FC", - "F9C3", "907C", - "F9C4", "9F8D", - "F9C5", "6688", - "F9C6", "962E", - "F9C7", "5289", - "F9C8", "677B", - "F9C9", "67F3", - "F9CA", "6D41", - "F9CB", "6E9C", - "F9CC", "7409", - "F9CD", "7559", - "F9CE", "786B", - "F9CF", "7D10", - "F9D0", "985E", - "F9D1", "516D", - "F9D2", "622E", - "F9D3", "9678", - "F9D4", "502B", - "F9D5", "5D19", - "F9D6", "6DEA", - "F9D7", "8F2A", - "F9D8", "5F8B", - "F9D9", "6144", - "F9DA", "6817", - "F9DB", "7387", - "F9DC", "9686", - "F9DD", "5229", - "F9DE", "540F", - "F9DF", "5C65", - "F9E0", "6613", - "F9E1", "674E", - "F9E2", "68A8", - "F9E3", "6CE5", - "F9E4", "7406", - "F9E5", "75E2", - "F9E6", "7F79", - "F9E7", "88CF", - "F9E8", "88E1", - "F9E9", "91CC", - "F9EA", "96E2", - "F9EB", "533F", - "F9EC", "6EBA", - "F9ED", "541D", - "F9EE", "71D0", - "F9EF", "7498", - "F9F0", "85FA", - "F9F1", "96A3", - "F9F2", "9C57", - "F9F3", "9E9F", - "F9F4", "6797", - "F9F5", "6DCB", - "F9F6", "81E8", - "F9F7", "7ACB", - "F9F8", "7B20", - "F9F9", "7C92", - "F9FA", "72C0", - "F9FB", "7099", - "F9FC", "8B58", - "F9FD", "4EC0", - "F9FE", "8336", - "F9FF", "523A", - "FA00", "5207", - "FA01", "5EA6", - "FA02", "62D3", - "FA03", "7CD6", - "FA04", "5B85", - "FA05", "6D1E", - "FA06", "66B4", - "FA07", "8F3B", - "FA08", "884C", - "FA09", "964D", - "FA0A", "898B", - "FA0B", "5ED3", - "FA0C", "5140", - "FA0D", "55C0", - "FA10", "585A", - "FA12", "6674", - "FA15", "51DE", - "FA16", "732A", - "FA17", "76CA", - "FA18", "793C", - "FA19", "795E", - "FA1A", "7965", - "FA1B", "798F", - "FA1C", "9756", - "FA1D", "7CBE", - "FA1E", "7FBD", - "FA20", "8612", - "FA22", "8AF8", - "FA25", "9038", - "FA26", "90FD", - "FA2A", "98EF", - "FA2B", "98FC", - "FA2C", "9928", - "FA2D", "9DB4", - "FA30", "4FAE", - "FA31", "50E7", - "FA32", "514D", - "FA33", "52C9", - "FA34", "52E4", - "FA35", "5351", - "FA36", "559D", - "FA37", "5606", - "FA38", "5668", - "FA39", "5840", - "FA3A", "58A8", - "FA3B", "5C64", - "FA3C", "5C6E", - "FA3D", "6094", - "FA3E", "6168", - "FA3F", "618E", - "FA40", "61F2", - "FA41", "654F", - "FA42", "65E2", - "FA43", "6691", - "FA44", "6885", - "FA45", "6D77", - "FA46", "6E1A", - "FA47", "6F22", - "FA48", "716E", - "FA49", "722B", - "FA4A", "7422", - "FA4B", "7891", - "FA4C", "793E", - "FA4D", "7949", - "FA4E", "7948", - "FA4F", "7950", - "FA50", "7956", - "FA51", "795D", - "FA52", "798D", - "FA53", "798E", - "FA54", "7A40", - "FA55", "7A81", - "FA56", "7BC0", - "FA57", "7DF4", - "FA58", "7E09", - "FA59", "7E41", - "FA5A", "7F72", - "FA5B", "8005", - "FA5C", "81ED", - "FA5D", "8279", - "FA5E", "8279", - "FA5F", "8457", - "FA60", "8910", - "FA61", "8996", - "FA62", "8B01", - "FA63", "8B39", - "FA64", "8CD3", - "FA65", "8D08", - "FA66", "8FB6", - "FA67", "9038", - "FA68", "96E3", - "FA69", "97FF", - "FA6A", "983B", - "FB1D", "05D9_05B4", - "FB1F", "05F2_05B7", - "FB2A", "05E9_05C1", - "FB2B", "05E9_05C2", - "FB2C", "05E9_05BC_05C1", - "FB2D", "05E9_05BC_05C2", - "FB2E", "05D0_05B7", - "FB2F", "05D0_05B8", - "FB30", "05D0_05BC", - "FB31", "05D1_05BC", - "FB32", "05D2_05BC", - "FB33", "05D3_05BC", - "FB34", "05D4_05BC", - "FB35", "05D5_05BC", - "FB36", "05D6_05BC", - "FB38", "05D8_05BC", - "FB39", "05D9_05BC", - "FB3A", "05DA_05BC", - "FB3B", "05DB_05BC", - "FB3C", "05DC_05BC", - "FB3E", "05DE_05BC", - "FB40", "05E0_05BC", - "FB41", "05E1_05BC", - "FB43", "05E3_05BC", - "FB44", "05E4_05BC", - "FB46", "05E6_05BC", - "FB47", "05E7_05BC", - "FB48", "05E8_05BC", - "FB49", "05E9_05BC", - "FB4A", "05EA_05BC", - "FB4B", "05D5_05B9", - "FB4C", "05D1_05BF", - "FB4D", "05DB_05BF", - "FB4E", "05E4_05BF", - "1D15E", "1D157_1D165", - "1D15F", "1D158_1D165", - "1D160", "1D158_1D165_1D16E", - "1D161", "1D158_1D165_1D16F", - "1D162", "1D158_1D165_1D170", - "1D163", "1D158_1D165_1D171", - "1D164", "1D158_1D165_1D172", - "1D1BB", "1D1B9_1D165", - "1D1BC", "1D1BA_1D165", - "1D1BD", "1D1B9_1D165_1D16E", - "1D1BE", "1D1BA_1D165_1D16E", - "1D1BF", "1D1B9_1D165_1D16F", - "1D1C0", "1D1BA_1D165_1D16F", - "2F800", "4E3D", - "2F801", "4E38", - "2F802", "4E41", - "2F803", "20122", - "2F804", "4F60", - "2F805", "4FAE", - "2F806", "4FBB", - "2F807", "5002", - "2F808", "507A", - "2F809", "5099", - "2F80A", "50E7", - "2F80B", "50CF", - "2F80C", "349E", - "2F80D", "2063A", - "2F80E", "514D", - "2F80F", "5154", - "2F810", "5164", - "2F811", "5177", - "2F812", "2051C", - "2F813", "34B9", - "2F814", "5167", - "2F815", "518D", - "2F816", "2054B", - "2F817", "5197", - "2F818", "51A4", - "2F819", "4ECC", - "2F81A", "51AC", - "2F81B", "51B5", - "2F81C", "291DF", - "2F81D", "51F5", - "2F81E", "5203", - "2F81F", "34DF", - "2F820", "523B", - "2F821", "5246", - "2F822", "5272", - "2F823", "5277", - "2F824", "3515", - "2F825", "52C7", - "2F826", "52C9", - "2F827", "52E4", - "2F828", "52FA", - "2F829", "5305", - "2F82A", "5306", - "2F82B", "5317", - "2F82C", "5349", - "2F82D", "5351", - "2F82E", "535A", - "2F82F", "5373", - "2F830", "537D", - "2F831", "537F", - "2F832", "537F", - "2F833", "537F", - "2F834", "20A2C", - "2F835", "7070", - "2F836", "53CA", - "2F837", "53DF", - "2F838", "20B63", - "2F839", "53EB", - "2F83A", "53F1", - "2F83B", "5406", - "2F83C", "549E", - "2F83D", "5438", - "2F83E", "5448", - "2F83F", "5468", - "2F840", "54A2", - "2F841", "54F6", - "2F842", "5510", - "2F843", "5553", - "2F844", "5563", - "2F845", "5584", - "2F846", "5584", - "2F847", "5599", - "2F848", "55AB", - "2F849", "55B3", - "2F84A", "55C2", - "2F84B", "5716", - "2F84C", "5606", - "2F84D", "5717", - "2F84E", "5651", - "2F84F", "5674", - "2F850", "5207", - "2F851", "58EE", - "2F852", "57CE", - "2F853", "57F4", - "2F854", "580D", - "2F855", "578B", - "2F856", "5832", - "2F857", "5831", - "2F858", "58AC", - "2F859", "214E4", - "2F85A", "58F2", - "2F85B", "58F7", - "2F85C", "5906", - "2F85D", "591A", - "2F85E", "5922", - "2F85F", "5962", - "2F860", "216A8", - "2F861", "216EA", - "2F862", "59EC", - "2F863", "5A1B", - "2F864", "5A27", - "2F865", "59D8", - "2F866", "5A66", - "2F867", "36EE", - "2F868", "2136A", - "2F869", "5B08", - "2F86A", "5B3E", - "2F86B", "5B3E", - "2F86C", "219C8", - "2F86D", "5BC3", - "2F86E", "5BD8", - "2F86F", "5BE7", - "2F870", "5BF3", - "2F871", "21B18", - "2F872", "5BFF", - "2F873", "5C06", - "2F874", "5F33", - "2F875", "5C22", - "2F876", "3781", - "2F877", "5C60", - "2F878", "5C6E", - "2F879", "5CC0", - "2F87A", "5C8D", - "2F87B", "21DE4", - "2F87C", "5D43", - "2F87D", "21DE6", - "2F87E", "5D6E", - "2F87F", "5D6B", - "2F880", "5D7C", - "2F881", "5DE1", - "2F882", "5DE2", - "2F883", "382F", - "2F884", "5DFD", - "2F885", "5E28", - "2F886", "5E3D", - "2F887", "5E69", - "2F888", "3862", - "2F889", "22183", - "2F88A", "387C", - "2F88B", "5EB0", - "2F88C", "5EB3", - "2F88D", "5EB6", - "2F88E", "5ECA", - "2F88F", "2A392", - "2F890", "5EFE", - "2F891", "22331", - "2F892", "22331", - "2F893", "8201", - "2F894", "5F22", - "2F895", "5F22", - "2F896", "38C7", - "2F897", "232B8", - "2F898", "261DA", - "2F899", "5F62", - "2F89A", "5F6B", - "2F89B", "38E3", - "2F89C", "5F9A", - "2F89D", "5FCD", - "2F89E", "5FD7", - "2F89F", "5FF9", - "2F8A0", "6081", - "2F8A1", "393A", - "2F8A2", "391C", - "2F8A3", "6094", - "2F8A4", "226D4", - "2F8A5", "60C7", - "2F8A6", "6148", - "2F8A7", "614C", - "2F8A8", "614E", - "2F8A9", "614C", - "2F8AA", "617A", - "2F8AB", "618E", - "2F8AC", "61B2", - "2F8AD", "61A4", - "2F8AE", "61AF", - "2F8AF", "61DE", - "2F8B0", "61F2", - "2F8B1", "61F6", - "2F8B2", "6210", - "2F8B3", "621B", - "2F8B4", "625D", - "2F8B5", "62B1", - "2F8B6", "62D4", - "2F8B7", "6350", - "2F8B8", "22B0C", - "2F8B9", "633D", - "2F8BA", "62FC", - "2F8BB", "6368", - "2F8BC", "6383", - "2F8BD", "63E4", - "2F8BE", "22BF1", - "2F8BF", "6422", - "2F8C0", "63C5", - "2F8C1", "63A9", - "2F8C2", "3A2E", - "2F8C3", "6469", - "2F8C4", "647E", - "2F8C5", "649D", - "2F8C6", "6477", - "2F8C7", "3A6C", - "2F8C8", "654F", - "2F8C9", "656C", - "2F8CA", "2300A", - "2F8CB", "65E3", - "2F8CC", "66F8", - "2F8CD", "6649", - "2F8CE", "3B19", - "2F8CF", "6691", - "2F8D0", "3B08", - "2F8D1", "3AE4", - "2F8D2", "5192", - "2F8D3", "5195", - "2F8D4", "6700", - "2F8D5", "669C", - "2F8D6", "80AD", - "2F8D7", "43D9", - "2F8D8", "6717", - "2F8D9", "671B", - "2F8DA", "6721", - "2F8DB", "675E", - "2F8DC", "6753", - "2F8DD", "233C3", - "2F8DE", "3B49", - "2F8DF", "67FA", - "2F8E0", "6785", - "2F8E1", "6852", - "2F8E2", "6885", - "2F8E3", "2346D", - "2F8E4", "688E", - "2F8E5", "681F", - "2F8E6", "6914", - "2F8E7", "3B9D", - "2F8E8", "6942", - "2F8E9", "69A3", - "2F8EA", "69EA", - "2F8EB", "6AA8", - "2F8EC", "236A3", - "2F8ED", "6ADB", - "2F8EE", "3C18", - "2F8EF", "6B21", - "2F8F0", "238A7", - "2F8F1", "6B54", - "2F8F2", "3C4E", - "2F8F3", "6B72", - "2F8F4", "6B9F", - "2F8F5", "6BBA", - "2F8F6", "6BBB", - "2F8F7", "23A8D", - "2F8F8", "21D0B", - "2F8F9", "23AFA", - "2F8FA", "6C4E", - "2F8FB", "23CBC", - "2F8FC", "6CBF", - "2F8FD", "6CCD", - "2F8FE", "6C67", - "2F8FF", "6D16", - "2F900", "6D3E", - "2F901", "6D77", - "2F902", "6D41", - "2F903", "6D69", - "2F904", "6D78", - "2F905", "6D85", - "2F906", "23D1E", - "2F907", "6D34", - "2F908", "6E2F", - "2F909", "6E6E", - "2F90A", "3D33", - "2F90B", "6ECB", - "2F90C", "6EC7", - "2F90D", "23ED1", - "2F90E", "6DF9", - "2F90F", "6F6E", - "2F910", "23F5E", - "2F911", "23F8E", - "2F912", "6FC6", - "2F913", "7039", - "2F914", "701E", - "2F915", "701B", - "2F916", "3D96", - "2F917", "704A", - "2F918", "707D", - "2F919", "7077", - "2F91A", "70AD", - "2F91B", "20525", - "2F91C", "7145", - "2F91D", "24263", - "2F91E", "719C", - "2F91F", "43AB", - "2F920", "7228", - "2F921", "7235", - "2F922", "7250", - "2F923", "24608", - "2F924", "7280", - "2F925", "7295", - "2F926", "24735", - "2F927", "24814", - "2F928", "737A", - "2F929", "738B", - "2F92A", "3EAC", - "2F92B", "73A5", - "2F92C", "3EB8", - "2F92D", "3EB8", - "2F92E", "7447", - "2F92F", "745C", - "2F930", "7471", - "2F931", "7485", - "2F932", "74CA", - "2F933", "3F1B", - "2F934", "7524", - "2F935", "24C36", - "2F936", "753E", - "2F937", "24C92", - "2F938", "7570", - "2F939", "2219F", - "2F93A", "7610", - "2F93B", "24FA1", - "2F93C", "24FB8", - "2F93D", "25044", - "2F93E", "3FFC", - "2F93F", "4008", - "2F940", "76F4", - "2F941", "250F3", - "2F942", "250F2", - "2F943", "25119", - "2F944", "25133", - "2F945", "771E", - "2F946", "771F", - "2F947", "771F", - "2F948", "774A", - "2F949", "4039", - "2F94A", "778B", - "2F94B", "4046", - "2F94C", "4096", - "2F94D", "2541D", - "2F94E", "784E", - "2F94F", "788C", - "2F950", "78CC", - "2F951", "40E3", - "2F952", "25626", - "2F953", "7956", - "2F954", "2569A", - "2F955", "256C5", - "2F956", "798F", - "2F957", "79EB", - "2F958", "412F", - "2F959", "7A40", - "2F95A", "7A4A", - "2F95B", "7A4F", - "2F95C", "2597C", - "2F95D", "25AA7", - "2F95E", "25AA7", - "2F95F", "7AAE", - "2F960", "4202", - "2F961", "25BAB", - "2F962", "7BC6", - "2F963", "7BC9", - "2F964", "4227", - "2F965", "25C80", - "2F966", "7CD2", - "2F967", "42A0", - "2F968", "7CE8", - "2F969", "7CE3", - "2F96A", "7D00", - "2F96B", "25F86", - "2F96C", "7D63", - "2F96D", "4301", - "2F96E", "7DC7", - "2F96F", "7E02", - "2F970", "7E45", - "2F971", "4334", - "2F972", "26228", - "2F973", "26247", - "2F974", "4359", - "2F975", "262D9", - "2F976", "7F7A", - "2F977", "2633E", - "2F978", "7F95", - "2F979", "7FFA", - "2F97A", "8005", - "2F97B", "264DA", - "2F97C", "26523", - "2F97D", "8060", - "2F97E", "265A8", - "2F97F", "8070", - "2F980", "2335F", - "2F981", "43D5", - "2F982", "80B2", - "2F983", "8103", - "2F984", "440B", - "2F985", "813E", - "2F986", "5AB5", - "2F987", "267A7", - "2F988", "267B5", - "2F989", "23393", - "2F98A", "2339C", - "2F98B", "8201", - "2F98C", "8204", - "2F98D", "8F9E", - "2F98E", "446B", - "2F98F", "8291", - "2F990", "828B", - "2F991", "829D", - "2F992", "52B3", - "2F993", "82B1", - "2F994", "82B3", - "2F995", "82BD", - "2F996", "82E6", - "2F997", "26B3C", - "2F998", "82E5", - "2F999", "831D", - "2F99A", "8363", - "2F99B", "83AD", - "2F99C", "8323", - "2F99D", "83BD", - "2F99E", "83E7", - "2F99F", "8457", - "2F9A0", "8353", - "2F9A1", "83CA", - "2F9A2", "83CC", - "2F9A3", "83DC", - "2F9A4", "26C36", - "2F9A5", "26D6B", - "2F9A6", "26CD5", - "2F9A7", "452B", - "2F9A8", "84F1", - "2F9A9", "84F3", - "2F9AA", "8516", - "2F9AB", "273CA", - "2F9AC", "8564", - "2F9AD", "26F2C", - "2F9AE", "455D", - "2F9AF", "4561", - "2F9B0", "26FB1", - "2F9B1", "270D2", - "2F9B2", "456B", - "2F9B3", "8650", - "2F9B4", "865C", - "2F9B5", "8667", - "2F9B6", "8669", - "2F9B7", "86A9", - "2F9B8", "8688", - "2F9B9", "870E", - "2F9BA", "86E2", - "2F9BB", "8779", - "2F9BC", "8728", - "2F9BD", "876B", - "2F9BE", "8786", - "2F9BF", "4D57", - "2F9C0", "87E1", - "2F9C1", "8801", - "2F9C2", "45F9", - "2F9C3", "8860", - "2F9C4", "8863", - "2F9C5", "27667", - "2F9C6", "88D7", - "2F9C7", "88DE", - "2F9C8", "4635", - "2F9C9", "88FA", - "2F9CA", "34BB", - "2F9CB", "278AE", - "2F9CC", "27966", - "2F9CD", "46BE", - "2F9CE", "46C7", - "2F9CF", "8AA0", - "2F9D0", "8AED", - "2F9D1", "8B8A", - "2F9D2", "8C55", - "2F9D3", "27CA8", - "2F9D4", "8CAB", - "2F9D5", "8CC1", - "2F9D6", "8D1B", - "2F9D7", "8D77", - "2F9D8", "27F2F", - "2F9D9", "20804", - "2F9DA", "8DCB", - "2F9DB", "8DBC", - "2F9DC", "8DF0", - "2F9DD", "208DE", - "2F9DE", "8ED4", - "2F9DF", "8F38", - "2F9E0", "285D2", - "2F9E1", "285ED", - "2F9E2", "9094", - "2F9E3", "90F1", - "2F9E4", "9111", - "2F9E5", "2872E", - "2F9E6", "911B", - "2F9E7", "9238", - "2F9E8", "92D7", - "2F9E9", "92D8", - "2F9EA", "927C", - "2F9EB", "93F9", - "2F9EC", "9415", - "2F9ED", "28BFA", - "2F9EE", "958B", - "2F9EF", "4995", - "2F9F0", "95B7", - "2F9F1", "28D77", - "2F9F2", "49E6", - "2F9F3", "96C3", - "2F9F4", "5DB2", - "2F9F5", "9723", - "2F9F6", "29145", - "2F9F7", "2921A", - "2F9F8", "4A6E", - "2F9F9", "4A76", - "2F9FA", "97E0", - "2F9FB", "2940A", - "2F9FC", "4AB2", - "2F9FD", "29496", - "2F9FE", "980B", - "2F9FF", "980B", - "2FA00", "9829", - "2FA01", "295B6", - "2FA02", "98E2", - "2FA03", "4B33", - "2FA04", "9929", - "2FA05", "99A7", - "2FA06", "99C2", - "2FA07", "99FE", - "2FA08", "4BCE", - "2FA09", "29B30", - "2FA0A", "9B12", - "2FA0B", "9C40", - "2FA0C", "9CFD", - "2FA0D", "4CCE", - "2FA0E", "4CED", - "2FA0F", "9D67", - "2FA10", "2A0CE", - "2FA11", "4CF8", - "2FA12", "2A105", - "2FA13", "2A20E", - "2FA14", "2A291", - "2FA15", "9EBB", - "2FA16", "4D56", - "2FA17", "9EF9", - "2FA18", "9EFE", - "2FA19", "9F05", - "2FA1A", "9F0F", - "2FA1B", "9F16", - "2FA1C", "9F3B", - "2FA1D", "2A600", -); - -my %AGL_to_unicode = ( - "A", "0041", - "AE", "00C6", - "AEacute", "01FC", - "AEmacron", "01E2", - "Aacute", "00C1", - "Abreve", "0102", - "Abreveacute", "1EAE", - "Abrevecyrillic", "04D0", - "Abrevedotbelow", "1EB6", - "Abrevegrave", "1EB0", - "Abrevehookabove", "1EB2", - "Abrevetilde", "1EB4", - "Acaron", "01CD", - "Acircle", "24B6", - "Acircumflex", "00C2", - "Acircumflexacute", "1EA4", - "Acircumflexdotbelow", "1EAC", - "Acircumflexgrave", "1EA6", - "Acircumflexhookabove", "1EA8", - "Acircumflextilde", "1EAA", - "Acyrillic", "0410", - "Adblgrave", "0200", - "Adieresis", "00C4", - "Adieresiscyrillic", "04D2", - "Adieresismacron", "01DE", - "Adotbelow", "1EA0", - "Adotmacron", "01E0", - "Agrave", "00C0", - "Ahookabove", "1EA2", - "Aiecyrillic", "04D4", - "Ainvertedbreve", "0202", - "Alpha", "0391", - "Alphatonos", "0386", - "Amacron", "0100", - "Amonospace", "FF21", - "Aogonek", "0104", - "Aring", "00C5", - "Aringacute", "01FA", - "Aringbelow", "1E00", - "Atilde", "00C3", - "Aybarmenian", "0531", - "B", "0042", - "Bcircle", "24B7", - "Bdotaccent", "1E02", - "Bdotbelow", "1E04", - "Becyrillic", "0411", - "Benarmenian", "0532", - "Beta", "0392", - "Bhook", "0181", - "Blinebelow", "1E06", - "Bmonospace", "FF22", - "Btopbar", "0182", - "C", "0043", - "Caarmenian", "053E", - "Cacute", "0106", - "Ccaron", "010C", - "Ccedilla", "00C7", - "Ccedillaacute", "1E08", - "Ccircle", "24B8", - "Ccircumflex", "0108", - "Cdot", "010A", - "Cdotaccent", "010A", - "Chaarmenian", "0549", - "Cheabkhasiancyrillic", "04BC", - "Checyrillic", "0427", - "Chedescenderabkhasiancyrillic", "04BE", - "Chedescendercyrillic", "04B6", - "Chedieresiscyrillic", "04F4", - "Cheharmenian", "0543", - "Chekhakassiancyrillic", "04CB", - "Cheverticalstrokecyrillic", "04B8", - "Chi", "03A7", - "Chook", "0187", - "Cmonospace", "FF23", - "Coarmenian", "0551", - "D", "0044", - "DZ", "01F1", - "DZcaron", "01C4", - "Daarmenian", "0534", - "Dafrican", "0189", - "Dcaron", "010E", - "Dcedilla", "1E10", - "Dcircle", "24B9", - "Dcircumflexbelow", "1E12", - "Dcroat", "0110", - "Ddotaccent", "1E0A", - "Ddotbelow", "1E0C", - "Decyrillic", "0414", - "Deicoptic", "03EE", - "Delta", "2206", - "Deltagreek", "0394", - "Dhook", "018A", - "Digammagreek", "03DC", - "Djecyrillic", "0402", - "Dlinebelow", "1E0E", - "Dmonospace", "FF24", - "Dslash", "0110", - "Dtopbar", "018B", - "Dz", "01F2", - "Dzcaron", "01C5", - "Dzeabkhasiancyrillic", "04E0", - "Dzecyrillic", "0405", - "Dzhecyrillic", "040F", - "E", "0045", - "Eacute", "00C9", - "Ebreve", "0114", - "Ecaron", "011A", - "Ecedillabreve", "1E1C", - "Echarmenian", "0535", - "Ecircle", "24BA", - "Ecircumflex", "00CA", - "Ecircumflexacute", "1EBE", - "Ecircumflexbelow", "1E18", - "Ecircumflexdotbelow", "1EC6", - "Ecircumflexgrave", "1EC0", - "Ecircumflexhookabove", "1EC2", - "Ecircumflextilde", "1EC4", - "Ecyrillic", "0404", - "Edblgrave", "0204", - "Edieresis", "00CB", - "Edot", "0116", - "Edotaccent", "0116", - "Edotbelow", "1EB8", - "Efcyrillic", "0424", - "Egrave", "00C8", - "Eharmenian", "0537", - "Ehookabove", "1EBA", - "Eightroman", "2167", - "Einvertedbreve", "0206", - "Eiotifiedcyrillic", "0464", - "Elcyrillic", "041B", - "Elevenroman", "216A", - "Emacron", "0112", - "Emacronacute", "1E16", - "Emacrongrave", "1E14", - "Emcyrillic", "041C", - "Emonospace", "FF25", - "Encyrillic", "041D", - "Endescendercyrillic", "04A2", - "Eng", "014A", - "Enghecyrillic", "04A4", - "Enhookcyrillic", "04C7", - "Eogonek", "0118", - "Eopen", "0190", - "Epsilon", "0395", - "Epsilontonos", "0388", - "Ercyrillic", "0420", - "Ereversed", "018E", - "Ereversedcyrillic", "042D", - "Escyrillic", "0421", - "Esdescendercyrillic", "04AA", - "Esh", "01A9", - "Eta", "0397", - "Etarmenian", "0538", - "Etatonos", "0389", - "Eth", "00D0", - "Etilde", "1EBC", - "Etildebelow", "1E1A", - "Euro", "20AC", - "Ezh", "01B7", - "Ezhcaron", "01EE", - "Ezhreversed", "01B8", - "F", "0046", - "Fcircle", "24BB", - "Fdotaccent", "1E1E", - "Feharmenian", "0556", - "Feicoptic", "03E4", - "Fhook", "0191", - "Fitacyrillic", "0472", - "Fiveroman", "2164", - "Fmonospace", "FF26", - "Fourroman", "2163", - "G", "0047", - "GBsquare", "3387", - "Gacute", "01F4", - "Gamma", "0393", - "Gammaafrican", "0194", - "Gangiacoptic", "03EA", - "Gbreve", "011E", - "Gcaron", "01E6", - "Gcedilla", "0122", - "Gcircle", "24BC", - "Gcircumflex", "011C", - "Gcommaaccent", "0122", - "Gdot", "0120", - "Gdotaccent", "0120", - "Gecyrillic", "0413", - "Ghadarmenian", "0542", - "Ghemiddlehookcyrillic", "0494", - "Ghestrokecyrillic", "0492", - "Gheupturncyrillic", "0490", - "Ghook", "0193", - "Gimarmenian", "0533", - "Gjecyrillic", "0403", - "Gmacron", "1E20", - "Gmonospace", "FF27", - "Gsmallhook", "029B", - "Gstroke", "01E4", - "H", "0048", - "H18533", "25CF", - "H18543", "25AA", - "H18551", "25AB", - "H22073", "25A1", - "HPsquare", "33CB", - "Haabkhasiancyrillic", "04A8", - "Hadescendercyrillic", "04B2", - "Hardsigncyrillic", "042A", - "Hbar", "0126", - "Hbrevebelow", "1E2A", - "Hcedilla", "1E28", - "Hcircle", "24BD", - "Hcircumflex", "0124", - "Hdieresis", "1E26", - "Hdotaccent", "1E22", - "Hdotbelow", "1E24", - "Hmonospace", "FF28", - "Hoarmenian", "0540", - "Horicoptic", "03E8", - "Hzsquare", "3390", - "I", "0049", - "IAcyrillic", "042F", - "IJ", "0132", - "IUcyrillic", "042E", - "Iacute", "00CD", - "Ibreve", "012C", - "Icaron", "01CF", - "Icircle", "24BE", - "Icircumflex", "00CE", - "Icyrillic", "0406", - "Idblgrave", "0208", - "Idieresis", "00CF", - "Idieresisacute", "1E2E", - "Idieresiscyrillic", "04E4", - "Idot", "0130", - "Idotaccent", "0130", - "Idotbelow", "1ECA", - "Iebrevecyrillic", "04D6", - "Iecyrillic", "0415", - "Ifraktur", "2111", - "Igrave", "00CC", - "Ihookabove", "1EC8", - "Iicyrillic", "0418", - "Iinvertedbreve", "020A", - "Iishortcyrillic", "0419", - "Imacron", "012A", - "Imacroncyrillic", "04E2", - "Imonospace", "FF29", - "Iniarmenian", "053B", - "Iocyrillic", "0401", - "Iogonek", "012E", - "Iota", "0399", - "Iotaafrican", "0196", - "Iotadieresis", "03AA", - "Iotatonos", "038A", - "Istroke", "0197", - "Itilde", "0128", - "Itildebelow", "1E2C", - "Izhitsacyrillic", "0474", - "Izhitsadblgravecyrillic", "0476", - "J", "004A", - "Jaarmenian", "0541", - "Jcircle", "24BF", - "Jcircumflex", "0134", - "Jecyrillic", "0408", - "Jheharmenian", "054B", - "Jmonospace", "FF2A", - "K", "004B", - "KBsquare", "3385", - "KKsquare", "33CD", - "Kabashkircyrillic", "04A0", - "Kacute", "1E30", - "Kacyrillic", "041A", - "Kadescendercyrillic", "049A", - "Kahookcyrillic", "04C3", - "Kappa", "039A", - "Kastrokecyrillic", "049E", - "Kaverticalstrokecyrillic", "049C", - "Kcaron", "01E8", - "Kcedilla", "0136", - "Kcircle", "24C0", - "Kcommaaccent", "0136", - "Kdotbelow", "1E32", - "Keharmenian", "0554", - "Kenarmenian", "053F", - "Khacyrillic", "0425", - "Kheicoptic", "03E6", - "Khook", "0198", - "Kjecyrillic", "040C", - "Klinebelow", "1E34", - "Kmonospace", "FF2B", - "Koppacyrillic", "0480", - "Koppagreek", "03DE", - "Ksicyrillic", "046E", - "L", "004C", - "LJ", "01C7", - "Lacute", "0139", - "Lambda", "039B", - "Lcaron", "013D", - "Lcedilla", "013B", - "Lcircle", "24C1", - "Lcircumflexbelow", "1E3C", - "Lcommaaccent", "013B", - "Ldot", "013F", - "Ldotaccent", "013F", - "Ldotbelow", "1E36", - "Ldotbelowmacron", "1E38", - "Liwnarmenian", "053C", - "Lj", "01C8", - "Ljecyrillic", "0409", - "Llinebelow", "1E3A", - "Lmonospace", "FF2C", - "Lslash", "0141", - "M", "004D", - "MBsquare", "3386", - "Macute", "1E3E", - "Mcircle", "24C2", - "Mdotaccent", "1E40", - "Mdotbelow", "1E42", - "Menarmenian", "0544", - "Mmonospace", "FF2D", - "Mturned", "019C", - "Mu", "039C", - "N", "004E", - "NJ", "01CA", - "Nacute", "0143", - "Ncaron", "0147", - "Ncedilla", "0145", - "Ncircle", "24C3", - "Ncircumflexbelow", "1E4A", - "Ncommaaccent", "0145", - "Ndotaccent", "1E44", - "Ndotbelow", "1E46", - "Nhookleft", "019D", - "Nineroman", "2168", - "Nj", "01CB", - "Njecyrillic", "040A", - "Nlinebelow", "1E48", - "Nmonospace", "FF2E", - "Nowarmenian", "0546", - "Ntilde", "00D1", - "Nu", "039D", - "O", "004F", - "OE", "0152", - "Oacute", "00D3", - "Obarredcyrillic", "04E8", - "Obarreddieresiscyrillic", "04EA", - "Obreve", "014E", - "Ocaron", "01D1", - "Ocenteredtilde", "019F", - "Ocircle", "24C4", - "Ocircumflex", "00D4", - "Ocircumflexacute", "1ED0", - "Ocircumflexdotbelow", "1ED8", - "Ocircumflexgrave", "1ED2", - "Ocircumflexhookabove", "1ED4", - "Ocircumflextilde", "1ED6", - "Ocyrillic", "041E", - "Odblacute", "0150", - "Odblgrave", "020C", - "Odieresis", "00D6", - "Odieresiscyrillic", "04E6", - "Odotbelow", "1ECC", - "Ograve", "00D2", - "Oharmenian", "0555", - "Ohm", "2126", - "Ohookabove", "1ECE", - "Ohorn", "01A0", - "Ohornacute", "1EDA", - "Ohorndotbelow", "1EE2", - "Ohorngrave", "1EDC", - "Ohornhookabove", "1EDE", - "Ohorntilde", "1EE0", - "Ohungarumlaut", "0150", - "Oi", "01A2", - "Oinvertedbreve", "020E", - "Omacron", "014C", - "Omacronacute", "1E52", - "Omacrongrave", "1E50", - "Omega", "2126", - "Omegacyrillic", "0460", - "Omegagreek", "03A9", - "Omegaroundcyrillic", "047A", - "Omegatitlocyrillic", "047C", - "Omegatonos", "038F", - "Omicron", "039F", - "Omicrontonos", "038C", - "Omonospace", "FF2F", - "Oneroman", "2160", - "Oogonek", "01EA", - "Oogonekmacron", "01EC", - "Oopen", "0186", - "Oslash", "00D8", - "Oslashacute", "01FE", - "Ostrokeacute", "01FE", - "Otcyrillic", "047E", - "Otilde", "00D5", - "Otildeacute", "1E4C", - "Otildedieresis", "1E4E", - "P", "0050", - "Pacute", "1E54", - "Pcircle", "24C5", - "Pdotaccent", "1E56", - "Pecyrillic", "041F", - "Peharmenian", "054A", - "Pemiddlehookcyrillic", "04A6", - "Phi", "03A6", - "Phook", "01A4", - "Pi", "03A0", - "Piwrarmenian", "0553", - "Pmonospace", "FF30", - "Psi", "03A8", - "Psicyrillic", "0470", - "Q", "0051", - "Qcircle", "24C6", - "Qmonospace", "FF31", - "R", "0052", - "Raarmenian", "054C", - "Racute", "0154", - "Rcaron", "0158", - "Rcedilla", "0156", - "Rcircle", "24C7", - "Rcommaaccent", "0156", - "Rdblgrave", "0210", - "Rdotaccent", "1E58", - "Rdotbelow", "1E5A", - "Rdotbelowmacron", "1E5C", - "Reharmenian", "0550", - "Rfraktur", "211C", - "Rho", "03A1", - "Rinvertedbreve", "0212", - "Rlinebelow", "1E5E", - "Rmonospace", "FF32", - "Rsmallinverted", "0281", - "Rsmallinvertedsuperior", "02B6", - "S", "0053", - "SF010000", "250C", - "SF020000", "2514", - "SF030000", "2510", - "SF040000", "2518", - "SF050000", "253C", - "SF060000", "252C", - "SF070000", "2534", - "SF080000", "251C", - "SF090000", "2524", - "SF100000", "2500", - "SF110000", "2502", - "SF190000", "2561", - "SF200000", "2562", - "SF210000", "2556", - "SF220000", "2555", - "SF230000", "2563", - "SF240000", "2551", - "SF250000", "2557", - "SF260000", "255D", - "SF270000", "255C", - "SF280000", "255B", - "SF360000", "255E", - "SF370000", "255F", - "SF380000", "255A", - "SF390000", "2554", - "SF400000", "2569", - "SF410000", "2566", - "SF420000", "2560", - "SF430000", "2550", - "SF440000", "256C", - "SF450000", "2567", - "SF460000", "2568", - "SF470000", "2564", - "SF480000", "2565", - "SF490000", "2559", - "SF500000", "2558", - "SF510000", "2552", - "SF520000", "2553", - "SF530000", "256B", - "SF540000", "256A", - "Sacute", "015A", - "Sacutedotaccent", "1E64", - "Sampigreek", "03E0", - "Scaron", "0160", - "Scarondotaccent", "1E66", - "Scedilla", "015E", - "Schwa", "018F", - "Schwacyrillic", "04D8", - "Schwadieresiscyrillic", "04DA", - "Scircle", "24C8", - "Scircumflex", "015C", - "Scommaaccent", "0218", - "Sdotaccent", "1E60", - "Sdotbelow", "1E62", - "Sdotbelowdotaccent", "1E68", - "Seharmenian", "054D", - "Sevenroman", "2166", - "Shaarmenian", "0547", - "Shacyrillic", "0428", - "Shchacyrillic", "0429", - "Sheicoptic", "03E2", - "Shhacyrillic", "04BA", - "Shimacoptic", "03EC", - "Sigma", "03A3", - "Sixroman", "2165", - "Smonospace", "FF33", - "Softsigncyrillic", "042C", - "Stigmagreek", "03DA", - "T", "0054", - "Tau", "03A4", - "Tbar", "0166", - "Tcaron", "0164", - "Tcedilla", "0162", - "Tcircle", "24C9", - "Tcircumflexbelow", "1E70", - "Tcommaaccent", "0162", - "Tdotaccent", "1E6A", - "Tdotbelow", "1E6C", - "Tecyrillic", "0422", - "Tedescendercyrillic", "04AC", - "Tenroman", "2169", - "Tetsecyrillic", "04B4", - "Theta", "0398", - "Thook", "01AC", - "Thorn", "00DE", - "Threeroman", "2162", - "Tiwnarmenian", "054F", - "Tlinebelow", "1E6E", - "Tmonospace", "FF34", - "Toarmenian", "0539", - "Tonefive", "01BC", - "Tonesix", "0184", - "Tonetwo", "01A7", - "Tretroflexhook", "01AE", - "Tsecyrillic", "0426", - "Tshecyrillic", "040B", - "Twelveroman", "216B", - "Tworoman", "2161", - "U", "0055", - "Uacute", "00DA", - "Ubreve", "016C", - "Ucaron", "01D3", - "Ucircle", "24CA", - "Ucircumflex", "00DB", - "Ucircumflexbelow", "1E76", - "Ucyrillic", "0423", - "Udblacute", "0170", - "Udblgrave", "0214", - "Udieresis", "00DC", - "Udieresisacute", "01D7", - "Udieresisbelow", "1E72", - "Udieresiscaron", "01D9", - "Udieresiscyrillic", "04F0", - "Udieresisgrave", "01DB", - "Udieresismacron", "01D5", - "Udotbelow", "1EE4", - "Ugrave", "00D9", - "Uhookabove", "1EE6", - "Uhorn", "01AF", - "Uhornacute", "1EE8", - "Uhorndotbelow", "1EF0", - "Uhorngrave", "1EEA", - "Uhornhookabove", "1EEC", - "Uhorntilde", "1EEE", - "Uhungarumlaut", "0170", - "Uhungarumlautcyrillic", "04F2", - "Uinvertedbreve", "0216", - "Ukcyrillic", "0478", - "Umacron", "016A", - "Umacroncyrillic", "04EE", - "Umacrondieresis", "1E7A", - "Umonospace", "FF35", - "Uogonek", "0172", - "Upsilon", "03A5", - "Upsilon1", "03D2", - "Upsilonacutehooksymbolgreek", "03D3", - "Upsilonafrican", "01B1", - "Upsilondieresis", "03AB", - "Upsilondieresishooksymbolgreek", "03D4", - "Upsilonhooksymbol", "03D2", - "Upsilontonos", "038E", - "Uring", "016E", - "Ushortcyrillic", "040E", - "Ustraightcyrillic", "04AE", - "Ustraightstrokecyrillic", "04B0", - "Utilde", "0168", - "Utildeacute", "1E78", - "Utildebelow", "1E74", - "V", "0056", - "Vcircle", "24CB", - "Vdotbelow", "1E7E", - "Vecyrillic", "0412", - "Vewarmenian", "054E", - "Vhook", "01B2", - "Vmonospace", "FF36", - "Voarmenian", "0548", - "Vtilde", "1E7C", - "W", "0057", - "Wacute", "1E82", - "Wcircle", "24CC", - "Wcircumflex", "0174", - "Wdieresis", "1E84", - "Wdotaccent", "1E86", - "Wdotbelow", "1E88", - "Wgrave", "1E80", - "Wmonospace", "FF37", - "X", "0058", - "Xcircle", "24CD", - "Xdieresis", "1E8C", - "Xdotaccent", "1E8A", - "Xeharmenian", "053D", - "Xi", "039E", - "Xmonospace", "FF38", - "Y", "0059", - "Yacute", "00DD", - "Yatcyrillic", "0462", - "Ycircle", "24CE", - "Ycircumflex", "0176", - "Ydieresis", "0178", - "Ydotaccent", "1E8E", - "Ydotbelow", "1EF4", - "Yericyrillic", "042B", - "Yerudieresiscyrillic", "04F8", - "Ygrave", "1EF2", - "Yhook", "01B3", - "Yhookabove", "1EF6", - "Yiarmenian", "0545", - "Yicyrillic", "0407", - "Yiwnarmenian", "0552", - "Ymonospace", "FF39", - "Ytilde", "1EF8", - "Yusbigcyrillic", "046A", - "Yusbigiotifiedcyrillic", "046C", - "Yuslittlecyrillic", "0466", - "Yuslittleiotifiedcyrillic", "0468", - "Z", "005A", - "Zaarmenian", "0536", - "Zacute", "0179", - "Zcaron", "017D", - "Zcircle", "24CF", - "Zcircumflex", "1E90", - "Zdot", "017B", - "Zdotaccent", "017B", - "Zdotbelow", "1E92", - "Zecyrillic", "0417", - "Zedescendercyrillic", "0498", - "Zedieresiscyrillic", "04DE", - "Zeta", "0396", - "Zhearmenian", "053A", - "Zhebrevecyrillic", "04C1", - "Zhecyrillic", "0416", - "Zhedescendercyrillic", "0496", - "Zhedieresiscyrillic", "04DC", - "Zlinebelow", "1E94", - "Zmonospace", "FF3A", - "Zstroke", "01B5", - "a", "0061", - "aabengali", "0986", - "aacute", "00E1", - "aadeva", "0906", - "aagujarati", "0A86", - "aagurmukhi", "0A06", - "aamatragurmukhi", "0A3E", - "aarusquare", "3303", - "aavowelsignbengali", "09BE", - "aavowelsigndeva", "093E", - "aavowelsigngujarati", "0ABE", - "abbreviationmarkarmenian", "055F", - "abbreviationsigndeva", "0970", - "abengali", "0985", - "abopomofo", "311A", - "abreve", "0103", - "abreveacute", "1EAF", - "abrevecyrillic", "04D1", - "abrevedotbelow", "1EB7", - "abrevegrave", "1EB1", - "abrevehookabove", "1EB3", - "abrevetilde", "1EB5", - "acaron", "01CE", - "acircle", "24D0", - "acircumflex", "00E2", - "acircumflexacute", "1EA5", - "acircumflexdotbelow", "1EAD", - "acircumflexgrave", "1EA7", - "acircumflexhookabove", "1EA9", - "acircumflextilde", "1EAB", - "acute", "00B4", - "acutebelowcmb", "0317", - "acutecmb", "0301", - "acutecomb", "0301", - "acutedeva", "0954", - "acutelowmod", "02CF", - "acutetonecmb", "0341", - "acyrillic", "0430", - "adblgrave", "0201", - "addakgurmukhi", "0A71", - "adeva", "0905", - "adieresis", "00E4", - "adieresiscyrillic", "04D3", - "adieresismacron", "01DF", - "adotbelow", "1EA1", - "adotmacron", "01E1", - "ae", "00E6", - "aeacute", "01FD", - "aekorean", "3150", - "aemacron", "01E3", - "afii00208", "2015", - "afii08941", "20A4", - "afii10017", "0410", - "afii10018", "0411", - "afii10019", "0412", - "afii10020", "0413", - "afii10021", "0414", - "afii10022", "0415", - "afii10023", "0401", - "afii10024", "0416", - "afii10025", "0417", - "afii10026", "0418", - "afii10027", "0419", - "afii10028", "041A", - "afii10029", "041B", - "afii10030", "041C", - "afii10031", "041D", - "afii10032", "041E", - "afii10033", "041F", - "afii10034", "0420", - "afii10035", "0421", - "afii10036", "0422", - "afii10037", "0423", - "afii10038", "0424", - "afii10039", "0425", - "afii10040", "0426", - "afii10041", "0427", - "afii10042", "0428", - "afii10043", "0429", - "afii10044", "042A", - "afii10045", "042B", - "afii10046", "042C", - "afii10047", "042D", - "afii10048", "042E", - "afii10049", "042F", - "afii10050", "0490", - "afii10051", "0402", - "afii10052", "0403", - "afii10053", "0404", - "afii10054", "0405", - "afii10055", "0406", - "afii10056", "0407", - "afii10057", "0408", - "afii10058", "0409", - "afii10059", "040A", - "afii10060", "040B", - "afii10061", "040C", - "afii10062", "040E", - "afii10065", "0430", - "afii10066", "0431", - "afii10067", "0432", - "afii10068", "0433", - "afii10069", "0434", - "afii10070", "0435", - "afii10071", "0451", - "afii10072", "0436", - "afii10073", "0437", - "afii10074", "0438", - "afii10075", "0439", - "afii10076", "043A", - "afii10077", "043B", - "afii10078", "043C", - "afii10079", "043D", - "afii10080", "043E", - "afii10081", "043F", - "afii10082", "0440", - "afii10083", "0441", - "afii10084", "0442", - "afii10085", "0443", - "afii10086", "0444", - "afii10087", "0445", - "afii10088", "0446", - "afii10089", "0447", - "afii10090", "0448", - "afii10091", "0449", - "afii10092", "044A", - "afii10093", "044B", - "afii10094", "044C", - "afii10095", "044D", - "afii10096", "044E", - "afii10097", "044F", - "afii10098", "0491", - "afii10099", "0452", - "afii10100", "0453", - "afii10101", "0454", - "afii10102", "0455", - "afii10103", "0456", - "afii10104", "0457", - "afii10105", "0458", - "afii10106", "0459", - "afii10107", "045A", - "afii10108", "045B", - "afii10109", "045C", - "afii10110", "045E", - "afii10145", "040F", - "afii10146", "0462", - "afii10147", "0472", - "afii10148", "0474", - "afii10193", "045F", - "afii10194", "0463", - "afii10195", "0473", - "afii10196", "0475", - "afii10846", "04D9", - "afii299", "200E", - "afii300", "200F", - "afii301", "200D", - "afii57381", "066A", - "afii57388", "060C", - "afii57392", "0660", - "afii57393", "0661", - "afii57394", "0662", - "afii57395", "0663", - "afii57396", "0664", - "afii57397", "0665", - "afii57398", "0666", - "afii57399", "0667", - "afii57400", "0668", - "afii57401", "0669", - "afii57403", "061B", - "afii57407", "061F", - "afii57409", "0621", - "afii57410", "0622", - "afii57411", "0623", - "afii57412", "0624", - "afii57413", "0625", - "afii57414", "0626", - "afii57415", "0627", - "afii57416", "0628", - "afii57417", "0629", - "afii57418", "062A", - "afii57419", "062B", - "afii57420", "062C", - "afii57421", "062D", - "afii57422", "062E", - "afii57423", "062F", - "afii57424", "0630", - "afii57425", "0631", - "afii57426", "0632", - "afii57427", "0633", - "afii57428", "0634", - "afii57429", "0635", - "afii57430", "0636", - "afii57431", "0637", - "afii57432", "0638", - "afii57433", "0639", - "afii57434", "063A", - "afii57440", "0640", - "afii57441", "0641", - "afii57442", "0642", - "afii57443", "0643", - "afii57444", "0644", - "afii57445", "0645", - "afii57446", "0646", - "afii57448", "0648", - "afii57449", "0649", - "afii57450", "064A", - "afii57451", "064B", - "afii57452", "064C", - "afii57453", "064D", - "afii57454", "064E", - "afii57455", "064F", - "afii57456", "0650", - "afii57457", "0651", - "afii57458", "0652", - "afii57470", "0647", - "afii57505", "06A4", - "afii57506", "067E", - "afii57507", "0686", - "afii57508", "0698", - "afii57509", "06AF", - "afii57511", "0679", - "afii57512", "0688", - "afii57513", "0691", - "afii57514", "06BA", - "afii57519", "06D2", - "afii57534", "06D5", - "afii57636", "20AA", - "afii57645", "05BE", - "afii57658", "05C3", - "afii57664", "05D0", - "afii57665", "05D1", - "afii57666", "05D2", - "afii57667", "05D3", - "afii57668", "05D4", - "afii57669", "05D5", - "afii57670", "05D6", - "afii57671", "05D7", - "afii57672", "05D8", - "afii57673", "05D9", - "afii57674", "05DA", - "afii57675", "05DB", - "afii57676", "05DC", - "afii57677", "05DD", - "afii57678", "05DE", - "afii57679", "05DF", - "afii57680", "05E0", - "afii57681", "05E1", - "afii57682", "05E2", - "afii57683", "05E3", - "afii57684", "05E4", - "afii57685", "05E5", - "afii57686", "05E6", - "afii57687", "05E7", - "afii57688", "05E8", - "afii57689", "05E9", - "afii57690", "05EA", - "afii57694", "FB2A", - "afii57695", "FB2B", - "afii57700", "FB4B", - "afii57705", "FB1F", - "afii57716", "05F0", - "afii57717", "05F1", - "afii57718", "05F2", - "afii57723", "FB35", - "afii57793", "05B4", - "afii57794", "05B5", - "afii57795", "05B6", - "afii57796", "05BB", - "afii57797", "05B8", - "afii57798", "05B7", - "afii57799", "05B0", - "afii57800", "05B2", - "afii57801", "05B1", - "afii57802", "05B3", - "afii57803", "05C2", - "afii57804", "05C1", - "afii57806", "05B9", - "afii57807", "05BC", - "afii57839", "05BD", - "afii57841", "05BF", - "afii57842", "05C0", - "afii57929", "02BC", - "afii61248", "2105", - "afii61289", "2113", - "afii61352", "2116", - "afii61573", "202C", - "afii61574", "202D", - "afii61575", "202E", - "afii61664", "200C", - "afii63167", "066D", - "afii64937", "02BD", - "agrave", "00E0", - "agujarati", "0A85", - "agurmukhi", "0A05", - "ahiragana", "3042", - "ahookabove", "1EA3", - "aibengali", "0990", - "aibopomofo", "311E", - "aideva", "0910", - "aiecyrillic", "04D5", - "aigujarati", "0A90", - "aigurmukhi", "0A10", - "aimatragurmukhi", "0A48", - "ainarabic", "0639", - "ainfinalarabic", "FECA", - "aininitialarabic", "FECB", - "ainmedialarabic", "FECC", - "ainvertedbreve", "0203", - "aivowelsignbengali", "09C8", - "aivowelsigndeva", "0948", - "aivowelsigngujarati", "0AC8", - "akatakana", "30A2", - "akatakanahalfwidth", "FF71", - "akorean", "314F", - "alef", "05D0", - "alefarabic", "0627", - "alefdageshhebrew", "FB30", - "aleffinalarabic", "FE8E", - "alefhamzaabovearabic", "0623", - "alefhamzaabovefinalarabic", "FE84", - "alefhamzabelowarabic", "0625", - "alefhamzabelowfinalarabic", "FE88", - "alefhebrew", "05D0", - "aleflamedhebrew", "FB4F", - "alefmaddaabovearabic", "0622", - "alefmaddaabovefinalarabic", "FE82", - "alefmaksuraarabic", "0649", - "alefmaksurafinalarabic", "FEF0", - "alefmaksurainitialarabic", "FEF3", - "alefmaksuramedialarabic", "FEF4", - "alefpatahhebrew", "FB2E", - "alefqamatshebrew", "FB2F", - "aleph", "2135", - "allequal", "224C", - "alpha", "03B1", - "alphatonos", "03AC", - "amacron", "0101", - "amonospace", "FF41", - "ampersand", "0026", - "ampersandmonospace", "FF06", - "amsquare", "33C2", - "anbopomofo", "3122", - "angbopomofo", "3124", - "angkhankhuthai", "0E5A", - "angle", "2220", - "anglebracketleft", "3008", - "anglebracketleftvertical", "FE3F", - "anglebracketright", "3009", - "anglebracketrightvertical", "FE40", - "angleleft", "2329", - "angleright", "232A", - "angstrom", "212B", - "anoteleia", "0387", - "anudattadeva", "0952", - "anusvarabengali", "0982", - "anusvaradeva", "0902", - "anusvaragujarati", "0A82", - "aogonek", "0105", - "apaatosquare", "3300", - "aparen", "249C", - "apostrophearmenian", "055A", - "apostrophemod", "02BC", - "approaches", "2250", - "approxequal", "2248", - "approxequalorimage", "2252", - "approximatelyequal", "2245", - "araeaekorean", "318E", - "araeakorean", "318D", - "arc", "2312", - "arighthalfring", "1E9A", - "aring", "00E5", - "aringacute", "01FB", - "aringbelow", "1E01", - "arrowboth", "2194", - "arrowdashdown", "21E3", - "arrowdashleft", "21E0", - "arrowdashright", "21E2", - "arrowdashup", "21E1", - "arrowdblboth", "21D4", - "arrowdbldown", "21D3", - "arrowdblleft", "21D0", - "arrowdblright", "21D2", - "arrowdblup", "21D1", - "arrowdown", "2193", - "arrowdownleft", "2199", - "arrowdownright", "2198", - "arrowdownwhite", "21E9", - "arrowheaddownmod", "02C5", - "arrowheadleftmod", "02C2", - "arrowheadrightmod", "02C3", - "arrowheadupmod", "02C4", - "arrowleft", "2190", - "arrowleftdbl", "21D0", - "arrowleftdblstroke", "21CD", - "arrowleftoverright", "21C6", - "arrowleftwhite", "21E6", - "arrowright", "2192", - "arrowrightdblstroke", "21CF", - "arrowrightheavy", "279E", - "arrowrightoverleft", "21C4", - "arrowrightwhite", "21E8", - "arrowtableft", "21E4", - "arrowtabright", "21E5", - "arrowup", "2191", - "arrowupdn", "2195", - "arrowupdnbse", "21A8", - "arrowupdownbase", "21A8", - "arrowupleft", "2196", - "arrowupleftofdown", "21C5", - "arrowupright", "2197", - "arrowupwhite", "21E7", - "asciicircum", "005E", - "asciicircummonospace", "FF3E", - "asciitilde", "007E", - "asciitildemonospace", "FF5E", - "ascript", "0251", - "ascriptturned", "0252", - "asmallhiragana", "3041", - "asmallkatakana", "30A1", - "asmallkatakanahalfwidth", "FF67", - "asterisk", "002A", - "asteriskaltonearabic", "066D", - "asteriskarabic", "066D", - "asteriskmath", "2217", - "asteriskmonospace", "FF0A", - "asterisksmall", "FE61", - "asterism", "2042", - "asymptoticallyequal", "2243", - "at", "0040", - "atilde", "00E3", - "atmonospace", "FF20", - "atsmall", "FE6B", - "aturned", "0250", - "aubengali", "0994", - "aubopomofo", "3120", - "audeva", "0914", - "augujarati", "0A94", - "augurmukhi", "0A14", - "aulengthmarkbengali", "09D7", - "aumatragurmukhi", "0A4C", - "auvowelsignbengali", "09CC", - "auvowelsigndeva", "094C", - "auvowelsigngujarati", "0ACC", - "avagrahadeva", "093D", - "aybarmenian", "0561", - "ayin", "05E2", - "ayinaltonehebrew", "FB20", - "ayinhebrew", "05E2", - "b", "0062", - "babengali", "09AC", - "backslash", "005C", - "backslashmonospace", "FF3C", - "badeva", "092C", - "bagujarati", "0AAC", - "bagurmukhi", "0A2C", - "bahiragana", "3070", - "bahtthai", "0E3F", - "bakatakana", "30D0", - "bar", "007C", - "barmonospace", "FF5C", - "bbopomofo", "3105", - "bcircle", "24D1", - "bdotaccent", "1E03", - "bdotbelow", "1E05", - "beamedsixteenthnotes", "266C", - "because", "2235", - "becyrillic", "0431", - "beharabic", "0628", - "behfinalarabic", "FE90", - "behinitialarabic", "FE91", - "behiragana", "3079", - "behmedialarabic", "FE92", - "behmeeminitialarabic", "FC9F", - "behmeemisolatedarabic", "FC08", - "behnoonfinalarabic", "FC6D", - "bekatakana", "30D9", - "benarmenian", "0562", - "bet", "05D1", - "beta", "03B2", - "betasymbolgreek", "03D0", - "betdagesh", "FB31", - "betdageshhebrew", "FB31", - "bethebrew", "05D1", - "betrafehebrew", "FB4C", - "bhabengali", "09AD", - "bhadeva", "092D", - "bhagujarati", "0AAD", - "bhagurmukhi", "0A2D", - "bhook", "0253", - "bihiragana", "3073", - "bikatakana", "30D3", - "bilabialclick", "0298", - "bindigurmukhi", "0A02", - "birusquare", "3331", - "blackcircle", "25CF", - "blackdiamond", "25C6", - "blackdownpointingtriangle", "25BC", - "blackleftpointingpointer", "25C4", - "blackleftpointingtriangle", "25C0", - "blacklenticularbracketleft", "3010", - "blacklenticularbracketleftvertical", "FE3B", - "blacklenticularbracketright", "3011", - "blacklenticularbracketrightvertical", "FE3C", - "blacklowerlefttriangle", "25E3", - "blacklowerrighttriangle", "25E2", - "blackrectangle", "25AC", - "blackrightpointingpointer", "25BA", - "blackrightpointingtriangle", "25B6", - "blacksmallsquare", "25AA", - "blacksmilingface", "263B", - "blacksquare", "25A0", - "blackstar", "2605", - "blackupperlefttriangle", "25E4", - "blackupperrighttriangle", "25E5", - "blackuppointingsmalltriangle", "25B4", - "blackuppointingtriangle", "25B2", - "blank", "2423", - "blinebelow", "1E07", - "block", "2588", - "bmonospace", "FF42", - "bobaimaithai", "0E1A", - "bohiragana", "307C", - "bokatakana", "30DC", - "bparen", "249D", - "bqsquare", "33C3", - "braceleft", "007B", - "braceleftmonospace", "FF5B", - "braceleftsmall", "FE5B", - "braceleftvertical", "FE37", - "braceright", "007D", - "bracerightmonospace", "FF5D", - "bracerightsmall", "FE5C", - "bracerightvertical", "FE38", - "bracketleft", "005B", - "bracketleftmonospace", "FF3B", - "bracketright", "005D", - "bracketrightmonospace", "FF3D", - "breve", "02D8", - "brevebelowcmb", "032E", - "brevecmb", "0306", - "breveinvertedbelowcmb", "032F", - "breveinvertedcmb", "0311", - "breveinverteddoublecmb", "0361", - "bridgebelowcmb", "032A", - "bridgeinvertedbelowcmb", "033A", - "brokenbar", "00A6", - "bstroke", "0180", - "btopbar", "0183", - "buhiragana", "3076", - "bukatakana", "30D6", - "bullet", "2022", - "bulletinverse", "25D8", - "bulletoperator", "2219", - "bullseye", "25CE", - "c", "0063", - "caarmenian", "056E", - "cabengali", "099A", - "cacute", "0107", - "cadeva", "091A", - "cagujarati", "0A9A", - "cagurmukhi", "0A1A", - "calsquare", "3388", - "candrabindubengali", "0981", - "candrabinducmb", "0310", - "candrabindudeva", "0901", - "candrabindugujarati", "0A81", - "capslock", "21EA", - "careof", "2105", - "caron", "02C7", - "caronbelowcmb", "032C", - "caroncmb", "030C", - "carriagereturn", "21B5", - "cbopomofo", "3118", - "ccaron", "010D", - "ccedilla", "00E7", - "ccedillaacute", "1E09", - "ccircle", "24D2", - "ccircumflex", "0109", - "ccurl", "0255", - "cdot", "010B", - "cdotaccent", "010B", - "cdsquare", "33C5", - "cedilla", "00B8", - "cedillacmb", "0327", - "cent", "00A2", - "centigrade", "2103", - "centmonospace", "FFE0", - "chaarmenian", "0579", - "chabengali", "099B", - "chadeva", "091B", - "chagujarati", "0A9B", - "chagurmukhi", "0A1B", - "chbopomofo", "3114", - "cheabkhasiancyrillic", "04BD", - "checkmark", "2713", - "checyrillic", "0447", - "chedescenderabkhasiancyrillic", "04BF", - "chedescendercyrillic", "04B7", - "chedieresiscyrillic", "04F5", - "cheharmenian", "0573", - "chekhakassiancyrillic", "04CC", - "cheverticalstrokecyrillic", "04B9", - "chi", "03C7", - "chieuchacirclekorean", "3277", - "chieuchaparenkorean", "3217", - "chieuchcirclekorean", "3269", - "chieuchkorean", "314A", - "chieuchparenkorean", "3209", - "chochangthai", "0E0A", - "chochanthai", "0E08", - "chochingthai", "0E09", - "chochoethai", "0E0C", - "chook", "0188", - "cieucacirclekorean", "3276", - "cieucaparenkorean", "3216", - "cieuccirclekorean", "3268", - "cieuckorean", "3148", - "cieucparenkorean", "3208", - "cieucuparenkorean", "321C", - "circle", "25CB", - "circlemultiply", "2297", - "circleot", "2299", - "circleplus", "2295", - "circlepostalmark", "3036", - "circlewithlefthalfblack", "25D0", - "circlewithrighthalfblack", "25D1", - "circumflex", "02C6", - "circumflexbelowcmb", "032D", - "circumflexcmb", "0302", - "clear", "2327", - "clickalveolar", "01C2", - "clickdental", "01C0", - "clicklateral", "01C1", - "clickretroflex", "01C3", - "club", "2663", - "clubsuitblack", "2663", - "clubsuitwhite", "2667", - "cmcubedsquare", "33A4", - "cmonospace", "FF43", - "cmsquaredsquare", "33A0", - "coarmenian", "0581", - "colon", "003A", - "colonmonetary", "20A1", - "colonmonospace", "FF1A", - "colonsign", "20A1", - "colonsmall", "FE55", - "colontriangularhalfmod", "02D1", - "colontriangularmod", "02D0", - "comma", "002C", - "commaabovecmb", "0313", - "commaaboverightcmb", "0315", - "commaarabic", "060C", - "commaarmenian", "055D", - "commamonospace", "FF0C", - "commareversedabovecmb", "0314", - "commareversedmod", "02BD", - "commasmall", "FE50", - "commaturnedabovecmb", "0312", - "commaturnedmod", "02BB", - "compass", "263C", - "congruent", "2245", - "contourintegral", "222E", - "control", "2303", - "controlACK", "0006", - "controlBEL", "0007", - "controlBS", "0008", - "controlCAN", "0018", - "controlCR", "000D", - "controlDC1", "0011", - "controlDC2", "0012", - "controlDC3", "0013", - "controlDC4", "0014", - "controlDEL", "007F", - "controlDLE", "0010", - "controlEM", "0019", - "controlENQ", "0005", - "controlEOT", "0004", - "controlESC", "001B", - "controlETB", "0017", - "controlETX", "0003", - "controlFF", "000C", - "controlFS", "001C", - "controlGS", "001D", - "controlHT", "0009", - "controlLF", "000A", - "controlNAK", "0015", - "controlRS", "001E", - "controlSI", "000F", - "controlSO", "000E", - "controlSOT", "0002", - "controlSTX", "0001", - "controlSUB", "001A", - "controlSYN", "0016", - "controlUS", "001F", - "controlVT", "000B", - "copyright", "00A9", - "cornerbracketleft", "300C", - "cornerbracketlefthalfwidth", "FF62", - "cornerbracketleftvertical", "FE41", - "cornerbracketright", "300D", - "cornerbracketrighthalfwidth", "FF63", - "cornerbracketrightvertical", "FE42", - "corporationsquare", "337F", - "cosquare", "33C7", - "coverkgsquare", "33C6", - "cparen", "249E", - "cruzeiro", "20A2", - "cstretched", "0297", - "curlyand", "22CF", - "curlyor", "22CE", - "currency", "00A4", - "d", "0064", - "daarmenian", "0564", - "dabengali", "09A6", - "dadarabic", "0636", - "dadeva", "0926", - "dadfinalarabic", "FEBE", - "dadinitialarabic", "FEBF", - "dadmedialarabic", "FEC0", - "dagesh", "05BC", - "dageshhebrew", "05BC", - "dagger", "2020", - "daggerdbl", "2021", - "dagujarati", "0AA6", - "dagurmukhi", "0A26", - "dahiragana", "3060", - "dakatakana", "30C0", - "dalarabic", "062F", - "dalet", "05D3", - "daletdagesh", "FB33", - "daletdageshhebrew", "FB33", - "dalethatafpatah", "05D3_05B2", - "dalethatafpatahhebrew", "05D3_05B2", - "dalethatafsegol", "05D3_05B1", - "dalethatafsegolhebrew", "05D3_05B1", - "dalethebrew", "05D3", - "dalethiriq", "05D3_05B4", - "dalethiriqhebrew", "05D3_05B4", - "daletholam", "05D3_05B9", - "daletholamhebrew", "05D3_05B9", - "daletpatah", "05D3_05B7", - "daletpatahhebrew", "05D3_05B7", - "daletqamats", "05D3_05B8", - "daletqamatshebrew", "05D3_05B8", - "daletqubuts", "05D3_05BB", - "daletqubutshebrew", "05D3_05BB", - "daletsegol", "05D3_05B6", - "daletsegolhebrew", "05D3_05B6", - "daletsheva", "05D3_05B0", - "daletshevahebrew", "05D3_05B0", - "dalettsere", "05D3_05B5", - "dalettserehebrew", "05D3_05B5", - "dalfinalarabic", "FEAA", - "dammaarabic", "064F", - "dammalowarabic", "064F", - "dammatanaltonearabic", "064C", - "dammatanarabic", "064C", - "danda", "0964", - "dargahebrew", "05A7", - "dargalefthebrew", "05A7", - "dasiapneumatacyrilliccmb", "0485", - "dblanglebracketleft", "300A", - "dblanglebracketleftvertical", "FE3D", - "dblanglebracketright", "300B", - "dblanglebracketrightvertical", "FE3E", - "dblarchinvertedbelowcmb", "032B", - "dblarrowleft", "21D4", - "dblarrowright", "21D2", - "dbldanda", "0965", - "dblgravecmb", "030F", - "dblintegral", "222C", - "dbllowline", "2017", - "dbllowlinecmb", "0333", - "dbloverlinecmb", "033F", - "dblprimemod", "02BA", - "dblverticalbar", "2016", - "dblverticallineabovecmb", "030E", - "dbopomofo", "3109", - "dbsquare", "33C8", - "dcaron", "010F", - "dcedilla", "1E11", - "dcircle", "24D3", - "dcircumflexbelow", "1E13", - "dcroat", "0111", - "ddabengali", "09A1", - "ddadeva", "0921", - "ddagujarati", "0AA1", - "ddagurmukhi", "0A21", - "ddalarabic", "0688", - "ddalfinalarabic", "FB89", - "dddhadeva", "095C", - "ddhabengali", "09A2", - "ddhadeva", "0922", - "ddhagujarati", "0AA2", - "ddhagurmukhi", "0A22", - "ddotaccent", "1E0B", - "ddotbelow", "1E0D", - "decimalseparatorarabic", "066B", - "decimalseparatorpersian", "066B", - "decyrillic", "0434", - "degree", "00B0", - "dehihebrew", "05AD", - "dehiragana", "3067", - "deicoptic", "03EF", - "dekatakana", "30C7", - "deleteleft", "232B", - "deleteright", "2326", - "delta", "03B4", - "deltaturned", "018D", - "denominatorminusonenumeratorbengali", "09F8", - "dezh", "02A4", - "dhabengali", "09A7", - "dhadeva", "0927", - "dhagujarati", "0AA7", - "dhagurmukhi", "0A27", - "dhook", "0257", - "dialytikatonos", "0385", - "dialytikatonoscmb", "0344", - "diamond", "2666", - "diamondsuitwhite", "2662", - "dieresis", "00A8", - "dieresisbelowcmb", "0324", - "dieresiscmb", "0308", - "dieresistonos", "0385", - "dihiragana", "3062", - "dikatakana", "30C2", - "dittomark", "3003", - "divide", "00F7", - "divides", "2223", - "divisionslash", "2215", - "djecyrillic", "0452", - "dkshade", "2593", - "dlinebelow", "1E0F", - "dlsquare", "3397", - "dmacron", "0111", - "dmonospace", "FF44", - "dnblock", "2584", - "dochadathai", "0E0E", - "dodekthai", "0E14", - "dohiragana", "3069", - "dokatakana", "30C9", - "dollar", "0024", - "dollarmonospace", "FF04", - "dollarsmall", "FE69", - "dong", "20AB", - "dorusquare", "3326", - "dotaccent", "02D9", - "dotaccentcmb", "0307", - "dotbelowcmb", "0323", - "dotbelowcomb", "0323", - "dotkatakana", "30FB", - "dotlessi", "0131", - "dotlessjstrokehook", "0284", - "dotmath", "22C5", - "dottedcircle", "25CC", - "doubleyodpatah", "FB1F", - "doubleyodpatahhebrew", "FB1F", - "downtackbelowcmb", "031E", - "downtackmod", "02D5", - "dparen", "249F", - "dtail", "0256", - "dtopbar", "018C", - "duhiragana", "3065", - "dukatakana", "30C5", - "dz", "01F3", - "dzaltone", "02A3", - "dzcaron", "01C6", - "dzcurl", "02A5", - "dzeabkhasiancyrillic", "04E1", - "dzecyrillic", "0455", - "dzhecyrillic", "045F", - "e", "0065", - "eacute", "00E9", - "earth", "2641", - "ebengali", "098F", - "ebopomofo", "311C", - "ebreve", "0115", - "ecandradeva", "090D", - "ecandragujarati", "0A8D", - "ecandravowelsigndeva", "0945", - "ecandravowelsigngujarati", "0AC5", - "ecaron", "011B", - "ecedillabreve", "1E1D", - "echarmenian", "0565", - "echyiwnarmenian", "0587", - "ecircle", "24D4", - "ecircumflex", "00EA", - "ecircumflexacute", "1EBF", - "ecircumflexbelow", "1E19", - "ecircumflexdotbelow", "1EC7", - "ecircumflexgrave", "1EC1", - "ecircumflexhookabove", "1EC3", - "ecircumflextilde", "1EC5", - "ecyrillic", "0454", - "edblgrave", "0205", - "edeva", "090F", - "edieresis", "00EB", - "edot", "0117", - "edotaccent", "0117", - "edotbelow", "1EB9", - "eegurmukhi", "0A0F", - "eematragurmukhi", "0A47", - "efcyrillic", "0444", - "egrave", "00E8", - "egujarati", "0A8F", - "eharmenian", "0567", - "ehbopomofo", "311D", - "ehiragana", "3048", - "ehookabove", "1EBB", - "eibopomofo", "311F", - "eight", "0038", - "eightarabic", "0668", - "eightbengali", "09EE", - "eightcircle", "2467", - "eightcircleinversesansserif", "2791", - "eightdeva", "096E", - "eighteencircle", "2471", - "eighteenparen", "2485", - "eighteenperiod", "2499", - "eightgujarati", "0AEE", - "eightgurmukhi", "0A6E", - "eighthackarabic", "0668", - "eighthangzhou", "3028", - "eighthnotebeamed", "266B", - "eightideographicparen", "3227", - "eightinferior", "2088", - "eightmonospace", "FF18", - "eightparen", "247B", - "eightperiod", "248F", - "eightpersian", "06F8", - "eightroman", "2177", - "eightsuperior", "2078", - "eightthai", "0E58", - "einvertedbreve", "0207", - "eiotifiedcyrillic", "0465", - "ekatakana", "30A8", - "ekatakanahalfwidth", "FF74", - "ekonkargurmukhi", "0A74", - "ekorean", "3154", - "elcyrillic", "043B", - "element", "2208", - "elevencircle", "246A", - "elevenparen", "247E", - "elevenperiod", "2492", - "elevenroman", "217A", - "ellipsis", "2026", - "ellipsisvertical", "22EE", - "emacron", "0113", - "emacronacute", "1E17", - "emacrongrave", "1E15", - "emcyrillic", "043C", - "emdash", "2014", - "emdashvertical", "FE31", - "emonospace", "FF45", - "emphasismarkarmenian", "055B", - "emptyset", "2205", - "enbopomofo", "3123", - "encyrillic", "043D", - "endash", "2013", - "endashvertical", "FE32", - "endescendercyrillic", "04A3", - "eng", "014B", - "engbopomofo", "3125", - "enghecyrillic", "04A5", - "enhookcyrillic", "04C8", - "enspace", "2002", - "eogonek", "0119", - "eokorean", "3153", - "eopen", "025B", - "eopenclosed", "029A", - "eopenreversed", "025C", - "eopenreversedclosed", "025E", - "eopenreversedhook", "025D", - "eparen", "24A0", - "epsilon", "03B5", - "epsilontonos", "03AD", - "equal", "003D", - "equalmonospace", "FF1D", - "equalsmall", "FE66", - "equalsuperior", "207C", - "equivalence", "2261", - "erbopomofo", "3126", - "ercyrillic", "0440", - "ereversed", "0258", - "ereversedcyrillic", "044D", - "escyrillic", "0441", - "esdescendercyrillic", "04AB", - "esh", "0283", - "eshcurl", "0286", - "eshortdeva", "090E", - "eshortvowelsigndeva", "0946", - "eshreversedloop", "01AA", - "eshsquatreversed", "0285", - "esmallhiragana", "3047", - "esmallkatakana", "30A7", - "esmallkatakanahalfwidth", "FF6A", - "estimated", "212E", - "eta", "03B7", - "etarmenian", "0568", - "etatonos", "03AE", - "eth", "00F0", - "etilde", "1EBD", - "etildebelow", "1E1B", - "etnahtafoukhhebrew", "0591", - "etnahtafoukhlefthebrew", "0591", - "etnahtahebrew", "0591", - "etnahtalefthebrew", "0591", - "eturned", "01DD", - "eukorean", "3161", - "euro", "20AC", - "evowelsignbengali", "09C7", - "evowelsigndeva", "0947", - "evowelsigngujarati", "0AC7", - "exclam", "0021", - "exclamarmenian", "055C", - "exclamdbl", "203C", - "exclamdown", "00A1", - "exclammonospace", "FF01", - "existential", "2203", - "ezh", "0292", - "ezhcaron", "01EF", - "ezhcurl", "0293", - "ezhreversed", "01B9", - "ezhtail", "01BA", - "f", "0066", - "fadeva", "095E", - "fagurmukhi", "0A5E", - "fahrenheit", "2109", - "fathaarabic", "064E", - "fathalowarabic", "064E", - "fathatanarabic", "064B", - "fbopomofo", "3108", - "fcircle", "24D5", - "fdotaccent", "1E1F", - "feharabic", "0641", - "feharmenian", "0586", - "fehfinalarabic", "FED2", - "fehinitialarabic", "FED3", - "fehmedialarabic", "FED4", - "feicoptic", "03E5", - "female", "2640", - "ff", "FB00", - "ffi", "FB03", - "ffl", "FB04", - "fi", "FB01", - "fifteencircle", "246E", - "fifteenparen", "2482", - "fifteenperiod", "2496", - "figuredash", "2012", - "filledbox", "25A0", - "filledrect", "25AC", - "finalkaf", "05DA", - "finalkafdagesh", "FB3A", - "finalkafdageshhebrew", "FB3A", - "finalkafhebrew", "05DA", - "finalkafqamats", "05DA_05B8", - "finalkafqamatshebrew", "05DA_05B8", - "finalkafsheva", "05DA_05B0", - "finalkafshevahebrew", "05DA_05B0", - "finalmem", "05DD", - "finalmemhebrew", "05DD", - "finalnun", "05DF", - "finalnunhebrew", "05DF", - "finalpe", "05E3", - "finalpehebrew", "05E3", - "finaltsadi", "05E5", - "finaltsadihebrew", "05E5", - "firsttonechinese", "02C9", - "fisheye", "25C9", - "fitacyrillic", "0473", - "five", "0035", - "fivearabic", "0665", - "fivebengali", "09EB", - "fivecircle", "2464", - "fivecircleinversesansserif", "278E", - "fivedeva", "096B", - "fiveeighths", "215D", - "fivegujarati", "0AEB", - "fivegurmukhi", "0A6B", - "fivehackarabic", "0665", - "fivehangzhou", "3025", - "fiveideographicparen", "3224", - "fiveinferior", "2085", - "fivemonospace", "FF15", - "fiveparen", "2478", - "fiveperiod", "248C", - "fivepersian", "06F5", - "fiveroman", "2174", - "fivesuperior", "2075", - "fivethai", "0E55", - "fl", "FB02", - "florin", "0192", - "fmonospace", "FF46", - "fmsquare", "3399", - "fofanthai", "0E1F", - "fofathai", "0E1D", - "fongmanthai", "0E4F", - "forall", "2200", - "four", "0034", - "fourarabic", "0664", - "fourbengali", "09EA", - "fourcircle", "2463", - "fourcircleinversesansserif", "278D", - "fourdeva", "096A", - "fourgujarati", "0AEA", - "fourgurmukhi", "0A6A", - "fourhackarabic", "0664", - "fourhangzhou", "3024", - "fourideographicparen", "3223", - "fourinferior", "2084", - "fourmonospace", "FF14", - "fournumeratorbengali", "09F7", - "fourparen", "2477", - "fourperiod", "248B", - "fourpersian", "06F4", - "fourroman", "2173", - "foursuperior", "2074", - "fourteencircle", "246D", - "fourteenparen", "2481", - "fourteenperiod", "2495", - "fourthai", "0E54", - "fourthtonechinese", "02CB", - "fparen", "24A1", - "fraction", "2044", - "franc", "20A3", - "g", "0067", - "gabengali", "0997", - "gacute", "01F5", - "gadeva", "0917", - "gafarabic", "06AF", - "gaffinalarabic", "FB93", - "gafinitialarabic", "FB94", - "gafmedialarabic", "FB95", - "gagujarati", "0A97", - "gagurmukhi", "0A17", - "gahiragana", "304C", - "gakatakana", "30AC", - "gamma", "03B3", - "gammalatinsmall", "0263", - "gammasuperior", "02E0", - "gangiacoptic", "03EB", - "gbopomofo", "310D", - "gbreve", "011F", - "gcaron", "01E7", - "gcedilla", "0123", - "gcircle", "24D6", - "gcircumflex", "011D", - "gcommaaccent", "0123", - "gdot", "0121", - "gdotaccent", "0121", - "gecyrillic", "0433", - "gehiragana", "3052", - "gekatakana", "30B2", - "geometricallyequal", "2251", - "gereshaccenthebrew", "059C", - "gereshhebrew", "05F3", - "gereshmuqdamhebrew", "059D", - "germandbls", "00DF", - "gershayimaccenthebrew", "059E", - "gershayimhebrew", "05F4", - "getamark", "3013", - "ghabengali", "0998", - "ghadarmenian", "0572", - "ghadeva", "0918", - "ghagujarati", "0A98", - "ghagurmukhi", "0A18", - "ghainarabic", "063A", - "ghainfinalarabic", "FECE", - "ghaininitialarabic", "FECF", - "ghainmedialarabic", "FED0", - "ghemiddlehookcyrillic", "0495", - "ghestrokecyrillic", "0493", - "gheupturncyrillic", "0491", - "ghhadeva", "095A", - "ghhagurmukhi", "0A5A", - "ghook", "0260", - "ghzsquare", "3393", - "gihiragana", "304E", - "gikatakana", "30AE", - "gimarmenian", "0563", - "gimel", "05D2", - "gimeldagesh", "FB32", - "gimeldageshhebrew", "FB32", - "gimelhebrew", "05D2", - "gjecyrillic", "0453", - "glottalinvertedstroke", "01BE", - "glottalstop", "0294", - "glottalstopinverted", "0296", - "glottalstopmod", "02C0", - "glottalstopreversed", "0295", - "glottalstopreversedmod", "02C1", - "glottalstopreversedsuperior", "02E4", - "glottalstopstroke", "02A1", - "glottalstopstrokereversed", "02A2", - "gmacron", "1E21", - "gmonospace", "FF47", - "gohiragana", "3054", - "gokatakana", "30B4", - "gparen", "24A2", - "gpasquare", "33AC", - "gradient", "2207", - "grave", "0060", - "gravebelowcmb", "0316", - "gravecmb", "0300", - "gravecomb", "0300", - "gravedeva", "0953", - "gravelowmod", "02CE", - "gravemonospace", "FF40", - "gravetonecmb", "0340", - "greater", "003E", - "greaterequal", "2265", - "greaterequalorless", "22DB", - "greatermonospace", "FF1E", - "greaterorequivalent", "2273", - "greaterorless", "2277", - "greateroverequal", "2267", - "greatersmall", "FE65", - "gscript", "0261", - "gstroke", "01E5", - "guhiragana", "3050", - "guillemotleft", "00AB", - "guillemotright", "00BB", - "guilsinglleft", "2039", - "guilsinglright", "203A", - "gukatakana", "30B0", - "guramusquare", "3318", - "gysquare", "33C9", - "h", "0068", - "haabkhasiancyrillic", "04A9", - "haaltonearabic", "06C1", - "habengali", "09B9", - "hadescendercyrillic", "04B3", - "hadeva", "0939", - "hagujarati", "0AB9", - "hagurmukhi", "0A39", - "haharabic", "062D", - "hahfinalarabic", "FEA2", - "hahinitialarabic", "FEA3", - "hahiragana", "306F", - "hahmedialarabic", "FEA4", - "haitusquare", "332A", - "hakatakana", "30CF", - "hakatakanahalfwidth", "FF8A", - "halantgurmukhi", "0A4D", - "hamzaarabic", "0621", - "hamzadammaarabic", "0621_064F", - "hamzadammatanarabic", "0621_064C", - "hamzafathaarabic", "0621_064E", - "hamzafathatanarabic", "0621_064B", - "hamzalowarabic", "0621", - "hamzalowkasraarabic", "0621_0650", - "hamzalowkasratanarabic", "0621_064D", - "hamzasukunarabic", "0621_0652", - "hangulfiller", "3164", - "hardsigncyrillic", "044A", - "harpoonleftbarbup", "21BC", - "harpoonrightbarbup", "21C0", - "hasquare", "33CA", - "hatafpatah", "05B2", - "hatafpatah16", "05B2", - "hatafpatah23", "05B2", - "hatafpatah2f", "05B2", - "hatafpatahhebrew", "05B2", - "hatafpatahnarrowhebrew", "05B2", - "hatafpatahquarterhebrew", "05B2", - "hatafpatahwidehebrew", "05B2", - "hatafqamats", "05B3", - "hatafqamats1b", "05B3", - "hatafqamats28", "05B3", - "hatafqamats34", "05B3", - "hatafqamatshebrew", "05B3", - "hatafqamatsnarrowhebrew", "05B3", - "hatafqamatsquarterhebrew", "05B3", - "hatafqamatswidehebrew", "05B3", - "hatafsegol", "05B1", - "hatafsegol17", "05B1", - "hatafsegol24", "05B1", - "hatafsegol30", "05B1", - "hatafsegolhebrew", "05B1", - "hatafsegolnarrowhebrew", "05B1", - "hatafsegolquarterhebrew", "05B1", - "hatafsegolwidehebrew", "05B1", - "hbar", "0127", - "hbopomofo", "310F", - "hbrevebelow", "1E2B", - "hcedilla", "1E29", - "hcircle", "24D7", - "hcircumflex", "0125", - "hdieresis", "1E27", - "hdotaccent", "1E23", - "hdotbelow", "1E25", - "he", "05D4", - "heart", "2665", - "heartsuitblack", "2665", - "heartsuitwhite", "2661", - "hedagesh", "FB34", - "hedageshhebrew", "FB34", - "hehaltonearabic", "06C1", - "heharabic", "0647", - "hehebrew", "05D4", - "hehfinalaltonearabic", "FBA7", - "hehfinalalttwoarabic", "FEEA", - "hehfinalarabic", "FEEA", - "hehhamzaabovefinalarabic", "FBA5", - "hehhamzaaboveisolatedarabic", "FBA4", - "hehinitialaltonearabic", "FBA8", - "hehinitialarabic", "FEEB", - "hehiragana", "3078", - "hehmedialaltonearabic", "FBA9", - "hehmedialarabic", "FEEC", - "heiseierasquare", "337B", - "hekatakana", "30D8", - "hekatakanahalfwidth", "FF8D", - "hekutaarusquare", "3336", - "henghook", "0267", - "herutusquare", "3339", - "het", "05D7", - "hethebrew", "05D7", - "hhook", "0266", - "hhooksuperior", "02B1", - "hieuhacirclekorean", "327B", - "hieuhaparenkorean", "321B", - "hieuhcirclekorean", "326D", - "hieuhkorean", "314E", - "hieuhparenkorean", "320D", - "hihiragana", "3072", - "hikatakana", "30D2", - "hikatakanahalfwidth", "FF8B", - "hiriq", "05B4", - "hiriq14", "05B4", - "hiriq21", "05B4", - "hiriq2d", "05B4", - "hiriqhebrew", "05B4", - "hiriqnarrowhebrew", "05B4", - "hiriqquarterhebrew", "05B4", - "hiriqwidehebrew", "05B4", - "hlinebelow", "1E96", - "hmonospace", "FF48", - "hoarmenian", "0570", - "hohipthai", "0E2B", - "hohiragana", "307B", - "hokatakana", "30DB", - "hokatakanahalfwidth", "FF8E", - "holam", "05B9", - "holam19", "05B9", - "holam26", "05B9", - "holam32", "05B9", - "holamhebrew", "05B9", - "holamnarrowhebrew", "05B9", - "holamquarterhebrew", "05B9", - "holamwidehebrew", "05B9", - "honokhukthai", "0E2E", - "hookabovecomb", "0309", - "hookcmb", "0309", - "hookpalatalizedbelowcmb", "0321", - "hookretroflexbelowcmb", "0322", - "hoonsquare", "3342", - "horicoptic", "03E9", - "horizontalbar", "2015", - "horncmb", "031B", - "hotsprings", "2668", - "house", "2302", - "hparen", "24A3", - "hsuperior", "02B0", - "hturned", "0265", - "huhiragana", "3075", - "huiitosquare", "3333", - "hukatakana", "30D5", - "hukatakanahalfwidth", "FF8C", - "hungarumlaut", "02DD", - "hungarumlautcmb", "030B", - "hv", "0195", - "hyphen", "002D", - "hyphenmonospace", "FF0D", - "hyphensmall", "FE63", - "hyphentwo", "2010", - "i", "0069", - "iacute", "00ED", - "iacyrillic", "044F", - "ibengali", "0987", - "ibopomofo", "3127", - "ibreve", "012D", - "icaron", "01D0", - "icircle", "24D8", - "icircumflex", "00EE", - "icyrillic", "0456", - "idblgrave", "0209", - "ideographearthcircle", "328F", - "ideographfirecircle", "328B", - "ideographicallianceparen", "323F", - "ideographiccallparen", "323A", - "ideographiccentrecircle", "32A5", - "ideographicclose", "3006", - "ideographiccomma", "3001", - "ideographiccommaleft", "FF64", - "ideographiccongratulationparen", "3237", - "ideographiccorrectcircle", "32A3", - "ideographicearthparen", "322F", - "ideographicenterpriseparen", "323D", - "ideographicexcellentcircle", "329D", - "ideographicfestivalparen", "3240", - "ideographicfinancialcircle", "3296", - "ideographicfinancialparen", "3236", - "ideographicfireparen", "322B", - "ideographichaveparen", "3232", - "ideographichighcircle", "32A4", - "ideographiciterationmark", "3005", - "ideographiclaborcircle", "3298", - "ideographiclaborparen", "3238", - "ideographicleftcircle", "32A7", - "ideographiclowcircle", "32A6", - "ideographicmedicinecircle", "32A9", - "ideographicmetalparen", "322E", - "ideographicmoonparen", "322A", - "ideographicnameparen", "3234", - "ideographicperiod", "3002", - "ideographicprintcircle", "329E", - "ideographicreachparen", "3243", - "ideographicrepresentparen", "3239", - "ideographicresourceparen", "323E", - "ideographicrightcircle", "32A8", - "ideographicsecretcircle", "3299", - "ideographicselfparen", "3242", - "ideographicsocietyparen", "3233", - "ideographicspace", "3000", - "ideographicspecialparen", "3235", - "ideographicstockparen", "3231", - "ideographicstudyparen", "323B", - "ideographicsunparen", "3230", - "ideographicsuperviseparen", "323C", - "ideographicwaterparen", "322C", - "ideographicwoodparen", "322D", - "ideographiczero", "3007", - "ideographmetalcircle", "328E", - "ideographmooncircle", "328A", - "ideographnamecircle", "3294", - "ideographsuncircle", "3290", - "ideographwatercircle", "328C", - "ideographwoodcircle", "328D", - "ideva", "0907", - "idieresis", "00EF", - "idieresisacute", "1E2F", - "idieresiscyrillic", "04E5", - "idotbelow", "1ECB", - "iebrevecyrillic", "04D7", - "iecyrillic", "0435", - "ieungacirclekorean", "3275", - "ieungaparenkorean", "3215", - "ieungcirclekorean", "3267", - "ieungkorean", "3147", - "ieungparenkorean", "3207", - "igrave", "00EC", - "igujarati", "0A87", - "igurmukhi", "0A07", - "ihiragana", "3044", - "ihookabove", "1EC9", - "iibengali", "0988", - "iicyrillic", "0438", - "iideva", "0908", - "iigujarati", "0A88", - "iigurmukhi", "0A08", - "iimatragurmukhi", "0A40", - "iinvertedbreve", "020B", - "iishortcyrillic", "0439", - "iivowelsignbengali", "09C0", - "iivowelsigndeva", "0940", - "iivowelsigngujarati", "0AC0", - "ij", "0133", - "ikatakana", "30A4", - "ikatakanahalfwidth", "FF72", - "ikorean", "3163", - "ilde", "02DC", - "iluyhebrew", "05AC", - "imacron", "012B", - "imacroncyrillic", "04E3", - "imageorapproximatelyequal", "2253", - "imatragurmukhi", "0A3F", - "imonospace", "FF49", - "increment", "2206", - "infinity", "221E", - "iniarmenian", "056B", - "integral", "222B", - "integralbottom", "2321", - "integralbt", "2321", - "integraltop", "2320", - "integraltp", "2320", - "intersection", "2229", - "intisquare", "3305", - "invbullet", "25D8", - "invcircle", "25D9", - "invsmileface", "263B", - "iocyrillic", "0451", - "iogonek", "012F", - "iota", "03B9", - "iotadieresis", "03CA", - "iotadieresistonos", "0390", - "iotalatin", "0269", - "iotatonos", "03AF", - "iparen", "24A4", - "irigurmukhi", "0A72", - "ismallhiragana", "3043", - "ismallkatakana", "30A3", - "ismallkatakanahalfwidth", "FF68", - "issharbengali", "09FA", - "istroke", "0268", - "iterationhiragana", "309D", - "iterationkatakana", "30FD", - "itilde", "0129", - "itildebelow", "1E2D", - "iubopomofo", "3129", - "iucyrillic", "044E", - "ivowelsignbengali", "09BF", - "ivowelsigndeva", "093F", - "ivowelsigngujarati", "0ABF", - "izhitsacyrillic", "0475", - "izhitsadblgravecyrillic", "0477", - "j", "006A", - "jaarmenian", "0571", - "jabengali", "099C", - "jadeva", "091C", - "jagujarati", "0A9C", - "jagurmukhi", "0A1C", - "jbopomofo", "3110", - "jcaron", "01F0", - "jcircle", "24D9", - "jcircumflex", "0135", - "jcrossedtail", "029D", - "jdotlessstroke", "025F", - "jecyrillic", "0458", - "jeemarabic", "062C", - "jeemfinalarabic", "FE9E", - "jeeminitialarabic", "FE9F", - "jeemmedialarabic", "FEA0", - "jeharabic", "0698", - "jehfinalarabic", "FB8B", - "jhabengali", "099D", - "jhadeva", "091D", - "jhagujarati", "0A9D", - "jhagurmukhi", "0A1D", - "jheharmenian", "057B", - "jis", "3004", - "jmonospace", "FF4A", - "jparen", "24A5", - "jsuperior", "02B2", - "k", "006B", - "kabashkircyrillic", "04A1", - "kabengali", "0995", - "kacute", "1E31", - "kacyrillic", "043A", - "kadescendercyrillic", "049B", - "kadeva", "0915", - "kaf", "05DB", - "kafarabic", "0643", - "kafdagesh", "FB3B", - "kafdageshhebrew", "FB3B", - "kaffinalarabic", "FEDA", - "kafhebrew", "05DB", - "kafinitialarabic", "FEDB", - "kafmedialarabic", "FEDC", - "kafrafehebrew", "FB4D", - "kagujarati", "0A95", - "kagurmukhi", "0A15", - "kahiragana", "304B", - "kahookcyrillic", "04C4", - "kakatakana", "30AB", - "kakatakanahalfwidth", "FF76", - "kappa", "03BA", - "kappasymbolgreek", "03F0", - "kapyeounmieumkorean", "3171", - "kapyeounphieuphkorean", "3184", - "kapyeounpieupkorean", "3178", - "kapyeounssangpieupkorean", "3179", - "karoriisquare", "330D", - "kashidaautoarabic", "0640", - "kashidaautonosidebearingarabic", "0640", - "kasmallkatakana", "30F5", - "kasquare", "3384", - "kasraarabic", "0650", - "kasratanarabic", "064D", - "kastrokecyrillic", "049F", - "katahiraprolongmarkhalfwidth", "FF70", - "kaverticalstrokecyrillic", "049D", - "kbopomofo", "310E", - "kcalsquare", "3389", - "kcaron", "01E9", - "kcedilla", "0137", - "kcircle", "24DA", - "kcommaaccent", "0137", - "kdotbelow", "1E33", - "keharmenian", "0584", - "kehiragana", "3051", - "kekatakana", "30B1", - "kekatakanahalfwidth", "FF79", - "kenarmenian", "056F", - "kesmallkatakana", "30F6", - "kgreenlandic", "0138", - "khabengali", "0996", - "khacyrillic", "0445", - "khadeva", "0916", - "khagujarati", "0A96", - "khagurmukhi", "0A16", - "khaharabic", "062E", - "khahfinalarabic", "FEA6", - "khahinitialarabic", "FEA7", - "khahmedialarabic", "FEA8", - "kheicoptic", "03E7", - "khhadeva", "0959", - "khhagurmukhi", "0A59", - "khieukhacirclekorean", "3278", - "khieukhaparenkorean", "3218", - "khieukhcirclekorean", "326A", - "khieukhkorean", "314B", - "khieukhparenkorean", "320A", - "khokhaithai", "0E02", - "khokhonthai", "0E05", - "khokhuatthai", "0E03", - "khokhwaithai", "0E04", - "khomutthai", "0E5B", - "khook", "0199", - "khorakhangthai", "0E06", - "khzsquare", "3391", - "kihiragana", "304D", - "kikatakana", "30AD", - "kikatakanahalfwidth", "FF77", - "kiroguramusquare", "3315", - "kiromeetorusquare", "3316", - "kirosquare", "3314", - "kiyeokacirclekorean", "326E", - "kiyeokaparenkorean", "320E", - "kiyeokcirclekorean", "3260", - "kiyeokkorean", "3131", - "kiyeokparenkorean", "3200", - "kiyeoksioskorean", "3133", - "kjecyrillic", "045C", - "klinebelow", "1E35", - "klsquare", "3398", - "kmcubedsquare", "33A6", - "kmonospace", "FF4B", - "kmsquaredsquare", "33A2", - "kohiragana", "3053", - "kohmsquare", "33C0", - "kokaithai", "0E01", - "kokatakana", "30B3", - "kokatakanahalfwidth", "FF7A", - "kooposquare", "331E", - "koppacyrillic", "0481", - "koreanstandardsymbol", "327F", - "koroniscmb", "0343", - "kparen", "24A6", - "kpasquare", "33AA", - "ksicyrillic", "046F", - "ktsquare", "33CF", - "kturned", "029E", - "kuhiragana", "304F", - "kukatakana", "30AF", - "kukatakanahalfwidth", "FF78", - "kvsquare", "33B8", - "kwsquare", "33BE", - "l", "006C", - "labengali", "09B2", - "lacute", "013A", - "ladeva", "0932", - "lagujarati", "0AB2", - "lagurmukhi", "0A32", - "lakkhangyaothai", "0E45", - "lamaleffinalarabic", "FEFC", - "lamalefhamzaabovefinalarabic", "FEF8", - "lamalefhamzaaboveisolatedarabic", "FEF7", - "lamalefhamzabelowfinalarabic", "FEFA", - "lamalefhamzabelowisolatedarabic", "FEF9", - "lamalefisolatedarabic", "FEFB", - "lamalefmaddaabovefinalarabic", "FEF6", - "lamalefmaddaaboveisolatedarabic", "FEF5", - "lamarabic", "0644", - "lambda", "03BB", - "lambdastroke", "019B", - "lamed", "05DC", - "lameddagesh", "FB3C", - "lameddageshhebrew", "FB3C", - "lamedhebrew", "05DC", - "lamedholam", "05DC_05B9", - "lamedholamdagesh", "05DC_05B9_05BC", - "lamedholamdageshhebrew", "05DC_05B9_05BC", - "lamedholamhebrew", "05DC_05B9", - "lamfinalarabic", "FEDE", - "lamhahinitialarabic", "FCCA", - "laminitialarabic", "FEDF", - "lamjeeminitialarabic", "FCC9", - "lamkhahinitialarabic", "FCCB", - "lamlamhehisolatedarabic", "FDF2", - "lammedialarabic", "FEE0", - "lammeemhahinitialarabic", "FD88", - "lammeeminitialarabic", "FCCC", - "lammeemjeeminitialarabic", "FEDF_FEE4_FEA0", - "lammeemkhahinitialarabic", "FEDF_FEE4_FEA8", - "largecircle", "25EF", - "lbar", "019A", - "lbelt", "026C", - "lbopomofo", "310C", - "lcaron", "013E", - "lcedilla", "013C", - "lcircle", "24DB", - "lcircumflexbelow", "1E3D", - "lcommaaccent", "013C", - "ldot", "0140", - "ldotaccent", "0140", - "ldotbelow", "1E37", - "ldotbelowmacron", "1E39", - "leftangleabovecmb", "031A", - "lefttackbelowcmb", "0318", - "less", "003C", - "lessequal", "2264", - "lessequalorgreater", "22DA", - "lessmonospace", "FF1C", - "lessorequivalent", "2272", - "lessorgreater", "2276", - "lessoverequal", "2266", - "lesssmall", "FE64", - "lezh", "026E", - "lfblock", "258C", - "lhookretroflex", "026D", - "lira", "20A4", - "liwnarmenian", "056C", - "lj", "01C9", - "ljecyrillic", "0459", - "lladeva", "0933", - "llagujarati", "0AB3", - "llinebelow", "1E3B", - "llladeva", "0934", - "llvocalicbengali", "09E1", - "llvocalicdeva", "0961", - "llvocalicvowelsignbengali", "09E3", - "llvocalicvowelsigndeva", "0963", - "lmiddletilde", "026B", - "lmonospace", "FF4C", - "lmsquare", "33D0", - "lochulathai", "0E2C", - "logicaland", "2227", - "logicalnot", "00AC", - "logicalnotreversed", "2310", - "logicalor", "2228", - "lolingthai", "0E25", - "longs", "017F", - "lowlinecenterline", "FE4E", - "lowlinecmb", "0332", - "lowlinedashed", "FE4D", - "lozenge", "25CA", - "lparen", "24A7", - "lslash", "0142", - "lsquare", "2113", - "ltshade", "2591", - "luthai", "0E26", - "lvocalicbengali", "098C", - "lvocalicdeva", "090C", - "lvocalicvowelsignbengali", "09E2", - "lvocalicvowelsigndeva", "0962", - "lxsquare", "33D3", - "m", "006D", - "mabengali", "09AE", - "macron", "00AF", - "macronbelowcmb", "0331", - "macroncmb", "0304", - "macronlowmod", "02CD", - "macronmonospace", "FFE3", - "macute", "1E3F", - "madeva", "092E", - "magujarati", "0AAE", - "magurmukhi", "0A2E", - "mahapakhhebrew", "05A4", - "mahapakhlefthebrew", "05A4", - "mahiragana", "307E", - "maichattawathai", "0E4B", - "maiekthai", "0E48", - "maihanakatthai", "0E31", - "maitaikhuthai", "0E47", - "maithothai", "0E49", - "maitrithai", "0E4A", - "maiyamokthai", "0E46", - "makatakana", "30DE", - "makatakanahalfwidth", "FF8F", - "male", "2642", - "mansyonsquare", "3347", - "maqafhebrew", "05BE", - "mars", "2642", - "masoracirclehebrew", "05AF", - "masquare", "3383", - "mbopomofo", "3107", - "mbsquare", "33D4", - "mcircle", "24DC", - "mcubedsquare", "33A5", - "mdotaccent", "1E41", - "mdotbelow", "1E43", - "meemarabic", "0645", - "meemfinalarabic", "FEE2", - "meeminitialarabic", "FEE3", - "meemmedialarabic", "FEE4", - "meemmeeminitialarabic", "FCD1", - "meemmeemisolatedarabic", "FC48", - "meetorusquare", "334D", - "mehiragana", "3081", - "meizierasquare", "337E", - "mekatakana", "30E1", - "mekatakanahalfwidth", "FF92", - "mem", "05DE", - "memdagesh", "FB3E", - "memdageshhebrew", "FB3E", - "memhebrew", "05DE", - "menarmenian", "0574", - "merkhahebrew", "05A5", - "merkhakefulahebrew", "05A6", - "merkhakefulalefthebrew", "05A6", - "merkhalefthebrew", "05A5", - "mhook", "0271", - "mhzsquare", "3392", - "middledotkatakanahalfwidth", "FF65", - "middot", "00B7", - "mieumacirclekorean", "3272", - "mieumaparenkorean", "3212", - "mieumcirclekorean", "3264", - "mieumkorean", "3141", - "mieumpansioskorean", "3170", - "mieumparenkorean", "3204", - "mieumpieupkorean", "316E", - "mieumsioskorean", "316F", - "mihiragana", "307F", - "mikatakana", "30DF", - "mikatakanahalfwidth", "FF90", - "minus", "2212", - "minusbelowcmb", "0320", - "minuscircle", "2296", - "minusmod", "02D7", - "minusplus", "2213", - "minute", "2032", - "miribaarusquare", "334A", - "mirisquare", "3349", - "mlonglegturned", "0270", - "mlsquare", "3396", - "mmcubedsquare", "33A3", - "mmonospace", "FF4D", - "mmsquaredsquare", "339F", - "mohiragana", "3082", - "mohmsquare", "33C1", - "mokatakana", "30E2", - "mokatakanahalfwidth", "FF93", - "molsquare", "33D6", - "momathai", "0E21", - "moverssquare", "33A7", - "moverssquaredsquare", "33A8", - "mparen", "24A8", - "mpasquare", "33AB", - "mssquare", "33B3", - "mturned", "026F", - "mu", "00B5", - "mu1", "00B5", - "muasquare", "3382", - "muchgreater", "226B", - "muchless", "226A", - "mufsquare", "338C", - "mugreek", "03BC", - "mugsquare", "338D", - "muhiragana", "3080", - "mukatakana", "30E0", - "mukatakanahalfwidth", "FF91", - "mulsquare", "3395", - "multiply", "00D7", - "mumsquare", "339B", - "munahhebrew", "05A3", - "munahlefthebrew", "05A3", - "musicalnote", "266A", - "musicalnotedbl", "266B", - "musicflatsign", "266D", - "musicsharpsign", "266F", - "mussquare", "33B2", - "muvsquare", "33B6", - "muwsquare", "33BC", - "mvmegasquare", "33B9", - "mvsquare", "33B7", - "mwmegasquare", "33BF", - "mwsquare", "33BD", - "n", "006E", - "nabengali", "09A8", - "nabla", "2207", - "nacute", "0144", - "nadeva", "0928", - "nagujarati", "0AA8", - "nagurmukhi", "0A28", - "nahiragana", "306A", - "nakatakana", "30CA", - "nakatakanahalfwidth", "FF85", - "napostrophe", "0149", - "nasquare", "3381", - "nbopomofo", "310B", - "nbspace", "00A0", - "ncaron", "0148", - "ncedilla", "0146", - "ncircle", "24DD", - "ncircumflexbelow", "1E4B", - "ncommaaccent", "0146", - "ndotaccent", "1E45", - "ndotbelow", "1E47", - "nehiragana", "306D", - "nekatakana", "30CD", - "nekatakanahalfwidth", "FF88", - "newsheqelsign", "20AA", - "nfsquare", "338B", - "ngabengali", "0999", - "ngadeva", "0919", - "ngagujarati", "0A99", - "ngagurmukhi", "0A19", - "ngonguthai", "0E07", - "nhiragana", "3093", - "nhookleft", "0272", - "nhookretroflex", "0273", - "nieunacirclekorean", "326F", - "nieunaparenkorean", "320F", - "nieuncieuckorean", "3135", - "nieuncirclekorean", "3261", - "nieunhieuhkorean", "3136", - "nieunkorean", "3134", - "nieunpansioskorean", "3168", - "nieunparenkorean", "3201", - "nieunsioskorean", "3167", - "nieuntikeutkorean", "3166", - "nihiragana", "306B", - "nikatakana", "30CB", - "nikatakanahalfwidth", "FF86", - "nikhahitthai", "0E4D", - "nine", "0039", - "ninearabic", "0669", - "ninebengali", "09EF", - "ninecircle", "2468", - "ninecircleinversesansserif", "2792", - "ninedeva", "096F", - "ninegujarati", "0AEF", - "ninegurmukhi", "0A6F", - "ninehackarabic", "0669", - "ninehangzhou", "3029", - "nineideographicparen", "3228", - "nineinferior", "2089", - "ninemonospace", "FF19", - "nineparen", "247C", - "nineperiod", "2490", - "ninepersian", "06F9", - "nineroman", "2178", - "ninesuperior", "2079", - "nineteencircle", "2472", - "nineteenparen", "2486", - "nineteenperiod", "249A", - "ninethai", "0E59", - "nj", "01CC", - "njecyrillic", "045A", - "nkatakana", "30F3", - "nkatakanahalfwidth", "FF9D", - "nlegrightlong", "019E", - "nlinebelow", "1E49", - "nmonospace", "FF4E", - "nmsquare", "339A", - "nnabengali", "09A3", - "nnadeva", "0923", - "nnagujarati", "0AA3", - "nnagurmukhi", "0A23", - "nnnadeva", "0929", - "nohiragana", "306E", - "nokatakana", "30CE", - "nokatakanahalfwidth", "FF89", - "nonbreakingspace", "00A0", - "nonenthai", "0E13", - "nonuthai", "0E19", - "noonarabic", "0646", - "noonfinalarabic", "FEE6", - "noonghunnaarabic", "06BA", - "noonghunnafinalarabic", "FB9F", - "noonhehinitialarabic", "FEE7_FEEC", - "nooninitialarabic", "FEE7", - "noonjeeminitialarabic", "FCD2", - "noonjeemisolatedarabic", "FC4B", - "noonmedialarabic", "FEE8", - "noonmeeminitialarabic", "FCD5", - "noonmeemisolatedarabic", "FC4E", - "noonnoonfinalarabic", "FC8D", - "notcontains", "220C", - "notelement", "2209", - "notelementof", "2209", - "notequal", "2260", - "notgreater", "226F", - "notgreaternorequal", "2271", - "notgreaternorless", "2279", - "notidentical", "2262", - "notless", "226E", - "notlessnorequal", "2270", - "notparallel", "2226", - "notprecedes", "2280", - "notsubset", "2284", - "notsucceeds", "2281", - "notsuperset", "2285", - "nowarmenian", "0576", - "nparen", "24A9", - "nssquare", "33B1", - "nsuperior", "207F", - "ntilde", "00F1", - "nu", "03BD", - "nuhiragana", "306C", - "nukatakana", "30CC", - "nukatakanahalfwidth", "FF87", - "nuktabengali", "09BC", - "nuktadeva", "093C", - "nuktagujarati", "0ABC", - "nuktagurmukhi", "0A3C", - "numbersign", "0023", - "numbersignmonospace", "FF03", - "numbersignsmall", "FE5F", - "numeralsigngreek", "0374", - "numeralsignlowergreek", "0375", - "numero", "2116", - "nun", "05E0", - "nundagesh", "FB40", - "nundageshhebrew", "FB40", - "nunhebrew", "05E0", - "nvsquare", "33B5", - "nwsquare", "33BB", - "nyabengali", "099E", - "nyadeva", "091E", - "nyagujarati", "0A9E", - "nyagurmukhi", "0A1E", - "o", "006F", - "oacute", "00F3", - "oangthai", "0E2D", - "obarred", "0275", - "obarredcyrillic", "04E9", - "obarreddieresiscyrillic", "04EB", - "obengali", "0993", - "obopomofo", "311B", - "obreve", "014F", - "ocandradeva", "0911", - "ocandragujarati", "0A91", - "ocandravowelsigndeva", "0949", - "ocandravowelsigngujarati", "0AC9", - "ocaron", "01D2", - "ocircle", "24DE", - "ocircumflex", "00F4", - "ocircumflexacute", "1ED1", - "ocircumflexdotbelow", "1ED9", - "ocircumflexgrave", "1ED3", - "ocircumflexhookabove", "1ED5", - "ocircumflextilde", "1ED7", - "ocyrillic", "043E", - "odblacute", "0151", - "odblgrave", "020D", - "odeva", "0913", - "odieresis", "00F6", - "odieresiscyrillic", "04E7", - "odotbelow", "1ECD", - "oe", "0153", - "oekorean", "315A", - "ogonek", "02DB", - "ogonekcmb", "0328", - "ograve", "00F2", - "ogujarati", "0A93", - "oharmenian", "0585", - "ohiragana", "304A", - "ohookabove", "1ECF", - "ohorn", "01A1", - "ohornacute", "1EDB", - "ohorndotbelow", "1EE3", - "ohorngrave", "1EDD", - "ohornhookabove", "1EDF", - "ohorntilde", "1EE1", - "ohungarumlaut", "0151", - "oi", "01A3", - "oinvertedbreve", "020F", - "okatakana", "30AA", - "okatakanahalfwidth", "FF75", - "okorean", "3157", - "olehebrew", "05AB", - "omacron", "014D", - "omacronacute", "1E53", - "omacrongrave", "1E51", - "omdeva", "0950", - "omega", "03C9", - "omega1", "03D6", - "omegacyrillic", "0461", - "omegalatinclosed", "0277", - "omegaroundcyrillic", "047B", - "omegatitlocyrillic", "047D", - "omegatonos", "03CE", - "omgujarati", "0AD0", - "omicron", "03BF", - "omicrontonos", "03CC", - "omonospace", "FF4F", - "one", "0031", - "onearabic", "0661", - "onebengali", "09E7", - "onecircle", "2460", - "onecircleinversesansserif", "278A", - "onedeva", "0967", - "onedotenleader", "2024", - "oneeighth", "215B", - "onegujarati", "0AE7", - "onegurmukhi", "0A67", - "onehackarabic", "0661", - "onehalf", "00BD", - "onehangzhou", "3021", - "oneideographicparen", "3220", - "oneinferior", "2081", - "onemonospace", "FF11", - "onenumeratorbengali", "09F4", - "oneparen", "2474", - "oneperiod", "2488", - "onepersian", "06F1", - "onequarter", "00BC", - "oneroman", "2170", - "onesuperior", "00B9", - "onethai", "0E51", - "onethird", "2153", - "oogonek", "01EB", - "oogonekmacron", "01ED", - "oogurmukhi", "0A13", - "oomatragurmukhi", "0A4B", - "oopen", "0254", - "oparen", "24AA", - "openbullet", "25E6", - "option", "2325", - "ordfeminine", "00AA", - "ordmasculine", "00BA", - "orthogonal", "221F", - "oshortdeva", "0912", - "oshortvowelsigndeva", "094A", - "oslash", "00F8", - "oslashacute", "01FF", - "osmallhiragana", "3049", - "osmallkatakana", "30A9", - "osmallkatakanahalfwidth", "FF6B", - "ostrokeacute", "01FF", - "otcyrillic", "047F", - "otilde", "00F5", - "otildeacute", "1E4D", - "otildedieresis", "1E4F", - "oubopomofo", "3121", - "overline", "203E", - "overlinecenterline", "FE4A", - "overlinecmb", "0305", - "overlinedashed", "FE49", - "overlinedblwavy", "FE4C", - "overlinewavy", "FE4B", - "overscore", "00AF", - "ovowelsignbengali", "09CB", - "ovowelsigndeva", "094B", - "ovowelsigngujarati", "0ACB", - "p", "0070", - "paampssquare", "3380", - "paasentosquare", "332B", - "pabengali", "09AA", - "pacute", "1E55", - "padeva", "092A", - "pagedown", "21DF", - "pageup", "21DE", - "pagujarati", "0AAA", - "pagurmukhi", "0A2A", - "pahiragana", "3071", - "paiyannoithai", "0E2F", - "pakatakana", "30D1", - "palatalizationcyrilliccmb", "0484", - "palochkacyrillic", "04C0", - "pansioskorean", "317F", - "paragraph", "00B6", - "parallel", "2225", - "parenleft", "0028", - "parenleftaltonearabic", "FD3E", - "parenleftinferior", "208D", - "parenleftmonospace", "FF08", - "parenleftsmall", "FE59", - "parenleftsuperior", "207D", - "parenleftvertical", "FE35", - "parenright", "0029", - "parenrightaltonearabic", "FD3F", - "parenrightinferior", "208E", - "parenrightmonospace", "FF09", - "parenrightsmall", "FE5A", - "parenrightsuperior", "207E", - "parenrightvertical", "FE36", - "partialdiff", "2202", - "paseqhebrew", "05C0", - "pashtahebrew", "0599", - "pasquare", "33A9", - "patah", "05B7", - "patah11", "05B7", - "patah1d", "05B7", - "patah2a", "05B7", - "patahhebrew", "05B7", - "patahnarrowhebrew", "05B7", - "patahquarterhebrew", "05B7", - "patahwidehebrew", "05B7", - "pazerhebrew", "05A1", - "pbopomofo", "3106", - "pcircle", "24DF", - "pdotaccent", "1E57", - "pe", "05E4", - "pecyrillic", "043F", - "pedagesh", "FB44", - "pedageshhebrew", "FB44", - "peezisquare", "333B", - "pefinaldageshhebrew", "FB43", - "peharabic", "067E", - "peharmenian", "057A", - "pehebrew", "05E4", - "pehfinalarabic", "FB57", - "pehinitialarabic", "FB58", - "pehiragana", "307A", - "pehmedialarabic", "FB59", - "pekatakana", "30DA", - "pemiddlehookcyrillic", "04A7", - "perafehebrew", "FB4E", - "percent", "0025", - "percentarabic", "066A", - "percentmonospace", "FF05", - "percentsmall", "FE6A", - "period", "002E", - "periodarmenian", "0589", - "periodcentered", "00B7", - "periodhalfwidth", "FF61", - "periodmonospace", "FF0E", - "periodsmall", "FE52", - "perispomenigreekcmb", "0342", - "perpendicular", "22A5", - "perthousand", "2030", - "peseta", "20A7", - "pfsquare", "338A", - "phabengali", "09AB", - "phadeva", "092B", - "phagujarati", "0AAB", - "phagurmukhi", "0A2B", - "phi", "03C6", - "phi1", "03D5", - "phieuphacirclekorean", "327A", - "phieuphaparenkorean", "321A", - "phieuphcirclekorean", "326C", - "phieuphkorean", "314D", - "phieuphparenkorean", "320C", - "philatin", "0278", - "phinthuthai", "0E3A", - "phisymbolgreek", "03D5", - "phook", "01A5", - "phophanthai", "0E1E", - "phophungthai", "0E1C", - "phosamphaothai", "0E20", - "pi", "03C0", - "pieupacirclekorean", "3273", - "pieupaparenkorean", "3213", - "pieupcieuckorean", "3176", - "pieupcirclekorean", "3265", - "pieupkiyeokkorean", "3172", - "pieupkorean", "3142", - "pieupparenkorean", "3205", - "pieupsioskiyeokkorean", "3174", - "pieupsioskorean", "3144", - "pieupsiostikeutkorean", "3175", - "pieupthieuthkorean", "3177", - "pieuptikeutkorean", "3173", - "pihiragana", "3074", - "pikatakana", "30D4", - "pisymbolgreek", "03D6", - "piwrarmenian", "0583", - "plus", "002B", - "plusbelowcmb", "031F", - "pluscircle", "2295", - "plusminus", "00B1", - "plusmod", "02D6", - "plusmonospace", "FF0B", - "plussmall", "FE62", - "plussuperior", "207A", - "pmonospace", "FF50", - "pmsquare", "33D8", - "pohiragana", "307D", - "pointingindexdownwhite", "261F", - "pointingindexleftwhite", "261C", - "pointingindexrightwhite", "261E", - "pointingindexupwhite", "261D", - "pokatakana", "30DD", - "poplathai", "0E1B", - "postalmark", "3012", - "postalmarkface", "3020", - "pparen", "24AB", - "precedes", "227A", - "prescription", "211E", - "primemod", "02B9", - "primereversed", "2035", - "product", "220F", - "projective", "2305", - "prolongedkana", "30FC", - "propellor", "2318", - "propersubset", "2282", - "propersuperset", "2283", - "proportion", "2237", - "proportional", "221D", - "psi", "03C8", - "psicyrillic", "0471", - "psilipneumatacyrilliccmb", "0486", - "pssquare", "33B0", - "puhiragana", "3077", - "pukatakana", "30D7", - "pvsquare", "33B4", - "pwsquare", "33BA", - "q", "0071", - "qadeva", "0958", - "qadmahebrew", "05A8", - "qafarabic", "0642", - "qaffinalarabic", "FED6", - "qafinitialarabic", "FED7", - "qafmedialarabic", "FED8", - "qamats", "05B8", - "qamats10", "05B8", - "qamats1a", "05B8", - "qamats1c", "05B8", - "qamats27", "05B8", - "qamats29", "05B8", - "qamats33", "05B8", - "qamatsde", "05B8", - "qamatshebrew", "05B8", - "qamatsnarrowhebrew", "05B8", - "qamatsqatanhebrew", "05B8", - "qamatsqatannarrowhebrew", "05B8", - "qamatsqatanquarterhebrew", "05B8", - "qamatsqatanwidehebrew", "05B8", - "qamatsquarterhebrew", "05B8", - "qamatswidehebrew", "05B8", - "qarneyparahebrew", "059F", - "qbopomofo", "3111", - "qcircle", "24E0", - "qhook", "02A0", - "qmonospace", "FF51", - "qof", "05E7", - "qofdagesh", "FB47", - "qofdageshhebrew", "FB47", - "qofhatafpatah", "05E7_05B2", - "qofhatafpatahhebrew", "05E7_05B2", - "qofhatafsegol", "05E7_05B1", - "qofhatafsegolhebrew", "05E7_05B1", - "qofhebrew", "05E7", - "qofhiriq", "05E7_05B4", - "qofhiriqhebrew", "05E7_05B4", - "qofholam", "05E7_05B9", - "qofholamhebrew", "05E7_05B9", - "qofpatah", "05E7_05B7", - "qofpatahhebrew", "05E7_05B7", - "qofqamats", "05E7_05B8", - "qofqamatshebrew", "05E7_05B8", - "qofqubuts", "05E7_05BB", - "qofqubutshebrew", "05E7_05BB", - "qofsegol", "05E7_05B6", - "qofsegolhebrew", "05E7_05B6", - "qofsheva", "05E7_05B0", - "qofshevahebrew", "05E7_05B0", - "qoftsere", "05E7_05B5", - "qoftserehebrew", "05E7_05B5", - "qparen", "24AC", - "quarternote", "2669", - "qubuts", "05BB", - "qubuts18", "05BB", - "qubuts25", "05BB", - "qubuts31", "05BB", - "qubutshebrew", "05BB", - "qubutsnarrowhebrew", "05BB", - "qubutsquarterhebrew", "05BB", - "qubutswidehebrew", "05BB", - "question", "003F", - "questionarabic", "061F", - "questionarmenian", "055E", - "questiondown", "00BF", - "questiongreek", "037E", - "questionmonospace", "FF1F", - "quotedbl", "0022", - "quotedblbase", "201E", - "quotedblleft", "201C", - "quotedblmonospace", "FF02", - "quotedblprime", "301E", - "quotedblprimereversed", "301D", - "quotedblright", "201D", - "quoteleft", "2018", - "quoteleftreversed", "201B", - "quotereversed", "201B", - "quoteright", "2019", - "quoterightn", "0149", - "quotesinglbase", "201A", - "quotesingle", "0027", - "quotesinglemonospace", "FF07", - "r", "0072", - "raarmenian", "057C", - "rabengali", "09B0", - "racute", "0155", - "radeva", "0930", - "radical", "221A", - "radoverssquare", "33AE", - "radoverssquaredsquare", "33AF", - "radsquare", "33AD", - "rafe", "05BF", - "rafehebrew", "05BF", - "ragujarati", "0AB0", - "ragurmukhi", "0A30", - "rahiragana", "3089", - "rakatakana", "30E9", - "rakatakanahalfwidth", "FF97", - "ralowerdiagonalbengali", "09F1", - "ramiddlediagonalbengali", "09F0", - "ramshorn", "0264", - "ratio", "2236", - "rbopomofo", "3116", - "rcaron", "0159", - "rcedilla", "0157", - "rcircle", "24E1", - "rcommaaccent", "0157", - "rdblgrave", "0211", - "rdotaccent", "1E59", - "rdotbelow", "1E5B", - "rdotbelowmacron", "1E5D", - "referencemark", "203B", - "reflexsubset", "2286", - "reflexsuperset", "2287", - "registered", "00AE", - "reharabic", "0631", - "reharmenian", "0580", - "rehfinalarabic", "FEAE", - "rehiragana", "308C", - "rehyehaleflamarabic", "0631_FEF3_FE8E_0644", - "rekatakana", "30EC", - "rekatakanahalfwidth", "FF9A", - "resh", "05E8", - "reshdageshhebrew", "FB48", - "reshhatafpatah", "05E8_05B2", - "reshhatafpatahhebrew", "05E8_05B2", - "reshhatafsegol", "05E8_05B1", - "reshhatafsegolhebrew", "05E8_05B1", - "reshhebrew", "05E8", - "reshhiriq", "05E8_05B4", - "reshhiriqhebrew", "05E8_05B4", - "reshholam", "05E8_05B9", - "reshholamhebrew", "05E8_05B9", - "reshpatah", "05E8_05B7", - "reshpatahhebrew", "05E8_05B7", - "reshqamats", "05E8_05B8", - "reshqamatshebrew", "05E8_05B8", - "reshqubuts", "05E8_05BB", - "reshqubutshebrew", "05E8_05BB", - "reshsegol", "05E8_05B6", - "reshsegolhebrew", "05E8_05B6", - "reshsheva", "05E8_05B0", - "reshshevahebrew", "05E8_05B0", - "reshtsere", "05E8_05B5", - "reshtserehebrew", "05E8_05B5", - "reversedtilde", "223D", - "reviahebrew", "0597", - "reviamugrashhebrew", "0597", - "revlogicalnot", "2310", - "rfishhook", "027E", - "rfishhookreversed", "027F", - "rhabengali", "09DD", - "rhadeva", "095D", - "rho", "03C1", - "rhook", "027D", - "rhookturned", "027B", - "rhookturnedsuperior", "02B5", - "rhosymbolgreek", "03F1", - "rhotichookmod", "02DE", - "rieulacirclekorean", "3271", - "rieulaparenkorean", "3211", - "rieulcirclekorean", "3263", - "rieulhieuhkorean", "3140", - "rieulkiyeokkorean", "313A", - "rieulkiyeoksioskorean", "3169", - "rieulkorean", "3139", - "rieulmieumkorean", "313B", - "rieulpansioskorean", "316C", - "rieulparenkorean", "3203", - "rieulphieuphkorean", "313F", - "rieulpieupkorean", "313C", - "rieulpieupsioskorean", "316B", - "rieulsioskorean", "313D", - "rieulthieuthkorean", "313E", - "rieultikeutkorean", "316A", - "rieulyeorinhieuhkorean", "316D", - "rightangle", "221F", - "righttackbelowcmb", "0319", - "righttriangle", "22BF", - "rihiragana", "308A", - "rikatakana", "30EA", - "rikatakanahalfwidth", "FF98", - "ring", "02DA", - "ringbelowcmb", "0325", - "ringcmb", "030A", - "ringhalfleft", "02BF", - "ringhalfleftarmenian", "0559", - "ringhalfleftbelowcmb", "031C", - "ringhalfleftcentered", "02D3", - "ringhalfright", "02BE", - "ringhalfrightbelowcmb", "0339", - "ringhalfrightcentered", "02D2", - "rinvertedbreve", "0213", - "rittorusquare", "3351", - "rlinebelow", "1E5F", - "rlongleg", "027C", - "rlonglegturned", "027A", - "rmonospace", "FF52", - "rohiragana", "308D", - "rokatakana", "30ED", - "rokatakanahalfwidth", "FF9B", - "roruathai", "0E23", - "rparen", "24AD", - "rrabengali", "09DC", - "rradeva", "0931", - "rragurmukhi", "0A5C", - "rreharabic", "0691", - "rrehfinalarabic", "FB8D", - "rrvocalicbengali", "09E0", - "rrvocalicdeva", "0960", - "rrvocalicgujarati", "0AE0", - "rrvocalicvowelsignbengali", "09C4", - "rrvocalicvowelsigndeva", "0944", - "rrvocalicvowelsigngujarati", "0AC4", - "rtblock", "2590", - "rturned", "0279", - "rturnedsuperior", "02B4", - "ruhiragana", "308B", - "rukatakana", "30EB", - "rukatakanahalfwidth", "FF99", - "rupeemarkbengali", "09F2", - "rupeesignbengali", "09F3", - "ruthai", "0E24", - "rvocalicbengali", "098B", - "rvocalicdeva", "090B", - "rvocalicgujarati", "0A8B", - "rvocalicvowelsignbengali", "09C3", - "rvocalicvowelsigndeva", "0943", - "rvocalicvowelsigngujarati", "0AC3", - "s", "0073", - "sabengali", "09B8", - "sacute", "015B", - "sacutedotaccent", "1E65", - "sadarabic", "0635", - "sadeva", "0938", - "sadfinalarabic", "FEBA", - "sadinitialarabic", "FEBB", - "sadmedialarabic", "FEBC", - "sagujarati", "0AB8", - "sagurmukhi", "0A38", - "sahiragana", "3055", - "sakatakana", "30B5", - "sakatakanahalfwidth", "FF7B", - "sallallahoualayhewasallamarabic", "FDFA", - "samekh", "05E1", - "samekhdagesh", "FB41", - "samekhdageshhebrew", "FB41", - "samekhhebrew", "05E1", - "saraaathai", "0E32", - "saraaethai", "0E41", - "saraaimaimalaithai", "0E44", - "saraaimaimuanthai", "0E43", - "saraamthai", "0E33", - "saraathai", "0E30", - "saraethai", "0E40", - "saraiithai", "0E35", - "saraithai", "0E34", - "saraothai", "0E42", - "saraueethai", "0E37", - "sarauethai", "0E36", - "sarauthai", "0E38", - "sarauuthai", "0E39", - "sbopomofo", "3119", - "scaron", "0161", - "scarondotaccent", "1E67", - "scedilla", "015F", - "schwa", "0259", - "schwacyrillic", "04D9", - "schwadieresiscyrillic", "04DB", - "schwahook", "025A", - "scircle", "24E2", - "scircumflex", "015D", - "scommaaccent", "0219", - "sdotaccent", "1E61", - "sdotbelow", "1E63", - "sdotbelowdotaccent", "1E69", - "seagullbelowcmb", "033C", - "second", "2033", - "secondtonechinese", "02CA", - "section", "00A7", - "seenarabic", "0633", - "seenfinalarabic", "FEB2", - "seeninitialarabic", "FEB3", - "seenmedialarabic", "FEB4", - "segol", "05B6", - "segol13", "05B6", - "segol1f", "05B6", - "segol2c", "05B6", - "segolhebrew", "05B6", - "segolnarrowhebrew", "05B6", - "segolquarterhebrew", "05B6", - "segoltahebrew", "0592", - "segolwidehebrew", "05B6", - "seharmenian", "057D", - "sehiragana", "305B", - "sekatakana", "30BB", - "sekatakanahalfwidth", "FF7E", - "semicolon", "003B", - "semicolonarabic", "061B", - "semicolonmonospace", "FF1B", - "semicolonsmall", "FE54", - "semivoicedmarkkana", "309C", - "semivoicedmarkkanahalfwidth", "FF9F", - "sentisquare", "3322", - "sentosquare", "3323", - "seven", "0037", - "sevenarabic", "0667", - "sevenbengali", "09ED", - "sevencircle", "2466", - "sevencircleinversesansserif", "2790", - "sevendeva", "096D", - "seveneighths", "215E", - "sevengujarati", "0AED", - "sevengurmukhi", "0A6D", - "sevenhackarabic", "0667", - "sevenhangzhou", "3027", - "sevenideographicparen", "3226", - "seveninferior", "2087", - "sevenmonospace", "FF17", - "sevenparen", "247A", - "sevenperiod", "248E", - "sevenpersian", "06F7", - "sevenroman", "2176", - "sevensuperior", "2077", - "seventeencircle", "2470", - "seventeenparen", "2484", - "seventeenperiod", "2498", - "seventhai", "0E57", - "sfthyphen", "00AD", - "shaarmenian", "0577", - "shabengali", "09B6", - "shacyrillic", "0448", - "shaddaarabic", "0651", - "shaddadammaarabic", "FC61", - "shaddadammatanarabic", "FC5E", - "shaddafathaarabic", "FC60", - "shaddafathatanarabic", "0651_064B", - "shaddakasraarabic", "FC62", - "shaddakasratanarabic", "FC5F", - "shade", "2592", - "shadedark", "2593", - "shadelight", "2591", - "shademedium", "2592", - "shadeva", "0936", - "shagujarati", "0AB6", - "shagurmukhi", "0A36", - "shalshelethebrew", "0593", - "shbopomofo", "3115", - "shchacyrillic", "0449", - "sheenarabic", "0634", - "sheenfinalarabic", "FEB6", - "sheeninitialarabic", "FEB7", - "sheenmedialarabic", "FEB8", - "sheicoptic", "03E3", - "sheqel", "20AA", - "sheqelhebrew", "20AA", - "sheva", "05B0", - "sheva115", "05B0", - "sheva15", "05B0", - "sheva22", "05B0", - "sheva2e", "05B0", - "shevahebrew", "05B0", - "shevanarrowhebrew", "05B0", - "shevaquarterhebrew", "05B0", - "shevawidehebrew", "05B0", - "shhacyrillic", "04BB", - "shimacoptic", "03ED", - "shin", "05E9", - "shindagesh", "FB49", - "shindageshhebrew", "FB49", - "shindageshshindot", "FB2C", - "shindageshshindothebrew", "FB2C", - "shindageshsindot", "FB2D", - "shindageshsindothebrew", "FB2D", - "shindothebrew", "05C1", - "shinhebrew", "05E9", - "shinshindot", "FB2A", - "shinshindothebrew", "FB2A", - "shinsindot", "FB2B", - "shinsindothebrew", "FB2B", - "shook", "0282", - "sigma", "03C3", - "sigma1", "03C2", - "sigmafinal", "03C2", - "sigmalunatesymbolgreek", "03F2", - "sihiragana", "3057", - "sikatakana", "30B7", - "sikatakanahalfwidth", "FF7C", - "siluqhebrew", "05BD", - "siluqlefthebrew", "05BD", - "similar", "223C", - "sindothebrew", "05C2", - "siosacirclekorean", "3274", - "siosaparenkorean", "3214", - "sioscieuckorean", "317E", - "sioscirclekorean", "3266", - "sioskiyeokkorean", "317A", - "sioskorean", "3145", - "siosnieunkorean", "317B", - "siosparenkorean", "3206", - "siospieupkorean", "317D", - "siostikeutkorean", "317C", - "six", "0036", - "sixarabic", "0666", - "sixbengali", "09EC", - "sixcircle", "2465", - "sixcircleinversesansserif", "278F", - "sixdeva", "096C", - "sixgujarati", "0AEC", - "sixgurmukhi", "0A6C", - "sixhackarabic", "0666", - "sixhangzhou", "3026", - "sixideographicparen", "3225", - "sixinferior", "2086", - "sixmonospace", "FF16", - "sixparen", "2479", - "sixperiod", "248D", - "sixpersian", "06F6", - "sixroman", "2175", - "sixsuperior", "2076", - "sixteencircle", "246F", - "sixteencurrencydenominatorbengali", "09F9", - "sixteenparen", "2483", - "sixteenperiod", "2497", - "sixthai", "0E56", - "slash", "002F", - "slashmonospace", "FF0F", - "slong", "017F", - "slongdotaccent", "1E9B", - "smileface", "263A", - "smonospace", "FF53", - "sofpasuqhebrew", "05C3", - "softhyphen", "00AD", - "softsigncyrillic", "044C", - "sohiragana", "305D", - "sokatakana", "30BD", - "sokatakanahalfwidth", "FF7F", - "soliduslongoverlaycmb", "0338", - "solidusshortoverlaycmb", "0337", - "sorusithai", "0E29", - "sosalathai", "0E28", - "sosothai", "0E0B", - "sosuathai", "0E2A", - "space", "0020", - "spacehackarabic", "0020", - "spade", "2660", - "spadesuitblack", "2660", - "spadesuitwhite", "2664", - "sparen", "24AE", - "squarebelowcmb", "033B", - "squarecc", "33C4", - "squarecm", "339D", - "squarediagonalcrosshatchfill", "25A9", - "squarehorizontalfill", "25A4", - "squarekg", "338F", - "squarekm", "339E", - "squarekmcapital", "33CE", - "squareln", "33D1", - "squarelog", "33D2", - "squaremg", "338E", - "squaremil", "33D5", - "squaremm", "339C", - "squaremsquared", "33A1", - "squareorthogonalcrosshatchfill", "25A6", - "squareupperlefttolowerrightfill", "25A7", - "squareupperrighttolowerleftfill", "25A8", - "squareverticalfill", "25A5", - "squarewhitewithsmallblack", "25A3", - "srsquare", "33DB", - "ssabengali", "09B7", - "ssadeva", "0937", - "ssagujarati", "0AB7", - "ssangcieuckorean", "3149", - "ssanghieuhkorean", "3185", - "ssangieungkorean", "3180", - "ssangkiyeokkorean", "3132", - "ssangnieunkorean", "3165", - "ssangpieupkorean", "3143", - "ssangsioskorean", "3146", - "ssangtikeutkorean", "3138", - "sterling", "00A3", - "sterlingmonospace", "FFE1", - "strokelongoverlaycmb", "0336", - "strokeshortoverlaycmb", "0335", - "subset", "2282", - "subsetnotequal", "228A", - "subsetorequal", "2286", - "succeeds", "227B", - "suchthat", "220B", - "suhiragana", "3059", - "sukatakana", "30B9", - "sukatakanahalfwidth", "FF7D", - "sukunarabic", "0652", - "summation", "2211", - "sun", "263C", - "superset", "2283", - "supersetnotequal", "228B", - "supersetorequal", "2287", - "svsquare", "33DC", - "syouwaerasquare", "337C", - "t", "0074", - "tabengali", "09A4", - "tackdown", "22A4", - "tackleft", "22A3", - "tadeva", "0924", - "tagujarati", "0AA4", - "tagurmukhi", "0A24", - "taharabic", "0637", - "tahfinalarabic", "FEC2", - "tahinitialarabic", "FEC3", - "tahiragana", "305F", - "tahmedialarabic", "FEC4", - "taisyouerasquare", "337D", - "takatakana", "30BF", - "takatakanahalfwidth", "FF80", - "tatweelarabic", "0640", - "tau", "03C4", - "tav", "05EA", - "tavdages", "FB4A", - "tavdagesh", "FB4A", - "tavdageshhebrew", "FB4A", - "tavhebrew", "05EA", - "tbar", "0167", - "tbopomofo", "310A", - "tcaron", "0165", - "tccurl", "02A8", - "tcedilla", "0163", - "tcheharabic", "0686", - "tchehfinalarabic", "FB7B", - "tchehinitialarabic", "FB7C", - "tchehmedialarabic", "FB7D", - "tchehmeeminitialarabic", "FB7C_FEE4", - "tcircle", "24E3", - "tcircumflexbelow", "1E71", - "tcommaaccent", "0163", - "tdieresis", "1E97", - "tdotaccent", "1E6B", - "tdotbelow", "1E6D", - "tecyrillic", "0442", - "tedescendercyrillic", "04AD", - "teharabic", "062A", - "tehfinalarabic", "FE96", - "tehhahinitialarabic", "FCA2", - "tehhahisolatedarabic", "FC0C", - "tehinitialarabic", "FE97", - "tehiragana", "3066", - "tehjeeminitialarabic", "FCA1", - "tehjeemisolatedarabic", "FC0B", - "tehmarbutaarabic", "0629", - "tehmarbutafinalarabic", "FE94", - "tehmedialarabic", "FE98", - "tehmeeminitialarabic", "FCA4", - "tehmeemisolatedarabic", "FC0E", - "tehnoonfinalarabic", "FC73", - "tekatakana", "30C6", - "tekatakanahalfwidth", "FF83", - "telephone", "2121", - "telephoneblack", "260E", - "telishagedolahebrew", "05A0", - "telishaqetanahebrew", "05A9", - "tencircle", "2469", - "tenideographicparen", "3229", - "tenparen", "247D", - "tenperiod", "2491", - "tenroman", "2179", - "tesh", "02A7", - "tet", "05D8", - "tetdagesh", "FB38", - "tetdageshhebrew", "FB38", - "tethebrew", "05D8", - "tetsecyrillic", "04B5", - "tevirhebrew", "059B", - "tevirlefthebrew", "059B", - "thabengali", "09A5", - "thadeva", "0925", - "thagujarati", "0AA5", - "thagurmukhi", "0A25", - "thalarabic", "0630", - "thalfinalarabic", "FEAC", - "thanthakhatthai", "0E4C", - "theharabic", "062B", - "thehfinalarabic", "FE9A", - "thehinitialarabic", "FE9B", - "thehmedialarabic", "FE9C", - "thereexists", "2203", - "therefore", "2234", - "theta", "03B8", - "theta1", "03D1", - "thetasymbolgreek", "03D1", - "thieuthacirclekorean", "3279", - "thieuthaparenkorean", "3219", - "thieuthcirclekorean", "326B", - "thieuthkorean", "314C", - "thieuthparenkorean", "320B", - "thirteencircle", "246C", - "thirteenparen", "2480", - "thirteenperiod", "2494", - "thonangmonthothai", "0E11", - "thook", "01AD", - "thophuthaothai", "0E12", - "thorn", "00FE", - "thothahanthai", "0E17", - "thothanthai", "0E10", - "thothongthai", "0E18", - "thothungthai", "0E16", - "thousandcyrillic", "0482", - "thousandsseparatorarabic", "066C", - "thousandsseparatorpersian", "066C", - "three", "0033", - "threearabic", "0663", - "threebengali", "09E9", - "threecircle", "2462", - "threecircleinversesansserif", "278C", - "threedeva", "0969", - "threeeighths", "215C", - "threegujarati", "0AE9", - "threegurmukhi", "0A69", - "threehackarabic", "0663", - "threehangzhou", "3023", - "threeideographicparen", "3222", - "threeinferior", "2083", - "threemonospace", "FF13", - "threenumeratorbengali", "09F6", - "threeparen", "2476", - "threeperiod", "248A", - "threepersian", "06F3", - "threequarters", "00BE", - "threeroman", "2172", - "threesuperior", "00B3", - "threethai", "0E53", - "thzsquare", "3394", - "tihiragana", "3061", - "tikatakana", "30C1", - "tikatakanahalfwidth", "FF81", - "tikeutacirclekorean", "3270", - "tikeutaparenkorean", "3210", - "tikeutcirclekorean", "3262", - "tikeutkorean", "3137", - "tikeutparenkorean", "3202", - "tilde", "02DC", - "tildebelowcmb", "0330", - "tildecmb", "0303", - "tildecomb", "0303", - "tildedoublecmb", "0360", - "tildeoperator", "223C", - "tildeoverlaycmb", "0334", - "tildeverticalcmb", "033E", - "timescircle", "2297", - "tipehahebrew", "0596", - "tipehalefthebrew", "0596", - "tippigurmukhi", "0A70", - "titlocyrilliccmb", "0483", - "tiwnarmenian", "057F", - "tlinebelow", "1E6F", - "tmonospace", "FF54", - "toarmenian", "0569", - "tohiragana", "3068", - "tokatakana", "30C8", - "tokatakanahalfwidth", "FF84", - "tonebarextrahighmod", "02E5", - "tonebarextralowmod", "02E9", - "tonebarhighmod", "02E6", - "tonebarlowmod", "02E8", - "tonebarmidmod", "02E7", - "tonefive", "01BD", - "tonesix", "0185", - "tonetwo", "01A8", - "tonos", "0384", - "tonsquare", "3327", - "topatakthai", "0E0F", - "tortoiseshellbracketleft", "3014", - "tortoiseshellbracketleftsmall", "FE5D", - "tortoiseshellbracketleftvertical", "FE39", - "tortoiseshellbracketright", "3015", - "tortoiseshellbracketrightsmall", "FE5E", - "tortoiseshellbracketrightvertical", "FE3A", - "totaothai", "0E15", - "tpalatalhook", "01AB", - "tparen", "24AF", - "trademark", "2122", - "tretroflexhook", "0288", - "triagdn", "25BC", - "triaglf", "25C4", - "triagrt", "25BA", - "triagup", "25B2", - "ts", "02A6", - "tsadi", "05E6", - "tsadidagesh", "FB46", - "tsadidageshhebrew", "FB46", - "tsadihebrew", "05E6", - "tsecyrillic", "0446", - "tsere", "05B5", - "tsere12", "05B5", - "tsere1e", "05B5", - "tsere2b", "05B5", - "tserehebrew", "05B5", - "tserenarrowhebrew", "05B5", - "tserequarterhebrew", "05B5", - "tserewidehebrew", "05B5", - "tshecyrillic", "045B", - "ttabengali", "099F", - "ttadeva", "091F", - "ttagujarati", "0A9F", - "ttagurmukhi", "0A1F", - "tteharabic", "0679", - "ttehfinalarabic", "FB67", - "ttehinitialarabic", "FB68", - "ttehmedialarabic", "FB69", - "tthabengali", "09A0", - "tthadeva", "0920", - "tthagujarati", "0AA0", - "tthagurmukhi", "0A20", - "tturned", "0287", - "tuhiragana", "3064", - "tukatakana", "30C4", - "tukatakanahalfwidth", "FF82", - "tusmallhiragana", "3063", - "tusmallkatakana", "30C3", - "tusmallkatakanahalfwidth", "FF6F", - "twelvecircle", "246B", - "twelveparen", "247F", - "twelveperiod", "2493", - "twelveroman", "217B", - "twentycircle", "2473", - "twentyhangzhou", "5344", - "twentyparen", "2487", - "twentyperiod", "249B", - "two", "0032", - "twoarabic", "0662", - "twobengali", "09E8", - "twocircle", "2461", - "twocircleinversesansserif", "278B", - "twodeva", "0968", - "twodotenleader", "2025", - "twodotleader", "2025", - "twodotleadervertical", "FE30", - "twogujarati", "0AE8", - "twogurmukhi", "0A68", - "twohackarabic", "0662", - "twohangzhou", "3022", - "twoideographicparen", "3221", - "twoinferior", "2082", - "twomonospace", "FF12", - "twonumeratorbengali", "09F5", - "twoparen", "2475", - "twoperiod", "2489", - "twopersian", "06F2", - "tworoman", "2171", - "twostroke", "01BB", - "twosuperior", "00B2", - "twothai", "0E52", - "twothirds", "2154", - "u", "0075", - "uacute", "00FA", - "ubar", "0289", - "ubengali", "0989", - "ubopomofo", "3128", - "ubreve", "016D", - "ucaron", "01D4", - "ucircle", "24E4", - "ucircumflex", "00FB", - "ucircumflexbelow", "1E77", - "ucyrillic", "0443", - "udattadeva", "0951", - "udblacute", "0171", - "udblgrave", "0215", - "udeva", "0909", - "udieresis", "00FC", - "udieresisacute", "01D8", - "udieresisbelow", "1E73", - "udieresiscaron", "01DA", - "udieresiscyrillic", "04F1", - "udieresisgrave", "01DC", - "udieresismacron", "01D6", - "udotbelow", "1EE5", - "ugrave", "00F9", - "ugujarati", "0A89", - "ugurmukhi", "0A09", - "uhiragana", "3046", - "uhookabove", "1EE7", - "uhorn", "01B0", - "uhornacute", "1EE9", - "uhorndotbelow", "1EF1", - "uhorngrave", "1EEB", - "uhornhookabove", "1EED", - "uhorntilde", "1EEF", - "uhungarumlaut", "0171", - "uhungarumlautcyrillic", "04F3", - "uinvertedbreve", "0217", - "ukatakana", "30A6", - "ukatakanahalfwidth", "FF73", - "ukcyrillic", "0479", - "ukorean", "315C", - "umacron", "016B", - "umacroncyrillic", "04EF", - "umacrondieresis", "1E7B", - "umatragurmukhi", "0A41", - "umonospace", "FF55", - "underscore", "005F", - "underscoredbl", "2017", - "underscoremonospace", "FF3F", - "underscorevertical", "FE33", - "underscorewavy", "FE4F", - "union", "222A", - "universal", "2200", - "uogonek", "0173", - "uparen", "24B0", - "upblock", "2580", - "upperdothebrew", "05C4", - "upsilon", "03C5", - "upsilondieresis", "03CB", - "upsilondieresistonos", "03B0", - "upsilonlatin", "028A", - "upsilontonos", "03CD", - "uptackbelowcmb", "031D", - "uptackmod", "02D4", - "uragurmukhi", "0A73", - "uring", "016F", - "ushortcyrillic", "045E", - "usmallhiragana", "3045", - "usmallkatakana", "30A5", - "usmallkatakanahalfwidth", "FF69", - "ustraightcyrillic", "04AF", - "ustraightstrokecyrillic", "04B1", - "utilde", "0169", - "utildeacute", "1E79", - "utildebelow", "1E75", - "uubengali", "098A", - "uudeva", "090A", - "uugujarati", "0A8A", - "uugurmukhi", "0A0A", - "uumatragurmukhi", "0A42", - "uuvowelsignbengali", "09C2", - "uuvowelsigndeva", "0942", - "uuvowelsigngujarati", "0AC2", - "uvowelsignbengali", "09C1", - "uvowelsigndeva", "0941", - "uvowelsigngujarati", "0AC1", - "v", "0076", - "vadeva", "0935", - "vagujarati", "0AB5", - "vagurmukhi", "0A35", - "vakatakana", "30F7", - "vav", "05D5", - "vavdagesh", "FB35", - "vavdagesh65", "FB35", - "vavdageshhebrew", "FB35", - "vavhebrew", "05D5", - "vavholam", "FB4B", - "vavholamhebrew", "FB4B", - "vavvavhebrew", "05F0", - "vavyodhebrew", "05F1", - "vcircle", "24E5", - "vdotbelow", "1E7F", - "vecyrillic", "0432", - "veharabic", "06A4", - "vehfinalarabic", "FB6B", - "vehinitialarabic", "FB6C", - "vehmedialarabic", "FB6D", - "vekatakana", "30F9", - "venus", "2640", - "verticalbar", "007C", - "verticallineabovecmb", "030D", - "verticallinebelowcmb", "0329", - "verticallinelowmod", "02CC", - "verticallinemod", "02C8", - "vewarmenian", "057E", - "vhook", "028B", - "vikatakana", "30F8", - "viramabengali", "09CD", - "viramadeva", "094D", - "viramagujarati", "0ACD", - "visargabengali", "0983", - "visargadeva", "0903", - "visargagujarati", "0A83", - "vmonospace", "FF56", - "voarmenian", "0578", - "voicediterationhiragana", "309E", - "voicediterationkatakana", "30FE", - "voicedmarkkana", "309B", - "voicedmarkkanahalfwidth", "FF9E", - "vokatakana", "30FA", - "vparen", "24B1", - "vtilde", "1E7D", - "vturned", "028C", - "vuhiragana", "3094", - "vukatakana", "30F4", - "w", "0077", - "wacute", "1E83", - "waekorean", "3159", - "wahiragana", "308F", - "wakatakana", "30EF", - "wakatakanahalfwidth", "FF9C", - "wakorean", "3158", - "wasmallhiragana", "308E", - "wasmallkatakana", "30EE", - "wattosquare", "3357", - "wavedash", "301C", - "wavyunderscorevertical", "FE34", - "wawarabic", "0648", - "wawfinalarabic", "FEEE", - "wawhamzaabovearabic", "0624", - "wawhamzaabovefinalarabic", "FE86", - "wbsquare", "33DD", - "wcircle", "24E6", - "wcircumflex", "0175", - "wdieresis", "1E85", - "wdotaccent", "1E87", - "wdotbelow", "1E89", - "wehiragana", "3091", - "weierstrass", "2118", - "wekatakana", "30F1", - "wekorean", "315E", - "weokorean", "315D", - "wgrave", "1E81", - "whitebullet", "25E6", - "whitecircle", "25CB", - "whitecircleinverse", "25D9", - "whitecornerbracketleft", "300E", - "whitecornerbracketleftvertical", "FE43", - "whitecornerbracketright", "300F", - "whitecornerbracketrightvertical", "FE44", - "whitediamond", "25C7", - "whitediamondcontainingblacksmalldiamond", "25C8", - "whitedownpointingsmalltriangle", "25BF", - "whitedownpointingtriangle", "25BD", - "whiteleftpointingsmalltriangle", "25C3", - "whiteleftpointingtriangle", "25C1", - "whitelenticularbracketleft", "3016", - "whitelenticularbracketright", "3017", - "whiterightpointingsmalltriangle", "25B9", - "whiterightpointingtriangle", "25B7", - "whitesmallsquare", "25AB", - "whitesmilingface", "263A", - "whitesquare", "25A1", - "whitestar", "2606", - "whitetelephone", "260F", - "whitetortoiseshellbracketleft", "3018", - "whitetortoiseshellbracketright", "3019", - "whiteuppointingsmalltriangle", "25B5", - "whiteuppointingtriangle", "25B3", - "wihiragana", "3090", - "wikatakana", "30F0", - "wikorean", "315F", - "wmonospace", "FF57", - "wohiragana", "3092", - "wokatakana", "30F2", - "wokatakanahalfwidth", "FF66", - "won", "20A9", - "wonmonospace", "FFE6", - "wowaenthai", "0E27", - "wparen", "24B2", - "wring", "1E98", - "wsuperior", "02B7", - "wturned", "028D", - "wynn", "01BF", - "x", "0078", - "xabovecmb", "033D", - "xbopomofo", "3112", - "xcircle", "24E7", - "xdieresis", "1E8D", - "xdotaccent", "1E8B", - "xeharmenian", "056D", - "xi", "03BE", - "xmonospace", "FF58", - "xparen", "24B3", - "xsuperior", "02E3", - "y", "0079", - "yaadosquare", "334E", - "yabengali", "09AF", - "yacute", "00FD", - "yadeva", "092F", - "yaekorean", "3152", - "yagujarati", "0AAF", - "yagurmukhi", "0A2F", - "yahiragana", "3084", - "yakatakana", "30E4", - "yakatakanahalfwidth", "FF94", - "yakorean", "3151", - "yamakkanthai", "0E4E", - "yasmallhiragana", "3083", - "yasmallkatakana", "30E3", - "yasmallkatakanahalfwidth", "FF6C", - "yatcyrillic", "0463", - "ycircle", "24E8", - "ycircumflex", "0177", - "ydieresis", "00FF", - "ydotaccent", "1E8F", - "ydotbelow", "1EF5", - "yeharabic", "064A", - "yehbarreearabic", "06D2", - "yehbarreefinalarabic", "FBAF", - "yehfinalarabic", "FEF2", - "yehhamzaabovearabic", "0626", - "yehhamzaabovefinalarabic", "FE8A", - "yehhamzaaboveinitialarabic", "FE8B", - "yehhamzaabovemedialarabic", "FE8C", - "yehinitialarabic", "FEF3", - "yehmedialarabic", "FEF4", - "yehmeeminitialarabic", "FCDD", - "yehmeemisolatedarabic", "FC58", - "yehnoonfinalarabic", "FC94", - "yehthreedotsbelowarabic", "06D1", - "yekorean", "3156", - "yen", "00A5", - "yenmonospace", "FFE5", - "yeokorean", "3155", - "yeorinhieuhkorean", "3186", - "yerahbenyomohebrew", "05AA", - "yerahbenyomolefthebrew", "05AA", - "yericyrillic", "044B", - "yerudieresiscyrillic", "04F9", - "yesieungkorean", "3181", - "yesieungpansioskorean", "3183", - "yesieungsioskorean", "3182", - "yetivhebrew", "059A", - "ygrave", "1EF3", - "yhook", "01B4", - "yhookabove", "1EF7", - "yiarmenian", "0575", - "yicyrillic", "0457", - "yikorean", "3162", - "yinyang", "262F", - "yiwnarmenian", "0582", - "ymonospace", "FF59", - "yod", "05D9", - "yoddagesh", "FB39", - "yoddageshhebrew", "FB39", - "yodhebrew", "05D9", - "yodyodhebrew", "05F2", - "yodyodpatahhebrew", "FB1F", - "yohiragana", "3088", - "yoikorean", "3189", - "yokatakana", "30E8", - "yokatakanahalfwidth", "FF96", - "yokorean", "315B", - "yosmallhiragana", "3087", - "yosmallkatakana", "30E7", - "yosmallkatakanahalfwidth", "FF6E", - "yotgreek", "03F3", - "yoyaekorean", "3188", - "yoyakorean", "3187", - "yoyakthai", "0E22", - "yoyingthai", "0E0D", - "yparen", "24B4", - "ypogegrammeni", "037A", - "ypogegrammenigreekcmb", "0345", - "yr", "01A6", - "yring", "1E99", - "ysuperior", "02B8", - "ytilde", "1EF9", - "yturned", "028E", - "yuhiragana", "3086", - "yuikorean", "318C", - "yukatakana", "30E6", - "yukatakanahalfwidth", "FF95", - "yukorean", "3160", - "yusbigcyrillic", "046B", - "yusbigiotifiedcyrillic", "046D", - "yuslittlecyrillic", "0467", - "yuslittleiotifiedcyrillic", "0469", - "yusmallhiragana", "3085", - "yusmallkatakana", "30E5", - "yusmallkatakanahalfwidth", "FF6D", - "yuyekorean", "318B", - "yuyeokorean", "318A", - "yyabengali", "09DF", - "yyadeva", "095F", - "z", "007A", - "zaarmenian", "0566", - "zacute", "017A", - "zadeva", "095B", - "zagurmukhi", "0A5B", - "zaharabic", "0638", - "zahfinalarabic", "FEC6", - "zahinitialarabic", "FEC7", - "zahiragana", "3056", - "zahmedialarabic", "FEC8", - "zainarabic", "0632", - "zainfinalarabic", "FEB0", - "zakatakana", "30B6", - "zaqefgadolhebrew", "0595", - "zaqefqatanhebrew", "0594", - "zarqahebrew", "0598", - "zayin", "05D6", - "zayindagesh", "FB36", - "zayindageshhebrew", "FB36", - "zayinhebrew", "05D6", - "zbopomofo", "3117", - "zcaron", "017E", - "zcircle", "24E9", - "zcircumflex", "1E91", - "zcurl", "0291", - "zdot", "017C", - "zdotaccent", "017C", - "zdotbelow", "1E93", - "zecyrillic", "0437", - "zedescendercyrillic", "0499", - "zedieresiscyrillic", "04DF", - "zehiragana", "305C", - "zekatakana", "30BC", - "zero", "0030", - "zeroarabic", "0660", - "zerobengali", "09E6", - "zerodeva", "0966", - "zerogujarati", "0AE6", - "zerogurmukhi", "0A66", - "zerohackarabic", "0660", - "zeroinferior", "2080", - "zeromonospace", "FF10", - "zeropersian", "06F0", - "zerosuperior", "2070", - "zerothai", "0E50", - "zerowidthjoiner", "FEFF", - "zerowidthnonjoiner", "200C", - "zerowidthspace", "200B", - "zeta", "03B6", - "zhbopomofo", "3113", - "zhearmenian", "056A", - "zhebrevecyrillic", "04C2", - "zhecyrillic", "0436", - "zhedescendercyrillic", "0497", - "zhedieresiscyrillic", "04DD", - "zihiragana", "3058", - "zikatakana", "30B8", - "zinorhebrew", "05AE", - "zlinebelow", "1E95", - "zmonospace", "FF5A", - "zohiragana", "305E", - "zokatakana", "30BE", - "zparen", "24B5", - "zretroflexhook", "0290", - "zstroke", "01B6", - "zuhiragana", "305A", - "zukatakana", "30BA", -); - +@afmtodit.tables@ my $prog = $0; $prog =~ s@.*/@@; @@ -6050,9 +30,10 @@ $prog =~ s@.*/@@; my $groff_sys_fontdir = "@FONTDIR@"; use Getopt::Std; -getopts('a:d:e:i:mnsvx'); +getopts('a:cd:e:f:i:kmnsvx'); -our ($opt_a, $opt_d, $opt_e, $opt_i, $opt_m, $opt_n, $opt_s, $opt_v, $opt_x); +our ($opt_a, $opt_c, $opt_d, $opt_e, $opt_f, $opt_i, + $opt_k, $opt_m, $opt_n, $opt_s, $opt_v, $opt_x); if ($opt_v) { print "GNU afmtodit (groff) version @VERSION@\n"; @@ -6060,8 +41,8 @@ if ($opt_v) { } if ($#ARGV != 2) { - die "usage: $prog [-mnsvx] [-a angle] [-d DESC] [-e encoding]\n" . - " [-i n] afmfile mapfile font\n"; + die "usage: $prog [-ckmnsvx] [-a angle] [-d DESC] [-e encoding]\n" . + " [-f name] [-i n] afmfile mapfile font\n"; } my $afm = $ARGV[0]; @@ -6074,6 +55,7 @@ my $sys_desc = $groff_sys_fontdir . "/devps/" . $desc; # read the afm file my $psname; +my ($notice, $version, $fullname, $familyname, @comments); my $italic_angle = 0; my (@kern1, @kern2, @kernx); my (%italic_correction, %left_italic_correction); @@ -6087,11 +69,30 @@ my (%left_side_bearing, %right_side_bearing); open(AFM, $afm) || die "$prog: can't open \`$ARGV[0]': $!\n"; while () { - chop; + chomp; + s/\x0D$//; my @field = split(' '); next if $#field < 0; if ($field[0] eq "FontName") { $psname = $field[1]; + if($opt_f) { + $psname = $opt_f; + } + } + elsif($field[0] eq "Notice") { + $notice = $_; + } + elsif($field[0] eq "Version") { + $version = $_; + } + elsif($field[0] eq "FullName") { + $fullname = $_; + } + elsif($field[0] eq "FamilyName") { + $familyname = $_; + } + elsif($field[0] eq "Comment") { + push(@comments, $_); } elsif($field[0] eq "ItalicAngle") { $italic_angle = -$field[1]; @@ -6246,8 +247,8 @@ while () { $map{$field[0], $nmap{$field[0]}} = $field[1]; $nmap{$field[0]} += 1; - # There is more then one way to make a PS glyph name; - # let us try unicode names with `uni' and `u' prefixes. + # There is more than one way to make a PS glyph name; + # let us try Unicode names with both `uni' and `u' prefixes. my $utmp = $AGL_to_unicode{$field[0]}; if (defined $utmp && $utmp =~ /^[0-9A-F]{4}$/) { foreach my $unicodepsname ("uni" . $utmp, "u" . $utmp) { @@ -6306,7 +307,8 @@ if (!$opt_x) { # computation of a character sequence. It can be used by font # designers to indicate some characteristics of the glyph. The # suffix may contain periods or any other permitted characters. - # Small cap A, for example, could be named `uni0041.sc' or `A.sc'. + # Small cap A, for example, could be named `uni0041.sc' or + # `A.sc'. next if $ch =~ /\./; @@ -6364,7 +366,7 @@ if (!$opt_x) { elsif ($component =~ /^u([0-9A-F]{4,6})$/) { $nv = hex("0x" . $1); if ($nv <= 0xD7FF || ($nv >= 0xE000 && $nv <= 0x10FFFF)) { - $utmp .= "U+" . $1; + $utmp = "U+" . $1; } } @@ -6417,6 +419,30 @@ while (my ($lig, $components) = each %default_ligatures) { open(FONT, ">$font") || die "$prog: can't open \`$font' for output: $!\n"; select(FONT); +print("# This file has been generated with " . + "GNU afmtodit (groff) version @VERSION@\n"); +print("#\n"); +print("# $fullname\n") if defined $fullname; +print("# $version\n") if defined $version; +print("# $familyname\n") if defined $familyname; + +if ($opt_c) { + print("#\n"); + if (defined $notice || @comments) { + print("# The original AFM file contains the following comments:\n"); + print("#\n"); + print("# $notice\n") if defined $notice; + foreach my $comment (@comments) { + print("# $comment\n"); + } + } + else { + print("# The original AFM file contains no comments.\n"); + } +} + +print("\n"); + print("name $font\n"); print("internalname $psname\n") if $psname; print("special\n") if $opt_s; @@ -6437,13 +463,15 @@ if (!$opt_n && %ligatures) { print(" 0\n"); } -if ($#kern1 >= 0) { +if (!$opt_k && $#kern1 >= 0) { + print("\n"); print("kernpairs\n"); for (my $i = 0; $i <= $#kern1; $i++) { my $c1 = $kern1[$i]; my $c2 = $kern2[$i]; - if ($nmap{$c1} != 0 && $nmap{$c2} != 0) { + if (defined $nmap{$c1} && $nmap{$c1} != 0 + && defined $nmap{$c2} && $nmap{$c2} != 0) { for (my $j = 0; $j < $nmap{$c1}; $j++) { for (my $k = 0; $k < $nmap{$c2}; $k++) { if ($kernx[$i] != 0) { @@ -6490,6 +518,7 @@ $italic_angle = $italic_angle*3.14159265358979323846/180.0; $slant = sin($italic_angle)/cos($italic_angle); $slant = 0 if $slant < 0; +print("\n"); print("charset\n"); for (my $i = 0; $i <= $#encoding; $i++) { my $ch = $encoding[$i]; @@ -6564,3 +593,5 @@ for (my $i = 0; $i <= $#encoding; $i++) { sub conv { $_[0]*$unitwidth*$resolution/(72*1000*$sizescale) + ($_[0] < 0 ? -.5 : .5); } + +# eof diff --git a/contrib/groff/src/utils/afmtodit/afmtodit.pl b/contrib/groff/src/utils/afmtodit/afmtodit.tables similarity index 90% copy from contrib/groff/src/utils/afmtodit/afmtodit.pl copy to contrib/groff/src/utils/afmtodit/afmtodit.tables index 0ff85de2ae..cda121a301 100644 --- a/contrib/groff/src/utils/afmtodit/afmtodit.pl +++ b/contrib/groff/src/utils/afmtodit/afmtodit.tables @@ -1,27 +1,6 @@ -#! /usr/bin/perl -w -# -*- Perl -*- -# Copyright (C) 1989-2000, 2001, 2002, 2003, 2004, 2005 -# Free Software Foundation, Inc. -# Written by James Clark (jjc@jclark.com) -# -# This file is part of groff. -# -# groff is free software; you can redistribute it and/or modify it under -# the terms of the GNU General Public License as published by the Free -# Software Foundation; either version 2, or (at your option) any later -# version. -# -# groff is distributed in the hope that it will be useful, but WITHOUT ANY -# WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with groff; see the file COPYING. If not, write to the Free Software -# Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. - -use strict; - +# This table has been algorithmically derived from the file +# UnicodeData.txt, version 4.1.0, available from unicode.org, +# on 2005-12-09. my %unicode_decomposed = ( "00C0", "0041_0300", "00C1", "0041_0301", @@ -1360,6 +1339,112 @@ my %unicode_decomposed = ( "FA68", "96E3", "FA69", "97FF", "FA6A", "983B", + "FA70", "4E26", + "FA71", "51B5", + "FA72", "5168", + "FA73", "4F80", + "FA74", "5145", + "FA75", "5180", + "FA76", "52C7", + "FA77", "52FA", + "FA78", "559D", + "FA79", "5555", + "FA7A", "5599", + "FA7B", "55E2", + "FA7C", "585A", + "FA7D", "58B3", + "FA7E", "5944", + "FA7F", "5954", + "FA80", "5A62", + "FA81", "5B28", + "FA82", "5ED2", + "FA83", "5ED9", + "FA84", "5F69", + "FA85", "5FAD", + "FA86", "60D8", + "FA87", "614E", + "FA88", "6108", + "FA89", "618E", + "FA8A", "6160", + "FA8B", "61F2", + "FA8C", "6234", + "FA8D", "63C4", + "FA8E", "641C", + "FA8F", "6452", + "FA90", "6556", + "FA91", "6674", + "FA92", "6717", + "FA93", "671B", + "FA94", "6756", + "FA95", "6B79", + "FA96", "6BBA", + "FA97", "6D41", + "FA98", "6EDB", + "FA99", "6ECB", + "FA9A", "6F22", + "FA9B", "701E", + "FA9C", "716E", + "FA9D", "77A7", + "FA9E", "7235", + "FA9F", "72AF", + "FAA0", "732A", + "FAA1", "7471", + "FAA2", "7506", + "FAA3", "753B", + "FAA4", "761D", + "FAA5", "761F", + "FAA6", "76CA", + "FAA7", "76DB", + "FAA8", "76F4", + "FAA9", "774A", + "FAAA", "7740", + "FAAB", "78CC", + "FAAC", "7AB1", + "FAAD", "7BC0", + "FAAE", "7C7B", + "FAAF", "7D5B", + "FAB0", "7DF4", + "FAB1", "7F3E", + "FAB2", "8005", + "FAB3", "8352", + "FAB4", "83EF", + "FAB5", "8779", + "FAB6", "8941", + "FAB7", "8986", + "FAB8", "8996", + "FAB9", "8ABF", + "FABA", "8AF8", + "FABB", "8ACB", + "FABC", "8B01", + "FABD", "8AFE", + "FABE", "8AED", + "FABF", "8B39", + "FAC0", "8B8A", + "FAC1", "8D08", + "FAC2", "8F38", + "FAC3", "9072", + "FAC4", "9199", + "FAC5", "9276", + "FAC6", "967C", + "FAC7", "96E3", + "FAC8", "9756", + "FAC9", "97DB", + "FACA", "97FF", + "FACB", "980B", + "FACC", "983B", + "FACD", "9B12", + "FACE", "9F9C", + "FACF", "2284A", + "FAD0", "22844", + "FAD1", "233D5", + "FAD2", "3B9D", + "FAD3", "4018", + "FAD4", "4039", + "FAD5", "25249", + "FAD6", "25CD0", + "FAD7", "27ED3", + "FAD8", "9F43", + "FAD9", "9F8E", "FB1D", "05D9_05B4", "FB1F", "05F2_05B7", "FB2A", "05E9_05C1", @@ -1511,7 +1596,7 @@ my %unicode_decomposed = ( "2F865", "59D8", "2F866", "5A66", "2F867", "36EE", - "2F868", "2136A", + "2F868", "36FC", "2F869", "5B08", "2F86A", "5B3E", "2F86B", "5B3E", @@ -1523,7 +1608,7 @@ my %unicode_decomposed = ( "2F871", "21B18", "2F872", "5BFF", "2F873", "5C06", - "2F874", "5F33", + "2F874", "5F53", "2F875", "5C22", "2F876", "3781", "2F877", "5C60", @@ -1694,7 +1779,7 @@ my %unicode_decomposed = ( "2F91C", "7145", "2F91D", "24263", "2F91E", "719C", - "2F91F", "43AB", + "2F91F", "243AB", "2F920", "7228", "2F921", "7235", "2F922", "7250", @@ -1758,7 +1843,7 @@ my %unicode_decomposed = ( "2F95C", "2597C", "2F95D", "25AA7", "2F95E", "25AA7", - "2F95F", "7AAE", + "2F95F", "7AEE", "2F960", "4202", "2F961", "25BAB", "2F962", "7BC6", @@ -1854,7 +1939,7 @@ my %unicode_decomposed = ( "2F9BC", "8728", "2F9BD", "876B", "2F9BE", "8786", - "2F9BF", "4D57", + "2F9BF", "45D7", "2F9C0", "87E1", "2F9C1", "8801", "2F9C2", "45F9", @@ -1951,6 +2036,10 @@ my %unicode_decomposed = ( "2FA1D", "2A600", ); +# This table has been algorithmically derived from the file glyphlist.txt, +# version 2.0, available from partners.adobe.com, on 2005-12-09. For glyphs +# `Delta', `Omega', and `mu', the values have been manually changed to the +# ones from aglfn.txt, version 1.6. my %AGL_to_unicode = ( "A", "0041", "AE", "00C6", @@ -2041,7 +2130,7 @@ my %AGL_to_unicode = ( "Ddotbelow", "1E0C", "Decyrillic", "0414", "Deicoptic", "03EE", - "Delta", "2206", + "Delta", "0394", "Deltagreek", "0394", "Dhook", "018A", "Digammagreek", "03DC", @@ -2330,7 +2419,7 @@ my %AGL_to_unicode = ( "Omacron", "014C", "Omacronacute", "1E52", "Omacrongrave", "1E50", - "Omega", "2126", + "Omega", "03A9", "Omegacyrillic", "0460", "Omegagreek", "03A9", "Omegaroundcyrillic", "047A", @@ -4455,7 +4544,7 @@ my %AGL_to_unicode = ( "mpasquare", "33AB", "mssquare", "33B3", "mturned", "026F", - "mu", "00B5", + "mu", "03BC", "mu1", "00B5", "muasquare", "3382", "muchgreater", "226B", @@ -6042,525 +6131,3 @@ my %AGL_to_unicode = ( "zuhiragana", "305A", "zukatakana", "30BA", ); - - -my $prog = $0; -$prog =~ s@.*/@@; - -my $groff_sys_fontdir = "@FONTDIR@"; - -use Getopt::Std; -getopts('a:d:e:i:mnsvx'); - -our ($opt_a, $opt_d, $opt_e, $opt_i, $opt_m, $opt_n, $opt_s, $opt_v, $opt_x); - -if ($opt_v) { - print "GNU afmtodit (groff) version @VERSION@\n"; - exit 0; -} - -if ($#ARGV != 2) { - die "usage: $prog [-mnsvx] [-a angle] [-d DESC] [-e encoding]\n" . - " [-i n] afmfile mapfile font\n"; -} - -my $afm = $ARGV[0]; -my $map = $ARGV[1]; -my $font = $ARGV[2]; -my $desc = $opt_d || "DESC"; -my $sys_map = $groff_sys_fontdir . "/devps/generate/" . $map; -my $sys_desc = $groff_sys_fontdir . "/devps/" . $desc; - -# read the afm file - -my $psname; -my $italic_angle = 0; -my (@kern1, @kern2, @kernx); -my (%italic_correction, %left_italic_correction); -my %subscript_correction; -# my %ligs -my %ligatures; -my (@encoding, %in_encoding); -my (%width, %height, %depth); -my (%left_side_bearing, %right_side_bearing); - -open(AFM, $afm) || die "$prog: can't open \`$ARGV[0]': $!\n"; - -while () { - chop; - my @field = split(' '); - next if $#field < 0; - if ($field[0] eq "FontName") { - $psname = $field[1]; - } - elsif($field[0] eq "ItalicAngle") { - $italic_angle = -$field[1]; - } - elsif ($field[0] eq "KPX") { - if ($#field == 3) { - push(@kern1, $field[1]); - push(@kern2, $field[2]); - push(@kernx, $field[3]); - } - } - elsif ($field[0] eq "italicCorrection") { - $italic_correction{$field[1]} = $field[2]; - } - elsif ($field[0] eq "leftItalicCorrection") { - $left_italic_correction{$field[1]} = $field[2]; - } - elsif ($field[0] eq "subscriptCorrection") { - $subscript_correction{$field[1]} = $field[2]; - } - elsif ($field[0] eq "StartCharMetrics") { - while () { - @field = split(' '); - next if $#field < 0; - last if ($field[0] eq "EndCharMetrics"); - if ($field[0] eq "C") { - my $w; - my $wx = 0; - my $n = ""; -# %ligs = (); - my $lly = 0; - my $ury = 0; - my $llx = 0; - my $urx = 0; - my $c = $field[1]; - my $i = 2; - while ($i <= $#field) { - if ($field[$i] eq "WX") { - $w = $field[$i + 1]; - $i += 2; - } - elsif ($field[$i] eq "N") { - $n = $field[$i + 1]; - $i += 2; - } - elsif ($field[$i] eq "B") { - $llx = $field[$i + 1]; - $lly = $field[$i + 2]; - $urx = $field[$i + 3]; - $ury = $field[$i + 4]; - $i += 5; - } -# elsif ($field[$i] eq "L") { -# $ligs{$field[$i + 2]} = $field[$i + 1]; -# $i += 3; -# } - else { - while ($i <= $#field && $field[$i] ne ";") { - $i++; - } - $i++; - } - } - if (!$opt_e && $c != -1) { - $encoding[$c] = $n; - $in_encoding{$n} = 1; - } - $width{$n} = $w; - $height{$n} = $ury; - $depth{$n} = -$lly; - $left_side_bearing{$n} = -$llx; - $right_side_bearing{$n} = $urx - $w; -# while ((my $lig, my $glyph2) = each %ligs) { -# $ligatures{$lig} = $n . " " . $glyph2; -# } - } - } - } -} -close(AFM); - -# read the DESC file - -my ($sizescale, $resolution, $unitwidth); -$sizescale = 1; - -open(DESC, $desc) || open(DESC, $sys_desc) || - die "$prog: can't open \`$desc' or \`$sys_desc': $!\n"; -while () { - next if /^#/; - chop; - my @field = split(' '); - next if $#field < 0; - last if $field[0] eq "charset"; - if ($field[0] eq "res") { - $resolution = $field[1]; - } - elsif ($field[0] eq "unitwidth") { - $unitwidth = $field[1]; - } - elsif ($field[0] eq "sizescale") { - $sizescale = $field[1]; - } -} -close(DESC); - -if ($opt_e) { - # read the encoding file - - my $sys_opt_e = $groff_sys_fontdir . "/devps/" . $opt_e; - open(ENCODING, $opt_e) || open(ENCODING, $sys_opt_e) || - die "$prog: can't open \`$opt_e' or \`$sys_opt_e': $!\n"; - while () { - next if /^#/; - chop; - my @field = split(' '); - next if $#field < 0; - if ($#field == 1) { - if ($field[1] >= 0 && defined $width{$field[0]}) { - $encoding[$field[1]] = $field[0]; - $in_encoding{$field[0]} = 1; - } - } - } - close(ENCODING); -} - -# read the map file - -my (%nmap, %map); - -open(MAP, $map) || open(MAP, $sys_map) || - die "$prog: can't open \`$map' or \`$sys_map': $!\n"; -while () { - next if /^#/; - chop; - my @field = split(' '); - next if $#field < 0; - if ($#field == 1) { - if ($field[1] eq "space") { - # The PostScript character "space" is automatically mapped - # to the groff character "space"; this is for grops. - warn "you are not allowed to map to " . - "the groff character \`space'"; - } - elsif ($field[0] eq "space") { - warn "you are not allowed to map " . - "the PostScript character \`space'"; - } - else { - $nmap{$field[0]} += 0; - $map{$field[0], $nmap{$field[0]}} = $field[1]; - $nmap{$field[0]} += 1; - - # There is more then one way to make a PS glyph name; - # let us try unicode names with `uni' and `u' prefixes. - my $utmp = $AGL_to_unicode{$field[0]}; - if (defined $utmp && $utmp =~ /^[0-9A-F]{4}$/) { - foreach my $unicodepsname ("uni" . $utmp, "u" . $utmp) { - $nmap{$unicodepsname} += 0; - $map{$unicodepsname, $nmap{$unicodepsname}} = $field[1]; - $nmap{$unicodepsname} += 1; - } - } - } - } -} -close(MAP); - -$italic_angle = $opt_a if $opt_a; - - -if (!$opt_x) { - my %mapped; - my $i = ($#encoding > 256) ? ($#encoding + 1) : 256; - while (my $ch = each %width) { - # add unencoded characters - if (!$in_encoding{$ch}) { - $encoding[$i] = $ch; - $i++; - } - if ($nmap{$ch}) { - for (my $j = 0; $j < $nmap{$ch}; $j++) { - if (defined $mapped{$map{$ch, $j}}) { - warn "both $mapped{$map{$ch, $j}} and $ch " . - "map to $map{$ch, $j}"; - } - else { - $mapped{$map{$ch, $j}} = $ch; - } - } - } - else { - my $u = ""; # the resulting groff glyph name - my $ucomp = ""; # Unicode string before decomposition - my $utmp = ""; # temporary value - my $component = ""; - my $nv = 0; - - # Step 1: - # Drop all characters from the glyph name starting with the - # first occurrence of a period (U+002E FULL STOP), if any. - # ?? We avoid mapping of glyphs with periods, since they are - # likely to be variant glyphs, leading to a `many ps glyphs -- - # one groff glyph' conflict. - # - # If multiple glyphs in the font represent the same character - # in the Unicode standard, as do `A' and `A.swash', for example, - # they can be differentiated by using the same base name with - # different suffixes. This suffix (the part of glyph name that - # follows the first period) does not participate in the - # computation of a character sequence. It can be used by font - # designers to indicate some characteristics of the glyph. The - # suffix may contain periods or any other permitted characters. - # Small cap A, for example, could be named `uni0041.sc' or `A.sc'. - - next if $ch =~ /\./; - - # Step 2: - # Split the remaining string into a sequence of components, - # using the underscore character (U+005F LOW LINE) as the - # delimiter. - - while ($ch =~ /([^_]+)/g) { - $component = $1; - - # Step 3: - # Map each component to a character string according to the - # procedure below: - # - # * If the component is in the Adobe Glyph List, then map - # it to the corresponding character in that list. - - $utmp = $AGL_to_unicode{$component}; - if ($utmp) { - $utmp = "U+" . $utmp; - } - - # * Otherwise, if the component is of the form `uni' - # (U+0075 U+006E U+0069) followed by a sequence of - # uppercase hexadecimal digits (0 .. 9, A .. F, i.e., - # U+0030 .. U+0039, U+0041 .. U+0046), the length of - # that sequence is a multiple of four, and each group of - # four digits represents a number in the set {0x0000 .. - # 0xD7FF, 0xE000 .. 0xFFFF}, then interpret each such - # number as a Unicode scalar value and map the component - # to the string made of those scalar values. - - elsif ($component =~ /^uni([0-9A-F]{4})+$/) { - while ($component =~ /([0-9A-F]{4})/g) { - $nv = hex("0x" . $1); - if ($nv <= 0xD7FF || $nv >= 0xE000) { - $utmp .= "U+" . $1; - } - else { - $utmp = ""; - last; - } - } - } - - # * Otherwise, if the component is of the form `u' (U+0075) - # followed by a sequence of four to six uppercase - # hexadecimal digits {0 .. 9, A .. F} (U+0030 .. U+0039, - # U+0041 .. U+0046), and those digits represent a number - # in {0x0000 .. 0xD7FF, 0xE000 .. 0x10FFFF}, then - # interpret this number as a Unicode scalar value and map - # the component to the string made of this scalar value. - - elsif ($component =~ /^u([0-9A-F]{4,6})$/) { - $nv = hex("0x" . $1); - if ($nv <= 0xD7FF || ($nv >= 0xE000 && $nv <= 0x10FFFF)) { - $utmp .= "U+" . $1; - } - } - - # Finally, concatenate those strings; the result is the - # character string to which the glyph name is mapped. - - $ucomp .= $utmp if $utmp; - } - - # Unicode decomposition - while ($ucomp =~ /([0-9A-F]{4,6})/g) { - $component = $1; - $utmp = $unicode_decomposed{$component}; - $u .= "_" . ($utmp ? $utmp : $component); - } - $u =~ s/^_/u/; - if ($u) { - if (defined $mapped{$u}) { - warn "both $mapped{$u} and $ch map to $u"; - } - else { - $mapped{$u} = $ch; - } - $nmap{$ch} += 1; - $map{$ch, "0"} = $u; - } - } - } -} - -# Check explicitly for groff's standard ligatures -- many afm files don't -# have proper `L' entries. - -my %default_ligatures = ( - "fi", "f i", - "fl", "f l", - "ff", "f f", - "ffi", "ff i", - "ffl", "ff l", -); - -while (my ($lig, $components) = each %default_ligatures) { - if (defined $width{$lig} && !defined $ligatures{$lig}) { - $ligatures{$lig} = $components; - } -} - -# print it all out - -open(FONT, ">$font") || die "$prog: can't open \`$font' for output: $!\n"; -select(FONT); - -print("name $font\n"); -print("internalname $psname\n") if $psname; -print("special\n") if $opt_s; -printf("slant %g\n", $italic_angle) if $italic_angle != 0; -printf("spacewidth %d\n", conv($width{"space"})) if defined $width{"space"}; - -if ($opt_e) { - my $e = $opt_e; - $e =~ s@.*/@@; - print("encoding $e\n"); -} - -if (!$opt_n && %ligatures) { - print("ligatures"); - while (my $lig = each %ligatures) { - print(" $lig"); - } - print(" 0\n"); -} - -if ($#kern1 >= 0) { - print("kernpairs\n"); - - for (my $i = 0; $i <= $#kern1; $i++) { - my $c1 = $kern1[$i]; - my $c2 = $kern2[$i]; - if ($nmap{$c1} != 0 && $nmap{$c2} != 0) { - for (my $j = 0; $j < $nmap{$c1}; $j++) { - for (my $k = 0; $k < $nmap{$c2}; $k++) { - if ($kernx[$i] != 0) { - printf("%s %s %d\n", - $map{$c1, $j}, - $map{$c2, $k}, - conv($kernx[$i])); - } - } - } - } - } -} - -my ($asc_boundary, $desc_boundary, $xheight, $slant); - -# characters not shorter than asc_boundary are considered to have ascenders - -$asc_boundary = 0; -$asc_boundary = $height{"t"} if defined $height{"t"}; -$asc_boundary -= 1; - -# likewise for descenders - -$desc_boundary = 0; -$desc_boundary = $depth{"g"} if defined $depth{"g"}; -$desc_boundary = $depth{"j"} if defined $depth{"g"} && $depth{"j"} < $desc_boundary; -$desc_boundary = $depth{"p"} if defined $depth{"p"} && $depth{"p"} < $desc_boundary; -$desc_boundary = $depth{"q"} if defined $depth{"q"} && $depth{"q"} < $desc_boundary; -$desc_boundary = $depth{"y"} if defined $depth{"y"} && $depth{"y"} < $desc_boundary; -$desc_boundary -= 1; - -if (defined $height{"x"}) { - $xheight = $height{"x"}; -} -elsif (defined $height{"alpha"}) { - $xheight = $height{"alpha"}; -} -else { - $xheight = 450; -} - -$italic_angle = $italic_angle*3.14159265358979323846/180.0; -$slant = sin($italic_angle)/cos($italic_angle); -$slant = 0 if $slant < 0; - -print("charset\n"); -for (my $i = 0; $i <= $#encoding; $i++) { - my $ch = $encoding[$i]; - if (defined $ch && $ch ne "" && $ch ne "space") { - $map{$ch, "0"} = "---" if !defined $nmap{$ch} || $nmap{$ch} == 0; - my $type = 0; - my $h = $height{$ch}; - $h = 0 if $h < 0; - my $d = $depth{$ch}; - $d = 0 if $d < 0; - $type = 1 if $d >= $desc_boundary; - $type += 2 if $h >= $asc_boundary; - printf("%s\t%d", $map{$ch, "0"}, conv($width{$ch})); - my $italic_correction = 0; - my $left_math_fit = 0; - my $subscript_correction = 0; - if (defined $opt_i) { - $italic_correction = $right_side_bearing{$ch} + $opt_i; - $italic_correction = 0 if $italic_correction < 0; - $subscript_correction = $slant * $xheight * .8; - $subscript_correction = $italic_correction if - $subscript_correction > $italic_correction; - $left_math_fit = $left_side_bearing{$ch} + $opt_i; - if (defined $opt_m) { - $left_math_fit = 0 if $left_math_fit < 0; - } - } - if (defined $italic_correction{$ch}) { - $italic_correction = $italic_correction{$ch}; - } - if (defined $left_italic_correction{$ch}) { - $left_math_fit = $left_italic_correction{$ch}; - } - if (defined $subscript_correction{$ch}) { - $subscript_correction = $subscript_correction{$ch}; - } - if ($subscript_correction != 0) { - printf(",%d,%d", conv($h), conv($d)); - printf(",%d,%d,%d", conv($italic_correction), - conv($left_math_fit), - conv($subscript_correction)); - } - elsif ($left_math_fit != 0) { - printf(",%d,%d", conv($h), conv($d)); - printf(",%d,%d", conv($italic_correction), - conv($left_math_fit)); - } - elsif ($italic_correction != 0) { - printf(",%d,%d", conv($h), conv($d)); - printf(",%d", conv($italic_correction)); - } - elsif ($d != 0) { - printf(",%d,%d", conv($h), conv($d)); - } - else { - # always put the height in to stop groff guessing - printf(",%d", conv($h)); - } - printf("\t%d", $type); - printf("\t%d\t%s\n", $i, $ch); - if (defined $nmap{$ch}) { - for (my $j = 1; $j < $nmap{$ch}; $j++) { - printf("%s\t\"\n", $map{$ch, $j}); - } - } - } - if (defined $ch && $ch eq "space" && defined $width{"space"}) { - printf("space\t%d\t0\t%d\tspace\n", conv($width{"space"}), $i); - } -} - -sub conv { - $_[0]*$unitwidth*$resolution/(72*1000*$sizescale) + ($_[0] < 0 ? -.5 : .5); -} diff --git a/contrib/groff/src/utils/afmtodit/make-afmtodit-tables b/contrib/groff/src/utils/afmtodit/make-afmtodit-tables new file mode 100644 index 0000000000..2c1eb25550 --- /dev/null +++ b/contrib/groff/src/utils/afmtodit/make-afmtodit-tables @@ -0,0 +1,127 @@ +#! /bin/sh +# +# make-afmtodit-tables -- script for creating the `unicode_decomposed' +# and `AGL_to_unicode' tables +# +# Copyright (C) 2005, 2009 +# Free Software Foundation, Inc. +# Written by Werner Lemberg +# +# This file is part of groff. +# +# groff is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# groff is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# +# usage: +# +# make-afmtodit-tables \ +# UnicodeData.txt version-string glyphlist.txt > afmtodit.in +# +# `UnicodeData.txt' is the central database file from the Unicode standard. +# Unfortunately, it doesn't contain a version number which must be thus +# provided manually as an additional parameter. +# +# `glyphlist.txt' holds the Adobe Glyph List (AGL). +# +# This program needs a C preprocessor. +# + +CPP=cpp + +prog="$0" + +if test $# -ne 3; then + echo "usage: $0 UnicodeData.txt glyphlist.txt > afmtodit.in" + exit 1 +fi + +unicode_data="$1" +version_string="$2" +glyph_list="$3" + +if test ! -f "$1"; then + echo "File \`$1' doesn't exist" >&2 + exit 2 +fi +if test ! -f "$3"; then + echo "File \`$3' doesn't exist" >&2 + exit 2 +fi + +# Handle UnicodeData.txt. +# +# Remove ranges and control characters, +# then extract the decomposition field, +# then remove lines without decomposition, +# then remove all compatibility decompositions. +cat "$1" \ +| sed -e '/^[^;]*; $$1 + +# Prepare input for running cpp. +cat $$1 \ +| sed -e 's/^\([^;]*\);/#define \1 /' \ + -e 's/ / u/g' > $$2 +cat $$1 \ +| sed -e 's/^\([^;]*\);.*$/\1 u\1/' >> $$2 + +# Run C preprocessor to recursively decompose. +$CPP $$2 $$3 + +# Convert it back to original format. +cat $$3 \ +| sed -e '/#/d' \ + -e '/^$/d' \ + -e 's/ \+/ /g' \ + -e 's/ *$//' \ + -e 's/u//g' \ + -e 's/^\([^ ]*\) /\1;/' > $$4 + +# Write comment. +cat <. */ /* TODO diff --git a/contrib/groff/src/utils/hpftodit/hpftodit.man b/contrib/groff/src/utils/hpftodit/hpftodit.man index 429f516d89..8f61da0132 100644 --- a/contrib/groff/src/utils/hpftodit/hpftodit.man +++ b/contrib/groff/src/utils/hpftodit/hpftodit.man @@ -1,6 +1,7 @@ .tr ~ .ig -Copyright (C) 1994-2000, 2001, 2003, 2004 Free Software Foundation, Inc. +Copyright (C) 1994-2000, 2001, 2003, 2004, 2009 + Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice diff --git a/contrib/groff/src/utils/hpftodit/hpuni.cpp b/contrib/groff/src/utils/hpftodit/hpuni.cpp index 23a1eb0528..f5d9384b0e 100644 --- a/contrib/groff/src/utils/hpftodit/hpuni.cpp +++ b/contrib/groff/src/utils/hpftodit/hpuni.cpp @@ -1,22 +1,21 @@ // -*- C++ -*- -/* Copyright (C) 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2003, 2004, 2009 Free Software Foundation, Inc. Written by Jeff Conrad (jeff_conrad@msn.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" #include "stringclass.h" diff --git a/contrib/groff/src/utils/indxbib/indxbib.cpp b/contrib/groff/src/utils/indxbib/indxbib.cpp index 00e99447be..8f9c423452 100644 --- a/contrib/groff/src/utils/indxbib/indxbib.cpp +++ b/contrib/groff/src/utils/indxbib/indxbib.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989-1992, 2000, 2001, 2002, 2003, 2004 +/* Copyright (C) 1989-1992, 2000, 2001, 2002, 2003, 2004, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" diff --git a/contrib/groff/src/utils/indxbib/indxbib.man b/contrib/groff/src/utils/indxbib/indxbib.man index a5660296c6..250ad2d33f 100644 --- a/contrib/groff/src/utils/indxbib/indxbib.man +++ b/contrib/groff/src/utils/indxbib/indxbib.man @@ -1,5 +1,5 @@ .ig -Copyright (C) 1989-2000, 2001 Free Software Foundation, Inc. +Copyright (C) 1989-2000, 2001, 2009 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice diff --git a/contrib/groff/src/utils/indxbib/signal.c b/contrib/groff/src/utils/indxbib/signal.c index 20dfd905d0..d1c4c2b257 100644 --- a/contrib/groff/src/utils/indxbib/signal.c +++ b/contrib/groff/src/utils/indxbib/signal.c @@ -1,21 +1,21 @@ -/* Copyright (C) 1992, 2001, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1992, 2001, 2003, 2004, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ /* Unfortunately vendors seem to have problems writing a that is correct for C++, so we implement all signal handling in C. */ diff --git a/contrib/groff/src/utils/lkbib/lkbib.cpp b/contrib/groff/src/utils/lkbib/lkbib.cpp index b44f245af7..09def0e7f3 100644 --- a/contrib/groff/src/utils/lkbib/lkbib.cpp +++ b/contrib/groff/src/utils/lkbib/lkbib.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989-1992, 2000, 2001 Free Software Foundation, Inc. +/* Copyright (C) 1989-1992, 2000, 2001, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" diff --git a/contrib/groff/src/utils/lkbib/lkbib.man b/contrib/groff/src/utils/lkbib/lkbib.man index 29831ee8d4..398a7a01c8 100644 --- a/contrib/groff/src/utils/lkbib/lkbib.man +++ b/contrib/groff/src/utils/lkbib/lkbib.man @@ -1,5 +1,6 @@ .ig -Copyright (C) 1989-2000, 2001, 2004 Free Software Foundation, Inc. +Copyright (C) 1989-2000, 2001, 2004, 2009 + Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice diff --git a/contrib/groff/src/utils/lookbib/lookbib.cpp b/contrib/groff/src/utils/lookbib/lookbib.cpp index a573c5f6fa..54562fb23e 100644 --- a/contrib/groff/src/utils/lookbib/lookbib.cpp +++ b/contrib/groff/src/utils/lookbib/lookbib.cpp @@ -1,5 +1,5 @@ // -*- C++ -*- -/* Copyright (C) 1989-1992, 2000, 2001, 2002, 2003 +/* Copyright (C) 1989-1992, 2000, 2001, 2002, 2003, 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -7,17 +7,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "lib.h" diff --git a/contrib/groff/src/utils/lookbib/lookbib.man b/contrib/groff/src/utils/lookbib/lookbib.man index baade0fd53..4705e61d3d 100644 --- a/contrib/groff/src/utils/lookbib/lookbib.man +++ b/contrib/groff/src/utils/lookbib/lookbib.man @@ -1,5 +1,6 @@ .ig -Copyright (C) 1989-2000, 2001, 2004 Free Software Foundation, Inc. +Copyright (C) 1989-2000, 2001, 2004, 2009 + Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice diff --git a/contrib/groff/src/utils/pfbtops/pfbtops.c b/contrib/groff/src/utils/pfbtops/pfbtops.c index 8b394d5d1f..493d2901fe 100644 --- a/contrib/groff/src/utils/pfbtops/pfbtops.c +++ b/contrib/groff/src/utils/pfbtops/pfbtops.c @@ -1,21 +1,21 @@ -/* Copyright (C) 1992, 2001, 2003, 2004, 2005 Free Software Foundation, Inc. +/* Copyright (C) 1992, 2001, 2003, 2004, 2005, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ /* This translates ps fonts in .pfb format to ASCII ps files. */ @@ -23,11 +23,12 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ #include #endif +#define __GETOPT_PREFIX groff_ + #include #include #include -#define __GETOPT_PREFIX groff_ #include #include "nonposix.h" diff --git a/contrib/groff/src/utils/pfbtops/pfbtops.man b/contrib/groff/src/utils/pfbtops/pfbtops.man index c97a297633..027732c535 100644 --- a/contrib/groff/src/utils/pfbtops/pfbtops.man +++ b/contrib/groff/src/utils/pfbtops/pfbtops.man @@ -1,5 +1,6 @@ .ig -Copyright (C) 1989-1995, 2001, 2003, 2004 Free Software Foundation, Inc. +Copyright (C) 1989-1995, 2001, 2003, 2004, 2009 + Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice diff --git a/contrib/groff/src/utils/tfmtodit/tfmtodit.cpp b/contrib/groff/src/utils/tfmtodit/tfmtodit.cpp index ccf995a323..73e5c7507b 100644 --- a/contrib/groff/src/utils/tfmtodit/tfmtodit.cpp +++ b/contrib/groff/src/utils/tfmtodit/tfmtodit.cpp @@ -1,22 +1,22 @@ // -*- C++ -*- -/* Copyright (C) 1989-1992, 2000, 2001, 2004 Free Software Foundation, Inc. +/* Copyright (C) 1989-1992, 2000, 2001, 2004, 2009 + Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ /* I have tried to incorporate the changes needed for TeX 3.0 tfm files, but I haven't tested them. */ diff --git a/contrib/groff/src/utils/tfmtodit/tfmtodit.man b/contrib/groff/src/utils/tfmtodit/tfmtodit.man index 51f806d033..0814f45199 100644 --- a/contrib/groff/src/utils/tfmtodit/tfmtodit.man +++ b/contrib/groff/src/utils/tfmtodit/tfmtodit.man @@ -1,5 +1,6 @@ .ig -Copyright (C) 1989-2000, 2001, 2002 Free Software Foundation, Inc. +Copyright (C) 1989-2000, 2001, 2002, 2009 + Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice diff --git a/contrib/groff/tmac/62bit.tmac b/contrib/groff/tmac/62bit.tmac new file mode 100644 index 0000000000..afbd495ce5 --- /dev/null +++ b/contrib/groff/tmac/62bit.tmac @@ -0,0 +1,192 @@ +.\" 62bit.tmac +.\" +.\" Copyright (C) 2003, 2006, 2009 +.\" Free Software Foundation, Inc. +.\" Written by Werner Lemberg (wl@gnu.org) +.\" +.\" This file is part of groff. +.\" +.\" groff is free software; you can redistribute it and/or modify it under +.\" the terms of the GNU General Public License as published by the Free +.\" Software Foundation, either version 3 of the License, or +.\" (at your option) any later version. +.\" +.\" groff is distributed in the hope that it will be useful, but WITHOUT ANY +.\" WARRANTY; without even the implied warranty of MERCHANTABILITY or +.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +.\" for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program. If not, see . +.\" +.\" +.\" +.\" This file provides macros for addition, multiplication, and division of +.\" 62bit signed integers. Its main application is to `scale' 31bit values, +.\" namely, to perform the operation `a * b / c' accurately. +.\" +.\" Note that it is the duty of the user to check whether the input values +.\" fit within 31 bits (this is the range [-1073741824,1073741823]). +.\" +. +.if d add31to62 \ +. nx +. +. +.\" .add31to62 +.\" +.\" Add a 31bit signed integer to a signed 62bit integer. Result is a +.\" signed 62bit integer: +.\" +.\" + (h * 2^30 + l) = h * 2^30 + l +.\" +.\" +.\" in: \n[], \n[h], \n[l] +.\" +.\" out: \n[h], \n[l] +.\" +.\" Example: .add31to62 p q r +.\" +.\" -> input registers: \n[p], \n[qh], \n[ql] +.\" output registers: \n[rh], \n[rl] +.\" +.de1 add31to62 +. nr 62bit-lo2 (\\n[\\$2l]) +. nr 62bit-hi2 (\\n[\\$2h]) +. +. nr 62bit-i ((\\n[\\$1] + \\n[62bit-lo2]) / 1073741824) +. nr \\$3l ((\\n[\\$1] + \\n[62bit-lo2]) % 1073741824) +. +. ie ((\\n[62bit-lo2] > 0) & (\\n[\\$3l] < 0)) \{\ +. nr \\$3l +1073741824 +. nr 62bit-i -1 +. \} +. el \ +. if ((\\n[62bit-lo2] < 0) & (\\n[\\$3l] > 0)) \{\ +. nr \\$3l -1073741824 +. nr 62bit-i +1 +. \} +. +. nr \\$3h (\\n[62bit-hi2] + \\n[62bit-i]) +.. +. +. +.\" .mult31by31 +.\" +.\" Multiply two 31bit signed integers. Result is a 62bit signed +.\" integer: +.\" +.\" * = h * 2^30 + l +.\" +.\" +.\" in: \n[], \n[] +.\" +.\" out: \n[h], \n[l] +.\" +.\" Example: .mult31by31 a b c +.\" +.\" -> input registers: \n[a], \n[b] +.\" output registers: \n[ch], \n[cl] +.\" +.de1 mult31by31 +. nr 62bit-1 (\\n[\\$1]) +. nr 62bit-2 (\\n[\\$2]) +. +. nr 62bit-sign 1 +. if !\\n[62bit-1] \{\ +. nr 62bit-sign -(\\n[62bit-sign]) +. nr 62bit-1 -(\\n[62bit-1]) +. \} +. if !\\n[62bit-2] \{\ +. nr 62bit-sign -(\\n[62bit-sign]) +. nr 62bit-2 -(\\n[62bit-2]) +. \} +. +. nr 62bit-lo1 (\\n[62bit-1] % 32768) +. nr 62bit-hi1 (\\n[62bit-1] / 32768) +. nr 62bit-lo2 (\\n[62bit-2] % 32768) +. nr 62bit-hi2 (\\n[62bit-2] / 32768) +. +. nr 62bit-lo3 (\\n[62bit-lo1] * \\n[62bit-lo2] % 1073741824) +. nr 62bit-i1 (\\n[62bit-lo1] * \\n[62bit-hi2] % 1073741824) +. nr 62bit-i2 (\\n[62bit-lo2] * \\n[62bit-hi1] % 1073741824) +. nr 62bit-hi3 (\\n[62bit-hi1] * \\n[62bit-hi2] % 1073741824) +. +. nr 62bit-i1 (\\n[62bit-i1] + \\n[62bit-i2] % 1073741824) +. \" check carry overflow of 62bit-i1 + 62bit-i2 +. if (\\n[62bit-i1] < \\n[62bit-i2]) \ +. nr 62bit-hi3 +32768 +. +. nr 62bit-hi3 +(\\n[62bit-i1] / 32768) +. \" multiply by 32768 in small steps to avoid overflow +. nr 62bit-i 16 1 +. while \\n-[62bit-i] \ +. nr 62bit-i1 (\\n[62bit-i1] * 2 % 1073741824) +. +. nr 62bit-lo3 (\\n[62bit-lo3] + \\n[62bit-i1] % 1073741824) +. \" check carry overflow of 62bit-i1 + lo +. if (\\n[62bit-lo3] < \\n[62bit-i1]) \ +. nr 62bit-hi3 +1 +. +. if !\\n[62bit-sign] \{\ +. nr 62bit-lo3 -(\\n[62bit-lo3]) +. nr 62bit-hi3 -(\\n[62bit-hi3]) +. \} +. nr \\$3l \\n[62bit-lo3] +. nr \\$3h \\n[62bit-hi3] +.. +. +. +.\" .div62by31 +.\" +.\" Divide a signed 62bit integer by a 31bit integer. Result is a +.\" 31bit signed integer: +.\" +.\" (h * 2^30 + l) / = +.\" +.\" +.\" in: \n[h], \n[l], \n[] +.\" +.\" out: \n[] +.\" +.\" Example: .div62by31 foo bar baz +.\" +.\" -> input registers: \n[fooh] \n[fool] \n[bar] +.\" output register: \n[baz] +.\" +.de1 div62by31 +. nr 62bit-lo1 \\n[\\$1l] +. nr 62bit-hi1 \\n[\\$1h] +. nr 62bit-2 \\n[\\$2] +. nr 62bit-3 0 +. +. nr 62bit-sign 1 +. if ((\\n[62bit-lo1] < 0) : (\\n[62bit-hi1] < 0)) \{\ +. nr 62bit-sign -(\\n[62bit-sign]) +. nr 62bit-lo1 -(\\n[62bit-lo1]) +. nr 62bit-hi1 -(\\n[62bit-hi1]) +. \} +. if !\\n[62bit-2] \{\ +. nr 62bit-sign -(\\n[62bit-sign]) +. nr 62bit-2 -(\\n[62bit-2]) +. \} +. +. nr 62bit-i 31 1 +. while \\n-[62bit-i] \{\ +. nr 62bit-hi1 (\\n[62bit-hi1] * 2 % 1073741824) +. nr 62bit-3 (\\n[62bit-3] * 2) +. nr 62bit-hi1 +(\\n[62bit-lo1] / 536870912) +. +. if (\\n[62bit-hi1] >= \\n[62bit-2]) \{\ +. nr 62bit-hi1 -\\n[62bit-2] +. nr 62bit-3 +1 +. \} +. nr 62bit-lo1 (\\n[62bit-lo1] * 2 % 1073741824) +. \} +. +. if !\\n[62bit-sign] \ +. nr 62bit-3 -(\\n[62bit-3]) +. nr \\$3 \\n[62bit-3] +.. +. +.\" EOF diff --git a/contrib/groff/tmac/LOCALIZATION b/contrib/groff/tmac/LOCALIZATION new file mode 100644 index 0000000000..71f8c7cd12 --- /dev/null +++ b/contrib/groff/tmac/LOCALIZATION @@ -0,0 +1,54 @@ + +Localization +------------ + +The localization process involves two files. + + - A locale dependent file (for example, fr.tmac for French) where all + locale specific strings are (re)defined. + + - A locale independent file (trans.tmac) responsible for activating those + localized strings. + +All you have to do is to create a new file named `LL.tmac' where `LL' is +your country code (`de' for Germany, `el' for Greece, ...), maybe using +`fr.tmac' as a template. + +The first thing to do is to redefine the string `locale' to your language. + + .ds locale german\" + +Then change all the translations in the predefined strings. Don't forget +the \" at the end of each string, preventing spaces from lurking around. + +After `trans.tmac' has been called by + + .mso trans.tmac + +you must redefine the date strings in order to use the day and month names +translated earlier. If you don't feel comfortable with groff maybe you +should use the definitions used in `fr.tmac'. Nevertheless, you should take +care of the order of the date elements. + + - If your date format is MM/DD/YY: + + for ms: .ds DY \*[MO] \n[dy] \n[year] + for mm: .ds cov*new-date \\*[MO\\n[mo]] \\n[dy] \\n[year] + for me: .ds td \*(mo \n(dy \n(y4 + + - If your date format is DD/MM/YY: + + for ms: .ds DY \n[dy] \*[MO] \n[year] + for mm: .ds cov*new-date \\n[dy] \\*[MO\\n[mo]] \\n[year] + for me: .ds td \n(dy \*(mo \n(y4 + +Other date formats can be handled similarly. + +NOTE: For the mm package, in the `ISODATE' macro, only the first definition + of `cov*new-date' must be changed (see `fr.tmac'). + +Finally, change groff behaviour in order to comply with your locale. For +example, `fr.tmac' changes the default encoding, sets the sentence spaces, +and final activates hyphenation, provided there are hyphenation patterns +available (which should be put into files named `hyphen.LL' for +consistency). diff --git a/contrib/groff/tmac/README b/contrib/groff/tmac/README index 19f938a85d..e69de29bb2 100644 --- a/contrib/groff/tmac/README +++ b/contrib/groff/tmac/README @@ -1,9 +0,0 @@ -The file `hyphen.us' is identical to the file `hyphen.tex', part of the TeX -system written by Donald E. Knuth; the master file can be found at - - ftp://labrea.stanford.edu/pub/tex/dist/lib/hyphen.tex . - -It has been renamed for consistency, i.e., to make patterns available under -the filenames `hyphen.', e.g. `hyphen.de' or `hyphen.uk'. - -See the file itself for a copyright notice. diff --git a/contrib/groff/tmac/TESTING-HINTS b/contrib/groff/tmac/TESTING-HINTS new file mode 100644 index 0000000000..818d539a6f --- /dev/null +++ b/contrib/groff/tmac/TESTING-HINTS @@ -0,0 +1,19 @@ +Here are some hints about testing modifications to macro packages +and manual pages. + +1. Use groff's `-ww' option to catch potential problems. + Ideally, there shouldn't be any warnings. + +2. For a well-formedness check, run doclifter (http://catb.org/~esr/doclifter) + against your page. This tool was written to lift pages to XML, but as a + side effect it acts as a validator that will warn you of potential problems + and non-portable constructs. + +3. The two most important groff client types are X terminal emulators + and Postscript printers. Eyeball-check your output under both. + +4. The colorized man output of the Midnight Commander (what you get by + pressing the F3 key on a man page) is good for making small errors + more visible. + +5. Try different terminal line lengths, say, 80 and 100 characters. diff --git a/contrib/groff/tmac/an-ext.tmac b/contrib/groff/tmac/an-ext.tmac new file mode 100644 index 0000000000..c3983ca6dc --- /dev/null +++ b/contrib/groff/tmac/an-ext.tmac @@ -0,0 +1,211 @@ +.\" an-ext.tmac +.\" +.\" Written by Eric S. Raymond +.\" Werner Lemberg +.\" +.\" Version 2007-Feb-02 +.\" +.\" Copyright (C) 2007, 2009 Free Software Foundation, Inc. +.\" You may freely use, modify and/or distribute this file. +.\" +.\" +.\" The code below provides extension macros for the `man' macro package. +.\" Care has been taken to make the code portable; groff extensions are +.\" properly hidden so that all troff implementations can use it without +.\" changes. +.\" +.\" With groff, this file is sourced by the `man' macro package itself. +.\" Man page authors who are concerned about portability might add the +.\" used macros directly to the prologue of the man page(s). +. +. +.\" Convention: Auxiliary macros and registers start with `m' followed +.\" by an uppercase letter or digit. +. +. +.\" Protect against being sourced twice. +.nr mX +1 +.if \n(mX>1 \ +. nx +. +.\" Check whether we are using grohtml. +.nr mH 0 +.if \n(.g \ +. if '\*(.T'html' \ +. nr mH 1 +. +. +.\" Map mono-width fonts to standard fonts for groff's TTY device. +.if n \{\ +. do ftr CR R +. do ftr CI I +. do ftr CB B +.\} +. +.\" groff has glyph entities for angle brackets. +.ie \n(.g \{\ +. ds la \(la\" +. ds ra \(ra\" +.\} +.el \{\ +. ds la <\" +. ds ra >\" +. \" groff's man macros control hyphenation with this register. +. nr HY 1 +.\} +. +.nr mS 0 +. +. +.\" Declare start of command synopsis. Sets up hanging indentation. +.de SY +. ie !\\n(mS \{\ +. nh +. nr mS 1 +. nr mA \\n(.j +. ad l +. nr mI \\n(.i +. \} +. el \{\ +. br +. ns +. \} +. +. HP \w'\fB\\$1\fP\ 'u +. B "\\$1" +.. +. +. +.\" End of command synopsis. Restores adjustment. +.de YS +. in \\n(mIu +. ad \\n(mA +. hy \\n(HY +. nr mS 0 +.. +. +. +.\" Declare optional option. +.de OP +. ie \\n(.$-1 \ +. RI "[\fB\\$1\fP" "\ \\$2" "]" +. el \ +. RB "[" "\\$1" "]" +.. +. +. +.\" Start URL. +.de UR +. ds m1 \\$1\" +. nh +. if \\n(mH \{\ +. \" Start diversion in a new environment. +. do ev URL-div +. do di URL-div +. \} +.. +. +. +.\" End URL. +.de UE +. ie \\n(mH \{\ +. br +. di +. ev +. +. \" Has there been one or more input lines for the link text? +. ie \\n(dn \{\ +. do HTML-NS "" +. \" Yes, strip off final newline of diversion and emit it. +. do chop URL-div +. do URL-div +\c +. do HTML-NS +. \} +. el \ +. do HTML-NS "\\*(m1" +\&\\$*\" +. \} +. el \ +\\*(la\\*(m1\\*(ra\\$*\" +. +. hy \\n(HY +.. +. +. +.\" Start email address. +.de MT +. ds m1 \\$1\" +. nh +. if \\n(mH \{\ +. \" Start diversion in a new environment. +. do ev URL-div +. do di URL-div +. \} +.. +. +. +.\" End email address. +.de ME +. ie \\n(mH \{\ +. br +. di +. ev +. +. \" Has there been one or more input lines for the link text? +. ie \\n(dn \{\ +. do HTML-NS "" +. \" Yes, strip off final newline of diversion and emit it. +. do chop URL-div +. do URL-div +\c +. do HTML-NS +. \} +. el \ +. do HTML-NS "\\*(m1" +\&\\$*\" +. \} +. el \ +\\*(la\\*(m1\\*(ra\\$*\" +. +. hy \\n(HY +.. +. +. +.\" Continuation line for .TP header. +.de TQ +. br +. ns +. TP \\$1\" no doublequotes around argument! +.. +. +. +.\" Start example. +.de EX +. nr mE \\n(.f +. nf +. nh +. ft CW +.. +. +. +.\" End example. +.de EE +. ft \\n(mE +. fi +. hy \\n(HY +.. +. +. +.\" Start display. +.de DS +. \" XXX to be written +.. +. +. +.\" End display. +.de DE +. \" XXX to be written +.. +. +.\" EOF diff --git a/contrib/groff/tmac/an-old.tmac b/contrib/groff/tmac/an-old.tmac index b51f2e2f4f..a256fd3629 100644 --- a/contrib/groff/tmac/an-old.tmac +++ b/contrib/groff/tmac/an-old.tmac @@ -1,6 +1,7 @@ .\" an-old.tmac .\" -.\" Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004, 2005 +.\" Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004, 2005, +.\" 2007, 2008, 2009 .\" Free Software Foundation, Inc. .\" Written by James Clark (jjc@jclark.com) .\" @@ -8,17 +9,16 @@ .\" .\" groff is free software; you can redistribute it and/or modify it under .\" the terms of the GNU General Public License as published by the Free -.\" Software Foundation; either version 2, or (at your option) any later -.\" version. +.\" Software Foundation, either version 3 of the License, or +.\" (at your option) any later version. .\" .\" groff is distributed in the hope that it will be useful, but WITHOUT ANY .\" WARRANTY; without even the implied warranty of MERCHANTABILITY or .\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License .\" for more details. .\" -.\" You should have received a copy of the GNU General Public License along -.\" with groff; see the file COPYING. If not, write to the Free Software -.\" Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. +.\" You should have received a copy of the GNU General Public License +.\" along with this program. If not, see . .\" .\" -rcR=1 => Create a single, very long page instead of multiple pages. .\" Useful for online display. Default in nroff mode. @@ -61,6 +61,7 @@ .\} . .nr need_eo_h 0 +.nr need_col2 0 . .\" set up the line length... .\" giving precedence to any prior assignment to the \n[LL] register. @@ -86,10 +87,10 @@ .if !r LT \ . nr LT \n[LL] . -.nr FT -.5i +.nr FT (-.5i) . .\" Default heading font -.ds HF B +.ds HF B\" . .nr an-first 1 . @@ -125,21 +126,25 @@ . nr an-margin \\n[IN] .. . +.ds an-extra1 +.ds an-extra2 +.ds an-extra3 +. .\" .TH title section extra1 extra2 extra3 .de1 TH . if \\n[an-html] \{\ . DEVTAG-TL -\\$1 +. nop \\$1 . DEVTAG-EO-TL . \} . . de an-init \" We have to do it like this to get multiple man pages right. -. ds an-title "\\$1 -. ds an-section "\\$2 -. ds an-extra1 "\\$3 -. ie (\\n[.$] > 3) .ds an-extra2 "\\$4 +. ds an-title "\\$1\" +. ds an-section "\\$2\" +. ds an-extra1 "\\$3\" +. ie (\\n[.$] > 3) .ds an-extra2 "\\$4\" . el .ds an-extra2 \"Sun Release 4.0 -. ie (\\n[.$] > 4) .ds an-extra3 "\\$5 +. ie (\\n[.$] > 4) .ds an-extra3 "\\$5\" . el .ds an-extra3 \"System Programmer's Manual . ds an-init \\.. @@ -198,7 +203,7 @@ . wh -1i an-footer . wh \\n[FT]u an-p-footer . -. if (\\n[nl] > 0) \{\ +. if \\n[nl] \{\ . ie \\n[C] .bp (\\n[%] + 1) . el .bp 1 . \} @@ -208,22 +213,22 @@ .\" BSD compatibility macros: .AT and .UC . .de1 AT -. ds an-extra2 "7th Edition -. if "\\$1"3" .ds an-extra2 "7th Edition -. if "\\$1"4" .ds an-extra2 "System III +. ds an-extra2 "7th Edition\" +. if "\\$1"3" .ds an-extra2 "7th Edition\" +. if "\\$1"4" .ds an-extra2 "System III\" . if "\\$1"5" \{\ -. ie "\\$2"" .ds an-extra2 "System V -. el .ds an-extra2 "System V Release \\$2 +. ie "\\$2"" .ds an-extra2 "System V\" +. el .ds an-extra2 "System V Release \\$2\" . \} .. . .de1 UC -. ds an-extra2 "3rd Berkeley Distribution -. if "\\$1"3" .ds an-extra2 "3rd Berkeley Distribution -. if "\\$1"4" .ds an-extra2 "4th Berkeley Distribution -. if "\\$1"5" .ds an-extra2 "4.2 Berkeley Distribution -. if "\\$1"6" .ds an-extra2 "4.3 Berkeley Distribution -. if "\\$1"7" .ds an-extra2 "4.4 Berkeley Distribution +. ds an-extra2 "3rd Berkeley Distribution\" +. if "\\$1"3" .ds an-extra2 "3rd Berkeley Distribution\" +. if "\\$1"4" .ds an-extra2 "4th Berkeley Distribution\" +. if "\\$1"5" .ds an-extra2 "4.2 Berkeley Distribution\" +. if "\\$1"6" .ds an-extra2 "4.3 Berkeley Distribution\" +. if "\\$1"7" .ds an-extra2 "4.4 Berkeley Distribution\" .. . .de1 DT @@ -260,7 +265,7 @@ . el \ . sp .5i . \} -. ev 1 +. ev an-1 . ps \\n[PS]u . vs \\n[VS]u . lt \\n[LT]u @@ -286,7 +291,7 @@ .af an-page-letter a . .de1 an-p-footer -. ev 1 +. ev an-1 . ps \\n[PS]u . vs \\n[VS]u . lt \\n[LT]u @@ -299,14 +304,14 @@ . ie r X \{\ . if (\\n[%] > \\n[X]) \{\ . nr an-page-letter (\\n[%] - \\n[X]) -. ds an-page-string \\n[X]\\n[an-page-letter] +. ds an-page-string \\n[X]\\n[an-page-letter]\" . \} . \} . el \{\ . ie \\n[cR] \ -. ds an-page-string "\\*[an-title](\\*[an-section]) +. ds an-page-string "\\*[an-title](\\*[an-section])\" . el \ -. ds an-page-string \\n[%] +. ds an-page-string \\n[%]\" . \} . \} . BT @@ -398,6 +403,8 @@ .de1 an-trap . if \\n[need_eo_h]>0 .DEVTAG-EO-H . nr need_eo_h 0 +. if \\n[need_col2]>0 .DEVTAG-COL 2 +. nr need_col2 0 . ft R . ps \\n[PS]u . vs \\n[VS]u @@ -417,23 +424,29 @@ . di . nr an-div? 0 . ll +. \" We must emit the diversion in a separate environment to +. \" assure that a possible margin character is printed correctly. +. ev an-2 +. evc 0 +. mc +. nf +. in \\n[an-margin]u . ie (\\n[dl] + \\n[an-tag-sep] > \\n[an-prevailing-indent]) \{\ -. in \\n[an-margin]u . ne (2v + 1u) . an-div +. ev . in (\\n[an-margin]u + \\n[an-prevailing-indent]u) . \} . el \{\ -. \" In nroff mode, if the indentation value is not an integer multiple -. \" of the character cell, it is possible that the following combination -. \" of .in and .ti yields a different result as the .in request in +. \" In nroff mode, the indentation value should be an integer multiple +. \" of the character cell, to avoid different results compared to the . \" the .ie part above. -. in (\\n[an-margin]u + \\n[an-prevailing-indent]u) -. ti -\\n[an-prevailing-indent]u -. chop an-div . ne (1v + 1u) . DEVTAG-COL 1 -\\*[an-div]\\h'|\\n[an-prevailing-indent]u'\c +. an-div +. sp -1 +. ev +. in (\\n[an-margin]u + \\n[an-prevailing-indent]u) . DEVTAG-COL-NEXT 2 . \} .. @@ -445,6 +458,7 @@ . ft R . in \\n[an-margin]u . nr an-prevailing-indent \\n[IN] +. ns .. . .als PP LP @@ -458,6 +472,7 @@ . sp \\n[PD]u . ne (1v + 1u) . in (\\n[an-margin]u + \\n[an-prevailing-indent]u) +. ns . \} . el \{\ . ie (\\n[.$] - 1) .TP "\\$2" @@ -475,19 +490,22 @@ . if \\n[.$] .nr an-prevailing-indent (n;\\$1) . in (\\n[an-margin]u + \\n[an-prevailing-indent]u) . ti \\n[an-margin]u +. DEVTAG-COL 1 +. nr need_col2 1 +. ns .. . .ds an-empty \" this is referenced to avoid looping on eg .RB ( \\ ) . .de1 RI . if \\n[.$] \{\ -. ds an-result \&\f[R]\\$1 +. ds an-result \&\f[R]\\$1\" . shift . while (\\n[.$] >= 2) \{\ -. as an-result \,\f[I]\\$1\f[R]\/\\$2\\*[an-empty] +. as an-result \,\f[I]\\$1\f[R]\/\\$2\\*[an-empty]\" . shift 2 . \} -. if \\n[.$] .as an-result \,\f[I]\\$1 +. if \\n[.$] .as an-result \,\f[I]\\$1\" \\*[an-result] . ft R . \} @@ -495,13 +513,13 @@ . .de1 IR . if \\n[.$] \{\ -. ds an-result \&\f[I]\\$1\f[R] +. ds an-result \&\f[I]\\$1\f[R]\" . shift . while (\\n[.$] >= 2) \{\ -. as an-result \/\\$1\f[I]\,\\$2\f[R] +. as an-result \/\\$1\f[I]\,\\$2\f[R]\" . shift 2 . \} -. if \\n[.$] .as an-result \/\\$1 +. if \\n[.$] .as an-result \/\\$1\" \\*[an-result] . ft R . \} @@ -509,13 +527,13 @@ . .de1 IB . if \\n[.$] \{\ -. ds an-result \&\f[I]\\$1 +. ds an-result \&\f[I]\\$1\" . shift . while (\\n[.$] >= 2) \{\ -. as an-result \/\f[B]\\$1\f[I]\,\\$2\\*[an-empty] +. as an-result \/\f[B]\\$1\f[I]\,\\$2\\*[an-empty]\" . shift 2 . \} -. if \\n[.$] .as an-result \/\f[B]\\$1 +. if \\n[.$] .as an-result \/\f[B]\\$1\" \\*[an-result] . ft R . \} @@ -523,36 +541,36 @@ . .de1 BI . if \\n[.$] \{\ -. ds an-result \&\f[B]\\$1 +. ds an-result \&\f[B]\\$1\" . shift . while (\\n[.$] >= 2) \{\ -. as an-result \,\f[I]\\$1\f[B]\/\\$2\\*[an-empty] +. as an-result \,\f[I]\\$1\f[B]\/\\$2\\*[an-empty]\" . shift 2 . \} -. if \\n[.$] .as an-result \,\f[I]\\$1 +. if \\n[.$] .as an-result \,\f[I]\\$1\" \\*[an-result] . ft R . \} .. . .de1 RB -. ds an-result \& +. ds an-result \&\" . while (\\n[.$] >= 2) \{\ -. as an-result \f[R]\\$1\f[B]\\$2\\*[an-empty] +. as an-result \f[R]\\$1\f[B]\\$2\\*[an-empty]\" . shift 2 . \} -. if \\n[.$] .as an-result \f[R]\\$1 +. if \\n[.$] .as an-result \f[R]\\$1\" \\*[an-result] . ft R .. . .de1 BR -. ds an-result \& +. ds an-result \&\" . while (\\n[.$] >= 2) \{\ -. as an-result \f[B]\\$1\f[R]\\$2\\*[an-empty] +. as an-result \f[B]\\$1\f[R]\\$2\\*[an-empty]\" . shift 2 . \} -. if \\n[.$] .as an-result \f[B]\\$1 +. if \\n[.$] .as an-result \f[B]\\$1\" \\*[an-result] . ft R .. @@ -580,6 +598,10 @@ . .de1 TS . sp \\n[PD]u +. if \\n[an-html] \{\ +. nr an-TS-ll \\n[.l] +. ll 1000n +. \} . HTML-IMAGE .. . @@ -588,14 +610,22 @@ . .de1 TE . HTML-IMAGE-END +. if \\n[an-html] \ +. ll \\n[an-TS-ll]u .. . .\" dummy equation delimiters .de1 EQ +. if \\n[an-html] \{\ +. nr an-EQ-ll \\n[.l] +. ll 1000n +. \} . HTML-IMAGE .. .de1 EN . HTML-IMAGE-END +. if \\n[an-html] \ +. ll \\n[an-EQ-ll]u .. . .de1 R @@ -614,11 +644,11 @@ . .\" these strings must work in compatibility mode also . -.ds S \s'\\n(PSu' -.ie c\[tm] .ds Tm \(tm -.el .ds Tm (TM) -.ds lq \(lq -.ds rq \(rq +.ds S \s'\\n(PSu'\" +.ie c\[tm] .ds Tm \(tm\" +.el .ds Tm (TM)\" +.ds lq \(lq\" +.ds rq \(rq\" . .if !\n[an-html] \{\ . if !rHY \{\ @@ -630,6 +660,21 @@ . hy \n[HY] .\} . +.\" For UTF-8, map some characters conservatively for the sake +.\" of easy cut and paste. +. +.if '\*[.T]'utf8' \{\ +. rchar \- - ' ` +. +. char \- \N'45' +. char - \N'45' +. char ' \N'39' +. char ` \N'96' +.\} +. +.\" Load man macro extensions. +.mso an-ext.tmac +. .\" Load local modifications. .mso man.local . diff --git a/contrib/groff/tmac/andoc.tmac b/contrib/groff/tmac/andoc.tmac index bfb869ab07..370218c6e5 100644 --- a/contrib/groff/tmac/andoc.tmac +++ b/contrib/groff/tmac/andoc.tmac @@ -1,19 +1,78 @@ .\" andoc.tmac .\" -.\" Load either an-old.tmac or doc.tmac. -.if !\n(.g .ab These macros require groff. -.de Dd -.rm Dd -.do mso doc.tmac -\\*(Dd\\ +.\" Load either an-old.tmac or doc.tmac. Multiple man pages can be +.\" handled. +.\" +.\" +.\" Copyright (C) 1991, 1995, 2000, 2002, 2008, 2009 +.\" Free Software Foundation, Inc. +.\" Written by James Clark (jjc@jclark.com) +.\" +.\" This file is part of groff. +.\" +.\" groff is free software; you can redistribute it and/or modify it under +.\" the terms of the GNU General Public License as published by the Free +.\" Software Foundation, either version 3 of the License, or +.\" (at your option) any later version. +.\" +.\" groff is distributed in the hope that it will be useful, but WITHOUT ANY +.\" WARRANTY; without even the implied warranty of MERCHANTABILITY or +.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +.\" for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program. If not, see . +.\" +. +.if !\n(.g \ +. ab These macros require groff. +. +.nr _C \n(.C +.cp 0 +. +.als andoc-em em +.als andoc-bp bp +. +.de1 reload-doc +. ch an-header \" remove trap set by an-old.tmac +. ch an-footer \" remove trap set by an-old.tmac +. ch an-p-footer \" remove trap set by an-old.tmac +. +. als em andoc-em +. als bp andoc-bp +. rm Dd \" disable load-only-once, see doc.tmac +. +. mso doc.tmac +. +. als TH reload-man +\\*[Dd]\\ .. -.de TH -.rm TH -.do mso an-old.tmac -\\*(TH\\ +. +.de1 reload-man +. ch header \" remove trap set by doc.tmac +. ch footer \" remove trap set by doc.tmac +. +. als em andoc-em +. als bp andoc-bp +. rm RI \" disable load-only-once, see an-old.tmac +. blm \" no blank line macro +. rm TH +. +. mso an-old.tmac +. +. als Dd reload-doc +\\*[TH]\\ .. -.\" dummy equation macros -- eqnrc is read before .TH or .Dd is parsed. +. +.als TH reload-man +.als Dd reload-doc +. +.\" dummy equation macros -- eqnrc is read before .TH or .Dd is parsed .de EQ .. .de EN .. +. +.cp \n[_C] +. +.\" end of andoc.tmac diff --git a/contrib/groff/tmac/composite.tmac b/contrib/groff/tmac/composite.tmac index 95e0f07afc..734c3ac945 100644 --- a/contrib/groff/tmac/composite.tmac +++ b/contrib/groff/tmac/composite.tmac @@ -14,6 +14,7 @@ .do composite a. u0307 .do composite . u0307 .do composite ad u0308 +.do composite : u0308 .do composite ao u030A .do composite a" u030B .do composite " u030B diff --git a/contrib/groff/tmac/cs.tmac b/contrib/groff/tmac/cs.tmac new file mode 100644 index 0000000000..e469482eb2 --- /dev/null +++ b/contrib/groff/tmac/cs.tmac @@ -0,0 +1,175 @@ +.\" -*- mode: nroff; coding: iso-latin-2; -*- +.\" +.\" Czech localization for groff +.\" +.\" Copyright (C) 2007, 2009 Free Software Foundation, Inc. +.\" Written by Marcela Ma¹láòová (mmaslano@redhat.com) +.\" +.\" This file is part of groff. +.\" +.\" groff is free software; you can redistribute it and/or modify it under +.\" the terms of the GNU General Public License as published by the Free +.\" Software Foundation, either version 3 of the License, or +.\" (at your option) any later version. +.\" +.\" groff is distributed in the hope that it will be useful, but WITHOUT ANY +.\" WARRANTY; without even the implied warranty of MERCHANTABILITY or +.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +.\" for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program. If not, see . +.\" +.\" Please send comments to mmaslano@redhat.com. +. +. +.\" Locale string +. +.ds locale czech\" +. +. +.\" Predefined text translations +. +.ds \*[locale]-abstract ABSTRAKT\" +.ds \*[locale]-app DODATEK\" +.ds \*[locale]-april Duben\" +.ds \*[locale]-attribute_string z\" +.ds \*[locale]-august Øíjen\" +.ds \*[locale]-chapter_string Kapitola\" +.ds \*[locale]-december Prosinec\" +.ds \*[locale]-draft_string Koncept\" +.ds \*[locale]-endnote_string POZNÁMKY\" +.ds \*[locale]-february Únor\" +.ds \*[locale]-finis_string KONEC\" +.ds \*[locale]-friday Pátek\" +.ds \*[locale]-january Leden\" +.ds \*[locale]-july Èervenec\" +.ds \*[locale]-june Èerven\" +.ds \*[locale]-le SEZNAM ROVNIC\" +.ds \*[locale]-letapp LICENCE\" +.ds \*[locale]-letat ADRESÁT:\" +.ds \*[locale]-letcn DÙVÌRNÌ\" +.ds \*[locale]-letdate Datum\" +.ds \*[locale]-letfc S úctou,\" +.ds \*[locale]-letns!0 Kopie\" +.ds \*[locale]-letns!1 Kopie (pøíjemci)\" +.ds \*[locale]-letns!10 Kopie (pøíjemcùm)\" +.ds \*[locale]-letns!11 Kopie (bez pøíjemcù) \[a `]\" +.ds \*[locale]-letns!12 Shrnutí\" +.ds \*[locale]-letns!13 Celková zpráva\" +.ds \*[locale]-letns!14 Cc:\" +.ds \*[locale]-letns!2 Kopie (bez pøíjemce)\" +.ds \*[locale]-letns!3 Dodatek\" +.ds \*[locale]-letns!4 Dodatky\" +.ds \*[locale]-letns!5 Pøíloha\" +.ds \*[locale]-letns!6 Pøílohy\" +.ds \*[locale]-letns!7 Separátní\" +.ds \*[locale]-letns!8 Dopis\" +.ds \*[locale]-letns!9 Zpráva\" +.ds \*[locale]-letns!copy Kopie \" (neodstraòovat mezeru)\" +.ds \*[locale]-letns!to " pro\" +.ds \*[locale]-letrn Vzhldem k:\" +.ds \*[locale]-letsa Do vlastních rukou:\" +.ds \*[locale]-letsj TÉMA:\" +.ds \*[locale]-lf REJSTØÍK ILUSTRACÍ\" +.ds \*[locale]-licon REJSTØÍK\" +.ds \*[locale]-liec Citace\" +.ds \*[locale]-liex Dokument\" +.ds \*[locale]-lifg Ilustrace\" +.ds \*[locale]-litb Tabulka\" +.ds \*[locale]-lt REJSTØÍK TABULEK\" +.ds \*[locale]-lx REJSTØÍK DOKUMENTÙ\" +.ds \*[locale]-march Bøezen\" +.ds \*[locale]-may Kvìten\" +.ds \*[locale]-monday Pondìlí\" +.ds \*[locale]-november Listopad\" +.ds \*[locale]-october Øíjen\" +.ds \*[locale]-paper A4\" +.ds \*[locale]-qrf Viz. kapitola\~\\*[Qrfh], stránka\~\\*[Qrfp].\" +.ds \*[locale]-references Literatura\" +.ds \*[locale]-revision_string Rev.\" +.ds \*[locale]-rp LITERATURA\" +.ds \*[locale]-saturday Sobota\" +.ds \*[locale]-september Záøí\" +.ds \*[locale]-sunday Nedìle\" +.ds \*[locale]-thursday Ètvrtek\" +.ds \*[locale]-toc Seznam literatury\" +.ds \*[locale]-toc_header_string Seznam literatury\" +.ds \*[locale]-tuesday Úterý\" +.ds \*[locale]-wednesday Støeda\" +. +. +.\" Activate the translations +. +.mso trans.tmac +. +. +.\" ms package +.if r GS \{\ +. \" update the date +. ds DY \n[dy] \*[MO] \n[year] +. \" set hyphenation flags +. nr HY 12 +.\} +. +. +.\" mm package +.if d PH \{\ +. \" update the date with the new strings +. ds cov*new-date \\n[dy] \\*[MO\\n[mo]] \\n[year] +. +. \" ISODATE and DT update +. de ISODATE +. nr cov*mm \\n[mo] +. nr cov*dd \\n[dy] +. af cov*mm 01 +. af cov*dd 01 +. ie '0'\\$1' \ +. ds cov*new-date \\n[dy] \\*[MO\\n[mo]] \\n[year] +. el \ +. ds cov*new-date \\n[year]-\\n[cov*mm]-\\n[cov*dd] +. . +. +. als DT cov*new-date +.\} +. +. +.\" me package +.if d @R \{\ +. \" date update +. ds td \n(dy \*(mo \n(y4 +.\} +. +. +.\" Default encoding +.mso latin2.tmac +. +. +.\" Czech hyphenation +.ss 12 0 +.hy 12 +.hcode á á Á á +.hcode è è È è +.hcode ï ï Ï ï +.hcode é é É é +.hcode ì ì Ì ì +.hcode í í Í í +.hcode ò ò Ò ò +.hcode ó ó Ó ó +.hcode ø ø Ø ø +.hcode ¹ ¹ © ¹ +.hcode » » « » +.hcode ú ú Ú ú +.hcode ù ù Ù ù +.hcode ý ý Ý ý +.hcode ¾ ¾ ® ¾ +. +.hla cs +.hpf hyphen.cs +.hpfa hyphenex.cs +. +. +.\" man, mdoc and mdoc-old are intentionally left untouched: +.\" usually these packages are translated in the sources of the documents. +. +.\" end of cs.tmac diff --git a/contrib/groff/tmac/de.tmac b/contrib/groff/tmac/de.tmac new file mode 100644 index 0000000000..0e143de7e7 --- /dev/null +++ b/contrib/groff/tmac/de.tmac @@ -0,0 +1,168 @@ +.\" -*- mode: nroff; coding: iso-latin-1; -*- +.\" +.\" German localization for groff +.\" +.\" Copyright (C) 2006, 2009 Free Software Foundation, Inc. +.\" Written by Werner Lemberg (wl@gnu.org) +.\" +.\" This file is part of groff. +.\" +.\" groff is free software; you can redistribute it and/or modify it under +.\" the terms of the GNU General Public License as published by the Free +.\" Software Foundation, either version 3 of the License, or +.\" (at your option) any later version. +.\" +.\" groff is distributed in the hope that it will be useful, but WITHOUT ANY +.\" WARRANTY; without even the implied warranty of MERCHANTABILITY or +.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +.\" for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program. If not, see . +.\" +.\" Please send comments to groff@gnu.org. +. +. +.\" Locale string +. +.ds locale german\" +. +. +.\" Predefined text translations +. +.ds \*[locale]-abstract Zusammenfassung\" +.ds \*[locale]-app Anhang\" +.ds \*[locale]-april April\" +.ds \*[locale]-attribute_string von\" +.ds \*[locale]-august August\" +.ds \*[locale]-chapter_string Kapitel\" +.ds \*[locale]-december Dezember\" +.ds \*[locale]-draft_string Entwurf\" +.ds \*[locale]-endnote_string Bemerkungen\" +.ds \*[locale]-february Februar\" +.ds \*[locale]-finis_string Ende\" +.ds \*[locale]-friday Freitag\" +.ds \*[locale]-january Januar\" +.ds \*[locale]-july Juli\" +.ds \*[locale]-june Juni\" +.ds \*[locale]-le Verzeichnis der Gleichungen\" +.ds \*[locale]-letapp Genehmigt:\" +.ds \*[locale]-letat An\" +.ds \*[locale]-letcn Vertraulich\" +.ds \*[locale]-letdate Datum\" +.ds \*[locale]-letfc Hochachtungsvoll\" +.ds \*[locale]-letns!0 Kopie an\" +.ds \*[locale]-letns!1 Kopie (mit Anhang) an\" +.ds \*[locale]-letns!10 Kopie (mit Anhängen) an\" +.ds \*[locale]-letns!11 Kopie (ohne Anhänge) an\" +.ds \*[locale]-letns!12 Nur Zusammenfassung an\" +.ds \*[locale]-letns!13 Kompletter Bericht an\" +.ds \*[locale]-letns!14 Cc:\" +.ds \*[locale]-letns!2 Kopie (ohne Anhang) an\" +.ds \*[locale]-letns!3 Anhang\" +.ds \*[locale]-letns!4 Anhänge\" +.ds \*[locale]-letns!5 Beilage\" +.ds \*[locale]-letns!6 Beilagen\" +.ds \*[locale]-letns!7 Separat\" +.ds \*[locale]-letns!8 Brief an\" +.ds \*[locale]-letns!9 Bericht an\" +.ds \*[locale]-letns!copy Kopie \" don't remove the space!) +.ds \*[locale]-letns!to " an\" +.ds \*[locale]-letrn In Bezug auf:\" +.ds \*[locale]-letsa An die zuständige Abteilung:\" +.ds \*[locale]-letsj Betreff:\" +.ds \*[locale]-lf Verzeichnis der Abbildungen\" +.ds \*[locale]-licon Inhalt\" +.ds \*[locale]-liec Gleichung\" +.ds \*[locale]-liex Beleg\" +.ds \*[locale]-lifg Abbildung\" +.ds \*[locale]-litb Tabelle\" +.ds \*[locale]-lt Verzeichnis der Tabellen\" +.ds \*[locale]-lx Verzeichnis der Belege\" +.ds \*[locale]-march März\" +.ds \*[locale]-may Mai\" +.ds \*[locale]-monday Montag\" +.ds \*[locale]-november November\" +.ds \*[locale]-october Oktober\" +.ds \*[locale]-paper A4\" +.ds \*[locale]-qrf Siehe Kapitel\~\\*[Qrfh], Seite\~\\*[Qrfp].\" +.ds \*[locale]-references Literaturverzeichnis\" +.ds \*[locale]-revision_string Rev.\" +.ds \*[locale]-rp Literaturverzeichnis\" +.ds \*[locale]-saturday Samstag\" +.ds \*[locale]-september September\" +.ds \*[locale]-sunday Sonntag\" +.ds \*[locale]-thursday Donnerstag\" +.ds \*[locale]-toc Inhaltsverzeichnis\" +.ds \*[locale]-toc_header_string Inhaltsverzeichnis\" +.ds \*[locale]-tuesday Dienstag\" +.ds \*[locale]-wednesday Mittwoch\" +. +. +.\" Activate the translations +. +.mso trans.tmac +. +. +.\" ms package +.if r GS \{\ +. \" update the date +. ds DY \n[dy].\~\*[MO] \n[year] +. \" set hyphenation flags +. nr HY 12 +.\} +. +. +.\" mm package +.if d PH \{\ +. \" update the date with the new strings +. ds cov*new-date \\n[dy].\& \\*[MO\\n[mo]] \\n[year] +. +. \" ISODATE and DT update +. de ISODATE +. nr cov*mm \\n[mo] +. nr cov*dd \\n[dy] +. af cov*mm 01 +. af cov*dd 01 +. ie '0'\\$1' \ +. ds cov*new-date \\n[dy].\~\\*[MO\\n[mo]] \\n[year] +. el \ +. ds cov*new-date \\n[year]-\\n[cov*mm]-\\n[cov*dd] +. . +. +. als DT cov*new-date +.\} +. +. +.\" me package +.if d @R \{\ +. \" date update +. ds td \n(dy.\~\*(mo.\& \n(y4 +.\} +. +. +.\" Default encoding +.mso latin1.tmac +. +. +.\" German hyphenation +.ss 12 0 +.hy 12 +.hcode ä ä Ä ä +.hcode ö ö Ö ö +.hcode ü ü Ü ü +.hcode ß ß +. +.hla de +.ie r \*[locale]-new-hyphenation-patterns \ +. hpf hyphen.den +.el \{\ +. hpf hyphen.det +. hpfa hyphenex.det +.\} +. +. +.\" man, mdoc and mdoc-old are intentionally left untouched: +.\" usually these packages are translated in the sources of the documents. +. +.\" end of de.tmac diff --git a/contrib/groff/tmac/den.tmac b/contrib/groff/tmac/den.tmac new file mode 100644 index 0000000000..8f8304c0b5 --- /dev/null +++ b/contrib/groff/tmac/den.tmac @@ -0,0 +1,28 @@ +.\" -*- mode: nroff; coding: iso-latin-1; -*- +.\" +.\" German localization for groff (new orthography) +.\" +.\" Copyright (C) 2006, 2009 Free Software Foundation, Inc. +.\" Written by Werner Lemberg (wl@gnu.org) +.\" +.\" This file is part of groff. +.\" +.\" groff is free software; you can redistribute it and/or modify it under +.\" the terms of the GNU General Public License as published by the Free +.\" Software Foundation, either version 3 of the License, or +.\" (at your option) any later version. +.\" +.\" groff is distributed in the hope that it will be useful, but WITHOUT ANY +.\" WARRANTY; without even the implied warranty of MERCHANTABILITY or +.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +.\" for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program. If not, see . +.\" +.\" Please send comments to groff@gnu.org. +. +.nr german-new-hyphenation-patterns 1 +.mso de.tmac +. +.\" end of den.tmac diff --git a/contrib/groff/tmac/devtag.tmac b/contrib/groff/tmac/devtag.tmac index 9a26d44a37..87c3ef3ccc 100644 --- a/contrib/groff/tmac/devtag.tmac +++ b/contrib/groff/tmac/devtag.tmac @@ -10,13 +10,13 @@ Installed position: groff's main macro directory. This file is part of groff, the GNU roff type-setting system. -Copyright (C) 2004 Free Software Foundation, Inc. +Copyright (C) 2004, 2009 Free Software Foundation, Inc. written by Gaius Mulley . groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -24,9 +24,7 @@ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with groff; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin St - Fifth Floor, Boston, MA -02110-1301, USA. +along with this program. If not, see . ------------------------------------------------------------------------ diff --git a/contrib/groff/tmac/doc-common b/contrib/groff/tmac/doc-common index 5b240bb12d..8b1afa5674 100644 --- a/contrib/groff/tmac/doc-common +++ b/contrib/groff/tmac/doc-common @@ -219,6 +219,7 @@ .\" NS doc-document-title .\" NS doc-section .\" NS doc-volume +.\" NS doc-command-name .\" NS .\" NS local variables: .\" NS doc-volume-as-XXX @@ -319,6 +320,7 @@ . ds doc-document-title UNTITLED . ds doc-volume LOCAL . ds doc-section Null +. ds doc-command-name . . if !"\$1"" \ . ds doc-document-title "\$1 @@ -357,6 +359,12 @@ . if !"\$3"" \ . if "\*[doc-volume]"LOCAL" \ . ds doc-volume \$3 +. +. if !\n[cR] \ +. if \n[nl] \{\ + . doc-setup-header +. bp +. \} .. . . @@ -379,6 +387,7 @@ .\" NS .\" NS modifies: .\" NS doc-operating-system +.\" NS doc-command-name .\" NS .\" NS local variables: .\" NS doc-operating-system-XXX-XXX @@ -431,10 +440,18 @@ .ds doc-operating-system-NetBSD-1.6 1.6 .ds doc-operating-system-NetBSD-1.6.1 1.6.1 .ds doc-operating-system-NetBSD-1.6.2 1.6.2 +.ds doc-operating-system-NetBSD-1.6.3 1.6.3 .ds doc-operating-system-NetBSD-2.0 2.0 .ds doc-operating-system-NetBSD-2.0.1 2.0.1 .ds doc-operating-system-NetBSD-2.0.2 2.0.2 +.ds doc-operating-system-NetBSD-2.0.3 2.0.3 .ds doc-operating-system-NetBSD-2.1 2.1 +.ds doc-operating-system-NetBSD-3.0 3.0 +.ds doc-operating-system-NetBSD-3.0.1 3.0.1 +.ds doc-operating-system-NetBSD-3.0.2 3.0.2 +.ds doc-operating-system-NetBSD-3.1 3.1 +.ds doc-operating-system-NetBSD-4.0 4.0 +.ds doc-operating-system-NetBSD-4.0.1 4.0.1 . .ds doc-operating-system-FreeBSD-1.0 1.0 .ds doc-operating-system-FreeBSD-1.1 1.1 @@ -472,13 +489,59 @@ .ds doc-operating-system-FreeBSD-4.8 4.8 .ds doc-operating-system-FreeBSD-4.9 4.9 .ds doc-operating-system-FreeBSD-4.10 4.10 +.ds doc-operating-system-FreeBSD-4.11 4.11 .ds doc-operating-system-FreeBSD-5.0 5.0 .ds doc-operating-system-FreeBSD-5.1 5.1 .ds doc-operating-system-FreeBSD-5.2 5.2 .ds doc-operating-system-FreeBSD-5.2.1 5.2.1 .ds doc-operating-system-FreeBSD-5.3 5.3 +.ds doc-operating-system-FreeBSD-5.4 5.4 +.ds doc-operating-system-FreeBSD-5.5 5.5 +.ds doc-operating-system-FreeBSD-6.0 6.0 +.ds doc-operating-system-FreeBSD-6.1 6.1 +.ds doc-operating-system-FreeBSD-6.2 6.2 +.ds doc-operating-system-FreeBSD-6.3 6.3 +.ds doc-operating-system-FreeBSD-6.4 6.4 +.ds doc-operating-system-FreeBSD-7.0 7.0 +.ds doc-operating-system-FreeBSD-7.1 7.1 +. +.ds doc-operating-system-Darwin-8.0.0 8.0.0 +.ds doc-operating-system-Darwin-8.1.0 8.1.0 +.ds doc-operating-system-Darwin-8.2.0 8.2.0 +.ds doc-operating-system-Darwin-8.3.0 8.3.0 +.ds doc-operating-system-Darwin-8.4.0 8.4.0 +.ds doc-operating-system-Darwin-8.5.0 8.5.0 +.ds doc-operating-system-Darwin-8.6.0 8.6.0 +.ds doc-operating-system-Darwin-8.7.0 8.7.0 +.ds doc-operating-system-Darwin-8.8.0 8.8.0 +.ds doc-operating-system-Darwin-8.9.0 8.9.0 +.ds doc-operating-system-Darwin-8.10.0 8.10.0 +.ds doc-operating-system-Darwin-8.11.0 8.11.0 +.ds doc-operating-system-Darwin-9.0.0 9.0.0 +.ds doc-operating-system-Darwin-9.1.0 9.1.0 +.ds doc-operating-system-Darwin-9.2.0 9.2.0 +.ds doc-operating-system-Darwin-9.3.0 9.3.0 +.ds doc-operating-system-Darwin-9.4.0 9.4.0 +.ds doc-operating-system-Darwin-9.5.0 9.5.0 +.ds doc-operating-system-Darwin-9.6.0 9.6.0 +. +.ds doc-operating-system-DragonFly-1.0 1.0 +.ds doc-operating-system-DragonFly-1.1 1.1 +.ds doc-operating-system-DragonFly-1.2 1.2 +.ds doc-operating-system-DragonFly-1.3 1.3 +.ds doc-operating-system-DragonFly-1.4 1.4 +.ds doc-operating-system-DragonFly-1.5 1.5 +.ds doc-operating-system-DragonFly-1.6 1.6 +.ds doc-operating-system-DragonFly-1.8 1.8 +.ds doc-operating-system-DragonFly-1.8.1 1.8.1 +.ds doc-operating-system-DragonFly-1.10 1.10 +.ds doc-operating-system-DragonFly-1.12 1.12 +.ds doc-operating-system-DragonFly-1.12.2 1.12.2 +.ds doc-operating-system-DragonFly-2.0 2.0 . .de Os +. ds doc-command-name +. . ie "\$1"" \ . ds doc-operating-system "\*[doc-default-operating-system] . el \{ .ie "\$1"ATT" \{\ @@ -512,11 +575,19 @@ . el \ . tm mdoc warning: .Os: Unknown NetBSD version `\$2' (#\n[.c]) . \}\} +. el \{ .ie "\$1"Darwin" \{\ +. ds doc-operating-system Darwin +. if \A\$2 \{\ +. ie d doc-operating-system-Darwin-\$2 \ +. as doc-operating-system \~\*[doc-operating-system-Darwin-\$2] +. el \ +. tm mdoc warning: .Os: Unknown Darwin version `\$2' (#\n[.c]) +. \}\} . el \{\ . ds doc-operating-system \$1 . if !"\$2"" \ . as doc-operating-system " \$2 -. \}\}\}\}\} +. \}\}\}\}\}\} .. . . @@ -531,6 +602,7 @@ .\" NS .\" NS modifies: .\" NS doc-date-string +.\" NS doc-command-name .\" NS .\" NS local variables: .\" NS doc-date-XXX @@ -551,6 +623,8 @@ .ds doc-date-12 December . .de Dd +. ds doc-command-name +. . ie \n[.$] \{\ . ie (\n[.$] == 3) \ . ds doc-date-string \$1\~\$2 \$3 diff --git a/contrib/groff/tmac/doc-old.tmac b/contrib/groff/tmac/doc-old.tmac index b91fabf47d..70eb4f5e24 100644 --- a/contrib/groff/tmac/doc-old.tmac +++ b/contrib/groff/tmac/doc-old.tmac @@ -40,7 +40,7 @@ .ds aD \fI .\" Argument Reference Style .ds aR \f(CO -.\" Interactive Comand Modifier (flag) +.\" Interactive Command Modifier (flag) .ds cM \f(CB .\" Emphasis (in the English sense - usually italics) .ds eM \fI diff --git a/contrib/groff/tmac/doc-syms b/contrib/groff/tmac/doc-syms index 4182a087fe..7e96a65dd9 100644 --- a/contrib/groff/tmac/doc-syms +++ b/contrib/groff/tmac/doc-syms @@ -204,13 +204,13 @@ .as doc-str-At-v7 " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At] .ds doc-str-At-V \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V .as doc-str-At-V " \*[doc-Tn-font-size]UNIX\*[doc-str-At] -.ds doc-str-At-V.1 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V.1 +.ds doc-str-At-V.1 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~1 .as doc-str-At-V.1 " \*[doc-Tn-font-size]UNIX\*[doc-str-At] -.ds doc-str-At-V.2 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V.2 +.ds doc-str-At-V.2 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~2 .as doc-str-At-V.2 " \*[doc-Tn-font-size]UNIX\*[doc-str-At] -.ds doc-str-At-V.3 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V.3 +.ds doc-str-At-V.3 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~3 .as doc-str-At-V.3 " \*[doc-Tn-font-size]UNIX\*[doc-str-At] -.ds doc-str-At-V.4 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V.4 +.ds doc-str-At-V.4 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~4 .as doc-str-At-V.4 " \*[doc-Tn-font-size]UNIX\*[doc-str-At] . .de At @@ -260,6 +260,70 @@ .. . . +.\" NS Dx user macro +.\" NS print DragonFly +.\" NS +.\" NS modifies: +.\" NS doc-arg-ptr +.\" NS doc-curr-font +.\" NS doc-curr-size +.\" NS doc-macro-name +.\" NS +.\" NS local variable: +.\" NS doc-str-Dx +.\" NS doc-str-Dx1 +.\" NS +.\" NS width register `Dx' defined in doc-common +. +.\" we use the doc-operating-system-DragonFly-* strings defined in doc-common +. +.de Dx +. nr doc-curr-font \n[.f] +. nr doc-curr-size \n[.ps] +. ds doc-str-Dx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u] +. +. \" default value if no argument +. ds doc-str-Dx1 \*[doc-Tn-font-size]\%DragonFly\*[doc-str-Dx] +. +. if !\n[doc-arg-limit] \ +. if \n[.$] \{\ +. ds doc-macro-name Dx +. doc-parse-args \$@ +. \} +. +. if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\ +. nr doc-arg-ptr +1 +. ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\ +. ie \A\*[doc-arg\n[doc-arg-ptr]] \{\ +. ie d doc-operating-system-DragonFly-\*[doc-arg\n[doc-arg-ptr]] \ +. as doc-str-Dx1 \~\*[doc-operating-system-DragonFly-\*[doc-arg\n[doc-arg-ptr]]] +. el \{\ +. tmc mdoc warning: .Dx: Unknown DragonFly version +. tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c]) +. as doc-str-Dx1 \~\*[doc-arg\n[doc-arg-ptr]] +. \}\} +. el \ +. as doc-str-Dx1 \~\*[doc-arg\n[doc-arg-ptr]] +. \} +. el \ +. nr doc-arg-ptr -1 +. \} +. +. \" replace current argument with result +. ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Dx1] +. nr doc-type\n[doc-arg-ptr] 2 +. ds doc-space\n[doc-arg-ptr] "\*[doc-space] +. +. \" recompute space vector for remaining arguments +. nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr]) +. nr doc-arg-limit \n[doc-arg-ptr] +. if \n[doc-num-args] \ +. doc-parse-space-vector +. +. doc-print-recursive +.. +. +. .\" NS Fx user macro .\" NS print FreeBSD .\" NS @@ -543,6 +607,12 @@ .als doc-str-St--isoC-90 doc-str-St--isoC .ds doc-str-St--isoC-99 \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899:1999 .as doc-str-St--isoC-99 " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^99\*[doc-str-St]\*[Rq]) +.ds doc-str-St--isoC-amd1 \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899/AMD1:1995 +.as doc-str-St--isoC-amd1 " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St], Amendment 1\*[Rq]) +.ds doc-str-St--isoC-tcor1 \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899/TCOR1:1994 +.as doc-str-St--isoC-tcor1 " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St], Technical Corrigendum 1\*[Rq]) +.ds doc-str-St--isoC-tcor2 \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899/TCOR2:1995 +.as doc-str-St--isoC-tcor2 " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St], Technical Corrigendum 2\*[Rq]) . .\" POSIX Part 1: System API .ds doc-str-St--p1003.1 \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1 @@ -581,6 +651,8 @@ .\" X/Open .ds doc-str-St--susv2 Version\~2 of the Single \*[doc-Tn-font-size]UNIX\*[doc-str-St] Specification .as doc-str-St--susv2 " (\*[Lq]\*[doc-Tn-font-size]SUSv2\*[doc-str-St]\*[Rq]) +.ds doc-str-St--susv3 Version\~3 of the Single \*[doc-Tn-font-size]UNIX\*[doc-str-St] Specification +.as doc-str-St--susv3 " (\*[Lq]\*[doc-Tn-font-size]SUSv3\*[doc-str-St]\*[Rq]) .ds doc-str-St--svid4 System\~V Interface Definition, Fourth Edition .as doc-str-St--svid4 " (\*[Lq]\*[doc-Tn-font-size]SVID\*[doc-str-St]\^4\*[Rq]) .ds doc-str-St--xbd5 \*[doc-Tn-font-size]X/Open\*[doc-str-St] System Interface Definitions Issue\~5 @@ -604,6 +676,8 @@ . .\" Miscellaneous .ds doc-str-St--ieee754 \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 754-1985 +.ds doc-str-St--ieee1275-94 \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1275-1994 +.as doc-str-St--ieee1275-94 " (\*[Lq]\*[doc-Tn-font-size]Open Firmware\*[doc-str-St]\*[Rq]) .ds doc-str-St--iso8802-3 \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 8802-3:1989 . .de St diff --git a/contrib/groff/tmac/doc.tmac b/contrib/groff/tmac/doc.tmac index 083b13a055..3fde369a0b 100644 --- a/contrib/groff/tmac/doc.tmac +++ b/contrib/groff/tmac/doc.tmac @@ -356,10 +356,10 @@ . ds doc-macro-name Fl . doc-parse-args \$@ . -. if !\n[.$] \{\ -. \" no arguments +. \" no arguments +. if !\n[.$] \ . nop \|\-\|\f[]\s[0] -. \}\} +. \} . . if !\n[doc-arg-limit] \ . return @@ -481,8 +481,8 @@ . el \{\ . nr doc-reg-dpr \n[doc-arg-ptr] . +. \" the `\%' prevents hyphenation on a dash (`-') . ie (\n[doc-reg-dpr1] == 2) \ -. \" the `\%' prevents hyphenation on a dash (`-') . nop \%\*[doc-str-dpr]\&\c . el \{\ . \" punctuation character @@ -595,10 +595,10 @@ . ds doc-macro-name Ar . doc-parse-args \$@ . -. if !\n[.$] \{\ -. \" no argument +. \" no argument +. if !\n[.$] \ . nop \)\*[doc-str-Ar-default]\&\f[]\s[0] -. \}\} +. \} . . if !\n[doc-arg-limit] \ . return @@ -1034,10 +1034,10 @@ . ds doc-macro-name Pa . doc-parse-args \$@ . -. if !\n[.$] \{\ -. \" default value +. \" default value +. if !\n[.$] \ . nop \*[doc-Pa-font]~\f[]\s[0] -. \}\} +. \} . . if !\n[doc-arg-limit] \ . return @@ -6425,6 +6425,19 @@ .blm doc-empty-line . . +.\" For UTF-8, map some characters conservatively for the sake +.\" of easy cut and paste. +. +.if '\*[.T]'utf8' \{\ +. rchar \- - ' ` +. +. char \- \N'45' +. char - \N'45' +. char ' \N'39' +. char ` \N'96' +.\} +. +. .ec . . diff --git a/contrib/groff/tmac/dvi.tmac b/contrib/groff/tmac/dvi.tmac index ff5a2a27ab..a223b106a5 100644 --- a/contrib/groff/tmac/dvi.tmac +++ b/contrib/groff/tmac/dvi.tmac @@ -779,9 +779,6 @@ D\v'-.33m'\s0\v'.33m' . .cp \n(_C . -.if !\n(.C \ -. mso pspic.tmac -. .do ie '\[char97]'a' \ . do mso latin1.tmac .el \ diff --git a/contrib/groff/tmac/e.tmac b/contrib/groff/tmac/e.tmac index 5c685e8b8f..88339949ab 100644 --- a/contrib/groff/tmac/e.tmac +++ b/contrib/groff/tmac/e.tmac @@ -39,18 +39,57 @@ .\" to provide variant functions. .\" --- an internal macro. .\" +. +.do nr need_eo_h 0 +.do nr need_eo_tl 0 +.do nr need_tl 1 +. +.do mso devtag.tmac +. .if !\n(.g .ig .de @R \" --- initialize number register to 0, if undefined .if !r\\$1 .nr \\$1 0 .. +. +.\" --- check whether grohtml needs end of title/heading +.de @html_check_need_title +.do if (\\n[need_eo_tl] == 1) \ +\{\ +. do nr need_eo_tl 0 +. do DEVTAG-EO-TL +.\} +.do if (\\n[need_tl] == 1) \ +\{\ +. do DEVTAG-TL +. do nr need_tl 0 +. do nr need_eo_tl 1 +.\} +.do if \\n[need_eo_h]>0 .do DEVTAG-EO-H +.do nr need_eo_h 0 +.. +. +.de @check_need_title +.. +. +.ie '\*(.T'html' \ +. do als check_need_title @html_check_need_title +.el \ +. do als check_need_title @check_need_title +. .@R pf .if \n(pf .nx +. .if !\n(.g .ig .de @S \" --- initialize string/macro to empty, if undefined .if !d\\$1 .ds \\$1 \" empty .. +. .@R @\" \" debugging level +. +. .\" *** INTERNAL GP MACROS *** +. +. .de @C \" --- change ev's, taking info with us .nr _S \\n(.s .nr _V \\n(.v @@ -75,6 +114,7 @@ .ls 1 'ce 0 .. +. .de @D \" --- determine display type (Indent, Left, Center) .ds |p "\\$3 .nr _d 0 @@ -86,11 +126,14 @@ . nr _d 3 .if "\\$2"M" \ . nr _d 4 -.if !\\n(_d \{\ +.if !\\n(_d \ +\{\ . nr _d \\$1 . ds |p "\\$2 .\} +. .. +. .de @z \" --- end macro .if \n@>1 .tm >> @z, .z=\\n(.z ?a=\\n(?a .if !"\\n(.z"" \ @@ -106,9 +149,14 @@ .br .if \n@>1 .tm << @z .. +. +. .\" *** STANDARD HEADERS AND FOOTERS *** +. +. .ie \n(.g .ds $* \\\\$* .el .ds $* \\\\$1 \\\\$2 \\\\$3 \\\\$4 \\\\$5 \\\\$6 \\\\$7 \\\\$8 \\\\$9 +. .de he \" *** define header .ie !\\n(.$ \ \{\ @@ -121,18 +169,21 @@ . ds |5 "\*($* .\} .. +. .de eh \" *** define even header .ie !\\n(.$ \ . rm |4 .el \ . ds |4 "\*($* .. +. .de oh \" *** define odd header .ie !\\n(.$ \ . rm |5 .el \ . ds |5 "\*($* .. +. .de fo \" *** define footer .ie !\\n(.$ \ \{\ @@ -145,18 +196,21 @@ . ds |7 "\*($* .\} .. +. .de ef \" *** define even foot .ie !\\n(.$ \ . rm |6 .el \ . ds |6 "\*($* .. +. .de of \" *** define odd footer .ie !\\n(.$ \ . rm |7 .el \ . ds |7 "\*($* .. +. .de ep \" *** end page (must always be followed by a .bp) .if \\n(nl>0 \ \{\ @@ -165,7 +219,11 @@ . @b .\} .. +. +. .\" *** INTERNAL HEADER AND FOOTER MACROS *** +. +. .de @h \" --- header .if \n@>1 .tm >> @h %=\\n% ?a=\\n(?a ?b=\\n(?b ?w=\\n(?w .if (\\n(.i+\\n(.o)>=\\n(.l \ @@ -186,11 +244,13 @@ .ev 2 .rs .if \\n(hm>0 \ -. sp |\\n(hmu \" move to header position +. if !'\*(.T'html' \ +. sp |\\n(hmu \" move to header position .@t $h\" \" output header title .if \\n(tm<=0 \ . nr tm \n(.Vu -.sp |\\n(tmu \" move to top of text +.if !'\*(.T'html' \ +. sp |\\n(tmu \" move to top of text .ev .mk _k \" for columned output .if \\n(?n .nm 1 \" restore line numbering if n1 mode @@ -206,6 +266,7 @@ . @n\" \" begin the column .if \n@>2 .tm << @h .. +. .de @n \" --- new column or page .if \n@>3 .tm >> @n nl=\\n(nl %=\\n% ?f=\\n(?f ?o=\\n(?o .if \\n(bm<=0 \ @@ -255,6 +316,7 @@ .$H\" \" special column header macro .ns .. +. .de @f \" --- footer .if \n@>1 .tm >> @f %=\\n% nl=\\n(nl ?a=\\n(?a ?b=\\n(?b ?f=\\n(?f .if \n@>2 .nr VL \\n(.pu-\\n(nlu @@ -282,6 +344,7 @@ .ev .if \n@>2 .tm << @f .. +. .de @o \" --- output footnote .nf .ls 1 @@ -305,6 +368,7 @@ .rm |f .ch @r .. +. .de @c \" --- new column .if \n@>2 .tm >> @c %=\\n% .rs @@ -313,6 +377,7 @@ .nr $c +1 .@n .. +. .de @e \" --- end page .if \n@>2 .tm >> @e .@O \\n(_ou @@ -322,6 +387,7 @@ .nr ?h 0 .bp .. +. .de @t \" --- output header or footer title .if !\\n(?h \ \{\ @@ -333,6 +399,7 @@ . br .\} .. +. .de $h \" $$$ print header .ds |z .if !\\n(?c \ @@ -344,6 +411,7 @@ ' tl \\*(|z .rm |z .. +. .de $f \" $$$ print footer .ds |z .if \\n(?c \ @@ -360,6 +428,7 @@ ' tl \\*(|z .rm |z .. +. .de @r \" --- reprocess overflow footnotes .if \n@>3 .tm >> @r .z=\\n(.z ?f=\\n(?f ?a=\\n(?a ?b=\\n(?b _b=\\n(_b .di |o \" save overflow footnote @@ -367,8 +436,13 @@ .nr _D \\n(dn .ns .. +. +. .\" *** COMMANDS WITH VARIANT DEFINITIONS *** -.rn bp @b \" --- begin page +. +. +.if !'\*(.T'html' .rn bp @b \" --- begin page +. .de bp \" *** begin new page (overrides columns) .nr $c \\n($m \" force new page, not new column .ie \\n(nl>0 \ @@ -383,6 +457,7 @@ .br .wh 0 @h \" reset header .. +. .rn ll xl \" *** special line length (local) .de ll \" *** line length (global to environments) .xl \\$1 @@ -391,11 +466,14 @@ .if (\\n($m<=1):(\\n($l>\\n(_L) \ . nr _L \\n(.l .. +. .rn po @O \" --- local page offset +. .de po \" *** page offset .@O \\$1 .nr _o \\n(.o .. +. .\" Redefine the fam request to set the family in .\" environment 2 as well as the current environment. .if !\n(.g .ig @@ -406,24 +484,32 @@ .do @fam \\$1 .ev .. +. +. .\" *** MISCELLANEOUS ROFF COMMANDS *** +. +. .de hx \" *** suppress headers and footers next page .nr ?H 1 .. +. .de ix \" *** indent, no break 'in \\$1 .. +. .de bl \" *** contiguous blank lines .br .ne \\$1 .rs .sp \\$1 .. +. .de n1 \" *** line numbering 1 .nm 1 .xl -\w'0000'u .nr ?n 1 .. +. .de n2 \" *** line numbering 2 .nm \\$1 .ie \\n(.$ \ @@ -431,69 +517,95 @@ .el \ . xl \\n($lu .. +. .de pa \" *** new page .bp \\$1 .. +. .de ro \" *** roman page numbers .af % i .. +. .de ar \" *** arabic page numbers .af % 1 .. +. .de m1 \" *** position one space .nr _0 \\n(hmu .nr hm \\$1v .nr tm +\\n(hmu-\\n(_0u .rr _0 .. +. .de m2 \" *** position two space .nr tm \\n(hmu+\\n(tpp+\\$1v .. +. .de m3 \" *** position three space .nr bm \\n(fmu+\\n(tpp+\\$1v .. +. .de m4 \" *** position four space .nr _0 \\n(fmu .nr fm \\$1v .nr bm +\\n(fmu-\\n(_0u .. +. .de sk \" *** leave a blank page (next page) .if \\n(.$>0 \ . tm Line \\n(c. -- I cannot skip multiple pages .nr ?s 1 .. +. +. .\" *** MISCELLANEOUS USER SUPPORT COMMANDS *** +. +. .if !\n(.g .ig .de re \" *** reset tabs (TROFF defines 15 stops default) .ta T 0.5i .. +. .if \n(.g .ig .de re .ta 0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i .. +. .de ba \" *** set base indent .ie \\n(.$ \ . nr $i \\$1n .el \ . nr $i \\n(siu*\\n($0u .. +. .de hl \" *** draw horizontal line .br +.if '\*(.T'html' \ +\{\ +. HR +. do return +.\} .ie \n(.g .do nr _I \\n[.in] .el .nr _I \\n(.i \l'\\n(.lu-\\n(_Iu' .sp .. +. +. .\" *** PARAGRAPHING *** +. +. .de pp \" *** paragraph .lp \\n(piu .. +. .de lp \" *** left aligned paragraph .@p .if \\n(.$ \ . ti +\\$1 .nr $p 0 1 .. +. .de ip \" *** indented paragraph w/ optional tag .if (\\n(ii>0)&(\\n(ii<1n) \ . nr ii \\n(iin @@ -509,19 +621,28 @@ .di .in \\n(_Iu .ds |j \\*(|i\\ -.if \\w"\\*(|j" \ +.ie \\w"\\*(|j" \ \{\ . ti -\\n(_0u . ie \\w"\\*(|j">=\\n(_0 \ \{\ +. do DEVTAG-COL 1 \\*(|j +. do DEVTAG-COL-NEXT 2 . br . \} -. el \\*(|j\h'|\\n(_0u'\c +. el \ +\{\ +. do DEVTAG-COL 1 +\\*(|j\h'|\\n(_0u'\c +. do DEVTAG-COL 2 +. \} .\} +.el .do DEVTAG-COL 2 .rr _0 .rm |i |j .. +. .de np \" *** numbered paragraph .\" use string comparison in case user has changed format of $p .if '\\n($p'-1' \ @@ -531,6 +652,7 @@ .ti -\w'\0(000)\0'u \0(\\n($p)\h'|\w'\0(000)\0'u'\c .. +. .de bu \" *** bulleted paragraph .br .\" use string comparison in case user has changed format of $p @@ -541,7 +663,9 @@ .ti -\w'\0\(bu\0'u \0\(bu\0\c .. +. .de @p \" --- initialize for paragraph +.do check_need_title .if "\\n(.z"|e" .tm Line \\n(c. -- Unmatched continued equation .in \\n($iu+\\n(pou .if \\n(.$ \ @@ -554,12 +678,23 @@ .ne \\n(.Lv+\\n(.Vu .ns .. +. +. .\" *** SECTION HEADINGS *** +. +. .de sh \" *** section heading .fi +.do check_need_title .if (\\n(si>0)&(\\n(si<1n) \ . nr si \\n(sin +.if '\*(.T'html' .nr si 0 .ce 0 +.if '\*(.T'html' \ +\{\ +. do DEVTAG-SH \\$1 +. do nr need_eo_h 1 +.\} .@d "\\$1" +1 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 .if !"\\$2"_" \ \{\ @@ -570,6 +705,7 @@ .\} .nr $p 0 1 \" reset .np count .. +. .de @d \" --- change section depth .if !""\\$1" \ . nr $0 \\$1 @@ -637,6 +773,7 @@ .el \ . nr $6 0 .. +. .de sx \" *** heading up, no increment (2.1.1 -> 2.1) .ce 0 .ul 0 @@ -648,10 +785,12 @@ .$p "" "" \\n($0 .nr $p 0 1 \" reset .np count .. +. .de uh \" *** unnumbered section heading .$p "\\$1" .$0 "\\$1" .. +. .de $p \" $$$ print section heading .if (\\n(si>0)&(\\n(.$>2) \ . nr $i \\$3*\\n(si @@ -677,7 +816,11 @@ .@F \\n(pf .sz \\n(pp .. +. +. .\" *** COLUMNNED OUTPUT *** +. +. .de 2c \" *** double columned output .br .if \\n($m>1 \ @@ -693,6 +836,7 @@ .mk _k .ns .. +. .de 1c \" *** single columned output .br .nr $c 1 @@ -701,15 +845,21 @@ .sp |\\n(.hu .@O \\n(_ou .. +. .de bc \" *** begin column .sp 24i .. +. +. .\" *** FLOATING TABLES AND NONFLOATING BLOCKS *** +. +. .de (z \" *** begin floating keep .if \n@>4 .tm >> (z, .z=\n(.z .@D 4 \\$1 \\$2 .@( .. +. .de )z \" *** end floating keep .if \n@>4 .tm >> )z, .z=\n(.z .sp \\n(zsu @@ -756,6 +906,7 @@ .ev .if \n@>4 .tm << )z, .z=\\n(.z .. +. .de @k \" --- output floating keep .if \n@>4 .tm >> @k, $1=\\$1, .z=\\n(.z .ev 1 @@ -769,18 +920,23 @@ .rm \\$1 .ev .. +. .de (t \" XXX temp ref to (z .(z \\$1 \\$2 .. +. .de )t \" XXX temp ref to )t .)z \\$1 \\$2 .. +. .de (b \" *** begin block .br .@D 3 \\$1 \\$2 .sp \\n(bsu .@( +.if '\*(.T'html' .sp \\n(bsu .. +. .de )b \" *** end block .br .@) @@ -797,12 +953,14 @@ .rm |k .sp \\n(bsu+\\n(.Lv-1v .. +. .de @( \" --- begin keep .if !"\\n(.z"" .tm Line \\n(c. -- Invalid nested keep \\n(.z .@M .di |k \!'rs .. +. .de @M \" --- set modes for display .nr ?k 1 .@C 1 @@ -822,6 +980,7 @@ .if \\n(_d=1 \ . ce 10000 .. +. .de @) \" --- end keep .br .if !"\\n(.z"|k" .tm Line \\n(c. -- Close of a keep which has never been opened @@ -830,10 +989,12 @@ .in 0 .ce 0 .. +. .de (c \" *** begin block centered text .if "\\n(.z"|c" .tm Line \\n(c. -- Nested .(c requests .di |c .. +. .de )c \" *** end block centered text .if !"\\n(.z"|c" .tm Line \\n(c. -- Unmatched .)c .br \" force out final line @@ -851,7 +1012,11 @@ .ev .rm |c .. +. +. .\" *** BLOCK QUOTES (OR WHATEVER) AND LISTS *** +. +. .de (q \" *** begin block quote .br .@C 1 @@ -861,30 +1026,46 @@ .xl -\\n(qiu .sz \\n(qp .. +. .de )q \" *** end block quote .br .ev .sp \\n(qsu+\\n(.Lv-1v .nr ?k 0 .. +. .de (l \" *** begin list .br .sp \\n(bsu .@D 3 \\$1 \\$2 .@M +.if '\*(.T'html' .sp \\n(bsu .. +. .de )l \" *** end list .br .ev .sp \\n(bsu+\\n(.Lv-1v .nr ?k 0 .. +. +. .\" *** PREPROCESSOR SUPPORT *** +. +. .\" .\" EQN .\" .de EQ \" *** equation start +.do if \\n[need_eo_h]>0 .do DEVTAG-EO-H +.do nr need_eo_h 0 .ec +.if "\*(.T"html" \ +\{\ +. do nr e-EQ-ll \\n(.l +. ll 1000n +.\} +.do HTML-IMAGE .if !\\n(?e \ \{\ . if "\\n(.z"|e" .tm Line \\n(c. -- Nested .EQ request @@ -896,8 +1077,12 @@ .in 0 .nf .. +. .de EN \" *** equation end .br +.do HTML-IMAGE-END +.if "\*(.T"html" \ +. do ll \\n[e-EQ-ll]u .ie "\\$1"C" \ \{\ . nr ?e 1 @@ -913,6 +1098,7 @@ . ev .\} .. +. .de @q \" --- equation output .nr _Q \\n(dnu .ev @@ -943,11 +1129,18 @@ .rr _q .rr _Q .. +. .\" .\" TBL .\" .de TS \" *** table start .sp \\n(bsu +.if "\*(.T"html" \ +\{\ +. do nr e-TS-ll \\n(.l +. ll 1000n +.\} +.do HTML-IMAGE .@C 1 .fi \" drop into fill mode for text boxes .if "\\$1"H" \ @@ -960,6 +1153,7 @@ .if \\n(.p-\\n(_b-1v<=\\n(nl \ . ch @f \\n(nlu+\n(.Vu .. +. .de TH \" *** end header part of table .nr T. 0 .T# 0 @@ -975,17 +1169,23 @@ .rr _i .mk #T .. +. .de TE \" *** table end .nr ?T 0 .ch @f -\\n(_bu \" reset pseudo-trap .if \\n(.p-\\n(_b<=\\n(nl \ . ch @f \\n(nlu+\n(.Vu .ev +.do HTML-IMAGE-END +.if "\*(.T"html" \ +. do ll \\n[e-TS-ll]u .sp \\n(bsu+\\n(.Lv-1v .re .. +. .de T& .. +. .\" .\" REFER .\" @@ -993,6 +1193,7 @@ .if \\$1>5 .tm Bad arg to [] .[\\$1 .. +. .de [0 \" --- other .(f .ip "\\*([F.\0" @@ -1005,6 +1206,7 @@ .@p .)f .. +. .de [1 \" --- journal article .(f .ip "\\*([F.\0" @@ -1025,6 +1227,7 @@ .if !"\\*([O"" \\*([O .)f .. +. .de [2 \" --- book .(f .ip "\\*([F.\0" @@ -1036,6 +1239,7 @@ .if !"\\*([O"" \\*([O .)f .. +. .de [3 \" --- article in book .(f .ip "\\*([F.\0" @@ -1049,6 +1253,7 @@ in \\f2\\*([B\\f1, \c .if !"\\*([O"" \\*([O .)f .. +. .de [4 \" --- report .(f .ip "\\*([F.\0" @@ -1061,6 +1266,7 @@ in \\f2\\*([B\\f1, \c .if !"\\*([O"" \\*([O .)f .. +. .de [5 \" --- tm style .(f .ip "\\*([F.\0" @@ -1069,17 +1275,21 @@ in \\f2\\*([B\\f1, \c .el Bell Laboratories internal memorandum (\\*([D). .)f .. +. .de ]< .$p References .lp .rm (f )f .. +. .de ]> .sp .. +. .de ]- .rm [V [P [A [T [N [C [B [O [R [I [E [D .. +. .ie \n(.V<1v \ \{\ . ds [. \s-2\v'-.4m'\f1 @@ -1090,6 +1300,7 @@ in \\f2\\*([B\\f1, \c . ds [. " [ . ds .] ] .\} +. .\" .\" IDEAL .\" @@ -1097,65 +1308,94 @@ in \\f2\\*([B\\f1, \c .nr g7 \\n(.u .ls 1 .. +. .de IF .if \\n(g7 .fi .ls .. +. .de IE \" *** end ideal picture .if \\n(g7 .fi .ls .. +. .\" .\" PIC .\" .de PS \" *** start picture: $1=height, $2=width in units or inches .sp 0.3 +.do HTML-IMAGE .nr g7 \\$2 .in (u;\\n(.l-\\n(g7>?0/2) .ne \\$1u .nr g7 \\n(.u .ls 1 .. +. .de PE \" *** end picture .ls .in .if \\n(g7 .fi +.do HTML-IMAGE-END .sp .6 .. +. .\" .\" GREMLIN .\" .de GS \" *** start gremlin picture -.nr g7 (\\n(.lu-\\n(g1u)/2u -.if "\\$1"L" .nr g7 \\n(.iu -.if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u -.in \\n(g7u -.nr g7 \\n(.u -.ls 1 -.nf -.ne \\n(g2u +.ie '\*(.T'html' \ +\{\ +. ie "\\$1"L" .do HTML-IMAGE-LEFT +. el .ie "\\$1"R" .do HTML-IMAGE-RIGHT +. el .do HTML-IMAGE +.\} +.el \ +\{\ +. nr g7 (\\n(.lu-\\n(g1u)/2u +. if "\\$1"L" .nr g7 \\n(.iu +. if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u +. in \\n(g7u +. nr g7 \\n(.u +. ls 1 +. nf +. ne \\n(g2u +.\} .. +. .de GE \" *** end gremlin picture -.GF -.sp .6 +.ie '\*(.T'html' .do HTML-IMAGE-END +.el \ +\{\ +. GF +. sp .6 +.\} .. +. .de GF \" *** finish gremlin picture; stay at top .ls .in .if \\n(g7 .fi .. +. +. .\" *** FONT AIDS *** +. +. .de sz \" *** set point size and vertical spacing .ps \\$1 .if \\n($r .@v .vs \\n(.sp*\\n($vu/100u \" default vs at pointsize + 20% .. +. .de @v \" --- possibly set $v from $r .if (1i>=240u)&(1p<=\\n($r)&(\\n($r<=4p) .nr $v \\n($r00/1p .. +. .de @V \" --- possibly set $V from $R .if (1i>=240u)&(1p<=\\n($R)&(\\n($R<=4p) .nr $V \\n($R00/1p .. +. .de @E \" --- store in _F argument to \f for restoring font .ie \\n(.f<10 \ . ds _F \\n(.f @@ -1167,55 +1407,81 @@ in \\f2\\*([B\\f1, \c . ds _F P .\} .. +. .de r \" *** enter roman font +.do check_need_title .@E .ft 1 .if \\n(.$ \&\\$1\f\\*(_F\\$2 +.do check_need_title .. +. .de i \" *** enter italic +.do check_need_title .@E .ft 2 .if \\n(.$ \&\\$1\f\\*(_F\\$2 +.do check_need_title .. +. .de b \" *** enter boldface +.do check_need_title .@E .ft 3 .if \\n(.$ \&\\$1\f\\*(_F\\$2 +.do check_need_title .. +. .de rb \" *** enter real boldface +.do check_need_title .@E .ft 3 .if \\n(.$ \&\\$1\f\\*(_F\\$2 +.do check_need_title .. +. .de bi \" *** enter bold italic +.do check_need_title .@E .ft 4 .if \\n(.$ \&\\$1\f\\*(_F\\$2 +.do check_need_title .. +. .de u \" *** enter underlined word \&\\$1\l'|0\(ul'\\$2 .. +. .\" a better version of u .if !\n(.g .ig .de u \Z'\\$1'\v'.25m'\D'l \w'\\$1'u 0'\v'-.25m'\\$2 .. +. .de q \" *** enter quoted word \&\\*(lq\\$1\\*(rq\\$2 .. +. .de bx \" *** enter boxed word -\k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2 +.ie '\*(.T'html' \\$1\\$2 +.el \k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2 .. +. .de sm \" *** print in smaller font \s-1\\$1\\s0\\$2 .. +. .de @F \" --- change font (0 -> no change) .nr ~ \\$1 .if \\n~>0 \ . ft \\n~ .rr ~ .. +. +. .\" *** FOOTNOTING *** +. +. .de (f \" *** begin footnote .ec .if "\\n(.z"|f" .tm Line \\n(c. -- Invalid footnote nesting @@ -1274,10 +1540,12 @@ in \\f2\\*([B\\f1, \c \!.@N .\} .. +. .de @N \" --- set no fill mode in the top-level diversion .ie "\\n(.z"" .nf .el \!.@N .. +. .de )f \" *** end footnote .ie "\\n(.z"|f" \ \{\ @@ -1304,35 +1572,49 @@ in \\f2\\*([B\\f1, \c . ev .\} .. +. .@R ff .if \n(ff<=0 \ . nr ff 1 \" footnote font: Times Roman .@R fp .if \n(fp<=0 \ . nr fp 8 \" footnote pointsize +. .de $s \" $$$ footnote separator \l'2i' .. +. +. .\" *** DELAYED TEXT *** +. +. .de (d \" *** begin delayed text .am |d )d .sp \\n(bsu .. +. .de )d \" *** end delayed text .if \\n# \ . nr $d +1 .ds # [\\n($d]\k# .rr # .. +. .de pd \" *** print delayed text .|d .rm |d .nr $d 1 1 .ds # [1]\k# .. +. +. .\" *** INDEXES (TABLE OF CONTENTS) *** +. +. .nr _x 0 1 +.do nr _xn 0 .af _x a +. .de (x \" *** begin index entry .if \n@>4 .tm >> (x, .z=\\n(.z .ds |X x @@ -1344,15 +1626,18 @@ in \\f2\\*([B\\f1, \c . nr _z 1 .@\\n(_z .. +. .de @0 \" --- finish (x if no current diversion .am %\\*(|X )x .sp \\n(xsu .ti -\\n(piu .. +. .de @1 \" --- finish (x if current diversion .if "\\n(_x"z" .nr _x 0 .de =\\n+(_x )x .. +. .de )x \" *** end index entry .if \n@>4 .tm >> )x, .z=\\n(.z .ie "\\n(.z"" \ @@ -1378,6 +1663,7 @@ in \\f2\\*([B\\f1, \c \!.rm =\\n(_x .\} .. +. .de xp \" *** print the index .br .@C 2 @@ -1405,7 +1691,72 @@ in \\f2\\*([B\\f1, \c .in .rm |x .. -.de +c \" *** begin chapter +. +. +.\" *** HTML VERSIONS OF .x(, .x), AND .xp *** +. +. +.de (x-html \" --- create TAG and divert text +.nr _x +1 +.do nr _xn +1 +.do TAG "_x\\n[_x] +.br +.do di |x\\n[_xn] +.br +.. +. +.de )x-html \" --- end diversion +.br +.di +.. +. +.de xp-html \" --- create list of links +.do nr _xx 1 +.br +.do ev xp-html-ev +.sp +.do ULS +.do while \\n[_xx]<=\\n[_xn] \ +\{\ +. br +. do unformat |x\\n[_xx] +. do di xp-html-div +. br +. ll 100i +. fi +. do |x\\n[_xx] +. br +. di +. do asciify xp-html-div +. do rm xp-html-as +. do as xp-html-as # +. do as xp-html-as _x\\n[_xx] +. ll +. LI +. do URL \\*[xp-html-as] "\\*[xp-html-div] +. do rm xp-html-as +. do nr _xx +1 +.\} +.do ULE +.sp +.ev +.. +. +.if '\*(.T'html' \ +\{\ +. rm (x +. do als (x (x-html +. rm )x +. do als )x )x-html +. rm xp +. do als xp xp-html +.\} +. +. +.\" *** CHAPTERS AND TITLES *** +. +. +.de +c \" *** begin chapter .ep\" \" force out footnotes .if \\n(?o:\\n(?a \ \{\ @@ -1426,6 +1777,7 @@ in \\f2\\*([B\\f1, \c .el \ . sp 3 .. +. .de ++ \" *** declare chapter type .nr _0 0 .if "\\$1"C" \ @@ -1477,6 +1829,7 @@ in \\f2\\*([B\\f1, \c .nr _M \\n(_0 .rr _0 .. +. .de $c \" $$$ print chapter title .sz 12 .ft 3 @@ -1497,6 +1850,7 @@ in \\f2\\*([B\\f1, \c .el .if \\n(_M=2 \ . $C Appendix \\n(ch "\\$1" .. +. .de tp \" *** title page .hx .bp @@ -1504,6 +1858,7 @@ in \\f2\\*([B\\f1, \c .rs .pn \\n% .. +. .\" *** DATES *** .if \n(mo=1 .ds mo January .if \n(mo=2 .ds mo February @@ -1528,7 +1883,11 @@ in \\f2\\*([B\\f1, \c .af y2 00 .nr y4 \n(yr+1900 .ds td \*(mo \n(dy, \n(y4 +. +. .\" *** PARAMETRIC INITIALIZATIONS *** +. +. .rr x .nr $v \n(.v00+\n(.sp-1/\n(.sp \" vs as percentage of ps for .sz request .nr $V \n($v \" same for displays & footnotes @@ -1552,7 +1911,11 @@ in \\f2\\*([B\\f1, \c .nr sp 10 \" section title pointsize .nr ss 12p \" section prespacing .nr si 0 \" section indent +. +. .\" *** OTHER INITIALIZATION *** +. +. .\" GNU pic sets this register to 1, to indicate that \x should not be used. .@R 0x .ds { \v'-0.4m'\x'\\n(0x=0*-0.2m'\s-3 @@ -1581,6 +1944,7 @@ in \\f2\\*([B\\f1, \c .@S $8 .@S $9 .@S .. +. .@R po\" \" simulated page offset .@R $0\" \" section depth .@R $i\" \" paragraph base indent @@ -1605,6 +1969,7 @@ in \\f2\\*([B\\f1, \c .@R ?T\" \" inside .TS H? .@R ?W\" \" wide floating keep at page bottom? .@R ?w\" \" wide floating keep at page top? +. .nr fi 0.3i .nr _o \n(.o .nr $b 3 \" bold @@ -1630,37 +1995,53 @@ in \\f2\\*([B\\f1, \c .ds lq \(lq\" \" left quote .ds rq \(rq\" \" right quote .em @z +. +. .\" *** FOREIGN LETTERS AND SPECIAL CHARACTERS *** +. +. .ds #h ((1u-(\\\\n(.fu%2u))*0.13m) .ds #v 0.6m +. .\" \" accents .ds ' \k_\h'-(\\n(.wu*8/10-\*(#h)'\(aa\h'|\\n_u' .ds ` \k_\h'-(\\n(.wu*7/10-\*(#h)'\(ga\h'|\\n_u' +. .\" \" umlaut .ds : \k_\h'-(\\n(.wu*8/10-\*(#h+0.1m)'\v'-\*(#v'\z.\h'0.2m'.\h'|\\n_u'\v'\*(#v' +. .\" \" circumflex and tilde .ds ^ \k_\h'-(\\n(.wu-\*(#h-0.05m)'^\h'|\\n_u' .ds ~ \k_\h'-(\\n(.wu-\*(#h-0.05m)'~\h'|\\n_u' +. .\" \" cedilla and czech .ds , \k_\h'-(\\n(.wu)',\h'|\\n_u' .ds v \k_\h'-(\\n(.wu*9/10-\*(#h)'\v'-\*(#v'\s-4v\s0\v'\*(#v'\h'|\\n_u' +. .\" \" Norwegian A or angstrom .ds o \k_\h'-(\\n(.wu+\w'\(de'u-\*(#h)/2u'\v'-0.4n'\z\(de\v'0.4n'\h'|\\n_u' +. .\" \" there exists, for all .ds qe \s-2\v'0.45m'\z\(em\v'-0.625m'\z\(em\v'-0.625m'\(em\v'0.8m'\s0\h'-0.1m'\v'-0.05m'\(br\v'0.05m'\h'0.1m' .ds qa \z\e\h'0.35m'\z\(sl\h'-0.33m'\v'-0.3m'\s-4\(em\s0\v'0.3m'\h'0.15m' .rm #h #v .ll 6.0i .lt 6.0i +. .de @U .tm The \\$1 macro has been removed from this version of the -me macros. .. +. .de lo .@U lo .. +. .de th .@U th .. +. .de ac .@U ac .. +. +.\" EOF diff --git a/contrib/groff/tmac/ec.tmac b/contrib/groff/tmac/ec.tmac index 045abd39e9..191b2fa62e 100644 --- a/contrib/groff/tmac/ec.tmac +++ b/contrib/groff/tmac/ec.tmac @@ -30,16 +30,16 @@ .ftr H HREC . .special MI S -.fspecial TREC TRTC -.fspecial TIEC TITC -.fspecial TBEC TBTC -.fspecial TBIEC TBITC -.fspecial HREC HRTC -.fspecial HIEC HITC -.fspecial HBEC HBTC -.fspecial HBIEC HBIEC -.fspecial CWEC CWTC SC -.fspecial CWIEC CWITC SC +.fspecial TREC TRTC TR +.fspecial TIEC TITC TI +.fspecial TBEC TBTC TB +.fspecial TBIEC TBITC TBI +.fspecial HREC HRTC HR +.fspecial HIEC HITC HI +.fspecial HBEC HBTC HB +.fspecial HBIEC HBIEC HBI +.fspecial CWEC CWTC SC CW +.fspecial CWIEC CWITC SC CWI . .\" remove definitions of glyphs which are in TC fonts .rchar \[co] \[rg] diff --git a/contrib/groff/tmac/eqnrc b/contrib/groff/tmac/eqnrc index 874d7356c3..5574e590ee 100644 --- a/contrib/groff/tmac/eqnrc +++ b/contrib/groff/tmac/eqnrc @@ -1,4 +1,6 @@ .\" Startup file for eqn. +.if !d EQ .ds EQ +.if !d EN .ds EN .EQ sdefine << %{ < back 20 < }% sdefine >> %{ > back 20 > }% diff --git a/contrib/groff/tmac/fr.tmac b/contrib/groff/tmac/fr.tmac new file mode 100644 index 0000000000..72208a154a --- /dev/null +++ b/contrib/groff/tmac/fr.tmac @@ -0,0 +1,195 @@ +.\" -*- mode: nroff; coding: iso-latin-9; -*- +.\" +.\" French localization for groff +.\" +.\" Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc. +.\" Written by Fabrice Ménard (menard.fabrice@wanadoo.fr) +.\" +.\" This file is part of groff. +.\" +.\" groff is free software; you can redistribute it and/or modify it under +.\" the terms of the GNU General Public License as published by the Free +.\" Software Foundation, either version 3 of the License, or +.\" (at your option) any later version. +.\" +.\" groff is distributed in the hope that it will be useful, but WITHOUT ANY +.\" WARRANTY; without even the implied warranty of MERCHANTABILITY or +.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +.\" for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program. If not, see . +.\" +.\" Please send comments to menard.fabrice@wanadoo.fr. +. +. +.\" Locale string +. +.ds locale french\" +. +. +.\" Predefined text translations +. +.ds \*[locale]-abstract R\[E ']SUM\[E ']\" +.ds \*[locale]-app ANNEXE\" +.ds \*[locale]-april Avril\" +.ds \*[locale]-attribute_string par\" +.ds \*[locale]-august Ao\[u ^]t\" +.ds \*[locale]-chapter_string Chapitre\" +.ds \*[locale]-december D\[e ']cembre\" +.ds \*[locale]-draft_string Jet\" +.ds \*[locale]-endnote_string NOTES\" +.ds \*[locale]-february F\[e ']vrier\" +.ds \*[locale]-finis_string FIN\" +.ds \*[locale]-friday Vendredi\" +.ds \*[locale]-january Janvier\" +.ds \*[locale]-july Juillet\" +.ds \*[locale]-june Juin\" +.ds \*[locale]-le LISTE DES \[E ']QUATIONS\" +.ds \*[locale]-letapp LU ET APPROUV\[E ']\" +.ds \*[locale]-letat \[A `] L'ATTENTION DE:\" +.ds \*[locale]-letcn CONFIDENTIEL\" +.ds \*[locale]-letdate Date\" +.ds \*[locale]-letfc Veuillez agr\[e ']er, Monsieur, mes salutations distingu\[e ']es.\" +.ds \*[locale]-letns!0 Copie \[a `]\" +.ds \*[locale]-letns!1 Exemplaire (avec destinataire) \[a `]\" +.ds \*[locale]-letns!10 Exemplaire (avec destinataires) \[a `]\" +.ds \*[locale]-letns!11 Exemplaire (sans destinataires) \[a `]\" +.ds \*[locale]-letns!12 R\[e ']sum\[e '] \[a `]\" +.ds \*[locale]-letns!13 Memorandum complet \[a `]\" +.ds \*[locale]-letns!14 Cc:\" +.ds \*[locale]-letns!2 Exemplaire (sans destinataire) \[a `]\" +.ds \*[locale]-letns!3 Destinataire\" +.ds \*[locale]-letns!4 Destinataires\" +.ds \*[locale]-letns!5 Pi\[e `]ce jointe\" +.ds \*[locale]-letns!6 Pi\[e `]ces jointes\" +.ds \*[locale]-letns!7 Sous pli s\[e ']par\[e ']\" +.ds \*[locale]-letns!8 Lettre \[a `]\" +.ds \*[locale]-letns!9 Memorandum \[a `]\" +.ds \*[locale]-letns!copy Copie \" (il faut un espace)\" +.ds \*[locale]-letns!to " \[a `]\" +.ds \*[locale]-letrn En r\[e ']f\[e ']rence \[a `]:\" +.ds \*[locale]-letsa \[A `] la personne concern\[e ']e:\" +.ds \*[locale]-letsj SUJET:\" +.ds \*[locale]-lf LISTE DES ILLUSTRATIONS\" +.ds \*[locale]-licon SOMMAIRE\" +.ds \*[locale]-liec \[E ']quation\" +.ds \*[locale]-liex Document\" +.ds \*[locale]-lifg Illustration\" +.ds \*[locale]-litb Tableau\" +.ds \*[locale]-lt LISTE DES TABLEAUX\" +.ds \*[locale]-lx LISTE DES DOCUMENTS\" +.ds \*[locale]-march Mars\" +.ds \*[locale]-may Mai\" +.ds \*[locale]-monday Lundi\" +.ds \*[locale]-november Novembre\" +.ds \*[locale]-october Octobre\" +.ds \*[locale]-paper A4\" +.ds \*[locale]-qrf Cf. chapitre \\*[Qrfh], page \\*[Qrfp].\" +.ds \*[locale]-references Bibliographie\" +.ds \*[locale]-revision_string R\[e ']v.\" +.ds \*[locale]-rp BIBLIOGRAPHIE\" +.ds \*[locale]-saturday Samedi\" +.ds \*[locale]-september Septembre\" +.ds \*[locale]-sunday Dimanche\" +.ds \*[locale]-thursday Jeudi\" +.ds \*[locale]-toc Table des mati\[e `]res\" +.ds \*[locale]-toc_header_string Table des mati\[e `]res\" +.ds \*[locale]-tuesday Mardi\" +.ds \*[locale]-wednesday Mercredi\" +. +. +.\" Activate the translations +. +.mso trans.tmac +. +. +.\" ms package +.if r GS \{\ +. \" update the date +. ds DY \n[dy] \*[MO] \n[year] +. \" set hyphenation flags +. nr HY 12 +.\} +. +. +.\" mm package +.if d PH \{\ +. \" update the date with the new strings +. ds cov*new-date \\n[dy] \\*[MO\\n[mo]] \\n[year] +. +. \" ISODATE and DT update +. de ISODATE +. nr cov*mm \\n[mo] +. nr cov*dd \\n[dy] +. af cov*mm 01 +. af cov*dd 01 +. ie '0'\\$1' \ +. ds cov*new-date \\n[dy] \\*[MO\\n[mo]] \\n[year] +. el \ +. ds cov*new-date \\n[year]-\\n[cov*mm]-\\n[cov*dd] +. . +. +. als DT cov*new-date +.\} +. +. +.\" me package +.if d @R \{\ +. \" date update +. ds td \n(dy \*(mo \n(y4 +. \" Redefinition for the chapter system +. de $c +. sz 12 +. ft 3 +. ce 1000 +. if \\n(_M<3 \ +. nr ch +1 +. ie \\n(_M=1 CHAPITRE\ \ \\n(ch +. el .if \\n(_M=2 ANNEXE\ \ \\n(ch +. if \w"\\$1" .sp 3-\\n(.L +. if \w"\\$1" \\$1 +. if (\\n(_M<3):(\w"\\$1") \ +. sp 4-\\n(.L +. ce 0 +. ft +. sz +. ie \\n(_M=1 \ +. $C Chapitre \\n(ch "\\$1" +. el .if \\n(_M=2 \ +. $C Annexe \\n(ch "\\$1" +.. +.\} +. +. +.\" Default encoding +.mso latin9.tmac +. +. +.\" French hyphenation +.ss 12 0 +.hy 12 +.hcode à à À à +.hcode â â  â +.hcode ç ç Ç ç +.hcode è è È è +.hcode é é É é +.hcode ê ê Ê ê +.hcode ë ë Ë ë +.hcode î î Î î +.hcode ï ï Ï ï +.hcode ô ô Ô ô +.hcode ù ù Ù ù +.hcode û û Û û +.hcode ü ü Ü ü +.hcode ÿ ÿ ¾ ÿ +.hcode ½ ½ ¼ ½ +. +.hla fr +.hpf hyphen.fr +. +. +.\" man, mdoc and mdoc-old are intentionally left untouched: +.\" usually these packages are translated in the sources of the documents. +. +.\" end of fr.tmac diff --git a/contrib/groff/tmac/groff_man.man b/contrib/groff/tmac/groff_man.man index 985014ebed..553046aa4f 100644 --- a/contrib/groff/tmac/groff_man.man +++ b/contrib/groff/tmac/groff_man.man @@ -1,5 +1,5 @@ .ig -Copyright (C) 1999-2000, 2001, 2002, 2003, 2004, 2005 +Copyright (C) 1999-2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this @@ -18,17 +18,11 @@ translations approved by the Free Software Foundation instead of in the original English. .. . -.de TQ -. br -. ns -. TP \\$1 -.. -. . .TH GROFF_MAN @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@" . . -.\" ----------------------------------------------------------------- +.\" ---------------------------------------------------------------- . .SH NAME . @@ -39,23 +33,18 @@ groff_man \- groff `man' macros to support generation of man pages . .SH SYNOPSIS . -.B groff -.B \-man -[ -.IR options .\|.\|.\& -] -[ -.IR files .\|.\|.\& -] -.br -.B groff -.B \-m\ man -[ -.IR options .\|.\|.\& -] -[ -.IR files .\|.\|.\& -] +.SY "groff\ \-man" +.RI [ options +.IR .\|.\|.\& ] +.RI [ files +.IR .\|.\|.\& ] +. +.SY "groff\ \-m\ man" +.RI [ options +.IR .\|.\|.\& ] +.RI [ files +.IR .\|.\|.\& ] +.YS . . .\" ----------------------------------------------------------------- @@ -65,7 +54,7 @@ groff_man \- groff `man' macros to support generation of man pages The .B man macros used to generate -.I \%man\~pages +.I man\~pages with .I groff were written by James Clark. @@ -85,7 +74,7 @@ various registers). . .TP .B \-rcR=1 -This option (the default if in nroff mode) will create a single, very +This option (the default if in nroff mode) creates a single, very long page instead of multiple pages. . Say @@ -95,7 +84,7 @@ to disable it. .TP .B \-rC1 If more than one manual page is given on the command line, number the -pages continuously, rather than starting each at\ 1. +pages continuously, rather than starting each at\~1. . .TP .B \-rD1 @@ -114,12 +103,12 @@ The default is -0.5i. .BI \-rHY= flags Set hyphenation flags. . -Possible values are 1\ to hyphenate without restrictions, 2\ to not -hyphenate the last word on a page, 4\ to not hyphenate the last two -characters of a word, and 8\ to not hyphenate the first two characters +Possible values are 1\~to hyphenate without restrictions, 2\~to not +hyphenate the last word on a page, 4\~to not hyphenate the last two +characters of a word, and 8\~to not hyphenate the first two characters of a word. . -These values are additive; the default is\ 14. +These values are additive; the default is\~14. . .TP .BI \-rIN= width @@ -158,18 +147,18 @@ program; direct initialization of the `LL' register should .I always be preferred to the use of such a request. -In particular, note that a `.ll\ 65n' request will +In particular, note that a `.ll\ 65n' request does .I not preserve the normal .I nroff default line length, (the .B man -default initialization to 78n will prevail), +default initialization to 78n prevails), whereas, the `-rLL=65n' option, or an equivalent `.nr\ LL\ 65n' request preceding the use of the `TH' macro, -.I will +.I does set a line length of 65n. . .TP @@ -181,9 +170,9 @@ length. . .TP .BI \-rP nnn -Enumeration of pages will start with +Enumeration of pages start with .I nnn -rather than with\ 1. +rather than with\~1. . .TP .BI \-rS xx @@ -191,7 +180,7 @@ Base document font size is .I xx points .RI ( xx -can be 10, 11, or\ 12) rather than 10\ points. +can be 10, 11, or\~12) rather than 10\~points. . .TP .BI \-rSN= width @@ -201,7 +190,7 @@ The default is 3n. . .TP .BI \-rX nnn -After page\ \c +After page\~\c .IR nnn , number pages as .IR nnn a, @@ -209,7 +198,7 @@ number pages as .IR nnn c, etc. . -For example, the option `\-rX2' will produce the following page +For example, the option `\-rX2' produces the following page numbers: 1, 2, 2a, 2b, 2c, etc. . . @@ -222,19 +211,19 @@ This section describes the available macros for manual pages. For further customization, put additional macros and requests into the file .B man.local -which will be loaded immediately after the +which is loaded immediately after the .B man package. . .TP -.BI .TH " title section \fB[\fPextra1\fB]\fP \fB[\fPextra2\fB]\fP \fB[\fPextra3\fB]" +.BI .TH " title section \fR[\fPextra1\fR]\fP \fR[\fPextra2\fR]\fP \fR[\fPextra3\fR]" Set the title of the -.I \man\~page +.I man\~page to .I title and the section to .IR section , -which must take on a value between 1 and\ 8. +which must take on a value between 1 and\~8. . The value .I section @@ -250,19 +239,19 @@ are positioned at the left and right in the header line (with in parentheses immediately appended to .IR title . .I extra1 -will be positioned in the middle of the footer line. +is positioned in the middle of the footer line. .I extra2 -will be positioned at the left in the footer line (or at the left on +is positioned at the left in the footer line (or at the left on even pages and at the right on odd pages if double-sided printing is active). .I extra3 is centered in the header line. . .IP -For HTML output, headers and footers are completely supressed. +For HTML output, headers and footers are completely suppressed. . .IP -Additionally, this macro starts a new page; the new line number is\ 1 +Additionally, this macro starts a new page; the new line number is\~1 again (except if the `-rC1' option is given on the command line) -- this feature is intended only for formatting multiple .IR \%man\~pages ; @@ -273,7 +262,7 @@ should contain exactly one macro at the beginning of the file. . .TP -.BI ".SH [" "text for a heading" ] +.BI .SH " \fR[\fPtext for a heading\fR]\fP" Set up an unnumbered section heading sticking out to the left. . Prints out all the text following @@ -290,7 +279,7 @@ Additionally, the left margin and the indentation for the following text is reset to the default values. . .TP -.BI ".SS [" "text for a heading" ] +.BI .SS " \fR[\fPtext for a heading\fR]\fP" Set up a secondary, unnumbered section heading. . Prints out all the text following @@ -307,7 +296,7 @@ Additionally, the left margin and the indentation for the following text is reset to the default values. . .TP -.BI ".TP [" nnn ] +.BI .TP " \fR[\fPnnn\fR]\fP" Set up an indented paragraph with label. . The indentation is set to @@ -335,8 +324,8 @@ If the label is wider than the indentation the descriptive part of the paragraph begins on the line following the label, entirely indented. . Note that neither font shape nor font size of the label is set to a -default value; on the other hand, the rest of the text will have -default font settings. +default value; on the other hand, the rest of the text has default +font settings. . .IP The @@ -344,6 +333,29 @@ The macro is the macro used for the explanations you are just reading. . .TP +.B .TQ +The +.B TQ +macro sets up header continuation for a .TP macro. +. +With it, you can stack up any number of labels (such as in a +glossary, or list of commands) before beginning the indented +paragraph. +. +For an example, look just past the next paragraph. +. +.IP +This macro is not defined on legacy Unix systems running classic +troff. +. +To be certain your page will be portable to those systems, +copy its definition from the +.B \%an-ext.tmac +file of a +.BR groff +installation. +. +.TP .B .LP .TQ .B .PP @@ -356,13 +368,13 @@ vertical space downwards by the amount specified by the .B PD macro. . -The font size and shape are reset to the default value (10pt -resp. Roman). +The font size and shape are reset to the default value (normally 10pt +Roman). . Finally, the current left margin and the indentation are restored. . .TP -.BI ".IP [" designator "] [" nnn ] +.BI .IP " \fR[\fPdesignator\fR]\fP \fR[\fPnnn\fR]\fP" Set up an indented paragraph, using .I designator as a tag to mark its beginning. @@ -398,11 +410,13 @@ margin temporarily to the current indentation value. is one of the three macros used in the .B man package to format lists. +. .IP \(bu 4 .B HP is another. . This macro produces a paragraph with a left hanging indentation. +. .IP \(bu 4 .B TP is another. @@ -412,7 +426,7 @@ paragraph. .RE . .TP -.BI ".HP [" nnn ] +.BI .HP " \fR[\fPnnn\fR]\fP" Set up a paragraph with hanging left indentation. . The indentation is set to @@ -428,7 +442,7 @@ or Font size and face are reset to its default values. . The following paragraph illustrates the effect of this macro with -hanging indentation set to\ 4 (enclosed by +hanging indentation set to\~4 (enclosed by .B .RS and .B .RE @@ -442,10 +456,21 @@ macro. . As you can see, it produces a paragraph where all lines but the first are indented. +. .RE +.IP +Use of this presentation-level macro is deprecated. +. +While it is universally portable to legacy Unix systems, a hanging +indentation cannot be expressed naturally under HTML, and many +HTML-based manual viewers simply interpret it as a starter for a +normal paragraph. +. +Thus, any information or distinction you tried to express with the +indentation may be lost. . .TP -.BI ".RS [" nnn ] +.BI .RS " \fR[\fPnnn\fR]\fP" This macro moves the left margin to the right by the value .I nnn if specified (default unit is `n'); otherwise it is set to the @@ -464,7 +489,7 @@ Calls to the macro can be nested. . .TP -.BI ".RE [" nnn ] +.BI .RE " \fR[\fPnnn\fR]\fP" This macro moves the left margin back to level .IR nnn , restoring the previous left margin. @@ -473,9 +498,37 @@ If no argument is given, it moves one level back. . The first level (i.e., no call to .B RS -yet) has number\ 1, and each call to +yet) has number\~1, and each call to .B RS -increases the level by\ 1. +increases the level by\~1. +. +.TP +.B .EX +.TQ +.B .EE +Example/End Example. +. +After +.BR EX , +filling is disabled and the font is set to constant-width. +. +This is useful for formatting code, command, and +configuration-file examples. +. +The +.B EE +macro restores the previous font. +. +.IP +These macros are defined on many (but not all) legacy Unix systems +running classic troff. +. +To be certain your page will be portable to those systems, copy +their definitions from the +.B \%an-ext.tmac +file of a +.BR groff +installation. . .PP To summarize, the following macros cause a line break with the @@ -485,6 +538,7 @@ macro): .BR SH , .BR SS , .BR TP , +.BR TQ , .B LP .RB ( PP , .BR P ), @@ -492,9 +546,11 @@ macro): and .BR HP . The macros -.B RS +.BR RS , +.BR RE , +.BR EX , and -.B RE +.B EE also cause a break but no insertion of vertical space. . . @@ -502,15 +558,15 @@ also cause a break but no insertion of vertical space. . .SH "MACROS TO SET FONTS" . -The standard font is Roman; the default text size is 10\ point. +The standard font is Roman; the default text size is 10\~point. . .TP -.BI ".SM [" text ] +.BI .SM " \fR[\fPtext\fR]\fP" Causes the text on the same line or the text on the next input line to appear in a font that is one point size smaller than the default font. . .TP -.BI ".SB [" text ] +.BI .SB " \fR[\fPtext\fR]\fP" Causes the text on the same line or the text on the next input line to appear in boldface font, one point size smaller than the default font. . @@ -522,9 +578,11 @@ italic. The text must be on the same line as the macro call. . Thus +. .RS .IP \&.BI this "word and" that +. .PP would cause `this' and `that' to appear in bold face, while `word and' appears in italics. @@ -565,7 +623,7 @@ face. The text must be on the same line as the macro call. . .TP -.BI ".B [" text ] +.BI .B " \fR[\fPtext\fR]\fP" Causes .I text to appear in bold face. @@ -574,7 +632,7 @@ If no text is present on the line where the macro is called the text of the next input line appears in bold face. . .TP -.BI ".I [" text ] +.BI .I " \fR[\fPtext\fR]\fP" Causes .I text to appear in italic. @@ -585,6 +643,214 @@ of the next input line appears in italic. . .\" ----------------------------------------------------------------- . +.SH "MACROS TO DESCRIBE HYPERLINKS AND EMAIL ADDRESSES" +. +The following macros are not defined on legacy Unix systems +running classic troff. +. +To be certain your page will be portable to those systems, copy +their definitions from the +.B \%an-ext.tmac +file of a +.BR groff +installation. +. +.PP +Using these macros helps ensure that you get hyperlinks when your +manual page is rendered in a browser or other program that is +Web-enabled. +. +.TP +.BI .UR " URL" +.TQ +.BI .UE " \fR[\fPpunctuation\fR]\fP" +Wrap a World Wide Web hyperlink. +. +The argument to +.B UR +is the URL; thereafter, lines until +.B UE +are collected and used as the link text. +. +Any argument to the +.B UE +macro is pasted to the end of the text. +. +On a device that is not a browser, +. +.RS +.IP +.EX +this is a link to +\&.UR http://\e:randomsite.org/\e:fubar +some random site +\&.UE , +given as an example +.EE +.RE +. +.IP +usually displays like this: \[lq]this is a link to some random +site , given as an example\[rq]. +. +.IP +The use of +.B \e: +to insert hyphenless breakpoints is a groff extension and can +be omitted. +. +.TP +.BI .MT " address" +.TQ +.BI .ME " \fR[\fPpunctuation\fR]\fP" +Wrap an email address. +. +The argument of +.B MT +is the address; text following, until +.BR ME , +is a name to be associated with the address. +. +Any argument to the +.B ME +macro is pasted to the end of the link text. +. +On a device that is not a browser, +. +.RS +.IP +.EX +contact +\&.UR fred.foonly@\e:fubar.net +Fred Foonly +\&.UE +for more information +.EE +.RE +. +.IP +usually displays like this: \[lq]contact Fred Foonly + for more information\[rq]. +. +.IP +The use of +.B \e: +to insert hyphenless breakpoints is a groff extension and can +be omitted. +. +. +.\" ----------------------------------------------------------------- +. +.SH "MACROS TO DESCRIBE COMMAND SYNOPSES" +. +The following macros are not defined on legacy Unix systems +running classic troff. +. +To be certain your page will be portable to those systems, copy their +definitions from the +.B \%an-ext.tmac +file of a +.BR groff +installation. +. +.PP +These macros are a convenience for authors. +They also assist automated translation tools and help browsers in +recognizing command synopses and treating them differently from +running text. +. +.TP +.BI .SY " command" +Begin synopsis. +. +Takes a single argument, the name of a command. +. +Text following, until closed by +.BR YS , +is set with a hanging indentation with the width of +.I command +plus a space. +. +This produces the traditional look of a Unix command synopsis. +. +.TP +.BI .OP " key value" +Describe an optional command argument. +. +The arguments of this macro are set surrounded by option braces +in the default Roman font; the first argument is printed with +a bold face, while the second argument is typeset as italic. +. +.TP +.B .YS +This macro restores normal indentation at the end of a command +synopsis. +. +.PP +Here is a real example: +. +.IP +.EX +\&.SY groff +\&.OP \e-abcegiklpstzCEGNRSUVXZ +\&.OP \e-d cs +\&.OP \e-f fam +\&.OP \e-F dir +\&.OP \e-I dir +\&.OP \e-K arg +\&.OP \e-L arg +\&.OP \e-m name +\&.OP \e-M dir +\&.OP \e-n num +\&.OP \e-o list +\&.OP \e-P arg +\&.OP \e-r cn +\&.OP \e-T dev +\&.OP \e-w name +\&.OP \e-W name +\&.RI [ file +\&.IR .\e|.\e|. ] +\&.YS +.EE +. +.PP +produces the following output: +. +.RS +.PP +.SY groff +.OP \-abcegiklpstzCEGNRSUVXZ +.OP \-d cs +.OP \-f fam +.OP \-F dir +.OP \-I dir +.OP \-K arg +.OP \-L arg +.OP \-m name +.OP \-M dir +.OP \-n num +.OP \-o list +.OP \-P arg +.OP \-r cn +.OP \-T dev +.OP \-w name +.OP \-W name +.RI [ file +.IR .\|.\|. ] +.YS +.RE +. +.PP +If necessary, you might use +.B br +requests to control line breaking. +. +You can insert plain text as well; this looks like the traditional +(unornamented) syntax for a required command argument or filename. +. +. +.\" ----------------------------------------------------------------- +. .SH "MISCELLANEOUS" . The default indentation is 7.2n in troff mode and 7n in nroff mode @@ -594,20 +860,35 @@ which ignores indentation. . .TP .B .DT -Set tabs every 0.5 inches. +Set tabs every 0.5\~inches. . Since this macro is always called during a .B TH request, it makes sense to call it only if the tab positions have been changed. . +.IP +Use of this presentation-level macro is deprecated. +. +It translates poorly to HTML, under which exact whitespace control +and tabbing are not readily available. +. +Thus, information or distinctions that you use +.B DT +to express are likely to be lost. +. +If you feel tempted to use it, you should probably be composing a +table using +.BR @g@tbl (@MAN1DIR@) +markup instead. +. .TP -.BI ".PD [" nnn ] +.BI .PD " \fR[\fPnnn\fR]\fP" Adjust the empty space before a new paragraph or section. . The optional argument gives the amount of space (default unit is `v'); -without parameter, the value is reset to its default value (1\ line in -nroff mode, 0.4v\ otherwise). +without parameter, the value is reset to its default value (1\~line in +nroff mode, 0.4v\~otherwise). . This affects the macros .BR SH , @@ -622,8 +903,18 @@ and and .BR HP . . +.IP +Use of this presentation-level macro is deprecated. +. +It translates poorly to HTML, under which exact control of +inter-paragraph spacing is not readily available. +. +Thus, information or distinctions that you use +.B PD +to express are likely to be lost. +. .TP -.BI ".AT [" system " [" release ]] +.BI .AT " \fR[\fPsystem \fR[\fPrelease\fR]]\fP" Alter the footer for use with \f[CR]AT&T\f[] .IR \%man\~pages . This command exists only for compatibility; don't use it. @@ -633,9 +924,9 @@ See the info manual for more. . .TP -.BI ".UC [" version ] +.BI .UC " \fR[\fPversion\fR]\fP" Alter the footer for use with \f[CR]BSD\f[] -.IR \%man\~pages . +.IR man\~pages . This command exists only for compatibility; don't use it. . See the @@ -643,19 +934,20 @@ See the info manual for more. . .TP -.B ".PT" +.B .PT Print the header string. . Redefine this macro to get control of the header. . .TP -.B ".BT" +.B .BT Print the footer string. . Redefine this macro to get control of the footer. . .PP The following strings are defined: +. .TP .B \e*S Switch back to the default font size. @@ -690,10 +982,12 @@ or is needed, it has become usage to make the first line of the .I \%man\~page look like this: +. .PP .RS -.BI .\e"\ word +.BI '\e"\ word .RE +. .PP Note the single space character after the double quote. .I word @@ -711,25 +1005,101 @@ preprocessor(s). . .\" ----------------------------------------------------------------- . +.SH "PORTABILITY AND TROFF REQUESTS" +. +Since the +.B man +macros consist of groups of +.I groff +requests, one can, in principle, supplement the functionality of the +.B man +macros with individual +.I groff +requests where necessary. +. +See the +.I groff +info pages for a complete reference of all requests. +. +.PP +Note, however, that using raw troff requests is likely to make your +page render poorly on the (increasingly common) class of viewers that +render it to HTML. +. +Troff requests make implicit assumptions about things like character +and page sizes that may break in an HTML environment; also, many of +these viewers don't interpret the full troff vocabulary, a problem +which can lead to portions of your text being silently dropped. +. +.PP +For portability to modern viewers, it is best to write your page +entirely in the requests described on this page. +. +Further, it is best to completely avoid those we have described as +`presentation-level' +.RB ( HP , +.BR PD , +and +.BR DT ). +. +.PP +The macros we have described as extensions +.RB ( .EX / .EE , +.BR .SY / .OP / .YS , +.BR .UR / .UE , +and +.BR .MT / .ME ) +should be used with caution, as they may not yet be built in to +some viewer that is important to your audience. +. +If in doubt, copy the implementation onto your page. +. +. +.\" ----------------------------------------------------------------- +. .SH FILES +. .TP .B man.tmac .TQ .B an.tmac These are wrapper files to call .BR andoc.tmac . +. .TP .B andoc.tmac -This file checks whether the +Use this file in case you don't know whether the .B man macros or the .B mdoc package should be used. +Multiple man pages (in either format) can be handled. +. .TP .B an-old.tmac -All +Most .B man macros are contained in this file. +. +.TP +.B an-ext.tmac +The extension macro definitions for +.BR .SY , +.BR .OP , +.BR .YS , +.BR .TQ , +.BR .EX/.EE , +.BR .UR/.UE , +and +.BR .MT/.ME +are contained in this file. +. +It is written in classic troff, and released for free re-use, +and not copylefted; manual page authors concerned about +portability to legacy Unix systems are encouraged to copy these +definitions into their pages, and maintainers of troff +or its workalikes are encouraged to re-use them. +. .TP .B man.local Local changes and customizations should be put into this file. @@ -739,36 +1109,35 @@ Local changes and customizations should be put into this file. . .SH "SEE ALSO" . -Since the -.B man -macros consist of groups of -.I groff -requests, one can, in principle, supplement the functionality of the -.B man -macros with individual -.I groff -requests where necessary. -. -See the -.I groff -info pages for a complete reference of all requests. -. .PP .BR @g@tbl (@MAN1EXT@), .BR @g@eqn (@MAN1EXT@), .BR @g@refer (@MAN1EXT@), .BR man (1), .BR man (7), +.BR groff_mdoc (7) . . .\" ----------------------------------------------------------------- . -.SH AUTHOR +.SH AUTHORS . This manual page was originally written for the Debian GNU/Linux -system by Susan G. Kleinmann , corrected and updated -by Werner Lemberg , and is now part of the GNU troff -distribution. +system by +.MT sgk@debian.org +Susan G. Kleinmann +.ME . +. +It was corrected and updated by +.MT wl@gnu.org +Werner Lemberg +.ME . +. +The extension macros were documented (and partly designed) by +.MT esr@thyrsus.com +Eric S. Raymond +.ME ; +he also wrote the portability advice. . .\" Local Variables: .\" mode: nroff diff --git a/contrib/groff/tmac/groff_mdoc.man b/contrib/groff/tmac/groff_mdoc.man index 004d784fc9..e217a5b8f1 100644 --- a/contrib/groff/tmac/groff_mdoc.man +++ b/contrib/groff/tmac/groff_mdoc.man @@ -44,7 +44,7 @@ .\" for an already extremely slow package. .\" . -.Dd August 28, 2005 +.Dd January 5, 2006 .Os .Dt GROFF_MDOC 7 . @@ -183,6 +183,7 @@ as follows: . It "BSD Macro" . It "NetBSD Macro" . It "FreeBSD Macro" +. It "DragonFly Macro" . It "OpenBSD Macro" . It "BSD/OS Macro" . It "UNIX Macro" @@ -812,9 +813,9 @@ prevents the digit\~7 from being a valid numeric expression. Local, OS-specific additions might be found in the file .Pa mdoc.local ; look for strings named -.Ql volume-ds-XXX +.Ql volume\-ds\-XXX (for the former type) and -.Ql volume-as-XXX +.Ql volume\-as\-XXX (for the latter type); .Ql XXX then denotes the keyword to be used with the @@ -847,7 +848,7 @@ Similar to local additions might be defined in .Pa mdoc.local ; look for strings named -.Ql operating-system-XXX-YYY , +.Ql operating\-system\-XXX\-YYY , where .Ql XXX is the acronym for the operating system and @@ -863,12 +864,18 @@ the release ID. .It NetBSD 0.8, 0.8a, 0.9, 0.9a, 1.0, 1.0a, 1.1, 1.2, 1.2a, 1.2b, 1.2c, 1.2d, 1.2e, 1.3, 1.3a, 1.4, 1.4.1, 1.4.2, 1.4.3, 1.5, 1.5.1, 1.5.2, 1.5.3, 1.6, 1.6.1, -1.6.2, 2.0, 2.0.1, 2.0.2, 2.1 +1.6.2, 1.6.3, 2.0, 2.0.1, 2.0.2, 2.0.3, 2.1, 3.0, 3.0.1, 3.0.2, 3.1, 4.0, +4.0.1 .It FreeBSD 1.0, 1.1, 1.1.5, 1.1.5.1, 2.0, 2.0.5, 2.1, 2.1.5, 2.1.6, 2.1.7, 2.2, 2.2.1, 2.2.2, 2.2.5, 2.2.6, 2.2.7, 2.2.8, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 4.0, 4.1, -4.1.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.6.2, 4.7, 4.8, 4.9, 4.10, 5.0, 5.1, 5.2, -5.2.1, 5.3 +4.1.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.6.2, 4.7, 4.8, 4.9, 4.10, 4.11, 5.0, 5.1, +5.2, 5.2.1, 5.3, 5.4, 5.5, 6.0, 6.1, 6.2, 6.3, 6.4, 7.0, 7.1 +.It DragonFly +1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.8, 1.8.1, 1.10, 1.12, 1.12.2, 2.0 +.It Darwin +8.0.0, 8.1.0, 8.2.0, 8.3.0, 8.4.0, 8.5.0, 8.6.0, 8.7.0, 8.8.0, 8.9.0, +8.10.0, 8.11.0, 9.0.0, 9.1.0, 9.2.0, 9.3.0, 9.4.0, 9.5.0, 9.6.0 .El .Ed .Pp @@ -1197,7 +1204,7 @@ line. If this is not desirable, . .Bd -literal -offset indent -\&.An -nosplit +\&.An \-nosplit .Ed .Pp . @@ -1205,7 +1212,7 @@ call will turn this off. To turn splitting back on, write . .Bd -literal -offset indent -\&.An -split +\&.An \-split .Ed . .Ss "Arguments" @@ -1575,10 +1582,10 @@ macro generates text for use in the .Sx RETURN VALUES section. .Pp -.Dl Usage: .Rv Oo -std Oc Op Ao function Ac ... +.Dl Usage: .Rv Oo \-std Oc Op Ao function Ac ... .Pp For example, -.Ql ".Rv -std atexit" +.Ql ".Rv \-std atexit" produces: . .Bd -ragged -offset -indent @@ -1605,10 +1612,10 @@ macro generates text for use in the .Sx DIAGNOSTICS section. .Pp -.Dl Usage: .Ex Oo -std Oc Op Ao utility Ac ... +.Dl Usage: .Ex Oo \-std Oc Op Ao utility Ac ... .Pp For example, -.Ql ".Ex -std cat" +.Ql ".Ex \-std cat" produces: . .Bd -ragged -offset -indent @@ -1732,7 +1739,7 @@ and their results are: Local, OS-specific additions might be found in the file .Pa mdoc.local ; look for strings named -.Ql str-Lb-XXX . +.Ql str\-Lb\-XXX . .Ql XXX then denotes the keyword to be used with the .Ql .Lb @@ -1750,16 +1757,16 @@ command causes a line break before and after its arguments are printed. The .Ql .Li literal macro may be used for special characters, variable constants, etc.\& --- anything which should be displayed as it would be typed. +\- anything which should be displayed as it would be typed. .Pp .Dl Usage: .Li Ao argument Ac ... .Pp -.Bl -tag -width ".Li .Li\ cntrl-D\ )\ ," -compact -offset 15n +.Bl -tag -width ".Li .Li\ cntrl\-D\ )\ ," -compact -offset 15n .It Li ".Li \een" .Li \en .It Li ".Li M1 M2 M3 ;" .Li M1 M2 M3 ; -.It Li ".Li cntrl-D ) ," +.It Li ".Li cntrl\-D ) ," .Li cntrl-D ) , .It Li ".Li 1024 ..." .Li 1024 ... @@ -1807,7 +1814,7 @@ it can not recall the first argument it was invoked with. .Bl -tag -width ".Li .Nm\ groff_mdoc" -compact -offset 15n .It Li ".Nm groff_mdoc" .Nm groff_mdoc -.It Li ".Nm \e-mdoc" +.It Li ".Nm \e\-mdoc" .Nm \-mdoc .It Li ".Nm foo ) ) ," .Nm foo ) ) , @@ -1925,16 +1932,16 @@ are: .Pp .Tn ANSI/ISO C .Pp -.Bl -tag -width ".Li -iso9945-1-90" -compact -offset indent -.It Li -ansiC +.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent +.It Li \-ansiC .St -ansiC -.It Li -ansiC-89 +.It Li \-ansiC\-89 .St -ansiC-89 -.It Li -isoC +.It Li \-isoC .St -isoC -.It Li -isoC-90 +.It Li \-isoC\-90 .St -isoC-90 -.It Li -isoC-99 +.It Li \-isoC\-99 .St -isoC-99 .El .Pp @@ -1942,30 +1949,30 @@ are: .Tn POSIX Part 1: System API .Pp -.Bl -tag -width ".Li -p1003.1g-2000" -compact -offset indent -.It Li -iso9945-1-90 +.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent +.It Li \-iso9945\-1\-90 .St -iso9945-1-90 -.It Li -iso9945-1-96 +.It Li \-iso9945\-1\-96 .St -iso9945-1-96 -.It Li -p1003.1 +.It Li \-p1003.1 .St -p1003.1 -.It Li -p1003.1-88 +.It Li \-p1003.1\-88 .St -p1003.1-88 -.It Li -p1003.1-90 +.It Li \-p1003.1\-90 .St -p1003.1-90 -.It Li -p1003.1-96 +.It Li \-p1003.1\-96 .St -p1003.1-96 -.It Li -p1003.1b-93 +.It Li \-p1003.1b\-93 .St -p1003.1b-93 -.It Li -p1003.1c-95 +.It Li \-p1003.1c\-95 .St -p1003.1c-95 -.It Li -p1003.1g-2000 +.It Li \-p1003.1g\-2000 .St -p1003.1g-2000 -.It Li -p1003.1i-95 +.It Li \-p1003.1i\-95 .St -p1003.1i-95 -.It Li -p1003.1-2001 +.It Li \-p1003.1\-2001 .St -p1003.1-2001 -.It Li -p1003.1-2004 +.It Li \-p1003.1\-2004 .St -p1003.1-2004 .El .Pp @@ -1973,52 +1980,54 @@ Part 1: System API .Tn POSIX Part 2: Shell and Utilities .Pp -.Bl -tag -width ".Li -p1003.1g-2000" -compact -offset indent -.It Li -iso9945-2-93 +.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent +.It Li \-iso9945\-2\-93 .St -iso9945-2-93 -.It Li -p1003.2 +.It Li \-p1003.2 .St -p1003.2 -.It Li -p1003.2-92 +.It Li \-p1003.2\-92 .St -p1003.2-92 -.It Li -p1003.2a-92 +.It Li \-p1003.2a\-92 .St -p1003.2a-92 .El .Pp . X/Open -.Bl -tag -width ".Li -p1003.1g-2000" -compact -offset indent +.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent .Pp -.It Li -susv2 +.It Li \-susv2 .St -susv2 -.It Li -svid4 +.It Li \-susv3 +.St -susv3 +.It Li \-svid4 .St -svid4 -.It Li -xbd5 +.It Li \-xbd5 .St -xbd5 -.It Li -xcu5 +.It Li \-xcu5 .St -xcu5 -.It Li -xcurses4.2 +.It Li \-xcurses4.2 .St -xcurses4.2 -.It Li -xns5 +.It Li \-xns5 .St -xns5 -.It Li -xns5.2 +.It Li \-xns5.2 .St -xns5.2 -.It Li -xpg3 +.It Li \-xpg3 .St -xpg3 -.It Li -xpg4 +.It Li \-xpg4 .St -xpg4 -.It Li -xpg4.2 +.It Li \-xpg4.2 .St -xpg4.2 -.It Li -xsh5 +.It Li \-xsh5 .St -xsh5 .El .Pp . Miscellaneous .Pp -.Bl -tag -width ".Li -p1003.1g-2000" -compact -offset indent -.It Li -ieee754 +.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent +.It Li \-ieee754 .St -ieee754 -.It Li -iso8802-3 +.It Li \-iso8802\-3 .St -iso8802-3 .El . @@ -2108,7 +2117,7 @@ are possible: .Ss "BSD Macro" . .Pp -.Dl "Usage: .Bx" Bro -alpha | -beta | -devel Brc ... +.Dl "Usage: .Bx" Bro \-alpha | \-beta | \-devel Brc ... .Dl " .Bx" Oo Ao version Ac Oo Ao release Ac Oc Oc ... .Pp .Bl -tag -width ".Li .Bx\ -devel" -compact -offset 15n @@ -2167,6 +2176,25 @@ see the description of the command above in section .Sx "TITLE MACROS" . . +.Ss "DragonFly Macro" +. +.Pp +.Dl Usage: .Dx Oo Ao version Ac Oc ... +.Pp +.Bl -tag -width ".Li .Dx\ 1.4\ ." -compact -offset 15n +.It Li .Dx +.Dx +.It Li ".Dx 1.4 ." +.Dx 1.4 . +.El +.Pp +For possible values of +.Ao version Ac +see the description of the +.Ql .Os +command above in section +.Sx "TITLE MACROS" . +. .Ss "OpenBSD Macro" . .Pp @@ -2360,7 +2388,7 @@ Examples of quoting: .Dq .It Li ".Dq string abc ." .Dq string abc . -.It Li ".Dq \'^[A-Z]\'" +.It Li ".Dq \'^[A\-Z]\'" .Dq \'^[A-Z]\' .It Li ".Ql man mdoc" .Ql man mdoc @@ -2553,7 +2581,7 @@ Example: \&.%A "Matthew Bar" \&.%A "John Foo" \&.%T "Implementation Notes on foobar(1)" -\&.%R "Technical Report ABC-DE-12-345" +\&.%R "Technical Report ABC\-DE\-12\-345" \&.%Q "Drofnats College, Nowhere" \&.%D "April 1991" \&.Re @@ -2726,7 +2754,7 @@ available is small. .Pp .Ql .Nd first prints -.Ql - , +.Ql \- , then all its arguments. . .It Li ".Sh LIBRARY" @@ -3133,10 +3161,10 @@ Its default font is set to constant width (literal). .Ql .Dl is parsed but not callable. .Pp -.Dl % ls -ldg /usr/local/bin +.Dl % ls \-ldg /usr/local/bin .Pp The above was produced by: -.Li ".Dl % ls -ldg /usr/local/bin" . +.Li ".Dl % ls \e\-ldg /usr/local/bin" . . .It Li .Bd Begin display. @@ -3208,7 +3236,7 @@ and macros, so one is guaranteed the two types of displays will line up. The indentation value is normally set to\~6n or about two thirds of an inch (six constant width characters). -.It Ar indent-two +.It Ar indent\-two Indent two times the default indent value. .It Ar right This @@ -3303,7 +3331,7 @@ And now a detailed description of the list types. A bullet list. . .Bd -literal -offset indent -\&.Bl -bullet -offset indent -compact +\&.Bl \-bullet \-offset indent \-compact \&.It Bullet one goes here. \&.It @@ -3327,7 +3355,7 @@ Bullet two here. A dash list. . .Bd -literal -offset indent -\&.Bl -dash -offset indent -compact +\&.Bl \-dash \-offset indent \-compact \&.It Dash one goes here. \&.It @@ -3351,7 +3379,7 @@ Dash two here. An enumerated list. . .Bd -literal -offset indent -\&.Bl -enum -offset indent -compact +\&.Bl \-enum \-offset indent \-compact \&.It Item one goes here. \&.It @@ -3376,10 +3404,10 @@ If you want to nest enumerated lists, use the flag (starting with the second-level list): . .Bd -literal -offset indent -\&.Bl -enum -offset indent -compact +\&.Bl \-enum \-offset indent \-compact \&.It Item one goes here -\&.Bl -enum -nested -compact +\&.Bl \-enum \-nested \-compact \&.It Item two goes here. \&.It @@ -3414,7 +3442,7 @@ A list of type without list markers. . .Bd -literal -offset indent -\&.Bl -item -offset indent +\&.Bl \-item \-offset indent \&.It Item one goes here. Item one goes here. @@ -3468,7 +3496,7 @@ numerical id of parent of process priority The raw text: . .Bd -literal -offset indent -\&.Bl -tag -width "PPID" -compact -offset indent +\&.Bl \-tag \-width "PPID" \-compact \-offset indent \&.It SL sleep time of the process (seconds blocked) \&.It PAGEIN @@ -3477,10 +3505,10 @@ number of disk resulting from references by the process to pages not loaded in core. \&.It UID -numerical user-id of process owner +numerical user\-id of process owner \&.It PPID numerical id of parent of process priority -(non-positive when in non-interruptible wait) +(non\-positive when in non\-interruptible wait) \&.El .Ed .Pp @@ -3495,7 +3523,7 @@ flag is not meaningful in this context. Example: . .Bd -literal -offset indent -\&.Bl -diag +\&.Bl \-diag \&.It You can't use Sy here. The message says all. \&.El @@ -3525,7 +3553,7 @@ tagged paragraph labels. And the unformatted text which created it: . .Bd -literal -offset indent -\&.Bl -hang -offset indent +\&.Bl \-hang \-offset indent \&.It Em Hanged labels appear similar to tagged lists when the label is smaller than the label width. @@ -3559,7 +3587,7 @@ numerical id of parent of process priority The raw text: . .Bd -literal -offset indent -\&.Bl -ohang -offset indent +\&.Bl \-ohang \-offset indent \&.It Sy SL sleep time of the process (seconds blocked) \&.It Sy PAGEIN @@ -3568,10 +3596,10 @@ number of disk resulting from references by the process to pages not loaded in core. \&.It Sy UID -numerical user-id of process owner +numerical user\-id of process owner \&.It Sy PPID numerical id of parent of process priority -(non-positive when in non-interruptible wait) +(non\-positive when in non\-interruptible wait) \&.El .Ed .Pp @@ -3604,7 +3632,7 @@ manuals to other formats. Here is the source text which produced the above example: . .Bd -literal -offset indent -\&.Bl -inset -offset indent +\&.Bl \-inset \-offset indent \&.It Em Tag The tagged list (also called a tagged paragraph) is the most common type of list used in the @@ -3669,12 +3697,18 @@ The table: was produced by: . .Bd -literal -\&.Bl -column -offset indent ".Sy String" ".Sy Nroff" ".Sy Troff" +\&.Bl \-column \-offset indent ".Sy String" ".Sy Nroff" ".Sy Troff" \&.It Sy String Ta Sy Nroff Ta Sy Troff \&.It Li <= Ta <= Ta \e*(<= \&.It Li >= Ta >= Ta \e*(>= \&.El .Ed +.Pp +. +Don't abuse this list type! +For more complicated cases it might be far better and easier to use +.Xr tbl 1 , +the table preprocessor. .El .Pp . @@ -3696,7 +3730,7 @@ Almost all lists in this document use this option. Example: . .Bd -literal -offset indent -\&.Bl -tag -width ".Fl test Ao Ar string Ac" +\&.Bl \-tag \-width ".Fl test Ao Ar string Ac" \&.It Fl test Ao Ar string Ac This is a longer sentence to show how the \&.Fl width @@ -4005,19 +4039,19 @@ to zero while calling .Xr groff 1 , resulting in multiple pages instead of a single, very long page: .Pp -.Dl groff -Tlatin1 -rcR=0 -mdoc foo.man > foo.txt +.Dl groff \-Tlatin1 \-rcR=0 \-mdoc foo.man > foo.txt .Pp For double-sided printing, set register .Ql D to\~1: .Pp -.Dl groff -Tps -rD1 -mdoc foo.man > foo.ps +.Dl groff \-Tps \-rD1 \-mdoc foo.man > foo.ps .Pp To change the document font size to 11pt or 12pt, set register .Ql S accordingly: .Pp -.Dl groff -Tdvi -rS11 -mdoc foo.man > foo.dvi +.Dl groff \-Tdvi \-rS11 \-mdoc foo.man > foo.dvi .Pp Register .Ql S @@ -4031,7 +4065,7 @@ and .Ql LT , respectively: .Pp -.Dl groff -Tutf8 -rLL=100n -rLT=100n -mdoc foo.man | less +.Dl groff \-Tutf8 \-rLL=100n \-rLT=100n \-mdoc foo.man | less .Pp If not set, both registers default to 78n for TTY devices and 6.5i otherwise. @@ -4056,11 +4090,12 @@ Definitions used for all other devices. .It Pa mdoc.local Local additions and customizations. .It Pa andoc.tmac -This file checks whether the +Use this file if you don't know whether the .Nm \-mdoc or the .Nm \-man package should be used. +Multiple man pages (in either format) can be handled. .El . . diff --git a/contrib/groff/tmac/groff_ms.man b/contrib/groff/tmac/groff_ms.man index 258670fb42..e3e622fa82 100644 --- a/contrib/groff/tmac/groff_ms.man +++ b/contrib/groff/tmac/groff_ms.man @@ -1,6 +1,6 @@ '\" t .ig -Copyright (C) 1989-1995, 2001, 2002, 2003, 2004, 2005 +Copyright (C) 1989-1995, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of @@ -152,27 +152,15 @@ macro. .RS .na .TS -cb s cb s s cb s cb s -afCW s l s s l s l s. +cb cb cb cb +lfCW l l l. Reg. Definition Effective Default _ -PO T{ -Page offset (left margin) -T} T{ -next page -T} 1i -LL T{ -Line length -T} next para. 6i -LT T{ -Header/footer length -T} next para. 6i -HM T{ -Top (header) margin -T} next page 1i -FM T{ -Bottom (footer) margin -T} next page 1i +PO Page offset (left margin) next page 1i +LL Line length next paragraph 6i +LT Header/footer length next paragraph 6i +HM Top (header) margin next page 1i +FM Bottom (footer) margin next page 1i _ .TE .RE @@ -182,16 +170,16 @@ _ .B Text settings .RS .TS -cb s cb s s cb s cb s -afCW s l s s l s l s. +cb cb cb cb +lfCW lx l l. Reg. Definition Effective Default _ PS T{ Point size -T} next para. 10p +T} next paragraph 10p VS T{ Line spacing (leading) -T} next para. 12p +T} next paragraph 12p PSINCR T{ Point size increment for section headings of @@ -211,23 +199,23 @@ _ .B Paragraph settings .RS .TS -cb cb s cb cb -afCW l s l l . +cb cb cb cb +lfCW lx l l. Reg. Definition Effective Default _ PI T{ Initial indent -T} next para. 5n +T} next paragraph 5n PD T{ Space between paragraphs -T} next para. 0.3v +T} next paragraph 0.3v QI T{ Quoted paragraph indent -T} next para. 5n +T} next paragraph 5n PORPHANS T{ Number of initial lines to be kept together -T} next para. 1 +T} next paragraph 1 HORPHANS T{ Number of initial lines to be kept with heading @@ -241,8 +229,8 @@ _ .B Footnote settings .RS .TS -cb cb cb cb -afCW l l l . +cb cb cb cb +lfCW l l l. Reg. Definition Effective Default _ FL Footnote length next footnote \[rs]n[LL]*5/6 @@ -260,13 +248,11 @@ _ .B Other settings .RS .TS -cb s cb s s cb s cb s -afCW s l s s l s l s. +cb cb cb cb +lfCW l l l. Reg. Definition Effective Default _ -MINGW T{ -Minimum width between columns -T} next page 2n +MINGW Minimum width between columns next page 2n _ .TE .ad @@ -528,14 +514,57 @@ scaling factor should be employed, when assigning a value specified in points. . .IP +The style used to represent the section number, +within a numbered heading, +is controlled by the +.B SN-STYLE +string; +this may be set to either the +.B SN-DOT +or the +.B SN-NO-DOT +style, +(described below), +by aliasing +.B SN-STYLE +accordingly. +By default, +.B SN-STYLE +is initialised by defining the alias +.RS +.nf +.IP +\&.als SN-STYLE SN-DOT +.fi +.RE +.IP +it may be changed to the +.B SN-NO-DOT +style, +if preferred, +by defining the alternative alias +.RS +.nf +.IP +\&.als SN-STYLE SN-NO-DOT +.fi +.RE +.IP +Any such change becomes effective with the first use of +.BR .NH , +.I after +the new alias is defined. +. +.IP After invoking .BR .NH , the assigned heading number is available in the strings .B SN-DOT -(exactly as it appears in the formatted heading), +(as it appears in the default formatting style for numbered headings, +with a terminating period following the number), and .B SN-NO-DOT -(with its final period omitted). +(with this terminating period omitted). The string .B SN is also defined, @@ -550,28 +579,16 @@ by including the initialisation: .RS .nf .IP -\&.ds SN-NO-DOT \&.als SN SN-NO-DOT .fi .RE . .IP -.I before -the first use of +at any time; +the change becomes effective with the next use of .BR .NH , -or simply: -. -.RS -.nf -.IP -\&.als SN SN-NO-DOT -.fi -.RE -. -.IP .I after -the first use of -.BR .NH . +the new alias is defined. . .TP .BI .SH\ [ xx ] @@ -810,9 +827,9 @@ The following table shows the display types available. .ne 11 .na .TS -cb s s s cbt s s -cb s cb s ^ s s -lfCW s lfCW s l s s. +cb s cbt +cb cb ^ +lfCW lfCW lx. Display macro Type of display With keep No keep _ @@ -1054,7 +1071,7 @@ are in the same order as the corresponding occurrences of . .SS "Headers and footers" . -There are two ways to define headers and footers: +There are three ways to define headers and footers: . .IP \(bu 3n Use the strings @@ -1093,6 +1110,21 @@ The syntax for these macros is as follows: You can replace the quote (') marks with any character not appearing in the header or footer text. . +.PP +You can also redefine the +.B PT +and +.B BT +macros to change the behavior of +the header and footer, respectively. +The header process also calls the (undefined) +.B HD +macro after +.B PT ; +you can define this macro if you need additional processing +after printing the header +(for example, to draw a line below the header). +. . .SS Margins . @@ -1102,25 +1134,15 @@ The following table lists the register names and defaults: .ne 8 .na .TS -cb s cb s s cb s cb s -afCW s l s s l s l s. +cb cb cb cb +lfCW l l l. Reg. Definition Effective Default _ -PO T{ -Page offset (left margin) -T} next page 1i -LL T{ -Line length -T} next para. 6i -LT T{ -Header/footer length -T} next para. 6i -HM T{ -Top (header) margin -T} next page 1i -FM T{ -Bottom (footer) margin -T} next page 1i +PO Page offset (left margin) next page 1i +LL Line length next paragraph 6i +LT Header/footer length next paragraph 6i +HM Top (header) margin next page 1i +FM Bottom (footer) margin next page 1i _ .TE .RE @@ -1283,7 +1305,33 @@ is to detect and report errors, rather than silently to ignore them. . .IP \(bu -Bell Labs localisms are not implemented. +Some Bell Labs localisms are not implemented by default. +However, if you call the otherwise undocumented +.BR SC +section-header macro, you will enable implementations of three other +archaic Bell Labs macros: +.BR UC , +.BR P1 , +and +.BR P2 . +These are not enabled by default because (a)\~they were not documented, +in the original +.IR "ms manual" , +and (b)\~the +.B P1 +and +.B UC +macros both collide with different macros in the Berkeley version of +.IR ms . +. +.IP +These emulations are sufficient to give back the 1976 Kernighan\~& Cherry +paper +.I "Typsetting Mathematics \(en User's Guide" +its section headings, and restore some text that had gone missing as +arguments of undefined macros. +No warranty express or implied is given as to how well the typographic +details these produce match the original Bell Labs macros. . .IP \(bu Berkeley localisms, in particular the @@ -1378,8 +1426,8 @@ You can redefine the following strings to adapt the macros to languages other than English: .TS center; -cb cb -afCW l . +cb cb +lfCW l. String Default Value _ REFERENCES References diff --git a/contrib/groff/tmac/groff_trace.man b/contrib/groff/tmac/groff_trace.man index bc1c98c17b..c3631b3de7 100644 --- a/contrib/groff/tmac/groff_trace.man +++ b/contrib/groff/tmac/groff_trace.man @@ -1,29 +1,19 @@ -. -.TH GROFF_TRACE @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@" -.SH NAME -groff_trace \- groff macro package trace.tmac -.SH SYNOPSIS -.\" The .SH was moved to this place to make `apropos' happy. -. -. -.\" -------------------------------------------------------------------- -.\" Legalize -.\" -------------------------------------------------------------------- -. .ig groff_trace.7 File position: /tmac/groff_trace.man -Last update: 14 July 2002 +Last update: 05 Jan 2009 This file is part of groff, the GNU roff type-setting system. -Copyright (C) 2002 Free Software Foundation, Inc. -written by Bernd Warken +Copyright (C) 2002, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. + +written by Bernd Warken. Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or +under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with the Invariant Sections being this .ig-section and AUTHOR, with no Front-Cover Texts, and with no Back-Cover Texts. @@ -32,286 +22,23 @@ A copy of the Free Documentation License is included as a file called FDL in the main directory of the groff source package. .. . -.\" -------------------------------------------------------------------- -.\" Setup -.\" -------------------------------------------------------------------- -. -.do nr groff_trace_C \n[.C] -.cp 0 -. -.mso www.tmac -. -.if n \{\ -. mso tty-char.tmac -. ftr CR R -. ftr CI I -. ftr CB B -.\} -. .ds Ellipsis .\|.\|.\&\" . -.\" Global static variables for inter-macro communication -.rr @+Example_font -. -.\" -------------------------------------------------------------------- -.\" setup for the macro definitions below -.\" -.\" naming: namespace:category_macro.variable_name (experimental) -. -.\" -------------------------------------------------------------------- -.\" configuration of prompt for `.Shell_cmd'* macros -.ds trace:Shell_cmd.prompt_text sh#\" prompt for shell commands -.ds trace:Shell_cmd+.prompt_text >\" prompt on continuation lines -.ds trace:Shell_cmd_base.prompt_font I\" font for prompts -. -.\" automatically determine setup from the configuration above -.als @f trace:Shell_cmd_base.prompt_font\" -.als @t trace:Shell_cmd.prompt_text\" -.als @t+ trace:Shell_cmd+.prompt_text\" -.ds trace:Shell_cmd.prompt \f[\*[@f]]\*[@t]\f[]\" needed -.ds trace:Shell_cmd+.prompt \f[\*[@f]]\*[@t+]\f[]\" needed -.nr @w \w'\*[trace:Shell_cmd.prompt]'\" -.nr @w+ \w'\*[trace:Shell_cmd+.prompt]'\" -.ft \*[@f] -.\" Full prompt width is maximum of texts plus 1m -.nr trace:Shell_cmd_base.prompt_width (\n[@w]>?\n[@w+]+1m)\" needed -.ft -.rm @f -.rm @f+ -.rm @t -.rm @t+ -.rr @w -.rr @w+ -. -.\"-------------------------------------------------------------------- -.\" Ignore all arguments like a comment, even after a .eo call. -.de c -.. -.c -------------------------------------------------------------------- -.de BIR -. ie (\\n[.$] < 3) \ -. BI \\$@ -. el \{\ -. ds @tmp@ \fB\\$1\f[]\fI\\$2\f[] -. shift 2 -. Text \\*[@tmp@]\fR\\$*\f[] -. rm @tmp@ -. \} -.. -.c -------------------------------------------------------------------- -.c .Env_var ( []) -.c -.c Display an environment variable, with optional punctuation. -.c -.de Env_var -. nh -. SM -. Text \f[CB]\\$1\f[]\\$2 -. hy -.. -.c -------------------------------------------------------------------- -.c .Error (...) -.c -.c Print error message to terminal and abort. -.c -.de Error -. tm \\$* -. ab -.. -.c -------------------------------------------------------------------- -.de Example -. if r@+Example_font \ -. Error previous .Example was not terminated by a ./Example -. nr @+Example_font \\n[.f] -. nh -. nf -.c RS \\n[trace:Shell_cmd_base.prompt_width]u -. ft CR -.. -.c -------------------------------------------------------------------- -.de /Example -. if !r@+Example_font \ -. Error no previous call to .Example -. ft \\n[@+Example_font] -.c RE -. fi -. hy -. rr @+Example_font -.. -.c -------------------------------------------------------------------- -.de Macdef -. if (\\n[.$] <= 0) \ -. Error \\$0 needs at least one argument. -. ds @s .\f[B]\\$1\f[]\" -. shift -. if (\\n[.$] > 0) \ -. as @s \~\f[I]\\$*\f[]\" -. IP \\*[@s] -. rm @s -.. -.c -------------------------------------------------------------------- -.de Macdef+ -. br -. ns -. Macdef \\$@ -.. -.c -------------------------------------------------------------------- -.c .Shell_cmd ( [] ...) -.c -.c A shell command line; display args alternating in fonts CR and CI. -.c -.c Examples: -.c .Shell_cmd "groffer --dpi 100 file" -.c result: `sh# groffer --dpi 100 file' -.c with 'sh#' in font I, the rest in CR -.c -.c .Shell_cmd groffer\~--dpi\~100\~file -.c result: the same as above -.c -.c .Shell_cmd "groffer --dpi=" value " file" -.c result: sh# groffer --dpi=value file -.c with `groffer --dpi=' and `file' in CR; `value' in CI -.c -.c .Shell_cmd groffer\~--dpi= value \~file -.c result: the same as the previous example -.c -.de Shell_cmd -. trace:Shell_cmd_base "\*[trace:Shell_cmd.prompt]" \\$@ -.. -.c -------------------------------------------------------------------- -.c .Shell_cmd+ ( [] ...) -.c -.c A continuation line for .Shell_cmd. -.c -.de Shell_cmd+ -. trace:Shell_cmd_base "\*[trace:Shell_cmd+.prompt]" \\$@ -.. -.c -------------------------------------------------------------------- -.c .Shell_cmd_base ( [ [] ...]) -.c -.c A shell command line; display args alternating in fonts CR and CI. -.c Internal, do not use directly. -.c -.c Globals: read-only register @.Shell_cmd_width -.c -.de trace:Shell_cmd_base -. if (\\n[.$] <= 0) \ -. return -. nr @+font \\n[.f]\" -. ds @prompt \\$1\" -. ft CR -. c gap between prompt and command -. nr @+gap \\n[trace:Shell_cmd_base.prompt_width]-\\w'\\*[@prompt]'\" -. ds @res \\*[@prompt]\h'\\n[@+gap]u'\" -. shift -. ds @cf CR\" -. while (\\n[.$] > 0) \{\ -. as @res \\f[\\*[@cf]]\\$1\" -. shift -. ie '\\*[@cf]'CR' \ -. ds @cf I\" -. el \ -. ds @cf CR\" -. \} -. br -. ad l -. nh -. nf -. Text \\*[@res]\" -. fi -. hy -. ad -. br -. ft \\n[@+font] -. rr @+font -. rr @+gap -. rm @cf -. rm @res -.. -.c -------------------------------------------------------------------- -.c .Text (...) -.c -.c Treat the arguments as text, no matter how they look. -.c -.de Text -. if (\\n[.$] == 0) \ -. return -. nop \)\\$*\) -.. -.c -------------------------------------------------------------------- -.c .Topic ([]) -.c -.c A bulleted paragraph. -.c -.de Topic -. ie (\\n[.$] = 0) \ -. .ds @indent 2m\" -. el \ -. .ds @indent \\$1\" -. TP \\*[@indent] -. Text \[bu] -. rm @indent -.. -.c -------------------------------------------------------------------- -.c .TP+ () -.c -.c Continuation line for .TP header. -.c -.de TP+ -. br -. ns -. TP \\$1 -.. -.c -------------------------------------------------------------------- -.de 'char -. ds @tmp@ `\f(CR\\$1\f[]' -. shift -. Text \\*[@tmp@]\\$* -. rm @tmp@ -.. -.c -------------------------------------------------------------------- -.de option -. ds @tmp@ \f(CB\\$1\f[] -. shift 1 -. Text \\*[@tmp@]\\$* -. rm @tmp@ -.. -.c -------------------------------------------------------------------- -.de argument -. ds @tmp@ \f(CI\\$1\f[] -. shift 1 -. Text \\*[@tmp@]\\$* -. rm @tmp@ -.. -.c -------------------------------------------------------------------- -.de request -. ds @tmp@ \f(CB\\$1\f[] -. shift 1 -. Text .\\*[@tmp@]\\$* -. rm @tmp@ -.. -.c -------------------------------------------------------------------- -.de escape -. ds @tmp@ \f[CB]\\$1\f[] -. shift 1 -. Text \[rs]\\*[@tmp@]\\$* -. rm @tmp@ -.. +.TH GROFF_TRACE @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@" . +.SH NAME +groff_trace \- groff macro package trace.tmac . .\" -------------------------------------------------------------------- -.\" SH SYNOPSIS +.SH SYNOPSIS .\" -------------------------------------------------------------------- . -.B groff -m trace -.RI [ options\*[Ellipsis] ] -.RI [ files\*[Ellipsis] ] -. -. -.P -Elements in brackets denote optional arguments, and the ellipsis means -that there can be any number of arguments of this kind. -. +.SY "groff \-m trace" +.RI [ options +.IR \*[Ellipsis] ] +.RI [ files +.IR \*[Ellipsis] ] +.YS . .\" -------------------------------------------------------------------- .SH DESCRIPTION @@ -324,7 +51,7 @@ macro package of can be a valuable tool for debugging documents written in the roff formatting language. . -A call stack trace is protocolled on standard error, that means, a +A call stack trace is protocolled on standard error, this is, a diagnostic message is emitted on entering and exiting of a macro call. . This greatly eases to track down an error in some macro. @@ -333,21 +60,28 @@ This greatly eases to track down an error in some macro. .P This tracing process is activated by specifying the groff or troff command line option -.BR "-m\~trace" . +.BR \-m\ trace . This works also with the .BR groffer (@MAN1EXT@) viewer program. . A finer control can be obtained by including the macro file within the document by the groff macro call -.BR ".mso\~trace.tmac" . +.BR .mso\ trace.tmac . Only macros that are defined after this line are traced. . . .P +If command line option +.B \-r\ trace-full=1 +is given (or if this register is set in the document), number and string +register assignments together with some other requests are traced also. +. +. +.P If some other macro package should be traced as well it must be specified after -.BR "-m\~trace" +.B \-m\ trace on the command line. . . @@ -365,13 +99,12 @@ modified such that they display diagnostic messages. .SH EXAMPLES .\" -------------------------------------------------------------------- . -.P In the following examples, a roff fragment is fed into groff via standard input. . As we are only interested in the diagnostic messages (standard error) on the terminal, the normal formatted output (standard output) is -redirected into the nirvana device +redirected to the nirvana device .IR /dev/null . The resulting diagnostic messages are displayed directly below the corresponding example. @@ -379,21 +112,25 @@ corresponding example. . .\" -------------------------------------------------------------------- .SS "Command line option" +Example: . +.RS .P -.Shell_cmd "echo '." -.Shell_cmd+ ".de test_macro" -.Shell_cmd+ ".." -.Shell_cmd+ ".test_macro" -.Shell_cmd+ ".test_macro some dummy arguments" -.Shell_cmd+ "' | groff -m trace >/dev/null" -.P -.Example -*** de trace enter: test_macro -*** trace exit: test_macro -*** de trace enter: test_macro "some" "dummy" "arguments" -*** trace exit: test_macro "some" "dummy" "arguments" -./Example +.EX +\fIsh#\fP echo '. +> .de test_macro +> .. +> .test_macro +> .test_macro some dummy arguments +> ' | groff -m trace >/dev/null + +*** .de test_macro +*** de trace enter: .test_macro +*** trace exit: .test_macro +*** de trace enter: .test_macro "some" "dummy" "arguments" +*** trace exit: .test_macro "some" "dummy" "arguments" +.EE +.RE . .P The entry and the exit of each macro call is displayed on the terminal @@ -402,23 +139,28 @@ The entry and the exit of each macro call is displayed on the terminal . .\" -------------------------------------------------------------------- .SS "Nested macro calls" +Example: . +.RS .P -.Shell_cmd "echo '." -.Shell_cmd+ ".de child" -.Shell_cmd+ ".." -.Shell_cmd+ ".de parent" -.Shell_cmd+ ".child" -.Shell_cmd+ ".." -.Shell_cmd+ ".parent" -.Shell_cmd+ "' | groff -m trace >/dev/null" -.P -.Example -*** de trace enter: parent -*** de trace enter: child -*** trace exit: child -*** trace exit: parent -./Example +.EX +\fIsh#\fP echo '. +> .de child +> .. +> .de parent +> .child +> .. +> .parent +> ' | groff -m trace >/dev/null + +*** .de child +*** .de parent +*** de trace enter: .parent + *** de trace enter: .child + *** trace exit: .child +*** trace exit: .parent +.EE +.RE . .P This shows that macro calls can be nested. @@ -428,22 +170,26 @@ This powerful feature can help to tack down quite complex call stacks. . .\" -------------------------------------------------------------------- .SS "Activating with .mso" +Example: . -.Shell_cmd "echo '." -.Shell_cmd+ ".de before" -.Shell_cmd+ .. -.Shell_cmd+ ".mso trace.tmac" -.Shell_cmd+ ".de after" -.Shell_cmd+ .. -.Shell_cmd+ .before -.Shell_cmd+ .after -.Shell_cmd+ .before -.Shell_cmd+ "' | groff >/dev/null" +.RS .P -.Example -*** de trace enter: after -*** trace exit: after -./Example +.EX +\fIsh#\fP echo '. +> .de before +> .. +> .mso trace.tmac +> .de after +> .. +> .before +> .after +> .before +> ' | groff >/dev/null + +*** de trace enter: .after +*** trace exit: .after +.EE +.RE . .P Here, the tracing is activated within the document, not by a command @@ -458,6 +204,42 @@ is fully protocolled. . . .\" -------------------------------------------------------------------- +.SH PROBLEMS +.\" -------------------------------------------------------------------- +. +Because +.B trace.tmac +wraps the +.B .de +request (and its cousins), macro arguments are expanded one level more. +. +This causes problems if an argument contains four backslashes or more +to prevent too early expansion of the backslash. For example, this +macro call +. +.IP +.EX +\&.foo \e\e\e\en[bar] +.EE +. +.P +normally passes `\e\en[bar]' to macro `.foo', but with the redefined +.B .de +request it passes `\en[bar]' instead. +. +.P +The solution to this problem is to use groff's +.B \eE +escape which is an escape character not interpreted in copy mode, for +example +. +.IP +.EX +\&.foo \eEn[bar] +.EE +. +. +.\" -------------------------------------------------------------------- .SH FILES .\" -------------------------------------------------------------------- . @@ -477,7 +259,7 @@ for details. .\" -------------------------------------------------------------------- . .TP -.Env_var $GROFF_TMAC_PATH +.B $GROFF_TMAC_PATH A colon-separated list of additional tmac directories in which to search for macro files; see .BR groff_tmac (@MAN5EXT@) @@ -488,7 +270,7 @@ for details. .SH AUTHOR .\" -------------------------------------------------------------------- . -Copyright (C) 2002 Free Software Foundation, Inc. +Copyright (C) 2002, 2006, 2007, 2008 Free Software Foundation, Inc. . .P This document is distributed under the terms of the FDL (GNU Free @@ -496,15 +278,16 @@ Documentation License) version 1.1 or later. . You should have received a copy of the FDL on your system, it is also available on-line at the -.URL http://\:www.gnu.org/\:copyleft/\:fdl.html "GNU copyleft site" . +.UR http://\:www.gnu.org/\:copyleft/\:fdl.html +GNU copyleft site +.UE . . .P This document is part of .IR groff , the GNU roff distribution. . -It was written by -.MTO bwarken@mayn.de "Bernd Warken". +It was written by Bernd Warken. . . .\" -------------------------------------------------------------------- @@ -515,36 +298,29 @@ It was written by .BR groff (@MAN1EXT@) An overview of the groff system. . -. .TP .BR troff (@MAN1EXT@) For details on option -.BR -m . -. +.BR \-m . . .TP .BR groffer (@MAN1EXT@) A viewer program for all kinds of roff documents. . -. .TP .BR groff_tmac (@MAN5EXT@) A general description of groff macro packages. . -. .TP .BR groff (@MAN7EXT@) A short reference for the groff formatting language. . -. .P A complete reference for all parts of the groff system is found in the groff .BR info (1) file. . -.cp \n[groff_trace_C] -. .\" Local Variables: .\" mode: nroff .\" End: diff --git a/contrib/groff/tmac/groff_www.man b/contrib/groff/tmac/groff_www.man index e4b3f524b1..f17d8ab3b2 100644 --- a/contrib/groff/tmac/groff_www.man +++ b/contrib/groff/tmac/groff_www.man @@ -1,5 +1,5 @@ .TH GROFF_WWW @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@" -.\" Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005 +.\" Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009 .\" Free Software Foundation, Inc. .\" Written by Gaius Mulley (gaius@glam.ac.uk) .\" @@ -7,17 +7,16 @@ .\" .\" groff is free software; you can redistribute it and/or modify it under .\" the terms of the GNU General Public License as published by the Free -.\" Software Foundation; either version 2, or (at your option) any later -.\" version. +.\" Software Foundation, either version 3 of the License, or +.\" (at your option) any later version. .\" .\" groff is distributed in the hope that it will be useful, but WITHOUT ANY .\" WARRANTY; without even the implied warranty of MERCHANTABILITY or .\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License .\" for more details. .\" -.\" You should have received a copy of the GNU General Public License along -.\" with groff; see the file COPYING. If not, write to the Free Software -.\" Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. +.\" You should have received a copy of the GNU General Public License +.\" along with this program. If not, see . .\" .\" user level guide to using the -mwww macroset .\" @@ -52,52 +51,56 @@ The manual page is very a basic guide, and the html device driver has been completely rewritten but still remains as in an alpha state. It has been included into the distribution so that a lot of people have a chance to test it. -Note that this macro file will be automatically called (via the +Note that this macro file is automatically called (via the .B troffrc file) if you use -.BR \-Thtml . +.B \-Thtml +or +.BR \-Txhtml . .PP To see the hyperlinks in action, please format this man page with the .B \%grohtml device. .PP Here is a summary of the functions found in this macro set. -.ta 2iL -.nf -\&.JOBNAME split output into multiple files -\&.HX automatic heading level cut off; - $1 point for sections/headers -\&.BCL specify colours on a web page -\&.BGIMG specify background image -\&.URL create a url using two parameters -\&.FTP create an ftp reference -\&.MTO create a html email address -\&.FTP create an ftp reference -\&.TAG generate an html name -\&.IMG include an image file -\&.PIMG include png image -\&.MPIMG place png on the margin and - wrap text around it -\&.HnS begin heading -\&.HnE end heading -\&.LK emit automatically collected links. -\&.HR produce a horizontal rule -\&.NHR suppress automatic generation of rules. -\&.HTL only generate HTML title -\&.HEAD add data to block -\&.ULS unorder list begin -\&.ULE unorder list end -\&.OLS ordered list begin -\&.OLE ordered list end -\&.DLS definition list begin -\&.DLE definition list end -\&.LI insert a list item -\&.DC generate a drop capital -\&.HTML pass an html raw request to the - device driver -\&.CDS code example begin -\&.CDE code example end -.fi +.TS +tab(@); +l l. +\&.JOBNAME@split output into multiple files +\&.HX@automatic heading level cut off +\&.BCL@specify colours on a web page +\&.BGIMG@specify background image +\&.URL@create a url using two parameters +\&.FTP@create an ftp reference +\&.MTO@create a html email address +\&.FTP@create an ftp reference +\&.TAG@generate an html name +\&.IMG@include an image file +\&.PIMG@include png image +\&.MPIMG@place png on the margin and wrap text around it +\&.HnS@begin heading +\&.HnE@end heading +\&.LK@emit automatically collected links. +\&.HR@produce a horizontal rule +\&.NHR@suppress automatic generation of rules. +\&.HTL@only generate HTML title +\&.HEAD@add data to block +\&.ULS@unorder list begin +\&.ULE@unorder list end +\&.OLS@ordered list begin +\&.OLE@ordered list end +\&.DLS@definition list begin +\&.DLE@definition list end +\&.LI@insert a list item +\&.DC@generate a drop capital +\&.HTML@pass an html raw request to the device driver +\&.CDS@code example begin +\&.CDE@code example end +\&.ALN@place links on left of main text. +\&.LNS@start a new two-column table with links in the left. +\&.LNE@end the two-column table. +\&.LINKSTYLE@initialize default url attributes. +.TE .PP Output of the .BR pic , @@ -137,7 +140,7 @@ Whereas .fi .RE .IP -will tell +tells .B \%grohtml that no heading links should be created at all. Another method for turning automatic headings off is by issuing the @@ -183,10 +186,12 @@ Here is how to encode .IP If this is processed by a device other than .B \-Thtml +or +.B \-Txhtml it appears as: .RS .IP -\m[blue]foo\m[] \[la]\f[C]http://foo.org\f[]\[ra]: +foo \[la]\f[C]http://foo.org\f[]\[ra]: .RE .IP The URL macro can be of any type; for example we can reference @@ -222,7 +227,9 @@ To circumvent this, .B www.tmac inserts a zero-width character which expands to a harmless space (only if run with -.BR \-Thtml ). +.B \-Thtml +or +.BR \-Txhtml ). . .TP .B .FTP url [description] [after] @@ -300,6 +307,8 @@ and .BR pnmtops . If the document isn't processed with .B \-Thtml +or +.B \-Txhtml it is necessary to use the .B \-U option of groff. @@ -395,6 +404,8 @@ End heading. Force \%grohtml to place the automatically generated links at this position. If this manual page has been processed with .B \-Thtml +or +.B \-Txhtml those links can be seen right here. . .LK @@ -402,7 +413,9 @@ those links can be seen right here. .TP .B .HR Generate a full-width horizontal rule for -.BR \-Thtml . +.B \-Thtml +and +.BR \-Txhtml . No effect for all other devices. . .TP @@ -426,7 +439,9 @@ The macro terminates when a space or break is seen (.sp, .br). .B .HEAD Add arbitrary HTML data to the block. Ignored if not processed with -.BR \-Thtml . +.B \-Thtml +or +.BR \-Txhtml . Example: .RS .IP @@ -444,6 +459,8 @@ Example: All text after this macro is treated as raw html. If the document is processed without .B \-Thtml +or +.B \-Txhtml then the macro is ignored. Internally, this macro is used as a building block for other higher-level macros. @@ -480,6 +497,49 @@ Start displaying a code section in constant width font. .B ".CDE" End code display . +.TP +.B ".ALN [color] [percentage]" +Place section heading links automatically to the left of the main text. +The color argument is optional and if present indicates which HTML +background color is to be used under the links. +The optional percentage indicates the amount of width to devote to +displaying the links. +The default values are #eeeeee and 30 for color and percentage width, +respectively. +This macro should only be called once at the beginning of the document. +After calling this macro each section heading emits an HTML table consisting +of the links in the left and the section text on the right. +. +.TP +.B ".LNS" +Start a new two-column table with links in the left column. +This can be called if the document has text before the first .SH and if .ALN +is used. +Typically this is called just before the first paragraph and after the main +title as it indicates that text after this point should be positioned to the +right of the left-hand navigational links. +. +.TP +.B ".LNE" +End a two-column table. +This should be called at the end of the document if .ALN was used. +. +.TP +.B ".LINKSTYLE color [ fontstyle [ openglyph closeglyph ] ]" +Initialize default url attributes to be used if this macro set is not used +with the HTML device. +The macro set initializes itself with the following call +.RS +.IP +.nf +.ft B +\&.LINKSTYLE blue C \e[la] \e[ra] +.ft P +.fi +.RE +.IP +but these values will be superseded by a user call to LINKSTYLE. +. .SH SECTION HEADING LINKS By default .B \%grohtml diff --git a/contrib/groff/tmac/html.tmac b/contrib/groff/tmac/html.tmac index 9289f82ecc..dc06b23e02 100644 --- a/contrib/groff/tmac/html.tmac +++ b/contrib/groff/tmac/html.tmac @@ -32,7 +32,7 @@ .. . .\" avoid line breaks after hyphen-like characters. -.cflags 0 -\[hy]\[em]\[en]\[shc] +.cflags 0 -\[hy]\[em]\[en] . .\" Now set any characters defined in devps/S but not in devhtml to nul -- .\" these are generated by eqn but not used by grohtml. grops generated @@ -533,14 +533,14 @@ . .cp \n(_C . -.if !\n(_C \{\ -. mso pspic.tmac +.if !\n(_C \ . mso www.tmac -.\} . .do ie '\[char97]'a' \ . do mso latin1.tmac .el \ . do mso cp1047.tmac . +.mso unicode.tmac +. .\" end of file, make sure this is the last line diff --git a/contrib/groff/tmac/hyphen.cs b/contrib/groff/tmac/hyphen.cs new file mode 100644 index 0000000000..ef0f09f3d1 --- /dev/null +++ b/contrib/groff/tmac/hyphen.cs @@ -0,0 +1,3670 @@ +% This is the groff hyphenation pattern file `hyphen.cs' for Czech. +% +% It is based on the TeX pattern file `czhyphen.tex', version 3 (1995), +% prepared by Pavel ©eveèek . +% +% Here is the copyright message: +% +% This is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation; either version 2 of the License, or +% (at your option) any later version. +% +% This file is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program; if not, write to the Free Software +% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +% +% Please check the original file for more details. +% +% It has been made suitable for groff by expanding all macros to real +% characters in latin-2 encoding. +% +\patterns{ +.a2 +.a4da +.a4de +.a4di +.a4do +.a4dé +.a4kl +.a4ko +.a4kr +.a4ku +.ale3x +.a4ra +.a4re +.a4ri +.a4ro +.a4ry +.a4rá +.a4sa +.a4se +.a4so +.as3t3 +.a4sy +.a4ta +.a4te +.at3l +.a4to +.a4tr +.a4ty +.a4ve +.b2 +.c2 +.ch2 +.cyk3 +.d2 +.dez3 +.d4na +.dne4 +.dne¹4k +.d4ny +.dos4 +.d4ve +.d4vì +.d4ví +.e2 +.e4ch +.e4ko +.es3k +.es3t +.e4ve +.f4ri +.g2 +.h2 +.h4le +.h4ne +.i2 +.i4na +.i4ni +.i4no +.is3l +.j2 +.j4ak +.je4dl +.j4se +.j4zd +.jád4 +.k2 +.k4li +.k4ly +.køí3d +.l2 +.le4gr +.li3kv +.m2 +.mi3st4 +.moud3 +.na3è4 +.ne3c +.neè4 +.ne3¹ +.ni2t +.no4s3t +.n4vp +.ná1 +.náø4k +.o2 +.o4bé +.ode3 +.od3l +.od3rá +.o4ka +.o4ko +.o4na +.o4ne +.o4ni +.o4no +.o4nu +.o4ny +.o4nì +.o4ní +.o4pe +.o4po +.o4se +.o4sl +.os4to +.os3t3r +.os4tì +.ot3rá +.ot3v +.o4tí +.o4tø +.ovì4t +.o4za +.oz3do +.o4zi +.o4zo +.o4zu +.o4¹k +.o4¹l +.o4¾i +.p2 +.pa4re +.pa3tø +.polk4l +.po3è4 +.p4ro +.p4rý +.p4se +.pu3b +.r2 +.rej4 +.re3s +.ro4k +.roze3 +.roz3r +.ru4dl +.s2 +.s4ch +.s4ci +.sem4 +.se3pn +.s4ke +.sk4l +.s4ká +.s4le +.s4na +.s4ny +.s4pe +.s4po +.st2 +.s4tá +.s4¾i +.t2 +.u2 +.u4ba +.u4be +.u4bi +.u4bo +.u4de +.u4di +.u4do +.u4du +.u4dí +.uh4n +.uj4m +.u4ko +.u4ku +.ul4h +.u4ma +.u4me +.u4mi +.u4mu +.u4ne +.u4ni +.u4pa +.u4pe +.u4pi +.up4n +.u4po +.u4pu +.u4pá +.u4pì +.u4pí +.u4ra +.u4ro +.u4rá +.us2 +.u4so +.u4st +.u4sy +.u4sí +.ut2 +.u4vi +.u4ze +.u4èe +.u4èi +.u4èí +.u4¹e +.u4¹i +.u4¹k +.u¹4t +.u4¹í +.u4¾i +.u¾4n +.u4¾o +.u4¾í +.v2 +.va4dl +.v4po +.vy3 +.v4zá +.vý1 +.v4¾i +.y4or +.y4ve +.z2 +.za3 +.zao3s +.zar2 +.zaè2 +.zd2 +.z4di +.z4dr +.z4ky +.z4mn +.z4no +.z4nu +.z4nì +.z4ní +.z4pe +.z4po +.z4tø +.z4ve +.z4vi +.è2 +.è4te +.é2 +.í2 +.ó2 +.¹2 +.¹e3t +.¹4ka +.¹4ke +.¹4ky +.¹4»o +.¹4»á +.ú2 +.ú4dù +.¾2 +a1 +2a. +aa3t2 +ab3lon +ab4lý +ab3ri +ab4sb +ab2st +ac4ci +a2d +a3da +a3de +a3di +ad2la +a4dli +a4dlá +a4dlé +ad4me +ad4mu +a3do +ado4s +a3d3ra +ad3ri +a3dr¾ +a3du +a4du¾ +3a3dva +ad3vo +a3dy +a3dá +a3dé +a3dì +a3dí +ad4úz +ad4úø +a3dù +a3dý +ae4vi +afi2a +a2g +a3ga +ag4fa +a3go +ag3ro +a3gu +a3gá +ah4li +ah3v +a2i +a3in +ai4re +a3iv +a2jd +a2jm +aj4me +aj2o +a2k +a3ke +a3ki +a3kl +ak4ni +a3ko +a3kr +a3ku +a3ky +a3ká +a3ké +a3kó +a3kù +a3ký +al4fb +al4kl +al4tz +al3¾í +am4bd +am4kl +am4nu +amo3s +am4¾i +a4nae +a4name +an4dt +ane4sk +aneu4 +an4sc +an4sg +an4sl +an4sm +an2sp +an4sv +an4tè +an4¾h +ao4ed +ao4hm +ao4stø +ao4tè +ap4r. +a4pso +ap3t +a4pø. +a2r +a3ra +ar4dw +a3re +a4rer +ar4gl +a3ri +ar4kh +a3ro +a4rox +ar3st +a3ru +ar2va +a3ry +a3rá +a3ró +ar3¹2 +ar4¹r +a3rù +arùs3 +a3rý +a2s +a3sa +a3se +a3sh +a3sin +as3ná +a3so +as3pi +as4tat +a4stk +as4tm +a4stru. +as3tv +a3su +a3sv +a3sy +a3sá +a3sé +a3sí +a3sù +a2t +a3ta +at4ch +a3te +a3ti +a4tio +at4kl +at3lo +a3to +a3tr +at3re +at3ron +at3rov +a4tru +at4rá +at4th +a3tu +a3tv +a3ty +a3tá +a3té +a3tì +a3tí +a3tó +at1ø +a4tøí. +a3tù +a3tý +a2u +au4gs +a3uj +auj4m +aus3t +a3uè +2av +av3d +av4d. +av3lo +a4vlu +a4vlí +av3t +av4ti +2ay +ay4on +az3k +az3la +az4lé +az3ni +a3zp +a2è +a3èa +a3èe +a3èi +a3èl +aè4má +a3èo +a3èu +a3èá +a3èí +a3èù +a2ò +a3òo +a3òu +aøe4k +a3øí +a4¹pl +a4¹py +a2» +aú3t +2b. +3ba. +ba4br +ba4chr +ba3ka +ba4se +2b1c +b1d +be4ef +be4et +bej4m +be3p +beu4r +be2z3 +beze3 +b1h +1bi +bi2b3 +bis3 +bist4 +bi4tr +b1j +2bk +3bl. +bl4bl +b2lem +b2les +3blk +b4lán +b2lém +b1m +2bn +1bo +bo4et +bo4jm +bo4ok +bo4tr +bou3s +bo4¹k +b2ral +b2ran +2bri +b4rodit +b4rou +broz4 +b2ru +b3ru. +b3rub +b2rán +2b1s2 +bs3tr +2b1t +btáh4 +bu2c +bu4en +3by. +bys3 +by4sm +by4tè +by4zn +b2z +1bá +2b1è +bé4rc +1bì. +bì3ta +1bí +3bín +bí4rc +2bò +b3øa +b3øe. +bøe4s +b1øí +2b¹2 +2c. +1ca +cad4l +ca4es +2cc +1ce +cech4 +ced4l +celo3 +ce4ns +ce4ov +ce4ps +cer4v +ce2u +2ch. +1cha +4chalg +3che +4che. +2chl +ch4ly +ch4mb +2ch3n +2cht +4chte +1chu +ch4u. +1chy +1chá +2chø +1ci +cien4c +cik4l +2ck2 +c4ket +ckte4rý +2cl +c3la +c3lé +2cn +1co +co4at +co4mm +co4¾p +c2p +2ct +c2ti +ctis4 +ct4la +ct2n +c3tv +c2tì +cuk1 +1c2v +cy2 +1cá +1cí +cí4pl +2cò +1cù +2d. +1da +da3d +da4j¹ +da4kl +da4tr +d1b +d2ba +4dbat. +d2bá +2d1c +dch4l +3dch4n +d1d +dd4ha +1de +de4bre +de3hn +de3jd +dej4mo +de3kl +de3kv +de2na +de2oz +de3sl +de4sm +de4so +de2sp +des4t +de3str +de1x +de4xt +de2z +de3zn +dez3o +de3èt +de4¾p +2d1h +1di +di4gg +4dind +dis3k +di4so +d1j +dj4us +2dk +d3kv +3dl. +d1la +d4lab +d4lak +d3li +1dln +d2lou +d3lou. +d2lu +d3luè +d4lá¾ +d1lé +2d1lí +d2lù +d1m +1dmd +dmý¹4 +2dn +1do +4dobl +4doboj +dob4rat +do3by +do3bì +do3bý +do1d +4do4dd +4do4dj +dod4n +do3h +doj4m +4dokn +4doly +do3mn +domoh4 +do3p +do4pc +dop4n +dor2v +do1s +dos4p +dos4tiv +do3t +do3uk +do3uè +do3z2 +doz4n +do3è +4do4èn +doè4t +do4¾p +4dran +d4rap +d1re +d4ren +3drobn +d3ros +d3rou +d3ro¹ +dr4sc +d3ru¹ +d3ré +d3rý +d4rýv +2d1s2 +ds4kù +ds4po +d1t +d3tl +d3tø +1du +dum3ø +du3na +du3p +du4pn +2dur +du3si +du4í. +d2v +d4vac +d3ve +d3vl +d3vr +d3vy +d3vá +d3vì +d3ví +1dy +dy4su +d3zb +d3zd +d3zn +1dá +2d1è +1dé +1dì +3dìj +1dí +2dò +d1øa +døe4k +d4øep +døe4pn +d4øev +d1øí +d2øít +2d¹2 +d3¹k +d3¹t +1dù +3dù. +dù3s +1dý +d2¾2 +2e. +e1a +ea3dr +e2ar +e1b +eb4er +ebez2 +eb4li +e2bø +e4ch. +e3chl. +e4chm +e3cho +e2chr +e3chv +e4ch» +ed4be +ed4kv +ed1l +ed2ma +e3dmn +ed3v +ed4øí +e1e +ee4th +ee3xi +eg4gi +e1ha +e1he +ehno4 +eh4nì +e1ho +e1hr +e1hu +e1hy +e1há +e1hý +e1i +eilus3 +ej3ag +e3jas +e1je +e3jed +ej3ele +e3jez +ej3in +e3jis +ej1m +ej3mo +e3jmu +ej1o +ej1u +eju3st +ej3v +e2k +e3ka +e3ke +e4kly +e3ko +e3kr +e3ku +e3ky +e3ká +e3ké +e3kó +e3kø +e3kù +e1la +e4lau +el4dv +e1le +e1lo +e1lu +e1ly +el4ze +e1lá +e1lé +e1lí +e1ml +e4mlí +emo3k +e1mr +e1my +e3má +e1mì +e1mí +e3mø +e3mù +e1mý +em3¾e +en4dv +enitos4 +en4sc +en4si +ent3r +e1o +eo3by +eoch3r +eod3l +eo4du +e4ole +eo1s +eo2st +eo4tø +eo3z +eo4zb +eo4zd +eo¹e3 +epa3t +e2pl +e4pni +ep2no +e4pný +epoè3t +epro4zø +ep4tl +ep4tm +ep4tn +e4ptu +epy3 +2er +e1ra +er4a. +e1re +e1ri +e1ro +er3s +er4s. +er4sn +e1ru +e1ry +e1rá +e1ré +e1rù +e1rý +e1s +e4sag +e2sce +e4sin +esi4s +e2sk +es4k. +e4s4kn +es3ku. +es3ky +es3ké +e2sl +e4s3li +e4sly +es2m +e4sp. +es4pe +e2st +e4st. +e4ste +es3ti¾ +es4tol +e4strou +es3tán +e1t +e4tki +e4tkr +e4tli +e4tly +et3ri +et3ro +et3rù +et1ø +et4ún +e1u +eu3b +eu3ct +eu3d +eu3k +eu3m +eu4m. +eu3n +eu3p +eu3r +eu4r. +e4ura +eu4ras +eu4rg +eu3s2 +eu3t +e4u4t. +eu4tra +eu4ts +eu3v +eu3z +eu3¾ +e3vd +eve4¹ +e3v2k +e4vsk +evy3 +evyjad4 +evypá4t +evy4èk +evì4tr +ex4ta +e3xu +ey4or +ey4ov +ezaos3 +ez4ap +ez4bo +ez3de +ez3dov +ez3du +ez4dì +e3ze +ez4ed2 +ez4ej +ez4el +ez4er +ez4es +ez4ez +ez4e¹ +ezis4 +ez4it +ez4le +ez4ná +ez4nì +ez4py +ez2t +ez4ác +ez4áh +ez4èe +e3zí +e3zø +ez4øe +e1á +eè4kat +e1èt +eè4te +e4èti +e4ètí +e2ò +e3òo +e3òu +e3òá +e3ón +e1ø +eøe4k +eø4ku +e3øí +e2¹ +e3¹e +e3¹i +e4¹ka +e3¹l +e¹4lá +e3¹o +e¹4to +e¹tíh4 +e3¹í +eú1 +eúmy4 +eú3n +eú3p +eú3t +eú3è +e¾í¹4 +1f +2f. +fe4in +fene4 +fe4ue +fi4em +fi4fl +f2l +f3lí +fló4r +fm4no +2fn +2fr +f4ran +f4ras +3frek +f1ri +2fs +fs4te +2ft +fu4ch +2fé +f2ú +1g +2g. +ga4uè +ge2s +ghou4 +3gic +3gin +gi4ím +g4lom +2g1m +2gn +g4noi +g4nos +go1 +go4hm +3graf +gu4el +gu4it +gu3m +gu4m. +gus4t +gu3v +2h. +ha4ag +ha4ar +ha4bl +ha4br +ha3dl +ha4dla +ha4ke +has3t +hatos4 +ha4yd +h2b +h2c +2hd +he4br +he4id +hej4s +he2s +he2u +he3x +hi4an +hi3er +hi4gh +hi4re +2hk +4hla. +h4led +h3len +2hli +4h3lo. +h3lob +h3lop +h3lov +h3luj +2h1ly +4hlá. +h4lás +h3lí. +4hlík +2hlý +h2m +2h2n +h3ne +h4ned +h3niv +h4noj +3hnìd +3hodin +ho3str +hos4tì +4hove +4hovna +4hovny +4hovná +4hovnì +h2r +hra4p +2h1t +h4tin +h2tì +h4tít +hu4ch +hu3mo +hu4tò +2h2v +hyd1 +hy4do +hy4ps +hys3 +hy2t3r +hy4zd +h1è +2hò +hø2 +hø4by +hý4bl +h2¾ +2i. +i1a +ia3d +ia3g2 +i4al. +ias4t +ia4tr +i1b +ib2l +i2b1r +i1ch +i4ch¾ +i1d +id4ge +id2l +id4lo. +i4dlý +i1em +i1en +i1et +if1r +ig4ne +i1h +i2hl +i3hl. +i4hli +ih3n +ih4na +i3im +i1j +ijed4 +ij4me +ij4mi +i2kl +ik3le +ik3lo. +ik3m +ik4ry +i4kve +ik4úø +i1l +il4ba +iliè4n +i4lnu +ilu3 +i1m +i4mla +i4mly +i4mun +i2n +i3na +ina3d +in4cm +in4dl +i3ne +3infe +in4gh +in4gp +in4gs +in4gt +i3ni +i3no +i3nu +i3ny +i3ná +i3né +i3nì +i3ní +in4¹p +i3nù +i3ný +i1o +io4sk +i2ps +i1r +iro4s +i1sa +is3c +is4ch +is4k. +is3ka +is3ke +is3ko. +is3kr +is3ku +is3kv +is3ky +i3slav +is3lo +is3lé +is3pl +is3po +is1t +is4tal +is4tat +is4th +ist3v +is3tí +i1sy +i3sá +i1t +it1r +it4rh +it4rp +it4se +it4su +i2tv +i1um +iv3d +i1x +ix4td +i3zp +iz1r +i1á +i1èl +iè3t +iè4tl +iè4to +i2ï +i1é +ié4re. +i1íc +i1ím +i1ó +i1ø +iø4kl +iø4èe +i2¹ +i3¹e +i3¹i +i¹3k +i¹4kr +i¹4kv +i3¹o +i¹4to +i3¹u +i3¹á +i3¹í +i2¾ +i3¾a +i3¾e +i3¾i +i3¾o +i3¾u +i3¾á +2j. +ja2b2 +jac4k +ja4cq +ja3d +ja3g +j3akt +j1b2 +jbyst3 +2j1c +j2d +j3dob +j3dok +j3dos +j3dr +j3dá +jd4øí +j3dù +jech4 +j3ef +j3ex +jez3dí +jg4ra +2j1h +1ji +ji4ch +jih3l +ji4m¾ +j4ina +jis3k +jit4ro +ji2zv +j1j +2jk +j3kv +2j1l +j2m +j3ma +j3mi +jmou3d +2jmí +2jn +jne3 +j1ob +j1od +jod2ø +j1oh +j1op +j4ora +j1os +jo3sv +j2ov +j3ovl +j1o3z2 +2jp +jpor4 +jpo4zv +jpøíz4 +2j1r +2j1s2 +j4sem +j4si. +j4sk. +js4ko +js4ká +j4s4kù +j4s4me +j3sn +j4sou. +j4souc +js4po +j4s4te +2j1t +j3tl +ju4an +ju3na +ju3p +j1us +ju3sp +ju3t +ju4t. +ju3v +ju4xt +ju3z +j1u¾ +ju3¾i +2jv2 +j3vd +j3vn +2jz +j3zb +j3zd +j3zk +j3zn +j3zp +jád2r +2j1è +2jï +1jí +j3¹t +j¹4ti +j3¹» +2jú1 +jú3n +jú3è +jú3¾ +2j¾ +1k +2k. +ka4bl +ka4ch +ka3dl +3kaj +ka3ka +3kami +3kanì +ka2p3l +ka2p3r +ka2ps +ka4pv +ka2pø +kas3t +kast3r +3kat +ka4uè +3kav +3kaè +3kaø +ka¹3l +ka4¹p +2k1c +k2d +k2e +ke4bl +ke3jo +ke4pr +ke4ps +3ket +2kf +2kk +k2l +3kl. +4k3la. +k3lej +4k3li. +k4lib +k3lic +4klièka +4klo. +k3los +2k3ly +k3lá. +k3lé +k3ló +k3lý +2k2m +k3mì +2kn +kna4s +ko3by +3kof +ko4jm +ko2pø +ko4sk +ko2t3v +kous3k +3kov +ko3zá +4kroa +k3rob +k3rof +kr2s +kr4ú. +2ks +2k1t +kt2r +kuch4 +ku4fø +ku4hr +3kuj +ku3se +ku3si +ku3su +ku4th +ku3v +2k2v +k4vrò +3kyn +ky2pr +kyp3ø +ky4zn +3kác +ká4pl +3kár +3káø +2kè +k2ò +k2ø2 +k3øej +k¹4ti +3kù. +2l. +1la. +la4br +lab4s +la3ka +la4nq +la4ps +4la3si +la4v¹ +la4y. +la2zm +2l1b +2l1c +2l1d +ld4ne +le4ad +le4au +lech3t +leh3n +le2i +1lej +le3jo +4lej¹k +1lel +4lench +lepa3d +lepo4s +le4pr +le4ps +le4sc +le4sm +le4sv +let4li +let3m +le2tr +le4tè +le4uk +le4vh +le4vk +le3xi +lez3n +2lf +2lg +2lh +3lhan +1li +li4az +li4bl +li4bv +li4dm +lind4 +3lio +li4tò +li4vr +2li¾ +2lj +2lk +l4kat +l2kl +lk4nu +2ll +2l1m +2ln +l4nul +lo3br +lo4id +lo4is +1los +lo3sp +lo3stø +lo3sv +lo2tr +lo4tø +lo4u. +lo3z +loz4d +lo4¹k +2lp +l2pì +2l1s2 +l4sla +ls3n +lst4n +l4stí +2l1t +lt4ra +lt4ru +lt4ry +lu4id +lu4j. +lu4k. +lu4lk +lu4m. +lu4mn +lu3pr +lu3va +lu3vl +lu3vy +lu3ví +2lv +2lz +1lá. +lá4j¹ +lá4v¹ +2l1è +1lé. +1lík +lí4pl +lí4zn +1líø +2lò +2l¹2 +l3¹t +l4¹tý +1lù +1lý +lý2t +2l2¾ +2m. +1ma +maj4s +ma4kl +ma4kr +4mald +mas3k +mat3r +ma4tra +ma4v¹ +maz3l +2m1b +2m1c +2m1d2 +m2dl +1me +3me. +me4go +me4is +met3re +me3x +mezi3s +2mf +mh4le +1mi +mid3l +mik3r +mi4xt +2mk2 +3m2kl +mk4la +mk4li +m2l +4mla. +2mle +ml3h +ml4h. +2mli +ml4sc +ml4sk +4mlu. +2mn +m3na +mna4s +m4noh +m3nos +m4noz +3mno¾ +m3ná +m3né +m4néz +m3nìj +m3ný +1mo +mod3r +mo2hl +mo2k +mo2s +mo4s. +mot3ø +4mout +moza4 +mo3zø +moú3 +2mp +m4plo +mpo4s +m2ps +mp4se +mp2t +mr2s +2m1s2 +m4stl +2m1t +1mu +mu4fl +mu3n +mu4n. +mu4nd +mu4nn +mu4ns +mu4n¹ +2mu¹ +2mv +mys3lo +my4¹k +2mz +3má. +málo3 +má2s +2mè +m2èe +mí1c +mí4rò +2m2¹ +m¹4èi +m¹3» +m¹4»an. +3mù. +3mý. +m2¾ +1n +2n. +3na. +na3ch +na4do +na4em +na3h +na4h. +na3jd +na3ka +nam4ne +na3p2 +na3s2 +na4s. +nat2 +na3tl +na3tø +na3z +naz4k +na4z¹ +na4è. +na3¹ +na¾4n +2nb +2n1c +n4chc +2n1d +nd4hi +ndo4t +nd2re +nd4ri +nd4øí +ne1d +ne4gl +ne1h +ne3h4n +ne2j +nej3t +nej3u +ne3kl +ne4kro +ne3kv +ne4m. +ne3p +ne3s2 +ne4s. +nes4le +ne4ss +4nesti +ne3tl +net4r +ne3ud +ne3v2 +ne4v. +ne3z +nez4n +ne3¹k +ne3¹» +2nf +n3fr +2ng +ng1l +ng4la +ng4le +ng4lí +n4gro +ng4vi +nik4t +ni4mr +ni4m¾ +3nio +3nisk +2nitø +n1j +2nk +2n1l +2nn +no3b2 +no4bs +no3hn +no4hs +no4ir +no4m¾ +no4sky +no3sm +no3str +not4r +no3z +no4zd +no4¹k +2no¾ +2n1s2 +n2sa +ns3ak +ns4ko +n4soc +ns3po +nst4ra +2n1t +nte4r3a +nt4lem +nt4r. +nt3ru +nt3rá +2nub +nu4gg +3ny. +2nz +3nák +ná3s2 +ná4s. +2n1è +2nï +2nív +2ní¾ +2nó +2n¹2 +n3¹t +n¹4»o +nù2 +2n¾ +2o. +o1a +oang4 +o1ba +o1be +obe3j +obe3s +obe3z +ob1l +ob1r +ob4rò +o1bu +obys4 +ob3z +o3bé +ob3øez +o1c +o4chl +o2chr +oc4ke +oc4ko +o4ct. +oct3n +ocy3 +oc4ún +od3b +odej4m +ode3p +ode3s +od1l +o4doc +odos4 +odo4tk +od3ra +od4ran +od3rù +o3dr¾ +od3v +od1ø +o1e2 +oe3g +oe3ti +o2fl +ofrek4 +og2 +o3gn +o1h +oh4ne +o1i +oi4ce +o4int +o1j +o4jar +oje4dl +o4jmi +o4jmov +o4jmu +o4jmù +oj2o +o4juz +2oka +ok2te +o1l +ol4gl +ol4to +o1m +om4kl +om2n +o2n +o3na +ona4s +o3ne +o3ni +o3no +ont4ra +o3nu +o3ny +o3ná +onáø4ka +o3nì +o3ní +o3nù +o3ný +o1o +oo4hø +oote2 +opoè3t +opro4s +o2ps +o4ptu +opá4t +o4pø. +opøej4 +opøe4jm +o1ra +o4rae +or4dm +o1re +o1ri +o1ro +or3st +o1ru +or4vá +o1ry +o1rá +o3ré +o1rù +orùs3 +o3rý +o1sa +o4sai +ose4s +osi4d +o1sk +o4s3ke +o4sku +osk3v +o4ská +o4ský +o1sl +os4la +os4li +os4lý +os3mo +os4mu +o4st. +o4stg +o4stm +os4tor +os3trù +o4sté +o4st¹ +o4stý +o1sy +o1t +ot4kl +o4tlý +oto3s +ot3ro +ot3ví +o3tí +o3tø +ot3øi +o2u +ou3bì +ou3dì +ou4fl +ou4il +ou4is +ou4k. +ou3ka +o4ukl +ou3kr +ou3ká +ou3m +oup3n +oupo4 +ou4s. +ou3sa +ou3se +ou4sk +ou3sm +ou4tv +ou3v +ou4vl +ou4vn +ouz3d +o4uèk +ou3¾i +ovi4dla +o4vsk +ovy2p +o2v¹t +o1x +o2z +o3za +oz1b +oz4d. +oz3dá +oz3dì +oz3dí +o3ze +oze3d2 +ozer4 +oz1h +o3zi +oz3j +oz3k +oz4ko +oz1l +oz3m +o4zn. +o3zo +oz3p +oz4py +oz4pì +oz4pí +oz3ro +oz3ru +oz3rù +oz3t +o3zu +o4zut +oz3vr +oz3vá +o3zí +o3zù +ozù4s +o1è +oè2k +oè4ka +o2ò +o3òa +o3òo +o1ø +oøi2s +o3¹k +o4¹ku +o4¹ky +o3¹l +o¹4lá +o¹4mo +o¹4ti +o¹4»u +o3¾l +o¾4mo +1p +2p. +pa4ed +pa4es +pa4kl +pa3si +pa4t. +pat4ri +2p1c +pe4al +pede4 +pe4ig +pe4np +peri3 +pes3t3 +pe4tra +3peè +pi4kr +pi4pl +2pk +p2kl +p2l +3pl. +4p3la. +pl3h +pl4h. +4p3li. +4plo. +2pn +p2nu +po1b2 +po3c2 +3pod +podbì4h +pod4nes +po3dru +po3drá +po3h +poly3 +po3m2 +po4mp +po4ol +po3p +po4p. +po4pm +po1s2 +pos4p +post4r +po3t2 +po4t. +po4tn +po3uk +po3uè +po3u¾ +3po3v +po3z2 +po4zd +poè2 +po3èk +poè3te +po3øí +po4¹v +2pp +4pra. +pra3st +pr2c +pro1 +prob2 +pro3p +pro3t4 +pro3z +pr2s +4prán +prù3 +pse4s +2p1sk +p4sut +2pt +p4tej +p4ter +p4tev +pt4ri +p3tu +p4tá. +pu4dl +pu4tr +pyt3l +pá1 +pá2c +pád3l +pá4nv +pá4sl +2pè +pé4rh +2pø. +pøe3h +pøe3j +pøe3t4 +pøe3z +pøe3è2 +pøi3 +pøih4 +2p¹ +p¹4ti +2p» +qu2 +2r. +1ra. +ra4br +ra4em +ra4es +ra4ff +ra4hl +ra4hm +ra4jg +ra4j¹ +2rak +ra4nh +ra3si +rast4r +ra4vv +ra4wl +ra4y. +ra4yo +ra4ïm +4ra¾i +r1b +r2bl +r1c +rca3 +r3cha +r3cho +rc4ki +r1d +r4dla +rdo2s +re4ad +re4au +red4r +re4et +re3kl +re3kvi +re4mr +re2sb +res3l +retis4 +ret4r +re4um +r1ha +r3hl. +rh3n +r1ho +r3hu +r1há +ri4bb +1ric +ric4ku +ri4dg +ri4dr +ri4fl +ri4gh +ri4zm +2rk +r2kl +r1l +2r1m +r4mio +2rn +rna4v¹ +rn4dr +ro4ad +ro3by +rod2l +ro3d4r +3rofy +ro3h +ro4h. +ro4jb +ro4k¹ +rom3n +romy4s +ropát4 +ro2sb +ro4skv +ro4sky +ro3sv +ro3ti +ro3tl +ro4tè +ro3vd +rovì4t +3rový +roz3d +roz3n +ro4zo +roz3v +ro3zá +ro4èp +rpa3d +2rr +rr4ha +rr4ho +2r1s +r2st +r4stu +rs3tvì +rs3tvý +2r1t +r2th +r4trá +rt4sm +rtu3 +r2t3v +rt4zu +1ru. +ru3se +ru3si +rus3k +ru3¾i +3rvaní +r1x +1ry. +rych3 +ryd2 +rys3ky +rys3t +ry4zk +ry4zn +ry4í. +ry4¹k +2rz +rz3d +rz3l +rád4l +rá4d¾ +1rák +rá3ri +1ráø +r1è +4rèitý. +rè3t +3ré. +2ró +2r¹ +r¹4ní +rù4m. +rùs3ta +rù4v. +3rý. +rý4zn +2s. +sa4pf +sa4pr +sas3k +s2b2 +s2c +s3ca +s3ce. +sch2 +sch4l +sch4n +3schop +s3ci +sci4e +s3cí +s2d +1se +se4au +se3h +se4ig +se4il +sej4m +se4ku +3sel +se3lh +3sem +ser4va +se3s2 +ses4k +se4ss +se4stra +se4stru +se4stø +set2 +se3tk +se3tø +se4ur +se3z +se3èt +2sf +s3fo +3sfé +s3fú +1si +3sic +3sif +si4fl +sig4no +3sik +si3ste +3sit +s2j +s3ju +s2k +4skac +s4kak +4skam +s4kok +2skon +skos4 +4skot +sk4ra +sk4ru +sk4ry +4skve +sk4vo +s3kán +s3kù +3sl. +4s3la. +s4lav +s3le. +s4led +s3lem +s3len +s3let +s4lib +s4lièi +3sln +4s3lo. +s2ly +s3ly. +s1lí +s2ma +s4mek +s2mo +2sn +s2na +s3nat +s2ne +s3ne. +sn4tl +s2ná +s3ná. +s4níd +1so +sob4l +so3br +so4sk +so4tv +sou3h +sou3s +souz4 +so4¹k +s2p +s4pol +spro4s +1sr +2ss +ss4sr +2st. +4sta. +s3taj +s2tan +st4at +4stec +s4tep +st4er +s4tero +s4tich +2stil +s4tink +4stit. +4stiè +st3lo +2stn +4sto. +s4tona +4stou. +4str. +4stram +s4trik +4strn +4strác +4stupni +s2tv +st4ve +3ství +4sty. +s4tyl +3sty¹ +s2tá +4stá. +s3táø +4stì. +s4tìd +3stìh +s2tìr +s2tì¾ +s1tí +2stí. +s3tøej +1su +su4ba +su4bo +suma4 +su3ve +s2v +sy3c +sych3r +sy4nes +sá2d +3sáh +sá2kl +2s2è +s3èi +1sé +1sí +2sò +2s» +s3»o +1sù +s2¾ +2t. +1ta. +ta2bl +tac4tvo +t2a3d +1taj +ta4jf +ta4jg +4talt +4tand +3tanì +t1ao +2tark +tast4 +ta3str +ta4èk +2t1b +2t1c +1te +3te. +te4ak +te4fl +te4in +4teném +teob4 +tep3l +ters4 +tes3ta +te4tr +te4uc +te4ur +te4ut +2tf +2tg +1ti +ti4gr +2tih +ti3kl +tin4g +ti4pl +ti3sl +tis4tr +ti4tr +2titu +tiz4r +4tizí +tiú3 +2ti¾ +2tk2 +t4kal +4t2kan +t4kat +t2kl +tk4la +tk4li +4tknì +t2ká +2tl +3tl. +4tla. +t1le +tles3 +3tlm +t3lo. +t4lou +tlu3 +tlu4s +t1ly +t1lé +2tm +t2ma +2tn +t3ní +1to +to4as +to3b +tob4l +to3dr +to4hm +to4ir +2toj +tol4s +to4ol +4top. +4topt +4topu +2torn +2toup +2tp +t3rant +t4rea +t4ref +tre4t +4tric. +trip4 +t4rit +t4rog +t3rol +tro4sk +t4rou +4trouh +4troò. +4trun +t4rus +4t4ru¾ +t3ráln +4trá¹ +2trè +t3rùm +t3rùv +2trý +2t1s +ts4ko +ts2t +2t1t +tt4ch +tt4ri +1tu. +tu4ff +1tuj +tu4lk +2tup +tu4r. +tu3ry +tu4s. +tu4». +tu3¾i +t2v +2tve +2t3vi +t4vinn +t4vi¹ +t4výc +1ty. +ty4gø +ty2la +ty4øe +ty4øh +ty4øj +ty4øo +ty4ør +ty4øú +3tá. +tá4fl +t2è +t3èi +2tèí +1té +té2bl +3tém +1tì +tì3d4l +2tìh +2tìnn +2tìp +1tíc +4tíc. +4tíce +1tím +2tín +2tír +2tø +t4øeb +tøeh3n +t2øel +t2øic +t3øil +tø4ti +t1øu +t2øá +3tøáb +tøí4s +2t¹ +t3¹t +t¹4ti +1tù +1tý. +1tým +1týø +3tý¹ +u1 +2u. +u2at +u2b +u3ba +u3be +u3bi +u3bo +ubs4t +u3bu +u3bá +u3bí. +u3bù +uc4tí +2u2d +u3de +u3di +u3do +u3dru +u3du +u3dy +u3dí +ue4fa +2uf +u2hl +uh3lá +uh3no +u2in +u2jm +u2k +u3ka. +uk4aj +uk4al +uk4at +u3ke +uk3la +uk3le +u3ko +u3ku +u3ky +uk4á. +u3kù +ul4fa +ul1h +ul4pí +u2m +u3ma +u3me +u3mi +um4pl +um4ru +u3mu +u3má +3umø +u2n +un4dl +u3ne +u3no +u3nu +u3nì +u3ní +u3nù +un4¾r +u2p +u3pa +u3pe +upe2r3 +u3pi +u3pln +u3pu +u3py +u3pá +u3pì +u3pí +u3pù +u2r +u3ra +u3re +u3ri +2u3ro +u3ru +u3ry. +u3rá +1urè +u3rù +u2s +us3ky +us3ká +us3ké +us3ký +us1l +us2lo +u3so +u4ste +u4sty +u4sté +u4stì +u3stø +u4st¹ +u4stý +u3su. +u3sy +u3sá +u3sí +u3sù +u4tro +u4trá +u2v +u3vi +u3vu +u2z +u3ze +u3zi +uz1l +u3zo +u3zu +u3zí +u2è +u3èa +u3èe +u3èi +u3èo +uè3t +u3èu +u3èá +u3èí +u2ï +u2ò +u2¹ +u3¹e +u3¹i +u¹4kl +u3¹o +u¹3tí +u3¹u +u3¹á +u3¹í +u2¾ +u3¾e +u3¾o +u3¾u +u3¾á +u3¾í +1v +2v. +va3dl +va4j» +va4kl +2v1b +2v1c +v2ch +2v2d +v4dal +v3di +v4dìk +v4dìè +ve3dle +ve3jd +3ven +ve2p +ve3ps +vep3ø +ves3l +ve4sm +ves4p +ve3sta +ve3t4ø +ve2z3m +vi4ch +vide2 +vi4dr +vi4et +vi4kr +vi2tr +2vk +v2kr +v2l +2v3la. +4vle. +4vlem +2vlo +2vm +2vn +v4nad +vo3b +vo4ic +vo4ja +vo4jb +vo4jd +vo4jj +vo4jm +vo4jø +vo2s +vo4tø +vou3 +vous2 +v2p +vr2c +vr2dl +4vrny +v1ro +vr4st +vrst3v +vrs4tvì +2vs2 +v1sk +v3stv +2v2t +vy3c +vy3d2 +vy4dra +vyp2 +vy3s2 +vy4sn +vys4t +vy3t +vy3è +vyè4k +vy¹2 +vy4¹. +vy4¹m +vy4¹¹ +vy4¾l +v2z2 +vz4no +vz4né +vz4nì +vz4ní +vá3ri +2v2è +v3èá +v3èí +v4èír +vì4cm +vì3t4a +více3 +ví4hat +3vín +2vò +2vøí +v3øín +v2¹2 +v¹e3s +v3¹tí. +3výs +vý3t +3vý3z +v2¾2 +wa4fd +3war +wa4re +we2 +2x. +xand4 +2xf +xisk4 +2xn +3xov +x1t +xt4ra +xy4sm +y1 +y2a +y2bl +yb3ri +y2ch +y4chr +y2d1l +yd4lá +y2dr +yd4y. +y2e +y2gr +y3hn +yh4ne +yj4ma +yj4me +y2kl +yk3la +y3klop +yk4ly +ymané4 +ym4kl +yna4s +y3ni +ype4r +yp4si +yp4tá +y2pø +yr2v +y2s +y3sa +y3se +y3si +ys3lu +y3sm +y3so +y3sp +ys2t +ys3te +yst4r +y3su +y3sv +y3sy +y3sá +y3sé +y3sí +yt4me +yu3¾ +y3vs +yvì4t +y3zb +y3zd +y3zk +y3zn +yz4nì +yz4ní +y3zp +yz4po +yè2k +y2ò +yø3b +yøk4n +yø4èe +y3øí +y2¹ +y3¹e +y3¹i +y3¹k +y¹1l +y3¹o +y3¹p +y3¹u +y3¹í +y¾2 +y3¾d +1z +2z. +zab2l +za4bs +za4dk +za3dl +za4dn +za3h +za3i +za3j +za4jk +za3k +za4kt +zal4k +zam4n +za3p2 +za3s2 +zat2 +za3tl +zat4r +za4ut +za3z +zaz4n +za4z¹ +za4è. +za3¹ +za¹4k +za4¹s +2zb +zban4 +z2by +zbys4 +2z1c +2z2d +z3di +zdnì4ní +z4doba +z4dobný +zd4re +zd4ví +z2e +ze3h +ze3p2 +4zerot +ze3s2 +zes4p +zet2 +zev2 +ze3vn +ze3z +ze4z. +2z2f +z1há +z4ine +z2j +z3jí +2z2k +z3ka. +z3ky +z3ké +z3kù +z3ký +2zl +3zl. +zlhos4 +zlik3 +z3ly. +z2m2 +2zme +z3mn +z3my +z4mìn +2z2n +3znak +z4nal +z3ne. +z3nic +z3no +z3nu +z3ny +z3né +z3nì +z4nìl +z3ní +z4nít +z4nív +z3ný +zo4tr +zo4¹k +2z2p +z3pt +z4pát +3zrak +2z1s2 +2zt +ztros3 +z4trá +z3tø +3zu. +zu3mo +zu3mì +zu3mí +zu3¹ +z2v +zva4d +z3vaø +z3vi +zvik4 +zv4nì +z3vod +z3voj +z4von +zv4ro +z4ván +z4vìs +z3víj +3zy. +2zz +zá1 +záh2 +zá4kl. +3záp +zá3s2 +zá3z +zá¹2 +2zè +z3èl +2zò +z2ø +zøej3 +z3øez +z3øe¹ +2z¹2 +z3¹k +z¹4ka +z3¹t +2z2ú1 +zú3è +zú3¾ +zù3s +á1b +á2bl +áb4ry +á4bø. +á3cho +ác3ti3 +á1d +á2dl +ádo4s +ádos4ti +ád1ø +á1ha +á3he +áh1l +á3hl. +áh3n +á1ho +á1hr +á1há +á1j +á4jmu +áj4mù +á4kli +ák4ni +á1la +á1le +á1lo +á1lu +á1ly +á3lé +á1lí +á3my +á3mé +á1mì +á3mí +á3mý +áne4v +á1ra +á1re +ár2m +á1ro +á1ru +á3rù +á1s +á2sc +á2s3k +ás4k. +ás4kl +ás4kn +á2sla +ás4ly +á2sm +ás4po +á2st +át3k +át1r +á1tu +á1ty +á1tí +á3tý +áv4si +áv4sí +áz3k +áz3ni +ázni4c +áz4vi +á2ò +á1ø +áø4ke +áø4kù +á2¹ +á3¹e +á3¹í +2è. +1èa +èa4br +2èb +2è1c +1èe +3èe. +èe1c +èes3k +1èi +2èk +è3ka. +è3ko +è3ku +è3ky +2è1m +2èn +è2ne +1èo +è2p +2ès +è1sk +ès4la +ès4sr +2è2t +è4tené. +è4tený +èt4la +è4tový. +3ètv +4ètìn +è3tí +1èu +1èá +1èí +èís3l +1èù +2ï. +1ïa +1ïo +ïs4te +2ï1t +3ïuj +é1 +é2d +é3di +é3do +é2f +é3fo +éf1r +é2kl +é2l +é2m +é3ma +é3me +é3mi +é3mo +é3mu +é3mù +4ére. +é2s +é2t +é3ta +é3to +é3tá +é2¹ +é2¾ +ì1c +ìd3r +ì3ha +ì3he +ì3hl. +ìh3lo +ìh3n +ì1ho +ì3hu +ì3hù +ì3ja +ì1je +ì1jo +ì3jù +ì4klé +ì3k2t +ì1l +ì1ra +ìra3d +ì1re +ì1ro +ìr3s +ìrs4t +ì1ru +ì1ry +ì1rù +ìs3k +ìs3n +ìt1a3 +ìt4ac +ìt1l +ì1tr +ìt3ra +ì4traj +ìt3v +ì1tí +ìt3øí +ì2v +ì3va +ì3ve +ì3vl +ì3vo +ì3vu +ì3vá +ìv3è +ì2z +ì3ze +ì3zi +ìz3n +ì3zo +ì3zí +ì1ø +ì2¹ +ì3¹e +ì3¹i +ì3¹o +ì3¹u +ì3¹á +ì3¹í +ì¹3» +ì¹4»s +ì2» +ì3»o +ì2¾ +ì3¾e +ì3¾i +ì3¾o +ì3¾u +ì3¾í +í1b +íb3ø +í3cho +ích4t +íd1l +í1h +í2hl +íh3n +í1j +íjed4 +íj4mù +í2kr +í1l +í1má +í3mé +í1mì +í1r +í1sa +í2s3k +ís4kl +ís4kn +ís4l. +ís3le +ís4ln +ísáh2 +í1t +ít3k +í3t3øe +íz3da +íz3de +íz3k +í3zna +í3z3ni +í3znìn +í2ò +í1ø +í2¹ +í3¹e +í3¹i +í3¹o +í3¹í +1ò +2ò. +2òa +òa3d +2òk +2òm +3òov +ò1s +2ò1t +ó1 +ó2z +ó3za +ó3zi +ó3zo +ó3zy +2ø. +øa4pl +øa4ïm +2ø2b +2øc +2ød +øe3ch +øe4dob +øe1h +øe3jd +øe3kl +øe3kv +øe4køí +øeo4r +øe3p2 +øe4p. +øe4pk +øe4pè +øer4v +2øes +øe3ska +øe3sko +øe2sp +øes3po +øe4sr +øe3sta +øe3stu +øe3stá +øe3stø +øe3tl +øet4ø +øe3zd +øe3zk +4øezl +øe3èt +øi1 +øia3 +øi3h +øi4h. +øi4hn +øi4jï +øi4l. +øi4lb +øil2n +4øine +øis2 +3øi4t. +øi4v. +øi4vk +øi4vn +øi3z +øiè4t +øi3ø +øi4¹. +2øk +ø2kl +øk4la +øk4li +øk4ly +øk4no +2ø1l +2ø1m +2øn +1øo +2øou +2ø2p +2ø1s +øs4to +2ø1t +ø2v +2øz +øá4pl +øá2sl +2ø1è +2øíd +øí4kø +øí1s +2ø¹ +ø3¹t +ø¹4ti +1¹ +2¹. +¹ab3 +¹a4vl +2¹1c +¹ej4d +¹ep3t +¹i4mr +2¹2k +¹3ka +¹3ke +¹3k3li +4¹3kou +4¹kov +3¹kr +¹k4ro +¹3ku. +¹3ky +2¹l +¹2la +¹2li +¹3liv +¹2lo +¹lá2 +¹2lé +¹2lý +2¹1m +¹mi4d +2¹n +¹2p +2¹1s +2¹t +¹4tip +¹t4ka +¹t4kl +¹4tìk +¹2tìs +¹4tìv +¹4típ +¹2v +¹í3d +¹2ò +¹3¹í +2¹2» +¹3»o +¹3»u +¹3»á +1» +2». +3»al +2»k +2»m +2»t +»áè4k +1ú +ú2c2 +ú2d +új4ma +ú2k +ú2l +ú2n +ú2p +ú2t +út4ko +ú2v +ú2z +úz3k +ú2è +3úèe +úøe4z +ú¹4ti +ú2¾ +ù1b +ù1c +ù1hl +ù3jd +ù4jmový +ù1le +ù1my +ù1mì +ù1ra +ùr4va +ùr4vy +ù1s2 +ù2st +ùs3te +ùs3tán +ùt2 +ù3tkl +ù2v +ù3va +ù3vo +ù3vì +ù2z +ù3zo +ù2¾ +ù3¾e +ù3¾i +ù3¾o +ý1b +ý3cho +ý1d +ýd4la +ý1h +ý1j +ý1l +ý1ml +ý1mì +ý2n +ý3no +ýpo3è4 +ý1r +ý1s2 +ý2sk +ý1t +ýt4ku +ýt4ky +ý1u +ý4vli +ý3zk +ý3zn +ý4zvu +ýè4nì +ý1ø +ý¹3l +1¾ +2¾. +¾a3d +¾a4tv +3¾aè +2¾1b +2¾1c +2¾1d +¾e2b3 +¾eh3n +¾e4ml +¾e4zg +¾i4dl +¾i4jm +3¾il +¾i2vl +2¾k +¾k4ni +2¾l +¾4lic +3¾lo +2¾1m +2¾n +¾on2 +2¾1s2 +2¾1t +¾2v +¾á4br +¾á4nr +2¾ï +¾í4zn +2¾ò +2¾¹ +¾¹4ti +¾¹4tì +} + +% Local Variables: +% coding: latin-2 +% End: +% +% End of file `hyphen.cs'. diff --git a/contrib/groff/tmac/hyphen.den b/contrib/groff/tmac/hyphen.den new file mode 100644 index 0000000000..1fb55dc04f --- /dev/null +++ b/contrib/groff/tmac/hyphen.den @@ -0,0 +1,811 @@ +% This is the groff hyphenation pattern file `hyphen.den' for German with +% hyphenation rules for the new orthography. +% +% It is based on the TeX pattern file `dehyphn.tex', revision level 31 +% (2001-05-07). +% +% Here is the copyright message: +% +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% dehyphn -- TeX-Trennmuster fuer die +% neue deutsche Rechtschreibung +% +% TeX hyphenation patterns for the +% new German orthography +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +% +% Copyright (C) 1988,1991 Rechenzentrum der Ruhr-Universitaet Bochum +% [german hyphen patterns] +% Copyright (C) 1993,1994,1999 Bernd Raichle/DANTE e.V. +% [macros, adaption for TeX 2] +% Copyright (C) 1998--2001 Walter Schmidt +% [adaption to new German orthography] +% +% ----------------------------------------------------------------- +% IMPORTANT NOTICE: +% +% This program can be redistributed and/or modified under the terms +% of the LaTeX Project Public License Distributed from CTAN +% archives in directory macros/latex/base/lppl.txt; either +% version 1 of the License, or any later version. +% ----------------------------------------------------------------- +% +% Please check the original file for more details. +% +% It has been made suitable for groff by expanding all macros to real +% characters in latin-1 encoding. +% +\patterns{% +.aa6l .ab3a4s .ab3ei .abi2 .ab3it .ab1l .ab1r .ab3u .ad3o4r .alti6 +.ana3c .an5alg .an1e +.ang8s2t1 +.an1s .ap1p .ar6sc .ar6ta .ar6tei .as2z +.au2f1 .au2s3 .be5erb .be3na .ber6t5r .bie6r5 .bim6s5t .brot3 .bru6s +.ch6 .che6f5 .da8c .da2r .dar5in .dar5u .den6ka .de5r6en .des6pe +.de8spo .de3sz .dia3s4 .dien4 .dy2s1 .ehren5 .eine6 .ei6n5eh .ei8nen +.ein5sa .en6der .en6d5r .en3k4 .en8ta8 .en8tei .en4t3r .epo1 .er6ban +.er6b5ei .er6bla .er6d5um .er3ei .er5er .er3in .er3o4b .erwi5s .es1p +.es8t1l .es8t1n +.ex1a2 .ex3em .fal6sc .fe6st5a .flu4g3 .furch8 .ga6ner .ge3n4a +.ge5rö +.ges6 +.halb5 .halbe6 .hal6br .haup4 .hau4t .heima6 .he4r3e +.her6za .he5x .hin3 .hir8sc .ho4c .hu3sa .hy5o .ibe5 .ima6ge .in1 +.ini6 .is5chi .jagd5 .kal6k5o .ka6ph .ki4e .kop6f3 .kraf6 .kü5ra +.lab6br .liie6 .lo6s5k .lö4s3t .ma5d .mi2t1 .no6th .no6top +.obe8ri .ob1l .obs2 .ob6st5e .or3c .ort6s5e .ost3a .oste8r .pe4re +.pe3ts .ph6 .po8str .rau4m3 .re5an .ro8q .ru5the .rü5be +.sch8 .se6e .se5n6h .se5ra .si2e .spi6ke .st4 .sy2n +.tages5 .tan6kl .ta8th .te6e .te8str .to6der .to8nin .to6we .um1 +.umpf4 .un1 .une6 .unge5n .ur1c .ur5en .ve6rin .vora8 .wah6l5 .we8ges +.we8s2t .wes3te +.wo6r .wor3a .wun4s .zi4e .zuch8 .ände8re .öch8 aa1c aa2gr +aal5e aa6r5a a5arti aa2s1t aat2s 6aba ab3art 1abdr 6abel aben6dr +ab5erk ab5err ab5esse 1abf 1abg 1abhä ab1ir 1abko a1bl ab1la +5ablag a6blaß ab4ler ab1lu a8blä 5a6blö abma5c +1abn ab1ra ab1re 5a6brec ab1ro +ab1s +ab8sk abs2z 3abtei ab1ur 1abw +5abze 5abzu ab1än abäu8 a4ce. a5chal ach5art ach5au a1che +a8chent ach6er. a6ch5erf a1chi ach1l ach3m ach5n a1cho ach3re a1chu +ach1w a1chy ach5äf ack1o acks6t ack5sta a1d 8ad. a6d5ac ad3ant +ad8ar 5addi a8dein ade5o8 adi5en 1adj 1adle ad1op a2dre 3adres adt1 +1adv a6dä a1e2d ae1r a1er. 1aero 8afa a3fal af1an a5far a5fat +af1au a6fentl a2f1ex af1fr af5rau af1re 1afri af6tent af6tra aft5re +a6f5um 8afä ag5abe 5a4gent ag8er ages5e 1aggr ag5las ag1lo a1gn +ag2ne 1agog a6g5und a1ha a1he ah5ein a4h3erh a1hi ahl1a ah1le ah4m3ar +ahn1a a5ho ahra6 ahr5ab ah1re ah8rei ahren8s ahre4s3 ahr8ti ah1ru a1hu +ah8ö ai3d2s ai1e aif6 a3inse ai4re. a5isch. ais8e a3ismu ais6n +aiso6 a1j 1akad a4kade a1ke a1ki 1akko 5akro1 a5lal al5ans 3al8arm +al8beb al8berw alb5la 3album al1c a1le a6l5e6be a4l3ein a8lel a8lerb +a8lerh a6lert 5a6l5eth 1algi al4gli al3int al4lab al8lan al4l3ar +alle3g a1lo a4l5ob al6schm al4the +al4t3re 8a1lu alu5i a6lur +alu3ta a1lä a6mate 8ame. 5a6meise am6m5ei am6mum am2n ampf3a +am6schw am2ta a1mu a1mä a3nac a1nad anadi5e an3ako an3alp 3analy +an3ame an3ara a1nas an5asti a1nat anat5s an8dent ande4s3 an1ec an5eis +an1e2k 4aner. a6n5erd a8nerf a6n5erke 1anfa 5anfert 1anfä 3angab +5angebo an3gli ang6lis an2gn 3angri ang5t6 5anhä ani5g ani4ka +an5i8on an1kl an6kno an4kro 1anl anma5c anmar4 3annah anne4s3 a1no +5a6n1o2d 5a6n3oma 5a6nord 1anr an1sa 5anschl an4soz an1st 5anstal +an1s2z 5antenn an1th 5anwä a5ny an4z3ed 5anzeig 5anzieh 3anzug +an1ä 5anäs a1nö anö8d a1os a1pa 3apfel a2ph1t +aph5ä6 a1pi 8apl apo1c apo1s +a6pos2t +a6poth 1appa ap1pr a1pr +a5pä a3pü a1ra a4r3af ar3all 3arbei 2arbt ar1c 2a1re ar3ein +ar2gl 2a1ri ari5es ar8kers ar6les ar4nan ar5o6ch ar1o2d a1rol ar3ony +a8ror a3ros ar5ox ar6schl 8artei ar6t5ri a1ru a1ry 1arzt arz1w +ar8zä arä8m arö6 ar5öm ar1ü2 a1sa a6schec +asch5l asch3m a6schn a3s4hi as1pa asp5l +as5tev 1asth +a1str ast3re 8a1ta ata5c ata3la a6tapf ata5pl a1te a6teli aten5a +ate5ran 6atf 6atg a1th at3hal 1athl 2a1ti 5atlant 3atlas 8atmus 6atn +a1to a6t5ops ato6ra a6t5ort. 4a1tr a6t5ru at2t1h at5t6hä 6a1tu +atz1w a1tä a1tü au1a au6bre auch3a au1e aue4l 5aufent +3auffü 3aufga 1aufn auf1t 3auftr 1aufw 3auge. au4kle aule8s 6aum +au8mar aum5p 1ausb 3ausd 1ausf 1ausg au8sin +au4sta 1ausw 1ausz +aut5eng au1th 1auto auße8 a1v ave5r6a aver6i a1w a6wes a1x +a2xia a6xio a1ya a1z azi5er. 8aß 1ba 8ba8del ba1la ba1na +ban6k5r ba5ot bardi6n ba1ro basten6 bau3sp 2b1b bb6le b2bli 2b1c 2b1d +1be be1a be8at. be1ch 8becht 8becke. be5el be1en bee8rei be5eta bef2 +8beff be1g2 behö8 bei1s 6b5eisen bei3tr b8el bel8o belu3t be3nac +bend6o be6ners be6nerw be4nor ben4se6 bens5el be1nä be1nü +be1o2 b8er. be1ra be8rac ber8gab. ber1r be1rü bes8c bes5erh +bes2p be5tha bet5sc be1un be1ur 8bex be6zwec 2b1f8 +2b1g2 +bga2s5 bge1 2b1h bhole6 1bi bi1bl b6ie bi1el bi1la bilä5 bi1na +bi4nok +bi6stu bi5tr bit4t5r b1j 2b1k2 bkü6 bl8 b6la. +6b1lad 6blag 8blam 1blat b8latt 3blau. b6lav 3ble. b1leb b1led +8b1leg 8b1leh 8bleid 8bleih 6b3lein +ble4m3o 4blich b4lind +8bling b2lio 5blit b4litz b1loh 8b1los 1blu 5blum 2blun blut3a blut5sc +3blä bläs5c 5blö 3blü blü8sc 2b1m 2b1n 1bo +bo1ch bo5d6s boe5 8boff 8bonk bo1ra b1ort 2b1p2 b1q 1br brail6 brast8 +bre4a b5red 8bref 8b5riem b6riga bro1s b1rup b2ruz 8bröh +brös5c 8bs b1sa b8sang b2s1ar b1sc bs3erl bs3erz b8sof b1s2p +bst1h b3stru b5stä b6sun 2b1t b2t1h 1bu bu1ie bul6k b8ure bu6sin +6b1v 2b1w 1by1 by6te. 8b1z +1bä b5ä6s5 1bü +b6ü5bere büge6 bügel5e bür6sc 1ca cag6 ca5la ca6re +ca5y c1c 1ce celi4c celich5 ce1ro c8h 2ch. 1chae ch1ah ch3akt cha6mer +8chanz 5chara 3chari 5chato 6chb 1chef 6chei ch3eil ch3eis 6cherkl +6chf 4chh 5chiad 5chias 6chins 8chj chl6 5chlor 6ch2m 2chn6 ch8nie +5cho. 8chob choi8d 6chp ch3ren ch6res ch3rü 2chs 2cht cht5ha +cht3hi 5chthon ch6tin 6chuh chu4la 6ch3unt chut6t 8chw 1ci ci5tr c2k +2ck. ck1ei 4ckh ck3l ck3n ck5o8f ck1r 2cks ck5stra ck6s5u c2l 1c8o +con6ne 8corb cos6t c3q 1c6r 8c1t 1cu 1cy 5cä1 cö5 1da. +8daas 2dabg 8dabr 6dabt 6dabw 1dac da2gr 6d5alk 8d5amt dan6ce. +dani5er dan8ker 2danl danla6 6dans 8danzi 6danzu d1ap da2r1a8 2d1arb +d3arc dar6men 4d3art 8darz 1dat 8datm 2d1auf 2d1aus 2d1b 2d1c 2d1d +d5de d3d2h ddämme8 1de 2deal de5an de3cha de1e defe6 6deff 2d1ehr +5d4eic de5isc de8lar del6s5e del6spr de4mag de8mun de8nep dene6r +8denge. 8dengen de5o6d 2deol de5ram 8derdb der5ein de1ro der1r d8ers +der5um de4s3am de4s3an de4sau de6sil de4sin de8sor de4spr de2su 8deul +de5us. 2d1f df2l 2d1g 2d1h 1di dia5c di5ara dice5 di3chr di5ena di1gn +di1la dil8s di1na 8dind 6dinf 4d3inh 2d1ins di5o6d di3p4t di8sen dis1p +di5s8per di6s5to +dis3tr +di8tan di8tin d1j 6dje 2dju 2d1k 2d1l 2d1m +2d1n6 dni6 dnje6 1do 6d5obe do6berf 6d5ony do3ran 6dord 2d1org dor4t3h +6doth dott8e 2d1p d5q dr4 1drah 8drak d5rand 6dre. 4drech +d6reck 4d3reg 8d3reic d5reife 8drem 8d1ren 2drer 8dres. 6d5rh 1dria +d1ric 8drind droi6 dro5x 1dru 8drut drös5c 1drü drü5b +drü8sc 2ds d1sa d6san dsat6 d1sc 5d6scha. 5dschik dse8e d8serg +8dsl d1sp d4spak ds2po d8spä d1st d1sü 2dt d1ta d1te d1ti +d1to dt1s6 d1tu d5tä 1du du5als du1b6 du1e duf4t3r 4d3uh du5ie +8duml 8dumw 2d1und du8ni 6d5unt dur2c durch3 6durl 6dursa 8durt +dus1t +du8schr 2d1v 2d1w dwa8l 2d1z 1dä 6däh 8dänd dä6r +dö8bl d5öl dör6fl dö8sc d5ö4st +1dü ea4ben e1ac e1ah e1akt e1al. e5alf e1alg e5a8lin e1alk e1all +e5alp e1alt e5alw e1am e1and ea6nim e1ar. e5arf e1ark e5arm e3art +e5at. e6ate e6a5t6l e8ats e5att e6au. e1aus e1b e6b5am ebens5e +eb4lie eb4ser eb4s3in e1che e8cherz e1chi ech3m 8ech3n ech1r ech8send +ech4su e1chu eck5an e5cl e1d ee5a ee3e ee5g e1ei ee5isc eei4s3t +ee6lend e1ell ee5lö e1erd ee3r4e ee8reng eere6s5 ee5rä +ee6tat e1ex e1f e6fau e8fe8b 3effek ef3rom ege6ra eglo6si 1egy e1ha +e6h5ach eh5ans e6hap eh5auf e1he e1hi ehl3a eh1le ehl5ein eh1mu ehn5ec +e1ho ehr1a eh1re ehre6n eh1ri eh1ru ehr5um e1hu eh1w e1hy e1hä +e1hö e3hüt ei1a eia6s ei6bar eich3a eich5r ei4dar ei6d5ei +ei8derf ei3d4sc ei1e 8eifen 3eifri 1eign eil1d ei6mab ei8mag ein1a4 +ei8nat ei8nerh ei8ness ei6nete ein1g e8ini ein1k ei6n5od ei8nok ei4nor +e3insä ei1o e1irr ei5ru ei8sab ei5schn ei6s5ent ei8sol ei4t3al +eit3ar eit1h ei6thi ei8tho eit8samt ei6t5um e1j 1ekd e1ke e1ki e1k2l +e1kn ekni4 e1la e2l1al 6elan e6lanf e8lanl e6l5ans el3arb el3arm +e6l3art 5e6lasti e6lauge elbst5a e1le 6elef ele6h e6l5ehe e8leif +e6l5einh 1elek e8lel 3eleme e6lemen e6lente el5epi e4l3err e6l5ersc +elf2l elg2 e6l5ins ell8er 4e1lo e4l3ofe el8soh el8tent 5eltern e1lu +elut2 e1lä e1lü em8dei em8meis 4emo emo5s 1emp1f 1empt 1emto +e1mu emurk4 emurks5 e1mä en5a6ben en5achs en5ack e1nad en5af +en5all en3alt en1am en3an. en3ant en3anz en1a6p en1ar en1a6s 6e1nat +en3auf en3aus en2ce enda6l end5erf end5erg en8dess 4ene. en5eck +e8neff e6n5ehr e6n5eim en3eis 6enem. 6enen e4nent 4ener. e8nerd +e6n3erf e4nerg 5energi e6n5erla en5ers e6nerst en5erw 6enes e6n5ess +e2nex en3glo 2eni enni6s5 ennos4 enns8 e1no e6nober eno8f en5opf +e4n3ord en8sers ens8kl en1sp ens6por en5t6ag enta5go en8terbu en6tid +3entla ent5ric 5entwic 5entwu 1entz enu5i e3ny en8zan en1öf +e1nös e1nüg eo1c e5o6fe e5okk e1on. e3onf e5onk e5onl e5onr +e5opf e5ops e5or. e1ord e1org eo5r6h eo1t e1pa e8pee e6p5e6g ep5ent +e1p2f e1pi 5epid e6pidem e1pl 5epos e6pos. ep4p3a e1pr e1pä e1q +e1ra. er5aal 8eraba e5rabel er5a6ben e5rabi er3abs er3ach era5e +era5k6l er3all er3amt e3rand e3rane er3ans e5ranz. e1rap er3arc +e3rari er3a6si e1rat erat3s er3auf e3raum 3erbse er1c e1re 4e5re. +er3eck er5egg er5e2h 2erei e3rei. e8reine er5einr 6eren. e4r3enm +4erer. e6r5erm er5ero er5erst e4r3erz er3ess 5erfül er8gan. +5ergebn er2g5h 5ergänz 5erhöhu 2e1ri eri5ak e6r5iat e4r3ind +e6r5i6n5i6 er5ins e6r5int er5itio er1kl 3erklä 5erlös. +ermen6s er6nab 3ernst 6e1ro. e1rod er1o2f e1rog 6e3roi ero8ide e3rol +e1rom e1ron e3rop8 e2r1or e1ros e1rot er5ox ersch4 5erstat er6t5ein +er2t1h er5t6her 2e1ru eruf4s3 e4r3uhr er3ums e5rus 5erwerb e1ry er5zwa +er3zwu erä8m er5äs erö8 e3rös. e6r1ü2b e1sa +esa8b e8sap e6s5a6v e1sc esch4l ese1a es5ebe eserve5 e8sh es5ill +es3int es4kop e2sl eso8b e1sp espei6s5 es2po es2pu 5essenz e6stabs +e6staf e6st5ak est3ar e8stob e1str est5res es3ur e2sz e1sü e1ta +et8ag etari5e eta8ta e1te eten6te et5hal e5thel e1ti 1etn e1to e1tr +et3rec e8tscha et8se et6tei et2th et2t1r e1tu etu1s et8zent et8zw +e1tä e1tö e1tü eu1a2 eu1e eue8rei eu5fe euin5 euk2 +e1um. eu6nio e5unter eu1o6 eu5p 3europ eu1sp eu5str eu8zo e1v eval6s +eve5r6en ever4i e1w e2wig ex1or 1exp 1extr ey3er. e1z e1ä2 +e5ö8 e1ü e8ßes fa6ch5i fade8 fa6del fa5el. +fal6lo falt8e fa1na fan4gr 6fanl 6fap far6ba far4bl far6r5a 2f1art +fa1sc fau8str fa3y 2f1b2 6f1c 2f1d 1fe 2f1eck fe6dr feh6lei f6eim +8feins f5eis fel5en 8feltern 8femp fe5rant 4ferd. ferri8 fe8stof +fe6str fe6stum fe8tag fet6ta fex1 2ff f1fa f6f5arm f5fe ffe5in ffe6la +ffe8ler ff1f f1fla ff3lei ff4lie ff8sa ff6s5ta 2f1g2 fgewen6 4f1h 1fi +fid4 fi3ds fieb4 fi1la fi8lei fil4m5a f8in. fi1na 8finf fi8scho fi6u +6f1j 2f1k2 f8lanz fl8e 4f3lein 8flib 4fling f2lix 6f3lon 5flop 1flor +5f8läc 3flöt 2f1m 2f1n 1fo foh1 f2on fo6na 2f1op fo5ra +for8mei for8str for8th for6t5r fo5ru 6f5otte 2f1p8 f1q fr6 f5ram +1f8ran f8raß f8re. frei1 5frei. f3reic f3rest f1rib +8f1ric 6frig 1fris fro8na fräs5t 2fs f1sc f2s1er f5str +fs3tät 2ft f1tak f1te ft5e6h ftere6 ft1h f1ti f5to f1tr ft5rad +ft1sc ft2so f1tu ftwi3d4 ft1z 1fu 6f5ums 6funf fun4ka fu8ßend +6f1v 2f1w 2f1z 1fä fä1c 8färm 6fäug +fä8ß föde3 8föf 3för 1fü +fün4f3u 1ga ga6bl 6gabw 8gabz g3a4der ga8ho ga5isc 4gak ga1la +6g5amt ga1na gan5erb gan6g5a ga5nj 6ganl 8gansc 6garb 2g1arc 2g1arm +ga5ro 6g3arti ga8sa ga8sc ga6stre 2g1atm 6g5auf gau5fr g5aus 2g1b g5c +6gd g1da 1ge ge1a2 ge6an ge8at. ge1e2 ge6es gef2 8geff ge1g2l ge1im +4g3eise geist5r gel8bra gelt8s ge5lö ge8nin gen3k 6g5entf +ge3nä ge1or ge1ra ge6rab ger8au 8gerhö ger8ins ge1ro 6g5erz. +ge1rä ge1rü ge1s ges2p +ge2s7te. ge2s7ten ge2s7ter ge2s7tik +ge5unt 4g3ex3 2g1f8 2g1g g1ha 6g1hei +5ghel. g5henn 6g1hi g1ho 1ghr g1hö 1gi gi5la gi8me. gi1na +4g3ins +gis1tr +g1j 2g1k 8gl. 1glad g5lag glan4z3 1glas 6glass 5glaub +g3lauf 1gle. g5leb 3gleic g3lein 5gleis 1glem 2gler 8g3leu gli8a +g2lie 3glied 1g2lik 1g2lim g6lio 1gloa 5glom 1glon 1glop g1los g4loss +g5luf 1g2ly 1glü 2g1m gn8 6gn. 1gna 8gnach 2gnah g1nas g8neu +g2nie g3nis 1gno 8gnot 1go goe1 8gof 2gog 5gogr 6g5oh goni5e 6gonist +go1ra 8gord 2g1p2 g1q 1gr4 g5rahm gra8m gra4s3t 6g1rec gre6ge 4g3reic +g5reit 8grenn gri4e g5riem 5grif 2grig g5ring 6groh 2grot gro6ß +4grut 2gs gs1ab g5sah gs1ak gs1an gs8and gs1ar gs1au g1sc +gs1ef g5seil gs5ein g2s1er gs1in g2s1o gso2r gs1pr g2s1u 2g1t g3te +g2t1h 1gu gu5as gu2e 2gue. 6gued 4g3uh 8gums 6g5unt +gut3h gu2tu +4g1v 2g1w gy1n g1z 1gä 8gä8m 6gärm 1gö 1gü +6güb 1haa hab8r ha8del hade4n 8hae ha5el. haf6tr 2hal. ha1la +hal4b5a 6hale 8han. ha1na han6dr han6ge. 2hani h5anth 6hanz 6harb +h3arbe h3arme ha5ro ha2t1h h1atm hau6san ha8ß h1b2 h1c h1d +he2bl he3cho h3echt he5d6s 5heft h5e6he. hei8ds h1eif 2hein he3ism +he5ist. heit8s3 hek6ta hel8lau 8helt he6mer 1hemm 6h1emp hen5end +hen5klo hen6tri he2nu 8heo he8q her3ab he5rak her3an 4herap her3au +h3erbi he1ro he8ro8b he4r3um her6z5er he4spe he1st heta6 het5am he5th +heu3sc he1xa hey5e h1f2 h1g hgol8 h1h h1iat hie6r5i hi5kt hil1a2 +hil4fr hi5nak hin4ta hi2nu hi5ob hirn5e hir6ner hi1sp hi1th hi5tr +5hitz h1j h6jo h1k2 hlabb4 hla4ga hla6gr h5lai hl8am h1las h1laß +hl1c h1led h3lein h5ler. h2lif h2lim h8linf hl5int h2lip +h2lit h4lor h3lose h1läs hme5e h2nee h2nei hn3eig h2nel hne8n +hne4p3f hn8erz h6netz h2nip h2nit h1nol hn5sp h2nuc h2nud h2nul hoch1 +1hoh hoh8lei 2hoi ho4l3ar 1holz h2on ho1ra 6horg 5horn. ho3sl hos1p +ho4spi h1p hpi6 h1q 6hr h1rai h8rank h5raum hr1c hrcre8 h1red h3reg +h8rei. h4r3erb h8rert hrg2 h1ric hr5ins h2rom hr6t5erl hr2t1h hr6t5ra +hr8tri h6rum hr1z hs3ach h6s5amt h1sc h6s5ec h6s5erl hs8erle h4sob +h1sp h8spaß h8spel hs6po h4spun h1str h4s3tum hs3und +h1sü h5ta. h5tab ht3ac ht1ak ht3ang h5tanz ht1ar ht1at h5taub +h1te h2t1ec ht3eff ht3ehe h4t3eif h8teim h4t3ein ht3eis h6temp h8tentf +hte8ren h6terfü h8tergr h4t3erh h6t5ersc h8terst h8tese h8tess +h2t1eu h4t3ex ht1he ht5hu h1ti ht5rak hts3ah ht1sc ht6sex ht8sk ht8so +h1tu htz8 h5tüm hub5l hu6b5r huh1l h5uhr. huld5a6 hu8lent +hu8lä h5up. h1v h5weib h3weis h1z hä8kl häl8s +häma8tu8 hä8sche. hät1s häu4s3c 2hö. +2höe 8höi hö6s hös5c hühne6 hül4s3t +hütte8re i5adn i1af i5ak. i1al. i1al1a i1alb i1ald i5alei i1alf +i1alg i3alh i1alk i1all i1alp i1alr i1als i1alt i1alv i5alw i3alz +i1an. ia5na i3and ian8e ia8ne8b i1ang i3ank i5ann i1ant i1anz i6apo +i1ar. ia6rab i5arr i1as. i1asm i1ass i5ast. i1at. i5ats i1au i5azz +i6b5eig i6b5eis ib2le i4blis i6brig i6b5unt i6büb i1che ich5ei +i6cherb i1chi ich5ins ich1l ich3m ich1n i1cho icht5an icht3r i1chu +ich1w ick6s5te ic5l i1d id3arm 3ideal ide8na 3ideol ide5rö i6diot +id5rec id1t ie1a ie6b5ar iebe4s3 ie2bl ieb1r ie8bra ie4bre ie8bä +ie2dr ie1e8 ie6f5ad ief5f ie2f1l ie4fro ief1t i1ei ie4l3ec ie8lei +ie4lek i3ell i1en. i1end ien6e i3enf i5enn ien6ne. i1enp i1enr +i5ensa ien8stal i5env i1enz ie5o ier3a4b ie4rap i2ere ie4rec ie6r5ein +ie6r5eis ier8er i3ern. ie8rum ie8rund ie6s5che ie6tau ie8tert ie5the +ie6t5ri i1ett ie5un iex5 2if i1fa if5ang i6fau if1fr if5lac i5f6lie +i1fre ift5a if6t5r ig3art 2ige i8gess ig5he i5gla ig2ni i5go ig3rot +ig3s2p i1ha i8ham i8hans i1he i1hi ih1n ih1r i1hu i8hum ih1w 8i1i ii2s +ii2t i1j i1k i6kak i8kerz i6kes ik4ler i6k5unt 2il i5lac i1lag il3ans +i5las i1lau il6auf i1le ile8h i8lel il2fl il3ipp il6l5enn i1lo ilt8e +i1lu i1lä i8mart imb2 i8mele i8mid imme6l5a i1mu i1mä +i5mö ina5he i1nat in1au inau8s 8ind. in4d3an 5index ind2r 3indus +i5nec i2n1ei i8nerw 3infek 1info 5ingeni ing5s6o 5inhab ini5er. 5inj +in8kät in8nan i1no inoi8d in3o4ku in5sau in1sp 5inspe 5instit +5instru ins4ze 5intere 5interv in3the in5t2r i5ny inä2 i1när +in1äs inö8 in5öd i1nös 2io io1a8 io1c iode4 io2di +ioi8 i1ol. i1om. i1on. i5onb ion2s1 i1ont i5ops i5o8pt i1or. +i3oral io3rat i5orc i1os. i1ot. i1o8x 2ip i1pa i1pi i1p2l i1pr i1q +i1ra ir6bl i1re i1ri ir8me8d ir2m1o2 ir8nak i1ro ir5rho ir6schl +ir6sch5r i5rus i5ry i5rä i1sa i8samt i6sar i2s1au i8scheh i8schei +isch5m isch3r ischä8 is8ele ise3ra i4s3erh is3err isi6de i8sind +is4kop ison5e is6por i8s5tum i5sty i5sö i1ta it5ab. i2t1a2m +i8tax i1te i8tersc i1thi i1tho i5thr it8hä i1ti i8ti8d iti6kl +itmen4 i1to i8tof it3ran it3rau i1tri itri5o it1sc it2se it5spa it8tru +i1tu it6z5erg it6z1w i1tä itä6r5e ität2 itäts5 +i1tü i1u iu6r 2i1v i6vad iva8tin i8vei i6v5ene i8verh i2vob i8vur +i1w iwi2 i5xa i1xe i1z ize8n i8zir i6z5w iä8m i1ä6r +i5ät. i5äv i1ö8 iü8 i6ß5ers ja5la +je2t3r 6jm 5jo jo5as jo1ra jou6l ju5cha jugen4 jugend5 jung5s6 +3jä 1ka 8kachs 8kakz ka1la kal5d kam5t ka1na 2kanl 8kapf ka6pl +ka5r6a 6k3arbe ka1ro kar6p5f 4k3arti 8karz ka1rä kasi5e ka6teb +kat8ta kauf6s kau3t2 2k1b 2k1c 4k1d kehr6s kehrs5a 8keic 2k1eig 6k5ein +6k5eis ke6lar ke8leis ke8lo 8kemp k5ente. k3entf 8k5ents 6kentz ke1ra +k5erlau 2k1f8 2k1g 2k1h ki5fl 8kik king6s5 6kinh ki5os ki5sp ki5th +8ki8ö 2k1k2 kl8 1kla 8klac k5lager kle4br k3leib 3kleid kle5isc +4k3leit k3lek 6k5ler. 5klet 2klic 8klig k2lim k2lin 5klip 5klop k3lor +1klä 2k1m kmani5e kn8 6kner k2ni knä8 1k2o ko1a2 ko6de. +ko1i koi8t ko6min ko1op ko1or ko6pht ko3ra kor6d5er ko5ru ko5t6sc k3ou +3kow 6k5ox 2k1p2 k1q 1kr8 4k3rad 2k1rec 4k3reic kre5ie 2krib 6krig +2krip 6kroba 2ks k1sa k6sab ksal8s k8samt k6san k1sc k2s1ex k5spat +k5spe k8spil ks6por k1spr kst8 k2s1uf 2k1t kta8l kt5a6re k8tein kte8re +k2t1h k8tinf kt3rec kt1s 1ku ku1ch kuck8 k3uhr ku5ie kum2s1 kunfts5 +kun2s kunst3 ku8rau ku4ro kurz1 +4kusti ku1ta ku8ß +6k1v 2k1w ky5n 2k1z 1kä kä4m 4k3ämi käse5 1kö +kö1c kö1s 1kü kü1c kür6sc +1la. +8labf 8labh lab2r 2l1abs lach3r la8dr 5ladu 8ladv 6laff laf5t la2gn +5laken 8lamb la6mer 5lampe. 2l1amt la1na 1land lan4d3a lan4d3r lan4gr +8lanme 6lann 8lanw 6lanä 8lappa lap8pl lap6pr l8ar. la5ra lar4af +la8rag la8ran la6r5a6s l3arbe la8rei 6larm. la8sa la1sc la8sta lat8i +6l5atm 4lauss 4lauto 1law 2lb l8bab l8bauf l8bede l4b3ins l5blo +lbst5an lbst3e 8lc l1che l8chert l1chi lch3m l5cho lch5w 6ld l4d3ei +ld1re l6düb le2bl le8bre lecht6s5 led2r 6leff le4gas 1lehr lei6br +le8inf 8leinn 5leistu 4lektr le6l5ers lemo2 8lemp l8en. 8lends +6lendun le8nend len8erw 6l5ents 4l3entw 4lentz 8lenzy 8leoz 6lepi +le6pip 8lepo 1ler l6er. 8lerbs 6l5erde le8reis le8rend le4r3er 4l3erg +l8ergr 6lerkl 6l5erzie 8lerö 8lesel lesi5e le3sko le3tha let1s +5leuc 4leuro leu4s3t le5xe 6lexp l1f 2l1g lgend8 l8gh lglie3 lglied6 +6l1h 1li li1ar li1as 2lick li8dr li1en lien6n li8ers li8ert 2ließ +3lig li8ga8b li1g6n li1l8a 8limb li1na 4l3indu lings5 +4l3inh 6linj link4s3 4linkt 2lint 8linv +4lipp 5lipt 4lisam +livi5e 6l1j 6l1k l8keim l8kj lk2l lko8f lkor8 lk2sa lk2se 6ll l1la +ll3a4be l8labt ll8anl ll1b ll1c ll1d6 l1le l4l3eim l6l5eise ller3a +l4leti l5lip l1lo ll3ort ll5ov ll6spr llte8 l1lu ll3urg l1lä +l5lü l6lüb 2l1m l6m5o6d 6ln l1na l1no 8lobl lo6br 3loch. +l5o4fen 5loge. 5lohn 4l3ohr 1lok l2on 4l3o4per lo1ra 2l1ord 6lorg +4lort lo1ru 1los. lo8sei 3losig lo6ve lowi5 6l1p lp2f l8pho l8pn +lp4s3te l2pt l1q 8l1r 2ls l1sa l6sarm l1sc l8sec l6s5erg l4s3ers l8sh +l5s6la l1sp ls4por ls2pu l1str l8suni l1sü 2l1t lt5amp l4t3ein +l5ten l6t5eng l6t5erp l4t3hei lt3her l2t1ho l6t5i6b lti1l l8trö +lt1sc lt6ser lt4s3o lt5ums lu8br lu2dr lu1en8 8lu8fe luft3a luf8tr +lu6g5r 2luh l1uhr lu5it 5luk 2l1umf 2l1umw 1lun 6l5u6nio 4l3unte lu5ol +4lurg 6lurs l3urt lu4sto +lus1tr +lu6st5re lu8su lu6tal lu6t5e6g lu8terg +lu3the lu6t5or lu2t1r lu6ß5 l1v lve5r6u 2l1w 1ly lya6 +6lymp ly1no l8zess l8zo8f l3zwei lz5wu 3länd lä5on +lä6sc lät1s 5läuf 2läug läu6s5c lä5v +l1öl 1lös lö1ß6t 6l1übe 1ma +8mabg ma5chan mad2 ma5el 4magg mag8n ma1la ma8lau mal5d 8malde mali5e +malu8 ma8lut 2m1amp 3man mand2 man3ds 8mangr mani5o 8m5anst 6mappa +4m3arbe mar8kr ma1r4o mar8schm 3mas ma1sc ma1tö 4m5auf ma5yo 2m1b +mb6r 2m1c 2m1d md6sä 1me me1ch me5isc 5meld mel8sa 8memp me5nal +men4dr men8schl men8schw 8mentsp me1ra mer4gl me1ro 3mes me6s5ei +meta3s2 +me1th +me8ß 2m1f6 2m1g 2m1h 1mi mi1a mi6ale mi1la 2m1imm mi1na +mi5nü mi4s3an mit1h mi5t6ra 3mitt mitta8 mi6ß5 6mj +2m1k8 2m1l 2m1m m6mad m6m5ak m8menth m8mentw mme6ra m2mn mm5sp mm5ums +mmut5s m8män m1n8 m5ni 1mo mo5ar mo4dr 8mof mo8gal mo4kla mol5d +m2on mon8do mo4n3od +mon2s1tr +mont8a 6m5ony mopa6 mo1ra mor8d5a mo1sc mo1sp 5mot +moy5 2mp m1pa mpfa6 mpf3l mphe6 m1pi mpin6 m1pl mp2li m2plu mpo8ste +m1pr mprä5 mp8th mput6 mpu5ts m1pö 8m1q 2m1r 2ms ms5au m1sc +msch4l ms6po m3spri m1str 2m1t mt1ar m8tein m2t1h mt6se mt8sä +mu5e 6m5uh mumi1 1mun mun6dr muse5e mu1ta 2m1v mvol2 mvoll3 2m1w 1my +2m1z mä6kl 1män mä1s mä5tr mäu4s3c 3mäß +möb2 6möl 1mü 5mün 3müt 1na. +n5ab. 8nabn n1abs n1abz na6bä na2c nach3e 3nacht 1nae na5el +n1afr 1nag 1n2ah na8ha na8ho 1nai 6nair na4kol n1akt nal1a 8naly 1nama +na4mer na1mn n1amp 8n1amt 5nanc nan6ce n1and n6and. 2n1ang 1nani +1nann n1ans 8nanw 5napf. 1n2ar. na2ra 2n1arc n8ard 1nari n8ark +6n1arm 5n6ars 2n1art n8arv 6natm nat6s5e 1naue 4nauf n3aug 5naui n5auk +na5um 6nausb 6nauto 1nav 2nax 3naz 1naß n1b2 nbau5s n1c +nche5e nch5m 2n1d nda8d n2d1ak nd5ans n2d1ei nde8lac ndel6sa n8derhi +nde4se nde8stal n2dj ndnis5 n6d5or6t nd3rec nd3rot nd8samt nd6sau +ndt1h n8dumd 1ne ne5as ne2bl 6n5ebn 2nec 5neei ne5en ne1g4l 2negy +4n1ein 8neis 4n3e4lem 8nemb 2n1emp nen1a 6n5energ nen3k 8nentb +4n3en3th 8nentl 8n5entn 8n5ents ne1ra ne5r8al ne8ras 8nerbi 6n5erde. +nere5i6d nerfor6 6n5erhö 8nerlö 2n1err n8ers. 6n5ertra +2n1erz nesi3e net1h neu4ra neu5sc 8neuß n1f nf5f nf2l +nflei8 nf5lin nft8st n8g5ac ng5d ng8en nge8ram ngg2 ng1h n6glic ng3rip +ng8ru ng2se4 ng2si n2g1um n1gy n8gäl n1h nhe6r5e 1ni ni1bl +ni5chä ni8dee n6ie ni1en nie6s5te niet5h ni8etn 4n3i6gel n6ik +ni1la 2n1imp ni5na 2n1ind 8ninf 6n5inh ni8nit 6n5inn 2n1ins 4n1int +n6is +nis1tr +ni1th ni1tr n1j n6ji n8kad nk5ans n1ke n8kerla n1ki nk5inh +n5klö n1k2n n8k5not nk3rot n8krü nk5spo nk6t5r n8kuh +n6küb n5l6 nli4mi n1m nmen4s n1na n8nerg nni5o n1no nn4t3ak nnt1h +nnu1e n1ny n1nä n1nö n1nü no5a no4b3la 4n3obs 2nobt +noche8 no6die no4dis no8ia no5isc 6n5o6leu no4mal noni6er 2n1onk n1ony +4n3o4per 6nopf 6nopti no3ra no4ram nor6da 4n1org 2n1ort n6os no1st +8nost. no8tan no8ter noty6pe 6n5ox n1p2 n1q n1r nrös3 6ns n1sac +ns3ang n1sc n8self n8s5erf n8serg n6serk ns5erw n8sint n1s2pe n1spr +n6s5tat. +n6stob n1str n1ta n4t3a4go nt5anh nt3ark nt3art +n1te nt3eis nte5n6ar nte8nei nter3a nte6rei nt1ha nt6har n3ther nt5hie +n3thus n1ti nti1c n8tinh nti1t ntlo6b ntmen8 n1to nt3o4ti n1tr ntra5f +ntra5ut nt8rea nt3rec nt8rep n4t3rin nt8rop n4t3rot n4trü nt1s +nts6an nt2sk n1tu nt1z n1tä n1tö n8töl n1tü 1nu +nu1a nu5el nu5en 4n1uhr nu5ie 8numl 6n5ums 6n5umw 2n1und 6nuni 6n5unr +2n1unt 2nup 2nu6r n5uri nu3skr nu5ta n1v 8n1w 1nys n1za n6zab n2z1ar +n6zaus nzi4ga n8zof n6z5unt n1zw n6zwir 1näc 5näe 5näi +n8äl nä6m nä6re n5ärz 5näus n1öl +1nöt n5öz 5nü. 6n1ü2b 5nüß +o5ab. oa2l o8ala o1a2m o1an ob1ac obe4ra o6berh 5o4bers o4beru +obe6ser 1obj o1bl o2bli ob5sk 3obst. ob8sta obst5re ob5sz o1che +oche8b o8chec o3chi och1l och3m ocho8f o3chro och3to o3chu och1w o1d +o2d1ag od2dr ode5i ode6n5e od1tr o5e6b o5e6der. oe8du o1ef o1e2l +o1e2p o1er. o5e8x o1fa of8fan 1offi of8fin of6f5la o5fla o1fr 8o1g +og2n o1ha o1he o6h5eis o1hi ohl1a oh1le oh4l3er 5ohm. oh2ni o1ho +oh1re oh1ru o1hu oh1w o1hy o1hä o5ia o1id. o8idi oi8dr o5ids +o5isch. oiset6 o1ism o3ist. o5i6tu o1j o1k ok2l ok3lau o8klä +1okta o1la old5am old5r o1le ole5in ole1r ole3u ol6gl ol2kl olk4s1 +ol8lak ol8lauf. ol6lel ol8less o1lo +ol1s ol2ster +ol6sk o1lu oly1e2 5olym +o2mab om6an o8mau ombe4 o8merz om5sp o1mu o8munt o1mä o1mö +o1na ona8m on1ax on8ent o6n5erb 8oni oni5er. on1k on6n5a6b o1no ono1c +o4nokt 1ons onts8 o1nä oo8f 1oog oo2pe oo2sa o1pa 3o4pera o3pfli +opf3lo opf3r o1pi o1pl o2pli o5p6n op8pa op6pl o1pr o3p4ter 1opti +o1pä o5pö o1q o1ra. o3rad o8radd 1oram o6rang o5ras o8rauf +or5cha or4d3a4m or8dei or8deu 1ordn or4dos o1re o5re. ore2h o8r5ein +ore5isc or6enn or8fla or8fli 1orga 5orgel. or2gl o1ri 5o6rient or8nan +or8nä o1ro or1r2h or6t5an or8tau or8tere o1rus o1ry o1rä +or1ü2 o1sa osa3i 6ose o8serk o1sk o6ske o6ski os2kl os2ko os2kr +osni5e o2s1o2d o3s4per o4stam o6stau o3stra ost3re osu6 o6s5ur o5s6ze +o1ta ot3auf o6taus o1te o6terw o1th othe5u o2th1r o1ti o1to oto1a +ot1re o1tri o1tro ot1sc o3tsu ot6t5erg ot2t3h ot2t5r ot8tö o1tu +ou3e ouf1 ou5f6l o5u6gr ou5ie ou6rar ou1t6a o1v o1wa o1we o6wer. o1wi +owid6 o1wo o5wu o1xe oy5al. oy1e oy1i o5yo o1z oza2r 1o2zea ozo3is +oö8 oß5elt oß1t 3paa pa6ce 5pad pag2 1pak +pa1la pa8na8t pani5el pa4nor pan1s2 1pap pap8s pa8rei par8kr paro8n +par5o6ti part8e 5partei 3partn pas6sep pa4tha 1pau 6paug pau3sc p1b +8p5c 4p1d 1pe 4peic pe5isc 2pek pen3k pen8to8 p8er pe1ra pere6 per5ea +per5eb pe4rem 2perr per8ran 3pers 4persi pe3rü pe4sta pet2s +p2f1ec p4fei pf1f pf2l 5pflanz pf8leg pf3lei 2pft pf3ta p1g 1ph 2ph. +2p1haf 6phb 8phd 6p5heit ph5eme 6phg phi6e 8phk 6phn p5holl pht2 +ph3tha 4ph3the phu6 6phz pi1en pi5err pi1la pi1na 5pinse pioni8e 1pis +pi1s2k pi1th p1k pl8 5pla p2lau 4plei p3lein 2pler 6p5les 2plig p6lik +6p5ling p2liz plo8min 6p1m p1n 1p2o 8poh 5pol po8lan poly1 po3ny po1ra +2porn por4t3h po5rö 5poti p1pa p6p5ei ppe6la pp5f p2p1h p1pi pp1l +ppp6 pp5ren +pp1s pp2ste +p5pö pr6 3preis 1pres 2p3rig 5prinz 1prob 1prod +5prog pro8pt pro6t5a prote5i 8proß prä3l 1präs +präte4 1prüf p5schl 2pst 1p2sy p1t p8to8d pt1s 5p6ty 1pu +pu1b2 2puc pu2dr puf8fr 6p5uh pun8s pu8rei pu5s6h pu1ta p1v p3w 5py +py5l p1z pä6der p5ä6m pä8nu 8pär pät5h +pät1s qu6 1qui 8rabk ra6bla 3rable ra2br r1abt 6rabz ra4dan ra2dr +5rafal ra4f3er ra5gla ra2g3n 6raha ral5am 5rald 4ralg ra8lins 2rall +ral5t 8ramei r3anal r6and ran8der ran4dr 8ranf 6ranga 5rangi ran8gli +r3angr rans5pa 8ranw r8anz. ra5or 6rapf ra5pl rap6s5er 2r1arb 1rarh +r1arm ra5ro 2r1art 6r1arz ra8tei ra6t5he 6ratl ra4t3ro r5atta raue4n +6raus. r5austa rau8tel raut5s ray1 r1b rb5lass r6bler rb4lie rbon6n +r8brecht rb6s5tä r8ces r1che rch1l rch3m rch3re rch3tr rch1w 8rd +r1da r8dachs r8dap rda5ro rde5ins rdio5 r8dir rd3ost r1dr r8drau 1re. +re1ak 3reakt re3als re6am. re1as 4reben re6bl rech5a r8edi re3er +8reff 3refl 2reh 5reha r4ei. reich6s5 8reier 6reign re5imp 4r3eina +6r3einb 6reing 6r5einn 6reinr 4r3eins r3eint reli3e 8r5elt 6rempf +2remt ren5a6b ren8gl r3enni 1reno 5rente 4r3enth 8rentl 4r3entw 8rentz +ren4zw re1on requi5 1rer rer4bl 6rerbs 4r3erd 8rerhö 8rerkl +4r3erla 8rerlö 4r3erns 6r5ernä rer5o 6r5erreg r5ertr r5erwec +r5erö re2sa re8schm 2ress re5u8ni 6rewo 2r1ex r1f r8ferd rf4lie +8r1g r8gah rge4bl rge5na rgest4 rg6ne r2gni2 r8gob r4g3ret rg8sel r1h8 +r2hy 5rhyt ri1ar ri5cha rid2g r2ie rieg4s5 ri8ei ri1el ri6ele ri1en +ri3er. ri5ers. ri6fan ri8fer ri8fr 1r2ig ri8kn ri5la rimä8 +ri1na r8inde rin4ga rin6gr 1rinn 6rinner rino1 r8insp 4rinst +ri1nä ri5o6ch ri1o2d ri3o6st 2r1ir r2is ri3sko ri8spr +ri5sv r2it 6r5i6tal ri5tr ri6ve. 8r1j 6rk r1ke rkehrs5 r1ki r3klin +r1k2n rk3str rk4t3an rk6to r6kuh rkä4s3t r1l r5li rline5a 6r1m +r6manl rma4p r4m3aph r8minf r8mob rm5sa 2rn r1na rna8be r5ne rn2ei +r6neif r6nex r6nh rn1k r1no r6n5oc rn1sp r1nä r1nü ro6bern +6robs ro1ch 3rock. ro5de ro1e 4rofe ro8hert 1rohr ro5id ro1in ro5isc +6rolym r2on 6roog ro6phan r3ort ro1s2p ro5s6w ro4tau ro1tr ro6ts 5rout +r1p rpe8re rp2f r2ps r2pt r1q 2rr r1ra r1re rrer6 +rr6hos r5rhö +r1ri r1ro rro8f rr8or rror5a r1ru r3ry r1rä r1rö r1rü +2r1s +r2ste r2sti +r6sab r4sanf rse6e rse5na r2sh r6ska r6ski rs2kl r8sko r2sl rs2p +r6stauf r8sterw r8stran rswi3d4 r2sz 2r1t rt3art r8taut r5tei rt5eige +r8tepe r4t3erh r8terla r4t3hei r5t6hu r4t3int rt5reif rt1sc rt6ser +rt6s5o rt6s5u rt5und r8turt rube6 ru1en 1r4uf ruf4st ru1ie 2r1umg +2r1uml 2rums run8der run4d5r 6rundz 6runf 8runs 2r1unt 2r1ur r6us +ru6sta +rus1tr +ru6tr 1ruts r1v rven1 rvi2c r1w r1x r1za rz5ac r6z5al +r8z1ar r8zerd r6z5erf rz8erh rz4t3h r8zum rä4ste räu8sc +r1öf 5röhr rö5le 3röll 5römis r1ör +rö2sc 3rümp 1sa. 1saa s3a4ben sa2bl 2s1abs 6s1abt 6sabw +3sack. 6s3a4der 1saf sa1fa 4s1aff sa5fr 1sag 1sai sa1i2k1 4s1akt 1sal +sa1la 4s3alpi 6salter salz3a 1sam s5anb san2c 1sand s5angeh 6sanl +2s1ans 6s3antr 8s1anw s1ap s6aph 8sapo sap5p6 s8ar. 2s1arb 3sarg +s1arm sa5ro 2s1art 6s1arz 1sas 1sat sat8a 2s1atl sa8tom 3s8aue s5auff +sau5i s6aur 2s1aus 5s6ause 2s1b2 2sca s4ce 8sch. 3scha. 5schade +3schaf 3schal sch5ame 8schanc 8schb 1sche 6schef 8schex 2schf 2schg +2schh 1schi 2schk 5schlag 5schlu 6schmäß +6schnaß 1scho 6schord 6schp 3schri 8schric 8schrig +8schrou 6schs 2scht sch3ta sch3tr 1schu 8schunt 6schv 2schz 5schö +5schü 2sco scre6 6scu 2s1d 1se se5an se1ap se6ben se5ec see5i6g +se3erl 8seff se6han se8hi se8hö 6s5eid. 2s1eig s8eil 5sein. +sei5n6e 6s5einh 3s8eit 3sel. se4lar selb4 6s3e4lem se8lerl 2s1emp +sen3ac se5nec 6s5ents 4sentz s8er. se8reim ser5inn 8sermä +8s5erzi 6seröf se1um 8sexa 6sexp 2s1f2 sfal8ler 2s3g2 sge5b2 s1h +s8hew 5s6hip 5s4hop 1si 2siat si1b sicht6s 6s5i6dee siege6s5 si1en +si5err si1f2 si1g2n si6g5r si8kau sik1i si4kin si2kl si8kü si1la +sil6br si1na 2s1inf sin5gh 2s1inh sinne6s5 2s1ins si5ru si5str 4s1j +s1k2 6sk. 2skau skel6c skelch5 s6kele 1s2ki. 3s4kin. s6kiz s8kj +6skn 2skow 3skrib 3skrip 2sku 8skü s1l s8lal slei3t s4low 2s1m +s1n 6sna 6snot 1so so1ch 2s1odo so4dor 6s5o4fen solo3 s2on so5of 4sope +so1ra 2s1ord 4sorga sou5c so3un 4s3ox sp2 8spaa 5spal 1span 2spap +s2pec s4peis 1spek s6perg 4spers s6pes 2s1pf 8sphi 1s2phä 1spi +spi4e 6s5pig 6spinse 2spis 2spla 2spol 5s6pom 6s5pos 6spoti 1spra +3s8prec 6spreis 5spring 6sprob 1spru s2pul 1s2pur 6spy 5spän +1spü s1q 2s1r +2ssa 2sse 2ssi 2sso 2ssä 2ssö 2ssü 2s1sch +sse8nu ssini6s ssoi6r 2st. +1sta 4stafe 2stag +sta3la 6stale +4s2talg +8stalk 8stamt 6st5anf 4stans 6stanw 6starb sta4te +6staus 2stb 6stc 6std +s1te +4steil +6steppi +8stesse 6stf 2stg 2sth st1ha st3hei s8t1hi st1ho st5hu +s1ti +s2ti4el +4s2tigm +6s2tind +4s2tinf +s2ti8r +2stk 2stl 2stm +1sto 6stoll. 4st3ope +6stopf. 6stord 6stp +4strai +s3tral +6s5traum 3straß +3strec 6s3tref 8streib 5streif 6streno 6stres 6strev +2st5rig +8s2t1ris +s8troma st5rose +2s1trua +4struf 3strum +6sträg 2st1s6 2stt +1stu stu5a 4stuc 2stue 8stun. 2stv 2stw s2tyl +6stz 1stä 8stäg +1stö +1stü 8stüch 4stür. +1su su2b1 3suc su1e su2fe su8mar 6sumfa 8sumk 2s1unt sup1p2 6s5u6ran +6surte 2s1v 2s1w 1sy 8syl. sy5la syn1 sy2na syne4 s1z s4zend 5s6zene. +8szu 1sä 6s5änd 6säugi 6säuß +5söm 2s1ü2b 1süc sü8di 1sün 5süß +taats3 4tab. taba6k ta8ban tab2l ta6bre 4tabs t3absc +8tabz 6t3acht ta6der 6tadr tad6s tad2t 1tafe4 1tag ta6ga6 ta8gei +tage4s tag6s5t tah8 tahl3 tai6ne. ta5ir. tak8ta tal3au 1tale ta8leng +tal5ert 6t5a6mer 6tamp tampe6 2t1amt tan5d6a tan8dr tands5a tani5e +6tanl 2tanr t3ans 8t5antr tanu6 t5anw 8tanwa tan8zw ta8rau 6tarbe +1tari 2tark 2t1arm ta1ro 2tart t3arti 6tarz ta1sc ta6sien ta8stem +ta8sto t5aufb 4taufn 8taus. 5tause 8tausf 6tausg t5ausl 2t1b2 2t1c +t6chu 2t1d te2am tea4s te8ben 5techn 4teff te4g3re te6hau 2tehe te4hel +2t1ehr te5id. teig5l 6teign tei8gr 1teil 4teinh t5einhe 4teis t5eisen +8teiw te8lam te4lar 4telek 8telem te6man te6n5ag ten8erw ten5k tens4p +ten8tro 4t3entw 8tentz te6pli 5teppi ter5a6b te3ral ter5au 8terbar +t5erbe. 6terben 8terbs 4t3erbt t5erde. ter5ebe ter5ein te8rers terf4 +8terhö 6terklä ter8nor ter6re. t8erscha t5e6sel te8stau +t3euro te1xa tex3e 8texp tex6ta 2t1f2 2t1g2 2th. th6a 5tha. 2thaa +6t1hab 6t5haf t5hah 8thak 3thal. 6thals 6t3hand 2t1hau 1the. 3t4hea +t1heb t5heil t3heit t3helf 1theo 5therap 5therf 6t5herz 1thes 1thet +5thi. 2t1hil t3him 8thir 3this t5hj 2th1l 2th1m th1n t5hob t5hof +4tholz 6thopti 1thr6 4ths t1hum 1thy 4t1hä 2t1hö t1hü +ti1a2m ti1b tie6fer ti1en ti8gerz tig3l ti8kin ti5lat 1tilg t1ind +tin4k3l ti3spa ti5str 5tite ti5tr ti8vel ti8vr 2t1j 2t1k2 2t1l tl8a +2t1m8 2t1n 3tobe 8tobj to3cha 5tocht 8tock tode4 to8del to8du to1e +6t5o6fen to1in toi6r 5toll. to8mene t2ons 2t1ony to4per 5topf. 6topt +to1ra +to1s to2ste +to6ska tos2l 2toti to1tr t8ou 2t1p2 6t1q tr6 tra5cha +tra8far traf5t 1trag tra6gl tra6gr t3rahm 1trai t6rans tra3sc tra6st +3traue t4re. 2trec t3rech t8reck 6t1red t8ree 4t1reg 3treib 4treif +8t3reis 8trepo tre6t5r t3rev 4t3rez 1trib t6rick tri6er 2trig t8rink +tri6o5d trizi5 tro1a 3troc trocke6 troi8d tro8man. tro3ny 5tropf +6t5rosa t5roß 5trub 5trup trut5 1träg 6t1röh +5trüb trü3bu t1rüc t1rüs 2ts ts1ab t1sac tsa8d +ts1ak t6s5alt ts1an ts1ar ts3auf t3schr t5schä tse6e tsee5i +tsein6s ts3ent ts1er t8serf t4serk t8sh 5t6sik t4s3int ts5ort. +t5s6por t6sprei +t1st t2ste +t6s5tanz ts1th t6stit t4s3tor 1t2sua t2s1uf +t8sum. t2s1u8n t2s1ur 2t1t tt5eif tte6sa tt1ha tt8ret tt1sc tt8ser +tt5s6z 1tuc tuch5a 1tu1e 6tuh t5uhr tu1i tu6it 1tumh 6t5umr 1tums +8tumt 6tund 6tunf 2t1unt tu5ra tu6rau tu6re. tu4r3er 2t1v 2t1w 1ty1 +ty6a ty8la 8tym 6ty6o 2tz tz5al tz1an tz1ar t8zec tzeh6 tzehn5 t6z5ei. +t6zor t4z3um t6zäu 5täg 6täh t5ält t8än +täre8 8tä8st 6täuß t5öffen +8tö8k 1tön 4tüb t6ü5ber. 5tüch 1tür. +u3al. u5alb u5alf u3alh u5alk u3alp u3an. ua5na u3and u5ans u5ar. +ua6th u1au ua1y u2bab ubi5er. u6b5rit ubs2k u5bö u8büb 2uc +u1che u6ch5ec u1chi uch1l uch3m uch5n uch1r uch5to ucht5re u1chu uch1w +uck1a uck5in u1d ud4a u1ei u6ela uene8 u6ep u1er uer1a ue8rerl uer5o +u8esc u2est u8ev u1fa u2f1ei u4f3ent u8ferh uf1fr uf1l uf1ra uf1re +uf1rä uf1rü uf1s2p uf1st uft1s u8gabt u8gad u6gap ugeb8 u8gn +ugo3s4 u1ha u1he u1hi uh1le u1ho uh1re u1hu uh1w u1hä u1hö +6ui ui5en u1ig u3ins uin8tes u5isch. u1j 6uk u1ke u1ki u1kl u8klu +u1k6n u5ky u1la uld8se u1le ul8lac ul6lau ul6le6l ul6lo ulni8 u1lo +ulo6i ult6a ult8e u1lu ul2vr u1lä u1lö 3umfan 5umlau umo8f +um8pho u1mu umu8s u5mö u1n1a un2al un6at unau2 6und. 5undein +un4d3um 3undzw undü8 un8düb une2b un1ec une2h un3eis 3unfal +1unfä 5ungea 3unglü ung2s1 un8gä 1u2nif un4it un8kro +unk5s u1no unpa2 uns2p unvol4 unvoll5 u5os. u1pa u1pi u1p2l u1pr +up4s3t up2t1a u1q u1ra ur5abs ura8d ur5ah u6rak ur3alt u6rana u6r5ans +u8rap ur5a6ri u8ratt u1re ur3eig ur8gri u1ri ur5ins 3urlau urmen6 +ur8nan u1ro 3ursac ur8sau ur8sei ur4sk 3urtei u1ru uru5i6 uru6r u1ry +ur2za ur6zä ur5ä6m u5rö u1rü urück3 u1sa +usa4gi u2s1ar u2s1au u8schec usch5wi u2s1ei use8kel u8sl u4st3a4b +us3tau +u2s1uf u8surn ut1ac u1tal uta8m u1tan ut1ar u1tas ut1au +u1te u8teic u4tent u8terf u6terin u4t3hei ut5ho ut1hu u1ti utine5 +uti6q u1to uto5c u1tr ut1sa ut1s6p ut6stro u1tu utz5w u1u u1v uve5n +uve3r4ä u1w u1xe u5ya uy5e6 u1yi u2z1eh u8zerh u5ö uße6n +ußen5e 8vanb 6vang 6varb var8d va6t5a va8tei +va2t1r 2v1b 6v5c 6vd 1ve 6ve5g6 ver1 ver5b verb8l ve2re2 verg8 ve2ru8 +ve1s ve2s3p ve3xe 2v1f 2v1g 6v5h vi6el vie6w5 vi1g4 vi8leh vil6le. +8vint vi1ru vi1tr 2v1k 2v1l 2v1m 4v5n 8vo8f voi6le vol8lend vol8li +v2or1 vo2re vo8rin vo2ro 2v1p 8vra v6re +2v2s +2v1t 2v1v 4v3w 2v1z +waffe8 wa6g5n 1wah wah8n wa5la wal8din wal6ta wan4dr 5ware wa8ru +war4za 1was w5c w1d 5wech we6fl 1weg we8geng weg5h weg3l we2g1r +weh6r5er 5weise weit3r wel2t welt3r we6rat 8werc 5werdu wer4fl 5werk. +wer4ka wer8ku wer4ta wer8term we2sp +we8s4tend +we8str +we8stö wet8ta wich6s5t 1wid wi2dr wiede4 wieder5 wik6 wim6ma +win4d3r 5wirt wisch5l 1wj 6wk 2w1l 8w1n wo1c woche6 wol6f wor6t5r 6ws2 +w1sk 6w5t 5wunde. wun6gr wu1sc wu2t1 6w5w wy5a wärme5 wä1sc +1xag x1ak x3a4men 8xamt x1an 8x1b x1c 1xe. x3e4g 1xen xe1ro x1erz +1xes 8xf x1g 8x1h 1xi 8xid xi8so 4xiste x1k 6x1l x1m 8xn 1xo 8x5o6d +8x3p2 x1r x1s6 8x1t x6tak x8terf x2t1h 1xu xu1e x5ul 6x3w x1z 5ya. +y5an. y5ank y1b y1c y6cha y4chia y1d yen6n y5ern y1g y5h y5in y1j +y1k2 y1lak yl1al yla8m y5lax y1le y1lo y5lu y8mn ym1p2 y3mu y1na yno2d +yn1t y1on. y1o4p y5ou ypo1 y1pr y8ps y1r yri3e yr1r2 +ys5iat ys8ty +y1t y3w y1z yä8m z5a6b zab5l 8za6d 1zah za5is 4z3ak 6z1am 5zange. +8zanl 2z1ara 6z5as z5auf 3zaun 2z1b 6z1c 6z1d 1ze ze4dik 4z3eff 8zein +zei4ta zei8ters ze6la ze8lec zel8th 4zemp 6z5engel zen8zin 8zergä +zer8i ze1ro zers8 zerta8 zer8tab zer8tag 8zerz ze8ste zeu6gr 2z1ex +2z1f8 z1g 4z1h 1zi zi1en zi5es. 4z3imp zi1na 6z5inf 6z5inni zin6s5er +8zinsuf zist5r zi5th zi1tr 6z1j 2z1k 2z1l 2z1m 6z1n 1zo zo6gl 4z3oh +zo1on zor6na8 4z1p z5q 6z1r 2z1s8 2z1t z4t3end z4t3hei z8thi 1zu zu3al +zu1b4 zu1f2 6z5uhr zun2a 8zunem zunf8 8zungl zu1o zup8fi zu1s8 zu1z +2z1v zw8 z1wal 5zweck zwei3s z1wel z1wer z6werg 8z5wes 1zwi zwi1s +6z1wo 1zy 2z1z zz8a zzi1s 1zä 1zö 6zöl. zö1le +1zü 2z1ü2b ä1a6 äb1l ä1che ä3chi +äch8sc äch8sp ä5chu äck5a äd1a äd5era +ä6d5ia ä1e ä5fa äf1l äft6s äg1h +äg3le ä6g5nan äg5str ä1he ä1hi äh1le +äh5ne 1ähnl äh1re äh5ri äh1ru ä1hu +äh1w 6äi ä1isc ä6ische ä5ism ä5j +ä1k äl1c ä1le ä8lei äl6schl ämi1e +äm8n äm8s ä5na 5änderu äne5i8 äng3l +änk5l ä1no än6s5c ä1pa äp6s5c 3äq +är1c ä1re äre8m 5ärgern är6gl ä1ri +3ärmel ä1ro ärt6s5 ä1ru 3ärztl ä5rö +ä6s5chen äsen8s äs1th äta8b ä1te äteri4 +äter5it ä6thy ä1ti 3ätk ä1to ät8schl +äts1p ä5tu äub1l äu1e 1äug äu8ga +äu5i ä1um. ä1us. 1äuß ä1z +ö1b ö1che ö5chi +öch8s2tei +öch8str öcht6 +5ö6dem 5öffn ö1he öh1l8 öh1re ö1hu +ö1is ö1ke 1ö2ko 1öl. öl6k5l öl8pl +ö1mu ö5na önig6s3 ö1no ö5o6t öpf3l +öp6s5c ö1re ör8gli ö1ri ör8tr ö1ru +5österr ö1te ö5th ö1ti ö1tu ö1v ö1w +öwe8 ö2z üb6e2 3ü4ber1 üb1l üb1r +5ü2bu ü1che ü1chi ü8ch3l üch6s5c ü8ck +ück1a ück5ers üd1a2 ü6deu üdi8t ü2d1o4 +üd5s6 üge4l5a üg1l üh5a ü1he ü8heh +ü6h5erk üh1le üh1re üh1ru ü1hu üh1w +ü3k ü1le ül4l5a ül8lo ül4ps ül6s5c +ü1lu ün8da ün8fei ünk5l ün8za ün6zw +ü5pi ü1re ü8rei ür8fl ür8fr ür8geng +ü1ri ü1ro ür8sta +ü1ru üse8n +ü8sta ü8stes +ü3ta ü1te ü1ti +üt8tr ü1tu üt8zei ü1v ß1a8 5ßa. +ß8as ß1b8 ß1c ß1d +1ße ß5ec 8ße8g 8ße8h +2ß1ei 8ßem ß1f8 ß1g ß1h +1ßi ß1k ß1l ß1m +ß1n ß1o ß1p8 ß5q +ß1r ß1s2 ßst8 ß1ta +ß1te ßt3hei ß1ti ß5to +ß1tr 1ßu8 6ß5um ß1v ß1w +ß1z +2s1ta. +i2s1tal +2s1tani 2s1tan. +fe2s1ta +ta2s1ta +te2s1ta +nd2ste +ve2ste +3s2tec +4s3techn +3s2teg +3s2teh +3s2tein 3s2teig 3s2teif +3s2tell 3s2telz +a4s3tel +3s2temm +3s2temp +3s2tep +s3s2ter t3s2tern +3s2teue +6s4teuro +bs2ti +te2s3ti +ve2sti +3s2tic +3s2tieb +3s2tieg +3s2tif +3s2til +3s2tim +3s2tink +3s2titu +a2s1to +gu2s1to +ku2s1to +i2s1tol i2s1tor +ve2s1to +2s1tung +2s7tus +o2s1tul +aus3s4 +ens3s4 +gs3s4 +.mis2s1 +s2s1b8 +s2s3chen +s2s3d +s2s5ec +2s2s1ei +s2s3f +s2s1g +s2s3h +s2s3k +s2s3l +s2s3m +s2s3n +s2s3p8 +s2s5q +s2s3r +s2s3s2 +sss2t8 +as2s3te +is2s3te +us2s3te +üs2s3te +s2st3hei +s2s3ti +s2s1to +s2s1tr +6ss5um +s2s3v +s2s3w +s2s3z +1cker. +1ckert +1ckad +1cke. +1ckel +1cken +4ck1ent +1ckere +1ckern +1ckeru +1ckie +1ckig +1ckun +} + +% Local Variables: +% coding: latin-1 +% End: +% +% End of file `hyphen.den'. diff --git a/contrib/groff/tmac/hyphen.det b/contrib/groff/tmac/hyphen.det new file mode 100644 index 0000000000..bbcedc572a --- /dev/null +++ b/contrib/groff/tmac/hyphen.det @@ -0,0 +1,628 @@ +% This is the groff hyphenation pattern file `hyphen.det' for German with +% traditional hyphenation rules. +% +% It is based on the TeX pattern file `dehypht.tex' as of 03 March 1999. +% +% Here is the copyright message: +% +% Copyright (C) 1988,1991 Rechenzentrum der Ruhr-Universitaet Bochum +% [german hyphen patterns] +% Copyright (C) 1993,1994,1999 Bernd Raichle/DANTE e.V. +% [macros, adaption for TeX 2] +% +% ----------------------------------------------------------------- +% IMPORTANT NOTICE: +% +% This program can be redistributed and/or modified under the terms +% of the LaTeX Project Public License Distributed from CTAN +% archives in directory macros/latex/base/lppl.txt; either +% version 1 of the License, or any later version. +% ----------------------------------------------------------------- +% +% Please check the original file for more details. +% +% It has been made suitable for groff by expanding all macros to real +% characters in latin-1 encoding. +% +\patterns{% +.aa6l .ab3a4s .ab3ei .abi2 .ab3it .ab1l .ab1r .ab3u .ad3o4r .alti6 +.ana3c .an5alg .an1e .ang8s .an1s .ap1p .ar6sc .ar6ta .ar6tei .as2z +.au2f1 .au2s3 .be5erb .be3na .ber6t5r .bie6r5 .bim6s5t .brot3 .bru6s +.ch6 .che6f5 .da8c .da2r .dar5in .dar5u .den6ka .de5r6en .des6pe +.de8spo .de3sz .dia3s4 .dien4 .dy2s1 .ehren5 .eine6 .ei6n5eh .ei8nen +.ein5sa .en6der .en6d5r .en3k4 .en8ta8 .en8tei .en4t3r .epo1 .er6ban +.er6b5ei .er6bla .er6d5um .er3ei .er5er .er3in .er3o4b .erwi5s .es1p +.es8t .ex1a2 .ex3em .fal6sc .fe6st5a .flu4g3 .furch8 .ga6ner .ge3n4a +.ge5rö .ges6 .halb5 .halbe6 .hal6br .haup4 .hau4t .heima6 .he4r3e +.her6za .he5x .hin3 .hir8sc .ho4c .hu3sa .hy5o .ibe5 .ima6ge .in1 +.ini6 .is5chi .jagd5 .kal6k5o .ka6ph .ki4e .kop6f3 .kraf6 .kü5ra +.lab6br .liie6 .lo6s5k .lö4s3t .ma5d .mi2t1 .no6th .no6top +.obe8ri .ob1l .obs2 .ob6st5e .or3c .ort6s5e .ost3a .oste8r .pe4re +.pe3ts .ph6 .po8str .rau4m3 .re5an .ro8q .ru5the .rü5be +.rü8stet .sch8 .se6e .se5n6h .se5ra .si2e .spi6ke .st4 .sy2n +.tages5 .tan6kl .ta8th .te6e .te8str .to6der .to8nin .to6we .um1 +.umpf4 .un1 .une6 .unge5n .ur1c .ur5en .ve6rin .vora8 .wah6l5 .we8ges +.wo6r .wor3a .wun4s .zi4e .zuch8 .ände8re .öch8 aa1c aa2gr +aal5e aa6r5a a5arti aa2s1t aat2s 6aba ab3art 1abdr 6abel aben6dr +ab5erk ab5err ab5esse 1abf 1abg 1abhä ab1ir 1abko a1bl ab1la +5ablag a6blaß ab4ler ab1lu a8blä 5a6blö abma5c +1abn ab1ra ab1re 5a6brec ab1ro ab1s ab8sk abs2z 3abtei ab1ur 1abw +5abze 5abzu ab1än abäu8 a4ce. a5chal ach5art ach5au a1che +a8chent ach6er. a6ch5erf a1chi ach1l ach3m ach5n a1cho ach3re a1chu +ach1w a1chy ach5äf ack1o acks6t ack5sta a1d 8ad. a6d5ac ad3ant +ad8ar 5addi a8dein ade5o8 adi5en 1adj 1adle ad1op a2dre 3adres adt1 +1adv a6dä a1e2d ae1r a1er. 1aero 8afa a3fal af1an a5far a5fat +af1au a6fentl a2f1ex af1fr af5rau af1re 1afri af6tent af6tra aft5re +a6f5um 8afä ag5abe 5a4gent ag8er ages5e 1aggr ag5las ag1lo a1gn +ag2ne 1agog a6g5und a1ha a1he ah5ein a4h3erh a1hi ahl1a ah1le ah4m3ar +ahn1a a5ho ahra6 ahr5ab ah1re ah8rei ahren8s ahre4s3 ahr8ti ah1ru a1hu +ah8ö ai3d2s ai1e aif6 a3inse ai4re. a5isch. ais8e a3ismu ais6n +aiso6 a1j 1akad a4kade a1ke a1ki 1akko 5akro1 a5lal al5ans 3al8arm +al8beb al8berw alb5la 3album al1c a1le a6l5e6be a4l3ein a8lel a8lerb +a8lerh a6lert 5a6l5eth 1algi al4gli al3int al4lab al8lan al4l3ar +alle3g a1lo a4l5ob al6schm al4the altist5 al4t3re 8a1lu alu5i a6lur +alu3ta a1lä a6mate 8ame. 5a6meise am6m5ei am6mum am2n ampf3a +am6schw am2ta a1mu a1mä a3nac a1nad anadi5e an3ako an3alp 3analy +an3ame an3ara a1nas an5asti a1nat anat5s an8dent ande4s3 an1ec an5eis +an1e2k 4aner. a6n5erd a8nerf a6n5erke 1anfa 5anfert 1anfä 3angab +5angebo an3gli ang6lis an2gn 3angri ang5t6 5anhä ani5g ani4ka +an5i8on an1kl an6kno an4kro 1anl anma5c anmar4 3annah anne4s3 a1no +5a6n1o2d 5a6n3oma 5a6nord 1anr an1sa 5anschl an4soz an1st 5anstal +an1s2z 5antenn an1th 5anwä a5ny an4z3ed 5anzeig 5anzieh 3anzug +an1ä 5anäs a1nö anö8d a1os a1pa 3apfel a2ph1t +aph5ä6 a1pi 8apl apo1c apo1s a6poste a6poth 1appa ap1pr a1pr +a5pä a3pü a1ra a4r3af ar3all 3arbei 2arbt ar1c 2a1re ar3ein +ar2gl 2a1ri ari5es ar8kers ar6les ar4nan ar5o6ch ar1o2d a1rol ar3ony +a8ror a3ros ar5ox ar6schl 8artei ar6t5ri a1ru a1ry 1arzt arz1w +ar8zä arä8m arö6 ar5öm ar1ü2 a1sa a6schec +asch5l asch3m a6schn a3s4hi as1pa asp5l a8steb as5tev 1asth a6stoc +a1str ast3re 8a1ta ata5c ata3la a6tapf ata5pl a1te a6teli aten5a +ate5ran 6atf 6atg a1th at3hal 1athl 2a1ti 5atlant 3atlas 8atmus 6atn +a1to a6t5ops ato6ra a6t5ort. 4a1tr a6t5ru at2t1h at5t6hä 6a1tu +atz1w a1tä a1tü au1a au6bre auch3a au1e aue4l 5aufent +3auffü 3aufga 1aufn auf1t 3auftr 1aufw 3auge. au4kle aule8s 6aum +au8mar aum5p 1ausb 3ausd 1ausf 1ausg au8sin 3auss au4sta 1ausw 1ausz +aut5eng au1th 1auto auße8 a1v ave5r6a aver6i a1w a6wes a1x +a2xia a6xio a1ya a1z azi5er. 8aß 1ba 8ba8del ba1la ba1na +ban6k5r ba5ot bardi6n ba1ro basten6 bau3sp 2b1b bb6le b2bli 2b1c 2b1d +1be be1a be8at. be1ch 8becht 8becke. be5el be1en bee8rei be5eta bef2 +8beff be1g2 behö8 bei1s 6b5eisen bei3tr b8el bel8o belu3t be3nac +bend6o be6ners be6nerw be4nor ben4se6 bens5el be1nä be1nü +be1o2 b8er. be1ra be8rac ber8gab. ber1r be1rü bes8c bes5erh +bes2p be5tha bet5sc be1un be1ur 8bex be6zwec 2b1f8 bfe6st5e 2b1g2 +bga2s5 bge1 2b1h bhole6 1bi bi1bl b6ie bi1el bi1la bilä5 bi1na +bi4nok bi5str bi6stu bi5tr bit4t5r b1j 2b1k2 bkü6 bl8 b6la. +6b1lad 6blag 8blam 1blat b8latt 3blau. b6lav 3ble. b1leb b1led +8b1leg 8b1leh 8bleid 8bleih 6b3lein blei3s ble4m3o 4blich b4lind +8bling b2lio 5blit b4litz b1loh 8b1los 1blu 5blum 2blun blut3a blut5sc +3blä bläs5c 5blö 3blü blü8sc 2b1m 2b1n 1bo +bo1ch bo5d6s boe5 8boff 8bonk bo1ra b1ort 2b1p2 b1q 1br brail6 brast8 +bre4a b5red 8bref 8b5riem b6riga bro1s b1rup b2ruz 8bröh +brös5c 8bs b1sa b8sang b2s1ar b1sc bs3erl bs3erz b8sof b1s2p +bst1h b3stru b5stä b6sun 2b1t b2t1h 1bu bu1ie bul6k b8ure bu6sin +6b1v 2b1w 1by1 by6te. 8b1z bzi1s 1bä b5ä6s5 1bü +b6ü5bere büge6 bügel5e bür6sc 1ca cag6 ca5la ca6re +ca5y c1c 1ce celi4c celich5 ce1ro c8h 2ch. 1chae ch1ah ch3akt cha6mer +8chanz 5chara 3chari 5chato 6chb 1chef 6chei ch3eil ch3eis 6cherkl +6chf 4chh 5chiad 5chias 6chins 8chj chl6 5chlor 6ch2m 2chn6 ch8nie +5cho. 8chob choi8d 6chp ch3ren ch6res ch3rü 2chs 2cht cht5ha +cht3hi 5chthon ch6tin 6chuh chu4la 6ch3unt chut6t 8chw 1ci ci5tr c2k +2ck. ck1ei 4ckh ck3l ck3n ck5o8f ck1r 2cks ck5stra ck6s5u c2l 1c8o +con6ne 8corb cos6t c3q 1c6r 8c1t 1cu 1cy 5cä1 cö5 1da. +8daas 2dabg 8dabr 6dabt 6dabw 1dac da2gr 6d5alk 8d5amt dan6ce. +dani5er dan8ker 2danl danla6 6dans 8danzi 6danzu d1ap da2r1a8 2d1arb +d3arc dar6men 4d3art 8darz 1dat 8datm 2d1auf 2d1aus 2d1b 2d1c 2d1d +d5de d3d2h ddämme8 1de 2deal de5an de3cha de1e defe6 6deff 2d1ehr +5d4eic de5isc de8lar del6s5e del6spr de4mag de8mun de8nep dene6r +8denge. 8dengen de5o6d 2deol de5ram 8derdb der5ein de1ro der1r d8ers +der5um de4s3am de4s3an de4sau de6sil de4sin de8sor de4spr de2su 8deul +de5us. 2d1f df2l 2d1g 2d1h 1di dia5c di5ara dice5 di3chr di5ena di1gn +di1la dil8s di1na 8dind 6dinf 4d3inh 2d1ins di5o6d di3p4t di8sen dis1p +di5s8per di6s5to dis5tra di8tan di8tin d1j 6dje 2dju 2d1k 2d1l 2d1m +2d1n6 dni6 dnje6 1do 6d5obe do6berf 6d5ony do3ran 6dord 2d1org dor4t3h +do6ste 6doth dott8e 2d1p d5q dr4 1drah 8drak d5rand 6dre. 4drech +d6reck 4d3reg 8d3reic d5reife 8drem 8d1ren 2drer 8dres. 6d5rh 1dria +d1ric 8drind droi6 dro5x 1dru 8drut drös5c 1drü drü5b +drü8sc 2ds d1sa d6san dsat6 d1sc 5d6scha. 5dschik dse8e d8serg +8dsl d1sp d4spak ds2po d8spä d1st d1sü 2dt d1ta d1te d1ti +d1to dt1s6 d1tu d5tä 1du du5als du1b6 du1e duf4t3r 4d3uh du5ie +8duml 8dumw 2d1und du8ni 6d5unt dur2c durch3 6durl 6dursa 8durt du1s +du8schr 2d1v 2d1w dwa8l 2d1z 1dä 6däh 8dänd dä6r +dö8bl d5öl dör6fl dö8sc d5ö4st dös3te +1dü ea4ben e1ac e1ah e1akt e1al. e5alf e1alg e5a8lin e1alk e1all +e5alp e1alt e5alw e1am e1and ea6nim e1ar. e5arf e1ark e5arm e3art +e5at. e6ate e6a5t6l e8ats e5att e6au. e1aus e1b e6b5am ebens5e +eb4lie eb4ser eb4s3in e1che e8cherz e1chi ech3m 8ech3n ech1r ech8send +ech4su e1chu eck5an e5cl e1d ee5a ee3e ee5g e1ei ee5isc eei4s3t +ee6lend e1ell ee5lö e1erd ee3r4e ee8reng eere6s5 ee5rä +ee6tat e1ex e1f e6fau e8fe8b 3effek ef3rom ege6ra eglo6si 1egy e1ha +e6h5ach eh5ans e6hap eh5auf e1he e1hi ehl3a eh1le ehl5ein eh1mu ehn5ec +e1ho ehr1a eh1re ehre6n eh1ri eh1ru ehr5um e1hu eh1w e1hy e1hä +e1hö e3hüt ei1a eia6s ei6bar eich3a eich5r ei4dar ei6d5ei +ei8derf ei3d4sc ei1e 8eifen 3eifri 1eign eil1d ei6mab ei8mag ein1a4 +ei8nat ei8nerh ei8ness ei6nete ein1g e8ini ein1k ei6n5od ei8nok ei4nor +e3insä ei1o e1irr ei5ru ei8sab ei5schn ei6s5ent ei8sol ei4t3al +eit3ar eit1h ei6thi ei8tho eit8samt ei6t5um e1j 1ekd e1ke e1ki e1k2l +e1kn ekni4 e1la e2l1al 6elan e6lanf e8lanl e6l5ans el3arb el3arm +e6l3art 5e6lasti e6lauge elbst5a e1le 6elef ele6h e6l5ehe e8leif +e6l5einh 1elek e8lel 3eleme e6lemen e6lente el5epi e4l3err e6l5ersc +elf2l elg2 e6l5ins ell8er 4e1lo e4l3ofe el8soh el8tent 5eltern e1lu +elut2 e1lä e1lü em8dei em8meis 4emo emo5s 1emp1f 1empt 1emto +e1mu emurk4 emurks5 e1mä en5a6ben en5achs en5ack e1nad en5af +en5all en3alt en1am en3an. en3ant en3anz en1a6p en1ar en1a6s 6e1nat +en3auf en3aus en2ce enda6l end5erf end5erg en8dess 4ene. en5eck +e8neff e6n5ehr e6n5eim en3eis 6enem. 6enen e4nent 4ener. e8nerd +e6n3erf e4nerg 5energi e6n5erla en5ers e6nerst en5erw 6enes e6n5ess +e2nex en3glo 2eni enni6s5 ennos4 enns8 e1no e6nober eno8f en5opf +e4n3ord en8sers ens8kl en1sp ens6por en5t6ag enta5go en8terbu en6tid +3entla ent5ric 5entwic 5entwu 1entz enu5i e3ny en8zan en1öf +e1nös e1nüg eo1c e5o6fe e5okk e1on. e3onf e5onk e5onl e5onr +e5opf e5ops e5or. e1ord e1org eo5r6h eo1t e1pa e8pee e6p5e6g ep5ent +e1p2f e1pi 5epid e6pidem e1pl 5epos e6pos. ep4p3a e1pr e1pä e1q +e1ra. er5aal 8eraba e5rabel er5a6ben e5rabi er3abs er3ach era5e +era5k6l er3all er3amt e3rand e3rane er3ans e5ranz. e1rap er3arc +e3rari er3a6si e1rat erat3s er3auf e3raum 3erbse er1c e1re 4e5re. +er3eck er5egg er5e2h 2erei e3rei. e8reine er5einr 6eren. e4r3enm +4erer. e6r5erm er5ero er5erst e4r3erz er3ess 5erfül er8gan. +5ergebn er2g5h 5ergänz 5erhöhu 2e1ri eri5ak e6r5iat e4r3ind +e6r5i6n5i6 er5ins e6r5int er5itio er1kl 3erklä 5erlös. +ermen6s er6nab 3ernst 6e1ro. e1rod er1o2f e1rog 6e3roi ero8ide e3rol +e1rom e1ron e3rop8 e2r1or e1ros e1rot er5ox ersch4 5erstat er6t5ein +er2t1h er5t6her 2e1ru eruf4s3 e4r3uhr er3ums e5rus 5erwerb e1ry er5zwa +er3zwu erä8m er5äs erö8 e3rös. e6r1ü2b e1sa +esa8b e8sap e6s5a6v e1sc esch4l ese1a es5ebe eserve5 e8sh es5ill +es3int es4kop e2sl eso8b e1sp espei6s5 es2po es2pu 5essenz e6stabs +e6staf e6st5ak est3ar e8stob e1str est5res es3ur e2sz e1sü e1ta +et8ag etari5e eta8ta e1te eten6te et5hal e5thel e1ti 1etn e1to e1tr +et3rec e8tscha et8se et6tei et2th et2t1r e1tu etu1s et8zent et8zw +e1tä e1tö e1tü eu1a2 eu1e eue8rei eu5fe euin5 euk2 +e1um. eu6nio e5unter eu1o6 eu5p 3europ eu1sp eu5str eu8zo e1v eval6s +eve5r6en ever4i e1w e2wig ex1or 1exp 1extr ey3er. e1z e1ä2 +e5ö8 e1ü e8ßes fa6ch5i fade8 fa6del fa5el. +fal6lo falt8e fa1na fan4gr 6fanl 6fap far6ba far4bl far6r5a 2f1art +fa1sc fau8str fa3y 2f1b2 6f1c 2f1d 1fe 2f1eck fe6dr feh6lei f6eim +8feins f5eis fel5en 8feltern 8femp fe5rant 4ferd. ferri8 fe8stof +fe6str fe6stum fe8tag fet6ta fex1 2ff f1fa f6f5arm f5fe ffe5in ffe6la +ffe8ler ff1f f1fla ff3lei ff4lie ff8sa ff6s5ta 2f1g2 fgewen6 4f1h 1fi +fid4 fi3ds fieb4 fi1la fi8lei fil4m5a f8in. fi1na 8finf fi8scho fi6u +6f1j 2f1k2 f8lanz fl8e 4f3lein 8flib 4fling f2lix 6f3lon 5flop 1flor +5f8läc 3flöt 2f1m 2f1n 1fo foh1 f2on fo6na 2f1op fo5ra +for8mei for8str for8th for6t5r fo5ru 6f5otte 2f1p8 f1q fr6 f5ram +1f8ran f8raß f8re. frei1 5frei. f3reic f3rest f1rib +8f1ric 6frig 1fris fro8na fräs5t 2fs f1sc f2s1er f5str +fs3tät 2ft f1tak f1te ft5e6h ftere6 ft1h f1ti f5to f1tr ft5rad +ft1sc ft2so f1tu ftwi3d4 ft1z 1fu 6f5ums 6funf fun4ka fu8ßend +6f1v 2f1w 2f1z 1fä fä1c 8färm 6fäug +fä8ß föde3 8föf 3för 1fü +fün4f3u 1ga ga6bl 6gabw 8gabz g3a4der ga8ho ga5isc 4gak ga1la +6g5amt ga1na gan5erb gan6g5a ga5nj 6ganl 8gansc 6garb 2g1arc 2g1arm +ga5ro 6g3arti ga8sa ga8sc ga6stre 2g1atm 6g5auf gau5fr g5aus 2g1b g5c +6gd g1da 1ge ge1a2 ge6an ge8at. ge1e2 ge6es gef2 8geff ge1g2l ge1im +4g3eise geist5r gel8bra gelt8s ge5lö ge8nin gen3k 6g5entf +ge3nä ge1or ge1ra ge6rab ger8au 8gerhö ger8ins ge1ro 6g5erz. +ge1rä ge1rü ge1s ges2p ge5unt 4g3ex3 2g1f8 2g1g g1ha 6g1hei +5ghel. g5henn 6g1hi g1ho 1ghr g1hö 1gi gi5la gi8me. gi1na +4g3ins gi3str g1j 2g1k 8gl. 1glad g5lag glan4z3 1glas 6glass 5glaub +g3lauf 1gle. g5leb 3gleic g3lein 5gleis 1glem 2gler 8g3leu gli8a +g2lie 3glied 1g2lik 1g2lim g6lio 1gloa 5glom 1glon 1glop g1los g4loss +g5luf 1g2ly 1glü 2g1m gn8 6gn. 1gna 8gnach 2gnah g1nas g8neu +g2nie g3nis 1gno 8gnot 1go goe1 8gof 2gog 5gogr 6g5oh goni5e 6gonist +go1ra 8gord 2g1p2 g1q 1gr4 g5rahm gra8m gra4s3t 6g1rec gre6ge 4g3reic +g5reit 8grenn gri4e g5riem 5grif 2grig g5ring 6groh 2grot gro6ß +4grut 2gs gs1ab g5sah gs1ak gs1an gs8and gs1ar gs1au g1sc +gs1ef g5seil gs5ein g2s1er gs1in g2s1o gso2r gs1pr g2s1u 2g1t g3te +g2t1h 1gu gu5as gu2e 2gue. 6gued 4g3uh 8gums 6g5unt gu1s gut3h gu2tu +4g1v 2g1w gy1n g1z 1gä 8gä8m 6gärm 1gö 1gü +6güb 1haa hab8r ha8del hade4n 8hae ha5el. haf6tr 2hal. ha1la +hal4b5a 6hale 8han. ha1na han6dr han6ge. 2hani h5anth 6hanz 6harb +h3arbe h3arme ha5ro ha2t1h h1atm hau6san ha8ß h1b2 h1c h1d +he2bl he3cho h3echt he5d6s 5heft h5e6he. hei8ds h1eif 2hein he3ism +he5ist. heit8s3 hek6ta hel8lau 8helt he6mer 1hemm 6h1emp hen5end +hen5klo hen6tri he2nu 8heo he8q her3ab he5rak her3an 4herap her3au +h3erbi he1ro he8ro8b he4r3um her6z5er he4spe he1st heta6 het5am he5th +heu3sc he1xa hey5e h1f2 h1g hgol8 h1h h1iat hie6r5i hi5kt hil1a2 +hil4fr hi5nak hin4ta hi2nu hi5ob hirn5e hir6ner hi1sp hi1th hi5tr +5hitz h1j h6jo h1k2 hlabb4 hla4ga hla6gr h5lai hl8am h1las h1laß +hl1c h1led h3lein h5ler. h2lif h2lim h8linf hl5int h2lip +h2lit h4lor h3lose h1läs hme5e h2nee h2nei hn3eig h2nel hne8n +hne4p3f hn8erz h6netz h2nip h2nit h1nol hn5sp h2nuc h2nud h2nul hoch1 +1hoh hoh8lei 2hoi ho4l3ar 1holz h2on ho1ra 6horg 5horn. ho3sl hos1p +ho4spi h1p hpi6 h1q 6hr h1rai h8rank h5raum hr1c hrcre8 h1red h3reg +h8rei. h4r3erb h8rert hrg2 h1ric hr5ins h2rom hr6t5erl hr2t1h hr6t5ra +hr8tri h6rum hr1z hs3ach h6s5amt h1sc h6s5ec h6s5erl hs8erle h4sob +h1sp h8spaß h8spel hs6po h4spun h1str h4s3tum hs3und +h1sü h5ta. h5tab ht3ac ht1ak ht3ang h5tanz ht1ar ht1at h5taub +h1te h2t1ec ht3eff ht3ehe h4t3eif h8teim h4t3ein ht3eis h6temp h8tentf +hte8ren h6terfü h8tergr h4t3erh h6t5ersc h8terst h8tese h8tess +h2t1eu h4t3ex ht1he ht5hu h1ti ht5rak hts3ah ht1sc ht6sex ht8sk ht8so +h1tu htz8 h5tüm hub5l hu6b5r huh1l h5uhr. huld5a6 hu8lent +hu8lä h5up. h1v h5weib h3weis h1z hä8kl häl8s +häma8tu8 hä8sche. hät1s häu4s3c 2hö. +2höe 8höi hö6s hös5c hühne6 hül4s3t +hütte8re i5adn i1af i5ak. i1al. i1al1a i1alb i1ald i5alei i1alf +i1alg i3alh i1alk i1all i1alp i1alr i1als i1alt i1alv i5alw i3alz +i1an. ia5na i3and ian8e ia8ne8b i1ang i3ank i5ann i1ant i1anz i6apo +i1ar. ia6rab i5arr i1as. i1asm i1ass i5ast. i1at. i5ats i1au i5azz +i6b5eig i6b5eis ib2le i4blis i6brig i6b5unt i6büb i1che ich5ei +i6cherb i1chi ich5ins ich1l ich3m ich1n i1cho icht5an icht3r i1chu +ich1w ick6s5te ic5l i1d id3arm 3ideal ide8na 3ideol ide5rö i6diot +id5rec id1t ie1a ie6b5ar iebe4s3 ie2bl ieb1r ie8bra ie4bre ie8bä +ie2dr ie1e8 ie6f5ad ief5f ie2f1l ie4fro ief1t i1ei ie4l3ec ie8lei +ie4lek i3ell i1en. i1end ien6e i3enf i5enn ien6ne. i1enp i1enr +i5ensa ien8stal i5env i1enz ie5o ier3a4b ie4rap i2ere ie4rec ie6r5ein +ie6r5eis ier8er i3ern. ie8rum ie8rund ie6s5che ie6tau ie8tert ie5the +ie6t5ri i1ett ie5un iex5 2if i1fa if5ang i6fau if1fr if5lac i5f6lie +i1fre ift5a if6t5r ig3art 2ige i8gess ig5he i5gla ig2ni i5go ig3rot +ig3s2p i1ha i8ham i8hans i1he i1hi ih1n ih1r i1hu i8hum ih1w 8i1i ii2s +ii2t i1j i1k i6kak i8kerz i6kes ik4ler i6k5unt 2il i5lac i1lag il3ans +i5las i1lau il6auf i1le ile8h i8lel il2fl il3ipp il6l5enn i1lo ilt8e +i1lu i1lä i8mart imb2 i8mele i8mid imme6l5a i1mu i1mä +i5mö ina5he i1nat in1au inau8s 8ind. in4d3an 5index ind2r 3indus +i5nec i2n1ei i8nerw 3infek 1info 5ingeni ing5s6o 5inhab ini5er. 5inj +in8kät in8nan i1no inoi8d in3o4ku in5sau in1sp 5inspe 5instit +5instru ins4ze 5intere 5interv in3the in5t2r i5ny inä2 i1när +in1äs inö8 in5öd i1nös 2io io1a8 io1c iode4 io2di +ioi8 i1ol. i1om. i1on. i5onb ion2s1 i1ont i5ops i5o8pt i1or. +i3oral io3rat i5orc i1os. i1ot. i1o8x 2ip i1pa i1pi i1p2l i1pr i1q +i1ra ir6bl i1re i1ri ir8me8d ir2m1o2 ir8nak i1ro ir5rho ir6schl +ir6sch5r i5rus i5ry i5rä i1sa i8samt i6sar i2s1au i8scheh i8schei +isch5m isch3r ischä8 is8ele ise3ra i4s3erh is3err isi6de i8sind +is4kop ison5e is6por i8s5tum i5sty i5sö i1ta it5ab. i2t1a2m +i8tax i1te i8tersc i1thi i1tho i5thr it8hä i1ti i8ti8d iti6kl +itmen4 i1to i8tof it3ran it3rau i1tri itri5o it1sc it2se it5spa it8tru +i1tu it6z5erg it6z1w i1tä itä6r5e ität2 itäts5 +i1tü i1u iu6r 2i1v i6vad iva8tin i8vei i6v5ene i8verh i2vob i8vur +i1w iwi2 i5xa i1xe i1z ize8n i8zir i6z5w iä8m i1ä6r +i5ät. i5äv i1ö8 iü8 i6ß5ers ja5la +je2t3r 6jm 5jo jo5as jo1ra jou6l ju5cha jugen4 jugend5 jung5s6 ju1s +3jä 1ka 8kachs 8kakz ka1la kal5d kam5t ka1na 2kanl 8kapf ka6pl +ka5r6a 6k3arbe ka1ro kar6p5f 4k3arti 8karz ka1rä kasi5e ka6teb +kat8ta kauf6s kau3t2 2k1b 2k1c 4k1d kehr6s kehrs5a 8keic 2k1eig 6k5ein +6k5eis ke6lar ke8leis ke8lo 8kemp k5ente. k3entf 8k5ents 6kentz ke1ra +k5erlau 2k1f8 2k1g 2k1h ki5fl 8kik king6s5 6kinh ki5os ki5sp ki5th +8ki8ö 2k1k2 kl8 1kla 8klac k5lager kle4br k3leib 3kleid kle5isc +4k3leit k3lek 6k5ler. 5klet 2klic 8klig k2lim k2lin 5klip 5klop k3lor +1klä 2k1m kmani5e kn8 6kner k2ni knä8 1k2o ko1a2 ko6de. +ko1i koi8t ko6min ko1op ko1or ko6pht ko3ra kor6d5er ko5ru ko5t6sc k3ou +3kow 6k5ox 2k1p2 k1q 1kr8 4k3rad 2k1rec 4k3reic kre5ie 2krib 6krig +2krip 6kroba 2ks k1sa k6sab ksal8s k8samt k6san k1sc k2s1ex k5spat +k5spe k8spil ks6por k1spr kst8 k2s1uf 2k1t kta8l kt5a6re k8tein kte8re +k2t1h k8tinf kt3rec kt1s 1ku ku1ch kuck8 k3uhr ku5ie kum2s1 kunfts5 +kun2s kunst3 ku8rau ku4ro kurz1 ku1st 4kusti ku1ta ku8ß +6k1v 2k1w ky5n 2k1z 1kä kä4m 4k3ämi käse5 1kö +kö1c kö1s 1kü kü1c kür6sc kü1s 1la. +8labf 8labh lab2r 2l1abs lach3r la8dr 5ladu 8ladv 6laff laf5t la2gn +5laken 8lamb la6mer 5lampe. 2l1amt la1na 1land lan4d3a lan4d3r lan4gr +8lanme 6lann 8lanw 6lanä 8lappa lap8pl lap6pr l8ar. la5ra lar4af +la8rag la8ran la6r5a6s l3arbe la8rei 6larm. la8sa la1sc la8sta lat8i +6l5atm 4lauss 4lauto 1law 2lb l8bab l8bauf l8bede l4b3ins l5blo +lbst5an lbst3e 8lc l1che l8chert l1chi lch3m l5cho lch5w 6ld l4d3ei +ld1re l6düb le2bl le8bre lecht6s5 led2r 6leff le4gas 1lehr lei6br +le8inf 8leinn 5leistu 4lektr le6l5ers lemo2 8lemp l8en. 8lends +6lendun le8nend len8erw 6l5ents 4l3entw 4lentz 8lenzy 8leoz 6lepi +le6pip 8lepo 1ler l6er. 8lerbs 6l5erde le8reis le8rend le4r3er 4l3erg +l8ergr 6lerkl 6l5erzie 8lerö 8lesel lesi5e le3sko le3tha let1s +5leuc 4leuro leu4s3t le5xe 6lexp l1f 2l1g lgend8 l8gh lglie3 lglied6 +6l1h 1li li1ar li1as 2lick li8dr li1en lien6n li8ers li8ert 2ließ +3lig li8ga8b li1g6n li1l8a 8limb li1na 4l3indu lings5 +4l3inh 6linj link4s3 4linkt 2lint 8linv lion5s6t 4lipp 5lipt 4lisam +livi5e 6l1j 6l1k l8keim l8kj lk2l lko8f lkor8 lk2sa lk2se 6ll l1la +ll3a4be l8labt ll8anl ll1b ll1c ll1d6 l1le l4l3eim l6l5eise ller3a +l4leti l5lip l1lo ll3ort ll5ov ll6spr llte8 l1lu ll3urg l1lä +l5lü l6lüb 2l1m l6m5o6d 6ln l1na l1no 8lobl lo6br 3loch. +l5o4fen 5loge. 5lohn 4l3ohr 1lok l2on 4l3o4per lo1ra 2l1ord 6lorg +4lort lo1ru 1los. lo8sei 3losig lo6ve lowi5 6l1p lp2f l8pho l8pn +lp4s3te l2pt l1q 8l1r 2ls l1sa l6sarm l1sc l8sec l6s5erg l4s3ers l8sh +l5s6la l1sp ls4por ls2pu l1str l8suni l1sü 2l1t lt5amp l4t3ein +l5ten l6t5eng l6t5erp l4t3hei lt3her l2t1ho l6t5i6b lti1l l8trö +lt1sc lt6ser lt4s3o lt5ums lu8br lu2dr lu1en8 8lu8fe luft3a luf8tr +lu6g5r 2luh l1uhr lu5it 5luk 2l1umf 2l1umw 1lun 6l5u6nio 4l3unte lu5ol +4lurg 6lurs l3urt lu4sto lu3str lu6st5re lu8su lu6tal lu6t5e6g lu8terg +lu3the lu6t5or lu2t1r lu6ß5 l1v lve5r6u 2l1w 1ly lya6 +6lymp ly1no l8zess l8zo8f l3zwei lz5wu 3länd lä5on +lä6sc lät1s 5läuf 2läug läu6s5c lä5v +l1öl 1lös lö1ß6t 6l1übe 1ma +8mabg ma5chan mad2 ma5el 4magg mag8n ma1la ma8lau mal5d 8malde mali5e +malu8 ma8lut 2m1amp 3man mand2 man3ds 8mangr mani5o 8m5anst 6mappa +4m3arbe mar8kr ma1r4o mar8schm 3mas ma1sc ma1tö 4m5auf ma5yo 2m1b +mb6r 2m1c 2m1d md6sä 1me me1ch me5isc 5meld mel8sa 8memp me5nal +men4dr men8schl men8schw 8mentsp me1ra mer4gl me1ro 3mes me6s5ei me1th +me8ß 2m1f6 2m1g 2m1h 1mi mi1a mi6ale mi1la 2m1imm mi1na +mi5nü mi4s3an mit1h mi5t6ra 3mitt mitta8 mi6ß5 6mj +2m1k8 2m1l 2m1m m6mad m6m5ak m8menth m8mentw mme6ra m2mn mm5sp mm5ums +mmut5s m8män m1n8 m5ni 1mo mo5ar mo4dr 8mof mo8gal mo4kla mol5d +m2on mon8do mo4n3od mont8a 6m5ony mopa6 mo1ra mor8d5a mo1sc mo1sp 5mot +moy5 2mp m1pa mpfa6 mpf3l mphe6 m1pi mpin6 m1pl mp2li m2plu mpo8ste +m1pr mprä5 mp8th mput6 mpu5ts m1pö 8m1q 2m1r 2ms ms5au m1sc +msch4l ms6po m3spri m1str 2m1t mt1ar m8tein m2t1h mt6se mt8sä +mu5e 6m5uh mumi1 1mun mun6dr muse5e mu1ta 2m1v mvol2 mvoll3 2m1w 1my +2m1z mä6kl 1män mä1s mä5tr mäu4s3c 3mäß +möb2 6möl 1mü 5mün 3müt 1na. +n5ab. 8nabn n1abs n1abz na6bä na2c nach3e 3nacht 1nae na5el +n1afr 1nag 1n2ah na8ha na8ho 1nai 6nair na4kol n1akt nal1a 8naly 1nama +na4mer na1mn n1amp 8n1amt 5nanc nan6ce n1and n6and. 2n1ang 1nani +1nann n1ans 8nanw 5napf. 1n2ar. na2ra 2n1arc n8ard 1nari n8ark +6n1arm 5n6ars 2n1art n8arv 6natm nat6s5e 1naue 4nauf n3aug 5naui n5auk +na5um 6nausb 6nauto 1nav 2nax 3naz 1naß n1b2 nbau5s n1c +nche5e nch5m 2n1d nda8d n2d1ak nd5ans n2d1ei nde8lac ndel6sa n8derhi +nde4se nde8stal n2dj ndnis5 n6d5or6t nd3rec nd3rot nd8samt nd6sau +ndt1h n8dumd 1ne ne5as ne2bl 6n5ebn 2nec 5neei ne5en ne1g4l 2negy +4n1ein 8neis 4n3e4lem 8nemb 2n1emp nen1a 6n5energ nen3k 8nentb +4n3en3th 8nentl 8n5entn 8n5ents ne1ra ne5r8al ne8ras 8nerbi 6n5erde. +nere5i6d nerfor6 6n5erhö 8nerlö 2n1err n8ers. 6n5ertra +2n1erz nesi3e net1h neu4ra neu5sc 8neuß n1f nf5f nf2l +nflei8 nf5lin nft8st n8g5ac ng5d ng8en nge8ram ngg2 ng1h n6glic ng3rip +ng8ru ng2se4 ng2si n2g1um n1gy n8gäl n1h nhe6r5e 1ni ni1bl +ni5chä ni8dee n6ie ni1en nie6s5te niet5h ni8etn 4n3i6gel n6ik +ni1la 2n1imp ni5na 2n1ind 8ninf 6n5inh ni8nit 6n5inn 2n1ins 4n1int +n6is ni3str ni1th ni1tr n1j n6ji n8kad nk5ans n1ke n8kerla n1ki nk5inh +n5klö n1k2n n8k5not nk3rot n8krü nk5spo nk6t5r n8kuh +n6küb n5l6 nli4mi n1m nmen4s n1na n8nerg nni5o n1no nn4t3ak nnt1h +nnu1e n1ny n1nä n1nö n1nü no5a no4b3la 4n3obs 2nobt +noche8 no6die no4dis no8ia no5isc 6n5o6leu no4mal noni6er 2n1onk n1ony +4n3o4per 6nopf 6nopti no3ra no4ram nor6da 4n1org 2n1ort n6os no1st +8nost. no8tan no8ter noty6pe 6n5ox n1p2 n1q n1r nrös3 6ns n1sac +ns3ang n1sc n8self n8s5erf n8serg n6serk ns5erw n8sint n1s2pe n1spr +n6s5tat. n5s6te. n6stob n1str n1ta n4t3a4go nt5anh nt3ark nt3art +n1te nt3eis nte5n6ar nte8nei nter3a nte6rei nt1ha nt6har n3ther nt5hie +n3thus n1ti nti1c n8tinh nti1t ntlo6b ntmen8 n1to nt3o4ti n1tr ntra5f +ntra5ut nt8rea nt3rec nt8rep n4t3rin nt8rop n4t3rot n4trü nt1s +nts6an nt2sk n1tu nt1z n1tä n1tö n8töl n1tü 1nu +nu1a nu5el nu5en 4n1uhr nu5ie 8numl 6n5ums 6n5umw 2n1und 6nuni 6n5unr +2n1unt 2nup 2nu6r n5uri nu3skr nu5ta n1v 8n1w 1nys n1za n6zab n2z1ar +n6zaus nzi4ga n8zof n6z5unt n1zw n6zwir 1näc 5näe 5näi +n8äl nä6m nä6re n5ärz 5näus n1öl +1nöt n5öz 5nü. 6n1ü2b 5nüß +o5ab. oa2l o8ala o1a2m o1an ob1ac obe4ra o6berh 5o4bers o4beru +obe6ser 1obj o1bl o2bli ob5sk 3obst. ob8sta obst5re ob5sz o1che +oche8b o8chec o3chi och1l och3m ocho8f o3chro och3to o3chu och1w o1d +o2d1ag od2dr ode5i ode6n5e od1tr o5e6b o5e6der. oe8du o1ef o1e2l +o1e2p o1er. o5e8x o1fa of8fan 1offi of8fin of6f5la o5fla o1fr 8o1g +og2n o1ha o1he o6h5eis o1hi ohl1a oh1le oh4l3er 5ohm. oh2ni o1ho +oh1re oh1ru o1hu oh1w o1hy o1hä o5ia o1id. o8idi oi8dr o5ids +o5isch. oiset6 o1ism o3ist. o5i6tu o1j o1k ok2l ok3lau o8klä +1okta o1la old5am old5r o1le ole5in ole1r ole3u ol6gl ol2kl olk4s1 +ol8lak ol8lauf. ol6lel ol8less o1lo ol1s ol6sk o1lu oly1e2 5olym +o2mab om6an o8mau ombe4 o8merz om5sp o1mu o8munt o1mä o1mö +o1na ona8m on1ax on8ent o6n5erb 8oni oni5er. on1k on6n5a6b o1no ono1c +o4nokt 1ons onts8 o1nä oo8f 1oog oo2pe oo2sa o1pa 3o4pera o3pfli +opf3lo opf3r o1pi o1pl o2pli o5p6n op8pa op6pl o1pr o3p4ter 1opti +o1pä o5pö o1q o1ra. o3rad o8radd 1oram o6rang o5ras o8rauf +or5cha or4d3a4m or8dei or8deu 1ordn or4dos o1re o5re. ore2h o8r5ein +ore5isc or6enn or8fla or8fli 1orga 5orgel. or2gl o1ri 5o6rient or8nan +or8nä o1ro or1r2h or6t5an or8tau or8tere o1rus o1ry o1rä +or1ü2 o1sa osa3i 6ose o8serk o1sk o6ske o6ski os2kl os2ko os2kr +osni5e o2s1o2d o3s4per o4stam o6stau o3stra ost3re osu6 o6s5ur o5s6ze +o1ta ot3auf o6taus o1te o6terw o1th othe5u o2th1r o1ti o1to oto1a +ot1re o1tri o1tro ot1sc o3tsu ot6t5erg ot2t3h ot2t5r ot8tö o1tu +ou3e ouf1 ou5f6l o5u6gr ou5ie ou6rar ou1t6a o1v o1wa o1we o6wer. o1wi +owid6 o1wo o5wu o1xe oy5al. oy1e oy1i o5yo o1z oza2r 1o2zea ozo3is +oö8 oß5elt oß1t 3paa pa6ce 5pad pag2 1pak +pa1la pa8na8t pani5el pa4nor pan1s2 1pap pap8s pa8rei par8kr paro8n +par5o6ti part8e 5partei 3partn pas6sep pa4tha 1pau 6paug pau3sc p1b +8p5c 4p1d 1pe 4peic pe5isc 2pek pen3k pen8to8 p8er pe1ra pere6 per5ea +per5eb pe4rem 2perr per8ran 3pers 4persi pe3rü pe4sta pet2s +p2f1ec p4fei pf1f pf2l 5pflanz pf8leg pf3lei 2pft pf3ta p1g 1ph 2ph. +2p1haf 6phb 8phd 6p5heit ph5eme 6phg phi6e 8phk 6phn p5holl pht2 +ph3tha 4ph3the phu6 6phz pi1en pi5err pi1la pi1na 5pinse pioni8e 1pis +pi1s2k pi1th p1k pl8 5pla p2lau 4plei p3lein 2pler 6p5les 2plig p6lik +6p5ling p2liz plo8min 6p1m p1n 1p2o 8poh 5pol po8lan poly1 po3ny po1ra +2porn por4t3h po5rö 5poti p1pa p6p5ei ppe6la pp5f p2p1h p1pi pp1l +ppp6 pp5ren pp1s p5pö pr6 3preis 1pres 2p3rig 5prinz 1prob 1prod +5prog pro8pt pro6t5a prote5i 8proß prä3l 1präs +präte4 1prüf p5schl 2pst 1p2sy p1t p8to8d pt1s 5p6ty 1pu +pu1b2 2puc pu2dr puf8fr 6p5uh pun8s pu8rei pu5s6h pu1ta p1v p3w 5py +py5l p1z pä6der p5ä6m pä8nu 8pär pät5h +pät1s qu6 1qui 8rabk ra6bla 3rable ra2br r1abt 6rabz ra4dan ra2dr +5rafal ra4f3er ra5gla ra2g3n 6raha ral5am 5rald 4ralg ra8lins 2rall +ral5t 8ramei r3anal r6and ran8der ran4dr 8ranf 6ranga 5rangi ran8gli +r3angr rans5pa 8ranw r8anz. ra5or 6rapf ra5pl rap6s5er 2r1arb 1rarh +r1arm ra5ro 2r1art 6r1arz ra8tei ra6t5he 6ratl ra4t3ro r5atta raue4n +6raus. r5austa rau8tel raut5s ray1 r1b rb5lass r6bler rb4lie rbon6n +r8brecht rb6s5tä r8ces r1che rch1l rch3m rch3re rch3tr rch1w 8rd +r1da r8dachs r8dap rda5ro rde5ins rdio5 r8dir rd3ost r1dr r8drau 1re. +re1ak 3reakt re3als re6am. re1as 4reben re6bl rech5a r8edi re3er +8reff 3refl 2reh 5reha r4ei. reich6s5 8reier 6reign re5imp 4r3eina +6r3einb 6reing 6r5einn 6reinr 4r3eins r3eint reli3e 8r5elt 6rempf +2remt ren5a6b ren8gl r3enni 1reno 5rente 4r3enth 8rentl 4r3entw 8rentz +ren4zw re1on requi5 1rer rer4bl 6rerbs 4r3erd 8rerhö 8rerkl +4r3erla 8rerlö 4r3erns 6r5ernä rer5o 6r5erreg r5ertr r5erwec +r5erö re2sa re8schm 2ress re5u8ni 6rewo 2r1ex r1f r8ferd rf4lie +8r1g r8gah rge4bl rge5na rgest4 rg6ne r2gni2 r8gob r4g3ret rg8sel r1h8 +r2hy 5rhyt ri1ar ri5cha rid2g r2ie rieg4s5 ri8ei ri1el ri6ele ri1en +ri3er. ri5ers. ri6fan ri8fer ri8fr 1r2ig ri8kn ri5la rimä8 +ri1na r8inde rin4ga rin6gr 1rinn 6rinner rino1 r8insp 4rinst +ri1nä ri5o6ch ri1o2d ri3o6st 2r1ir r2is ri3sko ri8spr ri8stü +ri5sv r2it 6r5i6tal ri5tr ri6ve. 8r1j 6rk r1ke rkehrs5 r1ki r3klin +r1k2n rk3str rk4t3an rk6to r6kuh rkä4s3t r1l r5li rline5a 6r1m +r6manl rma4p r4m3aph r8minf r8mob rm5sa 2rn r1na rna8be r5ne rn2ei +r6neif r6nex r6nh rn1k r1no r6n5oc rn1sp r1nä r1nü ro6bern +6robs ro1ch 3rock. ro5de ro1e 4rofe ro8hert 1rohr ro5id ro1in ro5isc +6rolym r2on 6roog ro6phan r3ort ro1s2p ro5s6w ro4tau ro1tr ro6ts 5rout +r1p rpe8re rp2f r2ps r2pt r1q 2rr r1ra r1re rrer6 rr6hos r5rhö +r1ri r1ro rro8f rr8or rror5a r1ru r3ry r1rä r1rö r1rü +2r1s r6sab r4sanf rse6e rse5na r2sh r6ska r6ski rs2kl r8sko r2sl rs2p +r6stauf r8sterw r8stran rswi3d4 r2sz 2r1t rt3art r8taut r5tei rt5eige +r8tepe r4t3erh r8terla r4t3hei r5t6hu r4t3int rt5reif rt1sc rt6ser +rt6s5o rt6s5u rt5und r8turt rube6 ru1en 1r4uf ruf4st ru1ie 2r1umg +2r1uml 2rums run8der run4d5r 6rundz 6runf 8runs 2r1unt 2r1ur r6us +ru6sta ru3str ru6tr 1ruts r1v rven1 rvi2c r1w r1x r1za rz5ac r6z5al +r8z1ar r8zerd r6z5erf rz8erh rz4t3h r8zum rä4ste räu8sc +r1öf 5röhr rö5le 3röll 5römis r1ör +rö2sc 3rümp 1sa. 1saa s3a4ben sa2bl 2s1abs 6s1abt 6sabw +3sack. 6s3a4der 1saf sa1fa 4s1aff sa5fr 1sag 1sai sa1i2k1 4s1akt 1sal +sa1la 4s3alpi 6salter salz3a 1sam s5anb san2c 1sand s5angeh 6sanl +2s1ans 6s3antr 8s1anw s1ap s6aph 8sapo sap5p6 s8ar. 2s1arb 3sarg +s1arm sa5ro 2s1art 6s1arz 1sas 1sat sat8a 2s1atl sa8tom 3s8aue s5auff +sau5i s6aur 2s1aus 5s6ause 2s1b2 2sca s4ce 8sch. 3scha. 5schade +3schaf 3schal sch5ame 8schanc 8schb 1sche 6schef 8schex 2schf 2schg +2schh 1schi 2schk 5schlag 5schlu 6schmäß +6schnaß 1scho 6schord 6schp 3schri 8schric 8schrig +8schrou 6schs 2scht sch3ta sch3tr 1schu 8schunt 6schv 2schz 5schö +5schü 2sco scre6 6scu 2s1d 1se se5an se1ap se6ben se5ec see5i6g +se3erl 8seff se6han se8hi se8hö 6s5eid. 2s1eig s8eil 5sein. +sei5n6e 6s5einh 3s8eit 3sel. se4lar selb4 6s3e4lem se8lerl 2s1emp +sen3ac se5nec 6s5ents 4sentz s8er. se8reim ser5inn 8sermä +8s5erzi 6seröf se1um 8sexa 6sexp 2s1f2 sfal8ler 2s3g2 sge5b2 s1h +s8hew 5s6hip 5s4hop 1si 2siat si1b sicht6s 6s5i6dee siege6s5 si1en +si5err si1f2 si1g2n si6g5r si8kau sik1i si4kin si2kl si8kü si1la +sil6br si1na 2s1inf sin5gh 2s1inh sinne6s5 2s1ins si5ru si5str 4s1j +s1k2 6sk. 2skau skel6c skelch5 s6kele 1s2ki. 3s4kin. s6kiz s8kj +6skn 2skow 3skrib 3skrip 2sku 8skü s1l s8lal slei3t s4low 2s1m +s1n 6sna 6snot 1so so1ch 2s1odo so4dor 6s5o4fen solo3 s2on so5of 4sope +so1ra 2s1ord 4sorga sou5c so3un 4s3ox sp2 8spaa 5spal 1span 2spap +s2pec s4peis 1spek s6perg 4spers s6pes 2s1pf 8sphi 1s2phä 1spi +spi4e 6s5pig 6spinse 2spis 2spla 2spol 5s6pom 6s5pos 6spoti 1spra +3s8prec 6spreis 5spring 6sprob 1spru s2pul 1s2pur 6spy 5spän +1spü s1q 2s1r 2s1s2 sse8nu ssini6s ssoi6r 2st. 1sta 4stafe 2stag +sta3la 6stale 4stalg 8stalk 8stamt 6st5anf 4stans 6stanw 6starb sta4te +6staus 2stb 6stc 6std 1ste 4steil 3s2tel st3elb 8stemb 6steppi 8stese +8stesse 6stf 2stg 2sth st1ha st3hei s8t1hi st1ho st5hu 1sti sti4el +4stigm sti3na 6stind 4stinf sti8r 2stk 2stl 2stm 1sto 6stoll. 4st3ope +6stopf. 6stord 6stp 5stra. 4strai 3s4tral 6s5traum 3straß +3strec 6s3tref 8streib 5streif 6streno 6stres 6strev +5s6tria 6strig 5strik 8strisi 3s4troa s8troma st5rose 4struf 3strum +6sträg 2st1s6 2stt 1stu stu5a 4stuc 2stue 8stun. 2stv 2stw s2tyl +6stz 1stä 8stäg 1stö 1stü 8stüch 4stür. +1su su2b1 3suc su1e su2fe su8mar 6sumfa 8sumk 2s1unt sup1p2 6s5u6ran +6surte 2s1v 2s1w 1sy 8syl. sy5la syn1 sy2na syne4 s1z s4zend 5s6zene. +8szu 1sä 6s5änd 6säugi 6säuß +5söm 2s1ü2b 1süc sü8di 1sün 5süß +taats3 4tab. taba6k ta8ban tab2l ta6bre 4tabs t3absc +8tabz 6t3acht ta6der 6tadr tad6s tad2t 1tafe4 1tag ta6ga6 ta8gei +tage4s tag6s5t tah8 tahl3 tai6ne. ta5ir. tak8ta tal3au 1tale ta8leng +tal5ert 6t5a6mer 6tamp tampe6 2t1amt tan5d6a tan8dr tands5a tani5e +6tanl 2tanr t3ans 8t5antr tanu6 t5anw 8tanwa tan8zw ta8rau 6tarbe +1tari 2tark 2t1arm ta1ro 2tart t3arti 6tarz ta1sc ta6sien ta8stem +ta8sto t5aufb 4taufn 8taus. 5tause 8tausf 6tausg t5ausl 2t1b2 2t1c +t6chu 2t1d te2am tea4s te8ben 5techn 4teff te4g3re te6hau 2tehe te4hel +2t1ehr te5id. teig5l 6teign tei8gr 1teil 4teinh t5einhe 4teis t5eisen +8teiw te8lam te4lar 4telek 8telem te6man te6n5ag ten8erw ten5k tens4p +ten8tro 4t3entw 8tentz te6pli 5teppi ter5a6b te3ral ter5au 8terbar +t5erbe. 6terben 8terbs 4t3erbt t5erde. ter5ebe ter5ein te8rers terf4 +8terhö 6terklä ter8nor ter6re. t8erscha t5e6sel te8stau +t3euro te1xa tex3e 8texp tex6ta 2t1f2 2t1g2 2th. th6a 5tha. 2thaa +6t1hab 6t5haf t5hah 8thak 3thal. 6thals 6t3hand 2t1hau 1the. 3t4hea +t1heb t5heil t3heit t3helf 1theo 5therap 5therf 6t5herz 1thes 1thet +5thi. 2t1hil t3him 8thir 3this t5hj 2th1l 2th1m th1n t5hob t5hof +4tholz 6thopti 1thr6 4ths t1hum 1thy 4t1hä 2t1hö t1hü +ti1a2m ti1b tie6fer ti1en ti8gerz tig3l ti8kin ti5lat 1tilg t1ind +tin4k3l ti3spa ti5str 5tite ti5tr ti8vel ti8vr 2t1j 2t1k2 2t1l tl8a +2t1m8 2t1n 3tobe 8tobj to3cha 5tocht 8tock tode4 to8del to8du to1e +6t5o6fen to1in toi6r 5toll. to8mene t2ons 2t1ony to4per 5topf. 6topt +to1ra to1s to6ska tos2l 2toti to1tr t8ou 2t1p2 6t1q tr6 tra5cha +tra8far traf5t 1trag tra6gl tra6gr t3rahm 1trai t6rans tra3sc tra6st +3traue t4re. 2trec t3rech t8reck 6t1red t8ree 4t1reg 3treib 4treif +8t3reis 8trepo tre6t5r t3rev 4t3rez 1trib t6rick tri6er 2trig t8rink +tri6o5d trizi5 tro1a 3troc trocke6 troi8d tro8man. tro3ny 5tropf +6t5rosa t5roß 5trub 5trup trut5 1träg 6t1röh +5trüb trü3bu t1rüc t1rüs 2ts ts1ab t1sac tsa8d +ts1ak t6s5alt ts1an ts1ar ts3auf t3schr t5schä tse6e tsee5i +tsein6s ts3ent ts1er t8serf t4serk t8sh 5t6sik t4s3int ts5ort. +t5s6por t6sprei t1st t6s5tanz ts1th t6stit t4s3tor 1t2sua t2s1uf +t8sum. t2s1u8n t2s1ur 2t1t tt5eif tte6sa tt1ha tt8ret tt1sc tt8ser +tt5s6z 1tuc tuch5a 1tu1e 6tuh t5uhr tu1i tu6it 1tumh 6t5umr 1tums +8tumt 6tund 6tunf 2t1unt tu5ra tu6rau tu6re. tu4r3er 2t1v 2t1w 1ty1 +ty6a ty8la 8tym 6ty6o 2tz tz5al tz1an tz1ar t8zec tzeh6 tzehn5 t6z5ei. +t6zor t4z3um t6zäu 5täg 6täh t5ält t8än +täre8 8tä8st 6täuß t5öffen +8tö8k 1tön 4tüb t6ü5ber. 5tüch 1tür. +u3al. u5alb u5alf u3alh u5alk u3alp u3an. ua5na u3and u5ans u5ar. +ua6th u1au ua1y u2bab ubi5er. u6b5rit ubs2k u5bö u8büb 2uc +u1che u6ch5ec u1chi uch1l uch3m uch5n uch1r uch5to ucht5re u1chu uch1w +uck1a uck5in u1d ud4a u1ei u6ela uene8 u6ep u1er uer1a ue8rerl uer5o +u8esc u2est u8ev u1fa u2f1ei u4f3ent u8ferh uf1fr uf1l uf1ra uf1re +uf1rä uf1rü uf1s2p uf1st uft1s u8gabt u8gad u6gap ugeb8 u8gn +ugo3s4 u1ha u1he u1hi uh1le u1ho uh1re u1hu uh1w u1hä u1hö +6ui ui5en u1ig u3ins uin8tes u5isch. u1j 6uk u1ke u1ki u1kl u8klu +u1k6n u5ky u1la uld8se u1le ul8lac ul6lau ul6le6l ul6lo ulni8 u1lo +ulo6i ult6a ult8e u1lu ul2vr u1lä u1lö 3umfan 5umlau umo8f +um8pho u1mu umu8s u5mö u1n1a un2al un6at unau2 6und. 5undein +un4d3um 3undzw undü8 un8düb une2b un1ec une2h un3eis 3unfal +1unfä 5ungea 3unglü ung2s1 un8gä 1u2nif un4it un8kro +unk5s u1no unpa2 uns2p unvol4 unvoll5 u5os. u1pa u1pi u1p2l u1pr +up4s3t up2t1a u1q u1ra ur5abs ura8d ur5ah u6rak ur3alt u6rana u6r5ans +u8rap ur5a6ri u8ratt u1re ur3eig ur8gri u1ri ur5ins 3urlau urmen6 +ur8nan u1ro 3ursac ur8sau ur8sei ur4sk 3urtei u1ru uru5i6 uru6r u1ry +ur2za ur6zä ur5ä6m u5rö u1rü urück3 u1sa +usa4gi u2s1ar u2s1au u8schec usch5wi u2s1ei use8kel u8sl u4st3a4b +us3tau u3s4ter u2s1uf u8surn ut1ac u1tal uta8m u1tan ut1ar u1tas ut1au +u1te u8teic u4tent u8terf u6terin u4t3hei ut5ho ut1hu u1ti utine5 +uti6q u1to uto5c u1tr ut1sa ut1s6p ut6stro u1tu utz5w u1u u1v uve5n +uve3r4ä u1w u1xe u5ya uy5e6 u1yi u2z1eh u8zerh u5ö uße6n +ußen5e 8vanb 6vang 6varb var8d va6t5a va8tei +va2t1r 2v1b 6v5c 6vd 1ve 6ve5g6 ver1 ver5b verb8l ve2re2 verg8 ve2ru8 +ve1s ve2s3p ve3xe 2v1f 2v1g 6v5h vi6el vie6w5 vi1g4 vi8leh vil6le. +8vint vi1ru vi1tr 2v1k 2v1l 2v1m 4v5n 8vo8f voi6le vol8lend vol8li +v2or1 vo2re vo8rin vo2ro 2v1p 8vra v6re 2v1s 2v1t 2v1v 4v3w 2v1z +waffe8 wa6g5n 1wah wah8n wa5la wal8din wal6ta wan4dr 5ware wa8ru +war4za 1was w5c w1d 5wech we6fl 1weg we8geng weg5h weg3l we2g1r +weh6r5er 5weise weit3r wel2t welt3r we6rat 8werc 5werdu wer4fl 5werk. +wer4ka wer8ku wer4ta wer8term we2sp we8stend we6steu we8str +we8stö wet8ta wich6s5t 1wid wi2dr wiede4 wieder5 wik6 wim6ma +win4d3r 5wirt wisch5l 1wj 6wk 2w1l 8w1n wo1c woche6 wol6f wor6t5r 6ws2 +w1sk 6w5t 5wunde. wun6gr wu1sc wu2t1 6w5w wy5a wärme5 wä1sc +1xag x1ak x3a4men 8xamt x1an 8x1b x1c 1xe. x3e4g 1xen xe1ro x1erz +1xes 8xf x1g 8x1h 1xi 8xid xi8so 4xiste x1k 6x1l x1m 8xn 1xo 8x5o6d +8x3p2 x1r x1s6 8x1t x6tak x8terf x2t1h 1xu xu1e x5ul 6x3w x1z 5ya. +y5an. y5ank y1b y1c y6cha y4chia y1d yen6n y5ern y1g y5h y5in y1j +y1k2 y1lak yl1al yla8m y5lax y1le y1lo y5lu y8mn ym1p2 y3mu y1na yno2d +yn1t y1on. y1o4p y5ou ypo1 y1pr y8ps y1r yri3e yr1r2 y1s ys5iat ys8ty +y1t y3w y1z yä8m z5a6b zab5l 8za6d 1zah za5is 4z3ak 6z1am 5zange. +8zanl 2z1ara 6z5as z5auf 3zaun 2z1b 6z1c 6z1d 1ze ze4dik 4z3eff 8zein +zei4ta zei8ters ze6la ze8lec zel8th 4zemp 6z5engel zen8zin 8zergä +zer8i ze1ro zers8 zerta8 zer8tab zer8tag 8zerz ze8ste zeu6gr 2z1ex +2z1f8 z1g 4z1h 1zi zi1en zi5es. 4z3imp zi1na 6z5inf 6z5inni zin6s5er +8zinsuf zist5r zi5th zi1tr 6z1j 2z1k 2z1l 2z1m 6z1n 1zo zo6gl 4z3oh +zo1on zor6na8 4z1p z5q 6z1r 2z1s8 2z1t z4t3end z4t3hei z8thi 1zu zu3al +zu1b4 zu1f2 6z5uhr zun2a 8zunem zunf8 8zungl zu1o zup8fi zu1s8 zu1z +2z1v zw8 z1wal 5zweck zwei3s z1wel z1wer z6werg 8z5wes 1zwi zwi1s +6z1wo 1zy 2z1z zz8a zzi1s 1zä 1zö 6zöl. zö1le +1zü 2z1ü2b ä1a6 äb1l ä1che ä3chi +äch8sc äch8sp ä5chu äck5a äd1a äd5era +ä6d5ia ä1e ä5fa äf1l äft6s äg1h +äg3le ä6g5nan äg5str ä1he ä1hi äh1le +äh5ne 1ähnl äh1re äh5ri äh1ru ä1hu +äh1w 6äi ä1isc ä6ische ä5ism ä5j +ä1k äl1c ä1le ä8lei äl6schl ämi1e +äm8n äm8s ä5na 5änderu äne5i8 äng3l +änk5l ä1no än6s5c ä1pa äp6s5c 3äq +är1c ä1re äre8m 5ärgern är6gl ä1ri +3ärmel ä1ro ärt6s5 ä1ru 3ärztl ä5rö +ä6s5chen äsen8s äs1th äta8b ä1te äteri4 +äter5it ä6thy ä1ti 3ätk ä1to ät8schl +äts1p ä5tu äub1l äu1e 1äug äu8ga +äu5i ä1um. ä1us. 1äuß ä1z +ö1b ö1che ö5chi öch8stei öch8str öcht6 +5ö6dem 5öffn ö1he öh1l8 öh1re ö1hu +ö1is ö1ke 1ö2ko 1öl. öl6k5l öl8pl +ö1mu ö5na önig6s3 ö1no ö5o6t öpf3l +öp6s5c ö1re ör8gli ö1ri ör8tr ö1ru +5österr ö1te ö5th ö1ti ö1tu ö1v ö1w +öwe8 ö2z üb6e2 3ü4ber1 üb1l üb1r +5ü2bu ü1che ü1chi ü8ch3l üch6s5c ü8ck +ück1a ück5ers üd1a2 ü6deu üdi8t ü2d1o4 +üd5s6 üge4l5a üg1l üh5a ü1he ü8heh +ü6h5erk üh1le üh1re üh1ru ü1hu üh1w +ü3k ü1le ül4l5a ül8lo ül4ps ül6s5c +ü1lu ün8da ün8fei ünk5l ün8za ün6zw +ü5pi ü1re ü8rei ür8fl ür8fr ür8geng +ü1ri ü1ro ür8sta ür8ster ü1ru üse8n +ü8sta ü8stes ü6s5tete ü3ta ü1te ü1ti +üt8tr ü1tu üt8zei ü1v ß1a8 5ßa. +ß8as ß1b8 ß1c ß1d +1ße ß5ec 8ße8g 8ße8h +2ß1ei 8ßem ß1f8 ß1g ß1h +1ßi ß1k ß1l ß1m +ßmana8 ß1n ß1o ß1p8 ß5q +ß1r ß1s2 ßst8 ß1ta +ß1te ßt3hei ß1ti ß5to +ß1tr 1ßu8 6ß5um ß1v ß1w +ß1z +} + +% Local Variables: +% coding: latin-1 +% End: +% +% End of file `hyphen.det'. diff --git a/contrib/groff/tmac/hyphen.fr b/contrib/groff/tmac/hyphen.fr new file mode 100644 index 0000000000..e32dd811c4 --- /dev/null +++ b/contrib/groff/tmac/hyphen.fr @@ -0,0 +1,1324 @@ +% This is the file `hyphen.fr'. +% +% It contains the same hyphenation patterns as `frhyph.tex'. Here the +% copyright message: +% +% frhyph.tex % French hyphenation patterns +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This file is available for free and can used and redistributed +% asis for free. Modified versions should have another name. +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % \message{frhyph.tex - French hyphenation patterns (V2.11) <2002/01/16>} +% +% Please check the original file for more details. +% +% To make the patterns workable with groff, all accent macros in the +% patterns have been converted to use latin-9 characters directly +% (this is, the oe ligature `½' is used), and everything except the +% \pattern command has been discarded since it isn't needed (and groff +% doesn't understand this stuff anyway). +% +%\patterns{ +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%* +2'2 +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%a +.a4 +'a4 +.â4 +'â4 +ab2h % df-bg 1998/02/07 for abhorrer + .ab3réa + 'ab3réa +ad2h % df-bg 1998/02/07 for adh\`esion & co + a1è2dre + .ae3s4ch + 'ae3s4ch + 1alcool + a2l1algi + .amino1a2c + 'amino1a2c + .ana3s4tr + 'ana3s4tr + 1a2nesthési + .anti1a2 + 'anti1a2 + .anti1e2 + 'anti1e2 + .anti1é2 + .anti2enne + 'anti2enne + 'anti1é2 + .anti1s2 + 'anti1s2 + .apo2s3ta + 'apo2s3ta + apo2s3tr + archi1é2pis + .as2ta + 'as2ta + a2s3tro +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%b +1ba +1bâ + .bai2se3main % hyphen disappeared from french 5/2/94 +1be +1bé +1bè +1bê +4be. +4bes. +2bent. % mute syllable: tombent (df) 22/02/94 +1bi +1bî + .bi1a2c + .bi1a2t % like .tri1a2t for tri-athlon bg 12/27/93 + .bi1au + .bio1a2 + .bi2s1a2 + .bi1u2 +1b2l +4ble. +4bles. +2blent. % mute syllable: troublent (df) 28/02/94 +1bo +1bô +1b2r +4bre. +4bres. +2brent. % mute syllable: palabrent (df) 28/02/94 +1bu +1bû +1by +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%c +1ç +1ca +1câ +ca3ou3t2 % for caoutchou... added 3/1/94 df-bg +1ce +1cé +1cè +1cê +4ce. +4ces. +% words ending with -cent (df) 22/02/94 + 2cent. + ja3cent. + ac3cent. + é3cent. + munifi3cent. + réti3cent. +privatdo3cent. + inno3cent. + es3cent. + acquies4cent. + is3cent. + immis4cent. +% +.ch4 +1c2h +4ch. +2chb +4che. +4ches. +2chent. % mute syllable: touchent (df) 22/02/94 + .chè2vre3feuille % hyphen disappeared from french 5/2/94 +2chg +ch2l +4chle. +4chles. + chlo2r3a2c + chlo2r3é2t +2chm +2chn +2chp +ch2r +4chre. +4chres. +2chs +2cht +2chw +1ci +1cî + .ci2s1alp +1c2k +4ck. +2ckb +4cke. +4ckes. +2ckent. % mute syllable: stockent (df) 22/02/94 +2ckf +2ckg +2ck3h +2ckp +2cks +2ckt +1c2l +4cle. +4cles. +2clent. % mute syllable: encerclent (df) 28/02/94 +1co +1cô + co1acc + co1acq + co1a2d + co1ap + co1ar + co1assoc + co1assur + co1au + co1ax +1c½0 % final zero essential to terminate cs + co1é2 + co1ef + co1en + co1ex + .con4 % missing from nb list + .cons4 % missing from nb list + .contre1s2c + .contre3maître % hyphen disappeared from french 5/2/94 + co2nurb + .co1o2 + .co2o3lie +1c2r +4cre. +4cres. +2crent. % mute syllable: massacrent (df) 28/02/94 +1cu +1cû +1cy +.cul4 % -- as .con4 .cons4 (march 92) +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%d +1d' +1da +1dâ + .dacryo1a2 +d1d2h +1de +1dé +1dè +1dê +4de. +4des. +% words ending with -dent (df) 22/02/94 + 2dent. +déca3dent. + é3dent. + cci3dent. + inci3dent. + confi3dent. + tri3dent. + dissi3dent. + chien3dent. + .ar3dent. + impu3dent. + pru3dent. +% + .dé1a2 + .dé1io + .dé1o2 + .dé2s % originaly in JD file + %.d\'e2s1a2 removed 09/17/92 because wrong for the + % original JD 500 words test + .dé3s2a3cr + .dés2a3m % .d\'es2a2mi introduced 09/17/92 bec. i + % can't see why d\'esamidonner ran in JD. + % Moved to .d\'es2a3m df 12/27/93. + .dé3s2a3tell + .dé3s2astr + .dé3s2c % 1 moved 3 due to .d\'e2s 09/17/92 + %.d\'e2s1e2 removed 09/17/92 because wrong for the + % original JD 500 words test + .dé2s1é2 + .dé3s2é3gr + .dé3s2ensib + .dé3s2ert + .dé3s2exu + %.d\'e2s3h removed 09/17/92 because wrong for the + % original JD 500 words test + .dé2s1i2 + .dé3s2i3d + .dé3s2i3gn + .dé3s2i3li + .dé3s2i3nen + .dé3s2invo + .dé3s2i3r + .dé3s2ist + %.d\'e2s1o2 removed 09/17/92 because wrong for the + % original JD 500 words test + .dé3s2o3dé + .dé2s1½0 % final zero essential to terminate cs + .dé3s2o3l + .dé3s2o3pil + .dé3s2orm + .dé3s2orp + .dé3s2oufr + .dé3s2p % 1 moved 3 due to .d\'e2s 09/17/92 + .dé3s2t % 1 moved 3 due to .d\'e2s 09/17/92 + .dé2s1u2n + 3d2hal + 3d2houd +1di +1dî + di2s3cop + .di1a2cé + .di1a2cid + .di1ald + .di1a2mi + .di1a2tom + .di1e2n + .di2s3h +2dlent. % mute syllable: jodlent (df) 28/02/94 +1do +1dô +1d2r +4dre. +4dres. +2drent. % mute syllable: engendrent (df) 28/02/94 +d1s2 +1du +1dû +1dy + .dy2s3 + .dy2s1a2 + .dy2s1i2 + .dy2s1o2 % missing from nb list + .dy2s1u2 +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%e +.e4 +'e4 +.ê4 +'ê4 +.é4 +'é4 +.è4 +'è4 +éd2hi % df-bg 1998/02/07 for r\'edhibitoire + 1é2drie + 1é2drique + 1é2lectr + 1é2lément + .en1a2 + 'en1a2 + 1é2nerg + e2n1i2vr + .en1o2 + 'en1o2 + épi2s3cop + épi3s4cope + e2s3cop + .eu2r1a2 + 'eu2r1a2 + eu1s2tat + extra1 + extra2c + extra2i +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%f +1fa +1fâ +1fe +1fé +1fè +1fê +4fe. +4fes. +2fent. % mute syllable: agrafent chauffent (df) 22/02/94 +% +1fi +1fî +1f2l +4fle. +4fles. +2flent. % mute syllable: gonflent (df) 28/02/94 +1fo +1fô +1f2r +4fre. +4fres. +2frent. % mute syllable: balafrent (df) 28/02/94 +f1s2 +1fu +1fû +1fy +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%g +1ga +1gâ +1ge +1gé +1gè +1gê +4ge. +4ges. +% words ending with -gent (df) 22/02/94 + 2gent. + ré3gent. + entre3gent. + indi3gent. + dili3gent. +intelli3gent. + indul3gent. + tan3gent. + rin3gent. + contin3gent. + .ar3gent. + 'ar3gent. + ser3gent. + ter3gent. +résur3gent. +% +1g2ha +1g2he +1g2hi +1g2ho +1g2hy +1gi +1gî +1g2l +4gle. +4gles. +2glent. % mute syllable: meuglent (df) 28/02/94 + 1g2n + 'a2g3nat % (df) 16/01/02 + .a2g3nat % (df) 16/01/02 + a2g3nos % (df) 16/01/02 (pattern dia2g3n deleted) + co2g3niti % (df) 16/01/02 + 'i2g3né % (df) 16/01/02 + .i2g3né % (df) 16/01/02 + 'i2g3ni % (df) 16/01/02 + .i2g3ni % (df) 16/01/02 + .ma2g3nicide % (df) 16/01/02 + .ma2g3nificat % (df) 16/01/02 + .ma2g3num % (df) 16/01/02 + o2g3nomoni % (df) 16/01/02 + o2g3nosi % (df) 16/01/02 +.pro2g3nath % (df) 16/01/02 + pu2g3nable % (df) 16/01/02 + pu2g3nac % (df) 16/01/02 +.sta2g3n +.syn2g3nath % (df) 16/01/02 + wa2g3n +4gne. +4gnes. +2gnent. % mute syllable: accompagnent (df) 28/02/94 +1go +1gô +1g2r +4gre. +4gres. +2grent. % mute syllable: immigrent (df) 28/02/94 +1gu +1gû +g1s2 +4gue. +4gues. +% words ending with -guent (df) 22/02/94 + 2guent. +.on3guent. +'on3guent. +% +1gy +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%h +1ha +1hâ +1he +1hé +1hè +1hê + hémi1é + hémo1p2t +4he. +4hes. +1hi +1hî +1ho +1hô +1hu +1hû +1hy + hypera2 + hypere2 + hyperé2 + hyperi2 + hypero2 + hypers2 + hype4r1 + hyperu2 + hypo1a2 + hypo1e2 % missing from nb list + hypo1é2 + hypo1i2 + hypo1o2 + hypo1s2 + hypo1u2 +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%i +.i4 +'i4 +.î4 +'î4 + i1algi + i1arthr + i1è2dre +% ill patterns missing from nb list + il2l + cil3l + rcil4l + ucil4l + vacil4l + gil3l + hil3l + lil3l + l3lion + mil3l + mil4let +émil4l + semil4l + rmil4l + armil5l + capil3l + papil3la + papil3le + papil3li + papil3lom + pupil3l + piril3l + thril3l + cyril3l + ibril3l + pusil3l + .stil3l +distil3l +instil3l +fritil3l +boutil3l + vanil3lin + vanil3lis + vil3l + avil4l +chevil4l + uevil4l + uvil4l + xil3l +% end of ill patterns + 1informat % missing from nb list + .in1a2 + 'in1a2 + .in2a3nit + 'in2a3nit + .in2augur + 'in2augur + .in1e2 + 'in1e2 + .in1é2 + 'in1é2 + .in2effab % missing from nb list + 'in2effab + .in2é3lucta + 'in2é3lucta + .in2é3narra + 'in2é3narra + .in2ept + 'in2ept + .in2er + 'in2er + .in2exora % missing from nb list + 'in2exora + .in1i2 + 'in1i2 + .in2i3miti + 'in2i3miti + .in2i3q + 'in2i3q + .in2i3t + 'in2i3t + .in1o2 + 'in1o2 + .in2o3cul + 'in2o3cul + .in2ond + 'in2ond + .in1s2tab + 'in1s2tab + 'inte4r3 + .intera2 + 'intera2 + .intere2 + 'intere2 + .interé2 + 'interé2 + .interi2 + 'interi2 + .intero2 + 'intero2 + .inte4r3 + .interu2 + 'interu2 + .inters2 + 'inters2 + .in1u2 + 'in1u2 + .in2uit + 'in2uit + .in2u3l + 'in2u3l + io1a2ct + i1oxy + i1s2tat +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%j +1j +2jk +4je. +4jes. +2jent. % mute syllable: gal\`ejent (df) 22/02/94 +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%k +1ka +1kâ +1ke +1ké +1kè +1kê +4ke. +4kes. +2kent. % mute syllable: jerkent (df) 22/02/94 +1k2h +4kh. +.kh4 +1ki +1kî +1ko +1kô +1k2r +1ku +1kû +1ky +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%l +1la +1lâ +1là + la2w3re +1le +1lé +1lè +1lê +4le. +4les. +% words ending with -lent (df) 22/02/94 + 2lent. + .ta3lent. + iva3lent. +équiva4lent. + monova3lent. + polyva3lent. + re3lent. + .do3lent. + indo3lent. + inso3lent. + turbu3lent. + succu3lent. + fécu3lent. + trucu3lent. + opu3lent. + corpu3lent. + ru3lent. + sporu4lent. +% +1li +1lî +1lo +1lô +l1s2t +1lu +1lû +1ly +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%m +1ma +1mâ + .ma2c3k + .macro1s2c + .ma2l1a2dres + .ma2l1a2dro + .ma2l1aisé + .ma2l1ap + .ma2l1a2v + .ma2l1en + .ma2l1int + .ma2l1oc + .ma2l1o2d + .ma2r1x % nb (jbb: ?) +1me +1mé +1mé +1mé + .mé2g1oh + .mé2sa % missing from nb list + .mé3san % missing from nb list + .mé2s1es + .mé2s1i + .mé2s1u2s + .méta1s2ta +4me. +4mes. +% words ending with -ment (df) 22/02/94 + â2ment. + da2ment. + fa2ment. + amalga2ment. + cla2ment. + ra2ment. +tempéra3ment. + ta2ment. + testa3ment. + qua2ment. + è2ment. + carê2ment. + diaphrag2ment. + ryth2ment. + ai2ment. + rai3ment. + abî2ment. + éci2ment. + vidi2ment. + subli2ment. + éli2ment. + reli2ment. + mi2ment. + ani2ment. + veni2ment. + ri2ment. + détri3ment. + nutri3ment. + inti2ment. + esti2ment. + l2ment. + flam2ment. + gram2ment. + .gem2ment. + om2ment. + .com3ment. + ô2ment. + slalo2ment. + chro2ment. + to2ment. + ar2ment. + .sar3ment. + er2ment. + antifer3ment. + .ser3ment. + fir2ment. + or2ment. + as2ment. + au2ment. + écu2ment. + fu2ment. + hu2ment. + fichu3ment. + llu2ment. + plu2ment. + bou2ment. + bru2ment. + su2ment. + tu2ment. +% +1mi +1mî + .milli1am + 1m2némo + 1m2nès + 1m2nési +1mo +1mô +1m½0 % final zero essential to terminate cs + .mono1a2 + .mono1e2 + .mono1é2 + .mono1i2 + .mono1ï2dé + .mono1o2 + .mono1u2 + .mono1s2 + mon2t3réal % missing from nb list +m1s2 +1mu +1mû +1my + moye2n1â2g +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%n +1na +1nâ +1ne +1né +1nè +1nê +4ne. +4nes. +% words ending with -nent (df) 22/02/94 + 2nent. % fric-tionnent - syllable muette - bg 27/12/93 + réma3nent. + imma3nent. + perma3nent. + .émi3nent. +préémi3nent. + proémi3nent. + surémi3nent. + immi3nent. + conti3nent. + perti3nent. + absti3nent. +% +1ni +1nî +1no +1nô +1n½0 % final zero essential to terminate cs + .no2n1obs +1nu +1nû + n3s2at. + n3s2ats. +n1x +1ny +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%o +.o4 +'o4 +'ô4 +.ô4 +%'\"o2 % mjf % deleted 3/1/94 df-bg + o2b3long + 1octet % missing from nb list + o1d2l + o1è2dre + o1ioni + ombud2s3 + omni1s2 + o1s2tas + o1s2tat + o1s2téro + o1s2tim + o1s2tom + o1s2trad + o1s2tratu + o1s2triction + .oua1ou + 'oua1ou + .ovi1s2c + 'ovi1s2c + oxy1a2 +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%p +1pa +1pâ + paléo1é2 + .pa2n1a2f + .pa2n1a2mé + .pa2n1a2ra + .pa2n1is + .pa2n1o2ph + .pa2n1opt + .pa2r1a2che + .pa2r1a2chè + .para1s2 + .pa2r3hé +1pe +1pé +1pè +1pê +4pe. +4pes. +% words ending with -pent (df) 22/02/94 + 2pent. + re3pent. +.ar3pent. +'ar3pent. +ser3pent. +% + .pen2ta % pent- or penta- but never pen-ta bg 12/27/93 + per3h + pé2nul % p\'e2n1ul moved back 09/17/92 to JD def. + .pe4r + .per1a2 + .per1e2 + .per1é2 + .per1i2 + .per1o2 + .per1u2 + pé1r2é2q % 2r1 moved 09/17/92 to 1r2(it was a typo) + .péri1os + .péri1s2 + .péri2s3s + .péri2s3ta + .péri1u2 +1p2h +.ph4 +4ph. + .phalan3s2t +4phe. +4phes. +2phent. % mute syllable: triomphent (df) 22/02/94 +ph2l +4phle. +4phles. +2phn + photo1s2 +ph2r +4phre. +4phres. +2phs +2pht + 3ph2talé + 3ph2tis +%%%% Here is an example of a pb involving phonetic and etymologic patterns 5/94 +%%%% .phyto3ph2 % originaly, but wrong for phy-toph-thora 9/92 +%%%% .phy2topha % for -pharmacie but wrong for phyto-biol.. 5/94 +1pi +1pî +1p2l +4ple. +4ples. +2plent. % mute syllable: accouplent (df) 28/02/94 + .pluri1a + 1p2né + 1p2neu +1po +1pô + po1astre + poly1a2 + poly1e2 + poly1é2 + poly1è2 + poly1i2 + poly1o2 + poly1s2 + poly1u2 + .pon2tet % JD hypenated it asis 09/17/92, exception + .pos2t3h + .pos2t1in + .pos2t1o2 + .pos2t3r + .post1s2 +1p2r +4pre. +4pres. +2prent. % mute syllable: empourprent (df) 28/02/94 + .pré1a2 + .pré2a3la % missing from nb list + .pré2au + .pré1é2 + .pré1e2 + .pré1i2 + .pré1o2 + .pré1u2 + .pré1s2 + .pro1é2 + .pro1s2cé + pro2s3tat + .prou3d2h + 1p2sych + .psycho1a2n + 1p2tèr + 1p2tér +1pu + .pud1d2l +1pû +1py +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%q +1q +4que. +4ques. +% words ending with -quent (df) 22/02/94 + 2quent. + é3quent. + élo3quent. +grandilo3quent. +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%r +1ra +1râ + radio1a2 % missing from nb list +1re +1ré +1rè +1rê + .ré1a2 + .ré2a3le + .ré2a3lis + .ré2a3lit + .ré2aux + .ré1é2 + .ré1e2 + .ré2el + .ré2er + .ré2èr + .ré1i2 + .ré2i3fi + .ré1o2 + .re1s2 + .re2s3cap + .re2s3cisi % for res-cision 09/17/92 (missing from nb) + .re2s3ciso % for res-cisoire 09/17/92(missing from nb) + .re2s3cou + .re2s3cri + .re2s3pect + .re2s3pir + .re2s3plend + .re2s3pons + .re2s3quil + .re2s3s + .re2s3t + .re3s4tab + .re3s4tag + .re3s4tand + .re3s4tat + .re3s4tén + .re3s4tér + .re3s4tim + .re3s4tip + .re3s4toc + .re3s4top + .re3s4tr + .re4s5trein + .re4s5trict + .re4s5trin + .re3s4tu + .re3s4ty + .réu2 %.r\'e1u2 % pattern rejected 12/2/92 + % (don't hyphenate as r\'e-union nor r\'eu-nion) + .ré2uss + .rétro1a2 +4re. +4res. +% words ending with -rent (df) 22/02/94 + 2rent. % es-p\`erent - syllable muette - bg 27/12/93 + .pa3rent. + appa3rent. +transpa3rent. + é3rent. + tor3rent. + cur3rent. +% +1r2h +4rhe. +4rhes. + 2r3heur + 2r3hydr +1ri +1rî +1ro +1rô +1ru +1rû +1ry +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%s +1sa +1sâ +.sch4 + 1s2caph + 1s2clér + 1s2cop + 1s2ch +e2s3ch +i2s3ché +i2s3chia +i2s3chio +4sch. +4sche. +4sches. +2schs +1se +1sé +1sè +1sê + sesqui1a2 +4se. +4ses. +% words ending with -sent (df) 22/02/94 + 2sent. % massent - syllable muette - bg 27/12/93 + ab3sent. +pré3sent. + .res3sent. +% +.seu2le % jbb +.sh4 +1s2h +4sh. +4she. +4shes. +2shent. % mute syllable: smashent (df) 22/02/94 +2shm + 2s3hom +2shr +2shs +1si +1sî + 1s2lav + 1s2lov +1so +1sô +1s½0 % final zero essential to terminate cs + 1s2patia + 1s2perm + 1s2por + 1s2phèr + 1s2phér + 1s2piel + 1s2piros + 1s2tandard + 1s2tein + stéréo1s2 + 1s2tigm + 1s2tock + 1s2tomos + 1s2troph + 1s2tructu + 1s2tyle +1su +1sû + .su2b1a2 + .su3b2alt + .su2b1é2 + .su3b2é3r + .su2b1in + .su2b3limin + .su2b3lin + .su2b3lu + sub1s2 + .su2b1ur + supero2 + supe4r1 + supers2 + .su2r1a2 + su3r2ah + .su3r2a3t + .su2r1e2 + .su3r2eau + .su3r2ell + .su3r2et + .su2r1é2 + .su2r3h + .su2r1i2m + .su2r1inf + .su2r1int + .su2r1of + .su2r1ox +1sy +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%t +1ta +1tâ +1tà + tachy1a2 + tchin3t2 +1te +1té +1tè +1tê + télé1e2 + télé1i2 + télé1o2b + télé1o2p + télé1s2 +4te. +4tes. +% words ending with -tent (df) 22/02/94 + 2tent. % mentent - syllable muette - bg 27/12/93 + .la3tent. + .pa3tent. + compé3tent. + éni3tent. + mécon3tent. + omnipo3tent. +ventripo3tent. +équipo3tent. + impo3tent. + mit3tent. +% +.th4 +1t2h +4th. +4the. +4thes. + thermo1s2 + 2t3heur +2thl % th2l was wrong for ...ath-lon (jd said 2thl) df 12/27/93 +2thm +2thn +th2r +4thre. +4thres. +2ths +1ti +1tî +1to +1tô +1t2r + tran2s1a2 + tran3s2act + tran3s2ats + tran2s3h + tran2s1o2 + tran2s3p + tran2s1u2 +4tre. +4tres. +2trent. % mute syllable: infiltrent (df) 28/02/94 + .tri1a2c + .tri1a2n + .tri1a2t + .tri1o2n + t1t2l +1tu +1tû +tung2s3 +1ty +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%u +.u4 +'u4 +.û4 +'û4 + uni1o2v + uni1a2x + u2s3tr +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%v +1va +1vâ +1ve +1vé +1vè +1vê + vélo1s2ki +4ve. +4ves. +% words ending with -vent (df) 22/02/94 + 2vent. +conni3vent. + .sou3vent. +% +1vi +1vî +1vo +1vô + vol2t1amp +1v2r +4vre. +4vres. +2vrent. % mute syllable: recouvrent (df) 28/02/94 +1vu +1vû +1vy +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%w +1wa +1we +4we. +4wes. +2went. % mute syllable: interviewent (df) 22/02/94 +1wi +1wo +1wu +1w2r +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%x +2xent. % mute syllable: malaxent (df) 22/02/94 +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%y +.y4 +'y4 + y1asth + y1s2tom + y1algi +%-------------------%-----------------------% +% phonetic patterns % etymological patterns % +%-------------------%-----------------------% +%%z +1za +1ze +1zé +1zè +4ze. +4zes. +% words ending with -zent (df) 22/02/94 + 2zent. +privatdo3zent. +% +1zi +1zo +1zu +1zy +} + +\endinput + +% Local Variables: +% coding: latin-9 +% End: +% +% End of file `hyphen.fr'. diff --git a/contrib/groff/tmac/hyphen.sv b/contrib/groff/tmac/hyphen.sv new file mode 100644 index 0000000000..407e156a3c --- /dev/null +++ b/contrib/groff/tmac/hyphen.sv @@ -0,0 +1,4757 @@ +% -------------------------------------------------------------------------- +% Swedish hyphenation patterns. +% +% Copyright 1994 by Jan Michael Rynning. All rights reserved. +% This program may be distributed and/or modified under the conditions of +% the LaTeX Project Public License, either version 1.2 of this license or +% (at your option) any later version. The latest version of this license +% is in http://www.latex-project.org/lppl.txt and version 1.2 or later is +% part of all distributions of LaTeX version 1999/12/01 or later. +% +% Last update: 1994-03-03 (March 3, 1994). +% Revision history: +% 1991-01-08: First version available for anonymous FTP. +% 1991-08-08: Changed \aa to \aa0 at end of line, to stop TeX from +% concatenating the patterns. +% 1991-09-03: Cleaned up lots of inconsistencies in the dictionary. +% As a consequence, the patterns shrunk a lot. Also +% added some 4000 one-syllable words, some of which were +% hyphenated by the old patterns, and some 1500 compound +% words, about half of which were incorrectly hyphenated +% by the old patterns. +% 1991-11-01: Added another some 6200 compound words, all of which were +% incorrectly hyphenated by the old patterns. +% 1991-11-13: Added another some 6500 compound words, all of which were +% incorrectly hyphenated by the old patterns. +% 1992-01-30: Changed macros to ^^, for use with LaTeX and dc fonts. +% 1994-03-03: The hyphenated dictionary now contains about 118,000 words. +% The hyphenation now works much better for compound words. +% Patgen parameters: 1 2 20, 2 1 8, 1 4 7, 3 2 1, 1 10000 4. +% +% This file contains Swedish hyphenation patterns for TeX. It assumes +% that you have fonts with the Swedish letters in the positions where +% they occur in ISO Latin 1 (ISO 8859/1): +% Letter: \AA \"A \"O \'E \aa \"a \"o \'e +% Position: "C5 "C4 "D6 "C9 "E5 "E4 "F6 "E9 +% +% Load this file into initex after plain.tex (or lplain.tex, splain.tex, +% or whatever). +% +% The patterns were generated in such a way that they will hyphenate +% correctly if \lefthyphenmin>=1 and \righthyphenmin>=2. +% +% These hyphenation patterns work quite well for simple words, but not +% quite as well for compound words. I'm working on improving the quality, +% by adding more words. If you know any Swedish words which are not +% correctly hypheneted using these patterns, or if you have questions or +% comments, please contact me: +% +% Jan Michael Rynning +% -------------------------------------------------------------------------- +\message{Swedish hyphenation patterns, Jan Michael Rynning, 1994-03-03.} +{ +% Set \catcode, \uccode, and \lccode for the Swedish letters. +% This should be done for all letters, really. +\catcode`^^c5=11 \catcode`^^c4=11 \catcode`^^d6=11 \catcode`^^c9=11 +\catcode`^^e5=11 \catcode`^^e4=11 \catcode`^^f6=11 \catcode`^^e9=11 +\uccode`^^c5=`^^c5 \uccode`^^c4=`^^c4 \uccode`^^d6=`^^d6 \uccode`^^c9=`^^c9 +\uccode`^^e5=`^^c5 \uccode`^^e4=`^^c4 \uccode`^^f6=`^^d6 \uccode`^^e9=`^^c9 +\lccode`^^c5=`^^e5 \lccode`^^c4=`^^e4 \lccode`^^d6=`^^f6 \lccode`^^c9=`^^e9 +\lccode`^^e5=`^^e5 \lccode`^^e4=`^^e4 \lccode`^^f6=`^^f6 \lccode`^^e9=`^^e9 +\patterns{ % just type if you're not using INITEX +.a4b +.ab5i +.ab5ol +.ab3r +.ac3 +.a4d +.a3dr +.ad3s +.a5g4ra +.a5gre +.a5kl +.a5le +.al4pr +.a3lu +.am4br +.amp3l +.a5mu +.and4rar +.a2n5es +.ang4er +.an5go +.an5s +.ap1p +.as2k +.a3sket +.as4t +.a5sten +.a3sti +.a5ta +.at3t +.au3st +.a4val +.av3s4 +.b4 +.bak5s +.ben5s +.bild3s +.bo2k +.bort1 +.cis4 +.cy5klop +.d4 +.d^^e4r3 +.ek1v +.e3l4a +.e2l5in +.en5st +.e4n^^e4 +.e2r3i +.e2s +.e5skad +.es3kal +.es5kap +.es4t +.e5strad +.e3tr +.evan5 +.ex3 +.f4 +.feb3r +.fram3 +.fres5 +.f^^e5gel3 +.f^^f6r1a +.f^^f6r1en +.g2 +.gu4l^^e4 +.gus3 +.he2m +.hu5sa +.ib4 +.ik4 +.im3p +.i2n1 +.i4na +.in3d +.in4ger +.ink2 +.in3s2 +.in3t +.is5ka +.i3so +.k4 +.kans4k +.ko5li +.kort5s +.kring3 +.krings2 +.k^^f6p5s +.l2 +.lak5r +.lek5tr +.lu2st +.m2 +.mas2ke +.ma5skeri +.me4re +.minis4 +.mj^^f6lk5s +.mon2s +.m^^e5n3s +.m^^e54st +.m^^e4n5sko +.m^^f6rk5r +.n4 +.ner1 +.no4n +.n^^f6d5r +.oc1ku +.ok3t +.o3kv +.o2ma +.o2mo +.om3s4 +.o3mu +.on4k +.o3o +.ord3s +.o5sc +.o1s4k +.o3sl +.o3stra +.o3sv +.o3tr +.o1u +.p4 +.papp5s +.pa3ste +.pa5sti +.pi5sti +.pres2s +.pub3lika +.r2 +.re4gr +.re2ste +.runs4 +.rym2d +.r^^f6ve5 +.s4 +.sa2k +.seg3r +.si5o +.sj^^f61 +.sk4 +.skott3s +.slut3s +.st4 +.sta2m +.sten3s +.string4 +.sup3p +.t4 +.ta3bl +.ta4k +.tak5l +.tes3ta +.tig3r +.til4l +.ti3o +.topp5s +.tred2s +.tre3s +.tr^^e45k +.u3k +.ult5r +.ung2e +.up2 +.u4ra +.ur3s +.u2t1 +.u4ta +.u5trer +.ut5s +.v2 +.var4t +.vatten3 +.ved5s +.v^^e42g +.v^^e4g3s +.x2 +.y2a +.y4e +.^^e5ng3 +.^^e5r4s5 +.^^e53st +.^^e5ter1 +.^^e43ro +.^^f63ro +a2b +ab4bu +a5be +abel4s +abe2s +ab1l +ab3la +ab3ort +ab5ric +ab3rio +ab4sc +ab4sk +a5bu +ac4kes +ac4kis +ack3sk +ack3u4p +a5dag +a5dek +a5del +ad5ep +ad3j +ad3op +a5dran +a3dre +1adres +ad3ril +ad3ru +ad2s +a5ed +af4fo +3aff^^e4 +1af3ri +af4tor +a1ga +aga4ra +a1ge +a2ge. +ag1gr +ag1l +ag5ord +ag3ro +a4gur +a4hj +aib4 +a3iv +a1j +a3ka +a4kart +a5ke +a1ki +ak3n +a1ko +ak5ram +akri5s +ak3rob +ak4sta +1aktig +ak3tri +a1ku +a5kvari +ak3ve +a5k^^e5r +ak5^^e5t +4ak^^f6 +a1la +al5adm +ali2br +a2lin +a5lin. +a3line +al3ins +ali5stik +a4lj +alk3ak +al2kv +al4k^^e4 +all3st +al3l^^e5 +alms4k +a1lo +al5ort +als5pa +al3tr +al4tu +al4t^^e4 +a1lu +alu5s +alv3s +a1ly +a4maf +am4i +am4pr +am1s +am3^^e5t +a3m^^f6 +ana4bo +an3alf +an3ark +an3c +anci5 +an5dak +andel2s +an4dun +an4d^^e4n +a4nef +ang4es +an3gi +an1gr +aniu4 +ank3r +ano2i +a4nok +a4nop +an5sce +ansis3t +an4sj +ans5ku +ans3li +ans3par +an1st +an4sto +an4sty +1ansvar +an4tj +an4tre +a1nu +a5ny +a3n^^f6 +a1o +a1pe +a2pe. +ape4n3 +a1pi +ap4lan +apo3str +1appara +apps4k +ap3ric +ap3rif +a5pris +ap2s +ap3se +aps5l +aps3p +apu5s +a5py +a5p^^e4 +2ara +a4rann +a4rarv +1arb +4arbi +2arbo +4arbr +ar3dr +ard5st +a4rend +arg5si +2arh +a1ri +a4rigen +ar3ka +ark3lan +ar5kr +4arl +4arn. +ar4nal +a1ro +a2rob +4arp +ar2sa +ar5skal +arsk5l +ar2sv +ar4tro +arts5p +ar4tur +4aru +a4rur +a5rus +ar4v^^e4g +a3ry +a3r^^e4 +2asa +asbe4 +a1sc +as2h +asis5t +as3kis +a2sko +a4skr +as3ku +as5l +as3pa +as3pig +as2sk +as2s5op +as2sp +as2st +ass5up +as3ta +a5stard +as5ter +as5tiker +asti5o +as3to +as4tr +ast5rak +a5stral +ast3rol +as5t^^f6r +a3su +a4sul +a4sund +as2ut +as3v +a1sy +a2s5^^e5 +a2s^^f6 +a1t +ata5ra +a5te +ati5^^f6 +a4tj +a2tr +a3tral +4atrar +a4t3re +at3ria +a3tric +at3rie +a5trik +a3tris +a3t4ro +a4tro. +at4ska +1attac +at2tak +at4tj +at4tos +att3s +a4tung +2au +au5b +au2t5a +3autom +aut5s +2a1va +a4vart +1avg +2a1vi +av3r +4a3v^^e4 +a5^^e5 +1b2 +3ba +ba4di +ba4do +bad3s4 +bak5l +ba4ko +ba4ku +bank5l +bas4ta +ba5stu +4bb +b4bak +b4batt +bbb4 +bb3l +bb4ler +b4b3r +bb4so +4b3d +3be +be3d4r +be5e +be1k +4beld +be5lu +be3ly +be3l^^e5 +be5l^^f6 +beng4 +be3n^^e5 +be1r^^f6 +be1s +be3sl +bes5s +be4sta +be4ste +be5su +be3tr +be3tv +be3u +4bex +2b3f +2b5h +3bi +bi3d4 +4binv +bis3ko +bi5skv +b3je +b3k +b5lar +b5lat +ble4mo +b5len +5blera +3bles +5blid +3blikr +3bliks +4b3m +2b3n +3bo +bo4gr +bo2kl +bo1mu +5bon +bors5te +bor4ti +bort3r +borts2 +bort3sl +bo1s +bo4sc +boy5 +4b3p +2b5raf +4brar +2b5rati +3brik. +b3rika +3brike +3briks +b5rik^^f6 +bru4st +3bry +3br^^f6 +4b3s +b5sce +bs3ch +b4slan +b4sof +b4sp +bst4 +b4stj +4b3t +3bu +bund4s +bus2st +b3v +3by +by5r +3b^^e5 +b^^e5ng3 +b^^e5t2s +3b^^e4 +3b^^f6 +b^^f6r2s +c2 +5cap +c3c +1c4e +cens3t +3centr +ceu4s +4ch. +3chau +3chef +5choc +4cht +ch^^e4s3 +ch^^f6r4 +1ci +ci4lu +cim2 +cipp4 +4ck +c3ka +c3ke +c3ki +ck5j +ck1l +ck5lis +ck3n +c3ko +c4kordn +ck3org +c4kort +ck3r +ck4re +ck3sla +ckus2 +ck3va +ck3ve +ck3v^^e4 +ck5^^e4 +ck3^^f6 +cle2a +co2a +co4m +4cr +cros2 +4cs +1cy +1d +3da +5da. +4dadr +dags3 +2dak +5dako +da3li +5dam +da3m^^e5 +4dand. +4d1ap +4darb +4dart +da4tr +dat5t +4dax +2db +4dc +dcen3 +2dd +ddd4 +ddi4s +d3dj +d4dos +dd3ra +dd3re +dd3ri +d3dr^^e4 +dd2s +dds3v +3d2e +de1k4 +4deko +4deld +del2sa +dels5ti +de5lut +d4en +denti5^^f6 +den2to +de3pr +5der +der1k +de2ro +de5rol +der5sti +de4ru +de2s +de3se +de3sp +des3ti +d4et +de3tr +4dex +2d1f +df^^f63ra +2d1g +d3gl +2d5h +3di +dias4 +di5el +di2gr +di3ka +di5ku +4dinf +din3g4o +4dinr +4dins +2dinsp +4dint +di1o +di4od +di3sc +di4sj +dis3ko +dis1kr +dis1p +dis5to +dis3tra +di4tre +2dj +d3jor +djup5p +3djur +2d3k2 +4d5l +2d1m +2d1n +3do +d2ol +do5lo +4domr +dom2sk +5don +do4pak +4d5ord +4dori +4dort +d5ost +do3y +2d1p +2d2r2 +d3rad +3d4rag +d3rand +d5rarb +d5rassera +d5ratu +3drej +d3ren +5dres +d3ret +d4ric +3drif +d3rig +4d5rik +d3rin +3d4riv +d5roc +3dropp +d3ror +4drot +drotts3 +d3r^^e4kn +3dr^^e4kt +5dr^^e4n +d3r^^e4t +d5r^^f6d +4ds +d2s1an +d2se +ds5enh +d4sf +d2si +ds3ins +d2sj +dsk2 +d3skef +ds4ken +d3ski +ds3kl +ds5kn +ds1l +ds4lot +ds4mo +d4sm^^e5 +ds5n^^e5 +d2so +ds3pl +ds3s4 +ds3tal +d5stat +ds4te +dste4a +d5stig +ds3tin +ds5tro +d2su +ds1v +d2s^^f6 +2d3t +3du +dub3ble +4dup +du1s +du2sc +du4ste +du5s^^f6 +4dut +du4vu +2d1v +d3vr +2d3w +3dy +dy4kan +dy4ro +4dz +5d^^e5g +2d^^e5s +4d^^e5t +4d^^e4g +d^^e42r +3d^^f6 +d^^f6ds1 +4d^^f6g +4d^^f6p +d5^^f6st +d^^e94 +e1a +e2ake +e4am +4eb +e2br +eb3ril +4ec +e3ch +echiff5 +ecis4 +e3co +e2d +e4dans +edd4r +edi4u +ed3j +e5dral +ed1sk +ed2sko +ed3s2l +edso4 +e3d^^e5 +e1e +e2ed +e4ei +ee2k5 +e4en. +e4ene +e1f +ef4s +3efte +e1g +e3ga +e3ge +ege2l +eg1l +eg2ler +e3glera +e5gleri +e4gran +eg5rat +eg3rin +e5gru +egs3 +e5g^^e5 +eig2 +ei5gn +e3ik +e1in +ei5sh +e1isk +e1jo +e3ju +e3j^^e4 +e5j^^f6 +e3ka +e1ki +e1kl +ek3lat +ek4le +ek3n +e1ko +ekord5s +ek3orr +ek4ret. +ek5ro +e1ku +e1kve +ek5vis +e1ky +e1k^^e4 +e1la +el1akt +el4arb +3eld. +eleb3r +elekt3ri +el4fra +eli5ku +el3k4 +el3li +ell3s +el3l^^e4 +e1lo +e4lob +el3p +el2si +el5ug +e5luv +2e1l^^e4 +e1m +e5mat +e5mis +emon1s +em5ort +emp5le +en5art +e2nav +en4ce +e4ned +e4nek +ene3r^^f6 +2enj +en5klo +en3kn +en5kr +en5k^^e4 +enning5 +ennings2 +eno2m +en3si +ens5ke +ens2m +en2sp +ens4te +ens4vin +en4s^^e5 +ent4ha +en2t1r +ent4rat. +ent3rati +ent3ri +ent5ru +e5nus +2eny +2e1n^^e4 +e1o +e2og +eo4i +e5or +2ep +e1pe +e1pi +e3pla +ep5le +epp2s3 +epps5t +e1pr +ep3s +ep4tr +epu3b +e3p^^e5 +er1ak +4eras +er3d4 +erg4l +er4gu +er4g^^e5s +e1ri +e5rib +e4rinf +erings3 +eri5stik +erk4lin +erl^^e44 +er5na +e1ro +e3rob +e2rom +erp4 +er3ra +er5sc +ers4ken +er3sl +ers4le +er4sta +er2ste +er3str +er3sv +e1ru +e5rum +e3ry +e5r^^e5d +e1r^^e4 +e2sal +es5all +es3arm +e1sc +2ese +es4hi +esi4u +es2k +e4skan +es5kar +e4s3ken +es3ker +es5kul +e1sl +e5slag +es2mi +e1sp +es3pl +es2sk +ess5l^^e4 +es2st +e3stal +es5ten. +esti2ge +es3tin +es5tor. +es4tr +est5rer +e3stru +est4r^^f6 +e3st^^e5 +es2u +e1sy +eta3b +e5ti +eti3^^f6 +e1to +e5tri. +et3ris +e5tr^^e4 +et2s +ets2ad +ets3kr +ets1l +ets3m +ets5pa +et4sv +ett3r +e1tu +etu4ri +et4va +et5vu +e1ty +2etz +e1t^^e4 +et^^e4c4 +euk4 +e5um. +e5up4 +4eur +eu4se. +eu5tro +e1v +e4varm +e4vj +ev3r +3exp +ext4r +4e^^e4 +f2 +3fa +fac4 +fac5ke +4fans +4farb +fa3sh +fa4st +fa4t^^f6 +4fav +4f3b +f3d +3fe +4fef +fe2l +fes5ta +fe3sto +4fex +2f1f +fff4 +ff3l +ff3n +f3fo +ff3r +ffs4 +f3f^^e4 +ff^^f65re +f3g2 +f5h +3fi +fi2br +fib5rig +fi3li +fin5sm +fi3skal +fisk3r +fi2ti +2f3k +1fl +flo4da +4f3m +fma4 +1fo +4fof +fol2 +folk1 +2f5om +fo2na +for4mo +fost3r +4f3p +fra2m +fram5p +f4rer +5freri +fre4s +f4ri. +fri5sp +5frit +fros5ta +fru5str +fr^^e5n5 +2f3s +fs2k +f4sl +f4sm +f4sn +f4sp +f4st +f4sv +2ft +f3ta +f4taf +f4tak +f4tap +f4tarm +fte4r +f4tex +f3ti +f4tin +f3to +f4t3r +ft2sa +ft4set +ft2s5i +ft4sj +fts4t +fts5v^^e4 +ft5t +ft1v +3fu +furs5te +fu5ru +fu3tu +4fv +5fy +fy4ma +f^^e53t^^f6 +1f^^e4 +f^^e4s5ti +3f^^f6 +f^^f62ra +f^^f62ren +f^^f62ri +f^^f6r3k +f^^f6r3sm +f^^f6r3su +f^^f6rt4 +f^^f6r1^^f6 +ga5br +3g2ag +4gakt +3g2al +gall3s +ga5l^^e4 +ga4no +2garb +4garm +ga2ro +4gart +ga4st +ga4su +5g2ati +gaus4 +g4av +g5avsn +4gax +2gb +2gd +g3d4r +ge2a +ge5b4 +2gef +2ge4j +g2eli +3gelis +gel5st +gel5y +3gel^^e4 +gel5^^e4n +g4em +ge4nap +gen5g +3g2eni +3genj +4genm +genom5 +gen4sa +g4ense +1g2ent +4genv +ge5ny +3gen^^e4 +ge2o +1g2era +4gerarb +3g2eri +gers5n +5gese +ge4to +get5s +5g2ett +2g1f +2gg +g1ga +g4gap +g1ge +gg5g +gg1l +g4gos +ggs4la +ggs4m +gg3s4t +gg3s4v +g4gu +2gh +gh4te +1g2i +gi1o +gi5sn +gi4ste +gis4tr +gi5stral +gi5st4rat +3giv +gi2^^f6 +g2jo +3gjor +g3j^^e4 +2g3k2 +2gl +g4lans +g1lar +g2las +5glase +glas5k +5glas^^f6 +g4lid +4glj +g4l^^f6g +5gl^^f6m +2g1m +2g1n +g4nag +g2no +1g2o +3go. +3gol +gon3s4 +4gont +2gord +4gorm +4gort +go3sl +2g1p +g2r4 +3graf +5gral +gra2m5 +5grans +4gras +5grec +5grett +g3rig +4g5rik +5grip +3gris +g5roi +gro2v +4grum +grus5t +g4r^^e5 +5gr^^e5. +gr^^e44n +5gr^^e4ns +2g2s +gs1an +g5satt +g3sel +g4sf +gsi4d +g3sju +g5skaf +gs4ki +gs3kn +gs4kot +g3sky +gs1l +gs1m +g4sme +gs3n +gs4ni +gs4n^^f6 +gs1or +gs3pl +gs3po +gs4por +gs5pre +gs3pu +gs3s +gs3tak +gs3tal +g3stark +gs4ten +g3stif +gs3till +gs3tj +g3stol +gs3tra +gst4re +g3st^^e4m +g4sug +gs1v +g4s3ve +gs3vi +gs3v^^e5 +gs3yt +gs1^^e4 +2g1t +g3tr +1g2u +4gug +guld3 +gul4da +4gul^^e4 +gu2ma +4gup +gu5ru +gus4k +2gut +g3utb +2g1v +4gw +3gy +gytt3j +1g2^^e5 +g^^e5rds5 +2g5^^e5ri +g4^^e4l +g2^^e4r +g^^e44s +1g2^^f6 +4g^^f6g +g^^f65ro +2g5^^f6rt +1h +ha3bl +ha5ge +ha4li +hal4so +halv3^^e5 +ham4st +handels3 +hands4l +han5g2a +ha5ra +ha4sc +ha4sp +hasp5l +has3t +hav2 +havs3 +h5c +4hd +he4at +he4fr +he4l^^e4 +hets1 +hets3t +hets3v +h3g +h2i +4hir +his2sk +hi4t +hj^^e4l3s +h1k +2hl +h4le +2hm +4hn +h2na +h2nit +ho5nu +hop5plo +hop3s +hos3p +hos5ti +4how +h3p +h5ru +h1s +2ht +hu2s +hust5r +hyg5r +hys4t +hys5ta +hy3ster +h^^e5rd5s4 +h^^e4ll2 +h^^e4lls1 +h^^e4lso3 +h^^e44ri +h^^e44s +h^^e44var +h2^^f6 +h^^f62g +h^^f65gen +h^^f6g5r +h^^f6rn5s +h^^f64s +h^^f6st5r +i1a +ia3fr +ia3g +ia4lu +ia4sk +ia3tr +i2b3l +i5bril +i3ca +i4ce. +i5cha +ic4kord +ick3u4 +i5co +i2d +iden3s +id4ge +i4dom +id1r +id3ro +id2s +ids3v +i4dun +i3d^^e5 +i4d^^f6 +2i1e +ifes4 +i5fn +i1fr +3ifr^^e5n +i1g +4igan +i2geb +ig5ej +ig1l +ig3no +i3i +i4kart +i1ki +i3klo +ik5l^^e4n +ik3n +i1ko +ik3re +i5krob +ik5rof +ik5ros +ik5s2h +ik5skor +i3kul +i3kum +ik5u4t +ik1v +i3ky +i3k^^e5 +i3k^^f6 +i1la +il4dan +i2lin +il1j^^f6 +il5k +il5lak +il4lik +ill3s2 +3illu +il5l^^e4r +il2min +i1lo +il2tj +i3lu +ilufts5 +i4lup +i5l^^e4 +im2b3r +im5sm +im4so +i1mu +i5m^^e5 +i3m^^e4 +i5m^^f6 +i4nau +ind5sk^^e4 +ind5sti +1indu +in4ga +in4ge. +ing4es. +ing5is +in5glas +ings5te +i3ni +i4nif +in5j +in5kve +1inneh +5inre +1inri +3inr^^e4 +in4sem +in3skr^^e4 +in3sl +ins4m +in3sn +1inspe +5inspeln +in5spr +3instink +3instru +in4st^^e5 +in5te +1intr +in4tra +int3s +i1nu +i4nun +in3ym +i1n^^e4 +i5oc +i1og +i3ok +io4kr +i1ol +io5li +i5om +ion2 +i3ono +ions3 +i1op +i1or +i1os +i1ot +i1pe +i1pi +ipos4 +ip5pi +i3ra +i4res +i1ri +irk5l +i1ro +iro3p +i1ru +i5sce +isel4 +is2h +i2sk +is5kep +isk5na +is3kopa +is3ku +is4kun +is3ky +i5slam +is3l^^e4n +is3m +is3n +i2s3p +is4pri +is3sa +is3se +iss5n +is4s3tr +iss3t^^e4 +i1stal +i1stans +ist5att +is5ten. +i1stent +is4tes +is3tig +is5ting +is5tor. +is5tore +ist5ro +ist^^e54 +is5v +i3sy +i4s^^e5 +i1t +it5c +i4tei +i4tex +i4tj +it5ran +i5trin +i3tris +it2t5op +it4t3r +it4tu +i2t5^^e5 +4i1u +i1va +i2vak +i1vi +i4vin +iv3r +iv2s +i1v^^e5 +ix2t +ix5tu +i1^^f6 +1ja +3jakt. +4jarb +jas5p +2jb +2jd +jd3r +jd4sty +j4du +1je +je2a +5jef +je5sta +2j1f +4j3g +4jh +1ji +4jin +4jk +j4kl +j3ko +jk3v +2j1l +2jm +2j1n +j2o +3job +jo4kr +4jolj +jo5l^^f6 +jor4din +jord3s4 +3jou +4jp +j5pl +2j3r +2j1s +j5sa +j4sk +js4me +js4te +2jt +jts4 +2j2u +ju4kos +juk3s +jul3k +4jur +jus5kr +juss4 +jus4t +jus5ta +jut4sta +j^^e45lo +j^^e4l4p5r +j^^e4l4sa +j^^e4rn3sk +j^^e4r5s +j^^f6r2s +j^^f6s4t +5j^^e9 +1k2a +3ka. +3kad. +3kade. +ka4dr +2kaf +5kaf^^e4 +ka3i +ka5ju +2kak +k3akti +4kalf +4kalg +kal4lo +kall3s +3kamp +3kamr +3kan. +4kand. +5kano +2kap +3kapi +ka5pla +kap4pr +kaps5t +5kapten +3kar. +ka3ra +4karb +k5arbet +ka5ri +4kark +3karna +4karp +karp5s +4kart. +4karte +4karv +3kas +ka4sk +kas3ti +3kat. +3kats. +4kau +2kb +4kc +2k3d4 +kdom4 +1k2e +3ke. +2ked. +2keda +ke3dr +ked4s +ke4er +2kefu +4keld +kels4 +4kense +ke5n^^e5 +2kep +3kern +ke2s +kes3s +4kex +2k1f +kf^^f62 +kf^^f63ri +2k5g4 +2kh4 +kid3s +4kif +1kig +kik4s +kilt4 +5kim^^e5 +king3r +4kinne +4kins +2kint +ki4nu +ki4tr +kiv3s +4kj +5kjol +k3j^^e4 +2k3k +kl2 +1klag +k2lama +kla4mi +3klang. +3klass +2klat +5klav +2kle +k2lej +2klig +k2lim +3klip +k2lis +5klist3r +k5lock. +5klocka +3klos +1klub +4kluk +1kl^^e4d +2k3l^^e4g +2k1m +2k2n +k4nal +3k4nap +5knip +3k4niv +3k4nu +k4ny +k5nyk +k2o +4koc +ko5de +k5odl +kog3n +ko4gr +kog4s3 +4kola +ko2lin +4kolj +kol5tr +5kolv. +1kom +3komm +5komp +2k3omr +kom4s +1kon +3konf +3konst +3kont +ko3nu +1kor +3korg +ko3ri +2korr +3korres +5kortera +ko5s4k +ko3sl +3kost +ko4str +4k3ou +2k1p +k2r4 +3kraf +5kra3ge +4krang +5krera +k4reten +krid5s2 +1krig +krigs3 +krings2k +4kriv +3kropp +kropps5 +kru5stad +k3ryg +kr^^e5k5s +kr^^e54pa +k5r^^e4dd. +kr^^e4k5l +4kr^^e4l +k3r^^e4t +2ks +ksaks5 +k2s5as +ks3ch +k4ser +ks2k4 +ks3kl +ks5kra +ks5kv +k3sk^^e4 +k3sk^^f6 +k5slag. +ks2li +k5sly +k2so +ks3pl +k1s4t +kstavs3 +ks5tid +k2su +4k1t +k4tex +kti5ge +k4tinn +k2tins +k2tod +k2tom +k2tr +kt3re +kt3rin +k5trod +kt5rog +kt3rol +kt5r^^e4t +kt2st +kt5t4 +k4tug +k2tut +k4t^^e4l +4kug +k5ugn +ku5la +4kuld +3kul^^f6 +kum5pl +kungs5 +5kunn +ku4pen +ku4ro +3kurs +3kus +kust3a +kv4 +3kvali +k5vare +3kvarn +kvar3s +3kvart +k4vato +k2ve +2kvente +1kvinn +5kvire +k4vo +k1v^^e5 +3kv^^e4ll +k1v^^e4r +kydds3 +ky4lin +3kyrk +k^^e4l4m +5k^^e4mp +5k^^e4nn +3k^^e4ns +3k^^e4rl +4k^^f6g +k^^f6ks5t +5k^^f6p. +k^^f6r4l +k^^f6r4sl +3la. +1lade. +2ladm +4ladr +2laf +3lagd. +la4gin +5lagm +lag3r +2lak +5lakan. +5laki +3laktis +la5lo +3lande. +lan4di +2lappara +2larb +1larn +lar5s +4lart +las3h +4lask +la4st +5laste. +1lat. +la5tr +lat4tis +2lau +2lav +la5vu +2lb4 +4l1c +2l2d +lder4s +l3dj +ld3ra +l5dry +lds4an +1le +3le. +le4ge. +le5ig +le2kl +le4kv +lem4s^^f6 +2l5enl +3ler. +ler5k +3lern +ler3ste +le5s2l +le5t^^e5 +le3um +le4vu +2lex +2l1f +2l1g +l2gj +l3g2l +lgs4 +lg5st +2lh +1li +li5ch +3lif +3lig +li4go +lig3s +lik2l +li5kli +lik3s +5limer +2lind +2linga. +ling5o +4lingr +lings5t +2lini +5linj +2lint +li1o +2lip +lis3c +li4sta +li3str^^f6 +li4vo +livs1 +l2jak +4l1jo +1lju +l5j^^e5 +l1j^^e4 +l3j^^f6r +2l1k +l3ke +l5kju +l2kl +lk5lag +l5kl^^e4 +l2kr +l3k4ra +lk3t +l1la +lld4 +ll3dr +lle5b +ll3k +ll1l +l1lo +llok5v +ll3p +ll4san +ll2se +ll3ska +ll2so +ll4sva +ll4tig +ll3tr +l1lu +ll5un +llust3ra +ll5v +l5ly +ll^^e4ggs5 +l5l^^f6d +ll^^f6r4 +ll5^^f6rt +4l1m +l4mol +lm3st +l1n +lo2af +loc4ku +4lodl +lo4do +lod3st +lo2ge. +2lolj +2lom +4lord +2lorg +lor4s +lo4vo +l4pak +l1pe +l1pi +l5pla +lp5l^^f6 +lp4st +4l3r +2l1s +l2sc +l4sjo +l4sj^^e4 +l2sk +l4skensv +l3ski +lsk3n +l5skot +l3skr^^e4 +l3sky +l3sk^^e5 +lsk^^e54p +l3sk^^e4 +l3slu +l4sm +ls4mo +ls5nyt +l2sp +l3spe +ls3pl +ls3pol +ls5s +l2st +l3sta +l4stak +ls4te +ls5ter +l3sto +l3sty +l4styg +l3st^^e5 +l3st^^e4 +l5st^^f6 +l2su +l5sur +l2sv +l4svi +ls5vid +l4s^^e5 +4l1t +lta2tu +l4tef +l4tif +l4tih +l4tos +lt5rati +l4tret +l4tr^^f6 +lt5sk +ltu4 +lu5i +luk4to +4lull. +2lun +lung3 +2lupp +lu4pu +lus2s5p +5lust. +4lutb +4luts +2lv +l1va +l4varm +lvers4 +l1vi +l4vos +lv3ri +lv3sp +l1v^^e4 +lv^^e4v4 +lycks5t +ly4gat +lyg3r +lyg3s2 +3lyste +5lystn +ly4str +2l^^e5. +l^^e5g3s +1l^^e5ng +l^^e5ng3s +l^^e54sk +l^^e5s5te +l^^e54st^^e5 +4l^^e4c +l^^e4g5r +1l^^e4nds +5l^^e4ngder +l^^e44san +l^^e44sp +l^^e4tt3s +4l^^f6l +4l^^f6m +3l^^f6n +3l^^f6rer +1l^^f6s +l^^f64v^^e4 +3l^^e9 +1ma +ma5fr +mag5n +mag5s +ma5ju +mak3r +ma3li +mand4 +mang2a +man5g4o +ma5ni +mani1k +5ma3ri +mash5 +mas3ko +mask3ro +ma5sk^^f6 +mas3ti +mas4v +2mb +mb4sk +2mc +2md +m4dat +m4di +m4do +m3d4r +1me +2meds +me4du +me4kl +me4ko +4meld +melo5 +me5lu +men5k +me5nu +me5ny +mer2sko +me4so +mes4t +me3sti +2meta +me5trin +met3ro +meu4 +2mex +2m1f +m4fes +m4fn +2m1g4 +2mh +1mi +mid3s +mi4lu +2mind +ming4o +4mink +min4kr +4minv +mi3n^^f6 +mis2 +mi5sf +mi4sp +miss3t +mi4te. +mi4tr +mitt3s +2m1k +2m3l +2m1m2 +mme5d +mm3s4 +m4mul +2m1n +m2nam +mnas3t +m4nav +mn5dr +mn3g4 +mn5st +mn5tu +m2n3^^e5 +1mo +m4od +mo4i +2momr +mo3na +mos3k +mo2ta +mo4tin +mo4tu +mot3v +2m1p +m2pak +m4part +m2pl +mp3lad +m5plane +mp3lat +mp3lin +mpos4 +mp5p4 +mps4k +mp5sp +m4p^^e5 +2m1r +4ms +m4sal +m4ske +m3slag +ms3l^^e4 +ms2m +mste2 +m1sto +m2str +mst3rin +ms5^^e4p +2m1t +4mud +mulls3 +mult5r +5mum +4mun3g4 +mun4ko +3mur +3musi +mu3sta +mut4sl +2m3v +1myn +mys4te +m^^e5g4 +1m^^e5l. +5m^^e5let. +5m^^e5n. +4m^^e5r +m^^e51s +4m^^e4g +m^^e4k3 +1m^^e4n +m^^e4ns4 +3m^^e4rk +1m^^e4s +m^^e4s5ta +1m^^e4t +m^^f64bl +m^^f64gen. +3m^^f6j +m^^f6r4kl +3m^^f6s +4m^^f6v +1na +3na. +3nad +nads3 +2naf +na5gr +2nak +3nako +3nakr +na3kro +n1akt +2nalf +5nalfl +4nalg +nal3s +na2lu +n5amb +5namn +4nand. +4nanv +na4rap +2narb +2nark +4narm +2nart +nast3r +2nb4 +2n1c +n2ch +n3cha +n3che +n3chi +ncis4 +ncyk3l +2nd +n4dak +n4dav +nd3d4 +n5de +nde3s +n4dil +nd5rak +nd5ras +nd3rat +nd3ri +n5dril +n3drop +nd5ros +nd5skal +nd3sn +nds3or +nds5v^^e4 +nd5^^e5s +1ne +3ne. +ne4di +5nedl +ne4d3r +ned3s +ne4d^^f6 +ne2gr +ne5gres +4nek. +ne5ly +4nenl +ner5sm +nes3s4 +ne4sta +ne5s4ti +ne3tre +ne1ut +2nex +2n1f4 +nfalls5 +nfis3 +2ng1 +n4gar +n4gen. +n4gend +n4gens +n4genti +n4germ +n4get +n2gi +ng3ig +ngi4s +ng4ly +n2go +ng5om +ng3or +ng3rad +n4gr^^f6 +ng4ser +ngs1k +ngs3pa +ngs5tim +ngs3val +n4g^^f6d +2nh +1n2i +4nid +ni5ec +ni4ki +ni5li +3nin +nings1 +nings3k +nings5v +ni1o +4nip +nip4pr +ni5steri +nist3ra +ni3t4r +niv5sk +niv5st +2n1j +n4jar +n3jun +nju4s +n3j^^e4 +2nk +n4kart +n1ki +n4kis. +n3kny +n1ko +nkrafts5 +nk3ri +n1kro +nkrus4 +nk5sl +nk3sp +nk4tin +n1ku +n1k^^f6 +2n1l +2n1m +2n1n +nn3d +n3ne +nnis4 +nn3k +nn3s4t +1no +2nodl +no4kl +2nolj +2nomr +nom3s4 +2nord +2norg +no5sa +no5sc +no4tu +2n1p +2n1r +4ns +ns2i +n4sint +n4sis. +n4sise +ns2k +ns3kan +n1ski +ns3kor +nslags5 +ns5las +ns5mit +n4soc +n1spi +ns3pl +ns3po +ns3s4 +n3stans +n3stap +ns4tel +n3stif +ns3tig +ns4tra +n2strik +nst5up +nst5vil +n3s4ty +n1sva +ns3vi +ns3v^^e4r +2n1t +n4tark +nter5s4 +n4tinf +n2t5omb +nt3rad +n3trah +n3trak +n5trala +nt3rali +n5tram +nt3rep +n3trer +nt3ria +nt3rin +nt3ris +n4tropin +n4tror +n4tr^^f6 +nts3c +nt4se +nts5kor +nt4str +n4tut +n3tv^^e5 +nufts4 +4nug +n5ugn +3nui +3num +nums5 +2nup +n3upp +2nutb +2n1v +ny5gr +n5z +4n^^e5r +4n^^e4. +4n^^e4c +3n^^e4m +3n^^e4t +4n^^f6g4 +3n^^f6j +n^^f62ja +n^^f65kr +4n^^f6l +n^^f6s4 +n^^f6s5ke +o1a +o2ard +o2b +5o4bj +o4bli +oby4 +oc4k5r +ock3sk +oc3ku +o2d +ode4k +odi4a +1odli +o5dral +o3dro +ods4k +od2st +ods4ti +od5stu +o3d^^e4 +o1e +offs5t +o4fl +o3fr +of^^f6rm^^e54 +o1g +o4gav +og3gr +o4gj +o5glo +o5gly +ognos4 +ogno5st +o4gri +o4gr^^f6 +og3se +og4s3t +o4g^^e4 +o1i +o4il +o1j +o1k +o4kli +ok3n +ok3sl +ok4su +o2kv +o1la +o5lak +ol5au +olf^^f64 +1olj +ol3ka +olk3r +ol4ku +ol4k^^e4 +oll4si +oll5sl^^e4 +ol3l^^e4 +olm4s +oln3s +o1lo +olo5kv +ol4sa +ol4t^^e5 +o1lu +o4lug +o4lur +o1ly +ol5^^e5r +o1l^^e4 +om4br^^e4 +o3men +o4mord +om5pa +om3pl +1omr +4omra +om1sk +om4ste +3oms^^e4t +om4tr +om3tv +on3c +on5gi +on1gr +ongs4l +o4nins +on3j +on1k4 +ons3c +onsi3s +ons3m +on5stel +ons4ter +on3tras +on4tre +ont4s +o1ny +on5^^e5 +o1n^^e4 +o3n^^f6 +oo4d +oom5s +o3or +o1pe +o1pi +o5pline +op4pl +opp3le +op4pr +op4pu +o3pri +op4st +o3p^^e5 +o5q +4ora +o3rak +oran3g4 +o2rap +1ordn +or4d5^^e4 +o4reh +1orga +5organi +or4gr +or4g^^e5 +o1ri +3orient +4ork +or4m^^f6 +or4nu +or4n^^e4 +o1ro +or4pl +or5pr +or4spa +ors5tig +or5te +or2tr +ort3re +ort3ro +o1ru +o3ry +o1r^^e4 +o1r^^f6 +o3s2f^^e4 +osk4l +o1skop +o3som +os5pig +os4sk +os4s4t +os3tig +os5tiker +o5still +os4tr +ost5ron +ost5r^^f6 +os3tul +ota2lan +4oti. +4otie +4otin +o1to +o5tro +ot5run +ot3sv +ot5ti +ot4tr^^e4 +ott2s +o1tu +o5tun +otvin4 +o1ty +o5t^^e5 +o3t^^e4 +oun4 +oup4 +4our +ou3r^^f6 +ou4s +o3ut3t +o1va +ova4n +o1vi +ov3r +ov4si +ov3sl +ovs4me +o1v^^e4 +o3we +ox5 +oy2 +o3^^e5 +o3^^e4n +o3^^f6 +1pa +4paf +pag4 +paki3 +pakis4 +pa5la +pals5 +pa5l^^e4 +4pand. +pan4tr +3pap +2parb +4parm +par3s +2pask +pa5ski +pa2st +3patr +pa3u +2pb4 +2pc +2p3d4 +pek5tri +pekt3ro +4peld +pel3s4i +4pem +5peng +3penn +pent5r +per4bl +3perio +3pers +per4sl +pe5tro +4pex +2p1f +4p3g +2ph +pi4el +1pig +pi1o +3pip +pi5so +pi5sta +pi5sto +p2j +3pj^^e4s +4p3k2 +p2l +p4lac +5plan. +p4lane +p3larn +p3lev +3plex +3plic +1plik +4plit +p3lj +1plom +p3lop +2p1m +4p1n +p3ni +1po +5poa +2poc +2pof +po2i +3polit +4polj +poly3 +2porg +3pos +pos4ter +4pov +po4v^^e4 +2pp +p4part +pp5ask +p4pax +p3pe +p1pi +p4pins +pp3j +pp1l +pp3la +pp3lin +pp5lis +pp5lu +pp3ly +pp3l^^e5n +pp3l^^e5t +pp3l^^e4 +pp3l^^f6 +pp5oc +pp3of +pp3p4 +pp1r +pp3ra +pp3ri +pp3ru +pp3ry +pp3r^^e4 +pp3tr +p2pu +p5py +pp3^^e5 +p2r2 +2pra +5prax +1pres +pres4t +pre3sta +pres5to +p3rig +p3rik +5pril +3princ +pring3 +p5riol +3pro +pro3g +p3ror +4pr^^e5 +3pr^^e4s +3pr^^f6v +2ps +p2sal +3psalm +p5s2ho +ps4ken +ps2li +p3sna +4pso +p3sod +p1s4t +p4stak +p4st^^e4v +p2s^^f6 +2p1t +p3tri +1pu +4pug +pul2l5ov +pul5tr +5pung +3punk +pus3t +2p1v +p^^e53dr +3p^^e4l +p^^e45ro +4p^^f6r +3p^^e9 +qu4 +3que +1ra +3ra. +raci4t +3rade. +4radr +ra4du +5ra1e +2raff^^e4 +ra3fr +ra5is +2rak +ra2lo +r4ande +3rande. +4ran4d3r +rand3s +2ransv +ra3pl +3rar +r4ar. +4rarb +r4are +4rarg +r4ark +4rarm +r4arn +r4ars +4rart +r3arta +ra5r^^f6 +r4as +ras3h +ra2st +3raste. +3rativ +ra3tri +2rav +ra5yo +2rb +2r1c +2r2d +r4daf +rda5gr +r3dj +r4dos +rd3ran +rd3rat +r4dul +r3d^^e5 +r3d^^e4 +r4d^^f6s +1re +3re. +4reaus +re3b +4rec +5reco +re3d4r +re5du +4reft +4regg +3regn. +re1kr +rek5tri +4reld +re3lu +rem5p +3rems +r4en. +2reni +2renk +2renl +re3n^^f6 +re3o +3rer. +3rern +3reso +ress5k +re1sti +3ret. +4retet +ret3ro +4rety +re5t^^e5 +2revig +4rex +2r1f +rf^^f63ri +2r1g +rg3g2 +rgs5top +2rh +rhands5 +3rial +4rib +3rifi +2rifr +r3ifr^^e5 +3rifu +3rigt +rik2s +3riktn +ri4mo +2rind +rind3s +5ringen. +ring3r +2rinr +2rins +2rint +ri1o +3riot +ri5ple +ri2st^^e4 +ri4tut +ri4vis +riv3s +4rj +r4jis +r3jo +r5ju +r5j^^f6 +2rk +rk3akt +r4kek +rkes3 +r1ki +r3klas +rk2le +r4kl^^f6 +rk3n +rk4ne +r1ko +r4kod +rk3tr +r1ku +r4kup +r1k^^e4 +r5k^^f6r +2r1l +r5laka +r5lav +rld2 +rlds3 +rl5sp +2r1m +r4marb +r4mil +rm2s5j +rm5tr +2r1n +rnal4 +rn3g4 +rn1k +r2nom +rns4k +rns4t +rn3t +ro3b +ro4gro +ro2kr +2rolj +rol4li +rom4a +5roman +5ronau +5rond. +ron4v +ro3pl +ropp2s +ro4ra +2rord +2rorg +2rorie +3rorn +ro4sin +ro4sn +ros3v +ro5te +2r1p +r4pl^^f6 +r4p^^f6 +4r1r +rra4n +rrd4 +rreligi5 +rres4 +r5rib +rr5k4 +r4rob +r4rom +rr1s +rrs2k +r4rur +2rs +r4seld +r4sex +r2sin +r1ski +r4skid +rsk3na +rs5koll +rs4kos +rskotts3 +r2sku +r3sk^^f6 +rslags4v +r4sle +r4slo +r4s5l^^f6 +rs4mo +rs5nat +rs5n^^e4 +r1sp +r2spl +r2spo +rs3s4 +rs5tak +rs4te +r5stek +rs5tend +r5steni +rs5till +r1sto +r4ston +rst4r +r3str^^f6 +r3stu +r1sv +rs4vag +r2sv^^e4 +r1sy +2r1t +r2taf +r2takti +rt4an +r4tins +r4tom +r5trit +r3tr^^e4 +rt3t +r4tut +rubb5l +ru3br +ru4dan +ruks1 +ruks3v +5rullera +3rum. +runn2 +runns5 +4rupp +rus2h +ru5sha +2rut +5rutig +rut4ra +ru4vi +5ru^^f6 +2r1v +rv4sj +rv2s5k^^e4 +r3w +rydd5s +ry5o +r^^e5ge5l +4r^^e5l +r^^e5ng3s +r^^e55ra +r^^e53st +r^^e4ck5s +4r^^e4kt +4r^^e4m +r^^e4ng3s +r^^e4ns5t +4r^^e4s +r^^e44san +r^^e4s3s +r^^e45sti +r^^e4v5s +r^^f6d5el +r^^f6d5r +r^^f6d3s +2r^^f6g +r3^^f6i +r^^f6k3s +r^^f6ns4t +4r^^f6p +3r^^f6r +r^^f6r4s +r^^f64st +r^^f6st3r +r1^^f6vr +1sa +3sa. +3sad. +3sade +4sadj +2sa3dr +sad5s +2saf +sa3i +sak5ri +2s1akt +sa5lo +3s2am +sa2ma +samman3 +sa2mor +sand3s +4sang +2sanl +s3anl^^e4 +san3sla +2sap +3s4ar. +2sarb +2sarm +s5arm. +3sarn +2sart +4sarv +4sass +5sat. +sa4tu +2sau +s3auk +2s1av +4sb +s2c +2sch. +1scha +2schau +4schb +1schen +1scher +1schet +1schi +4schk +4schm +4schp +3schy +3sch^^f6 +sci3p +4s3d +1se +se4at. +se2g +2s3egg +3segl +seg3ra +sek5le +sek3r +sek5tr +3sel. +se5ly +sem2 +3sen. +s5ers^^e4 +3set. +2sexp +2s1f +s4f^^e4r. +sf^^f62 +4s3g2 +2sh +5s2haw +shi1s +s5h^^f6 +1si +sid5s +5sie +si4eri +si4esk +si2ett +3s2ig +3sik +sikts3 +5sill. +silver3 +silv3r +2s1ind +2s1inf +sinne2s3 +3sinni +4sinr +2sin1s +s1inst +5sint. +2sintr +3sio +sis4t +siu4 +1s2j +2sjak +s3jakt +4sjn +4sjt +s4ju +5sjuk +4sjur +sj^^e4ls3 +3sj^^f6 +4sk. +2ska. +3s2kada +s2kado +3skaffn +1skaft +s4kag +s2kal +3skal. +1skap +5skap. +5skapet +4skapi +skaps1 +4skar +s4kara +5skarv +4skas +s2kat +s4kav +4ske. +3sked. +s4kene +3skepp +4skh +sk4i +3skif +5skin +4skis. +5skiv +5skjor +3skju +4skl +sk5lap +s3klas +4skn +3s4ko. +1s4kog +4skogsg +1skol +3skola +s4kolo +s4korp +skor1st +1skot +s5kran. +3skrat +sk4ret +3skrev +1skri +3skrif +s3krig +5skrin +3skrip +s5kris +3skriv +s5kron +s4kru +5skrub +3skruv +5skr^^e4c +sk3s +2skt +3skulp +s3kup +2skv +s4kve +1s2ky +s4kyn +2skyrk +1sk^^e5 +s4k^^e5l +5sk^^e5p. +4sk^^e5r +5sk^^e4nk +3sk^^e4rv +2sl2 +4sla. +s5lad. +s3land +3s2lang +s4lant +s3lar. +4slas +s1lat +s2lev +3slev. +s4lic +slins3 +4slis +s2lit +s5lor +slotts3 +s2lu +s3luc +s3luf +4slus +s3lust +3slut +slu4to +3sl^^e5. +5s4l^^e5r +s4l^^e4k +s5l^^e4m +s5l^^e4nn +3s4l^^e4p +4s3l^^e4r +s2l^^e4t +3s2l^^f6j +2sm +s2mak +3smak. +s3makt +s2mal +s2met. +s2mid +s2mit +3smitta +s3mj +5smug +5smyg +sm^^e55g +sm^^e53k +sm^^e53s +3sm^^e4d +3sm^^e4l +4sm^^e4s +3sm^^f6r +2s2n4 +3snab +3s4nac +s3nam +s5nare +s3nast +s5ner +3snib +3snil +3snit +1snitt +s3niv +3snut +s4n^^e5 +5sn^^e5r +5sn^^e4c +s4n^^e4r +3sn^^f6. +sn^^f65g +3sn^^f6r +sn^^f63s +1so +3soc +5sock +2sod +5soi +2solj +sol3s2 +2som +5somm +3son +son4st +so5pra +so4pu +3sor. +2sord +s5ord. +2sorg +3sorn +3sot +4sott +s2p2 +5spann. +s4park +5sparv +4spas +s3pass +spa5tr +1spe +4sped +3s4pek +3s4pel +4spelsl +2spen +2sper +5spets +3spill +3spir +4spl +s1pla +s3plan +s3plats +spli4 +s4plin +5split +s5pl^^e4 +4spre +s3pres +4s3pris +3sprit +2spro +s3pry +3spr^^e5 +5spr^^e4n +s3ps +1s4p^^e5 +3sp^^e5n +3sp^^e5r +5sp^^e4n +3sp^^f6 +4s1r +4s1s +s5sad +sse4lin +s5sil +ss2k +ss5kl +ss3kun +ss1l +ss2lag. +ss2l^^e4 +ss2l^^f6 +ss3na +sss4 +ss3unn +s2sv +ss3vi +s2t +2st. +4sta. +5stac +3stadi +s4taf +5stalgis +3stalla +2stalli +5stam. +5stamm +1stant +5stark. +5startad +1state +3statl +1stau +st3c +2s5te. +4stea +5steg. +s4tek. +2stekn +5stekt +s4tell +3stem. +3steme +5stenar +3s4tene +3stense +5stensm +1stera +1stering +s4teriu +3sterne +5stetis +2stia +2stib +3stick +2stid +s4tiken +2stil +3stil. +3stink +3stisc +1stit +2stj +s5tju +3stj^^e4l +3stj^^e4r +2stm +5stoc +1stol +4stolk +4stom +stori4eu +5storis +stor3s +3straff +4strativ +3strato +3strec +3strej +st3ren +1strer +2stria +1strid +5stride +2striel +st4rif +1strikt +st5risk +1stru +3struk +2strumm +s3tryc +5stryk +5str^^e5k +3str^^e5l +3str^^e4c +4str^^e4d +3str^^e4ng +5str^^e4v +3str^^f6m +2st3s4 +st3t +4stv +s3tvis +1sty +2styp +1st^^e5 +4st^^e5g +5st^^e5l +1st^^e4 +3st^^e4l +1st^^f6 +1su +su4b +3sug +su3i +3sum +2sun +5sun. +s1under +5sune +s5ung +2sup +5supa +su2pu +5sus +2s1ut +su4to +su4tr +s2v2 +5svag. +s3vagn +4s3vak +5svam +4svap +svars3 +3svart +4svas +s3vat +4svec +3sven +5svep +4s3ver +s5ves +4s3vil +s4vine +4svis +s5vitt +s5v^^e5d +3sv^^e5ri +3sv^^e4ng +5sv^^e4rm. +s3v^^e4s +s3v^^e4t +4syk +5syl +3syn +syn3k +s3yrk +3sys +sys4t +sys5ter +syt2 +sy5th +1s^^e5 +5s^^e5g +4s^^e5k +2s^^e5lde +s^^e5ng3 +1s^^e4 +s4^^e4d +2s5^^e4gg +s4^^e4l +2s^^e4p +5s^^e4s +3s^^e4t +4s^^e4ta +1s^^f6 +4s^^f6d +2s^^f6g +s5^^f6ga +s^^f64ko +4s^^f6l +4s^^f6p +s^^f6r2s +2s3^^f6rt +1ta +3ta. +ta1ch +3tade. +4tadi +4tads5 +2taff +3taga +5tak. +ta5kre +2taktig +tak4to +4talf +5tallise +tall5s +4talv +3tame +3tami +3tan. +ta4nab +3tande. +2t3anfa +4tanl +t4ap3l +2tappar +3tar. +4tarb +tar4mi +3tarn +tars4 +4tart +5tartavl +4tarv +4task +3tast +ta1str +tat2 +ta4tan +tats3 +2tatt +2tav +4tave +5tavla. +3tavlan +3tavlo +tav2s +3tax +2tb4 +2tc +t3cha +t3che +2t3d4 +3t2e +te4as +te3b4 +5tec +4teg +te2g1r +te3gre +te3i +te4int +4tej +tej2s +te4kl +5teknik +5teknis +4teld +5te5l^^f6 +5tema +4temo +te4mu +ten3g4 +5tensi +ten3tr +te4n^^e4 +te5n^^f6r +5ter. +5teri^^f6 +ter3k4 +5term +5terna +5ters +ter3t +te4ru +5tes. +5test +tes4te +te5stik +te5stu +5tetik +tets3 +4texa +2texp +2t1f4 +2t3g4 +2th +t4hen +1ti +3tial +5tib +5tici +3tid +5tide +ti4du +4tid^^f6 +ti4ed +tifts5 +ti2gel +3tigh +ti4go +ti2gr +3tigt +tik3l +3tiks +5tikul +t2il +5tilj +3tillst +3tillv +3till^^e4 +5time +2tind +2tinr +2tint +ti4od +3tion +ti2os +3tis +4tisc +5tisk +3tiva +ti4van +5tivite +ti2^^f6 +t2j +4tje +4tjob +2tjou +4tj^^e4l +4tj^^e4m +3tj^^e4n +2t3k2 +2t3l +2t1m +2t5n4 +tne4r +4todl +3tok +4tol. +4tolj +2tomr +4toms +t2op +5torap +t5ord. +5toriett +4torm +torm3s +3torn +tor1st +4tort. +tos4k +t5ost. +t4ov +2t1p +t2r4 +2tra +t4raf +3trafi +3t4ral. +t4rala +3t4rale +5tralo +3trals +t4ralt +3trans +tran2s5a +4trar +t3ras. +t3rat. +t4rato +4treg +4tren +4trer. +4trern +t3rets. +2tri +3tribu +5trick +trids3 +t5riel +t1ring +t3ring. +2troc +t3rock +t4rog +t5ronik +t3rono +4tropi. +5tross +5trotn +t4rump +t4rup +3trupp +trus5ta +1tryc +5tryck. +5tryggh +4tr^^e5k +5tr^^e4. +3tr^^e4d +tr^^e4ds4 +3tr^^e4f +3tr^^e4g +4tr^^e4k +t3r^^e4kn +t4r^^e4n +5tr^^e4ni +5tr^^f6ja +t4r^^f6t +5tr^^e9 +2ts +t5s4and +ts5art +t3s4at +t3se +t4seg +ts4en +t4sex +ts2k +t5skall +t3skatt +t1ski +ts3kl +tskotts5 +t5slot +ts5l^^e4k +ts3n^^e4 +t3sn^^f6 +t2so +ts3ord +ts3pl +tss4 +t1st +ts4te +ts5ter +ts5tillf +ts3tj +t3stol +t4ston +t2stra +t4stry +t4stur +t5styr +t2su +t3sud +t5sy +2tt +t3tac +t4tau +t4ted +tte5g4 +t4tem +tte2n +ttes4 +t4tex +t4tins +t4tip +tt3ja +t1to +tt3rad +tt3rand +tt3rat +tt3re +tt3ri +tt4ry +tt4se +tt2si +tt4sta +t3tu +t4tug +tt1v +tt4v^^e5 +t3ty +t3t^^e4 +t3t^^f6r +4t5ugn +2tund +3tunga +tung3s +5tunn +2tupp +tu5re +2tutb +t3utv +t3ut^^f6 +tu4vu +5tu^^f6 +2tv +t1va +4tve +t3vig +3tving +t3vit +3tviv +t3v^^e5g +3tv^^e5n +t3v^^e4n +tv^^e4r3s +3tv^^e4tt +ty5da +5tyg. +3tyngd +3typ +ty3pi +5tys +2tz +3t^^e5g +t^^e5s4 +4t^^e5t +t^^e4c4ko +4t5^^e4g +4t^^e4m +4t^^e4rm +3t^^e4vl +4t^^f64d +t^^f65de +4t^^f6g +4t^^f6p +t^^f64pi +3t^^f6rer +t^^f6rs3t +t^^f64vas +5t^^e9 +u1a +u2b +ub5al +ubb4le +ub3lic +u4bo +u3cha +u5cl +u2d +u4dak +u5de +ud3r +ud4ret +uds4a +u4du +u4dy +u1e +u2es +uf4f^^e4 +uf4tan +uf4to +4u1ga +u1ge +ugg3s +ugn4 +ugns5 +ug3s4 +u5ie +u1in +u3is +u3itet +u3j +u2keb +u5ki +u4kl +uk5la +uk3n +u1ko +ukos4 +uk2s +uks5ko +uk3tris +ukt5s +uk4t^^e4 +u3ku +uk3v +u1la +ul4di +ulds2m +ul4du +ul4d^^f6 +ull3ste +ull3^^e4n +u1lo +uls5ti +ul2tr +u3lu +u1l^^e4 +u1l^^f6 +um4f^^e4 +um4so +ums4t +u1mu +u3m^^f6r +5underl +1unders^^f6 +1underv +un4dom +und3r +un4d^^e5 +un5g2ef +un3gersk +ung5it +ung3r +ungs4p +3unif +unk3l +unk3n +un4kr +un1sk +un4tr +un5trati +u5nu +u1o +u1pe +u4pern +u1pi +u2pl +u3plet +up3lik +3uppfa +1uppg +up4pin +1uppla +5uppl^^e4 +up4p3r +upp3s +upp5sp +up5ut +ur5ak +ur5arv +u3re +u1ri +u1ro +u4rob +u4rom +urs5tin +ur4st^^e4 +u5ry +u2sak +us5anl +u3scha +u3se +usen3 +u2s1k +us3ka +us4kla +us4kr +u5sky +us4k^^e5 +us5l^^e4 +us3n +u2sp +us3pen +us5tat +us3tig +u3stik +us5tin +ust5ro +u4st^^e5 +u4st^^e4 +us3v +u4s^^e5 +u4s^^e4 +u2s^^f6 +u4tak +1utb +u4tef +ute3s +utik2 +u5til +uti3^^f6 +ut3j +3utj^^e4m +utlands3 +u1to +u3top +uto5s +ut3r +ut4rer +ut4ro +ut5rop +1utru +2utsid +ut3sl +3utsl^^e4 +2utt +utt4j +ut1v +3utvec +u5ty +ut3^^f6v +u5u +2u1v +u2vak +u4vj +u4v^^e4 +u5^^e5 +u3^^f6 +va5dro +1vagn +2v1akti +val3k +val4li +val4st +5valv +5vama +4vand. +4vanp +van4st +van5tr +5vap +2varb +va4res +va4ri. +4vark +var2s +vart5r +va1ru +vas5ti +5vattn +4vau +4vav +5vavi +2vb4 +2v1c +2v3d4 +1ve +5vec +ve2k +ve3ke +4veld +vensk3^^e4 +5ventera +ve3ny +ve5n^^f6 +4vep +ver5g +3verk +ves4 +ve2s5p +ve1st +3veta +3vete +vet5sa +vett5s +2v1f +2v1g +2vh +v4i +vi4c +vid3s +vild3s +vil4t +3vind. +ving3s4 +3vinkl +vi2no +5vinst. +5vinste +vi5ny +3vis. +vi5sa +vis5h +vis5ko +vi4st +vis3ta +vi2tr +vi4var +4vjo +2v3k2 +2v1l +2v1m +vm^^f6rk4 +2v1n4 +1vo +4vok. +2vom +4vord +2vorg +vos4 +2v1p +2v2r +5vrak +3vrera +v3ru +2vs +v4sc +v1s2k +v2skri +vs4mi +v3sni +v2so +v1st +vs4te +vs5tr^^e5 +v5styc +vs3v^^e5 +v2s^^f6 +2v1t +vu4d1 +v1und +4v5up +4vut +2v1v +3vy +5v^^e5ld +v^^e5ngs3 +3v^^e5rd +4v^^e5ri +v^^e53ru +3v^^e4g +v^^e4gg5s +v^^e44l +v^^e4ll4s3 +3v^^e4nl +3v^^e4rde +v^^e44ril +4v^^e4rj +5v^^e4rk +3v^^e4rld +2v^^e4t +3v^^e4x +4v^^f6g +4v^^f6p +3v^^f6r +1wa +we2 +w2h +whi2 +wi2e +w4na +x1 +xan5d4 +xem3pla +xis4 +xk2 +xli4 +xs4 +xti2 +x4t^^e5 +2y +y1a +y4bris +yb4s +y2d +y4da +y5dan +y4do +yd3r +yds4 +y4du +y4d^^f6 +y1e +y1ga +y1ge +ygg3r +yg4g^^e5 +ygs4p +y1i +y1ki +y5klist +yk5lon +yk3n +y1ko +y1la +yl4gj +y3li +yl5k +yl5l^^e4 +y1lo +yl4tr +ym2fl +ym4for +y3m^^e5 +yng3r +ynk5l +yn4sa +yns4t +y3or +y5ou +y1pe +y5po +yp3ri +yre4s +y1ri +yr4ku +yrk5v +y1ro +yrs4k +yr5st +yr5tu +y1r^^e53 +y5scho +ys2st +ys3ta +ys3ti +ys4tik. +yst3ra +y2tak +y4te. +y4tea +y1to +ytt3r +yt5v +y3va +y3vi +y3v^^e4 +y5w +y5^^e5 +1za +1ze +ze4ro +1zi +1zo +zo4nal +4zp +z5s +3zu +z4zin +^^e51a +^^e53dj +^^e5ds4l +^^e51e +^^e51f +^^e51ga +^^e51ge +^^e5ge2l +^^e5g3l +^^e5g3s4k +^^e5g3st +^^e5g^^e54 +^^e53i +^^e51ki +5^^e5klag +^^e5k4str^^e4 +^^e51la +1^^e5lder +^^e52lin +^^e5l3k +^^e5ll4sp +^^e5l2s5e +^^e5l3st +^^e51l^^e4 +^^e51m +^^e5man4s +^^e5nd4r +^^e5n4du +^^e5ns4t +^^e5ns4v +^^e53o +^^e51p +^^e52pl +^^e55pla +^^e54p^^f6 +^^e5r4do +^^e5rd4ra +^^e5rd2s +^^e5rd4s3t +^^e54rel +^^e51ri +^^e55ror +5^^e5rsav +^^e5r5s2li +^^e5r2sv +^^e5r5^^f6 +^^e5s4ke +^^e5s3n +^^e5ss4 +^^e5s4skr +^^e5s4t +^^e5te2 +^^e5t3ri +^^e53tr^^e5 +^^e5t2sj +^^e5tt5s +^^e51v +^^e41a +^^e42b +2^^e4c +^^e4ck5v +^^e42d +^^e4dd3s +^^e4d4du +^^e4de4s +^^e4d3r +^^e4d5se +^^e4d3st +^^e43e +^^e41ga +^^e41ge +^^e4g4go +^^e4g1l +^^e4g3r +^^e4g4re +^^e4g3se +^^e43i +^^e45jo +4^^e4k +^^e41ki +^^e4k3n +^^e4k3r +^^e41la +^^e4l4pap +^^e4l4seg +^^e4ls5kog +^^e4l4slu +^^e4l2t3r +^^e4l2tu +^^e4l4vin +^^e4mp3l +4^^e4ndligh +^^e4nd3r +^^e4nd1st +^^e4ng5r +^^e4nni3s +^^e4nn3s +^^e44no +^^e4ns1l +^^e4n4st +^^e4ns5te +^^e4n4sv +^^e4n2t3r +^^e43pe +^^e4pp3l +^^e44pr +^^e4p4st +^^e44rap +^^e4r2bre +^^e4rg5l +^^e4r4gr +^^e41ri +^^e4rib4 +^^e4r4k^^e4 +^^e4r4nis +^^e4rn3st +^^e4r2n^^e5 +^^e4r4n^^f6 +^^e4r5ob +^^e45rol +^^e43rop +^^e45ror +^^e45ros +^^e4r2si +^^e4r4sko +^^e4r2so +^^e4r4sp +^^e4r2sv +^^e4r4tand +^^e4r2tr +^^e4rt3s +4^^e4s +^^e4s3pa +^^e4s5pi +^^e4s4sk +^^e4s4sp +^^e4s3ta +^^e4st3r +^^e44st^^e4 +^^e44s^^e5 +2^^e4t +^^e43to +^^e45tre +^^e4t4s3k +^^e4t5te +^^e4t4top +^^e4tt3r +^^e4t4tu +^^e4t4tv +^^e41va +^^e42vak +^^e43vi +^^e45vu +^^f61a +^^f62d +^^f64dak +^^f64dal +^^f64darv +^^f6de4s5 +^^f64dis +^^f6d3ra +^^f6d2s +^^f6d3se +^^f64du +^^f64d^^f6 +^^f61e +^^f61ga +^^f6g5ak +^^f65gar +1^^f6gd +^^f61ge +^^f65ger +^^f6gg4 +^^f6g1l +^^f6g2n +^^f6gn3e +1^^f6go +^^f6g3si +^^f6g3sk +^^f61i +^^f63jo +^^f6j4sv +^^f64karm +^^f61ki +^^f6k3n +^^f6k2s +^^f6k3sl +^^f61la +^^f6l4kv +^^f6l4k^^f6 +^^f6l2p +^^f65l^^e4 +^^f6man4 +^^f6m2kl +^^f64nal +^^f62nom +^^f6ns3ke +^^f6n4so +^^f6nst3r +^^f63pe +^^f64pel +^^f63pi +^^f6p5li +^^f65plo +1^^f6ppn +^^f64pr +^^f63rande +^^f63ras +^^f64rask +^^f6rb4 +^^f6r3d4r +^^f6r1eni +^^f63res +^^f64restr +^^f63ret +^^f6r5evig +^^f6r3g +^^f61ri +^^f65rig +^^f63ring +^^f6r3int +^^f6r5ir +^^f6r5iv +^^f6r4kal +^^f6r1k2l +^^f6r5kli +^^f6r4nis +^^f6r3ol +^^f6r1or +^^f6r2p5la +^^f6r1s2k +^^f6r3sl +^^f6r4sl^^e4 +^^f6r5te +^^f6rt5s +^^f6r1u +^^f6r3vr +^^f6r3y +^^f6r1^^e4 +^^f6r^^f64d +^^f62sak +^^f6s3n +^^f6s4sj +^^f6s2sk +^^f6s4sp +^^f6s3ta +^^f6st3v +^^f62tak +^^f6ts5ko +^^f6t4st +^^f61v +^^f6ve4 +^^f6ver1 +5^^f6vere +^^f62vj +^^f6v3ra +^^f6v3ri +^^f6v4sk +^^e93e +} +} + diff --git a/contrib/groff/tmac/hyphenex.cs b/contrib/groff/tmac/hyphenex.cs new file mode 100644 index 0000000000..dc8a711a87 --- /dev/null +++ b/contrib/groff/tmac/hyphenex.cs @@ -0,0 +1,16 @@ +% List of exceptions created by Karel Horak +% (Mathamatical Institute of Czechoslovak Acadamy of Science) +% Prague, April 1, 1991 +% +\hyphenation{ + koe-fi-ci-ent + koe-fi-ci-en-ty + pro-jek-èní + úhlo-pøíè-ka + úhlo-pøíè-ky +} + +%%% Local Variables: +%%% mode: tex +%%% coding: latin-2 +%%% End: diff --git a/contrib/groff/tmac/hyphenex.det b/contrib/groff/tmac/hyphenex.det new file mode 100644 index 0000000000..c74eebabff --- /dev/null +++ b/contrib/groff/tmac/hyphenex.det @@ -0,0 +1,3838 @@ +% dehyphtex.tex +% +% Errata für dehypht.tex 1999-03-03 +% +% kompiliert 2006-01-28 +% +% Copyright (C) 2005, 2006 Werner Lemberg +% +% This program can be redistributed and/or modified under the terms +% of the LaTeX Project Public License Distributed from CTAN +% archives in directory macros/latex/base/lppl.txt; either +% version 1 of the License, or any later version. +% +% +% Achtung: Diese Datei muß *nach* german.sty geladen werden! +% Attention: This file must be loaded *after* german.sty! +% +% In web2c-basierten TeX-Implementationen ist es notwendig, die +% Variable `hyph_size' (in texmf.cnf) auf einen größeren Wert wie +% z.B. 5000 zu setzen, um einen Kapazitätsüberlauf der +% Trennstellenausnahmen zu vermeiden. +% Web2c based TeX implementations need to increase the value of +% `hyph_size' (in texmf.cnf) to, say, 5000 to avoid an overflow +% of TeX's exception dictionary. +% + +\begingroup + +\catcode `\ä=11 \catcode `\Ä=11 +\catcode `\ö=11 \catcode `\Ö=11 +\catcode `\ü=11 \catcode `\Ü=11 +\catcode `\^^ff=11 \catcode `\^^Y=11 % ß + +\lccode `\Ä=`\ä \lccode `\ä=`\ä +\lccode `\Ö=`\ö \lccode `\ö=`\ö +\lccode `\Ü=`\ü \lccode `\ü=`\ü +\lccode `\^^ff=`\^^ff \lccode `\^^Y=`\^^Y + +\hyphenation{ +% +% +% falsche Trennungen einfacher Wörter +% + Aa-les % Aal-es + Af-gha-nin-nen % Af-ghan-in-nen + ag-gres-si-ve-rem % ag-gres-si-ver-em + ag-gres-si-ve-ren % ag-gres-si-ver-en + ag-gres-si-ve-rer % ag-gres-si-ver-er + ag-gres-si-ve-res % ag-gres-si-ver-es + AIDS % AI-DS + ak-ti-ve-rem % ak-ti-ver-em + ak-ti-ve-ren % ak-ti-ver-en + ak-ti-ve-rer % ak-ti-ver-er + ak-ti-ve-res % ak-ti-ver-es + ak-tu-el-le-rer % ak-tu-el-ler-er + ak-zep-ta-ble-rer % ak-zep-ta-bler-er + Ale-man-nin-nen % Ale-mann-in-nen + Al-ler-gie % All-er-gie + Al-ler-gi-en % All-er-gi-en + al-ler-gisch % all-er-gisch + al-ler-gi-sche % all-er-gi-sche + al-ler-gi-schem % all-er-gi-schem + al-ler-gi-schen % all-er-gi-schen + al-ler-gi-scher % all-er-gi-scher + al-ler-gi-sches % all-er-gi-sches + Al-ma-na-chen % Al-ma-nach-en + am-bi-tiö-se % am-bi-ti-öse + am-bi-tiö-sem % am-bi-ti-ösem + am-bi-tiö-sen % am-bi-ti-ösen + am-bi-tiö-ser % am-bi-ti-öser + am-bi-tiö-ses % am-bi-ti-öses + Ana-lo-gons % Ana-lo-g-ons + ang-le % an-gle + An-gli-zis-men % An-g-li-zis-men + An-gli-zis-mus % An-g-li-zis-mus + ano-mal % an-omal + ano-ma-le % an-oma-le + ano-ma-lem % an-oma-lem + ano-ma-len % an-oma-len + ano-ma-ler % an-oma-ler + ano-ma-le-re % an-oma-le-re + ano-ma-le-rem % an-oma-le-rem + ano-ma-le-ren % an-oma-le-ren + ano-ma-le-rer % an-oma-ler-er + ano-ma-le-res % an-oma-le-res + ano-ma-les % an-oma-les + Ano-ma-lie % An-oma-lie + Ano-ma-li-en % An-oma-li-en + ano-mal-ste % an-omal-ste + ano-mal-stem % an-omal-stem + ano-mal-sten % an-omal-sten + ano-mal-ster % an-omal-ster + ano-mal-stes % an-omal-stes + An-thro-po-ide % An-thro-poi-de + An-thro-po-iden % An-thro-poi-den + Ar-gons % Ar-g-ons + ASCII % AS-CII + As-sem-bler % As-sem-b-ler + As-sem-blern % As-sem-b-lern + As-sem-blers % As-sem-b-lers + as-sem-blie-re % as-sem-b-lie-re + as-sem-blie-ren % as-sem-b-lie-ren + as-sem-blie-rend % as-sem-b-lie-rend + as-sem-blie-ren-de % as-sem-b-lie-ren-de + as-sem-blie-ren-dem % as-sem-b-lie-ren-dem + as-sem-blie-ren-den % as-sem-b-lie-ren-den + as-sem-blie-ren-der % as-sem-b-lie-ren-der + as-sem-blie-ren-des % as-sem-b-lie-ren-des + as-sem-blierst % as-sem-b-lierst + as-sem-bliert % as-sem-b-liert + as-sem-blier-te % as-sem-b-lier-te + as-sem-blier-tem % as-sem-b-lier-tem + as-sem-blier-ten % as-sem-b-lier-ten + as-sem-blier-ter % as-sem-b-lier-ter + as-sem-blier-tes % as-sem-b-lier-tes + as-sem-blier-test % as-sem-b-lier-test + as-sem-blier-tet % as-sem-b-lier-tet + Aste-ro-iden % Aste-roi-den + at-trak-ti-ve-rem % at-trak-ti-ver-em + at-trak-ti-ve-ren % at-trak-ti-ver-en + at-trak-ti-ve-rer % at-trak-ti-ver-er + at-trak-ti-ve-res % at-trak-ti-ver-es + auf-kremp-le % auf-krem-ple + auf-munt-re % auf-mun-tre + auf-wieg-le % auf-wie-gle + Aut-op-sie % Au-top-sie + Aut-op-si-en % Au-top-si-en + au-to-ri-tä-rem % au-to-ri-tär-em + au-to-ri-tä-ren % au-to-ri-tär-en + au-to-ri-tä-rer % au-to-ri-tär-er + au-to-ri-tä-res % au-to-ri-tär-es + Ba-ro-nin-nen % Ba-ron-in-nen + Base-ball % Ba-se-ball + Bea-mer % Be-a-mer + Bea-mern % Be-a-mern + Bea-mers % Be-a-mers + bech-re % be-ch-re + Bie-ren % Bier-en + Bie-res % Bier-es + Bis-tü-mer % Bi-stü-mer + Bis-tü-mern % Bi-stü-mern + bla-ma-ble-rer % bla-ma-bler-er + blätt-re % blät-tre + brei-ige % breii-ge + brei-igem % breii-gem + brei-igen % breii-gen + brei-iger % breii-ger + brei-iges % breii-ges + Bro-ten % Bro-t-en + Bro-tes % Bro-t-es + brü-ste-te % brüs-te-te + brü-ste-ten % brüs-te-ten + brü-ste-test % brüs-te-test + brü-ste-tet % brüs-te-tet + bru-ta-le-rer % bru-ta-ler-er + büg-le % bü-g-le + bükst % bü-kst + bükt % bü-kt + butt-re % but-tre + Bytes % By-tes + chart-re % char-tre + Che-fin-nen % Chef-in-nen + chif-frier % chif-fri-er + Chi-nins % Chin-ins + Cho-le-ste-rins % Cho-le-ste-r-ins + Ci-nea-sten % Ci-ne-a-sten + ci-nea-stisch % ci-ne-a-stisch + ci-nea-sti-sche % ci-ne-a-sti-sche + ci-nea-sti-schem % ci-ne-a-sti-schem + ci-nea-sti-schen % ci-ne-a-sti-schen + ci-nea-sti-scher % ci-ne-a-sti-scher + ci-nea-sti-sches % ci-ne-a-sti-sches + cle-ve-rem % cle-ver-em + cle-ve-rer % cle-ver-er + cle-ve-res % cle-ver-es + Code % Co-de + Codes % Co-des + Cou-sins % Cous-ins + Deal % De-al + dealt % de-alt + deal-te % de-al-te + deal-ten % de-al-ten + deal-test % de-al-test + deal-tet % de-al-tet + de-fi-zi-tä-rem % de-fi-zi-tär-em + de-fi-zi-tä-ren % de-fi-zi-tär-en + de-fi-zi-tä-rer % de-fi-zi-tär-er + de-fi-zi-tä-res % de-fi-zi-tär-es + De-ka-nin-nen % De-kan-in-nen + De-sign-er % De-si-gner + De-sign-erin % De-si-gne-rin + De-sign-erin-nen % De-si-gne-rin-nen + De-sign-ern % De-si-gnern + De-sign-ers % De-si-gners + De-signs % De-si-gns + des-il-lu-sio-nier % des-il-lu-sio-ni-er + de-struk-ti-ve-rem % de-struk-ti-ver-em + de-struk-ti-ve-ren % de-struk-ti-ver-en + de-struk-ti-ve-rer % de-struk-ti-ver-er + de-struk-ti-ve-res % de-struk-ti-ver-es + De-vons % De-v-ons + dick-ste % dicks-te + dick-stem % dicks-tem + dick-sten % dicks-ten + dick-ster % dicks-ter + dick-stes % dicks-tes + Diö-ze-san % Di-öze-san + Diö-ze-sa-ne % Di-öze-sa-ne + Diö-ze-sa-nen % Di-öze-sa-nen + Diö-ze-sans % Di-özes-ans + Diö-ze-se % Di-öze-se + Diö-ze-sen % Di-öze-sen + dö-ste % dös-te + dö-sten % dös-ten + dö-stest % dös-test + dö-stet % dös-tet + dräng-le % drän-g-le + dribb-le % drib-ble + Drückers % Drück-ers + dunk-le-rer % dunk-ler-er + ed-le-rer % ed-ler-er + ef-fek-ti-ve-rem % ef-fek-ti-ver-em + ef-fek-ti-ve-ren % ef-fek-ti-ver-en + ef-fek-ti-ve-rer % ef-fek-ti-ver-er + ef-fek-ti-ve-res % ef-fek-ti-ver-es + ega-li-tä-rem % ega-li-tär-em + ega-li-tä-ren % ega-li-tär-en + ega-li-tä-rer % ega-li-tär-er + ega-li-tä-res % ega-li-tär-es + Ego-isten % Egoi-sten + Ego-istin % Egoi-stin + Ego-istin-nen % Egoi-stin-nen + ego-istisch % egoi-stisch + ego-isti-sche % egoi-sti-sche + ego-isti-schem % egoi-sti-schem + ego-isti-schen % egoi-sti-schen + ego-isti-scher % egoi-sti-scher + ego-isti-sches % egoi-sti-sches + eif-re % ei-fre + ein-bürg-re % ein-bür-g-re + ein-ei-ige % ein-eii-ge + ein-ei-igem % ein-eii-gem + ein-ei-igen % ein-eii-gen + ein-ei-iger % ein-eii-ger + ein-ei-iges % ein-eii-ges + eit-le-rer % eit-ler-er + eli-tä-rem % eli-tär-em + eli-tä-ren % eli-tär-en + eli-tä-rer % eli-tär-er + eli-tä-res % eli-tär-es + emo-tio-na-le-rer % emo-tio-na-ler-er + emo-tio-nel-le-rer % emo-tio-nel-ler-er + er-lernst % er-l-ernst + ex-klu-si-ve-rem % ex-klu-si-ver-em + ex-klu-si-ve-ren % ex-klu-si-ver-en + ex-klu-si-ve-rer % ex-klu-si-ver-er + ex-klu-si-ve-res % ex-klu-si-ver-es + ex-pan-si-ve-rem % ex-pan-si-ver-em + ex-pan-si-ve-ren % ex-pan-si-ver-en + ex-pan-si-ve-rer % ex-pan-si-ver-er + ex-pan-si-ve-res % ex-pan-si-ver-es + ex-plo-si-ve-rem % ex-plo-si-ver-em + ex-plo-si-ve-ren % ex-plo-si-ver-en + ex-plo-si-ve-rer % ex-plo-si-ver-er + ex-plo-si-ve-res % ex-plo-si-ver-es + ex-zes-si-ve-rem % ex-zes-si-ver-em + ex-zes-si-ve-ren % ex-zes-si-ver-en + ex-zes-si-ve-rer % ex-zes-si-ver-er + ex-zes-si-ve-res % ex-zes-si-ver-es + fäch-le % fä-chle + fäch-re % fä-ch-re + fah-le-rer % fah-ler-er + fa-mi-liä-re % fa-mi-li-äre + fa-mi-liä-rem % fa-mi-li-ärem + fa-mi-liä-ren % fa-mi-li-ären + fa-mi-liä-rer % fa-mi-li-ärer + fa-mi-liä-re-re % fa-mi-li-äre-re + fa-mi-liä-re-rem % fa-mi-li-äre-rem + fa-mi-liä-re-ren % fa-mi-li-äre-ren + fa-mi-liä-re-rer % fa-mi-li-äre-rer + fa-mi-liä-re-res % fa-mi-li-äre-res + fa-mi-liä-res % fa-mi-li-äres + Fa-sans % Fas-ans + fau-le-rer % fau-ler-er + Fea-tures % Fea-tu-res + Fer-nan-do % Fer-n-an-do + Fer-nan-dos % Fer-n-an-dos + feu-da-le-rer % feu-da-ler-er + Feuille-ton % Feuil-le-ton + Feuille-tons % Feuil-le-tons + fi-de-le-rer % fi-de-ler-er + fieb-rig % fie-brig + fieb-ri-ge % fie-bri-ge + fieb-ri-gem % fie-bri-gem + fieb-ri-gen % fie-bri-gen + fieb-ri-ger % fie-bri-ger + fieb-ri-ges % fie-bri-ges + File % Fi-le + Files % Fi-les + filt-re % fil-tre + finst-re % fin-stre + flatt-re % flat-tre + flaue-rem % flau-e-rem + flaue-res % flau-e-res + fle-xi-ble-rer % fle-xibler-er + flö^^fft % flö-^^fft + flö^^ff-ten % flö-^^fften + flö^^ff-test % flö-^^fftest + flö^^ff-tet % flö-^^fftet + Flu-ges % Flug-es + flunk-re % flun-k-re + folg-re % fol-g-re + folt-re % fol-tre + for-ma-le-rer % for-ma-ler-er + for-mel-ler-er % for-mel-ler-er + Fou-rier % Fou-ri-er + Fou-riers % Fou-ri-ers + frä-ste % fräs-te + frä-sten % fräs-ten + frä-stest % fräs-test + frä-stet % fräs-tet + Freak % Fre-ak + Freaks % Fre-aks + freie-ste % frei-e-ste + funkst % funk-st + futt-re % fut-tre + Gan-dhi % Gand-hi + Gan-dhis % Gand-his + gäng-le % gän-g-le + Gar-ni-so-nen % Gar-ni-so-n-en + Gate-way % Ga-te-way + Gate-ways % Ga-te-ways + Gaulles % Gaul-les + ge-dop-ter % ge-do-pter + ge-döst % ge-d-öst + ge-eggt % ge-e-ggt + ge-egg-ten % ge-e-gg-ten + ge-frä-ste % ge-fräs-te + ge-frä-stem % ge-fräs-tem + ge-frä-sten % ge-fräs-ten + ge-frä-ster % ge-fräs-ter + ge-frä-stes % ge-fräs-tes + Ge-hir-nen % Ge-hir-n-en + gei-le-rer % gei-ler-er + ge-kne-belt % ge-k-ne-belt + ge-kne-bel-te % ge-k-ne-bel-te + ge-kne-bel-tem % ge-k-ne-bel-tem + ge-kne-bel-ten % ge-k-ne-bel-ten + ge-kne-bel-ter % ge-k-ne-bel-ter + ge-kne-bel-tes % ge-k-ne-bel-tes + ge-kneift % ge-k-neift + ge-kne-tet % ge-k-ne-tet + ge-kne-te-te % ge-k-ne-te-te + ge-kne-te-tem % ge-k-ne-te-tem + ge-kne-te-ten % ge-k-ne-te-ten + ge-kne-te-ter % ge-k-ne-te-ter + ge-kne-te-tes % ge-k-ne-te-tes + ge-lobst % ge-l-obst + ge-lü-ste-te % ge-lüs-te-te + ge-lü-ste-ten % ge-lüs-te-ten + ge-lü-ste-test % ge-lüs-te-test + ge-lü-ste-tet % ge-lüs-te-tet + ge-naue-rem % ge-nau-e-rem + ge-naue-res % ge-nau-e-res + ge-neckt % gen-eckt + ge-neck-te % gen-eck-te + ge-neck-tem % gen-eck-tem + ge-neck-ten % gen-eck-ten + ge-neck-ter % gen-eck-ter + ge-neck-tes % gen-eck-tes + ge-ne-rel-le-rer % ge-ne-rel-ler-er + ge-nia-le-rer % ge-nia-ler-er + ge-nui-ne % ge-nu-i-ne + ge-reckt % ge-r-eckt + ge-rü-ste-te % ge-rüs-te-te + ge-rü-ste-tem % ge-rüs-te-tem + ge-rü-ste-ten % ge-rüs-te-ten + ge-rü-ste-ter % ge-rüs-te-ter + ge-rü-ste-tes % ge-rüs-te-tes + ge-schah % ge-sch-ah + ge-scha-hen % ge-sch-a-hen + ge-sche-he % ge-sch-ehe + ge-schneuzt % ge-sch-neuzt + ge-schrien % ge-schri-en + ge-spei-set % ge-speis-et + ge-spei-ste % ge-speis-te + ge-spei-stem % ge-speis-tem + ge-spei-sten % ge-speis-ten + ge-spei-ster % ge-speis-ter + ge-spei-stes % ge-speis-tes + ge-starrt % ge-st-arrt + ge-star-tet % ge-st-ar-tet + ge-star-te-te % ge-st-ar-te-te + ge-star-te-tem % ge-st-ar-te-tem + ge-star-te-ten % ge-st-ar-te-ten + ge-star-te-ter % ge-st-ar-te-ter + ge-star-te-tes % ge-st-ar-te-tes + ge-streun-ter % ge-stre-un-ter + ge-trig-gert % get-rig-gert + ge-wich-ste % ge-wichs-te + ge-wich-stem % ge-wichs-tem + ge-wich-sten % ge-wichs-ten + ge-wich-ster % ge-wichs-ter + ge-wich-stes % ge-wichs-tes + Glan-zes % Glanz-es + gra-ste % gras-te + gra-sten % gras-ten + gra-stest % gras-test + gra-stet % gras-tet + gra-ziö-se % gra-zi-öse + gra-ziö-sem % gra-zi-ösem + gra-ziö-sen % gra-zi-ösen + gra-ziö-ser % gra-zi-öser + gra-ziö-ses % gra-zi-öses + grüb-le % grü-b-le + gurg-le % gur-gle + hag-le % ha-gle + hal-bem % hal-b-em + hal-ben % hal-b-en + hal-bes % hal-b-es + halft-re % half-tre + hap-re % ha-p-re + Hard-ware % Hard-wa-re + heb-le % he-ble + heik-le % hei-kle + heik-lem % hei-klem + heik-le-re % hei-kle-re + heik-le-rem % hei-kle-rem + heik-le-ren % hei-kle-ren + heik-le-rer % hei-kler-er + heik-le-res % hei-kle-res + heik-les % hei-kles + hei-le-rer % hei-ler-er + hel-le-rer % hel-ler-er + her-in-nen % he-rin-nen + Her-me-lins % Her-mel-ins + he-ro-ische % he-ro-i-sche + he-ro-ischem % he-ro-i-schem + he-ro-ischen % he-ro-i-schen + he-ro-ischer % he-ro-i-scher + he-ro-isches % he-ro-i-sches + High-tech % Hight-ech + hingst % hin-gst + hingt % hin-gt + hinkst % hin-kst + hinkt % hin-kt + hink-te % hin-k-te + hink-ten % hin-k-ten + hink-test % hin-k-test + hink-tet % hin-k-tet + Hir-nen % Hir-n-en + Hitch-cock % Hit-ch-cock + Hitch-cocks % Hit-ch-cocks + hob-le % ho-ble + hoh-le-rem % hohl-e-rem + hoh-le-rer % hohler-er + hoh-le-res % hohl-e-res + holp-re % hol-p-re + Hom-mage % Hom-ma-ge + Hot-line % Hot-li-ne + Hot-lines % Hot-li-nes + hu-ma-ni-tä-rem % hu-ma-ni-tär-em + hu-ma-ni-tä-ren % hu-ma-ni-tär-en + hu-ma-ni-tä-rer % hu-ma-ni-tär-er + hu-ma-ni-tä-res % hu-ma-ni-tär-es + hu-man-ste % hum-an-ste + hu-man-stem % hum-an-stem + hu-man-sten % hum-an-sten + hu-man-ster % hum-an-ster + hu-man-stes % hum-an-stes + hump-le % hum-ple + hung-re % hun-g-re + idea-le-rer % idea-ler-er + ide-el-le-rer % ide-el-ler-er + il-lu-stre % il-lust-re + il-lu-strem % il-lust-rem + il-lu-stren % il-lust-ren + il-lu-strer % il-lust-rer + il-lu-stres % il-lust-res + imk-re % im-kre + im-pul-si-ve-rem % im-pul-si-ver-em + im-pul-si-ve-ren % im-pul-si-ver-en + im-pul-si-ve-rer % im-pul-si-ver-er + im-pul-si-ve-res % im-pul-si-ver-es + in-di-vi-du-el-le-rer % in-di-vi-du-el-ler-er + In-do-ne-sie-rin % In-do-ne-si-e-rin + In-do-ne-sie-rin-nen % In-do-ne-si-e-rin-nen + in-ten-si-ve-rem % in-ten-si-ver-em + in-ten-si-ve-ren % in-ten-si-ver-en + in-ten-si-ve-rer % in-ten-si-ver-er + in-ten-si-ve-res % in-ten-si-ver-es + Isaacs % Isaa-cs + Ita-lie-ne-rin % Ita-li-e-ne-rin + Ita-lie-ne-rin-nen % Ita-li-e-ne-rin-nen + Ita-lie-nern % Ita-li-e-nern + Ita-lie-ners % Ita-li-e-ners + Jag-den % Jag-d-en + Jar-gons % Jar-g-ons + Je-re-mia-de % Je-re-mi-a-de + Je-re-mia-den % Je-re-mi-a-den + Jon-gleur % Jong-leur + Jo-sephs % Jo-se-phs + jub-le % ju-ble + kabb-le % kab-ble + kab-le % ka-ble + Ka-na-die-rin % Ka-na-di-e-rin + Ka-na-die-rin-nen % Ka-na-di-e-rin-nen + Ka-nons % Ka-n-ons + Ka-pi-tä-nin-nen % Ka-pi-tän-in-nen + ka-pri-ziö-se % ka-pri-zi-öse + ka-pri-ziö-sem % ka-pri-zi-ösem + ka-pri-ziö-sen % ka-pri-zi-ösen + ka-pri-ziö-ser % ka-pri-zi-öser + ka-pri-ziö-se-re % ka-pri-zi-öse-re + ka-pri-ziö-se-rem % ka-pri-zi-öse-rem + ka-pri-ziö-se-ren % ka-pri-zi-öse-ren + ka-pri-ziö-se-rer % ka-pri-zi-öse-rer + ka-pri-ziö-se-res % ka-pri-zi-öse-res + ka-pri-ziö-ses % ka-pri-zi-öses + ka-pri-ziö-se-ste % ka-pri-zi-öse-ste + ka-pri-ziö-se-stem % ka-pri-zi-öse-stem + ka-pri-ziö-se-sten % ka-pri-zi-öse-sten + ka-pri-ziö-se-ster % ka-pri-zi-öse-ster + ka-pri-ziö-se-stes % ka-pri-zi-öse-stes + ka-ri-ka-ti-ve-rem % ka-ri-ka-ti-ver-em + ka-ri-ka-ti-ve-ren % ka-ri-ka-ti-ver-en + ka-ri-ka-ti-ve-res % ka-ri-ka-ti-ver-es + ka-riö-se % ka-ri-öse + ka-riö-sem % ka-ri-ösem + ka-riö-sen % ka-ri-ösen + ka-riö-ser % ka-ri-öser + ka-riö-ses % ka-ri-öses + ka-ri-ta-ti-ve-rem % ka-ri-ta-ti-ver-em + ka-ri-ta-ti-ve-ren % ka-ri-ta-ti-ver-en + ka-ri-ta-ti-ve-rer % ka-ri-ta-ti-ver-er + ka-ri-ta-ti-ve-res % ka-ri-ta-ti-ver-es + Ka-tar-rhe % Ka-tarr-he + Ka-tar-rhen % Ka-tarr-hen + Ka-tarrhs % Ka-tarr-hs + ka-ta-stro-pha-le-rer % ka-ta-stro-pha-ler-er + Kath-rin % Ka-thrin + Kath-rins % Ka-thrins + Kat-rin % Ka-trin + Kat-rins % Ka-trins + keg-le % ke-gle + kelt-re % kel-tre + kent-re % ken-tre + Khmer % Kh-mer + Ki-osks % Ki-o-sks + klimp-re % klim-p-re + kling-le % klin-gle + knabb-re % knab-b-re + knatt-re % knat-tre + kneb-le % kne-ble + knien % kni-en + knist-re % kni-stre + knob-le % kno-ble + kol-le-gia-le-rer % kol-le-gia-ler-er + kom-for-ta-ble-rer % kom-for-ta-bler-er + kom-mer-zi-el-le-rer % kom-mer-zi-el-ler-er + Kom-mi-li-to-nin-nen % Kom-mi-li-ton-in-nen + kon-ser-va-ti-ve-rem % kon-ser-va-ti-ver-em + kon-ser-va-ti-ve-ren % kon-ser-va-ti-ver-en + kon-ser-va-ti-ve-rer % kon-ser-va-ti-ver-er + kon-ser-va-ti-ve-res % kon-ser-va-ti-ver-es + kon-struk-ti-ve-rem % kon-struk-ti-ver-em + kon-struk-ti-ve-ren % kon-struk-ti-ver-en + kon-struk-ti-ve-rer % kon-struk-ti-ver-er + kon-struk-ti-ve-res % kon-struk-ti-ver-es + Kon-ter-feis % Kon-ter-f-eis + Kon-ti-nents % Kon-tin-ents + kont-re % kon-tre + Kop-fes % Kopf-es + Ko-reas % Ko-re-as + kor-re-lie-rend % kor-re-li-e-rend + kor-re-lie-ren-de % kor-re-li-e-ren-de + kor-re-lie-ren-dem % kor-re-li-e-ren-dem + kor-re-lie-ren-den % kor-re-li-e-ren-den + kor-re-lie-ren-der % kor-re-li-e-ren-der + kor-re-lie-ren-des % kor-re-li-e-ren-des + krabb-le % krab-ble + krea-ti-ve-rem % krea-ti-ver-em + krea-ti-ve-ren % krea-ti-ver-en + krea-ti-ve-rer % krea-ti-ver-er + krea-ti-ve-res % krea-ti-ver-es + kre-ierst % kre-i-erst + kre-iert % kre-i-ert + kre-ier-te % kre-i-er-te + kre-ier-tem % kre-i-er-tem + kre-ier-ten % kre-i-er-ten + kre-ier-ter % kre-i-er-ter + kre-ier-tes % kre-i-er-tes + kre-ier-test % kre-i-er-test + kre-ier-tet % kre-i-er-tet + kribb-le % krib-ble + kri-mi-nel-le-rer % kri-mi-nel-ler-er + Krish-na % Kris-h-na + Krish-nas % Kris-hnas + ku-bier % ku-bi-er + kug-le % ku-gle + küh-le-rer % küh-ler-er + kul-tu-rel-le-rer % kul-tu-rel-ler-er + Kum-pa-nin-nen % Kum-pan-in-nen + kurb-le % kur-ble + Ku-rier % Ku-ri-er + Ku-riers % Ku-ri-ers + kur-zem % kur-z-em + kur-zen % kur-z-en + kur-zer % kur-z-er + kur-zes % kur-z-es + la-bi-le-rer % la-bi-ler-er + lag-re % la-g-re + laue-rem % lau-e-rem + laue-res % lau-e-res + läut-re % läu-tre + le-ga-le-rer % le-ga-ler-er + Le-nins % Len-ins + Len-nons % Len-n-ons + Le-se-rin-nen % Le-se-r-in-nen + li-be-ra-le-rer % li-be-ra-ler-er + lief-re % lie-fre + Lis-sa-bons % Lis-sa-b-ons + Lob-by-isten % Lob-by-i-sten + Log-in % Lo-gin + Lon-dons % Lon-d-ons + lö-ste % lös-te + lö-sten % lös-ten + lö-stest % lös-test + lö-stet % lös-tet + loy-ale % loya-le + loy-alem % loya-lem + loy-alen % loya-len + loy-aler % loya-ler + loy-ales % loya-les + lu-kra-ti-ve-rem % lu-kra-ti-ver-em + lu-kra-ti-ve-ren % lu-kra-ti-ver-en + lu-kra-ti-ve-rer % lu-kra-ti-ver-er + lu-kra-ti-ve-res % lu-kra-ti-ver-es + Lu-nas % Lu-n-as + lung-re % lun-g-re + lu-xu-riö-se % lu-xu-ri-öse + lu-xu-riö-sem % lu-xu-ri-ösem + lu-xu-riö-sen % lu-xu-ri-ösen + lu-xu-riö-ser % lu-xu-ri-öser + lu-xu-riö-se-re % lu-xu-ri-öse-re + lu-xu-riö-se-rem % lu-xu-ri-öse-rem + lu-xu-riö-se-ren % lu-xu-ri-öse-ren + lu-xu-riö-se-rer % lu-xu-ri-öse-rer + lu-xu-riö-se-res % lu-xu-ri-öse-res + lu-xu-riö-ses % lu-xu-ri-öses + lu-xu-riö-se-ste % lu-xu-ri-öse-ste + lu-xu-riö-se-stem % lu-xu-ri-öse-stem + lu-xu-riö-se-sten % lu-xu-ri-öse-sten + lu-xu-riö-se-ster % lu-xu-ri-öse-ster + lu-xu-riö-se-stes % lu-xu-ri-öse-stes + ma-li-ziö-se % ma-li-zi-öse + ma-li-ziö-sem % ma-li-zi-ösem + ma-li-ziö-sen % ma-li-zi-ösen + ma-li-ziö-ser % ma-li-zi-öser + ma-li-ziö-ses % ma-li-zi-öses + Ma-nage-ment % Ma-na-ge-ment + Ma-nage-ments % Ma-na-ge-ments + mang-le % man-gle + ma-nua-le % ma-nu-a-le + Ma-nua-len % Ma-nu-a-len + Ma-ries % Ma-ri-es + mart-re % mar-tre + mas-si-ve-rem % mas-si-ver-em + mas-si-ve-ren % mas-si-ver-en + mas-si-ve-rer % mas-si-ver-er + mas-si-ve-res % mas-si-ver-es + Mat-thi-as % Matt-hi-as + me-lo-diö-se % me-lo-di-öse + me-lo-diö-sem % me-lo-di-ösem + me-lo-diö-sen % me-lo-di-ösen + me-lo-diö-ser % me-lo-di-öser + me-lo-diö-ses % me-lo-di-öses + meut-re % meu-tre + Mi-lans % Mi-l-ans + mi-no-ische % mi-no-i-sche + mi-no-ischem % mi-no-i-schem + mi-no-ischen % mi-no-i-schen + mi-no-ischer % mi-no-i-scher + mi-no-isches % mi-no-i-sches + mi-nu-tiö-se % mi-nu-ti-öse + mi-nu-tiö-sem % mi-nu-ti-ösem + mi-nu-tiö-sen % mi-nu-ti-ösen + mi-nu-tiö-ser % mi-nu-ti-öser + mi-nu-tiö-ses % mi-nu-ti-öses + mi-se-ra-ble-rer % mi-se-ra-bler-er + mitt-le-rer % mitt-ler-er + mo-bi-le-rer % mo-bi-ler-er + mo-dern-ste % mo-d-ern-ste + mo-dern-stem % mo-d-ern-stem + mo-dern-sten % mo-d-ern-sten + mo-dern-ster % mo-d-ern-ster + mo-dern-stes % mo-d-ern-stes + mog-le % mo-gle + mo-nu-men-ta-le-rer % mo-nu-men-ta-ler-er + Mor-phe-me % Mor-ph-e-me + Mor-phe-men % Mor-ph-e-men + Mo-sai-ke % Mo-sa-ike + Mo-sai-ken % Mo-sa-ik-en + mul-ti-ples % mul-tip-les + Mus-se-lins % Mus-sel-ins + my-ste-riö-se % my-ste-ri-öse + my-ste-riö-sem % my-ste-ri-ösem + my-ste-riö-sen % my-ste-ri-ösen + my-ste-riö-ser % my-ste-ri-öser + my-ste-riö-ses % my-ste-ri-öses + nag-le % na-gle + nai-ve-rem % nai-ver-em + nai-ve-ren % nai-ver-en + nai-ve-rer % nai-ver-er + nai-ve-res % nai-ver-es + ne-ga-ti-ve-rem % ne-ga-ti-ver-em + ne-ga-ti-ve-ren % ne-ga-ti-ver-en + ne-ga-ti-ve-rer % ne-ga-ti-ver-er + ne-ga-ti-ve-res % ne-ga-ti-ver-es + neue-rem % neu-e-rem + neue-res % neu-e-res + neun-ter % ne-un-ter + neu-tra-le-rer % neu-tra-ler-er + nie-ste % nies-te + nie-sten % nies-ten + nie-stest % nies-test + nie-stet % nies-tet + Ni-veaus % Ni-ve-aus + no-bler % no-b-ler + nörg-le % nör-gle + nor-ma-le-rer % nor-ma-ler-er + nüch-tern-ste % nüch-t-ern-ste + nüch-tern-stem % nüch-t-ern-stem + nüch-tern-sten % nüch-t-ern-sten + nüch-tern-ster % nüch-t-ern-ster + nüch-tern-stes % nüch-t-ern-stes + ob-jek-ti-ve-rem % ob-jek-ti-ver-em + ob-jek-ti-ve-ren % ob-jek-ti-ver-en + ob-jek-ti-ve-rer % ob-jek-ti-ver-er + ob-jek-ti-ve-res % ob-jek-ti-ver-es + Ob-stes % Obst-es + of-fi-zi-el-le-rer % of-fi-zi-el-ler-er + of-fi-ziö-se % of-fi-zi-öse + of-fi-ziö-sem % of-fi-zi-ösem + of-fi-ziö-sen % of-fi-zi-ösen + of-fi-ziö-ser % of-fi-zi-öser + of-fi-ziö-ses % of-fi-zi-öses + Ok-to-bers % Ok-t-obers + On-line % On-li-ne + Ozons % Oz-ons + Pa-blos % Pab-los + Pa-lä-sti-nen-se-rin-nen % Pa-lä-sti-nen-se-r-in-nen + Pa-lä-sti-nen-sers % Pa-lä-sti-nensers + pa-lav-re % pa-la-vre + pa-na-me-si-sche % pan-a-me-si-sche + pa-na-me-si-schen % pan-a-me-si-schen + Pa-ra-bo-lo-ide % Pa-ra-bo-loi-de + Pa-ra-bo-lo-iden % Pa-ra-bo-loi-den + Pa-ra-bo-lo-ides % Pa-ra-bo-loi-des + Pa-ra-do-xons % Pa-ra-do-x-ons + Pa-raf-fin % Par-af-fin + pa-ra-si-tä-rem % pa-ra-si-tär-em + pa-ra-si-tä-ren % pa-ra-si-tär-en + pa-ra-si-tä-rer % pa-ra-si-tär-er + pa-ra-si-tä-res % pa-ra-si-tär-es + Par-fums % Parf-ums + Par-terres % Par-ter-res + par-ti-el-le-rer % par-ti-el-ler-er + pas-si-ve-rem % pas-si-ver-em + pas-si-ve-ren % pas-si-ver-en + pas-si-ve-rer % pas-si-ver-er + pas-si-ve-res % pas-si-ver-es + Pen-ta-gons % Pen-ta-g-ons + Pent-house % Penthou-se + per-fid-ste % per-fi-dste + per-fid-stem % per-fi-dstem + per-fid-sten % per-fi-dsten + per-fid-ster % per-fi-dster + per-fid-stes % per-fi-dstes + Per-for-mance % Per-for-man-ce + Pe-rio-de % Pe-ri-ode + Pe-rio-den % Pe-ri-oden + pe-rio-disch % pe-ri-odisch + pe-rio-di-sche % pe-ri-odi-sche + pe-rio-di-schem % pe-ri-odi-schem + pe-rio-di-schen % pe-ri-odi-schen + pe-rio-di-scher % pe-ri-odi-scher + pe-rio-di-sches % pe-ri-odi-sches + Pe-rio-di-zi-tät % Pe-ri-odi-zi-tät + Per-se-rin-nen % Per-se-r-in-nen + pflast-re % pfla-stre + pilg-re % pil-g-re + Pipe-line % Pi-pe-li-ne + Pipe-lines % Pi-pe-li-nes + Plä-doyer % Plä-doy-er + Pla-ne-to-iden % Pla-ne-toi-den + Pla-teaus % Pla-te-aus + plätsch-re % plät-sch-re + plau-si-ble-rer % plau-si-bler-er + pok-re % po-k-re + polst-re % pol-stre + polt-re % pol-tre + Po-ly-gons % Po-ly-g-ons + Po-pe-line % Po-pe-li-ne + Porte-feuille % Por-te-feuil-le + Porte-feuilles % Por-te-feuil-les + Porte-mon-naie % Por-te-mon-naie + Porte-mon-naies % Por-te-mon-nai-es + po-si-ti-ve-rem % po-si-ti-ver-em + po-si-ti-ve-ren % po-si-ti-ver-en + po-si-ti-ve-rer % po-si-ti-ver-er + po-si-ti-ve-res % po-si-ti-ver-es + pos-ses-si-ve-rem % pos-ses-si-ver-em + pos-ses-si-ve-ren % pos-ses-si-ver-en + pos-ses-si-ve-rer % pos-ses-si-ver-er + pos-ses-si-ve-res % pos-ses-si-ver-es + prak-ti-ka-ble-rer % prak-ti-ka-bler-er + pral-le-rer % pral-ler-er + prä-mierst % prä-mi-erst + prä-miert % prä-mi-ert + prä-mier-te % prä-mi-er-te + prä-mier-tem % prä-mi-er-tem + prä-mier-ten % prä-mi-er-ten + prä-mier-ter % prä-mi-er-ter + prä-mier-tes % prä-mi-er-tes + prä-mier-test % prä-mi-er-test + prä-mier-tet % prä-mi-er-tet + prä-ten-tiö-se % prä-ten-ti-öse + prä-ten-tiö-sem % prä-ten-ti-ösem + prä-ten-tiö-sen % prä-ten-ti-ösen + prä-ten-tiö-ser % prä-ten-ti-öser + prä-ten-tiö-ses % prä-ten-ti-öses + pri-mi-ti-ve-rem % pri-mi-ti-ver-em + pri-mi-ti-ve-ren % pri-mi-ti-ver-en + pri-mi-ti-ve-rer % pri-mi-ti-ver-er + pri-mi-ti-ve-res % pri-mi-ti-ver-es + pro-duk-ti-ve-rem % pro-duk-ti-ver-em + pro-duk-ti-ve-ren % pro-duk-ti-ver-en + pro-duk-ti-ve-rer % pro-duk-ti-ver-er + pro-duk-ti-ve-res % pro-duk-ti-ver-es + pro-fi-ta-ble-rer % pro-fi-ta-bler-er + pro-gres-si-ve-rem % pro-gres-si-ver-em + pro-gres-si-ve-ren % pro-gres-si-ver-en + pro-gres-si-ve-rer % pro-gres-si-ver-er + pro-gres-si-ve-res % pro-gres-si-ver-es + pro-sai-sche % pro-sa-i-sche + pro-sai-schem % pro-sa-i-schem + pro-sai-schen % pro-sa-i-schen + pro-sai-scher % pro-sa-i-scher + pro-sai-sches % pro-sa-i-sches + Pro-tei-ne % Pro-te-i-ne + Pro-tei-nen % Pro-te-i-nen + pro-vo-ka-ti-ve-rem % pro-vo-ka-ti-ver-em + pro-vo-ka-ti-ve-ren % pro-vo-ka-ti-ver-en + pro-vo-ka-ti-ve-rer % pro-vo-ka-ti-ver-er + pro-vo-ka-ti-ve-res % pro-vo-ka-ti-ver-es + prüg-le % prü-g-le + Puz-zle % Puzz-le + Puz-zles % Puzz-les + ra-di-ka-le-rer % ra-di-ka-ler-er + Ra-dons % Ra-d-ons + räk-le % rä-kle + Ralphs % Ral-phs + ra-tio-nel-le-rer % ra-tio-nel-ler-er + ratt-re % rat-tre + Rau-mes % Raum-es + re-dun-dant % red-un-dant + re-dun-dan-te % red-un-dan-te + re-dun-dan-tem % red-un-dan-tem + re-dun-dan-ten % red-un-dan-ten + re-dun-dan-ter % red-un-dan-ter + re-dun-dan-tes % red-un-dan-tes + Re-dun-danz % Red-un-danz + Re-dun-dan-zen % Red-un-dan-zen + re-el-le-rer % re-el-ler-er + Re-gimes % Re-gi-mes + reg-le % re-gle + reich-ste % reichs-te + reich-stem % reichs-tem + reich-sten % reichs-ten + reich-ster % reichs-ter + reich-stes % reichs-tes + Re-kruts % Re-k-ruts + re-la-ti-ve-rem % re-la-ti-ver-em + re-la-ti-ve-ren % re-la-ti-ver-en + re-la-ti-ve-rer % re-la-ti-ver-er + re-la-ti-ve-res % re-la-ti-ver-es + re-li-giö-se % re-li-gi-öse + re-li-giö-sem % re-li-gi-ösem + re-li-giö-sen % re-li-gi-ösen + re-li-giö-ser % re-li-gi-öser + re-li-giö-ses % re-li-gi-öses + remp-le % rem-ple + ren-ta-ble-rer % ren-ta-bler-er + re-pres-si-ve-rem % re-pres-si-ver-em + re-pres-si-ve-ren % re-pres-si-ver-en + re-pres-si-ve-rer % re-pres-si-ver-er + re-pres-si-ve-res % re-pres-si-ver-es + re-spek-ta-ble-rer % re-spek-ta-bler-er + re-vo-lu-tio-nier % re-vo-lu-tio-ni-er + rülp-ste % rülps-te + rülp-sten % rülps-ten + rülp-stest % rülps-test + rülp-stet % rülps-tet + Ru-mä-nin-nen % Ru-män-in-nen + rü-ste-te % rüs-te-te + rü-ste-ten % rüs-te-ten + rü-ste-test % rüs-te-test + rü-ste-tet % rüs-te-tet + Saa-les % Saa-l-es + sabb-re % sab-b-re + sa-ni-tä-rem % sa-ni-tär-em + sa-ni-tä-ren % sa-ni-tär-en + sa-ni-tä-rer % sa-ni-tär-er + sa-ni-tä-res % sa-ni-tär-es + säub-re % säu-b-re + saue-res % sau-e-res + Sau-nas % Sau-n-as + Scha-fot-te % Schaf-ot-te + Scha-fot-ten % Schaf-ot-ten + schäk-re % schä-k-re + scha-le-rer % scha-ler-er + Schar-la-tans % Schar-la-t-ans + scheue-rem % scheu-e-rem + scheue-res % scheu-e-res + scheue-rest % scheu-e-rest + schien % schi-en + schlabb-re % schlab-bre + schlabb-rig % schlab-brig + schlabb-ri-ge % schlab-bri-ge + schlabb-ri-gem % schlab-bri-gem + schlabb-ri-gen % schlab-bri-gen + schlabb-ri-ger % schlab-bri-ger + schlabb-ri-ges % schlab-bri-ges + schläng-le % schlän-g-le + schlaue-rem % schlau-e-rem + schlaue-res % schlau-e-res + schlenk-re % schlen-k-re + schleu-ste % schleus-te + schleu-sten % schleus-ten + schleu-stest % schleus-test + schleu-stet % schleus-tet + schlitt-re % schlit-tre + Schlos-se-rin-nen % Schlos-se-r-in-nen + schmirg-le % schmir-gle + schmugg-le % schmug-gle + schnatt-re % schnat-tre + schnee-ig % schne-eig + schnee-ige % schne-ei-ge + schnee-igem % schne-ei-gem + schnee-igen % schne-ei-gen + schnee-iger % schne-ei-ger + schnee-iges % schne-ei-ges + schnel-le-rer % schnel-ler-er + schnieg-le % schnie-gle + Schreins % Schr-eins + schrien % schri-en + schril-le-rer % schril-ler-er + schüch-tern-ste % schüch-t-ern-ste + schüch-tern-stem % schüch-t-ern-stem + schüch-tern-sten % schüch-t-ern-sten + schüch-tern-ster % schüch-t-ern-ster + schüch-tern-stes % schüch-t-ern-stes + schwabb-le % schwab-ble + schwäng-re % schwän-g-re + schwär-mend % schwär-me-nd + schwär-men-de % schwär-me-n-de + schwär-men-dem % schwär-me-n-dem + schwär-men-den % schwär-me-n-den + schwär-men-der % schwär-me-n-der + schwär-men-des % schwär-me-n-des + Schwär-mern % Schwär-me-rn + Schwär-mers % Schwär-me-rs + Schwei-^^ffers % Schwei^^ff-ers + schwu-le-rer % schwu-ler-er + schwü-le-rer % schwü-ler-er + seg-le % se-gle + se-ni-le-rer % se-ni-ler-er + sen-si-ble-rer % sen-si-bler-er + sen-ten-ziö-se % sen-ten-zi-öse + sen-ten-ziö-sem % sen-ten-zi-ösem + sen-ten-ziö-sen % sen-ten-zi-ösen + sen-ten-ziö-ser % sen-ten-zi-öser + sen-ten-ziö-se-re % sen-ten-zi-öse-re + sen-ten-ziö-se-rem % sen-ten-zi-öse-rem + sen-ten-ziö-se-ren % sen-ten-zi-öse-ren + sen-ten-ziö-se-rer % sen-ten-zi-öse-rer + sen-ten-ziö-se-res % sen-ten-zi-öse-res + sen-ten-ziö-ses % sen-ten-zi-öses + sen-ten-ziö-se-ste % sen-ten-zi-öse-ste + sen-ten-ziö-se-stem % sen-ten-zi-öse-stem + sen-ten-ziö-se-sten % sen-ten-zi-öse-sten + sen-ten-ziö-se-ster % sen-ten-zi-öse-ster + sen-ten-ziö-se-stes % sen-ten-zi-öse-stes + sen-ti-men-ta-le-rer % sen-ti-men-ta-ler-er + se-riö-se % se-ri-öse + se-riö-sem % se-ri-ösem + se-riö-sen % se-ri-ösen + se-riö-ser % se-ri-öser + se-riö-se-re % se-ri-öse-re + se-riö-se-rem % se-ri-öse-rem + se-riö-se-ren % se-ri-öse-ren + se-riö-se-rer % se-ri-öse-rer + se-riö-se-res % se-ri-öse-res + se-riö-ses % se-ri-öses + se-riö-se-ste % se-ri-öse-ste + se-riö-se-stem % se-ri-öse-stem + se-riö-se-sten % se-ri-öse-sten + se-riö-se-ster % se-ri-öse-ster + se-riö-se-stes % se-ri-öse-stes + Se-riö-si-tät % Se-ri-ösi-tät + Se-rums % Ser-ums + ser-vi-le-rer % ser-vi-ler-er + sieg-le % sie-gle + sim-pler % simp-ler + sim-ple-re % simp-le-re + sim-ple-rem % simp-le-rem + sim-ple-ren % simp-le-ren + sim-ple-rer % simp-ler-er + sim-ple-res % simp-le-res + sim-ples % simp-les + sint-re % sin-tre + Skalps % Skal-ps + Skla-ve-rei-en % Skla-ver-ei-en + skur-ri-le-rer % skur-ri-ler-er + Soft-ware % Soft-wa-re + So-li-tä-ren % So-li-tär-en + so-zia-le-rer % so-zia-ler-er + spe-zia-le-rer % spe-zia-ler-er + spe-zi-el-le-rer % spe-zi-el-ler-er + spieg-le % spie-gle + Spio-nin-nen % Spion-in-nen + splitt-re % split-tre + spon-tan-ste % spon-t-an-ste + spon-tan-stem % spon-t-an-stem + spon-tan-sten % spon-t-an-sten + spon-tan-ster % spon-t-an-ster + spon-tan-stes % spon-t-an-stes + sta-bi-le-rer % sta-bi-ler-er + stahlst % stahl-st + stänk-re % stän-k-re + stei-le-rer % stei-ler-er + stemp-le % stem-ple + ster-be % st-er-be + ste-ri-le-rer % ste-ri-ler-er + Ste-ro-ide % Ste-roi-de + stil-le-rer % stil-ler-er + stöb-re % stö-b-re + stolp-re % stol-p-re + stramp-le % stram-ple + stra-pa-ziö-se % stra-pa-zi-öse + stra-pa-ziö-sem % stra-pa-zi-ösem + stra-pa-ziö-sen % stra-pa-zi-ösen + stra-pa-ziö-ser % stra-pa-zi-öser + stra-pa-ziö-ses % stra-pa-zi-öses + stup-ste % stups-te + stup-sten % stups-ten + stup-stest % stups-test + stup-stet % stups-tet + stu-rer % stur-er + stu-re-rem % stur-e-rem + stu-re-res % stur-e-res + sub-stan-ti-el-le-rer % sub-stan-ti-el-ler-er + sub-stan-zi-el-le-rer % sub-stan-zi-el-ler-er + sub-ti-le-rer % sub-ti-ler-er + Sul-fids % Sul-fi-ds + Sy-rie-rin % Sy-ri-e-rin + Sy-rie-rin-nen % Sy-ri-e-rin-nen + Ta-lents % Tal-ents + Tam-bu-rins % Tam-bu-r-ins + te-le-fo-nier % te-le-fo-ni-er + ten-den-ziö-se % ten-den-zi-öse + ten-den-ziö-sem % ten-den-zi-ösem + ten-den-ziö-sen % ten-den-zi-ösen + ten-den-ziö-ser % ten-den-zi-öser + ten-den-ziö-se-re % ten-den-zi-öse-re + ten-den-ziö-se-rem % ten-den-zi-öse-rem + ten-den-ziö-se-ren % ten-den-zi-öse-ren + ten-den-ziö-se-rer % ten-den-zi-öse-rer + ten-den-ziö-se-res % ten-den-zi-öse-res + ten-den-ziö-ses % ten-den-zi-öses + ten-den-ziö-se-ste % ten-den-zi-öse-ste + ten-den-ziö-se-stem % ten-den-zi-öse-stem + ten-den-ziö-se-sten % ten-den-zi-öse-sten + ten-den-ziö-se-ster % ten-den-zi-öse-ster + ten-den-ziö-se-stes % ten-den-zi-öse-stes + ter-tiä-re % ter-ti-äre + ter-tiä-rem % ter-ti-ärem + ter-tiä-ren % ter-ti-ären + ter-tiä-rer % ter-ti-ärer + ter-tiä-res % ter-ti-äres + te-xa-nisch % te-x-a-nisch + te-xa-ni-sche % te-x-a-ni-sche + te-xa-ni-schem % te-x-a-ni-schem + te-xa-ni-schen % te-x-a-ni-schen + te-xa-ni-scher % te-x-a-ni-scher + te-xa-ni-sches % te-x-a-ni-sches + Ti-ta-nin-nen % Ti-tan-in-nen + Ti-tans % Ti-t-ans + tol-le-rer % tol-ler-er + To-re-ros % To-re-r-os + to-ta-li-tä-rem % to-ta-li-tär-em + to-ta-li-tä-ren % to-ta-li-tär-en + to-ta-li-tä-rer % to-ta-li-tär-er + to-ta-li-tä-re-re % to-ta-li-tär-ere + to-ta-li-tä-re-rem % to-ta-li-tär-erem + to-ta-li-tä-re-rer % to-ta-li-tär-erer + to-ta-li-tä-re-res % to-ta-li-tär-eres + to-ta-li-tä-res % to-ta-li-tär-es + tra-di-tio-nel-le-rer % tra-di-tio-nel-ler-er + tramp-le % tram-ple + trans-por-ta-ble-rer % trans-por-ta-bler-er + treue-rem % treu-e-rem + treue-res % treu-e-res + trick-ste % tricks-te + trick-sten % tricks-ten + trick-stest % tricks-test + trick-stet % tricks-tet + Tris-tesse % Tristes-se + tri-um-pha-le-rer % tri-um-pha-ler-er + Tri-umphs % Tri-um-phs + tri-via-le-rer % tri-via-ler-er + Tsche-tsche-ni-en % Tschet-sche-ni-en + Tsche-tsche-ni-ens % Tschet-sche-ni-ens + tsche-tsche-nisch % tschet-sche-nisch + tsche-tsche-ni-sche % tschet-sche-ni-sche + tsche-tsche-ni-schem % tschet-sche-ni-schem + tsche-tsche-ni-schen % tschet-sche-ni-schen + tsche-tsche-ni-scher % tschet-sche-ni-scher + tsche-tsche-ni-sches % tschet-sche-ni-sches + tunkst % tunk-st + Ty-ran-nin-nen % Ty-rann-in-nen + ubi-qui-tä-rem % ubi-qui-tär-em + ubi-qui-tä-ren % ubi-qui-tär-en + ubi-qui-tä-rer % ubi-qui-tär-er + ubi-qui-tä-res % ubi-qui-tär-es + üb-le-rer % üb-ler-er + uni-ver-sel-le-rer % uni-ver-sel-ler-er + uni-ver-si-tä-rem % uni-ver-si-tär-em + uni-ver-si-tä-ren % uni-ver-si-tär-en + uni-ver-si-tä-rer % uni-ver-si-tär-er + uni-ver-si-tä-res % uni-ver-si-tär-es + Urans % Ur-ans + Urins % Ur-ins + va-ria-ble-rer % va-ria-bler-er + ver-ba-le-rer % ver-ba-ler-er + Ver-fas-se-rin-nen % Ver-fas-se-r-in-nen + ver-finst-re % ver-fin-stre + ver-hök-re % ver-hö-k-re + ver-körp-re % ver-kör-p-re + ver-läng-re % ver-län-g-re + ver-rieg-le % ver-rie-gle + ver-scherb-le % ver-scher-ble + ver-üb-le % ver-ü-b-le + ver-witt-re % ver-wit-tre + ver-wü-ste-tem % ver-wüs-te-tem + ver-wü-ste-ten % ver-wüs-te-ten + ver-wü-ste-ter % ver-wüs-te-ter + ver-wü-ste-tes % ver-wüs-te-tes + ver-wü-ste-test % ver-wüs-te-test + ver-wü-ste-tet % ver-wüs-te-tet + Viet-nam % Vi-et-nam + Viet-na-me-se % Vi-et-na-me-se + Viet-na-me-sen % Vi-et-na-me-sen + Viet-na-me-sin % Vi-et-na-me-sin + Viet-na-me-sin-nen % Vi-et-na-me-sin-nen + Viet-nams % Vi-et-nams + vi-ta-le-rer % vi-ta-ler-er + vög-le % vö-gle + vo-la-ti-le-rer % vo-la-ti-ler-er + vol-le-rer % vol-ler-er + Wag-gons % Wag-g-ons + wär-mend % wär-me-nd + wär-men-de % wär-me-n-de + wär-men-dem % wär-me-n-dem + wär-men-den % wär-me-n-den + wär-men-der % wär-me-n-der + wär-men-des % wär-me-n-des + weig-re % wei-g-re + werk-le % wer-kle + wich-ste % wichs-te + wich-sten % wichs-ten + wich-stest % wichs-test + wich-stet % wichs-tet + Wien % Wi-en + witt-re % wit-tre + woh-le-rem % wohl-e-rem + woh-le-rer % wohler-er + woh-le-res % wohl-e-res + wü-ste-te % wüs-te-te + wü-ste-ten % wüs-te-ten + wü-ste-test % wüs-te-test + wü-ste-tet % wüs-te-tet + ze-le-brier % ze-le-bri-er + zen-tra-le-rer % zen-tra-ler-er + Zen-tri-gramm % Zent-ri-gramm + Zen-tri-gram-me % Zent-ri-gram-me + Zen-tri-gram-men % Zent-ri-gram-men + Zen-tri-gramms % Zent-ri-gramms + ze-re-mo-niö-se % ze-re-mo-ni-öse + ze-re-mo-niö-sem % ze-re-mo-ni-ösem + ze-re-mo-niö-sen % ze-re-mo-ni-ösen + ze-re-mo-niö-ser % ze-re-mo-ni-öser + ze-re-mo-niö-se-re % ze-re-mo-ni-öse-re + ze-re-mo-niö-se-rem % ze-re-mo-ni-öse-rem + ze-re-mo-niö-se-ren % ze-re-mo-ni-öse-ren + ze-re-mo-niö-se-rer % ze-re-mo-ni-öse-rer + ze-re-mo-niö-se-res % ze-re-mo-ni-öse-res + ze-re-mo-niö-ses % ze-re-mo-ni-öses + ze-re-mo-niö-se-ste % ze-re-mo-ni-öse-ste + ze-re-mo-niö-se-stem % ze-re-mo-ni-öse-stem + ze-re-mo-niö-se-sten % ze-re-mo-ni-öse-sten + ze-re-mo-niö-se-ster % ze-re-mo-ni-öse-ster + ze-re-mo-niö-se-stes % ze-re-mo-ni-öse-stes + zet-re % ze-tre + Zin-no-bers % Zin-n-obers + zitt-re % zit-tre + zög-re % zö-g-re + züg-le % zü-g-le + züng-le % zün-gle + zwink-re % zwin-k-re +% +% +% falsche Trennungen von zusammengesetzten Wörtern +% + ab-gehst % ab-ge-hst + ab-geht % ab-ge-ht + ab-hob-le % ab-ho-ble + ab-hobst % ab-h-obst + ab-machst % ab-ma-chst + ab-macht % ab-ma-cht + ab-mach-te % ab-ma-ch-te + ab-mach-ten % ab-ma-ch-ten + ab-mach-test % ab-ma-ch-test + ab-mach-tet % ab-ma-ch-tet + ab-rieg-le % ab-rie-gle + ab-sau-ge % ab-s-au-ge + ab-schobst % ab-sch-obst + ab-seg-le % ab-se-gle + ab-spieg-le % ab-spie-gle + ab-stemp-le % ab-stem-ple + ab-ster-be % ab-st-er-be + ab-sterbt % ab-st-erbt + an-baust % an-bau-st + an-ge-schrien % an-ge-schri-en + an-ge-starrt % an-ge-st-arrt + an-ge-starr-tem % an-ge-st-arr-tem + an-ge-starr-ten % an-ge-st-arr-ten + an-ge-starr-ter % an-ge-st-arr-ter + an-ge-starr-tes % an-ge-st-arr-tes + an-hobst % an-h-obst + an-iso-trop % ani-so-trop + an-iso-tro-pe % ani-so-tro-pe + an-iso-tro-pem % ani-so-tro-pem + an-iso-tro-pen % ani-so-tro-pen + an-iso-tro-per % ani-so-tro-per + an-iso-tro-pes % ani-so-tro-pes + an-kling-le % an-klin-gle + an-kurb-le % an-kur-ble + an-machst % an-ma-chst + an-macht % an-ma-cht + an-mach-te % an-ma-ch-te + an-mach-ten % an-ma-ch-ten + an-mach-test % an-ma-ch-test + an-mach-tet % an-ma-ch-tet + an-nag-le % an-na-gle + an-pöb-le % an-pö-ble + an-sau-ge % an-s-au-ge + an-schien % an-schi-en + an-trafst % an-tra-fst + an-traft % an-tra-ft + ape-rio-disch % ape-ri-odisch + ape-rio-di-sche % ape-ri-odi-sche + ape-rio-di-schem % ape-ri-odi-schem + ape-rio-di-schen % ape-ri-odi-schen + ape-rio-di-scher % ape-ri-odi-scher + ape-rio-di-sches % ape-ri-odi-sches + are-li-giö-se % are-li-gi-öse + are-li-giö-sem % are-li-gi-ösem + are-li-giö-sen % are-li-gi-ösen + are-li-giö-ser % are-li-gi-öser + are-li-giö-ses % are-li-gi-öses + auf-fäch-re % auf-fä-ch-re + auf-ge-schrien % auf-ge-schri-en + auf-hobst % auf-h-obst + auf-möb-le % auf-mö-ble + Auf-pas-se-rin-nen % Auf-pas-se-r-in-nen + auf-reihst % auf-rei-hst + auf-reiht % auf-rei-ht + auf-reih-te % auf-rei-h-te + auf-reih-ten % auf-rei-h-ten + auf-reih-test % auf-rei-h-test + auf-reih-tet % auf-rei-h-tet + auf-rei^^fft % auf-rei-^^fft + auf-rü-ste-ten % auf-rüs-te-ten + auf-rü-ste-test % auf-rüs-te-test + auf-rü-ste-tet % auf-rüs-te-tet + auf-sau-ge % auf-s-au-ge + auf-schrien % auf-schri-en + auf-wär-mend % auf-wär-me-nd + auf-wär-men-de % auf-wär-me-n-de + auf-wär-men-dem % auf-wär-me-n-dem + auf-wär-men-den % auf-wär-me-n-den + auf-wär-men-der % auf-wär-me-n-der + auf-wär-men-des % auf-wär-me-n-des + aus-gebt % aus-ge-bt + aus-ge-rü-ste-te % aus-ge-rüs-te-te + aus-ge-rü-ste-tem % aus-ge-rüs-te-tem + aus-ge-rü-ste-ten % aus-ge-rüs-te-ten + aus-ge-rü-ste-ter % aus-ge-rüs-te-ter + aus-ge-rü-ste-tes % aus-ge-rüs-te-tes + aus-lobst % aus-l-obst + aus-sau-ge % aus-s-au-ge + aus-ster-be % aus-st-er-be + aus-sterbt % aus-st-erbt + aus-tobst % aus-t-obst + aus-zu-tau-schen % aus-zut-au-schen + aus-zu-tau-schend % aus-zut-au-schend + aus-zu-tau-schen-de % aus-zut-au-schen-de + aus-zu-tau-schen-dem % aus-zut-au-schen-dem + aus-zu-tau-schen-den % aus-zut-au-schen-den + aus-zu-tau-schen-der % aus-zut-au-schen-der + aus-zu-tau-schen-des % aus-zut-au-schen-des + be-dien % be-di-en + be-flüg-le % be-flü-g-le + be-hobst % be-h-obst + be-jub-le % be-ju-ble + be-lag-re % be-la-g-re + be-lief-re % be-lie-fre + be-mäng-le % be-män-g-le + be-mutt-re % be-mut-tre + be-neb-le % be-ne-ble + be-schien % be-schi-en + be-sieg-le % be-sie-gle + be-stacht % be-st-acht + be-stahlst % be-stahl-st + be-völk-re % be-völ-k-re + be-ziff-re % be-zif-fre + da-blieb % da-b-lieb + da-hin-glitt % da-hing-litt + da-hin-glit-te % da-hing-lit-te + da-hin-glit-ten % da-hing-lit-ten + da-hin-glit-test % da-hing-lit-test + da-hin-glit-tet % da-hing-lit-tet + da-hin-glittst % da-hing-littst + da-hin-ster-be % da-hin-st-er-be + da-hin-sterbt % da-hin-st-erbt + da-von-schlei-che % da-v-on-schlei-che + da-von-schlei-chen % da-v-on-schlei-chen + da-von-schlei-chend % da-v-on-schlei-chend + da-von-schlei-chen-de % da-v-on-schlei-chen-de + da-von-schlei-chen-dem % da-v-on-schlei-chen-dem + da-von-schlei-chen-den % da-v-on-schlei-chen-den + da-von-schlei-chen-der % da-v-on-schlei-chen-der + da-von-schlei-chen-des % da-v-on-schlei-chen-des + da-von-schleichst % da-v-on-schleichst + da-von-schleicht % da-v-on-schleicht + da-von-spa-zier-te % da-v-onspa-zier-te + da-zu-lernst % da-zu-l-ernst + ein-baust % ein-bau-st + ein-flö^^fft % ein-flö-^^fft + ein-flö^^ff-te % ein-flö-^^ffte + ein-flö^^ff-ten % ein-flö-^^fften + ein-flö^^ff-test % ein-flö-^^fftest + ein-flö^^ff-tet % ein-flö-^^fftet + ein-ge-flö^^fft % ein-ge-flö-^^fft + ein-ge-flö^^ff-te % ein-ge-flö-^^ffte + ein-ge-flö^^ff-tem % ein-ge-flö-^^fftem + ein-ge-flö^^ff-ten % ein-ge-flö-^^fften + ein-ge-flö^^ff-ter % ein-ge-flö-^^ffter + ein-ge-flö^^ff-tes % ein-ge-flö-^^fftes + ein-ge-schleu-ste % ein-ge-schleus-te + ein-ge-schleu-stem % ein-ge-schleus-tem + ein-ge-schleu-sten % ein-ge-schleus-ten + ein-ge-schleu-stes % ein-ge-schleus-tes + ein-la-gre % ein-la-g-re + ein-lief-re % ein-lie-fre + ein-schlich % ein-sch-lich + ein-schli-che % ein-sch-li-che + ein-schli-chen % ein-sch-li-chen + ein-schli-chest % ein-sch-li-chest + ein-schlichst % ein-sch-lichst + ein-schlicht % ein-sch-licht + ein-schlief % ein-sch-lief + ein-trafst % ein-tra-fst + ein-traft % ein-tra-ft + ein-zu-tau-chen % ein-zut-au-chen + ein-zu-tau-chend % ein-zut-au-chend + ein-zu-tau-chen-de % ein-zut-au-chen-de + ein-zu-tau-chen-dem % ein-zut-au-chen-dem + ein-zu-tau-chen-den % ein-zut-au-chen-den + ein-zu-tau-chen-der % ein-zut-au-chen-der + ein-zu-tau-chen-des % ein-zut-au-chen-des + ein-zu-tau-schen % ein-zut-au-schen + ein-zu-tau-schend % ein-zut-au-schend + ein-zu-tau-schen-de % ein-zut-au-schen-de + ein-zu-tau-schen-dem % ein-zut-au-schen-dem + ein-zu-tau-schen-den % ein-zut-au-schen-den + ein-zu-tau-schen-der % ein-zut-au-schen-der + ein-zu-tau-schen-des % ein-zut-au-schen-des + ein-zu-üben % ein-zuü-ben + ein-zu-übend % ein-zuü-bend + ein-zu-üben-de % ein-zuü-ben-de + ein-zu-üben-dem % ein-zuü-ben-dem + ein-zu-üben-den % ein-zuü-ben-den + ein-zu-üben-der % ein-zuü-ben-der + ein-zu-üben-des % ein-zuü-ben-des + ent-blö^^fft % ent-blö-^^fft + ent-blö^^ff-te % ent-blö-^^ffte + ent-blö^^ff-tem % ent-blö-^^fftem + ent-blö^^ff-ten % ent-blö-^^fften + ent-blö^^ff-ter % ent-blö-^^ffter + ent-blö^^ff-tes % ent-blö-^^fftes + ent-blö^^ff-test % ent-blö-^^fftest + ent-blö^^ff-tet % ent-blö-^^fftet + ent-er-be % en-t-er-be + ent-fernst % ent-f-ernst + ent-hobst % ent-h-obst + ent-rieg-le % ent-rie-gle + ent-rü-ste-te % ent-rüs-te-te + ent-rü-ste-tem % ent-rüs-te-tem + ent-rü-ste-ten % ent-rüs-te-ten + ent-rü-ste-ter % ent-rüs-te-ter + ent-rü-ste-tes % ent-rüs-te-tes + ent-rü-ste-test % ent-rüs-te-test + ent-rü-ste-tet % ent-rüs-te-tet + ent-schlief % ent-sch-lief + ent-schlie-fen % ent-sch-lie-fen + ent-schlie-fest % ent-sch-lie-fest + ent-schliefst % ent-sch-liefst + ent-schlieft % ent-sch-lieft + ent-schlös-se % ent-sch-lös-se + ent-schlös-sen % ent-sch-lös-sen + ent-schlös-sest % ent-sch-lös-sest + ent-schlö^^fft % ent-schlö-^^fft + ent-ziff-re % ent-zif-fre + ent-zweist % ent-zwei-st + er-blas-se % erb-las-se + er-blas-sen % erb-las-sen + er-blas-send % erb-las-send + er-blas-sen-de % erb-las-sen-de + er-blas-sen-dem % erb-las-sen-dem + er-blas-sen-den % erb-las-sen-den + er-blas-sen-der % erb-las-sen-der + er-blas-sen-des % erb-las-sen-des + Erb-las-se-rin-nen % Erb-las-se-r-in-nen + er-blas-sest % erb-las-sest + er-eif-re % er-ei-fre + er-folg-reich-ste % er-folg-reichs-te + er-folg-reich-stem % er-folg-reichs-tem + er-folg-reich-sten % er-folg-reichs-ten + er-folg-reich-ster % er-folg-reichs-ter + er-folg-reich-stes % er-folg-reichs-tes + er-hal-ten-ge-blie-ben % er-halt-en-ge-blie-ben + er-hal-ten-ge-blie-be-ne % er-halt-en-ge-blie-be-ne + er-hal-ten-ge-blie-be-nem % er-halt-en-ge-blie-be-nem + er-hal-ten-ge-blie-be-nen % er-halt-en-ge-blie-be-nen + er-hal-ten-ge-blie-be-ner % er-halt-en-ge-blie-be-ner + er-hal-ten-ge-blie-be-nes % er-halt-en-ge-blie-be-nes + er-klirr-te % er-k-lirr-te + er-klun-ge-nen % er-k-lun-ge-nen + er-läut-re % er-läu-tre + er-munt-re % er-mun-tre + er-schien % er-schi-en + er-stacht % er-st-acht + erster-be % er-st-er-be + er-sterbt % er-st-erbt + er-wär-mend % er-wär-me-nd + er-wär-men-de % er-wär-me-n-de + er-wär-men-dem % er-wär-me-n-dem + er-wär-men-den % er-wär-me-n-den + er-wär-men-der % er-wär-me-n-der + er-wär-men-des % er-wär-me-n-des + er-wischt % er-wi-scht + er-wisch-te % er-wi-sch-te + er-wisch-tem % er-wi-sch-tem + er-wisch-ten % er-wi-sch-ten + er-wisch-ter % er-wi-sch-ter + er-wisch-tes % er-wi-sch-tes + er-wisch-test % er-wi-sch-test + er-wisch-tet % er-wi-sch-tet + er-zitt-re % er-zit-tre + fa-ta-le-rer % fa-ta-ler-er + fest-nag-le % fest-na-gle + fest-zu-ma-chen % festz-u-ma-chen + fest-zu-ma-chend % festz-u-ma-chend + fest-zu-ma-chen-de % festz-u-ma-chen-de + fest-zu-ma-chen-dem % festz-u-ma-chen-dem + fest-zu-ma-chen-den % festz-u-ma-chen-den + fest-zu-ma-chen-der % festz-u-ma-chen-der + fest-zu-ma-chen-des % festz-u-ma-chen-des + flott-zu-ma-chen % flottz-u-ma-chen + flott-zu-ma-chend % flottz-u-ma-chend + flott-zu-ma-chen-de % flottz-u-ma-chen-de + flott-zu-ma-chen-dem % flottz-u-ma-chen-dem + flott-zu-ma-chen-den % flottz-u-ma-chen-den + flott-zu-ma-chen-der % flottz-u-ma-chen-der + flott-zu-ma-chen-des % flottz-u-ma-chen-des + ganz-wö-chig % gan-zwö-chig + ganz-wö-chi-ge % gan-zwö-chi-ge + ganz-wö-chi-gem % gan-zwö-chi-gem + ganz-wö-chi-gen % gan-zwö-chi-gen + ganz-wö-chi-ger % gan-zwö-chi-ger + ganz-wö-chi-ges % gan-zwö-chi-ges + glor-reich-ste % glor-reichs-te + glor-reich-stem % glor-reichs-tem + glor-reich-sten % glor-reichs-ten + glor-reich-ster % glor-reichs-ter + glor-reich-stes % glor-reichs-tes + gut-zu-ma-chen % gutz-u-ma-chen + gut-zu-ma-chend % gutz-u-ma-chend + gut-zu-ma-chen-de % gutz-u-ma-chen-de + gut-zu-ma-chen-dem % gutz-u-ma-chen-dem + gut-zu-ma-chen-den % gutz-u-ma-chen-den + gut-zu-ma-chen-der % gutz-u-ma-chen-der + gut-zu-ma-chen-des % gutz-u-ma-chen-des + halt-zu-ma-chen % haltz-u-ma-chen + Hard-rock % Har-d-rock + her-an-ging % he-r-an-ging + her-an-gin-ge % he-r-an-gin-ge + her-an-gin-gen % he-r-an-gin-gen + her-an-gingst % he-r-an-gingst + her-an-gingt % he-r-an-gingt + her-aus-gebt % her-aus-ge-bt + her-um-lung-re % her-um-lun-g-re + her-um-nörg-le % her-um-nör-gle + hoch-ge-reckt % hoch-ge-r-eckt + hoch-ge-reck-te % hoch-ge-r-eck-te + hoch-ge-reck-tem % hoch-ge-r-eck-tem + hoch-ge-reck-ten % hoch-ge-r-eck-ten + hoch-ge-reck-ter % hoch-ge-r-eck-ter + hoch-ge-reck-tes % hoch-ge-r-eck-tes + ho-mo-ero-tisch % ho-moe-ro-tisch + ho-mo-ero-ti-sche % ho-moe-ro-ti-sche + ho-mo-ero-ti-schem % ho-moe-ro-ti-schem + ho-mo-ero-ti-schen % ho-moe-ro-ti-schen + ho-mo-ero-ti-scher % ho-moe-ro-ti-scher + ho-mo-ero-ti-sches % ho-moe-ro-ti-sches + hy-per-ak-tiv % hy-pe-rak-tiv + hy-per-ak-ti-ve % hy-pe-rak-ti-ve + hy-per-ak-ti-vem % hy-pe-rak-ti-vem + hy-per-ak-ti-ven % hy-pe-rak-ti-ven + hy-per-ak-ti-ver % hy-pe-rak-ti-ver + hy-per-ak-ti-ves % hy-pe-rak-ti-ves + il-loy-ale % il-loya-le + il-loy-alem % il-loya-lem + il-loy-alen % il-loya-len + il-loy-aler % il-loya-ler + il-loy-ales % il-loya-les + In-kauf-nah-me % In-k-auf-nah-me + in-ter-agie-re % in-ter-a-gie-re + in-ter-agie-ren % in-ter-a-gie-ren + in-ter-agie-rend % in-ter-a-gie-rend + in-ter-agie-ren-de % in-ter-a-gie-ren-de + in-ter-agie-ren-dem % in-ter-a-gie-ren-dem + in-ter-agie-ren-den % in-ter-a-gie-ren-den + in-ter-agie-ren-der % in-ter-a-gie-ren-der + in-ter-agie-ren-des % in-ter-a-gie-ren-des + in-ter-agierst % in-ter-a-gierst + in-ter-agiert % in-ter-a-giert + in-ter-agier-te % in-ter-a-gier-te + in-ter-agier-tem % in-ter-a-gier-tem + in-ter-agier-ten % in-ter-a-gier-ten + in-ter-agier-ter % in-ter-a-gier-ter + in-ter-agier-tes % in-ter-a-gier-tes + in-ter-agier-test % in-ter-a-gier-test + in-ter-agier-tet % in-ter-a-gier-tet + in-ter-me-diä-re % in-ter-me-di-äre + in-ter-me-diä-rem % in-ter-me-di-ärem + in-ter-me-diä-ren % in-ter-me-di-ären + in-ter-me-diä-rer % in-ter-me-di-ärer + in-ter-me-diä-res % in-ter-me-di-äres + in-ter-viewst % in-ter-view-st + ir-gend-et-was % ir-gen-det-was + Kon-ka-te-na-ti-on % Kon-ka-te-n-a-ti-on + Kon-tra-bäs-se % Kon-tra-b-äs-se + Kon-tra-bäs-sen % Kon-tra-b-äs-sen + lang-an-hal-ten-de % lan-gan-hal-ten-de + lang-an-hal-ten-den % lan-gan-hal-ten-den + los-ge-saust % los-ges-aust + mit-jub-le % mit-ju-ble + mit-lief-re % mit-lie-fre + mit-zu-ma-chen % mitz-u-ma-chen + mit-zu-ma-chend % mitz-u-ma-chend + mit-zu-ma-chen-de % mitz-u-ma-chen-de + mit-zu-ma-chen-dem % mitz-u-ma-chen-dem + mit-zu-ma-chen-den % mitz-u-ma-chen-den + mit-zu-ma-chen-der % mitz-u-ma-chen-der + mit-zu-ma-chen-des % mitz-u-ma-chen-des + nach-eif-re % nach-ei-fre + nach-lief-re % nach-lie-fre + nach-rü-ste-te % nach-rüs-te-te + nach-rü-ste-ten % nach-rüs-te-ten + nach-rü-ste-test % nach-rüs-te-test + nach-rü-ste-tet % nach-rüs-te-tet + nie-der-knien % nie-der-kni-en + nie-der-saust % nie-ders-aust + nie-der-sau-ste % nie-ders-au-ste + nie-der-sau-sten % nie-ders-au-sten + nie-der-sau-stest % nie-ders-au-stest + nie-der-sau-stet % nie-ders-au-stet + preis-gebt % preis-ge-bt + schlu^^ff-folg-re % schlu^^ff-fol-g-re + sit-zen-ge-las-sen % sitz-en-ge-las-sen + sit-zen-ge-las-se-nen % sitz-en-ge-las-se-nen + sit-zen-ge-las-se-ner % sitz-en-ge-las-se-ner + sit-zen-ge-las-se-nes % sitz-en-ge-las-se-nes + über-a^^ffen % übera-^^ffen + über-a^^ffest % übera-^^ffest + über-blätt-re % über-blät-tre + über-flüg-le % über-flü-g-le + über-lag-re % über-la-g-re + über-lief-re % über-lie-fre + über-rump-le % über-rum-ple + über-win-te-re % über-w-in-te-re + über-wint-re % über-win-tre + um-blätt-re % um-blät-tre + um-ge-rü-ste-te % um-ge-rüs-te-te + um-ge-rü-ste-tem % um-ge-rüs-te-tem + um-ge-rü-ste-ten % um-ge-rüs-te-ten + um-ge-rü-ste-ter % um-ge-rüs-te-ter + um-ge-rü-ste-tes % um-ge-rüs-te-tes + um-kremp-le % um-krem-ple + um-lag-re % um-la-g-re + um-lernst % um-l-ernst + um-neb-le % um-ne-ble + um-rü-ste-te % um-rüs-te-te + um-rü-ste-ten % um-rüs-te-ten + um-rü-ste-test % um-rüs-te-test + um-rü-ste-tet % um-rüs-te-tet + um-schwär-mend % um-schwär-me-nd + um-schwär-men-de % um-schwär-me-n-de + um-schwär-men-dem % um-schwär-me-n-dem + um-schwär-men-den % um-schwär-me-n-den + um-schwär-men-der % um-schwär-me-n-der + um-schwär-men-des % um-schwär-me-n-des + um-seg-le % um-se-gle + um-zing-le % um-zin-gle + un-ak-zep-ta-ble-rer % un-ak-zep-ta-bler-er + un-at-trak-ti-ve-rem % unat-trak-ti-ver-em + un-at-trak-ti-ve-ren % unat-trak-ti-ver-en + un-at-trak-ti-ve-rer % unat-trak-ti-ver-er + un-at-trak-ti-ve-res % unat-trak-ti-ver-es + un-bru-ta-le-rer % un-bru-ta-ler-er + un-ed-le-rer % un-ed-ler-er + un-ent-halt-sam % un-en-t-halt-sam + un-ent-halt-sa-me % un-en-t-halt-sa-me + un-ent-halt-sa-mem % un-en-t-halt-sa-mem + un-ent-halt-sa-men % un-en-t-halt-sa-men + un-ent-halt-sa-mer % un-en-t-halt-sa-mer + un-ent-halt-sa-me-re % un-en-t-halt-sa-me-re + un-ent-halt-sa-me-rem % un-en-t-halt-sa-me-rem + un-ent-halt-sa-me-ren % un-en-t-halt-sa-me-ren + un-ent-halt-sa-me-rer % un-en-t-halt-sa-me-rer + un-ent-halt-sa-me-res % un-en-t-halt-sa-me-res + un-ent-halt-sa-mes % un-en-t-halt-sa-mes + Un-ent-halt-sam-keit % Un-en-t-halt-sam-keit + un-ent-halt-sam-ste % un-en-t-halt-sam-ste + un-ent-halt-sam-stem % un-en-t-halt-sam-stem + un-ent-halt-sam-sten % un-en-t-halt-sam-sten + un-ent-halt-sam-ster % un-en-t-halt-sam-ster + un-ent-halt-sam-stes % un-en-t-halt-sam-stes + un-fle-xi-ble-rer % un-fle-xibler-er + un-ge-naue-rem % un-ge-nau-e-rem + un-ge-naue-res % un-ge-nau-e-res + un-ge-nau-ste % un-ge-n-au-ste + un-ge-nau-stem % un-ge-n-au-stem + un-ge-nau-sten % un-ge-n-au-sten + un-ge-nau-ster % un-ge-n-au-ster + un-ge-nau-stes % un-ge-n-au-stes + un-kol-le-gia-le-rer % un-kol-le-gia-ler-er + un-kom-for-ta-ble-rer % un-kom-for-ta-bler-er + un-prak-ti-ka-ble-rer % un-prak-ti-ka-bler-er + un-pro-duk-ti-ve-rem % un-pro-duk-ti-ver-em + un-pro-duk-ti-ve-ren % un-pro-duk-ti-ver-en + un-pro-duk-ti-ve-rer % un-pro-duk-ti-ver-er + un-pro-duk-ti-ve-res % un-pro-duk-ti-ver-es + un-ra-tio-nel-le-rer % un-ra-tio-nel-ler-er + un-re-el-le-rer % un-re-el-ler-er + un-rein-ste % unr-ein-ste + un-rein-stem % unr-ein-stem + un-rein-sten % unr-ein-sten + un-rein-ster % unr-ein-ster + un-rein-stes % unr-ein-stes + un-ren-ta-ble-rer % un-ren-ta-bler-er + un-ska-liert % un-s-ka-liert + un-ska-lier-te % un-s-ka-lier-te + un-ska-lier-tem % un-s-ka-lier-tem + un-ska-lier-ten % un-s-ka-lier-ten + un-ska-lier-ter % un-s-ka-lier-ter + un-ska-lier-tes % un-s-ka-lier-tes + un-ter-heb-le % un-ter-he-ble + un-ter-zu-tau-chen % un-ter-zut-au-chen + un-treue-rem % un-treu-e-rem + un-treue-res % un-treu-e-res + ver-ank-re % ver-an-k-re + ver-ärg-re % ver-är-g-re + ver-arz-tend % ver-arzt-end + ver-arz-ten-de % ver-arzt-en-de + ver-arz-ten-dem % ver-arzt-en-dem + ver-arz-ten-den % ver-arzt-en-den + ver-arz-ten-der % ver-arzt-en-der + ver-arz-ten-des % ver-arzt-en-des + ver-biest-re % ver-bie-stre + ver-darb % verd-arb + ver-dar-ben % verd-ar-ben + ver-darbst % verd-arbst + ver-daust % verd-aust + ver-flicht % ver-f-licht + ver-flichtst % ver-f-lichtst + ver-gitt-re % ver-git-tre + ver-gött-re % ver-göt-tre + ver-hung-re % ver-hun-g-re + ver-jub-le % ver-ju-ble + ver-klun-gen % ver-k-lun-gen + ver-klun-ge-ne % ver-k-lun-ge-ne + ver-klun-ge-nem % ver-k-lun-ge-nem + ver-klun-ge-nen % ver-k-lun-ge-nen + ver-klun-ge-ner % ver-k-lun-ge-ner + ver-klun-ge-nes % ver-k-lun-ge-nes + ver-lag-re % ver-la-g-re + ver-lernst % ver-l-ernst + ver-lobst % ver-l-obst + ver-nag-le % ver-na-gle + ver-neb-le % ver-ne-ble + ver-plemp-re % ver-plem-p-re + ver-prüg-le % ver-prü-g-le + ver-saust % vers-aust + ver-schlam-pe % ver-sch-lam-pe + ver-schrien % ver-schri-en + ver-schrump-le % ver-schrum-ple + ver-sieg-le % ver-sie-gle + ver-te-le-fo-nier % ver-te-le-fo-ni-er + ver-weig-re % ver-wei-g-re + ver-zög-re % ver-zö-g-re + vor-bei-flim-mernd % vor-beif-lim-mernd + vor-bei-flim-mern-de % vor-beif-lim-mern-de + vor-bei-flim-mern-dem % vor-beif-lim-mern-dem + vor-bei-flim-mern-den % vor-beif-lim-mern-den + vor-bei-flim-mern-der % vor-beif-lim-mern-der + vor-bei-flim-mern-des % vor-beif-lim-mern-des + vor-spieg-le % vor-spie-gle + vor-wär-mend % vor-wär-me-nd + vor-wär-men-de % vor-wär-me-n-de + vor-wär-men-dem % vor-wär-me-n-dem + vor-wär-men-den % vor-wär-me-n-den + vor-wär-men-der % vor-wär-me-n-der + vor-wär-men-des % vor-wär-me-n-des + weg-sch-lich % weg-sch-lich + weg-sch-li-chen % weg-sch-li-chen + weg-sch-li-chest % weg-sch-li-chest + weg-sch-lichst % weg-sch-lichst + weg-sch-licht % weg-sch-licht + weg-sein % weg-s-ein + weg-ster-be % weg-st-er-be + weg-sterbt % weg-st-erbt + wei-ter-blätt-re % wei-ter-blät-tre + wert-vol-le-rer % wert-vol-ler-er + wett-eif-re % wett-ei-fre + wett-rü-ste-te % wett-rüs-te-te + wett-rü-ste-ten % wett-rüs-te-ten + wett-rü-ste-test % wett-rüs-te-test + wett-rü-ste-tet % wett-rüs-te-tet + wi-der-spieg-le % wi-der-spie-gle + wun-der-vol-le-rer % wun-der-vol-ler-er + wund-rei-ben % wun-drei-ben + zer-flatt-re % zer-flat-tre + zer-knitt-re % zer-knit-tre + zer-mart-re % zer-mar-tre + zer-splitt-re % zer-split-tre + zer-stacht % zer-st-acht + zer-tramp-le % zer-tram-ple + zu-ge-rü-ste-te % zu-ge-rüs-te-te + zu-ge-rü-ste-tem % zu-ge-rüs-te-tem + zu-ge-rü-ste-ten % zu-ge-rüs-te-ten + zu-ge-rü-ste-ter % zu-ge-rüs-te-ter + zu-ge-rü-ste-tes % zu-ge-rüs-te-tes + zu-jub-le % zu-ju-ble + zu-rück-blätt-re % zu-rück-blät-tre + zu-rück-blieb % zu-rück-b-lieb + zu-rück-blie-be % zu-rück-b-lie-be + zu-rück-blie-ben % zu-rück-b-lie-ben + zu-rück-bliebst % zu-rück-b-liebst + zu-rück-bliebt % zu-rück-b-liebt + zu-rück-reg-le % zu-rück-re-gle + zu-rü-ste-te % zu-rüs-te-te + zu-rü-ste-ten % zu-rüs-te-ten + zu-rü-ste-test % zu-rüs-te-test + zu-rü-ste-tet % zu-rüs-te-tet + zu-sam-men-baust % zu-sam-men-bau-st + zu-zwink-re % zu-zwin-k-re +% +% +% falsche Trennungen ausgewählter Komposita +% + Eber-esche % Ebe-re-sche + Erz-diö-ze-se % Erz-di-öze-se + Fi-nanz-äm-ter % Fi-nan-zäm-ter + Fi-nanz-äm-tern % Fi-nan-zäm-tern + Frisch-obst % Fri-sch-obst + fuchs-teu-fels-wild % fuch-steu-fels-wild + fuchs-teu-fels-wil-de % fuch-steu-fels-wil-de + fuchs-teu-fels-wil-dem % fuch-steu-fels-wil-dem + fuchs-teu-fels-wil-den % fuch-steu-fels-wil-den + fuchs-teu-fels-wil-der % fuch-steu-fels-wil-der + fuchs-teu-fels-wil-des % fuch-steu-fels-wil-des + fünf-ak-tig % fün-fak-tig + fünf-ak-ti-ge % fün-fak-ti-ge + fünf-ak-ti-gem % fün-fak-ti-gem + fünf-ak-ti-gen % fün-fak-ti-gen + fünf-ak-ti-ger % fün-fak-ti-ger + fünf-ak-ti-ges % fün-fak-ti-ges + Gas-öfen % Gasö-fen + Grund-ein-heit % Gr-und-ein-heit + Grund-ein-hei-ten % Gr-und-ein-hei-ten + Heiz-öls % Hei-zöls + Hof-rat % Ho-frat + kampf-er-fah-ren % kamp-fer-fah-ren + kampf-er-fah-re-ne % kamp-fer-fah-re-ne + kampf-er-fah-re-nem % kamp-fer-fah-re-nem + kampf-er-fah-re-nen % kamp-fer-fah-re-nen + kampf-er-fah-re-ner % kamp-fer-fah-re-ner + kampf-er-fah-re-nes % kamp-fer-fah-re-nes + Kampf-er-fah-rung % Kamp-fer-fah-rung + Kampf-er-fah-run-gen % Kamp-fer-fah-run-gen + kampf-er-probt % kamp-fer-probt + kampf-er-prob-te % kamp-fer-prob-te + kampf-er-prob-tem % kamp-fer-prob-tem + kampf-er-prob-ten % kamp-fer-prob-ten + kampf-er-prob-ter % kamp-fer-prob-ter + kampf-er-prob-tes % kamp-fer-prob-tes + Mu-sik-no-ten % Mu-si-kno-ten + Post-äm-ter % Po-stäm-ter + Pro-zent-zahl % Pro-z-ent-zahl + So-wjet-uni-on % So-wje-tu-ni-on + Tat-or-te % Ta-tor-te + Tat-or-ten % Ta-tor-ten + Tat-or-tes % Ta-tor-tes + Tat-orts % Ta-torts +% +% +% fehlende Trennstellen einfacher Wörter +% + Aa-le % Aale + Aa-len % Aalen + Ab-itu-re % Ab-iture + ab-strak-te-re % ab-strak-tere + ab-strak-te-rem % ab-strak-terem + ab-strak-te-ren % ab-strak-teren + ab-strak-te-rer % ab-strak-terer + ab-strak-te-res % ab-strak-teres + Ad-re-na-lin % Ad-rena-lin + Ad-re-na-lins % Ad-rena-lins + Ak-tio-nä-re % Ak-tio-näre + Ak-tio-nä-ren % Ak-tio-nären + Ak-tu-ars % Ak-tuars + Al-ma-na-che % Al-ma-nache + Am-ne-stie % Amne-stie + Am-ne-sti-en % Amne-sti-en + am-ne-stie-re % amne-stie-re + am-ne-stie-ren % amne-stie-ren + am-ne-stie-rend % amne-stie-rend + am-ne-stie-ren-de % amne-stie-ren-de + am-ne-stie-ren-dem % amne-stie-ren-dem + am-ne-stie-ren-den % amne-stie-ren-den + am-ne-stie-ren-der % amne-stie-ren-der + am-ne-stie-ren-des % amne-stie-ren-des + am-ne-stierst % amne-stierst + am-ne-stiert % amne-stiert + am-ne-stier-te % amne-stier-te + am-ne-stier-tem % amne-stier-tem + am-ne-stier-ten % amne-stier-ten + am-ne-stier-ter % amne-stier-ter + am-ne-stier-tes % amne-stier-tes + am-ne-stier-test % amne-stier-test + am-ne-stier-tet % amne-stier-tet + Am-ne-stie-rung % Amne-stie-rung + amü-sant % amüsant + amü-san-te % amüsan-te + amü-san-tem % amüsan-tem + amü-san-ten % amüsan-ten + amü-san-ter % amüsan-ter + amü-san-tes % amüsan-tes + An-da-lu-si-er % An-da-lu-sier + An-da-lu-si-ers % An-da-lu-siers + än-de-re % än-dere + and-rem % andrem + and-res % andres + An-häng-seln % An-hängseln + An-häng-sels % An-hängsels + Ar-me-ni-er % Ar-me-nier + Ar-me-ni-ers % Ar-me-niers + As-pekt % Aspekt + As-pek-te % Aspek-te + As-pek-ten % Aspek-ten + As-pek-tes % Aspek-tes + As-pekts % Aspekts + As-pik % Aspik + As-pi-rant % Aspi-rant + As-pi-ran-ten % Aspi-ran-ten + As-pi-ra-ti-on % Aspi-ra-ti-on + As-pi-ra-tio-nen % Aspi-ra-tio-nen + aus-zu-ar-ten % aus-zuar-ten + au-to-ri-tä-re % au-to-ri-täre + Axi-oms % Axioms + Bas-sins % Bassins + Bay-er % Bayer + be-dach-te-ren % be-dach-teren + Bi-blio-gra-phi-en % Bi-blio-gra-phien + Bie-re % Biere + bi-nä-re % bi-näre + bi-nä-rem % bi-närem + bi-nä-ren % bi-nären + bi-nä-rer % bi-närer + bi-nä-res % bi-näres + Bio-gra-phi-en % Bio-gra-phien + blö-dem % blödem + blo-^^ffem % blo^^ffem + Bö-en % Böen + brü-stest % brüstest + büff-le % büffle + bü-ge-le % bü-gele + Bul-le-tin % Bulle-tin + Cha-ot % Chaot + Cha-rak-te-re % Cha-rak-tere + Cha-rak-te-ren % Cha-rak-teren + Che-fin % Chefin + Chi-nas % Chinas + Clo-chard % Clochard + Clo-chards % Clochards + Da-che % Dache + Da-ches % Daches + Da-chung % Dachung + de-fi-zi-tä-re % de-fi-zi-täre + de-fla-tio-nä-re % de-fla-tio-näre + de-fla-tio-nä-rem % de-fla-tio-närem + de-fla-tio-nä-ren % de-fla-tio-nären + de-fla-tio-nä-rer % de-fla-tio-närer + de-fla-tio-nä-res % de-fla-tio-näres + Desk-top % Desktop + Desk-tops % Desktops + Des-pot % Despot + Des-po-ten % Despo-ten + dich-te-ren % dich-teren + Dien-sten % Diensten + Dien-stes % Dienstes + dien-te % diente + dien-ten % dienten + dien-test % dientest + dien-tet % dientet + doo-fe % doofe + doo-fem % doofem + doo-fen % doofen + doo-fer % doofer + doo-fe-re % doofe-re + doo-fe-rem % doofe-rem + doo-fe-ren % doofe-ren + doo-fe-rer % doofe-rer + doo-fe-res % doofe-res + doo-fes % doofes + Dou-bles % Doubles + Dou-blet-te % Doublet-te + Dra-gée % Dragée + Dra-gées % Dragées + dunk-le % dunkle + dunk-lem % dunklem + dunk-len % dunklen + dunk-les % dunkles + düst-re % düstre + ech-te-ren % ech-teren + ega-li-tä-re % ega-li-täre + ei-lends % eilends + ei-nen % einen + ei-nend % einend + ei-nen-de % einen-de + ei-nen-dem % einen-dem + ei-nen-den % einen-den + ei-nen-der % einen-der + ei-nen-des % einen-des + eit-re % eitre + ek-le % ekle + Ek-lip-sen % Eklip-sen + eli-tä-re % eli-täre + en-do-therm % endo-therm + en-do-ther-me % endo-ther-me + en-do-ther-mem % endo-ther-mem + en-do-ther-men % endo-ther-men + en-do-ther-mer % endo-ther-mer + en-do-ther-mes % endo-ther-mes + ent-re % entre + En-tre-pre-neur % Entre-pre-neur + En-tre-pre-neu-ren % Entre-pre-neu-ren + En-tre-pre-neurs % Entre-pre-neurs + En-tro-pie % Entro-pie + En-zi-ans % En-zians + Eu-tha-na-sie % Eutha-na-sie + evo-lu-tio-nä-re % evo-lu-tio-näre + evo-lu-tio-nä-rem % evo-lu-tio-närem + evo-lu-tio-nä-ren % evo-lu-tio-nären + evo-lu-tio-nä-rer % evo-lu-tio-närer + evo-lu-tio-nä-res % evo-lu-tio-näres + ex-ak-te-re % ex-ak-tere + fa-de-re % fa-dere + fa-de-rem % fa-derem + fa-de-ren % fa-deren + fa-de-rer % fa-derer + fa-de-res % fa-deres + fa-de-ste % fa-deste + fa-de-stem % fa-destem + fa-de-sten % fa-desten + fa-de-ster % fa-dester + fa-de-stes % fa-destes + fai-re % faire + fal-sche % falsche + fal-schem % falschem + fal-schen % falschen + fal-scher % falscher + fal-sche-re % falsche-re + fal-sche-rem % falsche-rem + fal-sche-ren % falsche-ren + fal-sche-rer % falsche-rer + fal-sche-res % falsche-res + fal-sches % falsches + fal-sche-ste % falsche-ste + fal-sche-stem % falsche-stem + fal-sche-sten % falsche-sten + fal-sche-ster % falsche-ster + fal-sche-stes % falsche-stes + Fan-ta-si-en % Fan-tasi-en + Fe-bru-ars % Fe-bruars + feuch-te-ren % feuch-teren + Fi-as-ko % Fias-ko + Fi-as-kos % Fias-kos + fieb-re % fiebre + fle-xi-blem % fle-xiblem + fle-xi-blen % fle-xiblen + fle-xi-bler % fle-xibler + fle-xi-ble-re % fle-xible-re + fle-xi-ble-rem % fle-xible-rem + fle-xi-ble-ren % fle-xible-ren + fle-xi-ble-res % fle-xible-res + fle-xi-bles % fle-xibles + flie-^^ffest % flie^^ffest + Flo-ri-ans % Flo-rians + Flu-ge % Fluge + Flu-or % Fluor + flüst-re % flüstre + frak-ta-le % frak-tale + frak-ta-lem % frak-talem + frak-ta-len % frak-talen + frak-ta-ler % frak-taler + frak-ta-les % frak-tales + Frö-sche % Frösche + Frö-schen % Fröschen + Ful-das % Fuldas + funk-le % funkle + Funk-tio-nä-re % Funk-tio-näre + Funk-tio-nä-ren % Funk-tio-nären + furch-te % furchte + furch-ten % furchten + fu-^^ffend % fu^^ffend + fu-^^ffen-dem % fu^^ffen-dem + fu-^^ffen-der % fu^^ffen-der + fütt-re % füttre + gab-le % gable + Gab-ler % Gabler + Gab-lern % Gablern + Gab-lers % Gablers + Gal-li-er % Gal-lier + Gal-li-ers % Gal-liers + Gau-chos % Gauchos + gauk-le % gaukle + ge-an-gelt % gean-gelt + ge-an-gel-te % gean-gel-te + ge-an-gel-tem % gean-gel-tem + ge-an-gel-ten % gean-gel-ten + ge-an-gel-ter % gean-gel-ter + ge-an-gel-tes % gean-gel-tes + ge-an-kert % gean-kert + ge-an-ker-te % gean-ker-te + ge-an-ker-tem % gean-ker-tem + ge-an-ker-ten % gean-ker-ten + ge-an-ker-ter % gean-ker-ter + ge-an-ker-tes % gean-ker-tes + ge-ant-wor-tet % geant-wor-tet + ge-char-tert % gechar-tert + ge-char-ter-te % gechar-ter-te + ge-char-ter-tem % gechar-ter-tem + ge-char-ter-ten % gechar-ter-ten + ge-char-ter-ter % gechar-ter-ter + ge-char-ter-tes % gechar-ter-tes + Ge-fä-^^ffe % Ge-fä^^ffe + Ge-fä-^^ffen % Ge-fä^^ffen + Ge-fä-^^ffes % Ge-fä^^ffes + ge-fau-lenzt % gefau-lenzt + ge-fault % gefault + ge-faul-te % gefaul-te + ge-faul-tem % gefaul-tem + ge-faul-ten % gefaul-ten + ge-faul-ter % gefaul-ter + ge-faul-tes % gefaul-tes + gefoppt % gefoppt + ge-fopp-te % gefopp-te + ge-fopp-tem % gefopp-tem + ge-fopp-ten % gefopp-ten + ge-fopp-ter % gefopp-ter + ge-fopp-tes % gefopp-tes + ge-hüllt % gehüllt + ge-hüll-te % gehüll-te + ge-hüll-tem % gehüll-tem + ge-hüll-ten % gehüll-ten + ge-hüll-ter % gehüll-ter + ge-hüll-tes % gehüll-tes + ge-hüpft % gehüpft + ge-klickt % geklickt + Ge-kni-ster % Ge-knister + Ge-kni-sters % Ge-knisters + ge-kni-stert % ge-knistert + ge-linkt % gelinkt + ge-link-te % gelink-te + ge-link-tem % gelink-tem + ge-link-ten % gelink-ten + ge-link-ter % gelink-ter + ge-link-tes % gelink-tes + ge-lü-stest % ge-lüstest + ge-mä-^^ffem % ge-mä^^ffem + ge-misch-te-ren % ge-misch-teren + ge-na-sest % ge-nasest + ge-na-set % ge-naset + Gen-dar-men % Gen-darmen + Ge-ne-rä-le % Ge-nerä-le + Ge-ne-rä-len % Ge-nerä-len + ge-nie-^^ffest % ge-nie^^ffest + ge-nö^^fft % genö^^fft + Ge-nüs-se % Genüs-se + Ge-nüs-sen % Genüs-sen + ge-ohr-feigt % geohr-feigt + ge-ohr-feig-te % geohr-feig-te + ge-ohr-feig-tem % geohr-feig-tem + ge-ohr-feig-ten % geohr-feig-ten + ge-ohr-feig-ter % geohr-feig-ter + ge-ohr-feig-tes % geohr-feig-tes + Ge-räu-sche % Ge-räusche + Ge-räu-schen % Ge-räuschen + Ge-räu-sches % Ge-räusches + ge-rech-te-ren % ge-rech-teren + ge-rö-chelt % ge-röchelt + ge-rö-chel-te % ge-röchel-te + ge-rö-chel-tem % ge-röchel-tem + ge-rö-chel-ten % ge-röchel-ten + ge-rö-chel-ter % ge-röchel-ter + ge-rö-chel-tes % ge-röchel-tes + ge-rö-stet % ge-röstet + ge-rö-ste-te % ge-röste-te + ge-rö-ste-tem % ge-röste-tem + ge-rö-ste-ten % ge-röste-ten + ge-rö-ste-ter % ge-röste-ter + ge-rö-ste-tes % ge-röste-tes + ge-rö-tet % ge-rötet + ge-rö-te-te % ge-röte-te + ge-rö-te-tem % ge-röte-tem + ge-rö-te-ten % ge-röte-ten + ge-rö-te-ter % ge-röte-ter + ge-rö-te-tes % ge-röte-tes + Ge-rü-stes % Ge-rüstes + ge-saust % gesaust + ge-sau-ste % gesau-ste + ge-sau-stem % gesau-stem + ge-sau-sten % gesau-sten + ge-sau-ster % gesau-ster + ge-sau-stes % gesau-stes + ge-schef-felt % geschef-felt + ge-schef-fel-te % geschef-fel-te + ge-schef-fel-tem % geschef-fel-tem + ge-schef-fel-ten % geschef-fel-ten + ge-schef-fel-ter % geschef-fel-ter + ge-schef-fel-tes % geschef-fel-tes + ge-schick-te-re % ge-schick-tere + ge-schick-te-rem % ge-schick-terem + ge-schick-te-ren % ge-schick-teren + ge-schick-te-rer % ge-schick-terer + ge-schick-te-res % ge-schick-teres + ge-staf-felt % gestaf-felt + ge-staf-fel-te % gestaf-fel-te + ge-staf-fel-tem % gestaf-fel-tem + ge-staf-fel-ten % gestaf-fel-ten + ge-staf-fel-ter % gestaf-fel-ter + ge-staf-fel-tes % gestaf-fel-tes + ge-such-te-ren % ge-such-teren + ge-ulkt % geulkt + ge-ulk-te % geulk-te + ge-ulk-tem % geulk-tem + ge-ulk-ten % geulk-ten + ge-ulk-ter % geulk-ter + ge-ulk-tes % geulk-tes + ge-woll-te-re % ge-woll-tere + ge-woll-te-rem % ge-woll-terem + ge-woll-te-ren % ge-woll-teren + ge-woll-te-rer % ge-woll-terer + ge-woll-te-res % ge-woll-teres + ge-woll-te-ste % ge-woll-teste + ge-woll-te-stem % ge-woll-testem + ge-woll-te-sten % ge-woll-testen + ge-woll-te-ster % ge-woll-tester + ge-woll-te-stes % ge-woll-testes + ge-wünsch-te-ren % ge-wünsch-teren + gie-^^ffest % gie^^ffest + gipf-le % gipfle + Glan-ze % Glanze + Go-yas % Goyas + Grie-^^ffes % Grie^^ffes + Gro-bi-ans % Gro-bians + gro-^^ffe % gro^^ffe + gro-^^ffem % gro^^ffem + gro-^^ffen % gro^^ffen + gro-^^ffer % gro^^ffer + gro-^^ffes % gro^^ffes + grü-be-le % grü-bele + Grü-be-lei % Grü-belei + Grü-be-lei-en % Grü-belei-en + häk-le % häkle + Häl-se % Hälse + Häl-sen % Hälsen + han-ge % hange + hätsch-le % hätschle + hau-te % haute + hau-ten % hauten + hau-test % hautest + hau-tet % hautet + hech-le % hechle + heid-ni-sche % heid-nische + heid-ni-schem % heid-nischem + heid-ni-schen % heid-nischen + heid-ni-scher % heid-nischer + heid-ni-sches % heid-nisches + hei-^^ffem % hei^^ffem + Hekt-ar % Hektar + Hekt-ars % Hektars + He-ras % Heras + hier-an % hieran + hier-aus % hieraus + hie-^^ffest % hie^^ffest + hind-re % hindre + Hin-du-is-mus % Hin-duis-mus + hint-an % hintan + Hir-sche % Hirsche + Hir-schen % Hirschen + Hir-sches % Hirsches + hoh-le-re % hohle-re + hoh-le-ren % hohle-ren + Ho-lo-gra-phi-en % Ho-lo-gra-phien + Ho-stes-sen % Hostes-sen + hu-ma-ni-tä-re % hu-ma-ni-täre + Ide-als % Ideals + ide-al-ste % ideal-ste + ide-al-stem % ideal-stem + ide-al-sten % ideal-sten + ide-al-ster % ideal-ster + ide-al-stes % ideal-stes + Idi-ots % Idiots + ima-gi-nä-re % ima-gi-näre + ima-gi-nä-rem % ima-gi-närem + ima-gi-nä-ren % ima-gi-nären + ima-gi-nä-rer % ima-gi-närer + ima-gi-nä-res % ima-gi-näres + Im-pre-sa-rio % Im-presa-rio + Im-pre-sa-ri-os % Im-presa-ri-os + in-fla-tio-nä-re % in-fla-tio-näre + in-fla-tio-nä-rem % in-fla-tio-närem + in-fla-tio-nä-ren % in-fla-tio-nären + in-fla-tio-nä-rer % in-fla-tio-närer + In-fla-tio-nä-res % In-fla-tio-näres + in-ji-zie-re % inji-zie-re + in-ji-zie-ren % inji-zie-ren + in-ji-zie-rend % inji-zie-rend + in-ji-zie-ren-de % inji-zie-ren-de + in-ji-zie-ren-dem % inji-zie-ren-dem + in-ji-zie-ren-den % inji-zie-ren-den + in-ji-zie-ren-der % inji-zie-ren-der + in-ji-zie-ren-des % inji-zie-ren-des + in-ji-zierst % inji-zierst + in-ji-ziert % inji-ziert + in-ji-zier-te % inji-zier-te + in-ji-zier-tem % inji-zier-tem + in-ji-zier-ten % inji-zier-ten + in-ji-zier-ter % inji-zier-ter + in-ji-zier-tes % inji-zier-tes + in-ji-zier-test % inji-zier-test + in-ji-zier-tet % inji-zier-tet + in-tak-te-re % in-tak-tere + in-tak-te-rem % in-tak-terem + in-tak-te-ren % in-tak-teren + in-tak-te-rer % in-tak-terer + in-tak-te-res % in-tak-teres + Ja-gu-ars % Ja-guars + Jah-we % Jahwe + Jah-wes % Jahwes + Je-su-it % Je-suit + jon-glie-re % jonglie-re + jon-glie-ren % jonglie-ren + jon-glie-rend % jonglie-rend + jon-glie-ren-de % jonglie-ren-de + jon-glie-ren-dem % jonglie-ren-dem + jon-glie-ren-den % jonglie-ren-den + jon-glie-ren-der % jonglie-ren-der + jon-glie-ren-des % jonglie-ren-des + jon-glierst % jonglierst + jon-gliert % jongliert + jon-glier-te % jonglier-te + jon-glier-ten % jonglier-ten + jon-glier-test % jonglier-test + jon-glier-tet % jonglier-tet + Ju-ni-ors % Ju-niors + Ju-ris-pru-denz % Ju-rispru-denz + Ju-sti-ti-ars % Ju-sti-tiars + Ka-li-for-ni-er % Ka-li-for-nier + Kal-li-gra-phi-en % Kal-li-gra-phien + kä-me % käme + kä-men % kämen + Ka-nä-le % Kanä-le + Ka-nä-len % Kanä-len + Ka-plan % Kaplan + Kar-di-nä-le % Kar-dinäle + Kar-di-nä-len % Kar-dinälen + kasp-re % kaspre + Ka-vi-ars % Ka-viars + ka-vi-tös % ka-vitös + ka-vi-tö-se % ka-vitö-se + ka-vi-tö-sem % ka-vitö-sem + ka-vi-tö-sen % ka-vitö-sen + ka-vi-tö-ser % ka-vitö-ser + ka-vi-tö-ses % ka-vitö-ses + Ketch-ups % Ketchups + klett-re % klettre + knap-pe-rem % knap-perem + Knä-ste % Knäste + Knä-sten % Knästen + knosp-ten % knospten + Koa-la % Koala + Kof-fe-ins % Koffe-ins + Ko-ka-in % Ko-kain + Ko-lum-bi-ens % Ko-lum-biens + Kom-in-tern % Komin-tern + Kom-mis-sio-nä-re % Kom-mis-sio-näre + Kom-mis-sio-nä-ren % Kom-mis-sio-nären + kom-pak-te-re % kom-pak-tere + kom-pak-te-rem % kom-pak-terem + kom-pak-te-ren % kom-pak-teren + kom-pak-te-rer % kom-pak-terer + kom-pak-te-res % kom-pak-teres + kom-pe-ten-te % kom-pe-tente + kom-pe-ten-tem % kom-pe-tentem + kom-pe-ten-ten % kom-pe-tenten + kom-pe-ten-ter % kom-pe-tenter + kom-pe-ten-te-re % kom-pe-tente-re + kom-pe-ten-te-rem % kom-pe-tente-rem + kom-pe-ten-te-ren % kom-pe-tente-ren + kom-pe-ten-te-rer % kom-pe-tente-rer + kom-pe-ten-te-res % kom-pe-tente-res + kom-pe-ten-tes % kom-pe-tentes + kom-pe-ten-te-ste % kom-pe-tente-ste + kom-pe-ten-te-stem % kom-pe-tente-stem + kom-pe-ten-te-sten % kom-pe-tente-sten + kom-pe-ten-te-ster % kom-pe-tente-ster + kom-pe-ten-te-stes % kom-pe-tente-stes + Kom-po-ste % Kom-poste + Kom-po-sten % Kom-posten + Kom-po-stes % Kom-postes + Kon-cho-ide % Kon-choide + Kon-cho-iden % Kon-choiden + Kon-fek-tio-nä-re % Kon-fek-tio-näre + Kon-fek-tio-nä-ren % Kon-fek-tio-nären + kon-flu-en-te % kon-flu-ente + kon-flu-en-tem % kon-flu-entem + kon-flu-en-ten % kon-flu-enten + kon-flu-en-ter % kon-flu-enter + kon-flu-en-tes % kon-flu-entes + Kon-tra-ste % Kon-traste + Kon-tra-sten % Kon-trasten + Kon-tra-stes % Kon-trastes + kon-tra-stier % kon-trastier + kon-tra-stie-re % kon-trastie-re + kon-tra-stie-ren % kon-trastie-ren + kon-tra-stie-rend % kon-trastie-rend + kon-tra-stie-ren-de % kon-trastie-ren-de + kon-tra-stie-ren-dem % kon-trastie-ren-dem + kon-tra-stie-ren-den % kon-trastie-ren-den + kon-tra-stie-ren-der % kon-trastie-ren-der + kon-tra-stie-ren-des % kon-trastie-ren-des + kon-tra-stierst % kon-trastierst + kon-tra-stiert % kon-trastiert + kon-tra-stier-te % kon-trastier-te + kon-tra-stier-ten % kon-trastier-ten + kon-tra-stier-test % kon-trastier-test + kon-tra-stier-tet % kon-trastier-tet + Kop-fe % Kopfe + kor-rek-te-re % kor-rek-tere + kor-rek-te-rem % kor-rek-terem + kor-rek-te-ren % kor-rek-teren + kor-rek-te-rer % kor-rek-terer + kor-rek-te-res % kor-rek-teres + kra-kee-lend % kra-keelend + kra-kee-len-de % kra-keelen-de + kra-kee-len-dem % kra-keelen-dem + kra-kee-len-den % kra-keelen-den + kra-kee-len-der % kra-keelen-der + kra-kee-len-des % kra-keelen-des + kri-tik-lo-se % kri-tiklo-se + kri-tik-lo-sem % kri-tiklo-sem + kri-tik-lo-sen % kri-tiklo-sen + kri-tik-lo-ser % kri-tiklo-ser + kri-tik-lo-ses % kri-tiklo-ses + kür-ze-ste % kür-zeste + kür-ze-stem % kür-zestem + kür-ze-sten % kür-zesten + kür-ze-ster % kür-zester + kür-ze-stes % kür-zestes + kusch-le % kuschle + läch-le % lächle + La-mé % Lamé + La-més % Lamés + La-sa-gne % Lasa-gne + La-sa-gnen % Lasa-gnen + läst-re % lästre + Leg-as-the-nie % Leg-asthe-nie + Leg-as-the-ni-ker % Leg-asthe-ni-ker + Leg-as-the-ni-ke-rin % Leg-asthe-ni-ke-rin + Leg-as-the-ni-ke-rin-nen % Leg-asthe-ni-ke-rin-nen + Leg-as-the-ni-kern % Leg-asthe-ni-kern + Leg-as-the-ni-kers % Leg-asthe-ni-kers + le-gen-dä-re % le-gen-däre + le-gen-dä-rem % le-gen-därem + le-gen-dä-ren % le-gen-dären + le-gen-dä-rer % le-gen-därer + le-gen-dä-res % le-gen-däres + Le-gio-nä-re % Le-gio-näre + Le-gio-nä-ren % Le-gio-nären + leich-te-ren % leich-teren + lie-^^ffest % lie^^ffest + lind-re % lindre + Li-ne-als % Li-neals + lisp-le % lisple + Li-tho-gra-phi-en % Li-tho-gra-phien + löff-le % löffle + Ly-ze-ums % Ly-zeums + Ma-gen-ta % Magen-ta + Ma-gi-er % Ma-gier + Ma-gi-ers % Ma-giers + Mam-mo-gra-phi-en % Mam-mo-gra-phien + Mar-ti-nas % Mar-tinas + Mar-xi-sten % Marxi-sten + Ma-xi-mi-li-ans % Ma-xi-mi-lians + Me-ga-li-then % Me-ga-lithen + meist-re % meistre + Men-thol % Menthol + Men-thols % Menthols + Me-nüs % Menüs + Mi-cha-els % Mi-chaels + mi-li-zio-nä-re % mi-li-zio-näre + Mi-li-zio-nä-ren % Mi-li-zio-nären + Mil-li-ar-dä-re % Mil-li-ar-däre + Mil-li-ar-dä-ren % Mil-li-ar-dären + Mil-li-ar-dä-rin % Mil-li-ar-därin + Mil-li-ar-dä-rin-nen % Mil-li-ar-därin-nen + Mil-lio-nä-re % Mil-lio-näre + Mil-lio-nä-ren % Mil-lio-nären + mind-re % mindre + Mi-ri-am % Mi-riam + Mi-ri-ams % Mi-riams + mi^^ff-trau-isch-ste % mi^^ff-trauisch-ste + mi^^ff-trau-isch-stem % mi^^ff-trauisch-stem + mi^^ff-trau-isch-sten % mi^^ff-trauisch-sten + mi^^ff-trau-isch-ster % mi^^ff-trauisch-ster + mi^^ff-trau-isch-stes % mi^^ff-trauisch-stes + Mit-ta-ge % Mit-tage + Mit-ta-gen % Mit-tagen + Moi-ré % Moiré + Mo-no-gra-phi-en % Mo-no-gra-phien + mul-ti-pler % mul-tipler + munk-le % munkle + must-re % mustre + Ne-gli-gé % Ne-gligé + Ne-gli-gés % Ne-gligés + Obo-en % Oboen + omi-nö-se % omi-nöse + omi-nö-sem % omi-nösem + omi-nö-sen % omi-nösen + omi-nö-ser % omi-nöser + omi-nö-ses % omi-nöses + opf-re % opfre + or-di-nä-re % or-di-näre + or-di-nä-rem % or-di-närem + or-di-nä-ren % or-di-nären + or-di-nä-rer % or-di-närer + or-di-nä-re-re % or-di-näre-re + or-di-nä-re-rem % or-di-näre-rem + or-di-nä-re-ren % or-di-näre-ren + or-di-nä-re-rer % or-di-näre-rer + or-di-nä-re-res % or-di-näre-res + or-di-nä-res % or-di-näres + ori-gi-nä-re % ori-gi-näre + ori-gi-nä-rem % ori-gi-närem + ori-gi-nä-ren % ori-gi-nären + ori-gi-nä-rer % ori-gi-närer + ori-gi-nä-res % ori-gi-näres + Or-tho-gra-phi-en % Or-tho-gra-phien + Oze-an % Ozean + Oze-ans % Ozeans + Pap-stes % Papstes + pa-ra-si-tä-re % pa-ra-si-täre + pas-sa-blem % pas-sablem + pas-sa-blen % pas-sablen + pas-sa-bler % pas-sabler + pas-sa-bles % pas-sables + Pa-vi-ans % Pa-vians + Pen-sio-nä-re % Pen-sio-näre + Pen-sio-nä-ren % Pen-sio-nären + per-fek-te-re % per-fek-tere + per-fek-te-rem % per-fek-terem + per-fek-te-ren % per-fek-teren + per-fek-te-rer % per-fek-terer + per-fek-te-res % per-fek-teres + pfeff-re % pfeffre + Phan-ta-si-en % Phan-tasi-en + Phi-lo-so-phi-en % Phi-lo-so-phien + Pho-to-gra-phi-en % Pho-to-gra-phien + Pin-gu-in % Pin-guin + plum-pe-rem % plum-perem + Po-et % Poet + Por-no-gra-phi-en % Por-no-gra-phien + Prä-va-lenz % Präva-lenz + pri-mä-re % pri-märe + pri-mä-rem % pri-märem + pri-mä-ren % pri-mären + pri-mä-rer % pri-märer + pri-mä-res % pri-märes + pu-bli-kes % pu-blikes + puff-re % puffre + pulv-re % pulvre + quä-lend-ste % quälend-ste + quä-lend-stem % quälend-stem + quä-lend-sten % quälend-sten + quä-lend-ster % quälend-ster + quä-lend-stes % quälend-stes + Ra-fa-el % Rafa-el + Ra-fa-els % Rafaels + Ra-pha-els % Ra-phaels + Rau-me % Raume + Räu-sche % Räusche + räusp-re % räuspre + re-vo-lu-tio-nä-re % re-vo-lu-tio-näre + re-vo-lu-tio-nä-rem % re-vo-lu-tio-närem + re-vo-lu-tio-nä-ren % re-vo-lu-tio-nären + re-vo-lu-tio-nä-rer % re-vo-lu-tio-närer + re-vo-lu-tio-nä-res % re-vo-lu-tio-näres + röch-le % röchle + Rös-chen % Röschen + Ru-in % Ruin + rui-nö-se % rui-nöse + rui-nö-sem % rui-nösem + rui-nö-sen % rui-nösen + rui-nö-ser % rui-nöser + rui-nö-ses % rui-nöses + run-der % runder + rü-stest % rüstest + rü-stet % rüstet + sai-so-nal % sai-sonal + sai-so-na-le % sai-sona-le + sai-so-na-lem % sai-sona-lem + sai-so-na-len % sai-sona-len + sai-so-na-ler % sai-sona-ler + sai-so-na-les % sai-sona-les + sa-lop-pe-rem % sa-lop-perem + sa-ni-tä-re % sa-ni-täre + schauk-le % schaukle + scheff-le % scheffle + scheit-re % scheitre + schie-^^ffest % schie^^ffest + schlap-pe-rem % schlap-perem + schlech-te-ren % schlech-teren + Schlen-dri-ans % Schlen-drians + schlich-te-ren % schlich-teren + schlie-^^ffest % schlie^^ffest + schmett-re % schmettre + schnö-dem % schnödem + schnörk-le % schnörkle + schnüff-le % schnüffle + Scho-bers % Schobers + schust-re % schustre + schwaf-le % schwafle + schwef-le % schwefle + schwel-te % schwelte + schwel-test % schweltest + schwel-tet % schweltet + se-kun-dä-re % se-kun-däre + se-kun-dä-rem % se-kun-därem + se-kun-dä-ren % se-kun-dären + se-kun-dä-rer % se-kun-därer + se-kun-dä-res % se-kun-däres + Se-ni-ors % Se-niors + Skan-di-na-vi-ens % Skan-di-na-viens + Skan-di-na-vi-er % Skan-di-na-vier + Skan-di-na-vi-ers % Skan-di-na-viers + Ski-er % Skier + So-li-tä-re % So-li-täre + Spa-ghet-ti % Spaghet-ti + Spa-ni-er % Spa-nier + Spa-ni-ers % Spa-niers + Spie-^^ffes % Spie^^ffes + spie-^^ffest % spie^^ffest + sprenk-le % sprenkle + sprie-^^ffest % sprie^^ffest + sprö-dem % sprödem + staff-le % staffle + stah-len % stahlen + stap-le % staple + sta-tio-nä-re % sta-tio-näre + sta-tio-nä-rem % sta-tio-närem + sta-tio-nä-ren % sta-tio-nären + sta-tio-nä-rer % sta-tio-närer + sta-tio-nä-res % sta-tio-näres + Ste-no-gra-phi-en % Ste-no-gra-phien + Ste-tho-skop % Stetho-skop + Ste-tho-sko-pe % Stetho-sko-pe + Ste-tho-sko-pen % Stetho-sko-pen + Ste-tho-skops % Stetho-skops + stie-^^ffest % stie^^ffest + Stot-te-rers % Stot-terers + stu-re % sture + stu-re-re % sture-re + stu-re-ren % sture-ren + stu-re-rer % sture-rer + sü-^^ffem % sü^^ffem + Ta-ba-ke % Ta-bake + ta-fe-le % ta-fele + taf-le % tafle + tag-ein % tagein + tak-le % takle + Tam-tam % Tamtam + Tam-tams % Tamtams + tätsch-le % tätschle + Te-le-fo-nat % Te-le-fonat + Te-le-fo-na-te % Te-le-fona-te + Te-le-fo-na-ten % Te-le-fona-ten + Te-le-fo-nats % Te-le-fonats + Te-nö-re % Tenö-re + Te-nö-ren % Tenö-ren + Ther-mo-sta-ten % Ther-mo-staten + tie-fer % tiefer + tie-fe-re % tiefe-re + tie-fe-rem % tiefe-rem + tie-fe-ren % tiefe-ren + tie-fe-rer % tiefe-rer + tie-fe-res % tiefe-res + töpf-re % töpfre + To-po-gra-phi-en % To-po-gra-phien + tö-rich-te-ren % tö-rich-teren + tork-le % torkle + to-ta-li-tä-re % to-ta-li-täre + to-ta-li-tä-re-ren % to-ta-li-täreren + trocke-ne % trockene + trocke-nem % trockenem + trocke-nen % trockenen + trocke-ner % trockener + trocke-ne-re % trockene-re + trocke-ne-rem % trockene-rem + trocke-ne-ren % trockene-ren + trocke-ne-rer % trockene-rer + trocke-ne-res % trockene-res + trocke-nes % trockenes + trü-ber % trüber + trü-be-re % trübe-re + trü-be-rem % trüber-em + trü-be-ren % trüber-en + trü-be-rer % trüber-er + trü-be-res % trüber-es + Tsche-chi-ens % Tsche-chiens + tusch-le % tuschle + Ty-po-gra-phi-en % Ty-po-gra-phien + ubi-qui-tä-re % ubi-qui-täre + uni-ver-si-tä-re % uni-ver-si-täre + Va-rie-té % Va-rieté + Va-rie-tés % Va-rietés + ver-dirbst % verdirbst + ver-dirbt % verdirbt + ver-drie-^^ffest % ver-drie^^ffest + ver-düst-re % ver-düstre + ver-ek-le % ver-ekle + ver-kupf-re % ver-kupfre + ver-pulv-re % ver-pulvre + ver-rä-te-ri-sche % ver-rä-te-rische + ver-rä-te-ri-schem % ver-rä-te-rischem + ver-rä-te-ri-schen % ver-rä-te-rischen + ver-rä-te-ri-scher % ver-rä-te-rischer + ver-rä-te-ri-sches % ver-rä-te-risches + ver-schie-de-ne-re % ver-schie-de-nere + ver-schie-de-ne-rem % ver-schie-de-nerem + ver-schie-de-ne-ren % ver-schie-de-neren + ver-schie-de-ne-rer % ver-schie-de-nerer + ver-schie-de-ne-res % ver-schie-de-neres + ver-schlech-terst % ver-schlechterst + ver-schlecht-re % ver-schlechtre + ver-übe-le % ver-übele + ver-wü-stest % ver-wüstest + Ve-te-ri-nä-re % Ve-te-ri-näre + Ve-te-ri-nä-ren % Ve-te-ri-nären + Vi-sio-nä-re % Vi-sio-näre + Vi-sio-nä-ren % Vi-sio-nären + voll-ends % vollends + Wah-len % Wahlen + Wäm-ser % Wämser + Wäm-sern % Wämsern + wa-rum % warum + watsch-le % watschle + We-ges % Weges + wei-^^ffem % wei^^ffem + weit-aus % weitaus + wett-re % wettre + Wie-de-hopf % Wie-dehopf + Wie-de-hop-fe % Wie-dehop-fe + Wie-de-hop-fen % Wie-dehop-fen + Wie-de-hopfs % Wie-dehopfs + wirb-le % wirble + wisp-re % wispre + woh-le-re % wohle-re + woh-le-ren % wohle-ren + wor-in % worin + wor-um % worum + wüh-lend-ste % wühlend-ste + wüh-lend-sten % wühlend-sten + wüh-lend-stes % wühlend-stes + Wun-sche % Wunsche + Wun-sches % Wunsches + würf-le % würfle + wü-stes % wüstes + wü-stest % wüstest + wü-ste-ste % wüste-ste + wü-ste-stem % wüste-stem + wü-ste-sten % wüste-sten + wü-ste-ster % wüste-ster + wü-ste-stes % wüste-stes + Zai-re % Zaire + zirk-le % zirkle + zisch-le % zischle + Zu-be-hö-re % Zu-be-höre + Zu-be-hö-ren % Zu-be-hören + Zuch-ten % Zuchten + zu-frie-de-ne-re % zu-frie-de-nere + zu-frie-de-ne-rem % zu-frie-de-nerem + zu-frie-de-ne-ren % zu-frie-de-neren + zu-frie-de-ne-rer % zu-frie-de-nerer + zu-frie-de-ne-res % zu-frie-de-neres + Zu-tat % Zutat + Zu-ta-ten % Zuta-ten + zweif-le % zweifle +% +% +% fehlende Trennungen von zusammengesetzten Wörtern +% + ab-dunk-le % ab-dunkle + ab-flie-^^ffest % ab-flie^^ffest + ab-ge-brüh-te-ren % ab-ge-brüh-teren + ab-gie-^^ffest % ab-gie^^ffest + ab-lie^^ff % ablie^^ff + ab-rü-stest % ab-rüstest + ab-schie-^^ffest % ab-schie^^ffest + ab-schlie-^^ffest % ab-schlie^^ffest + an-ek-le % an-ekle + an-ge-fault % an-gefault + an-ge-faul-te % an-gefaul-te + an-ge-faul-tem % an-gefaul-tem + an-ge-faul-ten % an-gefaul-ten + an-ge-faul-ter % an-gefaul-ter + an-ge-faul-tes % an-gefaul-tes + an-ge-klickt % an-geklickt + an-ge-klick-te % an-geklick-te + an-ge-klick-tem % an-geklick-tem + an-ge-klick-ten % an-geklick-ten + an-ge-klick-ter % an-geklick-ter + an-ge-klick-tes % an-geklick-tes + an-ge-pö-belt % an-gepö-belt + an-ge-pö-bel-te % an-gepö-bel-te + an-ge-pö-bel-tem % an-gepö-bel-tem + an-ge-pö-bel-ten % an-gepö-bel-ten + an-ge-pö-bel-ter % an-gepö-bel-ter + an-ge-pö-bel-tes % an-gepö-bel-tes + an-glot-ze % anglot-ze + an-glot-zen % anglot-zen + an-glot-zend % anglot-zend + an-glot-zen-de % anglot-zen-de + an-glot-zen-dem % anglot-zen-dem + an-glot-zen-den % anglot-zen-den + an-glot-zen-der % anglot-zen-der + an-glot-zen-des % anglot-zen-des + an-glot-zest % anglot-zest + an-glotzt % anglotzt + an-glotz-te % anglotz-te + an-glotz-ten % anglotz-ten + an-glotz-test % anglotz-test + an-glotz-tet % anglotz-tet + an-kä-me % an-käme + an-kä-men % an-kämen + an-klick-bar % anklick-bar + an-klick-ba-re % anklick-ba-re + an-klick-ba-rem % anklick-ba-rem + an-klick-ba-ren % anklick-ba-ren + an-klick-ba-rer % anklick-ba-rer + an-klick-ba-res % anklick-ba-res + an-klicke % anklicke + an-klicken % anklicken + an-klickend % anklickend + an-klicken-de % anklicken-de + an-klicken-dem % anklicken-dem + an-klicken-den % anklicken-den + an-klicken-der % anklicken-der + an-klicken-des % anklicken-des + an-klickst % anklickst + an-klickt % anklickt + an-klick-te % anklick-te + an-klick-ten % anklick-ten + an-klick-test % anklick-test + an-klick-tet % anklick-tet + an-läch-le % an-lächle + an-schie-^^ffest % an-schie^^ffest + an-schlie-^^ffest % an-schlie^^ffest + an-ti-kes % an-tikes + an-wink-le % an-winkle + an-zu-klicken % an-zuklicken + an-zu-klickend % an-zuklickend + an-zu-klicken-de % an-zuklicken-de + an-zu-klicken-dem % an-zuklicken-dem + an-zu-klicken-den % an-zuklicken-den + an-zu-klicken-der % an-zuklicken-der + an-zu-klicken-des % an-zuklicken-des + an-zu-nä-hern % an-zunä-hern + an-zu-nä-hernd % an-zunä-hernd + an-zu-nä-hern-de % an-zunä-hern-de + an-zu-nä-hern-dem % an-zunä-hern-dem + an-zu-nä-hern-den % an-zunä-hern-den + an-zu-nä-hern-der % an-zunä-hern-der + an-zu-nä-hern-des % an-zunä-hern-des + an-zweif-le % an-zweifle + Ar-bei-ter-schaft % Ar-beiter-schaft + Arsch-lö-cher % Arschlö-cher + Arsch-lö-chern % Arschlö-chern + Arsch-lochs % Arschlochs + auf-fal-lend-ste % auf-fallend-ste + auf-fal-lend-stem % auf-fallend-stem + auf-fal-lend-sten % auf-fallend-sten + auf-fal-lend-ster % auf-fallend-ster + auf-fal-lend-stes % auf-fallend-stes + auf-ge-bläh-te-ren % auf-ge-bläh-teren + auf-ge-weck-te-re % auf-ge-weck-tere + auf-ge-weck-te-rem % auf-ge-weck-terem + auf-ge-weck-te-ren % auf-ge-weck-teren + auf-ge-weck-te-rer % auf-ge-weck-terer + auf-ge-weck-te-res % auf-ge-weck-teres + auf-ge-wen-det % auf-ge-wendet + auf-ge-wen-de-te % auf-ge-wende-te + auf-ge-wen-de-tem % auf-ge-wende-tem + auf-ge-wen-de-ten % auf-ge-wende-ten + auf-ge-wen-de-ter % auf-ge-wende-ter + auf-ge-wen-de-tes % auf-ge-wende-tes + auf-gie-^^ffest % auf-gie^^ffest + auf-lie-^^ffe % auflie-^^ffe + auf-lie-^^ffen % auflie-^^ffen + auf-lie-^^ffest % auflie^^ffest + auf-lie-^^ffet % auflie-^^ffet + auf-rü-stest % auf-rüstest + auf-schie-^^ffest % auf-schie^^ffest + auf-schlie-^^ffest % auf-schlie^^ffest + auf-spie-^^ffest % auf-spie^^ffest + auf-stap-le % auf-staple + auf-staust % aufstaust + aus-flie-^^ffest % aus-flie^^ffest + aus-ge-koch-te-ren % aus-ge-koch-teren + aus-ge-nüch-tert % aus-genüch-tert + aus-ge-nüch-ter-te % aus-genüch-ter-te + aus-ge-nüch-ter-tem % aus-genüch-ter-tem + aus-ge-nüch-ter-ten % aus-genüch-ter-ten + aus-ge-nüch-ter-ter % aus-genüch-ter-ter + aus-ge-nüch-ter-tes % aus-genüch-ter-tes + aus-ge-nützt % aus-genützt + aus-ge-nütz-te % aus-genütz-te + aus-ge-nütz-tem % aus-genütz-tem + aus-ge-nütz-ten % aus-genütz-ten + aus-ge-nütz-ter % aus-genütz-ter + aus-ge-nütz-tes % aus-genütz-tes + aus-ge-schmück-te-re % aus-ge-schmück-tere + aus-ge-schmück-te-rem % aus-ge-schmück-terem + aus-ge-schmück-te-ren % aus-ge-schmück-teren + aus-ge-schmück-te-rer % aus-ge-schmück-terer + aus-ge-schmück-te-res % aus-ge-schmück-teres + aus-ge-such-te-ren % aus-ge-such-teren + aus-gie-^^ffest % aus-gie^^ffest + aus-höhl-te % aus-höhlte + aus-höhl-ten % aus-höhlten + aus-höhl-test % aus-höhltest + aus-höhl-tet % aus-höhltet + aus-lie-^^ffest % aus-lie^^ffest + aus-löff-le % aus-löffle + aus-rü-stest % aus-rüstest + aus-schlie-^^ffest % aus-schlie^^ffest + aus-stie-^^ffest % aus-stie^^ffest + aus-würf-le % aus-würfle + be-eh-re % beeh-re + be-eh-ren % beeh-ren + be-eh-rend % beeh-rend + be-eh-ren-de % beeh-ren-de + be-eh-ren-dem % beeh-ren-dem + be-eh-ren-den % beeh-ren-den + be-eh-ren-der % beeh-ren-der + be-eh-ren-des % beeh-ren-des + be-ehrst % beehrst + be-ehrt % beehrt + be-ehr-te % beehr-te + be-ehr-tem % beehr-tem + be-ehr-ten % beehr-ten + be-ehr-ter % beehr-ter + be-ehr-tes % beehr-tes + be-ehr-test % beehr-test + be-ehr-tet % beehr-tet + be-gie-^^ffest % be-gie^^ffest + be-hind-re % be-hindre + bei-pflich-te % beipflich-te + bei-pflich-ten % beipflich-ten + bei-pflich-tend % beipflich-tend + bei-pflich-ten-de % beipflich-ten-de + bei-pflich-ten-dem % beipflich-ten-dem + bei-pflich-ten-den % beipflich-ten-den + bei-pflich-ten-der % beipflich-ten-der + bei-pflich-ten-des % beipflich-ten-des + Bei-pflich-tens % Beipflich-tens + bei-pflich-test % beipflich-test + bei-pflich-tet % beipflich-tet + bei-pflich-te-te % beipflich-te-te + bei-pflich-te-ten % beipflich-te-ten + bei-pflich-te-test % beipflich-te-test + bei-pflich-te-tet % beipflich-te-tet + Bei-pflich-tung % Beipflich-tung + Bei-pflich-tun-gen % Beipflich-tun-gen + bei-zu-pflich-ten % bei-zupflich-ten + be-kä-me % be-käme + be-kä-men % be-kämen + be-läch-le % be-lächle + be-lie^^ff % belie^^ff + be-lie-^^ffe % belie-^^ffe + be-lie-^^ffen % belie-^^ffen + be-lie^^ffest % belie^^ffest + be-lie^^fft % belie^^fft + be-must-re % be-mustre + be-rät % berät + be-rätst % berätst + berg-ab % bergab + berg-an % bergan + be-schei-de-ne-re % be-schei-de-nere + be-schei-de-ne-rem % be-schei-de-nerem + be-schei-de-ne-ren % be-schei-de-neren + be-schei-de-ne-rer % be-schei-de-nerer + be-schei-de-ne-res % be-schei-de-neres + be-schie-^^ffest % be-schie^^ffest + be-schlie-^^ffest % be-schlie^^ffest + be-schränk-te-re % be-schränk-tere + be-schränk-te-rem % be-schränk-terem + be-schränk-te-ren % be-schränk-teren + be-schränk-te-rer % be-schränk-terer + be-schränk-te-res % be-schränk-teres + be-see-lend % be-seelend + be-see-len-de % be-seelen-de + be-see-len-dem % be-seelen-dem + be-see-len-den % be-seelen-den + be-see-len-der % be-seelen-der + be-see-len-des % be-seelen-des + be-stah-len % be-stahlen + be-zweif-le % be-zweifle + da-bei-blei-be % da-beiblei-be + da-bei-blei-ben % da-beiblei-ben + da-bei-blei-bend % da-beiblei-bend + da-bei-blei-ben-de % da-beiblei-ben-de + da-bei-blei-ben-dem % da-beiblei-ben-dem + da-bei-blei-ben-den % da-beiblei-ben-den + da-bei-blei-ben-der % da-beiblei-ben-der + da-bei-blei-ben-des % da-beiblei-ben-des + da-bei-bleibst % da-beibleibst + da-bei-bleibt % da-beibleibt + da-hin-glei-te % da-hinglei-te + da-hin-glei-ten % da-hinglei-ten + da-hin-glei-tend % da-hinglei-tend + da-hin-glei-ten-de % da-hinglei-ten-de + da-hin-glei-ten-dem % da-hinglei-ten-dem + da-hin-glei-ten-den % da-hinglei-ten-den + da-hin-glei-ten-der % da-hinglei-ten-der + da-hin-glei-ten-des % da-hinglei-ten-des + da-hin-glei-test % da-hinglei-test + da-hin-glei-tet % da-hinglei-tet + da-hin-ve-ge-tie-re % da-hinve-ge-tie-re + da-hin-ve-ge-tie-ren % da-hinve-ge-tie-ren + da-hin-ve-ge-tie-rend % da-hinve-ge-tie-rend + da-hin-ve-ge-tie-ren-de % da-hinve-ge-tie-ren-de + da-hin-ve-ge-tie-ren-dem % da-hinve-ge-tie-ren-dem + da-hin-ve-ge-tie-ren-den % da-hinve-ge-tie-ren-den + da-hin-ve-ge-tie-ren-der % da-hinve-ge-tie-ren-der + da-hin-ve-ge-tie-ren-des % da-hinve-ge-tie-ren-des + da-hin-ve-ge-tierst % da-hinve-ge-tierst + da-hin-ve-ge-tiert % da-hinve-ge-tiert + da-hin-ve-ge-tier-te % da-hinve-ge-tier-te + da-hin-ve-ge-tier-ten % da-hinve-ge-tier-ten + da-hin-ve-ge-tier-test % da-hinve-ge-tier-test + da-hin-ve-ge-tier-tet % da-hinve-ge-tier-tet + da-lag % dalag + da-la-gen % dala-gen + dem-ent-spre-chend % dement-spre-chend + dem-ent-spre-chen-de % dement-spre-chen-de + dem-ent-spre-chen-dem % dement-spre-chen-dem + dem-ent-spre-chen-den % dement-spre-chen-den + dem-ent-spre-chen-der % dement-spre-chen-der + dem-ent-spre-chen-des % dement-spre-chen-des + dem-je-ni-gen % demje-ni-gen + Dom-pfaff % Dompfaff + durch-flie-^^ffest % durch-flie^^ffest + durch-zu-at-men % durch-zuat-men + eben-er-dig % ebener-dig + eben-er-di-ge % ebener-di-ge + eben-er-di-gem % ebener-di-gem + eben-er-di-gen % ebener-di-gen + eben-er-di-ger % ebener-di-ger + eben-er-di-ges % ebener-di-ges + ein-eng-bar % eineng-bar + ein-eng-ba-re % eineng-ba-re + ein-eng-ba-rem % eineng-ba-rem + ein-eng-ba-ren % eineng-ba-ren + ein-eng-ba-rer % eineng-ba-rer + ein-eng-ba-res % eineng-ba-res + ein-en-ge % einen-ge + ein-en-gen % einen-gen + ein-en-gend % einen-gend + ein-en-gen-de % einen-gen-de + ein-en-gen-dem % einen-gen-dem + ein-en-gen-den % einen-gen-den + ein-en-gen-der % einen-gen-der + ein-en-gen-des % einen-gen-des + Ein-en-gens % Einen-gens + ein-engst % einengst + ein-engt % einengt + ein-eng-te % eineng-te + ein-eng-ten % eineng-ten + ein-eng-test % eineng-test + ein-eng-tet % eineng-tet + Ein-en-gung % Einen-gung + Ein-en-gun-gen % Einen-gun-gen + ein-flie-^^ffest % ein-flie^^ffest + ein-ge-hüllt % ein-gehüllt + ein-ge-hüll-te % ein-gehüll-te + ein-ge-hüll-tem % ein-gehüll-tem + ein-ge-hüll-ten % ein-gehüll-ten + ein-ge-hüll-ter % ein-gehüll-ter + ein-ge-hüll-tes % ein-gehüll-tes + ein-ge-schleu-ster % ein-ge-schleuster + ein-gie-^^ffest % ein-gie^^ffest + ein-lie-^^ffest % ein-lie^^ffest + ein-schie-^^ffest % ein-schie^^ffest + ein-schläf-re % ein-schläfre + ein-schlie-^^ffest % ein-schlie^^ffest + ein-schüch-terst % ein-schüchterst + ein-schücht-re % ein-schüchtre + ein-zu-eb-nen % ein-zueb-nen + ein-zu-eb-nend % ein-zueb-nend + ein-zu-eb-nen-de % ein-zueb-nen-de + ein-zu-eb-nen-dem % ein-zueb-nen-dem + ein-zu-eb-nen-den % ein-zueb-nen-den + ein-zu-eb-nen-der % ein-zueb-nen-der + ein-zu-eb-nen-des % ein-zueb-nen-des + ein-zu-en-gen % ein-zuen-gen + ein-zu-en-gend % ein-zuen-gend + ein-zu-en-gen-de % ein-zuen-gen-de + ein-zu-en-gen-dem % ein-zuen-gen-dem + ein-zu-en-gen-den % ein-zuen-gen-den + ein-zu-en-gen-der % ein-zuen-gen-der + ein-zu-en-gen-des % ein-zuen-gen-des + ein-zu-hül-len % ein-zuhül-len + ein-zu-hül-lend % ein-zuhül-lend + ein-zu-hül-len-de % ein-zuhül-len-de + ein-zu-hül-len-dem % ein-zuhül-len-dem + ein-zu-hül-len-den % ein-zuhül-len-den + ein-zu-hül-len-der % ein-zuhül-len-der + ein-zu-hül-len-des % ein-zuhül-len-des + ein-zu-räu-men % ein-zuräu-men + ein-zu-räu-mend % ein-zuräu-mend + ein-zu-räu-men-de % ein-zuräu-men-de + ein-zu-räu-men-dem % ein-zuräu-men-dem + ein-zu-räu-men-den % ein-zuräu-men-den + ein-zu-räu-men-der % ein-zuräu-men-der + ein-zu-räu-men-des % ein-zuräu-men-des + ein-zu-sau-gen % ein-zusau-gen + ein-zu-sau-gend % ein-zusau-gend + ein-zu-sau-gen-de % ein-zusau-gen-de + ein-zu-sau-gen-dem % ein-zusau-gen-dem + ein-zu-sau-gen-den % ein-zusau-gen-den + ein-zu-sau-gen-der % ein-zusau-gen-der + ein-zu-sau-gen-des % ein-zusau-gen-des + em-por-ge-blickt % em-por-geblickt + em-por-ge-blick-te % em-por-geblick-te + em-por-ge-blick-tem % em-por-geblick-tem + em-por-ge-blick-ten % em-por-geblick-ten + em-por-ge-blick-ter % em-por-geblick-ter + em-por-ge-blick-tes % em-por-geblick-tes + em-por-schie-^^ffest % em-por-schie^^ffest + ent-ei-le % entei-le + ent-ei-len % entei-len + ent-ei-lend % entei-lend + ent-ei-len-de % entei-len-de + ent-ei-len-dem % entei-len-dem + ent-ei-len-den % entei-len-den + ent-ei-len-der % entei-len-der + ent-ei-len-des % entei-len-des + ent-eilst % enteilst + ent-eilt % enteilt + ent-eil-te % enteil-te + ent-eil-tem % enteil-tem + ent-eil-ten % enteil-ten + ent-eil-ter % enteil-ter + ent-eil-tes % enteil-tes + ent-eil-test % enteil-test + ent-eil-tet % enteil-tet + ent-er-ben % enter-ben + ent-er-bend % enter-bend + ent-er-ben-de % enter-ben-de + ent-er-ben-dem % enter-ben-dem + ent-er-ben-den % enter-ben-den + ent-er-ben-der % enter-ben-der + ent-er-ben-des % enter-ben-des + ent-erbst % enterbst + ent-kä-me % ent-käme + ent-kä-men % ent-kämen + ent-lie^^ff % entlie^^ff + ent-lie-^^ffe % entlie-^^ffe + ent-lie-^^ffen % entlie-^^ffen + ent-lie-^^ffest % entlie^^ffest + ent-lie-^^ffet % entlie-^^ffet + ent-lie^^fft % entlie^^fft + ent-rü-stest % ent-rüstest + ent-schie-de-ne-re % ent-schie-de-nere + ent-schie-de-ne-rem % ent-schie-de-nerem + ent-schie-de-ne-ren % ent-schie-de-neren + ent-schie-de-ne-rer % ent-schie-de-nerer + ent-schie-de-ne-res % ent-schie-de-neres + ent-schlie-^^ffest % ent-schlie^^ffest + ent-sprie-^^ffest % ent-sprie^^ffest + er-ah-ne % erah-ne + er-ah-nen % erah-nen + er-ah-nend % erah-nend + er-ah-nen-de % erah-nen-de + er-ah-nen-dem % erah-nen-dem + er-ah-nen-den % erah-nen-den + er-ah-nen-der % erah-nen-der + er-ah-nen-des % erah-nen-des + er-ahnst % erahnst + er-ahnt % erahnt + er-ahn-te % erahn-te + er-ahn-tem % erahn-tem + er-ahn-ten % erahn-ten + er-ahn-ter % erahn-ter + er-ahn-tes % erahn-tes + er-ahn-test % erahn-test + er-ahn-tet % erahn-tet + er-bla^^fft % erbla^^fft + er-bla^^ff-te % erbla^^ff-te + er-bla^^ff-tem % erbla^^ff-tem + er-bla^^ff-ten % erbla^^ff-ten + er-bla^^ff-ter % erbla^^ff-ter + er-bla^^ff-tes % erbla^^ff-tes + er-bla^^ff-test % erbla^^ff-test + er-bla^^ff-tet % erbla^^ff-tet + er-fah-ren-ste % er-fah-renste + er-fah-ren-stem % er-fah-renstem + er-fah-ren-sten % er-fah-rensten + er-fah-ren-ster % er-fah-renster + er-fah-ren-stes % er-fah-renstes + er-fah-rungs-ge-mä-^^ffem % er-fah-rungs-ge-mä^^ffem + er-gie-^^ffest % er-gie^^ffest + er-heit-re % er-heitre + er-klett-re % er-klettre + er-leich-terst % er-leichterst + er-leicht-re % er-leichtre + er-lie-^^ffest % er-lie^^ffest + er-nüch-terst % er-nüchterst + er-nücht-re % er-nüchtre + er-ört-re % er-örtre + er-schie-^^ffest % er-schie^^ffest + er-schlie-^^ffest % er-schlie^^ffest + er-schrick % erschrick + er-schrickst % erschrickst + er-schrickt % erschrickt + er-schüt-te-re % er-schüt-tere + er-schütt-re % er-schüttre + er-wei-ter-bar % er-weiter-bar + er-wei-ter-ba-re % er-weiter-ba-re + er-wei-ter-ba-rem % er-weiter-ba-rem + er-wei-ter-ba-ren % er-weiter-ba-ren + er-wei-ter-ba-rer % er-weiter-ba-rer + er-wei-ter-ba-res % er-weiter-ba-res + Er-wei-ter-bar-keit % Er-weiter-bar-keit + er-weit-re % er-weitre + er-wünsch-te-ren % er-wünsch-teren + Fern-ost % Fernost + fern-öst-lich % fernöst-lich + fern-öst-li-che % fernöst-li-che + fern-öst-li-chem % fernöst-li-chem + fern-öst-li-chen % fernöst-li-chen + fern-öst-li-cher % fernöst-li-cher + fern-öst-li-ches % fernöst-li-ches + fort-ho-le % fortho-le + fort-ho-len % fortho-len + fort-ho-lend % fortho-lend + fort-ho-len-de % fortho-len-de + fort-ho-len-dem % fortho-len-dem + fort-ho-len-den % fortho-len-den + fort-ho-len-der % fortho-len-der + fort-ho-len-des % fortho-len-des + fort-holst % fortholst + fort-holt % fortholt + fort-hol-te % forthol-te + fort-hol-ten % forthol-ten + fort-hol-test % forthol-test + fort-hol-tet % forthol-tet + froh-locke % frohlocke + froh-locken % frohlocken + froh-lockend % frohlockend + froh-locken-de % frohlocken-de + froh-locken-dem % frohlocken-dem + froh-locken-den % frohlocken-den + froh-locken-der % frohlocken-der + froh-locken-des % frohlocken-des + froh-lockst % frohlockst + froh-lockt % frohlockt + froh-lock-te % frohlock-te + froh-lock-ten % frohlock-ten + froh-lock-test % frohlock-test + froh-lock-tet % frohlock-tet + furcht-er-re-gend % furchter-re-gend + furcht-er-re-gen-dem % furchter-re-gen-dem + furcht-er-re-gen-den % furchter-re-gen-den + furcht-er-re-gen-der % furchter-re-gen-der + ge-mei-ner-wei-se % ge-meiner-wei-se + ge-nau-so-schnell % ge-nau-soschnell + gleich-kä-me % gleich-käme + gleich-kä-men % gleich-kämen + gro-^^ffen-teils % gro^^ffen-teils + halb-dunk-le % halb-dunkle + halb-dunk-lem % halb-dunklem + halb-dunk-len % halb-dunklen + halb-dunk-les % halb-dunkles + Hand-um-dre-hen % Handum-dre-hen + her-aus-lie^^ff % her-auslie^^ff + her-aus-lie-^^ffe % her-auslie-^^ffe + her-aus-lie-^^ffen % her-auslie-^^ffen + her-aus-lie-^^ffest % her-auslie^^ffest + her-aus-lie^^fft % her-auslie^^fft + her-aus-schie-^^ffest % her-aus-schie^^ffest + her-aus-trat % her-austrat + her-aus-tra-ten % her-austra-ten + her-aus-tra-test % her-austra-test + her-aus-tra-tet % her-austra-tet + her-aus-tratst % her-austratst + her-aus-tre-te % her-austre-te + her-aus-tre-ten % her-austre-ten + her-aus-tre-tend % her-austre-tend + her-aus-tre-ten-de % her-austre-ten-de + her-aus-tre-ten-dem % her-austre-ten-dem + her-aus-tre-ten-den % her-austre-ten-den + her-aus-tre-ten-der % her-austre-ten-der + her-aus-tre-ten-des % her-austre-ten-des + her-aus-tre-tet % her-austre-tet + her-aus-tritt % her-austritt + her-aus-trittst % her-austrittst + her-vor-stie-^^ffest % her-vor-stie^^ffest + hilf-lo-se % hilflo-se + hilflo-sem % hilflo-sem + hilf-lo-sen % hilflo-sen + hilflo-ser % hilflo-ser + hilf-lo-se-re % hilflo-se-re + hilflo-se-rem % hilflo-se-rem + hilf-lo-se-ren % hilflo-se-ren + hilf-lo-se-rer % hilflo-se-rer + hilflo-se-res % hilflo-se-res + hilf-lo-ses % hilflo-ses + hilf-lo-se-ste % hilflo-se-ste + hilflo-se-stem % hilflo-se-stem + hilf-lo-se-sten % hilflo-se-sten + hilflo-se-ster % hilflo-se-ster + hilf-lo-se-stes % hilflo-se-stes + hin-aus-schie-^^ffest % hin-aus-schie^^ffest + hin-aus-trat % hin-austrat + hin-aus-tra-ten % hin-austra-ten + hin-aus-tra-test % hin-austra-test + hin-aus-tra-tet % hin-austra-tet + hin-aus-tratst % hin-austratst + hin-aus-tre-te % hin-austre-te + hin-aus-tre-ten % hin-austre-ten + hin-aus-tre-tend % hin-austre-tend + hin-aus-tre-ten-de % hin-austre-ten-de + hin-aus-tre-ten-dem % hin-austre-ten-dem + hin-aus-tre-ten-den % hin-austre-ten-den + hin-aus-tre-ten-der % hin-austre-ten-der + hin-aus-tre-ten-des % hin-austre-ten-des + hin-aus-tre-tet % hin-austre-tet + hin-aus-tru-gen % hin-austru-gen + hin-ein-sah % hin-einsah + hin-ein-sa-hen % hin-einsa-hen + hin-ein-sahst % hin-einsahst + hin-ein-saht % hin-einsaht + hin-ter-lie-^^ffest % hin-ter-lie^^ffest + hin-weg-dreht % hin-wegdreht + hoch-schie-^^ffest % hoch-schie^^ffest + hun-dert-zwan-zig % hun-dertzwan-zig + In-gang-set-zung % In-gangset-zung + In-gang-set-zun-gen % In-gangset-zun-gen + in-ji-zier-bar % inji-zier-bar + in-ji-zier-ba-re % inji-zier-ba-re + in-ji-zier-ba-rem % inji-zier-ba-rem + in-ji-zier-ba-ren % inji-zier-ba-ren + in-ji-zier-ba-rer % inji-zier-ba-rer + in-ji-zier-ba-res % inji-zier-ba-res + in-kom-pe-ten-te % in-kom-pe-tente + in-kom-pe-ten-tem % in-kom-pe-tentem + in-kom-pe-ten-ten % in-kom-pe-tenten + in-kom-pe-ten-ter % in-kom-pe-tenter + in-kom-pe-ten-tes % in-kom-pe-tentes + in-kor-rek-te-re % in-kor-rek-tere + in-kor-rek-te-rem % in-kor-rek-terem + in-kor-rek-te-ren % in-kor-rek-teren + in-kor-rek-te-rer % in-kor-rek-terer + in-kor-rek-te-res % in-kor-rek-teres + jahr-aus % jahraus + jahr-ein % jahrein + kurz-schlie-^^ffest % kurz-schlie^^ffest + laut-hals % lauthals + letzt-hin % letzthin + los-ei-se % losei-se + los-ei-sen % losei-sen + los-ei-send % losei-send + los-ei-sen-de % losei-sen-de + los-ei-sen-dem % losei-sen-dem + los-ei-sen-den % losei-sen-den + los-ei-sen-der % losei-sen-der + los-ei-sen-des % losei-sen-des + los-ei-sest % losei-sest + los-eist % loseist + los-ei-ste % losei-ste + los-ei-sten % losei-sten + los-ei-stest % losei-stest + los-ei-stet % losei-stet + los-lie^^ff % loslie^^ff + los-lie-^^ffe % loslie-^^ffe + los-lie-^^ffen % loslie-^^ffen + los-lie-^^ffest % loslie^^ffest + los-lie^^fft % loslie^^fft + mit-hält % mithält + mit-hältst % mithältst + mit-kä-me % mit-käme + mit-kä-men % mit-kämen + mit-sen-de % mitsen-de + mit-sen-den % mitsen-den + mit-sen-dend % mitsen-dend + mit-sen-den-de % mitsen-den-de + mit-sen-den-dem % mitsen-den-dem + mit-sen-den-den % mitsen-den-den + mit-sen-den-der % mitsen-den-der + mit-sen-den-des % mitsen-den-des + mit-sen-dest % mitsen-dest + mit-sen-det % mitsen-det + nach-kä-me % nach-käme + nach-kä-men % nach-kämen + nach-kä-mest % nach-kämest + nach-kä-met % nach-kämet + nach-lie^^ff % nachlie^^ff + nach-lie-^^ffe % nachlie-^^ffe + nach-lie-^^ffen % nachlie-^^ffen + nach-lie-^^ffest % nachlie^^ffest + nach-lie^^fft % nachlie^^fft + Nach-mit-ta-ge % Nach-mit-tage + Nach-mit-ta-gen % Nach-mit-tagen + Nach-ruhm % Nachruhm + Nach-ruhms % Nachruhms + nach-rü-stest % nach-rüstest + nach-träu-mend % nachträu-mend + nach-träu-men-de % nachträu-men-de + nach-träu-men-dem % nachträu-men-dem + nach-träu-men-den % nachträu-men-den + nach-träu-men-der % nachträu-men-der + nach-träu-men-des % nachträu-men-des + nach-träumst % nachträumst + nach-träumt % nachträumt + nach-träum-te % nachträum-te + nach-träum-ten % nachträum-ten + nach-träum-test % nachträum-test + nach-träum-tet % nachträum-tet + nach-trau-re % nachtrau-re + nach-zu-ah-men % nach-zuah-men + nach-zu-ah-mend % nach-zuah-mend + nach-zu-ah-men-de % nach-zuah-men-de + nach-zu-ah-men-dem % nach-zuah-men-dem + nach-zu-ah-men-den % nach-zuah-men-den + nach-zu-ah-men-der % nach-zuah-men-der + nach-zu-ah-men-des % nach-zuah-men-des + Nah-ost % Nahost + Nichts-tun % Nichtstun + nie-der-ge-drück-te-re % nie-der-ge-drück-tere + nie-der-ge-drück-te-rem % nie-der-ge-drück-terem + nie-der-ge-drück-te-ren % nie-der-ge-drück-teren + nie-der-ge-drück-te-rer % nie-der-ge-drück-terer + nie-der-ge-drück-te-res % nie-der-ge-drück-teres + nie-der-lie-^^ffest % nie-der-lie^^ffest + nie-der-schie-^^ffest % nie-der-schie^^ffest + nie-der-schmett-re % nie-der-schmettre + non-plus-ul-tra % non-plusul-tra + Rat-schlä-ge % Ratschlä-ge + Rat-schlä-gen % Ratschlä-gen + re-ak-tio-nä-re % re-ak-tio-näre + re-ak-tio-nä-rem % re-ak-tio-närem + re-ak-tio-nä-ren % re-ak-tio-nären + re-ak-tio-nä-rer % re-ak-tio-närer + re-ak-tio-nä-re-re % re-ak-tio-näre-re + re-ak-tio-nä-re-rem % re-ak-tio-näre-rem + re-ak-tio-nä-re-ren % re-ak-tio-näre-ren + re-ak-tio-nä-re-rer % re-ak-tio-näre-rer + re-ak-tio-nä-re-res % re-ak-tio-näre-res + re-ak-tio-nä-res % re-ak-tio-näres + rechts-um % rechtsum + re-in-ve-stiert % rein-ve-stiert + schlaf-lo-se % schlaflo-se + schlaf-lo-sem % schlaflo-sem + schlaf-lo-sen % schlaflo-sen + schlaf-lo-ser % schlaflo-ser + schlaf-lo-ses % schlaflo-ses + über-a^^ff % übera^^ff + über-a^^fft % übera^^fft + über-dachst % überdachst + über-flie-^^ffest % über-flie^^ffest + über-fütt-re % über-füttre + über-gab % übergab + über-ge-blie-be-nen % über-geblie-be-nen + über-gie-^^ffest % über-gie^^ffest + über-klett-re % über-klettre + über-lie-^^ffest % über-lie^^ffest + über-schie-^^ffest % über-schie^^ffest + über-tölp-le % über-tölple + um-gie-^^ffest % um-gie^^ffest + um-rü-stest % um-rüstest + um-schlie-^^ffest % um-schlie^^ffest + un-ab-läs-sig % un-abläs-sig + un-ab-läs-si-ge % un-abläs-si-ge + un-ab-läs-si-gem % un-abläs-si-gem + un-ab-läs-si-gen % un-abläs-si-gen + un-ab-läs-si-ger % un-abläs-si-ger + un-ab-läs-si-ges % un-abläs-si-ges + un-an-ge-brach-te-ren % un-an-ge-brach-teren + un-at-trak-tiv % unat-trak-tiv + un-at-trak-ti-ve % unat-trak-ti-ve + un-at-trak-ti-vem % unat-trak-ti-vem + un-at-trak-ti-ven % unat-trak-ti-ven + un-at-trak-ti-ver % unat-trak-ti-ver + un-at-trak-ti-ve-re % unat-trak-ti-ve-re + un-at-trak-ti-ves % unat-trak-ti-ves + un-at-trak-tiv-ste % unat-trak-tiv-ste + un-at-trak-tiv-stem % unat-trak-tiv-stem + un-at-trak-tiv-sten % unat-trak-tiv-sten + un-at-trak-tiv-ster % unat-trak-tiv-ster + un-at-trak-tiv-stes % unat-trak-tiv-stes + un-be-dach-te-ren % un-be-dach-teren + un-be-herrsch-te-ren % un-be-herrsch-teren + un-be-schei-de-ne-re % un-be-schei-de-nere + un-be-schei-de-ne-rem % un-be-schei-de-nerem + un-be-schei-de-ne-ren % un-be-schei-de-neren + un-be-schei-de-ne-rer % un-be-schei-de-nerer + un-be-schei-de-ne-res % un-be-schei-de-neres + un-be-schränk-te-re % un-be-schränk-tere + un-be-schränk-te-rem % un-be-schränk-terem + un-be-schränk-te-ren % un-be-schränk-teren + un-be-schränk-te-rer % un-be-schränk-terer + un-be-schränk-te-res % un-be-schränk-teres + un-be-wach-te-ren % un-be-wach-teren + un-dich-te-ren % un-dich-teren + un-ech-te-ren % un-ech-teren + un-ent-schie-de-ne-re % un-ent-schie-de-nere + un-ent-schie-de-ne-rem % un-ent-schie-de-nerem + un-ent-schie-de-ne-ren % un-ent-schie-de-neren + un-ent-schie-de-ne-rer % un-ent-schie-de-nerer + un-ent-schie-de-ne-res % un-ent-schie-de-neres + un-er-fah-ren-ste % un-er-fah-renste + un-er-fah-ren-stem % un-er-fah-renstem + un-er-fah-ren-sten % un-er-fah-rensten + un-er-fah-ren-ster % un-er-fah-renster + un-er-fah-ren-stes % un-er-fah-renstes + un-er-reich-te-ren % un-er-reich-teren + un-er-wünsch-te-ren % un-er-wünsch-teren + un-fai-re % un-faire + un-fein-ste % unfein-ste + un-fein-stem % unfein-stem + un-fein-sten % unfein-sten + un-fein-ster % unfein-ster + un-fein-stes % unfein-stes + un-fle-xi-blem % un-fle-xiblem + un-fle-xi-blen % un-fle-xiblen + un-fle-xi-bler % un-fle-xibler + un-fle-xi-ble-re % un-fle-xible-re + un-fle-xi-ble-rem % un-fle-xible-rem + un-fle-xi-ble-ren % un-fle-xible-ren + un-fle-xi-ble-res % un-fle-xible-res + un-fle-xi-bles % un-fle-xibles + un-ge-rech-te-ren % un-ge-rech-teren + un-ge-schick-te-re % un-ge-schick-tere + un-ge-schick-te-rem % un-ge-schick-terem + un-ge-schick-te-ren % un-ge-schick-teren + un-ge-schick-te-rer % un-ge-schick-terer + un-ge-schick-te-res % un-ge-schick-teres + un-ge-woll-te-re % un-ge-woll-tere + un-ge-woll-te-rem % un-ge-woll-terem + un-ge-woll-te-ren % un-ge-woll-teren + un-ge-woll-te-rer % un-ge-woll-terer + un-ge-woll-te-res % un-ge-woll-teres + un-ge-woll-te-ste % un-ge-woll-teste + un-ge-woll-te-stem % un-ge-woll-testem + un-ge-woll-te-sten % un-ge-woll-testen + un-ge-woll-te-ster % un-ge-woll-tester + un-ge-woll-te-stes % un-ge-woll-testes + un-li-mi-tiert % un-limi-tiert + un-li-mi-tier-te % un-limi-tier-te + un-li-mi-tier-tem % un-limi-tier-tem + un-li-mi-tier-ten % un-limi-tier-ten + un-li-mi-tier-ter % un-limi-tier-ter + un-li-mi-tier-tes % un-limi-tier-tes + Un-men-schen % Un-menschen + un-pa-trio-tisch % un-patrio-tisch + un-pa-trio-ti-sche % un-patrio-ti-sche + un-pa-trio-ti-schem % un-patrio-ti-schem + un-pa-trio-ti-schen % un-patrio-ti-schen + un-pa-trio-ti-scher % un-patrio-ti-scher + un-pa-trio-ti-sche-re % un-patrio-ti-sche-re + un-pa-trio-ti-sche-rem % un-patrio-ti-sche-rem + un-pa-trio-ti-sche-ren % un-patrio-ti-sche-ren + un-pa-trio-ti-sche-rer % un-patrio-ti-sche-rer + un-pa-trio-ti-sche-res % un-patrio-ti-sche-res + un-pa-trio-ti-sches % un-patrio-ti-sches + un-pa-trio-tisch-ste % un-patrio-tisch-ste + un-pa-trio-tisch-stem % un-patrio-tisch-stem + un-pa-trio-tisch-sten % un-patrio-tisch-sten + un-pa-trio-tisch-ster % un-patrio-tisch-ster + un-pa-trio-tisch-stes % un-patrio-tisch-stes + un-ser-ei-ner % un-serei-ner + un-ter-brecht % un-terbrecht + un-ter-höh-le % unter-höh-le + un-ter-höh-len % unter-höh-len + un-ter-höh-lend % unter-höh-lend + un-ter-höh-len-de % unter-höh-len-de + un-ter-höh-len-dem % unter-höh-len-dem + un-ter-höh-len-den % unter-höh-len-den + un-ter-höh-len-der % unter-höh-len-der + un-ter-höh-len-des % unter-höh-len-des + un-ter-höhlst % unter-höhlst + un-ter-höhlt % unter-höhlt + un-ter-höhl-te % unter-höhlte + un-ter-höhl-tem % unter-höhltem + un-ter-höhl-ten % unter-höhlten + un-ter-höhl-ter % unter-höhlter + un-ter-höhl-tes % unter-höhltes + un-ter-höhl-test % unter-höhltest + un-ter-höhl-tet % unter-höhltet + un-ter-lie-^^ffest % un-ter-lie^^ffest + un-tie-fer % un-tiefer + un-tie-fe-re % un-tiefe-re + un-tie-fe-rem % un-tiefe-rem + un-tie-fe-ren % un-tiefe-ren + un-tie-fe-rer % un-tiefe-rer + un-tie-fe-res % un-tiefe-res + un-trink-bar % untrink-bar + un-trink-ba-re % untrink-ba-re + un-trink-ba-rem % untrink-ba-rem + un-trink-ba-ren % untrink-ba-ren + un-trink-ba-rer % untrink-ba-rer + un-trink-ba-res % untrink-ba-res + un-trüg-lich % untrüg-lich + un-trüg-li-che % untrüg-li-che + un-trüg-li-chem % untrüg-li-chem + un-trüg-li-chen % untrüg-li-chen + un-trüg-li-cher % untrüg-li-cher + un-trüg-li-ches % untrüg-li-ches + un-ver-fälsch-te-ren % un-ver-fälsch-teren + un-zu-frie-de-ne-re % un-zu-frie-de-nere + un-zu-frie-de-ne-rem % un-zu-frie-de-nerem + un-zu-frie-de-ne-ren % un-zu-frie-de-neren + un-zu-frie-de-ne-rer % un-zu-frie-de-nerer + un-zu-frie-de-ne-res % un-zu-frie-de-neres + ur-äl-te-ste % uräl-te-ste + ur-äl-te-stem % uräl-te-stem + ur-äl-te-sten % uräl-te-sten + ur-äl-te-ster % uräl-te-ster + ur-äl-te-stes % uräl-te-stes + ur-auf-ge-führt % urauf-ge-führt + ur-auf-ge-führ-te % urauf-ge-führ-te + ur-auf-ge-führ-tem % urauf-ge-führ-tem + ur-auf-ge-führ-ten % urauf-ge-führ-ten + ur-auf-ge-führ-ter % urauf-ge-führ-ter + ur-auf-ge-führ-tes % urauf-ge-führ-tes + ver-brecht % verbrecht + ver-breit-re % ver-breitre + ver-darbt % verdarbt + ver-dunk-le % ver-dunkle + ver-fälsch-te-ren % ver-fälsch-teren + ver-flie-^^ffest % ver-flie^^ffest + ver-fluch-te-ren % ver-fluch-teren + ver-fütt-re % ver-füttre + ver-gie-^^ffest % ver-gie^^ffest + ver-hätsch-le % ver-hätschle + ver-hie-^^ffest % ver-hie^^ffest + ver-hind-re % ver-hindre + ver-kör-pe-re % ver-kör-pere + ver-lie-^^ffest % ver-lie^^ffest + ver-lort % verlort + ver-mind-re % ver-mindre + ver-schauk-le % ver-schaukle + ver-schie-^^ffest % ver-schie^^ffest + ver-schlie-^^ffest % ver-schlie^^ffest + ver-starb % verstarb + ver-star-ben % verstar-ben + ver-starbst % verstarbst + ver-starbt % verstarbt + ver-staust % verstaust + ver-steck-te-re % ver-steck-tere + ver-steck-te-rem % ver-steck-terem + ver-steck-te-ren % ver-steck-teren + ver-steck-te-rer % ver-steck-terer + ver-steck-te-res % ver-steck-teres + ver-stie-^^ffest % ver-stie^^ffest + ver-strick-te-re % ver-strick-tere + ver-strick-te-rem % ver-strick-terem + ver-strick-te-ren % ver-strick-teren + ver-strick-te-rer % ver-strick-terer + ver-strick-te-res % ver-strick-teres + ver-zweif-le % ver-zweifle + Ve-te-ran % Ve-teran + voll-auf % vollauf + voll-en-de % vollen-de + voll-en-den % vollen-den + voll-en-dend % vollen-dend + voll-en-den-de % vollen-den-de + voll-en-den-dem % vollen-den-dem + voll-en-den-den % vollen-den-den + voll-en-den-der % vollen-den-der + voll-en-den-des % vollen-den-des + Voll-en-dens % Vollen-dens + voll-en-dest % vollen-dest + voll-en-det % vollen-det + voll-en-de-te % vollen-de-te + voll-en-de-tem % vollen-de-tem + voll-en-de-ten % vollen-de-ten + voll-en-de-ter % vollen-de-ter + voll-en-de-tes % vollen-de-tes + voll-en-de-test % vollen-de-test + voll-en-de-tet % vollen-de-tet + voll-en-det-sten % vollen-det-sten + Voll-en-dung % Vollen-dung + Voll-en-dun-gen % Vollen-dun-gen + vor-aus-ei-le % vor-ausei-le + vor-aus-ei-len % vor-ausei-len + vor-aus-ei-lend % vor-ausei-lend + vor-aus-ei-len-de % vor-ausei-len-de + vor-aus-ei-len-dem % vor-ausei-len-dem + vor-aus-ei-len-den % vor-ausei-len-den + vor-aus-ei-len-der % vor-ausei-len-der + vor-aus-ei-len-des % vor-ausei-len-des + vor-aus-eilst % vor-auseilst + vor-aus-eilt % vor-auseilt + vor-aus-eil-te % vor-auseil-te + vor-aus-eil-ten % vor-auseil-ten + vor-aus-eil-test % vor-auseil-test + vor-aus-eil-tet % vor-auseil-tet + vor-aus-zu-ah-nen % vor-aus-zuah-nen + vor-bei-la^^fft % vor-beila^^fft + vor-bei-schie-^^ffest % vor-bei-schie^^ffest + vor-gauk-le % vor-gaukle + vor-ge-rück-te-ren % vor-ge-rück-teren + vor-ge-strig % vor-gestrig + vor-ge-stri-ge % vor-gestri-ge + vor-ge-stri-gem % vor-gestri-gem + vor-ge-stri-gen % vor-gestri-gen + vor-ge-stri-ger % vor-gestri-ger + vor-ge-stri-ges % vor-gestri-ges + vor-kä-me % vor-käme + Vor-mit-ta-ge % Vor-mit-tage + Vor-mit-ta-gen % Vor-mit-tagen + Vor-mit-ta-ges % Vor-mit-tages + vor-schie-^^ffest % vor-schie^^ffest + vor-zu-mer-ken % vorzu-mer-ken + vor-zu-mer-kend % vorzu-mer-kend + vor-zu-mer-ken-de % vorzu-mer-ken-de + vor-zu-mer-ken-dem % vorzu-mer-ken-dem + vor-zu-mer-ken-den % vorzu-mer-ken-den + vor-zu-mer-ken-der % vorzu-mer-ken-der + vor-zu-mer-ken-des % vorzu-mer-ken-des + vor-zu-täu-schen % vor-zutäu-schen + vor-zu-täu-schend % vor-zutäu-schend + vor-zu-täu-schen-de % vor-zutäu-schen-de + vor-zu-täu-schen-dem % vor-zutäu-schen-dem + vor-zu-täu-schen-den % vor-zutäu-schen-den + vor-zu-täu-schen-der % vor-zutäu-schen-der + vor-zu-täu-schen-des % vor-zutäu-schen-des + weg-schlie-^^ffest % weg-schlie^^ffest + weg-strei-che % wegstrei-che + weg-strei-chen % wegstrei-chen + weg-strei-chend % wegstrei-chend + weg-strei-chen-de % wegstrei-chen-de + weg-strei-chen-dem % wegstrei-chen-dem + weg-strei-chen-den % wegstrei-chen-den + weg-strei-chen-der % wegstrei-chen-der + weg-strei-chen-des % wegstrei-chen-des + weg-streichst % wegstreichst + weg-streicht % wegstreicht + wei-ter-flie-^^ffest % wei-ter-flie^^ffest + wei-ter-zu-ma-chen % wei-terzu-ma-chen + wei-ter-zu-ma-chend % wei-terzu-ma-chend + wei-ter-zu-ma-chen-de % wei-terzu-ma-chen-de + wei-ter-zu-ma-chen-dem % wei-terzu-ma-chen-dem + wei-ter-zu-ma-chen-den % wei-terzu-ma-chen-den + wei-ter-zu-ma-chen-der % wei-terzu-ma-chen-der + wei-ter-zu-ma-chen-des % wei-terzu-ma-chen-des + Welt-all % Weltall + Welt-alls % Weltalls + wett-rü-stest % wett-rüstest + wohl-be-dach-te-ren % wohl-be-dach-teren + zer-brecht % zerbrecht + zer-drück-te-re % zer-drück-tere + zer-drück-te-rem % zer-drück-terem + zer-drück-te-ren % zer-drück-teren + zer-drück-te-rer % zer-drück-terer + zer-drück-te-res % zer-drück-teres + zer-fah-ren-ste % zer-fah-renste + zer-fah-ren-stem % zer-fah-renstem + zer-fah-ren-sten % zer-fah-rensten + zer-fah-ren-ster % zer-fah-renster + zer-fah-ren-stes % zer-fah-renstes + zer-flie-^^ffest % zer-flie^^ffest + zer-knick-te-re % zer-knick-tere + zer-knick-te-rem % zer-knick-terem + zer-knick-te-ren % zer-knick-teren + zer-knick-te-rer % zer-knick-terer + zer-knick-te-res % zer-knick-teres + zer-lie-^^ffest % zer-lie^^ffest + zer-schie-^^ffest % zer-schie^^ffest + zer-schmett-re % zer-schmettre + zer-stie-^^ffest % zer-stie^^ffest + zu-flie-^^ffest % zu-flie^^ffest + zu-flüst-re % zu-flüstre + zu-gabt % zugabt + zu-gie-^^ffest % zu-gie^^ffest + zu-in-nerst % zuin-nerst + zu-läch-le % zu-lächle + zu-lie^^ff % zulie^^ff + zu-lie-^^ffe % zulie-^^ffe + zu-lie-^^ffen % zulie-^^ffen + zu-lie-^^ffest % zulie^^ffest + zu-lie^^fft % zulie^^fft + zu-nä-he % zunä-he + zu-nä-hen % zunä-hen + zu-nä-hend % zunä-hend + zu-nä-hen-de % zunä-hen-de + zu-nä-hen-dem % zunä-hen-dem + zu-nä-hen-den % zunä-hen-den + zu-nä-hen-der % zunä-hen-der + zu-nä-hen-des % zunä-hen-des + zu-nähst % zunähst + zu-näht % zunäht + zu-näh-te % zunäh-te + zu-näh-ten % zunäh-ten + zu-näh-test % zunäh-test + zu-näh-tet % zunäh-tet + zu-rü-stest % zu-rüstest + zu-sam-men-flie-^^ffest % zu-sam-men-flie^^ffest + zu-schie-^^ffest % zu-schie^^ffest + zu-schlie-^^ffest % zu-schlie^^ffest + zwei-fels-oh-ne % zwei-felsoh-ne + zwei-hän-dig % zweihän-dig + zwei-hän-di-ge % zweihän-di-ge + zwei-hän-di-gem % zweihän-di-gem + zwei-hän-di-gen % zweihän-di-gen + zwei-hän-di-ger % zweihän-di-ger + zwei-hän-di-ges % zweihän-di-ges +% +% +% fehlende Trennungen ausgewählter Komposita +% + Arz-nei-schrank % Arzneischrank + Ei-er-uhr % Eier-uhr + Ei-er-uh-ren % Eier-uh-ren + Fach-ärz-te % Fachärz-te + Fach-ärz-ten % Fachärz-ten + Fach-ärz-tin % Fachärz-tin + Fach-ärz-tin-nen % Fachärz-tin-nen + Fern-glä-ser % Fernglä-ser + Fleisch-wolf % Fleischwolf + Froh-na-tur % Frohna-tur + Froh-na-tu-ren % Frohna-tu-ren + fünf-ein-halb % fünfein-halb + Glatt-eis % Glatteis + Glatt-ei-ses % Glattei-ses + Ha-sel-nüs-se % Ha-selnüs-se + Ha-sel-nüs-sen % Ha-selnüs-sen + Haupt-ein-gang % Hauptein-gang + Haupt-ein-gän-ge % Hauptein-gän-ge + Haupt-ein-gän-gen % Hauptein-gän-gen + Haupt-ein-gangs % Hauptein-gangs + him-mel-blaue % him-melblaue + him-mel-blau-em % him-melblau-em + him-mel-blau-en % him-melblau-en + him-mel-blau-er % him-melblau-er + him-mel-blau-es % him-melblau-es + Kehr-sei-te % Kehrsei-te + Kehr-sei-ten % Kehrsei-ten + Kraft-akt % Kraftakt + Lehr-äm-ter % Lehräm-ter + Mai-glöck-chen % Maiglöck-chen + Mai-glöck-chens % Maiglöck-chens + Maul-esel % Maulesel + Maul-eseln % Mauleseln + Maul-esels % Maulesels + Meer-en-gen % Meeren-gen + Wal-nüs-se % Walnüs-se + Wal-nüs-sen % Walnüs-sen +} + +\endgroup + +\endinput + +%%% Local Variables: +%%% mode: tex +%%% coding: latin-1 +%%% End: diff --git a/contrib/groff/tmac/hyphenex.pl b/contrib/groff/tmac/hyphenex.pl index 310f9b0674..7cc546634f 100644 --- a/contrib/groff/tmac/hyphenex.pl +++ b/contrib/groff/tmac/hyphenex.pl @@ -1,4 +1,4 @@ -#! /usr/bin/perl +#! /usr/bin/env perl # # # hyphenex.pl @@ -8,7 +8,7 @@ # # Written by Werner Lemberg . # -# Version 1.1 (2003/04/17) +# Version 1.2 (2007/11/16) # # Public domain. # @@ -19,11 +19,14 @@ # print header print "% Hyphenation exceptions for US English,\n"; -print "% based on the hyphenation exception log article in TUGBoat.\n"; +print "% based on hyphenation exception log articles in TUGboat.\n"; +print "%\n"; +print "% Copyright 2007 TeX Users Group.\n"; +print "% You may freely use, modify and/or distribute this file.\n"; print "%\n"; print "% This is an automatically generated file. Do not edit!\n"; print "%\n"; -print "% Please contact Barbara Beeton \n"; +print "% Please contact the TUGboat editorial staff \n"; print "% for corrections and omissions.\n"; print "\n"; print "\\hyphenation{\n"; diff --git a/contrib/groff/tmac/hyphenex.us b/contrib/groff/tmac/hyphenex.us index 69ca757b3b..1996317e36 100644 --- a/contrib/groff/tmac/hyphenex.us +++ b/contrib/groff/tmac/hyphenex.us @@ -1,36 +1,44 @@ % Hyphenation exceptions for US English, based on the hyphenation exception % log article in TUGBoat. % +% Copyright 2007 TeX Users Group. +% You may freely use, modify and/or distribute this file. +% % This is an automatically generated file. Do not edit! +% +% Please contact Barbara Beeton for corrections and omissions. \hyphenation{ acad-e-my acad-e-mies ac-cu-sa-tive + acro-nym acryl-amide + acryl-amides acryl-alde-hyde add-a-ble add-i-ble adren-a-line aero-space - aero-spaces af-ter-thought af-ter-thoughts agron-o-mist agron-o-mists al-ge-bra-i-cal-ly am-phet-a-mine + am-phet-a-mines an-a-lyse an-a-lysed analy-ses - an-isot-ropy - an-isot-ro-pism an-iso-trop-ic an-iso-trop-i-cal-ly + an-isot-ro-pism + an-isot-ropy anom-aly anom-alies - an-ti-deriv-a-tive - an-ti-deriv-a-tives + anti-deriv-a-tive + anti-deriv-a-tives + anti-holo-mor-phic an-tin-o-my an-tin-o-mies an-ti-nu-clear @@ -41,6 +49,7 @@ ap-pen-dix ar-chi-me-dean ar-chi-pel-ago + ar-chi-pel-a-gos ar-chive ar-chives ar-chiv-ing @@ -49,6 +58,7 @@ ar-che-typ-al ar-che-typ-i-cal arc-tan-gent + arc-tan-gents as-sign-a-ble as-sign-or as-sign-ors @@ -65,11 +75,15 @@ au-to-ma-tion au-tom-a-ton au-tom-a-ta + au-to-num-ber-ing + au-ton-o-mous + auto-round-ing av-oir-du-pois band-leader band-leaders bank-rupt bank-rupt-cy + bank-rupt-cies bar-onies base-line-skip ba-thym-e-try @@ -83,6 +97,7 @@ big-gest bill-able bio-math-e-mat-ics + bio-med-i-cal bio-med-i-cine bio-rhythms bit-map @@ -94,9 +109,15 @@ blue-print blue-prints bo-lom-e-ter + book-sell-er + book-sell-ers + bool-ean + bool-eans bor-no-log-i-cal bot-u-lism brusquer + buf-fer + buf-fers busier busiest bussing @@ -105,6 +126,8 @@ buzz-words ca-coph-o-ny ca-coph-o-nies + call-er + call-ers cam-era-men cart-wheel cart-wheels @@ -114,17 +137,17 @@ cat-e-noid cat-e-noids cau-li-flow-er - cau-li-flow-ers chap-ar-ral - chap-ar-rals char-treuse - char-treuses chemo-ther-apy chemo-ther-a-pies + chloro-meth-ane + chloro-meth-anes cho-les-teric cig-a-rette cig-a-rettes cinque-foil + co-asso-cia-tive co-gnac co-gnacs co-ker-nel @@ -146,19 +169,39 @@ con-trib-ute con-trib-utes con-trib-uted + co-re-la-tion + co-re-la-tions + co-re-li-gion-ist + co-re-li-gion-ists + co-re-op-sis + co-re-spon-dent + co-re-spon-dents co-se-cant co-tan-gent cour-ses + co-work-er + co-work-ers + crank-case crank-shaft croc-o-dile croc-o-diles cross-hatch cross-hatched + cross-over cryp-to-gram cryp-to-grams + cuff-link + cuff-links cu-nei-form - cu-nei-forms + cus-tom-iz-a-ble + cus-tom-ize + cus-tom-izes + cus-tom-ized dachs-hund + dam-sel-fly + dam-sel-flies + ca-coph-o-ny + ca-coph-o-nies dactyl-o-gram dactyl-o-graph data-base @@ -180,13 +223,18 @@ dia-lec-tics dia-lec-ti-cian dia-lec-ti-cians + di-chloro-meth-ane dif-fract + dif-fracts + dif-frac-tion + dif-frac-tions direr dire-ness dis-par-and dis-par-ands dis-traught-ly dis-trib-ute + dis-trib-utes dis-trib-uted dou-ble-space dou-ble-spac-ing @@ -217,6 +265,7 @@ ep-i-neph-rine equi-vari-ant equi-vari-ance + eth-ane eth-yl-ene ever-si-ble evert @@ -225,6 +274,7 @@ evert-ing ex-quis-ite ex-tra-or-di-nary + fall-ing fermi-ons fi-nite-ly fla-gel-lum @@ -233,6 +283,7 @@ fledg-ling flow-chart flow-charts + fluoro-car-bon for-mi-da-ble for-mi-da-bly for-syth-ia @@ -251,14 +302,21 @@ ge-o-det-ic geo-met-ric geo-met-rics + ge-o-strophic + geo-ther-mal ge-ot-ro-pism gno-mon + gno-mons + grand-uncle + grand-uncles griev-ance + griev-ances griev-ous griev-ous-ly hair-style hair-styles hair-styl-ist + hair-styl-ists half-space half-spaces half-way @@ -271,6 +329,8 @@ hemi-demi-semi-qua-vers he-mo-glo-bin he-mo-phil-ia + he-mo-phil-iac + he-mo-phil-iacs hemo-rhe-ol-ogy he-pat-ic her-maph-ro-dite @@ -282,32 +342,43 @@ ho-meo-mor-phism ho-mo-thetic horse-rad-ish + hot-bed + hot-beds + hy-dro-ther-mal hy-po-thal-a-mus ideals ideo-graphs idio-syn-crasy - idio-syn-cras-ies + idio-syn-cra-sies + idio-syn-cratic + idio-syn-crat-i-cal-ly ig-nit-er ig-nit-ers ig-ni-tor ignore-spaces + im-ped-ance im-ped-ances in-du-bi-ta-ble in-fin-ite-ly in-fin-i-tes-i-mal in-fra-struc-ture in-fra-struc-tures + in-stall-er + in-stall-ers in-ter-dis-ci-pli-nary in-ter-ga-lac-tic in-utile in-util-i-ty ir-re-duc-ible + ir-re-duc-ibly ir-rev-o-ca-ble isot-ropy iso-trop-ic itin-er-ary itin-er-ar-ies je-re-mi-ads + key-note + key-notes key-stroke key-strokes kiln-ing @@ -336,8 +407,11 @@ loges long-est lo-quac-ity + love-struck macro-eco-nomics mal-a-prop-ism + mal-a-prop-isms + man-slaugh-ter man-u-script mar-gin-al math-e-ma-ti-cian @@ -351,11 +425,14 @@ meta-bol-ic me-tab-o-lism me-tab-o-lisms + me-tab-o-lite + me-tab-o-lites meta-lan-guage meta-lan-guages meta-phor-ic + meth-ane me-trop-o-lis - me-trop-o-lis-es + me-trop-o-lises met-ro-pol-i-tan met-ro-pol-i-tans micro-eco-nomics @@ -394,7 +471,6 @@ mo-not-o-nies mo-not-o-nous mo-ron-ism - mo-ron-isms mos-qui-to mos-qui-tos mos-qui-toes @@ -406,9 +482,13 @@ neo-fields neo-nazi neo-nazis + neph-ews + neph-rite + neph-ritic new-est news-let-ter news-let-ters + nitro-meth-ane no-name non-ar-ith-met-ic non-emer-gency @@ -427,6 +507,10 @@ nut-crack-er nut-crack-ers oer-steds + off-line + off-load + off-loads + off-loaded oli-gop-o-list oli-gop-o-lists oli-gop-oly @@ -444,7 +528,8 @@ ox-id-ic pad-ding pain-less-ly - palmate + pal-ette + pal-ettes par-a-bola par-a-bol-ic pa-rab-o-loid @@ -479,10 +564,11 @@ phos-phor-ic pho-to-graphs pho-to-off-set - pho-to-off-sets pic-a-dor + pic-a-dors pipe-line pipe-lines + pipe-lin-ing pi-ra-nhas placa-ble plant-hop-per @@ -517,6 +603,8 @@ pre-proces-sor pre-proces-sors pre-split-ting + pre-wrap + pre-wrapped priest-esses pret-ty-prin-ter pret-ty-prin-ting @@ -525,6 +613,15 @@ pro-cur-ance prog-e-nies prog-e-ny + pro-gram-mable + prom-i-nent + pro-mis-cu-ous + prom-is-sory + prom-ise + prom-ises + pro-pel-ler + pro-pel-lers + pro-pel-ling pro-hib-i-tive pro-hib-i-tive-ly pro-sciut-to @@ -537,6 +634,7 @@ prov-ince prov-inces pro-vin-cial + prow-ess pseu-do-dif-fer-en-tial pseu-do-fi-nite pseu-do-fi-nite-ly @@ -560,6 +658,7 @@ quaint-est qua-si-equiv-a-lence qua-si-equiv-a-lences + qua-si-equiv-a-lent qua-si-hy-po-nor-mal qua-si-rad-i-cal qua-si-resid-ual @@ -567,6 +666,7 @@ qua-si-sta-tion-ary qua-si-topos qua-si-tri-an-gu-lar + qua-si-triv-ial quin-tes-sence quin-tes-sences quin-tes-sen-tial @@ -582,10 +682,14 @@ rec-i-proc-i-ty rec-tan-gle rec-tan-gles + rec-tan-gu-lar re-di-rect re-di-rect-ion re-duc-ible re-echo + re-phrase + re-phrases + re-phrased re-po-si-tion re-po-si-tions re-print @@ -596,6 +700,8 @@ re-us-able re-use re-wire + re-wrap + re-wrapped re-write rhi-noc-er-os right-eous @@ -604,6 +710,7 @@ ring-leaders ro-bot ro-bots + ro-botic ro-bot-ics round-table round-tables @@ -625,6 +732,8 @@ school-teach-ers scru-ti-ny scyth-ing + sell-er + sell-ers sec-re-tar-iat sec-re-tar-iats sem-a-phore @@ -663,6 +772,9 @@ sov-er-eigns spa-ces spe-cious + spell-er + spell-ers + spell-ing spe-lunk-er spend-thrift spher-oid @@ -693,34 +805,42 @@ strat-a-gem strat-a-gems stretch-i-er + strip-tease strong-hold strong-est stu-pid-er stu-pid-est sub-dif-fer-en-tial + sub-ex-pres-sion + sub-ex-pres-sions sum-ma-ble super-ego super-egos - su-prema-cist - su-prema-cists + su-prem-a-cist + su-prem-a-cists sur-veil-lance swim-ming-ly symp-to-matic syn-chro-mesh syn-chro-nous syn-chro-tron + taff-rail talk-a-tive ta-pes-try ta-pes-tries tar-pau-lin + tar-pau-lins te-leg-ra-pher + te-leg-ra-phers tele-ki-net-ic + tele-ki-net-ics tele-ro-bot-ics + tell-er + tell-ers tem-po-rar-ily ten-ure test-bed text-width - text-widths thal-a-mus ther-mo-elas-tic time-stamp @@ -740,6 +860,7 @@ tra-vers-a-ble tra-ver-sal tra-ver-sals + tri-ethyl-amine treach-eries trou-ba-dour tur-key @@ -753,9 +874,10 @@ un-friend-li-er vaguer vaude-ville - vaude-villes vic-ars vil-lain-ess + vis-ual + vis-ual-ly vi-vip-a-rous voice-print vspace @@ -765,6 +887,7 @@ warm-est waste-water wave-guide + wave-guides wave-let wave-lets web-like @@ -777,6 +900,8 @@ white-space white-spaces wide-spread + wing-span + wing-spans wing-spread witch-craft word-spac-ing @@ -791,6 +916,8 @@ al-ge-brai-sche Al-le-ghe-ny Ar-kan-sas + ATP-ase + ATP-ases Aus-tral-asian auto-mati-sier-ter Be-die-nung @@ -805,7 +932,9 @@ Char-lottes-ville Co-lum-bia Czecho-slo-va-kia + Del-a-ware Dijk-stra + Duane dy-na-mi-sche Eng-lish Euler-ian @@ -813,18 +942,25 @@ Feb-ru-ary Fest-schrift Flor-i-da + Flor-i-d-ian For-schungs-in-sti-tut + Free-BSD funk-tsional Gauss-ian + Ghost-script + Ghost-View + Grass-mann-ian Greifs-wald Grothen-dieck Grund-leh-ren + Ha-da-mard Hai-fa Hamil-ton-ian Hel-sinki Her-mit-ian Hibbs Hok-kai-do + Jac-kow-ski Jan-u-ary Ja-pa-nese Kad-om-tsev @@ -839,25 +975,37 @@ Leices-ter Lip-schitz Lip-schitz-ian + Loj-ban Lou-i-si-ana + Mac-OS Man-ches-ter Mar-kov-ian Markt-ober-dorf Mass-a-chu-setts + Max-well + Mi-cro-soft Min-ne-ap-o-lis Min-ne-sota Mos-cow Nach-richten Nash-ville + Net-BSD + Net-scape Nij-me-gen Noe-ther-ian Noord-wijker-hout No-vem-ber + Open-BSD + Open-Office + Pala-tino Pa-ler-mo Pe-trov-ski + Pfaff-ian Phil-a-del-phia + phil-o-soph-i-sche Poin-care Po-ten-tial-glei-chung + Ra-dha-krish-nan raths-kel-ler Rie-mann-ian Ryd-berg @@ -872,6 +1020,7 @@ Tau-ber-ian tech-ni-sche Ten-nes-see + To-ma-szew-ski ty-po-graphique Ukrain-ian ver-all-ge-mein-erte @@ -880,6 +1029,7 @@ viiith viith Wahr-schein-lich-keits-theo-rie + Wer-ner Wer-ther-ian Win-ches-ter Wirt-schaft diff --git a/contrib/groff/tmac/papersize.tmac b/contrib/groff/tmac/papersize.tmac index 57403491ce..f74a1965af 100644 --- a/contrib/groff/tmac/papersize.tmac +++ b/contrib/groff/tmac/papersize.tmac @@ -94,8 +94,10 @@ . ds paper-ledger-width 17i . ds paper-statement-length 8.5i . ds paper-statement-width 5.5i -. ds paper-executive-length 10i -. ds paper-executive-width 7.5i +. \" These dimensions for executive paper format is what all +. \" printer manufacturers use. +. ds paper-executive-length 10.5i +. ds paper-executive-width 7.25i . . ds paper-com10-length 9.5i . ds paper-com10-width 4.125i @@ -150,7 +152,8 @@ . ie \n[paper-w] \ . tm warning: Unknown paper size `\*[paper]' . el \ -. if !r LL .nr LL \n[.l]u \" for ms, mdoc, man +. if !r LL \ +. nr LL \n[.l]u \" for ms, mdoc, man .\} . .cp \n[_C] diff --git a/contrib/groff/tmac/ps.tmac b/contrib/groff/tmac/ps.tmac index 39d4318264..52f9975be3 100644 --- a/contrib/groff/tmac/ps.tmac +++ b/contrib/groff/tmac/ps.tmac @@ -681,9 +681,6 @@ . .cp \n[_C] . -.if !\n(.C \ -. mso pspic.tmac -. .do ie '\[char97]'a' \ . do mso latin1.tmac .el \ diff --git a/contrib/groff/tmac/pspic.tmac b/contrib/groff/tmac/pspic.tmac index 9fe7e3eb1a..436650332e 100644 --- a/contrib/groff/tmac/pspic.tmac +++ b/contrib/groff/tmac/pspic.tmac @@ -2,36 +2,53 @@ .\" .\" Define the PSPIC macro. .\" -.\" When used other than with -Tps, -Tdvi, or -Thtml it will draw a box +.\" When used other than with -Tps, -Tdvi, -Thtml, or -Txhtml it draws a box .\" around where the picture would go. +.\" +.\" Usage: +.\" +.\" .PSPIC [-L|-R|-C|-I ] [ []] +. +.do if d PSPIC .nx +. +.nr _C \n(.C +.cp 0 . .de PSPIC . nr ps-offset-mode 0 +. \" left-aligned? . ie '\\$1'-L' \{\ . nr ps-offset-mode 1 . shift . HTML-DO-IMAGE \\$1 l . \} . el \{\ +. \" right-aligned? . ie '\\$1'-R' \{\ . nr ps-offset-mode 2 . shift . HTML-DO-IMAGE \\$1 r . \} . el \{\ +. \" indented? . ie '\\$1'-I' \{\ . nr ps-offset-mode 3 . nr ps-offset (m;\\$2) . shift 2 . HTML-DO-IMAGE \\$1 i . \} -. el \ +. el \{\ +. \" centered is the default +. if '\\$1'-C' \ +. shift . HTML-DO-IMAGE \\$1 c +. \} . \} . \} . . br . +. \" get bounding box . psbb \\$1 . if (\\n[llx] : \\n[lly] : \\n[urx] : \\n[ury]) \{\ . nr ps-wid (\\n[urx] - \\n[llx]) @@ -40,22 +57,37 @@ . nr ps-wid (-\\n[ps-wid]) . if (\\n[ps-ht] < 0) \ . nr ps-ht (-\\n[ps-ht]) +. +. \" if we have a parameter, use it as the final +. \" image width; otherwise we use the image's natural width +. \" or the current line length, whatever is smaller . ie (\\n[.$] >= 2) \ . nr ps-deswid (i;\\$2) . el \ . nr ps-deswid ((\\n[.l] - \\n[.i]) parameter, use it as the final +. \" image height in case it is smaller than the height +. \" value we have just computed . if ((\\n[.$] >= 3) & (\\n[ps-desht] > (i;0\\$3))) \{\ . nr ps-desht (i;\\$3) +. \" recompute the final image width since we always +. \" keep the correct image aspect . nr ps-deswid (\\n[ps-desht] * 1000 + (\\n[ps-ht] / 2) \ / \\n[ps-ht] * \\n[ps-wid] \ + 500 / 1000) . \} . +. \" reserve vertical space for image . ne (\\n[ps-desht]u + 1v) . +. \" compute image offset w.r.t. the current left margin . if (\\n[ps-offset-mode] == 0) \ . nr ps-offset (\\n[.l] - \\n[.i] - \\n[ps-deswid] / 2) . if (\\n[ps-offset-mode] == 1) \ @@ -64,6 +96,7 @@ . nr ps-offset (\\n[.l] - \\n[.i] - \\n[ps-deswid]) . . ie '\*[.T]'dvi' \{\ +. \" prepare values for \special{psfile=...} as needed by dvips . ie (\\n[ps-wid]p == \\n[ps-deswid]) \{\ . ds ps-scale \" empty . ds ps-hoffset hoffset=-\\n[llx] @@ -83,18 +116,41 @@ \X'psfile=\\$1 \\*[ps-hoffset] \\*[ps-voffset] \\*[ps-scale]' . \} . el \{\ +. ie '\*[.T]'ps' \{\ +. \" prepare values for grops; the `ps-invis' and `ps-endinvis' escapes +. \" are for groff's -X switch to provide a PS preview with xditview: +. \" it uses -Tps for formatting but xditview can't handle EPS files, +. \" thus alternative code is enclosed between those two escapes +. ds ps-invis \X'ps: invis' +. ds ps-endinvis \X'ps: endinvis' +. ds ps-import \X'ps: import \E$1 \En[llx] \En[lly] \En[urx] \En[ury] \ + \En[ps-deswid] \E*[ps-desht]' +. \} +. el \{\ +. ds ps-invis +. ds ps-endinvis +. ds ps-import +. \} +. . ie (\\n[.$] >= 3) \ . ds ps-desht \\n[ps-desht] . el \ . ds ps-desht \" empty . \h'\\n[ps-offset]u'\ -\X'ps: invis'\ -\Z'\D'p 0 \\n[ps-desht]u \\n[ps-deswid]u 0 0 -\\n[ps-desht]u''\ -\X'ps: endinvis'\ +\\*[ps-invis]\ +\# horizontally, the rectangle is slightly smaller than the image +\# to compensate the line thickness (especially needed for TTY devices) +\Z'\D'p 0 \\n[ps-desht]u \ + (\\n[ps-deswid]u - \\n[.H]u) 0 \ + 0 -\\n[ps-desht]u''\ +\# for convenience we also display the image file name (centered vertically); +\Z'\v'((\\n[ps-desht]u / 2u) \ + + (\w'\\$1'u * 0) \ + + ((\\n[rst]u + \\n[rsb]u) / 2u))'\h'1m'\\$1'\ +\\*[ps-endinvis]\ \v'\\n[ps-desht]u'\ -\X'ps: import \ - \\$1 \\n[llx] \\n[lly] \\n[urx] \\n[ury] \\n[ps-deswid] \\*[ps-desht]' +\\*[ps-import] . \} . . br @@ -103,4 +159,6 @@ . HTML-IMAGE-END .. . +.cp \n[_C] +. .\" end of pspic.tmac diff --git a/contrib/groff/tmac/ptx.tmac b/contrib/groff/tmac/ptx.tmac new file mode 100644 index 0000000000..f8d4da3922 --- /dev/null +++ b/contrib/groff/tmac/ptx.tmac @@ -0,0 +1,40 @@ +.\" ptx.tmac +.\" +.\" Provide `.xx' macro to format permuted index entries as created +.\" by GNU ptx. +.\" +.\" Written 2008 by Werner Lemberg (wl@gnu.org) +.\" +.\" Public domain. +. +.nr ptx-ref-pos (\n[.l] - .65i) +.nr ptx-head-pos (\n[ptx-ref-pos] / 2) +. +.ds ptx-sep-2 " \" +.ds ptx-sep-4 " \" +.ds ptx-sep-5 " \" +. +. +.de xx +. ds ptx-sep-1 +. if \w\\$2 \ +. ds ptx-sep-1 " \|\" +. +. ds ptx-sep-3 +. if \w\\$4 \ +. ds ptx-sep-3 " \|\" +. +. ds ptx-filler \\*[ptx-sep-4]\f3\a\fP\\*[ptx-sep-5] +. ta (\\n[ptx-ref-pos]u - \w\\*[ptx-sep-5]u) +. +\h(\\n[ptx-head-pos]u - \w\\$1\\*[ptx-sep-1]\\$2\\*[ptx-sep-2]u)\ +\\$1\\*[ptx-sep-1]\ +\\$2\\*[ptx-sep-2]\ +\\$3\\*[ptx-sep-3]\ +\\$4\\*[ptx-filler]\ +\\$5 +.. +. +.nf +. +.\" eof diff --git a/contrib/groff/tmac/s.tmac b/contrib/groff/tmac/s.tmac index 7927c233d5..bbfe996c0d 100644 --- a/contrib/groff/tmac/s.tmac +++ b/contrib/groff/tmac/s.tmac @@ -3,7 +3,8 @@ s.tmac -Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004 +Copyright (C) 1989, 1990, 1991, 1992, 2001, 2002, 2003, 2004, 2006, 2007, + 2009 Free Software Foundation, Inc. Written by James Clark (jjc@jclark.com) @@ -11,17 +12,16 @@ This file is part of groff. groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License along -with groff; see the file COPYING. If not, write to the Free Software -Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. +You should have received a copy of the GNU General Public License +along with this program. If not, see . .. .if !\n(.g .ab These ms macros require groff. .if \n(.C \ @@ -77,7 +77,7 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. .ds MONTH10 October .ds MONTH11 November .ds MONTH12 December -.ds MO \\*[MONTH\n[mo]] +.ds MO \E*[MONTH\n[mo]] .ds DY \n[dy] \*[MO] \n[year] .de ND .if \\n[.$] .ds DY "\\$* @@ -134,7 +134,15 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. .als AI cov*err-not-before-tl .als AB cov*err-not-before-tl .de cov*first-page-init +.\" Invoked by `.wh 0' trap on first page. +.\" We should not come here again, but at short page length, +.\" recursion may occur; remove trap and macro to avoid it. +.ch cov*first-page-init .rm cov*first-page-init +.if !'\\n[.ev]'0' \{\ +. @error must be in top-level environment, not `\\n[.ev]', +. @error when first page is started +.\} .par@init .als RP cov*err-not-after-first-page .@init @@ -213,6 +221,7 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. . ps \\n[PS] .\} .. +. .de LP .if !'\\n[.z]'' \{\ . br @@ -221,8 +230,9 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. .br .cov*ab-init .cov*print -\\*[\\$0]\\ +.nop \\*[\\$0]\\ .. +. .als IP LP .als PP LP .als XP LP @@ -233,6 +243,7 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. .als MC LP .als RT LP .als XS LP +. .de cov*ab-init .als cov*ab-init @nop .als LP @LP @@ -257,6 +268,7 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. .als AI par@AI .als TL par@TL .. +. .de @AB .if !'\\n(.z'' \{\ . br @@ -272,8 +284,8 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. .par@reset .if !'\\$1'no' \{\ . if '\*(.T'html' \{\ -. nf -. sp +. nf +. sp . \} . ft I . ce 1 @@ -334,7 +346,7 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. .cov*tl-au-print .sp 3 .if d cov*ab-div \{\ -. if !'\*(.T'html' . nf +. if !'\*(.T'html' .nf . cov*ab-div .\} .sp 3 @@ -445,12 +457,12 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. .ds CF .ds RF .ds LH -.ds CH -\\n[PN]- +.ds CH -\En[PN]- .ds RH -.ds pg*OH '\\*[LH]'\\*[CH]'\\*[RH]' -.ds pg*EH '\\*[LH]'\\*[CH]'\\*[RH]' -.ds pg*OF '\\*[LF]'\\*[CF]'\\*[RF]' -.ds pg*EF '\\*[LF]'\\*[CF]'\\*[RF]' +.ds pg*OH '\E*[LH]'\E*[CH]'\E*[RH]' +.ds pg*EH '\E*[LH]'\E*[CH]'\E*[RH]' +.ds pg*OF '\E*[LF]'\E*[CF]'\E*[RF]' +.ds pg*EF '\E*[LF]'\E*[CF]'\E*[RF]' .de OH .ds pg*\\$0 "\\$* .. @@ -470,7 +482,11 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. .. .nr pg*P1 0 .de P1 -.nr pg*P1 1 +.ie r bell_localisms \{\ +. DS L +. ft CW +.\} +.el .nr pg*P1 1 .. .wh -\n[FM]u pg@bottom .wh -\n[FM]u/2u pg*footer @@ -632,7 +648,7 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. .ev .nr fn*text-num 0 1 .nr fn*note-num 0 1 -.ds * \\*[par@sup-start]\En+[fn*text-num]\\*[par@sup-end] +.ds * \E*[par@sup-start]\En+[fn*text-num]\E*[par@sup-end] .nr fn*open 0 .\" normal FS .de @FS @@ -1448,9 +1464,9 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. .\" par*define-font-macro macro font .de par*define-font-macro .de \\$1 -.ie \\\\n[.$] \{\ -. nr par*prev-font \\\\n[.f] -\&\\\\$3\f[\\$2]\\\\$1\f[\\\\n[par*prev-font]]\\\\$2 +.ie \En[.$] \{\ +. nr par*prev-font \En[.f] +\&\E$3\f[\\$2]\E$1\f[\En[par*prev-font]]\E$2 .\} .el .ft \\$2 \\.. @@ -1530,6 +1546,16 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. .\" Numbered headings. .\" nh*hl is the level of the last heading .nr nh*hl 0 +.\" SN-DOT and SN-NO-DOT represent the section number of +.\" the current heading, with and without a terminating dot. +.ds SN-DOT +.ds SN-NO-DOT +.\" SN-STYLE sets the statement numbering style used in headings +.\" (either SN-DOT or SN-NO-DOT); for backward compatibility with +.\" earlier ms versions, the default is SN-DOT +.als SN-STYLE SN-DOT +.\" Also for backward compatibility, let SN represent SN-DOT. +.als SN SN-DOT .\" numbered heading .de @NH .ie '\\$1'S' \{\ @@ -1573,12 +1599,11 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. . as SN-NO-DOT .\\n[H\\n[nh*i]] .\} .ds SN-DOT \\*[SN-NO-DOT]. -.if !dSN .als SN SN-DOT .nr sh*psincr (\\n[GROWPS]-\\n[nh*hl])*\\n[PSINCR] .SH-NO-TAG .DEVTAG-NH "\\$1" . if '\*(.T'html' .nr need_eo_h 1 -\\*[SN-DOT] +\\*[SN-STYLE] .. .\" **************************** .\" ******** module toc ******** @@ -1670,12 +1695,16 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. .\} .di eqn*div .in 0 -.if \\n[eqn*type]=0 .HTML-IMAGE-LEFT +.if '\*(.T'html' \{\ +. nr eqn*ll \\n[.l] +. ll 1000n +.\} +.if \\n[eqn*type]=0 .EQN-HTML-IMAGE-LEFT .if \\n[eqn*type]=1 \{\ . if '\*(.T'html' .RS -. HTML-IMAGE-INLINE +.EQN-HTML-IMAGE-INLINE .\} -.if \\n[eqn*type]=2 .HTML-IMAGE +.if \\n[eqn*type]=2 .EQN-HTML-IMAGE .nf .. .de @div-end!eqn*div @@ -1690,7 +1719,7 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. . nr eqn*have-num 0 . if !'\\*[eqn*num]'' .nr eqn*have-num 1 . ie \\n[dl]:\\n[eqn*have-num] \{\ -. sp \\n[DD]u +. sp \\n[DD]u . par@reset . ds eqn*tabs \\n[.tabs] . nf @@ -1698,8 +1727,8 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. .\" --fixme-- this really should not be necessary .\" and indicates that there is extra space creeping into .\" an equation when ps4html is enabled.. -. ie r ps4html .ds@need \\n[dn]u-1v+\n[.V]u+1i -. el .ds@need \\n[dn]u-1v+\n[.V]u +. ie r ps4html .ds@need \\n[dn]u-1v+\n[.V]u+1i +. el .ds@need \\n[dn]u-1v+\n[.V]u . chop eqn*div . ie \\n[eqn*type]=0 \{\ . ta (u;\\n[.l]-\\n[.i])R @@ -1717,26 +1746,29 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. . ta (u;\\n[.l]-\\n[.i])R \t\\*[eqn*num] . \} -.\". if !'\*(.T'html' .sp \\n[DD]u -. sp \\n[DD]u +.\". if !'\*(.T'html' .sp \\n[DD]u +. sp \\n[DD]u . ta \\*[eqn*tabs] . \} . el \{ .\" must terminate empty equations in html and ps4html as they contain -.\" the HTML-IMAGE-END suppression nodes +.\" the EQN-HTML-IMAGE-END suppression nodes . if \\n[dl] .chop eqn*div . if '\*(.T'html' \\*[eqn*div] . if r ps4html \\*[eqn*div] . \} . if !'\*(.T'html' .fi -. if \\n[eqn*type]=0 .HTML-IMAGE-END +. if \\n[eqn*type]=0 .EQN-HTML-IMAGE-END . if \\n[eqn*type]=1 \{\ -. HTML-IMAGE-END +. EQN-HTML-IMAGE-END . if '\*(.T'html' .RE . \} -. if \\n[eqn*type]=2 .HTML-IMAGE-END +. if \\n[eqn*type]=2 .EQN-HTML-IMAGE-END +. if '\*(.T'html' \ +. ll \\n[eqn*ll]u .\} .. +. .\" **************************** .\" ******** module tbl ******** .\" **************************** @@ -1751,6 +1783,10 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. .de @TS .sp \\n[DD]u .if '\\$1'H' .di tbl*header-div +.if '\*(.T'html' \{\ +. nr tbl*ll \\n[.l] +. ll 1000n +.\} .HTML-IMAGE .. .de tbl@top-hook @@ -1795,7 +1831,9 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. . nr tbl*have-header 0 . if !'\*(.T'html' .sp \\n[DD]u .\} -. HTML-IMAGE-END +.HTML-IMAGE-END +.if '\*(.T'html' \ +. ll \\n[tbl*ll]u .\" reset tabs .TA .. @@ -1861,9 +1899,9 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. .rm [F [T1 [T2 .. .\" start of reference number -.ds [. \\*[par@sup-start] +.ds [. \E*[par@sup-start] .\" end of reference number -.ds .] \\*[par@sup-end] +.ds .] \E*[par@sup-end] .\" period before reference .ds <. . .\" period after reference @@ -1917,67 +1955,69 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. .el .ds ref*string .. .de ref*add-T1 -.ref*field T , "\fI" "" "\fP" +.ref*field T , " " "\fI" "" "\fP" .if r [T .nr ref*suppress-period \\n([T .. .de ref*add-T2 -.ref*field T , "\\*Q" "" "\\*U" +.ref*field T , " " "\\*Q" "" "\\*U" .if r [T .nr ref*suppress-period \\n([T .. .de ref*add-P -.ie \\n([P>0 .ref*field P , "pp. " -.el .ref*field P , "p. " +.ie \\n([P>0 .ref*field P , " " "pp. " +.el .ref*field P , " " "p. " .. .de ref*add-J -.ref*field J , \fI "" \fP +.ref*field J , " " \fI "" \fP .. .de ref*add-D -.ref*field D "" ( ) +.ref*field D "" " " ( ) .. .de ref*add-E -.ref*field E , "ed. " +.ref*field E , " " "ed. " .. .de ref*add-G -.ref*field G "" ( ) +.ref*field G "" " " ( ) .. .de ref*add-B -.ref*field B "" "in \fI" "" \fP +.ref*field B "" " " "in \fI" "" \fP .. .de ref*add-O -.ref*field O . +.ref*field O . " " .ie r [O .nr ref*suppress-period \\n([O .el .nr ref*suppress-period 1 .. .de ref*add-A -.ref*field A , +.ref*field A , " " .if r [A .nr ref*suppress-period \\n([A .. .de ref*add-V -.ref*field V "" \fB \fR +.ref*field V "" " " \fB \fR .. .de ref*add-N -.ref*field N \z( "" ")" +.ref*field N "" ( "" ")" .. .de ref*add-dflt -.ref*field \\$1 , +.ref*field \\$1 , " " .. .\" First argument is the field letter. .\" Second argument is the punctuation character to use to separate this field .\" from the previous field. -.\" Third argument is a string with which to prefix this field. -.\" Fourth argument is a string with which to postfix this field. -.\" Fifth argument is a string to add after the punctuation character supplied +.\" Third argument is a string to insert after the punctuation character of +.\" the previous field (normally a space) +.\" Fourth argument is a string with which to prefix this field. +.\" Fifth argument is a string with which to postfix this field. +.\" Sixth argument is a string to add after the punctuation character supplied .\" by the next field. .de ref*field .if d ref*string \{\ . ie d ref*post-punct \{\ -. as ref*string "\\$2\\*[ref*post-punct] \" +. as ref*string "\\$2\\*[ref*post-punct]\\$3\" . rm ref*post-punct . \} -. el .as ref*string "\\$2 \" +. el .as ref*string "\\$2\\$3\" .\} -.as ref*string "\\$3\\*([\\$1\\$4 -.if \\n[.$]>4 .ds ref*post-punct "\\$5 +.as ref*string "\\$4\\*([\\$1\\$5 +.if \\n[.$]>5 .ds ref*post-punct "\\$6 .nr ref*suppress-period 0 .. .\" **************************** @@ -2026,7 +2066,7 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. .acc*under-def . \s[\En[.s]*8u/10u]\v'.2m'.\v'-.2m'\s0 .acc*under-def hook \(ho .acc*slash-def / / -.char \[hooko] o\\\\*[hook] +.char \[hooko] o\E*[hook] .ds q \[hooko] .ds 3 \[yogh] .ds D- \(-D\" Icelandic uppercase eth @@ -2042,35 +2082,50 @@ Foundation, 51 Franklin St - Fifth Floor, Boston, MA 02110-1301, USA. .ds ! \(r!\" upside down ! .. .de CHECK-FOOTER-AND-KEEP -.\" it might be better to als FS -> B1 and FE -> B2 -.\" however this produced wierd results, so I've moved back to a more reliable -.\" but less interesting solution --fixme-- -. if '\*(.T'html' \{\ -. rm KF -. als KF KS -. rm FS -. de FS -. br -. HTML-IMAGE -\\.. -. rm FE -. de FE -. br -. HTML-IMAGE-END -\\.. -. \} -. if r ps4html \{\ -. rm FS -. de FS -. br -. HTML-IMAGE +.if '\*(.T'html' \{\ +. rm KF +. als KF KS +. +. rm FS +. de FS +. sp +. HTML-NS \\.. -. rm FE -. de FE -. br -. HTML-IMAGE-END +. rm FE +. de FE +. HTML-NS +. sp \\.. -. \} +.\} .. .par@load-init +.\" **************************** +.\" ******** module bell ******** +.\" **************************** +.\" Emulate Bell Labs localisms. Note, (a) they're not documented, and +.\" (b) the .P1 and .UC macros collide with different ones in Berkeley ms. +.\" We hack around this by conditionalizing the behavior of P1; UC was +.\" not defined by groff and will be a no-op if called Berkeley style +.\" with no arguments, so there is no problem with hijacking it here. +.\" +.\" What's done here is sufficient to give back the Guide to EQN (1976) its +.\" section headings and restore some text that had gone missing as macro +.\" arguments; no warranty express or implied is given as to how well the +.\" typographic details these produce match the original Bell Labs macros. +.\" +.\" P1 is now defined in module pg. +.de SC +.nr bell_localisms 1 +.NH +\\$* +.. +.de UC +.if r bell_localisms \f(CW\\$*\fP +.. +.de P2 +.if r bell_localisms \{\ +. ft +. DE +.\} +.. .\" Make sure that no blank lines creep in at the end of this file. diff --git a/contrib/groff/tmac/strip.sed b/contrib/groff/tmac/strip.sed index 069c3db1fa..0bb59f8f04 100644 --- a/contrib/groff/tmac/strip.sed +++ b/contrib/groff/tmac/strip.sed @@ -1,8 +1,10 @@ -# strip comments, spaces, etc. after a line containing `%beginstrip%' +# strip comments, spaces, etc., after a line containing `%beginstrip%' /%beginstrip%/,$ { s/^\.[ ]*/./ s/^\.\\".*/./ + s/^\\#.*/./ s/\\".*/\\"/ + s/\\#.*/\\/ /\(.[ad]s\)/!s/[ ]*\\"// /\(.[ad]s\)/s/\([^ ]*\)\\"/\1/ s/\([^/]\)doc-/\1/g diff --git a/contrib/groff/tmac/sv.tmac b/contrib/groff/tmac/sv.tmac new file mode 100644 index 0000000000..a033d2f752 --- /dev/null +++ b/contrib/groff/tmac/sv.tmac @@ -0,0 +1,145 @@ +.\" -*- mode: nroff; coding: iso-latin-1; -*- +.\" +.\" Swedish localization for groff +.\" +.\" Copyright (C) 2006, 2009 Free Software Foundation, Inc. +.\" Written by Werner Lemberg (wl@gnu.org) +.\" +.\" This file is part of groff. +.\" +.\" groff is free software; you can redistribute it and/or modify it under +.\" the terms of the GNU General Public License as published by the Free +.\" Software Foundation, either version 3 of the License, or +.\" (at your option) any later version. +.\" +.\" groff is distributed in the hope that it will be useful, but WITHOUT ANY +.\" WARRANTY; without even the implied warranty of MERCHANTABILITY or +.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +.\" for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program. If not, see . +.\" +.\" Please send comments to groff@gnu.org. +. +. +.\" Locale string +. +.ds locale swedish\" +. +. +.\" Predefined text translations +. +.ds \*[locale]-abstract ABSTRAKT\" +.ds \*[locale]-app Bilaga\" +.ds \*[locale]-april april\" +.ds \*[locale]-attribute_string av\" +.ds \*[locale]-august augusti\" +.ds \*[locale]-chapter_string Kapitel\" +.ds \*[locale]-december december\" +.ds \*[locale]-draft_string Utkast\" +.ds \*[locale]-endnote_string NOTER\" +.ds \*[locale]-february februari\" +.ds \*[locale]-finis_string SLUT\" +.ds \*[locale]-friday fredag\" +.ds \*[locale]-january januari\" +.ds \*[locale]-july juli\" +.ds \*[locale]-june juni\" +.ds \*[locale]-le Ekvationer\" +.ds \*[locale]-letapp Godk\[a :]nd av:\" +.ds \*[locale]-letat ATTENTION:\" +.ds \*[locale]-letcn KONFIDENTIELLT\" +.ds \*[locale]-letdate datum\" +.ds \*[locale]-letfc V\[a :]nliga h\[a :]lsningar\" +.ds \*[locale]-letns!0 Kopia till\" +.ds \*[locale]-letns!1 Kopia (med att.) till\" +.ds \*[locale]-letns!10 Kopia (med atts.) till\" +.ds \*[locale]-letns!11 Kopia (utan atts.) till\" +.ds \*[locale]-letns!12 Endast abstract till\" +.ds \*[locale]-letns!13 Hela dokumentet till\" +.ds \*[locale]-letns!14 CC: +.ds \*[locale]-letns!2 Kopia (utan att.) till\" +.ds \*[locale]-letns!3 Att.\" +.ds \*[locale]-letns!4 Atts.\" +.ds \*[locale]-letns!5 Enc.\" +.ds \*[locale]-letns!6 Encs.\" +.ds \*[locale]-letns!7 Annat f\[o :]rs\[a :]ttsblad\" +.ds \*[locale]-letns!8 Brev till\" +.ds \*[locale]-letns!9 Dokument till\" +.ds \*[locale]-letns!copy Kopia \" space! +.ds \*[locale]-letns!to " till\" +.ds \*[locale]-letrn Refererande till:\" +.ds \*[locale]-letsa Till vederb\[o :]rande:\" +.ds \*[locale]-letsj Inneh\[a ao]ll:\" +.ds \*[locale]-lf Figurer\" +.ds \*[locale]-licon Inneh\[a ao]llsf\[o :]rteckning\" +.ds \*[locale]-liec \Ekvation\" +.ds \*[locale]-liex Uppst\[a :]llning\" +.ds \*[locale]-lifg Figur\" +.ds \*[locale]-litb Tabell\" +.ds \*[locale]-lt Tabeller\" +.ds \*[locale]-lx Uppst\[a :]llningar\" +.ds \*[locale]-march mars\" +.ds \*[locale]-may maj\" +.ds \*[locale]-monday m\[a ao]ndag\" +.ds \*[locale]-november november\" +.ds \*[locale]-october oktober\" +.ds \*[locale]-paper A4\" +.ds \*[locale]-qrf Se kapitel \\*[Qrfh], sidan \\*[Qrfp].\" +.ds \*[locale]-references Referenser\" +.ds \*[locale]-revision_string Ver.\" +.ds \*[locale]-rp Referenser\" +.ds \*[locale]-saturday l\[o :]rdag\" +.ds \*[locale]-september september\" +.ds \*[locale]-sunday s\[o :]ndag\" +.ds \*[locale]-thursday torsdag\" +.ds \*[locale]-toc Inneh\[a ao]ll\" +.ds \*[locale]-toc_header_string Inneh\[a ao]ll\" +.ds \*[locale]-tuesday tisdag\" +.ds \*[locale]-wednesday onsdag\" +. +. +.\" Activate the translations +. +.mso trans.tmac +. +. +.\" ms package +.if r GS \{\ +. \" update the date +. ds DY \n[dy] \*[MO] \n[year] +. \" set hyphenation flags +. nr HY 8 +.\} +. +. +.\" mm package -- additional Swedish localization is done in mse.tmac +. +. +.\" me package +.if d @R \{\ +. \" date update +. ds td \n(dy \*(mo \n(y4 +.\} +. +. +.\" Default encoding +.mso latin1.tmac +. +. +.\" Swedish hyphenation +.ss 12 0 +.hy 8 +.hcode å å Å å +.hcode ä ä Ä ä +.hcode ö ö Ö ö +.hcode é é É é +. +.hla sv +.hpf hyphen.sv +. +. +.\" man, mdoc and mdoc-old are intentionally left untouched: +.\" usually these packages are translated in the sources of the documents. +. +.\" end of sv.tmac diff --git a/contrib/groff/tmac/trace.tmac b/contrib/groff/tmac/trace.tmac index 286c605b87..9de7936748 100644 --- a/contrib/groff/tmac/trace.tmac +++ b/contrib/groff/tmac/trace.tmac @@ -1,109 +1,341 @@ .\" trace.tmac .\" .\" Load this before a macro package that you want to trace. +.\" +.\" +.\" Copyright (C) 1989, 1990, 1991, 1992, 2000, 2002, 2003, 2004, 2006, +.\" 2007, 2008, 2009 +.\" Free Software Foundation, Inc. +.\" Written by James Clark (jjc@jclark.com) +.\" +.\" This file is part of groff. +.\" +.\" groff is free software; you can redistribute it and/or modify it under +.\" the terms of the GNU General Public License as published by the Free +.\" Software Foundation, either version 3 of the License, or +.\" (at your option) any later version. +.\" +.\" groff is distributed in the hope that it will be useful, but WITHOUT ANY +.\" WARRANTY; without even the implied warranty of MERCHANTABILITY or +.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +.\" for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program. If not, see . +.\" +. +. +.\" Tracing within groff means replacing the original macros or requests +.\" with special versions which act as wrappers to emit tracing information. +.\" A natural consequence of creating such wrappers is that arguments must +.\" be expanded once more. In most cases it doesn't matter, however, +.\" sometimes it makes a difference. +.\" +.\" To limit side effects, only macros are traced by default, together +.\" with some requests like `.return' which don't take (user) arguments. +.\" If you want more tracing, especially of number and string register +.\" assignments, add the `-r trace-full=1' command line option. +. +. +.\" Regarding the usage of `.do': All lines of macros which should +.\" work in compatibility mode must be protected if they contain +.\" GNU troff extensions and are defined with `.de'. Example: `.ds', +.\" but not `.ds1', since the latter can't be called in compatibility +.\" mode. +. +. +.do if d !!!sp \ +. nx . .nr _C \n(.C .cp 0 . -.do ds !!sp " \" +.ds !!!sp " \" +. +.de !!c +.. +. +. +.eo +. +.rn return !!return +. +.de1 return +. tm1 "\*[!!!sp]*** return +. !!return twice +.. +. +.ec +. +.ie r trace-full \{\ +. eo +. +. rn nr !!nr +. +. de nr +. do ecs +. ec +. do !!nr \$* +. do tm1 "\*[!!!sp]*** .nr \$* (-> \n[\$1]) +. do ecr +. . +. +. rn ds !!ds +. rn ds1 !!ds1 +. rn as !!as +. rn as1 !!as1 +. +. de ds +. do ecs +. ec +. do tm1 "\*[!!!sp]*** .ds \$^ +. do !!ds \$^\" +. do ecr +. . +. +. de1 ds1 +. ecs +. ec +. tm1 "\*[!!!sp]*** .ds1 \$^ +. !!ds1 \$^\" +. ecr +. . +. +. de as +. do ecs +. ec +. do tm1 "\*[!!!sp]*** .as \$^ +. do !!as \$^\" +. do ecr +. . +. +. de1 as1 +. ecs +. ec +. tm1 "\*[!!!sp]*** .as1 \$^ +. !!as1 \$^\" +. ecr +. . +. +. rn substring !!substring +. +. de1 substring +. ecs +. ec +. !!substring \$* +. tm1 "\*[!!!sp]*** .substring \$* (-> `\*[\$1]') +. ecr +. . +. +. rn so !!so +. +. de so +. do ecs +. ec +. do tm1 "\*[!!!sp]*** .so \$* { +. do !!as !!!sp " \" +. do ecr +. do !!so \$* +. do ecs +. ec +. do !!substring !!!sp 1 +. do tm1 "\*[!!!sp]*** } +. do ecr +. . +. +. !!c We must use `.de' for the redefinition of .mso to avoid +. !!c side effects; for example, it might be called with +. !!c `.do mso ...'. +. +. rn mso !!mso +. +. de mso +. do ecs +. ec +. do tm1 "\*[!!!sp]*** .mso \$* { +. do !!as !!!sp " \" +. do ecr +. do !!mso \$* +. do ecs +. ec +. do !!substring !!!sp 1 +. do tm1 "\*[!!!sp]*** } +. do ecr +. . +. +. ec +.\} +.el \{\ +. als !!ds ds +. als !!as as +. als !!substring substring +.\} +. . .eo . -.rn de !!de -.rn de1 !!de1 +.rn als !!als +. +.de1 als +. ecs +. ec +. !!als \$* +. if d !!\$2 \ +. !!als !!\$1 !!\$2 +. tm1 "\*[!!!sp]*** .als \$* +. ecr +.. +. +.rn rm !!rm +. +.de1 rm +. ecs +. ec +. !!rm \$* +. if d !!\$1 \ +. !!rm !!\$1 +. tm1 "\*[!!!sp]*** .rm \$* +. ecr +.. +. +.rn rn !!rn +. +.de rn +. do ecs +. ec +. do !!rn \$* +. do if d !!\$1 \ +. !!rn !!\$1 !!\$2 +. do tm1 "\*[!!!sp]*** .rn \$* +. do ecr +.. +. +.!!c Now the central tracing macros. The redefined `de' macros +.!!c create wrapper macros `foo' which emit tracing messages +.!!c before and after the call to the traced macro `!!foo'. +.!!c +.!!c Note that we define `!!foo' in advance so that an alias to +.!!c `!!!!foo' is possible. The latter occurs if `foo' is +.!!c called as \\[foo]. +.!!c +.!!c The call to `dei' must be the last instruction in the macro +.!!c (since it continues the definition of the macro to trace). . +.!!rn de !!de +.!!rn de1 !!de1 . .!!de de . do ecs . ec . do !!de \$1 -. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** de trace enter: \\$0 \\$@ -. el .do tm1 "\\*[!!sp]*** de trace enter \$1: \\$0 \\$@ -. do as !!sp " \" -. do nop \\*[!!\$1]\\ -. do substring !!sp 1 -. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** trace exit: \\$0 \\$@ -. el .do tm1 "\\*[!!sp]*** trace exit \$1: \\$0 \\$@ +. do ie \\n[.br] .do !!ds !!!br .\" +. el .do !!ds !!!br '\" +. ie "\$1"\\$0" .do tm1 "\\*[!!!sp]*** de trace enter: \\*[!!!br]\\$0 \\$@ +. el .do tm1 "\\*[!!!sp]*** de trace enter \$1: \\*[!!!br]\\$0 \\$@ +. do !!as !!!sp " \" +. +. do nop \\*[!!\\$0]\\ +. +. do !!substring !!!sp 1 +. do ie \\n[.br] .do !!ds !!!br .\" +. el .do !!ds !!!br '\" +. ie "\$1"\\$0" .do tm1 "\\*[!!!sp]*** trace exit: \\*[!!!br]\\$0 \\$@ +. el .do tm1 "\\*[!!!sp]*** trace exit \$1: \\*[!!!br]\\$0 \\$@ \.. . -. do ds !!d1 !!\$1 -. do ds !!d2 \$2 +. do tm1 "\*[!!!sp]*** .de \$* . +. do !!ds !!d1 !!\$1\" +. do !!ds !!d2 \$2\" . do ecr . do dei !!d1 !!d2 .. . -.!!de de1 -. do ecs +.!!de1 de1 +. ecs . ec -. do !!de \$1 -. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** de1 trace enter: \\$0 \\$@ -. el .do tm1 "\\*[!!sp]*** de1 trace enter \$1: \\$0 \\$@ -. do as !!sp " \" -. do nop \\*[!!\$1]\\ -. do substring !!sp 1 -. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** trace exit: \\$0 \\$@ -. el .do tm1 "\\*[!!sp]*** trace exit \$1: \\$0 \\$@ +. !!de1 \$1 +. ie \\n[.br] .!!ds !!!br .\" +. el .!!ds !!!br '\" +. ie "\$1"\\$0" .tm1 "\\*[!!!sp]*** de1 trace enter: \\*[!!!br]\\$0 \\$@ +. el .tm1 "\\*[!!!sp]*** de1 trace enter \$1: \\*[!!!br]\\$0 \\$@ +. !!as !!!sp " \" +. +. nop \\*[!!\\$0]\\ +. +. !!substring !!!sp 1 +. ie \\n[.br] .!!ds !!!br .\" +. el .!!ds !!!br '\" +. ie "\$1"\\$0" .tm1 "\\*[!!!sp]*** trace exit: \\*[!!!br]\\$0 \\$@ +. el .tm1 "\\*[!!!sp]*** trace exit \$1: \\*[!!!br]\\$0 \\$@ \.. . -. do ds !!d1 !!\$1 -. do ds !!d2 \$2 +. tm1 "\*[!!!sp]*** .de1 \$* . -. do ecr -. do dei1 !!d1 !!d2 +. !!ds !!d1 !!\$1\" +. !!ds !!d2 \$2\" +. ecr +. dei1 !!d1 !!d2 .. . -.rn am !!am -.rn am1 !!am1 +.!!rn am !!am +.!!rn am1 !!am1 . .!!de am . do ecs . ec . do !!de \$1 -. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** am trace enter: \\$0 \\$@ -. el .do tm1 "\\*[!!sp]*** am trace enter \$1: \\$0 \\$@ -. do as !!sp " \" -. do nop \\*[!!\$1]\\ -. do substring !!sp 1 -. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** trace exit: \\$0 \\$@ -. el .do tm1 "\\*[!!sp]*** trace exit \$1: \\$0 \\$@ +. do ie \\n[.br] .do !!ds !!!br .\" +. el .do !!ds !!!br '\" +. ie "\$1"\\$0" .do tm1 "\\*[!!!sp]*** am trace enter: \\*[!!!br]\\$0 \\$@ +. el .do tm1 "\\*[!!!sp]*** am trace enter \$1: \\*[!!!br]\\$0 \\$@ +. do !!as !!!sp " \" +. +. do nop \\*[!!\\$0]\\ +. +. do !!substring !!!sp 1 +. do ie \\n[.br] .do !!ds !!!br .\" +. el .do !!ds !!!br '\" +. ie "\$1"\\$0" .do tm1 "\\*[!!!sp]*** trace exit: \\*[!!!br]\\$0 \\$@ +. el .do tm1 "\\*[!!!sp]*** trace exit \$1: \\*[!!!br]\\$0 \\$@ \.. . -. do ds !!a1 !!\$1 -. do ds !!a2 \$2 +. do tm1 "\*[!!!sp]*** .am \$* . +. do !!ds !!a1 !!\$1\" +. do !!ds !!a2 \$2\" . do ecr . do ami !!a1 !!a2 .. . -.!!de am1 -. do ecs +.!!de1 am1 +. ecs . ec -. do !!de \$1 -. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** am1 trace enter: \\$0 \\$@ -. el .do tm1 "\\*[!!sp]*** am1 trace enter \$1: \\$0 \\$@ -. do as !!sp " \" -. do nop \\*[!!\$1]\\ -. do substring !!sp 1 -. ie "\$1"\\$0" .do tm1 "\\*[!!sp]*** trace exit: \\$0 \\$@ -. el .do tm1 "\\*[!!sp]*** trace exit \$1: \\$0 \\$@ -\.. +. !!de1 \$1 +. ie \\n[.br] .!!ds !!!br .\" +. el .!!ds !!!br '\" +. ie "\$1"\\$0" .tm1 "\\*[!!!sp]*** am1 trace enter: \\*[!!!br]\\$0 \\$@ +. el .tm1 "\\*[!!!sp]*** am1 trace enter \$1: \\*[!!!br]\\$0 \\$@ +. !!as !!!sp " \" . -. do ds !!a1 !!\$1 -. do ds !!a2 \$2 +. nop \\*[!!\\$0]\\ . -. do ecr -. do ami1 !!a1 !!a2 -.. +. !!substring !!!sp 1 +. ie \\n[.br] .!!ds !!!br .\" +. el .!!ds !!!br '\" +. ie "\$1"\\$0" .tm1 "\\*[!!!sp]*** trace exit: \\*[!!!br]\\$0 \\$@ +. el .tm1 "\\*[!!!sp]*** trace exit \$1: \\*[!!!br]\\$0 \\$@ +\.. . -.rn return !!return +. tm1 "\*[!!!sp]*** .am1 \$* . -.!!de1 return -. substring !!sp 1 -. tm1 "\*[!!sp]*** return -. !!return twice +. !!ds !!a1 !!\$1\" +. !!ds !!a2 \$2\" +. ecr +. ami1 !!a1 !!a2 .. . +. .ec . .cp \n(_C diff --git a/contrib/groff/tmac/trans.tmac b/contrib/groff/tmac/trans.tmac new file mode 100644 index 0000000000..8f09d6fddd --- /dev/null +++ b/contrib/groff/tmac/trans.tmac @@ -0,0 +1,141 @@ +.\" -*- mode: nroff; -*- +.\" +.\" Localization for groff +.\" +.\" Copyright (C) 2006, 2009 Free Software Foundation, Inc. +.\" Written by Fabrice Ménard (menard.fabrice@wanadoo.fr) +.\" +.\" This file is part of groff. +.\" +.\" groff is free software; you can redistribute it and/or modify it under +.\" the terms of the GNU General Public License as published by the Free +.\" Software Foundation, either version 3 of the License, or +.\" (at your option) any later version. +.\" +.\" groff is distributed in the hope that it will be useful, but WITHOUT ANY +.\" WARRANTY; without even the implied warranty of MERCHANTABILITY or +.\" FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +.\" for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program. If not, see . +.\" +.\" Please send comments to menard.fabrice@wanadoo.fr. +. +. +.\" This file translates some predefined strings used in the packages +.\" distributed with groff. The translations are actually done in locale +.\" specific files (for example, fr.tmac for French) which are also +.\" responsible for defining the string locale (`.ds locale french'). +.\" +.\" trans.tmac should stay locale-independent. +. +.\" ms package +.if r GS \{\ +. als ABSTRACT \*[locale]-abstract +. als MONTH1 \*[locale]-january +. als MONTH10 \*[locale]-october +. als MONTH11 \*[locale]-november +. als MONTH12 \*[locale]-december +. als MONTH2 \*[locale]-february +. als MONTH3 \*[locale]-march +. als MONTH4 \*[locale]-april +. als MONTH5 \*[locale]-may +. als MONTH6 \*[locale]-june +. als MONTH7 \*[locale]-july +. als MONTH8 \*[locale]-august +. als MONTH9 \*[locale]-september +. als REFERENCES \*[locale]-references +. als TOC \*[locale]-toc +.\} +. +.\" mm package +.if d PH \{\ +. als App \*[locale]-app +. als cov*abs-name \*[locale]-abstract +. als Le \*[locale]-le +. als LetAT \*[locale]-letat +. als LetCN \*[locale]-letcn +. als LetRN \*[locale]-letrn +. als LetSA \*[locale]-letsa +. als LetSJ \*[locale]-letsj +. als Letapp \*[locale]-letapp +. als Letdate \*[locale]-letdate +. als Letfc \*[locale]-letfc +. als Letns!0 \*[locale]-letns!0 +. als Letns!1 \*[locale]-letns!1 +. als Letns!10 \*[locale]-letns!10 +. als Letns!11 \*[locale]-letns!11 +. als Letns!12 \*[locale]-letns!12 +. als Letns!13 \*[locale]-letns!13 +. als Letns!14 \*[locale]-letns!14 +. als Letns!2 \*[locale]-letns!2 +. als Letns!3 \*[locale]-letns!3 +. als Letns!4 \*[locale]-letns!4 +. als Letns!5 \*[locale]-letns!5 +. als Letns!6 \*[locale]-letns!6 +. als Letns!7 \*[locale]-letns!7 +. als Letns!8 \*[locale]-letns!8 +. als Letns!9 \*[locale]-letns!9 +. als Letns!copy \*[locale]-letns!copy +. als Letns!to \*[locale]-letns!to +. als Lf \*[locale]-lf +. als Licon \*[locale]-licon +. als Liec \*[locale]-liec +. als Liex \*[locale]-liex +. als Lifg \*[locale]-lifg +. als Litb \*[locale]-litb +. als Lt \*[locale]-lt +. als Lx \*[locale]-lx +. als MO1 \*[locale]-january +. als MO10 \*[locale]-october +. als MO11 \*[locale]-november +. als MO12 \*[locale]-december +. als MO2 \*[locale]-february +. als MO3 \*[locale]-march +. als MO4 \*[locale]-april +. als MO5 \*[locale]-may +. als MO6 \*[locale]-june +. als MO7 \*[locale]-july +. als MO8 \*[locale]-august +. als MO9 \*[locale]-september +. als Qrf \*[locale]-qrf +. als Rp \*[locale]-rp +.\} +. +.\" me package +.if d @R \{\ +. if \n[dw]=1 .als dw \*[locale]-sunday +. if \n[dw]=2 .als dw \*[locale]-monday +. if \n[dw]=3 .als dw \*[locale]-tuesday +. if \n[dw]=4 .als dw \*[locale]-wednesday +. if \n[dw]=5 .als dw \*[locale]-thursday +. if \n[dw]=6 .als dw \*[locale]-friday +. if \n[dw]=7 .als dw \*[locale]-saturday +. if \n[mo]=1 .als mo \*[locale]-january +. if \n[mo]=2 .als mo \*[locale]-february +. if \n[mo]=3 .als mo \*[locale]-march +. if \n[mo]=4 .als mo \*[locale]-april +. if \n[mo]=5 .als mo \*[locale]-may +. if \n[mo]=6 .als mo \*[locale]-june +. if \n[mo]=7 .als mo \*[locale]-july +. if \n[mo]=8 .als mo \*[locale]-august +. if \n[mo]=9 .als mo \*[locale]-september +. if \n[mo]=10 .als mo \*[locale]-october +. if \n[mo]=11 .als mo \*[locale]-november +. if \n[mo]=12 .als mo \*[locale]-december +.\} +. +.\" mom package +.if d ALIAS \{\ +. ATTRIBUTE_STRING "\*[\*[locale]-attribute_string]" +. CHAPTER_STRING "\*[\*[locale]-chapter_string]" +. DRAFT_STRING "\*[\*[locale]-draft_string]" +. ENDNOTE_STRING "\*[\*[locale]-endnote_string]" +. FINIS_STRING "\*[\*[locale]-finis_string]" +. PAPER "\*[\*[locale]-paper]" +. REVISION_STRING "\*[\*[locale]-revision_string]" +. TOC_HEADER_STRING "\*[\*[locale]-toc_header_string]" +.\} +. +.\" end of trans.tmac diff --git a/contrib/groff/tmac/troffrc b/contrib/groff/tmac/troffrc index d73ace35f6..470f26279e 100644 --- a/contrib/groff/tmac/troffrc +++ b/contrib/groff/tmac/troffrc @@ -27,7 +27,8 @@ .do rm troffrc!ps troffrc!Xps troffrc!dvi troffrc!X75 troffrc!X75-12 \ troffrc!X100 troffrc!X100-12 troffrc!lj4 troff!lbp troffrc!html . -.\" test whether we work under EBCDIC +.\" Test whether we work under EBCDIC and map the no-breakable space +.\" character accordingly. .do ie '\[char97]'a' \ . do tr \[char160]\~ .el \ @@ -40,7 +41,10 @@ troffrc!X100 troffrc!X100-12 troffrc!lj4 troff!lbp troffrc!html .do hpf hyphen.us .do hpfa hyphenex.us . -.\" Handle paper formats +.\" Handle paper formats. .do mso papersize.tmac . +.\" Handle PS images. +.do mso pspic.tmac +. .\" Don't let blank lines creep in here. diff --git a/contrib/groff/tmac/troffrc-end b/contrib/groff/tmac/troffrc-end index 53f1bef50c..d8ff8b0d18 100644 --- a/contrib/groff/tmac/troffrc-end +++ b/contrib/groff/tmac/troffrc-end @@ -8,12 +8,19 @@ .do if r ps4html .do mso www.tmac . .\" for all other devices blank out these macros -.do if !d HTML-IMAGE-INLINE .do ds HTML-IMAGE-INLINE -.do if !d HTML-IMAGE .do ds HTML-IMAGE -.do if !d HTML-IMAGE-RIGHT .do ds HTML-IMAGE-RIGHT -.do if !d HTML-IMAGE-LEFT .do ds HTML-IMAGE-LEFT -.do if !d HTML-IMAGE-END .do ds HTML-IMAGE-END -.do if !d DEVTAG .do ds DEVTAG -.do if !d HTML-DO-IMAGE .do ds HTML-DO-IMAGE +.do if !d HTML-IMAGE-INLINE .do ds HTML-IMAGE-INLINE +.do if !d HTML-IMAGE .do ds HTML-IMAGE +.do if !d HTML-IMAGE-RIGHT .do ds HTML-IMAGE-RIGHT +.do if !d HTML-IMAGE-LEFT .do ds HTML-IMAGE-LEFT +.do if !d HTML-IMAGE-END .do ds HTML-IMAGE-END +.do if !d DEVTAG .do ds DEVTAG +.do if !d HTML-DO-IMAGE .do ds HTML-DO-IMAGE +.do if !d EQN-HTML-IMAGE-END .do ds EQN-HTML-IMAGE-END +.do if !d EQN-HTML-IMAGE .do ds EQN-HTML-IMAGE +.do if !d EQN-HTML-IMAGE-RIGHT .do ds EQN-HTML-IMAGE-RIGHT +.do if !d EQN-HTML-IMAGE-LEFT .do ds EQN-HTML-IMAGE-LEFT +.do if !d EQN-HTML-IMAGE-INLINE .do ds EQN-HTML-IMAGE-INLINE +.do if !d EQN-HTML-DO-IMAGE .do ds EQN-HTML-DO-IMAGE +.do if !d EQN-HTML-IMAGE-END .do ds EQN-HTML-IMAGE-END . .\" Don't let blank lines creep in here. diff --git a/contrib/groff/tmac/unicode.tmac b/contrib/groff/tmac/unicode.tmac index 6c015b2aa2..4b389a7a96 100644 --- a/contrib/groff/tmac/unicode.tmac +++ b/contrib/groff/tmac/unicode.tmac @@ -1,3 +1,6 @@ .\" unicode.tmac .\" +.char - \[hy] +.char ` \[oq] +.char ' \[cq] .\" EOF diff --git a/contrib/groff/tmac/www.tmac b/contrib/groff/tmac/www.tmac index 5dcbd1eea7..2c6ddd2005 100644 --- a/contrib/groff/tmac/www.tmac +++ b/contrib/groff/tmac/www.tmac @@ -10,14 +10,15 @@ Installed position: groff's main macro directory. This file is part of groff, the GNU roff type-setting system. -Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2008, 2009 + Free Software Foundation, Inc. written by Gaius Mulley , with additions by Werner Lemberg and Bernd Warken . groff is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free -Software Foundation; either version 2, or (at your option) any later -version. +Software Foundation, either version 3 of the License, or +(at your option) any later version. groff is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or @@ -25,19 +26,19 @@ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with groff; see the file COPYING. If not, write to the Free -Software Foundation, 51 Franklin St - Fifth Floor, Boston, MA -02110-1301, USA. +along with this program. If not, see . ------------------------------------------------------------------------ Description ------------------------------------------------------------------------ -A simple set of macros to provide HTML documents with basic -www functionality. It should work with any macro set. +A simple set of macros to provide HTML (or XHTML) documents with basic +www functionality. It should work with any macro set. In the following, +HTML always denotes XHTML also. .. . +. .\" -------------------------------------------------------------------- .\" Setup .\" -------------------------------------------------------------------- @@ -50,8 +51,14 @@ www functionality. It should work with any macro set. .cp 0 . . +.ie r xhtml \ +. ds www-> />\" +.el \ +. ds www-> >\" +. .nr www-html 0 -.if '\*[.T]'html' .nr www-html 1 +.if '\*[.T]'html' \ +. nr www-html 1 . .\" set up www-image-template . @@ -59,7 +66,7 @@ www functionality. It should work with any macro set. . ds www-image-template . .if r ps4html \{\ -. \" remove the title command when we are generating images for html +. \" remove the title command when we are generating images for HTML . \" (stops a title accidentally appearing inside an image) . di www-notitle . tl '''' @@ -114,20 +121,23 @@ www functionality. It should work with any macro set. .\" Space before paragraph. Use \n[PD] if it exists. .\" .nr www:pd 0.5v +. .de www:paraspace -. ie r PD .sp \\n[PD]u -. el .sp \\n[www:pd]u +. ie r PD \ +. sp \\n[PD]u +. el \ +. sp \\n[www:pd]u .. . -.\" .\" -------------------------------------------------------------------- .\" www:error (...) .\" -.\" Print error message +.\" Print error message. .\" .de www-error . tm \\n[.F]:\\n[.c]: macro error: \\$* .. +. .als www:error www-error . .\" -------------------------------------------------------------------- @@ -142,9 +152,10 @@ www functionality. It should work with any macro set. . ab . \} . length \\$0:n x\\*[\\$2] -. nr \\$1 (\\n[\\$0:n]-1) +. nr \\$1 (\\n[\\$0:n] - 1) . rr \\$0:n .. +. .\" -------------------------------------------------------------------- .\" www:splitstr () .\" @@ -157,29 +168,29 @@ www functionality. It should work with any macro set. . www:error .\\$0 expects 1 argument. . if '\\*[\\$1]'' \ . return -. ds \\$0:r "\\*[\\$1]\"" -. ds \\$0:s\" +. ds \\$0:r "\\*[\\$1]\" +. ds \\$0:s . while 1 \{\ -. ds \\$0:c "\\*[\\$0:r]\"" -. substring \\$0:c 0 0\" +. ds \\$0:c "\\*[\\$0:r]\" +. substring \\$0:c 0 0 . ie '\\*[\\$0:c]' ' \ -. as \\$0:s " space\"" +. as \\$0:s " space\" . el \ -. as \\$0:s " \\*[\\$0:c]\"" +. as \\$0:s " \\*[\\$0:c]\" . www:lenstr \\$0:n \\$0:r -. if (\\n[\\$0:n] <= 1) \{\ +. if (\\n[\\$0:n] <= 1) \ . break -. \} -. substring \\$0:r 1 -1\" +. substring \\$0:r 1 -1 . \} . if !'\\*[\\$0:s]'' \ . substring \\$0:s 1 -1 -. ds \\$1 \\*[\\$0:s] +. ds \\$1 \\*[\\$0:s]\" . rm \\$0:c . rr \\$0:n . rm \\$0:r . rm \\$0:s .. +. .\" -------------------------------------------------------------------- .\" www:url_breaks () .\" @@ -194,44 +205,43 @@ www functionality. It should work with any macro set. . www:error .\\$0 expects 1 argument. . if !\n[www:substring_ok] \ . return -. ds \\$0:s "\\*[\\$1]\"" +. ds \\$0:s "\\*[\\$1]\" . www:splitstr \\$0:s -. www:url_breaks_splitted \\$0:s \\*[\\$0:s] -. ds \\$1 "\\*[\\$0:s]\"" +. www:url_breaks_split \\$0:s \\*[\\$0:s] +. ds \\$1 "\\*[\\$0:s]\" . rm \\$0:s .. +. .\" -------------------------------------------------------------------- -.\" www:url_breaks_splitted ( [...]) +.\" www:url_breaks_split ( [...]) .\" -.\" Add `\:' within URL strings, but arguments are a splitted string. +.\" Add `\:' within URL strings, but arguments are a split string. .\" .\" Arguments: >=2: [...] .\" -.de www:url_breaks_splitted +.de www:url_breaks_split . nr \\$0:min 5 \" minimal number of characters for next line . if (\\n[.$] < 2) \ . www:error .\\$0 expects at least 2 arguments. . ds \\$0:res \\$1\" . shift -. ds \\$0:s\" +. ds \\$0:s . nr \\$0:done 0 . while !\\n[\\$0:done] \{\ -. if (\\n[.$] <= 0) \{\ -. nr \\$0:done 1 +. if (\\n[.$] <= 0) \ . break -. \} . if '\\$1'space' \{\ -. as \\$0:s " \"" +. as \\$0:s " \" . shift . continue . \} . if (\\n[.$] < \\n[\\$0:min]) \{\ -. as \\$0:s "\\$1\"" +. as \\$0:s "\\$1\" . shift . continue . \} . if !'\\$1'/' \{\ -. as \\$0:s "\\$1\"" +. as \\$0:s "\\$1\" . shift . continue . \} @@ -256,6 +266,8 @@ www functionality. It should work with any macro set. . rm \\$0:res . rm \\$0:s .. +. +. .\" -------------------------------------------------------------------- .\" User Interface .\" -------------------------------------------------------------------- @@ -263,7 +275,7 @@ www functionality. It should work with any macro set. .\" -------------------------------------------------------------------- .\" HTML .\" -.\" the main auxiliary macro for the HTML interface +.\" The main auxiliary macro for the HTML interface. .\" .de HTML . if \\n[www-html] \{\ @@ -277,21 +289,48 @@ www functionality. It should work with any macro set. . nop \& . \} .. +. .\" -.\" an auxiliary macro for HTML (without following space) +.\" An auxiliary macro for HTML (without following space). .\" .de HTML-NS . nop \X^html:\\$*^\c .. +. .\" -.\" emit a HTML tag after shutting down a (possibly open) paragraph +.\" Emit an HTML tag after shutting down a (possibly open) paragraph. .\" .de HTML

    -. if \\n[www-html] \{\ +. ie \\n[www-html] \{\ . \" the `\&' makes the vertical mode leave, so to say . nop \&\X^html

    :\\$*^ . \} +. el \ +. www:paraspace +.. +. +.\" +.\" Emit an HTML tag. If text has been written in the paragraph +.\" then do not shut the paragraph down. +.\" If text was not written, remove the empty +.\" paragraph tag and emit the desired HTML tag. +.\" +.de HTML +. if \\n[www-html] \ +. nop \&\X^html:\\$*^ +.. +. +.\" +.\" Emit a MATH tag. If text has been written in the paragraph +.\" then do not shut the paragraph down. +.\" If text was not written, remove the empty +.\" paragraph tag and emit the desired math tag. +.\" +.de MATH +. if \\n[www-html] \ +. nop \&\X^math:\\$*^ .. +. .\" -------------------------------------------------------------------- .\" HX n .\" @@ -305,77 +344,119 @@ www functionality. It should work with any macro set. . if \\n[www-html] \ . nop \X^index:\\$*^ .. +. .\" -------------------------------------------------------------------- .\" BCL foreground background active not-visited visited .\" .de BCL -. HTML +. HTML " .. +. .\" -------------------------------------------------------------------- .\" BGIMG imagefile .\" .de BGIMG -. HTML +. HTML " +.. +. +.\" www:url_check_tag str +.\" If url named by \*[str] is internal (starts with #), +.\" redefine \*[str] to be the value of the string TAG_url. +. +.de www:url_check_tag +. ds \\$0:tmp \\*[\\$1]\" +. substring \\$0:tmp 0 0 +. if '\\*[\\$0:tmp]'#' \{\ +. ds \\$0:tmp \\*[\\$1]\" +. substring \\$0:tmp 1 +. ds \\$0:tmp TAG_\\*[\\$0:tmp]\" +. +. ie d \\*[\\$0:tmp] \ +. ds \\$1 \\*[\\*[\\$0:tmp]]\" +. el \ +. ds \\$1 see below\" +. \} +. rm \\$0:tmp .. +. .\" -------------------------------------------------------------------- .\" URL url [description] [after] -.\" if description is absent then the url becomes the anchor text +.\" +.\" If description is absent then the url becomes the anchor text. .\" .de URL -. ie !'\\$1'' \{\ +. if !'\\$1'' \{\ . ds \\$0:adr \\$1\" -. www:url_breaks \\$0:adr +. www:url_check_tag \\$0:adr +. if !\\n[www-html] \ +. www:url_breaks \\$0:adr . \} . ie \\n[www-html] \{\ . ie '\\$3'' \ -. ds \\$0:after \& +. ds \\$0:after \&\" . el \ -. ds \\$0:after \&\\$3 +. ds \\$0:after \&\\$3\" +. . ie '\\$2'' \ -. HTML-NS \\$1 +. HTML-NS \\*[\\$0:adr]" . el \ -. HTML-NS \\$2 +. HTML-NS \\$2" +. . nop \\*[\\$0:after] . rm \\$0:after . \} . el \{\ -. if !r ps4html .ad l +. if !r ps4html \ +. ad l +. . ie '\\$2'' \{\ . ie '\\$1'' \{\ -. ie !'\\$3'' \ +. if !'\\$3'' \ . nop \\$3 . \} . el \{\ . ie \\n[.color] \ -. nop \%\[la]\m[blue]\f[C]\\*[\\$0:adr]\f[]\m[]\[ra]\\$3 +. nop \%\\*[www:open]\m[\\*[www:color]]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\m[]\\*[www:close]\\$3 . el \ -. nop \%\[la]\f[CB]\\*[\\$0:adr]\f[]\[ra]\\$3 +. nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\\*[www:close]\\$3 . \} . \} . el \{\ . ie '\\$1'' \{\ . ie \\n[.color] \ -. nop \m[blue]\\$2\m[]\\$3 +. nop \m[\\*[www:color]]\\$2\m[]\\$3 . el \ -. nop \f[B]\\$2\f[]\\$3 +. nop \f[\\*[www:fontstyle]]\\$2\f[]\\$3 . \} . el \{\ -. ie \\n[.color] \ -. nop \m[blue]\\$2\m[] \%\[la]\f[C]\\*[\\$0:adr]\f[]\[ra]\\$3 -. el \ -. nop \f[B]\\$2\f[] \%\[la]\f[C]\\*[\\$0:adr]\f[]\[ra]\\$3 +. ie \\n[.color] \{\ +. nop \m[\\*[www:color]]\\$2\m[] +. nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\\*[www:close]\\$3 +. \} +. el \{\ +. nop \f[\\*[www:fontstyle]]\\$2\f[] +. nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\\*[www:close]\\$3 +. \} . \} . \} -. if !r ps4html .ad +. +. if !r ps4html \ +. ad . \} . rm \\$0:adr .. +. .\" -------------------------------------------------------------------- .\" FTP url description [after] .\" .\" Same as URL. .\" .als FTP URL +. .\" -------------------------------------------------------------------- .\" MTO address description [after] .\" @@ -407,39 +488,50 @@ www functionality. It should work with any macro set. . \} . el \{\ . ie \\n[.color] \ -. nop \%\m[blue]\f[C]\\$1\f[]\m[]\\$3 +. nop \%\m[\\*[www:color]]\f[\\*[www:fontstyle]]\\$1\f[]\m[]\\$3 . el \ -. nop \%\f[CB]\\$1\f[]\\$3 +. nop \%\f[\\*[www:fontstyle]]\\$1\f[]\\$3 . \} . \} . el \{\ . ie '\\$1'' \{\ . ie \\n[.color] \ -. nop \m[blue]\\$2\m[]\\$3 +. nop \m[\\*[www:color]]\\$2\m[]\\$3 . el \ -. nop \f[B]\\$2\f[]\\$3 +. nop \f[\\*[www:fontstyle]]\\$2\f[]\\$3 . \} . el \{\ -. ie \\n[.color] \ -. nop \m[blue]\\$2\m[] \%\[la]\f[C]\\$1\f[]\[ra]\\$3 -. el -. nop \f[B]\\$2\f[] \%\[la]\f[C]\\$1\f[]\[ra]\\$3 +. ie \\n[.color] \{\ +. nop \m[\\*[www:color]]\\$2\m[] +. nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\$1\f[]\\*[www:close]\\$3 +. \} +. el \{\ +. nop \f[\\*[www:fontstyle]]\\$2\f[] +. nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\$1\f[]\\*[www:close]\\$3 +. \} . \} . \} . \} .. +. .\" -------------------------------------------------------------------- -.\" TAG name +.\" TAG name [text] .\" -.\" Generate an html name NAME. +.\" Generate an HTML name NAME. +.\" Define string TAG_NAME to TEXT, if present, otherwise to \n[PN]. .\" .de TAG -. HTML +. HTML " +. ie '\\$2'' \ +. ds TAG_\\$1 \\n[PN]\" +. el \ +. ds TAG_\\$1 \\$2\" .. +. .\" -------------------------------------------------------------------- .\" IMG [-R|-L|-C] filename [width] [height] .\" -.\" Include an image of any type (will only work for -Thtml). +.\" Include an image of any type (only works for -Thtml). .\" .\" Alignment is centered by default (-C). .\" Default value for WIDTH is 1i. @@ -448,12 +540,12 @@ www functionality. It should work with any macro set. .de IMG . ie \\n[www-html] \{\ . ie '\\$2'-R' \ -. DEVTAG ".right-image" +. DEVTAG .right-image . el \{\ . ie '\\$2'-L' \ -. DEVTAG ".left-image" +. DEVTAG .left-image . el \ -. DEVTAG ".centered-image" +. DEVTAG .centered-image . \} . nr www-width 100 . if !'\\$3'' \ @@ -461,16 +553,19 @@ www functionality. It should work with any macro set. . nr www-height \\n[www-width] . if !'\\$4'' \ . nr www-height \\$4 -. HTML Image \\$1 +. HTML ]" . \} . el \ -. nop \[la]\f[C]\\$1\f[]\[ra] +. nop \\*[www:open]\f[\\*[www:fontstyle]]\\$1\f[]\\*[www:close] .. +. .\" -------------------------------------------------------------------- .\" PIMG [-R|-L|-C] filename [width] [height] .\" -.\" Include a png image. It will work for -Tps and -Thtml. +.\" Include a PNG image. It works for -Tps and -Thtml. .\" The default value for WIDTH and HEIGHT is zero; the default .\" alignment is centering (-C). .\" @@ -479,43 +574,63 @@ www functionality. It should work with any macro set. .\" is then converted to the EPS format using netpbm utilities. .\" .de PIMG -. ie \\n[www-html] \{\ -. ie '\\$1'-R' \ -. DEVTAG ".right-image" -. el \{\ -. ie '\\$1'-L' \ -. DEVTAG ".left-image" -. el \ -. DEVTAG ".centered-image" +. ds www-pic-align -C\" +. ie '\\$1'-R' \{\ +. ds www-pic-align -R\" +. shift +. \} +. el \{\ +. if '\\$1'-L' \{\ +. ds www-pic-align -L\" +. shift . \} +. \} +. if '\\$1'-C' \ +. shift +. +. ie \\n[www-html] \{\ +. ds www-htmlalign align="center"\" +. if '\\*[www-pic-align]'-R' \ +. ds www-htmlalign align="right"\" +. if '\\*[www-pic-align]'-L' \ +. ds www-htmlalign align="left"\" +. . nr www-width 0 . nr www-height 0 -. if !'\\$3'' \ +. if !'\\$2'' \ . nr www-width (\\$3 * 100 / 240) -. if !'\\$4'' \ +. if !'\\$3'' \ . nr www-height (\\$4 * 100 / 240) . ie (\\n[www-width] == 0) \{\ . ie (\\n[www-height] == 0) \ -. HTML Image \\$2 +. HTML

    ]

    " . el \ -. HTML Image \\$2 +. HTML

    ]

    " . \} . el \{\ . ie (\\n[www-height] == 0) \ -. HTML Image \\$2 +. HTML

    ]

    " . el \ -. HTML Image \\$2 +. HTML

    ]

    " . \} . \} . el \{\ . if !r ps4html \{\ . www-make-unique-name -. sy pngtopnm \\$2 | pnmcrop -white | @PNMTOPS_NOSETPAGE@ -noturn > \\*[www-unique-name].eps -. ie '\\$1'-C' \ -. PSPIC \\*[www-unique-name].eps \\$3 \\$4 -. el \ -. PSPIC \\$1 \\*[www-unique-name].eps \\$3 \\$4 +. sy pngtopnm \\$1 \ + | pnmcrop -white \ + | @PNMTOPS_NOSETPAGE@ -noturn \ + > \\*[www-unique-name].eps +. shift +. PSPIC \\*[www-pic-align] \\*[www-unique-name].eps \\$* . \} . \} .. @@ -536,7 +651,8 @@ www functionality. It should work with any macro set. .\" called when the -R picture is finished .de www-finish-right-ll . ll +(\\n[www-right-indent]u + \\n[www-image-gap]u) -. \" now see whether we need to inline www-finish-left-ll +. +. \" now check whether we need to inline www-finish-left-ll . if (\\n[www-left-ll-trap]u > 0) \ . if ((\\n[www-right-ll-trap]u + 1v) >= \\n[www-left-ll-trap]u) \{\ . mk www-left-po-trap @@ -546,13 +662,15 @@ www functionality. It should work with any macro set. . wh \\n[www-left-ll-trap]u . nr www-left-ll-trap 0 . \} -. \" and see whether we need to inline www-finish-left-po +. +. \" and check whether we need to inline www-finish-left-po . if (\\n[www-left-po-trap]u > 0) \ . if ((\\n[www-right-ll-trap]u + 1v) >= \\n[www-left-po-trap]u) \{\ . po -\\n[www-left-indent]u . wh \\n[www-left-po-trap]u . nr www-left-indent 0 . \} +. . wh \\n[www-right-ll-trap]u . nr www-right-ll-trap 0 .. @@ -563,6 +681,7 @@ www functionality. It should work with any macro set. . ll +\\n[www-right-indent]u . nr www-right-ll-trap 0 . \} +. . mk www-left-po-trap . nr www-left-po-trap +1v . wh \\n[www-left-po-trap]u www-finish-left-po @@ -577,7 +696,7 @@ www functionality. It should work with any macro set. .\" N1 - name of number register 1=absolute 0=percentage .\" N2 - number register name for absolute value .\" S1 - string register name for percentage value -. +.\" .de www-handle-percent . ds www-percent \\$1\" . substring www-percent -1 -1 @@ -599,7 +718,7 @@ www functionality. It should work with any macro set. .\" -------------------------------------------------------------------- .\" MPIMG [-R|-L] [-G gap] filename [width [height]] .\" -.\" Include a png image and wrap text around it. It will work for +.\" Include a PNG image and wrap text around it. It works for .\" -Tps and -Thtml. The default value for WIDTH is 1i; default value .\" for HEIGHT is WIDTH; the default alignment is left (-L). .\" -G is used to insert a gap between the text and the image. @@ -612,7 +731,6 @@ www functionality. It should work with any macro set. .\" activating unsafe mode, if not used with -Thtml; the PNG image .\" is then converted to the EPS format using netpbm utilities. .\" -. .nr www-htmlimage-gap 0 . .de MPIMG @@ -640,7 +758,7 @@ www functionality. It should work with any macro set. . . nr www-width 1i . nr www-height 1i -. ds www-size-specs "width=\\n[www-width] height=\\n[www-height]\" +. ds www-size-specs width="\\n[www-width]" height="\\n[www-height]"\" . ie !'\\$2'' \{\ . nr www-is-absolute 0 . nr www-absolute 0 @@ -651,13 +769,13 @@ www functionality. It should work with any macro set. . nr www-width (\\n[www-absolute] * \\n[.l] / 100) . if \\n[www-html] \ . nr www-width (\\n[www-width] * 100 / 240) -. ds www-size-specs "width=\\*[www-percentage]\" +. ds www-size-specs width="\\*[www-percentage]"\" . \} . el \{\ . nr www-width \\n[www-absolute] . if \\n[www-html] \ . nr www-width (\\n[www-width] * 100 / 240) -. ds www-size-specs "width=\\n[www-width]\" +. ds www-size-specs width="\\n[www-width]"\" . \} . . nr www-height \\n[www-width] @@ -671,13 +789,13 @@ www functionality. It should work with any macro set. . nr www-height (\\n[www-absolute] * \\n[.p] / 100) . if \\n[www-html] \ . nr www-height (\\n[www-height] * 100 / 240) -. ds www-size-specs "\\*[www-size-specs] height=\\*[www-percentage]\" +. ds www-size-specs "\\*[www-size-specs] height="\\*[www-percentage]"\" . \} . el \{\ . nr www-height \\n[www-absolute] . if \\n[www-html] \ . nr www-height (\\n[www-height] * 100 / 240) -. ds www-size-specs "\\*[www-size-specs] height=\\*[www-height]\" +. ds www-size-specs "\\*[www-size-specs] height="\\*[www-height]"\" . \} . \} . \} @@ -685,29 +803,38 @@ www functionality. It should work with any macro set. . \" height not specified; use width value . ie !\\n[www-is-absolute] \{\ . \" percentage value -. ds www-size-specs "\\*[www-size-specs] height=\\*[www-percentage]\" +. ds www-size-specs "\\*[www-size-specs] height="\\*[www-percentage]"\" . nr www-height \\n[www-width] . \} . el \{\ -. ds www-size-specs "\\*[www-size-specs] height=\\*[www-width]\" +. ds www-size-specs "\\*[www-size-specs] height="\\*[www-width]"\" . nr www-height \\n[www-width] . \} . \} . . ie \\n[www-html] \{\ . ie !\\n[www-image-just] \ -. HTML Image \\$1 +. HTML ]" . el \ -. HTML Image \\$1 +. HTML ]" . \} . el \{\ . tm www-width is \\n[www-width] . tm www-height is \\n[www-height] . if !r ps4html \{\ . www-make-unique-name -. sy pngtopnm \\$1 | pnmcrop -white | @PNMTOPS_NOSETPAGE@ -noturn > \\*[www-unique-name].eps +. sy pngtopnm \\$1 \ + | pnmcrop -white \ + | @PNMTOPS_NOSETPAGE@ -noturn \ + > \\*[www-unique-name].eps . ie !\\n[www-image-just] \{\ . \" we must now disable a possible left image trap . sp -1 @@ -717,6 +844,7 @@ www functionality. It should work with any macro set. . wh \\n[www-left-po-trap]u . PSPIC -R \\*[www-unique-name].eps \\n[www-width]u \\n[www-height]u . sp -\\n[ps-desht]u +. . nr www-right-indent \\n[ps-deswid]u . \" we want to have some space between text and image, . \" so the line length must be shorter @@ -724,6 +852,7 @@ www functionality. It should work with any macro set. . mk www-right-ll-trap . nr www-right-ll-trap +(\\n[ps-desht]u - 1v) . wh \\n[www-right-ll-trap]u www-finish-right-ll +. . \" now restore possible left trap . if (\\n[www-left-ll-trap] > 0) \ . wh \\n[www-left-ll-trap]u www-finish-left-ll @@ -736,6 +865,7 @@ www functionality. It should work with any macro set. . wh \\n[www-right-ll-trap]u . PSPIC -L \\*[www-unique-name].eps \\n[www-width]u \\n[www-height]u . sp -\\n[ps-desht]u +. . nr www-left-indent \\n[ps-deswid]u . \" increase offset by gap . po +(\\n[www-left-indent]u + \\n[www-image-gap]u) @@ -744,6 +874,7 @@ www functionality. It should work with any macro set. . mk www-left-ll-trap . nr www-left-ll-trap +(\\n[ps-desht]u - 1v) . wh \\n[www-left-ll-trap]u www-finish-left-ll +. . \" now restore possible right trap . if (\\n[www-right-ll-trap] > 0) \ . wh \\n[www-right-ll-trap]u www-finish-right-ll @@ -751,6 +882,7 @@ www functionality. It should work with any macro set. . \} . \} .. +. .\" -------------------------------------------------------------------- .\" HnS n .\" @@ -776,9 +908,10 @@ www functionality. It should work with any macro set. . .de HnE . if (\\n[www-heading-no] == -1) \ -. www-error "HnE found without a corresponding HnS" +. www-error HnE found without a corresponding HnS . DEVTAG-EO-H .. +. .\" -------------------------------------------------------------------- .\" LK .\" @@ -786,25 +919,28 @@ www functionality. It should work with any macro set. .\" section/numbered headings at this position. .\" .de LK -. DEVTAG ".links" +. DEVTAG .links .. +. .\" -------------------------------------------------------------------- .\" HR .\" .\" Produce a horizontal line. .\" .de HR -. HTML

    "
    " +. HTML

    ] .. +. .\" -------------------------------------------------------------------- .\" NHR .\" -.\" Suppresses the generation of the top and bottom rules which grohtml +.\" Suppress the generation of the top and bottom rules which grohtml .\" emits by default. .\" .de NHR -. DEVTAG ".no-auto-rule" +. DEVTAG .no-auto-rule .. +. .\" .\" www-end-nowhere - end of input trap called to finish diversion. .\" @@ -813,19 +949,20 @@ www functionality. It should work with any macro set. . di . DEVTAG-EO-TL .. +. .\" -------------------------------------------------------------------- .\" HTL .\" .\" Generate an HTML title only. This differs from the -ms .TL macro .\" which generates both an HTML title and an H1 heading. .\" -.\" This is useful when an author wishes to use a HTML title as search +.\" This is useful when an author wishes to use an HTML title as search .\" engine fodder but a graphic title in the document. .\" .\" The macro terminates when a space or break is seen (.sp, .br). .\" .de HTL -. DEVTAG ".html-tl" +. DEVTAG .html-tl . if !\\n[www-html] \ . di www-nowhere . it 2 www-end-nowhere @@ -873,6 +1010,7 @@ www functionality. It should work with any macro set. .de www-push-li . nr www-depth +1 . ds www-level\\n[www-depth] \\$1\" +. ds www-ltag\\n[www-depth] . als LI \\$1 .. . @@ -881,20 +1019,32 @@ www functionality. It should work with any macro set. . als LI \\*[www-level\\n[www-depth]] .. . +.\" www-emit-ltag - shut down a previous open list tag +.\" before issuing a new tag \\$1. +.\" It then records tag \\$1 is open. +. +.de www-emit-ltag +. if !'\\*[www-ltag\\n[www-depth]]'' \ +. HTML-NS +. if !'\\$1'' \ +. HTML-NS <\\$1> +. ds www-ltag\\n[www-depth] \\$1\" +.. +. .\" .\" Auxiliary macro for ULS. .\" .de www-push-ul-level . nr www-ul-level +1 . if (\\n[www-ul-level] > 3) \ -. www-error "ULS: too many levels of indentation (\\n[www-ul-level])" +. www-error ULS: too many levels of indentation (\\n[www-ul-level]) .. .\" .\" Auxiliary macro for ULE. .\" .de www-pop-ul-level . if !\\n[www-ul-level] \ -. www-error "ULE: trying to terminate a list which does not exist" +. www-error ULE: trying to terminate a list which does not exist . nr www-ul-level -1 .. . @@ -904,14 +1054,15 @@ www functionality. It should work with any macro set. .de www-push-ol-level . nr www-ol-level +1 . if (\\n[www-ol-level] > 3) \ -. www-error "OLS: too many levels of indentation (\\n[www-ol-level])" +. www-error OLS: too many levels of indentation (\\n[www-ol-level]) .. +. .\" .\" Auxiliary macro for OLE. .\" .de www-pop-ol-level . if !\\n[www-ol-level] \ -. www-error "OLE: trying to terminate a list which does not exist" +. www-error OLE: trying to terminate a list which does not exist . nr www-ol-level -1 .. . @@ -923,20 +1074,24 @@ www functionality. It should work with any macro set. .de ULS . www-push-li www-li-ul . www-push-ul-level -. ie \\n[www-html] \ -. HTML

    "
      " -. el \{\ -. nr www-li-indent +\w'\\*[www-ul-level\\n[www-ul-level]]'u +. ie \\n[www-html] \{\ +. www-emit-ltag +. HTML

        . \} +. el \ +. nr www-li-indent +\w'\\*[www-ul-level\\n[www-ul-level]]'u .. +. .\" -------------------------------------------------------------------- .\" ULE .\" .\" End an unordered list. .\" .de ULE -. ie \\n[www-html] \ -. HTML "
      " +. ie \\n[www-html] \{\ +. www-emit-ltag +. HTML

    +. \} . el \{\ . nr www-li-indent -\w'\\*[www-ul-level\\n[www-ul-level]]'u . in \\n[www-li-indent]u @@ -944,6 +1099,7 @@ www functionality. It should work with any macro set. . www-pop-ul-level . www-pop-li .. +. .\" -------------------------------------------------------------------- .\" OLS .\" @@ -952,19 +1108,25 @@ www functionality. It should work with any macro set. .de OLS . www-push-li www-li-ol . www-push-ol-level -. ie \\n[www-html] \ -. HTML

    "
      " +. ie \\n[www-html] \{\ +. www-emit-ltag +. HTML

        " +. \} . el \ . nr www-li-indent +\w'\\*[www-ol-tmp]'u .. +. .\" -------------------------------------------------------------------- .\" OLE .\" .\" End an ordered list. .\" .de OLE -. ie \\n[www-html] \ -. HTML "
      " +. ie \\n[www-html] \{\ +. www-emit-ltag +. HTML
    +. \} . el \{\ . nr www-li-indent -\w'\\*[www-ol-tmp]'u . in \\n[www-li-indent]u @@ -973,29 +1135,35 @@ www functionality. It should work with any macro set. . www-pop-ol-level . www-pop-li .. +. .\" -------------------------------------------------------------------- -.\" .\" DLS +.\" .\" Start a definition list. .\" .de DLS . www-push-li www-li-dl . nr www-dl-level +1 -. ie \\n[www-html] \ -. HTML

    "
    " +. ie \\n[www-html] \{\ +. www-emit-ltag +. HTML

    +. \} . el \{\ . nr www-li-indent +\\n[www-dl-shift]u . in \\n[www-li-indent]u . \} .. +. .\" -------------------------------------------------------------------- -.\" .\" DLE +.\" .\" End a definition list. .\" .de DLE -. ie \\n[www-html] \ -. HTML "
    " +. ie \\n[www-html] \{\ +. www-emit-ltag +. HTML
    +. \} . el \{\ . nr www-li-indent -\\n[www-dl-shift]u . in \\n[www-li-indent]u @@ -1003,17 +1171,19 @@ www functionality. It should work with any macro set. . nr www-dl-level -1 . www-pop-li .. +. .\" -------------------------------------------------------------------- .\" LI .\" .\" Insert a list item. .\" +. .\" ******** .\" www-li-ul - bulleted list item .\" .de www-li-ul . ie \\n[www-html] \ -. HTML-NS "
  • " +. www-emit-ltag li . el \{\ . www:paraspace . in \\n[www-li-indent]u @@ -1021,12 +1191,13 @@ www functionality. It should work with any macro set. . nop \\*[www-ul-level\\n[www-ul-level]]\c . \} .. +. .\" ******** .\" www-li-ol - numbered list item .\" .de www-li-ol . ie \\n[www-html] \ -. HTML-NS "
  • " +. www-emit-ltag li . el \{\ . www:paraspace . in \\n[www-li-indent]u @@ -1034,13 +1205,14 @@ www functionality. It should work with any macro set. . nop \\n+[www-ol-ctr\\n[www-ol-level]]\ \ \c . \} .. +. .\" ******** .\" www-li-dl - definition list item .\" .de www-li-dl . ie \\n[www-html] \{\ -. HTML "
    \\$1
    " -. HTML-NS "
    " +. HTML
    \\$1
    +. www-emit-ltag dd . \} . el \{\ . www:paraspace @@ -1050,6 +1222,7 @@ www functionality. It should work with any macro set. . br . \} .. +. .\" -------------------------------------------------------------------- .\" DC l text [color] .\" @@ -1061,13 +1234,13 @@ www functionality. It should work with any macro set. .\" COLOR is the optional color of the dropped letter (default black). .\" .de DC -. ds www-dropcolor black +. ds www-dropcolor black\" . if !'\\$3'' \ -. ds www-dropcolor \\$3 -. ie '\*(.T'html' \{\ +. ds www-dropcolor \\$3\" +. ie '\*[.T]'html' \{\ . www-make-unique-name . nr www-drop-width (100u * \\n[.v]u * 3u / \\n[.l]u) -. MPIMG -L \\*[www-unique-name].png "\\n[www-drop-width]%" +. MPIMG -L \\*[www-unique-name].png \\n[www-drop-width]% . \} . el \{\ . ie r ps4html \{\ @@ -1100,23 +1273,15 @@ www functionality. It should work with any macro set. . \} . nop \\$2 .. -.\" -------------------------------------------------------------------- -.\" Setup around HTML-IMAGE and friends -.\" -.\" now set up TS, TE, EQ, EN default macros -.\" -.do if !d TS .do ds TS HTML-IMAGE -.do if !d TE .do ds TE HTML-IMAGE-END -.do if !d EQ .do ds EQ HTML-IMAGE -.do if !d EN .do ds EN HTML-IMAGE-END +. .\" .\" supplementary macros used by other macro sets .\" .\" here are some tags specially for -Tps or -Thtml when invoked by -.\" pre-html to generate png images from postscript. +.\" pre-html to generate PNG images from postscript. . .\" -------------------------------------------------------------------- -.\" HTML-DO-IMAGE - tells troff to issue an image marker which can be +.\" HTML-DO-IMAGE - tell troff to issue an image marker which can be .\" read back by pre-html .\" .de HTML-DO-IMAGE @@ -1125,8 +1290,9 @@ www functionality. It should work with any macro set. . if \\n[www-html] \ . nop \O[5\\$2\\$1.png]\O[0]\O[3] .. +. .\" -------------------------------------------------------------------- -.\" HTML-IMAGE-END - terminates an image for html +.\" HTML-IMAGE-END - terminate an image for HTML .\" .de HTML-IMAGE-END . if r ps4html \ @@ -1138,13 +1304,14 @@ www functionality. It should work with any macro set. .nr www-png-no 0 . .\" -------------------------------------------------------------------- -.\" www-make-unique-name - generates another unique name in string +.\" www-make-unique-name - generate another unique name in string .\" `www-unique-name' .\" .de www-make-unique-name . nr www-png-no +1 -. ds www-unique-name \\*[www-image-template]\\n[www-png-no] +. ds www-unique-name \\*[www-image-template]\\n[www-png-no]\" .. +. .\" -------------------------------------------------------------------- .\" HTML-IMAGE and friends tell grohtml that this region of text needs .\" to be rendered as an image. @@ -1170,51 +1337,269 @@ www functionality. It should work with any macro set. . HTML-DO-IMAGE \\*[www-unique-name] i .. . +.\" EQN-HTML-IMAGE and friends check to see whether the equation is +.\" not in an image, in which case it allows HTML +.\" (mathml) to be generated (if -Txhtml was specified). +. +.de EQN-HTML-IMAGE +. \" generates a centered image +. www-make-unique-name +. EQN-HTML-DO-IMAGE \\*[www-unique-name] c +.. +. +.de EQN-HTML-IMAGE-RIGHT +. www-make-unique-name +. EQN-HTML-DO-IMAGE \\*[www-unique-name] r +.. +. +.de EQN-HTML-IMAGE-LEFT +. www-make-unique-name +. EQN-HTML-DO-IMAGE \\*[www-unique-name] l +.. +. +.de EQN-HTML-IMAGE-INLINE +. www-make-unique-name +. EQN-HTML-DO-IMAGE \\*[www-unique-name] i +.. +. +.\" -------------------------------------------------------------------- +.\" EQN-HTML-DO-IMAGE - tell troff to issue an image marker which can be +.\" read back by pre-html +.\" +.de EQN-HTML-DO-IMAGE +. ie r xhtml \{\ +. if !(\\n[.O] == 0) \{\ +. if r ps4html \ +. nop \O[5\\$2\\$1.png]\O[1]\O[3] +. if \\n[www-html] \ +. nop \O[5\\$2\\$1.png]\O[0]\O[3] +. \} +. \} +. el \ +. HTML-DO-IMAGE \\$* +.. +. +.\" -------------------------------------------------------------------- +.\" EQN-HTML-IMAGE-END - terminate an image for HTML +.\" +.de EQN-HTML-IMAGE-END +. ie r xhtml \{\ +. if !(\\n[.O] == 0) \{\ +. if r ps4html \ +. nop \O[4]\O[2]\O[0] +. if \\n[www-html] \ +. nop \O[4]\O[2]\O[1] +. \} +. \} +. el \ +. HTML-IMAGE-END +.. +. +.\" -------------------------------------------------------------------- +.\" Setup around HTML-IMAGE and friends +.\" +.\" now set up TS, TE, EQ, EN default macros +.\" +.\" we must not use `.als': the definition of .TE in s.tmac, for example, +.\" calls .HTML-IMAGE-END, which would refer to itself due to the alias, +.\" causing an endless loop +.\" +.if !d TS \{\ +. de TS +. HTML-IMAGE \\$@ +. if \\n[www-html] \{\ +. nr www-TS-ll \\n[.l] +. ll 1000n +. \} +. . +.\} +.if !d TE \{\ +. de TE +. if \\n[www-html] \ +. ll \\n[www-TS-ll]u +. HTML-IMAGE-END \\$@ +. . +.\} +.if !d EQ \{\ +. de EQ +. EQN-HTML-IMAGE \\$@ +. if \\n[www-html] \{\ +. nr www-EQ-ll \\n[.l] +. ll 1000n +. \} +. . +.\} +.if !d EN \{\ +. de EN +. if \\n[www-html] \ +. ll \\n[www-EQ-ll]u +. EQN-HTML-IMAGE-END \\$@ +. . +.\} +. .\" -------------------------------------------------------------------- .\" JOBNAME .\" -.\" Generate multiple output files containing the html. +.\" Generate multiple output files containing the HTML. .\" A file is split whenever a .SH or .NH 1 is encountered. .\" The argument to JOBNAME is the file stem for future output files. .\" .de JOBNAME . DEVTAG .job-name \\$1 .. +. .\" -------------------------------------------------------------------- .\" HEAD .\" -.\" Adds information to the section of the html +.\" Add information to the section of the HTML .\" document -.\" -------------------------------------------------------------------- +.\" .de HEAD . DEVTAG .head "\\$*" .. +. .\" -------------------------------------------------------------------- -.\" Final Setup +.\" start of some code +.\" +.de CDS +. ft C +. nf +.. +. .\" -------------------------------------------------------------------- +.\" end of some code +.\" +.de CDE +. fi +. ft P +.. . -.if \n[www-html] \{\ -. nh -. nr HY 0 -.\} +.ds www-nav-colour #eeeeee\" +.nr www-nav-width-left 30 +.nr www-nav-width-right 70 +. +.\" -------------------------------------------------------------------- +.\" LNS - left navigation start +.\" +.de LNS +. HTML

    " +. LK +. HTML

    " +. nr SH-open 1 +.. . +.\" -------------------------------------------------------------------- +.\" LNE - left navigation end .\" -.\" start of some code +.de LNE +. HTML

    +. HR +.. +. +.nr SH-open 0 +.nr needs-begin 0 +. +.\" +.\" some auxiliary macros for left navigation lists .\" +.de www-SH +. if (0\\$1 == 0) \{\ +. if (\\n[SH-open] == 1) \ +. LNE +. nr needs-begin 1 +. @SH-old +. \} +.. . -.de CDS -.ft C -.nf +.de www-NH +. if (0\\$1 <= 1) \{\ +. if (\\n[SH-open] == 1) \ +. LNE +. nr needs-begin 1 +. @NH-old +. \} +.. +. +.de www-LP +. @LP-old +. if (\\n[needs-begin] == 1) \{\ +. HR +. LNS +. \} +. nr needs-begin 0 +.. +. +.\" -------------------------------------------------------------------- +.\" ALN [colour] [left width percentage] +.\" +.\" Turn on automatic left navigation. This macro should only be +.\" called once (normally at the start of the document) as it +.\" indicates that all top-level section headings form a navigation +.\" list on the left of the main text. +.\" +.de ALN +. if '\*[.T]'html' \{\ +. if !'\\$1'' \ +. ds www-nav-colour \\$1\" +. if (0\\$2 > 0) \{\ +. nr www-nav-width-left \\$2 +. nr www-nav-width-right (100 - \\$2) +. \} +. rn @SH @SH-old +. rn www-SH @SH +. rn @NH @NH-old +. rn www-NH @NH +. rn @LP @LP-old +. rn www-LP @LP +. \} .. +. +.\" -------------------------------------------------------------------- +.\" LINKSTYLE color [fontstyle [openglyph closeglyph]] .\" -.\" end of some code +.\" Initialize www.tmac so that when this macro set is used with +.\" non-HTML devices the urls are rendered the user defined attributes. +.\" For example: .\" +.\" LINKSTYLE blue CR < > +.\" +.de LINKSTYLE +. if (\\n[.$] < 1) \ +. www:error .\\$0 expects at least 1 argument. +. ds www:color \\$1\" +. shift +. if (\\n[.$] < 1) \ +. return +. ds www:fontstyle \\$1\" +. shift +. if (\\n[.$] < 1) \ +. www:error .\\$0 expects that both the open and close glyph is specified +. ds www:open \\$1\" +. ds www:close \\$2\" +.. . -.de CDE -.fi -.ft P +.\" MATHML - enable eqn mathml output to pass through to the device +.\" driver +. +.de MATHML +. if (\\n[.O] == 0) \ +. MATH \\$* .. . +.\" -------------------------------------------------------------------- +.\" final setup +.\" -------------------------------------------------------------------- +. +.LINKSTYLE blue C \[la] \[ra] +. +.if \n[www-html] \{\ +. nh +. nr HY 0 +.\} +. .if r ps4html .nop \O[0] .cp \n(_C . -- 2.41.0 From 4a1b183bd52b80fea269b0bd4a5fe059b7d171ce Mon Sep 17 00:00:00 2001 From: Jan Lentfer Date: Tue, 26 Jan 2010 10:08:46 +0100 Subject: [PATCH 09/16] groff: Update master to work with v1.20.1 * updated patches to apply cleanly * removed one obsolete patch --- .../src/libs/libgroff/patches/cmap.cpp.patch | 2 +- .../libs/libgroff/patches/invalid.cpp.patch | 2 +- .../roff/nroff/patches/nroff.sh.no_obj.patch | 48 +++++++++---------- .../groff/tmac/patches/doc-syms.no_obj.patch | 2 +- .../groff/tmac/patches/eqnrc.no_obj.patch | 2 +- .../groff/tmac/patches/groff_mdoc.man.patch | 47 ------------------ .../groff/tmac/patches/troffrc.no_obj.patch | 13 +++-- .../groff/tmac/patches/tty.tmac.no_obj.patch | 2 +- 8 files changed, 36 insertions(+), 82 deletions(-) delete mode 100644 gnu/usr.bin/groff/tmac/patches/groff_mdoc.man.patch diff --git a/gnu/usr.bin/groff/src/libs/libgroff/patches/cmap.cpp.patch b/gnu/usr.bin/groff/src/libs/libgroff/patches/cmap.cpp.patch index 686e829e95..945808f520 100644 --- a/gnu/usr.bin/groff/src/libs/libgroff/patches/cmap.cpp.patch +++ b/gnu/usr.bin/groff/src/libs/libgroff/patches/cmap.cpp.patch @@ -3,7 +3,7 @@ $DragonFly: src/gnu/usr.bin/groff/src/libs/libgroff/patches/cmap.cpp.patch,v 1.1 --- cmap.cpp 2005-08-31 14:28:07.000000000 +0200 +++ cmap.cpp 2005-08-31 15:15:08.000000000 +0200 @@ -19,12 +19,15 @@ - Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + along with this program. If not, see . */ #include +#if defined(__DragonFly__) || defined(__FreeBSD__) diff --git a/gnu/usr.bin/groff/src/libs/libgroff/patches/invalid.cpp.patch b/gnu/usr.bin/groff/src/libs/libgroff/patches/invalid.cpp.patch index 1b255e92de..87da603447 100644 --- a/gnu/usr.bin/groff/src/libs/libgroff/patches/invalid.cpp.patch +++ b/gnu/usr.bin/groff/src/libs/libgroff/patches/invalid.cpp.patch @@ -2,7 +2,7 @@ $DragonFly: src/gnu/usr.bin/groff/src/libs/libgroff/patches/invalid.cpp.patch,v --- invalid.cpp 2005-08-31 14:28:07.000000000 +0200 +++ invalid.cpp 2005-08-31 15:28:51.000000000 +0200 -@@ -31,8 +31,8 @@ +@@ -30,8 +31,8 @@ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, diff --git a/gnu/usr.bin/groff/src/roff/nroff/patches/nroff.sh.no_obj.patch b/gnu/usr.bin/groff/src/roff/nroff/patches/nroff.sh.no_obj.patch index 844793fa1c..a56dee75b5 100644 --- a/gnu/usr.bin/groff/src/roff/nroff/patches/nroff.sh.no_obj.patch +++ b/gnu/usr.bin/groff/src/roff/nroff/patches/nroff.sh.no_obj.patch @@ -1,49 +1,47 @@ -$DragonFly: src/gnu/usr.bin/groff/src/roff/nroff/patches/nroff.sh.no_obj.patch,v 1.2 2005/09/09 14:11:04 asmodai Exp $ - ---- nroff.sh.orig 2005-09-09 15:01:13.000000000 +0200 -+++ nroff.sh 2005-09-09 15:04:33.000000000 +0200 -@@ -8,19 +8,23 @@ +--- nroff.sh.orig 2010-01-26 08:02:39 +0100 ++++ nroff.sh 2010-01-26 08:07:29 +0100 +@@ -34,19 +34,23 @@ case "`exec 2>/dev/null ; locale charmap`" in UTF-8) - T=-Tutf8 ;; + Tloc=utf8 ;; - ISO-8859-1 | ISO-8859-15) + ISO*8859-1 | ISO*8859-15) - T=-Tlatin1 ;; + Tloc=latin1 ;; IBM-1047) - T=-Tcp1047 ;; + Tloc=cp1047 ;; + KOI8-R) + T=-Tkoi8-r ;; *) case "${LC_ALL-${LC_CTYPE-${LANG}}}" in *.UTF-8) - T=-Tutf8 ;; + Tloc=utf8 ;; - iso_8859_1 | *.ISO-8859-1 | *.ISO8859-1 | \ - iso_8859_15 | *.ISO-8859-15 | *.ISO8859-15) + iso_8859_1 | *.ISO*8859-1 | *.ISO8859-1 | \ + iso_8859_15 | *.ISO*8859-15 | *.ISO8859-15) - T=-Tlatin1 ;; + Tloc=latin1 ;; *.IBM-1047) - T=-Tcp1047 ;; + Tloc=cp1047 ;; + *.KOI8-R) + T=-Tkoi8-r ;; *) case "$LESSCHARSET" in utf-8) -@@ -29,6 +33,8 @@ - T=-Tlatin1 ;; +@@ -55,6 +59,8 @@ + Tloc=latin1 ;; cp1047) - T=-Tcp1047 ;; + Tloc=cp1047 ;; + koi8-r) + T=-Tkoi8-r ;; *) - T=-Tascii ;; - esac ;; -@@ -53,7 +59,7 @@ - exit 1 ;; - -[iptSUC] | -[dMmrno]*) - opts="$opts $1" ;; -- -Tascii | -Tlatin1 | -Tutf8 | -Tcp1047) -+ -Tascii | -Tlatin1 | -Tutf8 | -Tcp1047 | -Tkoi8-r) - T=$1 ;; - -T*) - # ignore other devices + Tloc=ascii ;; + esac ;; +@@ -118,7 +124,7 @@ + fi + + case $T in +- -Tascii | -Tlatin1 | -Tutf8 | -Tcp1047) ++ -Tascii | -Tlatin1 | -Tutf8 | -Tcp1047 | -Tkoi8-r) + ;; + *) + # ignore other devices and use locale fallback diff --git a/gnu/usr.bin/groff/tmac/patches/doc-syms.no_obj.patch b/gnu/usr.bin/groff/tmac/patches/doc-syms.no_obj.patch index ded897dae2..564373c068 100644 --- a/gnu/usr.bin/groff/tmac/patches/doc-syms.no_obj.patch +++ b/gnu/usr.bin/groff/tmac/patches/doc-syms.no_obj.patch @@ -2,7 +2,7 @@ $DragonFly: src/gnu/usr.bin/groff/tmac/patches/doc-syms.no_obj.patch,v 1.1 2005/ --- doc-syms 2005-09-08 12:50:26.000000000 +0200 +++ doc-syms 2005-09-08 12:52:04.000000000 +0200 -@@ -262,6 +262,70 @@ +@@ -324,6 +262,70 @@ .. . . diff --git a/gnu/usr.bin/groff/tmac/patches/eqnrc.no_obj.patch b/gnu/usr.bin/groff/tmac/patches/eqnrc.no_obj.patch index cfd714c9e4..f284124722 100644 --- a/gnu/usr.bin/groff/tmac/patches/eqnrc.no_obj.patch +++ b/gnu/usr.bin/groff/tmac/patches/eqnrc.no_obj.patch @@ -2,7 +2,7 @@ $DragonFly: src/gnu/usr.bin/groff/tmac/patches/eqnrc.no_obj.patch,v 1.1 2005/09/ --- eqnrc 2005-08-31 14:28:07.000000000 +0200 +++ eqnrc 2005-08-31 15:42:52.000000000 +0200 -@@ -53,6 +53,7 @@ +@@ -55,6 +53,7 @@ ifdef latin1 ! define n %1% ! ifdef utf8 ! define n %1% ! ifdef cp1047 ! define n %1% ! diff --git a/gnu/usr.bin/groff/tmac/patches/groff_mdoc.man.patch b/gnu/usr.bin/groff/tmac/patches/groff_mdoc.man.patch deleted file mode 100644 index 775402cdfd..0000000000 --- a/gnu/usr.bin/groff/tmac/patches/groff_mdoc.man.patch +++ /dev/null @@ -1,47 +0,0 @@ -$DragonFly: src/gnu/usr.bin/groff/tmac/patches/groff_mdoc.man.patch,v 1.1 2006/03/08 23:09:30 swildner Exp $ - ---- ../../../../../contrib/groff-1.19/tmac/groff_mdoc.man 2005-09-09 16:10:41.000000000 +0200 -+++ groff_mdoc.man 2006-03-08 23:57:58.000000000 +0100 -@@ -183,6 +183,7 @@ - . It "BSD Macro" - . It "NetBSD Macro" - . It "FreeBSD Macro" -+. It "DragonFly Macro" - . It "OpenBSD Macro" - . It "BSD/OS Macro" - . It "UNIX Macro" -@@ -869,6 +870,8 @@ - 2.2.2, 2.2.5, 2.2.6, 2.2.7, 2.2.8, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 4.0, 4.1, - 4.1.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.6.2, 4.7, 4.8, 4.9, 4.10, 5.0, 5.1, 5.2, - 5.2.1, 5.3 -+.It DragonFly -+1.0, 1.1, 1.2, 1.3, 1.4, 1.5 - .El - .Ed - .Pp -@@ -2167,6 +2170,25 @@ - command above in section - .Sx "TITLE MACROS" . - . -+.Ss "DragonFly Macro" -+. -+.Pp -+.Dl Usage: .Dx Oo Ao version Ac Oc ... -+.Pp -+.Bl -tag -width ".Li .Dx\ 1.4\ ." -compact -offset 15n -+.It Li .Dx -+.Dx -+.It Li ".Dx 1.4 ." -+.Dx 1.4 . -+.El -+.Pp -+For possible values of -+.Ao version Ac -+see the description of the -+.Ql .Os -+command above in section -+.Sx "TITLE MACROS" . -+. - .Ss "OpenBSD Macro" - . - .Pp diff --git a/gnu/usr.bin/groff/tmac/patches/troffrc.no_obj.patch b/gnu/usr.bin/groff/tmac/patches/troffrc.no_obj.patch index a5940cbf96..7f52234e49 100644 --- a/gnu/usr.bin/groff/tmac/patches/troffrc.no_obj.patch +++ b/gnu/usr.bin/groff/tmac/patches/troffrc.no_obj.patch @@ -10,9 +10,9 @@ $DragonFly: src/gnu/usr.bin/groff/tmac/patches/troffrc.no_obj.patch,v 1.1 2005/0 .do ds troffrc!lj4 lj4.tmac .do ds troffrc!lbp lbp.tmac .do ds troffrc!html html.tmac -@@ -29,7 +30,10 @@ - . - .\" test whether we work under EBCDIC +@@ -30,7 +30,10 @@ + .\" Test whether we work under EBCDIC and map the no-breakable space + .\" character accordingly. .do ie '\[char97]'a' \ -. do tr \[char160]\~ +. ie '\*[.T]'koi8-r' \ @@ -22,15 +22,18 @@ $DragonFly: src/gnu/usr.bin/groff/tmac/patches/troffrc.no_obj.patch,v 1.1 2005/0 .el \ . do tr \[char65]\~ . -@@ -39,8 +43,18 @@ +@@ -40,6 +40,8 @@ .\" Load hyphenation patterns and exceptions. .do hpf hyphen.us .do hpfa hyphenex.us +.if '\*[.T]'koi8-r' \ +. do hpfa hyphen.ru . - .\" Handle paper formats + .\" Handle paper formats. .do mso papersize.tmac +@@ -47,4 +49,12 @@ + .\" Handle PS images. + .do mso pspic.tmac . +.\" Disable SGR support in grotty(1). +.if n \{\ diff --git a/gnu/usr.bin/groff/tmac/patches/tty.tmac.no_obj.patch b/gnu/usr.bin/groff/tmac/patches/tty.tmac.no_obj.patch index 78abda576e..63c30be986 100644 --- a/gnu/usr.bin/groff/tmac/patches/tty.tmac.no_obj.patch +++ b/gnu/usr.bin/groff/tmac/patches/tty.tmac.no_obj.patch @@ -2,7 +2,7 @@ $DragonFly: src/gnu/usr.bin/groff/tmac/patches/tty.tmac.no_obj.patch,v 1.1 2005/ --- tty.tmac 2005-08-31 14:28:07.000000000 +0200 +++ tty.tmac 2005-08-31 15:51:25.000000000 +0200 -@@ -80,6 +80,9 @@ +@@ -83,6 +80,9 @@ .ie '\*(.T'cp1047' \ . do mso cp1047.tmac .el \ -- 2.41.0 From 7948e49e695481d3d884b7d42328bc986c04c1cd Mon Sep 17 00:00:00 2001 From: Jan Lentfer Date: Tue, 26 Jan 2010 18:33:00 +0100 Subject: [PATCH 10/16] groff: Fixup after new version import * adds a patch based on current groff cvs that fixes error messages during man lint runs * Fixup tmac/Makefile to take new files into account --- gnu/usr.bin/groff/tmac/Makefile | 59 +++++++++++-------- gnu/usr.bin/groff/tmac/patches/doc.tmac.patch | 22 +++++++ 2 files changed, 55 insertions(+), 26 deletions(-) create mode 100644 gnu/usr.bin/groff/tmac/patches/doc.tmac.patch diff --git a/gnu/usr.bin/groff/tmac/Makefile b/gnu/usr.bin/groff/tmac/Makefile index ef00418817..6a3ccbb29c 100644 --- a/gnu/usr.bin/groff/tmac/Makefile +++ b/gnu/usr.bin/groff/tmac/Makefile @@ -22,32 +22,39 @@ CONTRIBDIR= ${DIST_DIR} SRCS= ${PATCHES} CLEANFILES= ${MAN} ${MDOCFILES:S/$/-s/} ${STRIPFILES:S/$/-s/} ${SPECIALFILES:S/$/-s/} ${NORMALFILES:S/$/-s/} -NORMALFILES= mandoc.tmac andoc.tmac an-old.tmac \ - me.tmac \ - mdoc.tmac \ - pic.tmac \ - a4.tmac \ - papersize.tmac \ - ec.tmac \ - safer.tmac \ - trace.tmac \ - ps.tmac psold.tmac pspic.tmac psatk.tmac \ - dvi.tmac \ - tty.tmac tty-char.tmac \ - latin1.tmac latin2.tmac latin5.tmac latin9.tmac cp1047.tmac \ - unicode.tmac \ - X.tmac Xps.tmac \ - lj4.tmac \ - lbp.tmac \ - html.tmac html-end.tmac \ - devtag.tmac \ - europs.tmac \ - composite.tmac \ - eqnrc \ - troffrc troffrc-end \ - hyphen.us hyphenex.us -SPECIALFILES= an.tmac man.tmac s.tmac ms.tmac www.tmac -STRIPFILES= e.tmac doc.tmac mdoc.local +NORMALFILES= man.tmac mandoc.tmac andoc.tmac an-old.tmac an-ext.tmac \ + ms.tmac \ + me.tmac \ + mdoc.tmac \ + pic.tmac \ + a4.tmac papersize.tmac \ + 62bit.tmac \ + ec.tmac \ + safer.tmac \ + trace.tmac \ + ps.tmac psold.tmac pspic.tmac psatk.tmac \ + dvi.tmac \ + tty.tmac tty-char.tmac \ + latin1.tmac latin2.tmac latin5.tmac latin9.tmac cp1047.tmac \ + unicode.tmac \ + X.tmac Xps.tmac \ + lj4.tmac \ + lbp.tmac \ + html.tmac html-end.tmac \ + devtag.tmac \ + europs.tmac \ + composite.tmac \ + eqnrc \ + troffrc troffrc-end \ + trans.tmac \ + hyphen.us hyphenex.us \ + fr.tmac hyphen.fr \ + sv.tmac hyphen.sv \ + de.tmac den.tmac hyphen.det hyphen.den hyphenex.det \ + cs.tmac hyphen.cs hyphenex.cs + +SPECIALFILES= an.tmac s.tmac www.tmac +STRIPFILES= e.tmac doc.tmac doc-old.tmac mdoc.local MDOCFILES= doc-common doc-ditroff doc-nroff doc-syms \ fr.ISO8859-1 ru.KOI8-R diff --git a/gnu/usr.bin/groff/tmac/patches/doc.tmac.patch b/gnu/usr.bin/groff/tmac/patches/doc.tmac.patch new file mode 100644 index 0000000000..e9e97acb31 --- /dev/null +++ b/gnu/usr.bin/groff/tmac/patches/doc.tmac.patch @@ -0,0 +1,22 @@ +--- doc.tmac 2010-01-26 10:24:32 +0100 ++++ doc.tmac 2010-01-26 14:46:23 +0100 +@@ -6425,6 +6494,9 @@ + .blm doc-empty-line + . + . ++.ec ++. ++. + .\" For UTF-8, map some characters conservatively for the sake + .\" of easy cut and paste. + . +@@ -6438,9 +6510,6 @@ + .\} + . + . +-.ec +-. +-. + .\" load local modifications + .mso mdoc.local + . -- 2.41.0 From 3bb7eedbfb632673b651e472b042d7ae92334bb5 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Tue, 26 Jan 2010 12:41:03 -0800 Subject: [PATCH 11/16] kernel - More buffer cache / VM coherency work * Add a buffer offset argument to nvtruncbuf(). The truncation length and blocksize for the block containing the truncation point alone are insufficient since prior blocks might be using a different blocksize. * Add a buffer offset argument to nvnode_pager_setsize() for the same reason. * nvtruncbuf() and nvextendbuf() now bdwrite() the buffer being zero-filled. This fixes a race where the clean buffer might be discarded and read from the medias pre-truncation backing store again before the filesystem has a chance to adjust it. * nvextendbuf() now takes additional arguments. The block offset for the old and new blocks must be passed. * Convert UFS over to the use nv*() API, hopefully solving any remaining fsx VM/BUF coherency issues. * Correct bugs with swap_burst_read mode, but leave the mode disabled. There are still unresolved issues when the mode is enabled. (Reported-by: YONETANI Tomokazu ) * Fix a bug in vm_prefault() which would leak VM pages, eventually causing the machine to run out of memory. --- sys/kern/vfs_vm.c | 84 +++++++++++++++++++++++++------------ sys/sys/vnode.h | 8 ++-- sys/vfs/nfs/nfs_bio.c | 5 ++- sys/vfs/nfs/nfs_subs.c | 2 +- sys/vfs/ufs/ffs_inode.c | 42 +++++++++++-------- sys/vfs/ufs/fs.h | 6 +++ sys/vfs/ufs/ufs_lookup.c | 3 +- sys/vfs/ufs/ufs_readwrite.c | 8 +++- sys/vfs/ufs/ufs_vnops.c | 2 +- sys/vm/swap_pager.c | 21 +++++----- sys/vm/vm_fault.c | 19 +++++++-- 11 files changed, 132 insertions(+), 68 deletions(-) diff --git a/sys/kern/vfs_vm.c b/sys/kern/vfs_vm.c index 5cae1308b8..02e9f8d51e 100644 --- a/sys/kern/vfs_vm.c +++ b/sys/kern/vfs_vm.c @@ -103,9 +103,22 @@ static int nvtruncbuf_bp_metasync(struct buf *bp, void *data); * as appropriate. All buffers and pages after the last buffer will be * destroyed. The last buffer itself will be destroyed only if the length * is exactly aligned with it. + * + * UFS typically passes the old block size prior to the actual truncation, + * then later resizes the block based on the new file size. NFS uses a + * fixed block size and doesn't care. HAMMER uses a block size based on + * the offset which is fixed for any particular offset. + * + * When zero-filling we must bdwrite() to avoid a window of opportunity + * where the kernel might throw away a clean buffer and the filesystem + * then attempts to bread() it again before completing (or as part of) + * the extension. The filesystem is still responsible for zero-filling + * any remainder when writing to the media in the strategy function when + * it is able to do so without the page being mapped. The page may still + * be mapped by userland here. */ int -nvtruncbuf(struct vnode *vp, off_t length, int blksize) +nvtruncbuf(struct vnode *vp, off_t length, int blksize, int boff) { off_t truncloffset; off_t truncboffset; @@ -113,7 +126,6 @@ nvtruncbuf(struct vnode *vp, off_t length, int blksize) lwkt_tokref vlock; struct buf *bp; int count; - int boff; int error; /* @@ -123,7 +135,8 @@ nvtruncbuf(struct vnode *vp, off_t length, int blksize) * * Destroy any pages beyond the last buffer. */ - boff = (int)(length % blksize); + if (boff < 0) + boff = (int)(length % blksize); if (boff) truncloffset = length + (blksize - boff); else @@ -139,13 +152,14 @@ nvtruncbuf(struct vnode *vp, off_t length, int blksize) nvtruncbuf_bp_trunc, &truncloffset); } while(count); - nvnode_pager_setsize(vp, length, blksize); + nvnode_pager_setsize(vp, length, blksize, boff); /* * Zero-fill the area beyond the file EOF that still fits within - * the last buffer. Even though we are modifying the contents - * of a buffer we are doing so beyond the file EOF and it doesn't - * count as a real modification. + * the last buffer. We must mark the buffer as dirty even though + * the modified area is beyond EOF to avoid races where the kernel + * might flush the buffer before the filesystem is able to reallocate + * the block. * * The VFS is responsible for dealing with the actual truncation. */ @@ -160,7 +174,7 @@ nvtruncbuf(struct vnode *vp, off_t length, int blksize) if (bp->b_dirtyend > boff) bp->b_dirtyend = boff; } - bqrelse(bp); + bdwrite(bp); } } else { error = 0; @@ -171,6 +185,9 @@ nvtruncbuf(struct vnode *vp, off_t length, int blksize) * truncated to 0. Since the metadata does not represent the entire * dirty list we have to rely on the hit count to ensure that we get * all of it. + * + * This is typically applicable only to UFS. NFS and HAMMER do + * not store indirect blocks in the per-vnode buffer cache. */ if (length > 0) { do { @@ -292,42 +309,47 @@ nvtruncbuf_bp_metasync(struct buf *bp, void *data) } /* - * Extend a file's buffer and pages to a new, larger size. Note that the - * blocksize passed is for the buffer covering the old file size, NOT the - * new file size. + * Extend a file's buffer and pages to a new, larger size. The block size + * at both the old and new length must be passed, but buffer cache operations + * will only be performed on the old block. The new nlength/nblksize will + * be used to properly set the VM object size. * * To make this explicit we require the old length to passed even though - * we can acquire it from vp->v_filesize. + * we can acquire it from vp->v_filesize, which also avoids potential + * corruption if the filesystem and vp get desynchronized somehow. * * If the caller intends to immediately write into the newly extended * space pass trivial == 1. If trivial is 0 the original buffer will be * zero-filled as necessary to clean out any junk in the extended space. * - * NOTE: We do not zero-fill to the end of the buffer or page to remove - * mmap cruft since userland can just re-cruft it. Filesystems are - * responsible for zero-filling extra space beyond the file EOF during - * strategy write functions, or zero-filling junk areas on read. + * When zero-filling we must bdwrite() to avoid a window of opportunity + * where the kernel might throw away a clean buffer and the filesystem + * then attempts to bread() it again before completing (or as part of) + * the extension. The filesystem is still responsible for zero-filling + * any remainder when writing to the media in the strategy function when + * it is able to do so without the page being mapped. The page may still + * be mapped by userland here. */ int nvextendbuf(struct vnode *vp, off_t olength, off_t nlength, - int oblksize, int nblksize, int trivial) + int oblksize, int nblksize, int oboff, int nboff, int trivial) { off_t truncboffset; struct buf *bp; - int boff; int error; error = 0; - nvnode_pager_setsize(vp, nlength, nblksize); + nvnode_pager_setsize(vp, nlength, nblksize, nboff); if (trivial == 0) { - boff = (int)(olength % oblksize); - truncboffset = olength - boff; + if (oboff < 0) + oboff = (int)(olength % oblksize); + truncboffset = olength - oboff; - if (boff) { + if (oboff) { error = bread(vp, truncboffset, oblksize, &bp); if (error == 0) { - bzero(bp->b_data + boff, oblksize - boff); - bqrelse(bp); + bzero(bp->b_data + oboff, oblksize - oboff); + bdwrite(bp); } } } @@ -342,9 +364,17 @@ nvextendbuf(struct vnode *vp, off_t olength, off_t nlength, * overlapping pages. Zeroing is the responsibility of nvtruncbuf(). * However, it does unmap VM pages from the user address space on a * page-granular (verses buffer cache granular) basis. + * + * If boff is passed as -1 the base offset of the buffer cache buffer is + * calculated from length and blksize. Filesystems such as UFS which deal + * with fragments have to specify a boff >= 0 since the base offset cannot + * be calculated from length and blksize. + * + * For UFS blksize is the 'new' blocksize, used only to determine how large + * the VM object must become. */ void -nvnode_pager_setsize(struct vnode *vp, off_t length, int blksize) +nvnode_pager_setsize(struct vnode *vp, off_t length, int blksize, int boff) { vm_pindex_t nobjsize; vm_pindex_t oobjsize; @@ -352,7 +382,6 @@ nvnode_pager_setsize(struct vnode *vp, off_t length, int blksize) vm_object_t object; vm_page_t m; off_t truncboffset; - int boff; /* * Degenerate conditions @@ -370,7 +399,8 @@ nvnode_pager_setsize(struct vnode *vp, off_t length, int blksize) * Buffers do not have to be page-aligned. Make sure * nobjsize is beyond the last page of the buffer. */ - boff = (int)(length % blksize); + if (boff < 0) + boff = (int)(length % blksize); truncboffset = length - boff; oobjsize = object->size; if (boff) diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h index 1d1c8de7cc..5bf78f45fd 100644 --- a/sys/sys/vnode.h +++ b/sys/sys/vnode.h @@ -506,10 +506,12 @@ int vrevoke (struct vnode *vp, struct ucred *cred); int vinvalbuf (struct vnode *vp, int save, int slpflag, int slptimeo); int vtruncbuf (struct vnode *vp, off_t length, int blksize); void vnode_pager_setsize (struct vnode *, vm_ooffset_t); -int nvtruncbuf (struct vnode *vp, off_t length, int blksize); -void nvnode_pager_setsize (struct vnode *vp, off_t length, int blksize); +int nvtruncbuf (struct vnode *vp, off_t length, int blksize, int boff); int nvextendbuf(struct vnode *vp, off_t olength, off_t nlength, - int oblksize, int nblksize, int trivial); + int oblksize, int nblksize, + int oboff, int nboff, int trivial); +void nvnode_pager_setsize (struct vnode *vp, off_t length, + int blksize, int boff); int vfsync(struct vnode *vp, int waitfor, int passes, int (*checkdef)(struct buf *), int (*waitoutput)(struct vnode *, struct thread *)); diff --git a/sys/vfs/nfs/nfs_bio.c b/sys/vfs/nfs/nfs_bio.c index 29cee4c619..2c429052a0 100644 --- a/sys/vfs/nfs/nfs_bio.c +++ b/sys/vfs/nfs/nfs_bio.c @@ -1250,10 +1250,11 @@ nfs_meta_setsize(struct vnode *vp, struct thread *td, off_t nsize, int trivial) np->n_size = nsize; if (nsize < osize) { - error = nvtruncbuf(vp, nsize, biosize); + error = nvtruncbuf(vp, nsize, biosize, -1); } else { error = nvextendbuf(vp, osize, nsize, - biosize, biosize, trivial); + biosize, biosize, -1, -1, + trivial); } return(error); } diff --git a/sys/vfs/nfs/nfs_subs.c b/sys/vfs/nfs/nfs_subs.c index 48d4d5645e..498ed62838 100644 --- a/sys/vfs/nfs/nfs_subs.c +++ b/sys/vfs/nfs/nfs_subs.c @@ -848,7 +848,7 @@ nfs_loadattrcache(struct vnode *vp, struct mbuf **mdp, caddr_t *dposp, np->n_size = vap->va_size; np->n_flag |= NRMODIFIED; } - nvnode_pager_setsize(vp, np->n_size); + nvnode_pager_setsize(vp, np->n_size, XXX); #endif } else { np->n_size = vap->va_size; diff --git a/sys/vfs/ufs/ffs_inode.c b/sys/vfs/ufs/ffs_inode.c index b845cbfeaf..aa9bd5ac50 100644 --- a/sys/vfs/ufs/ffs_inode.c +++ b/sys/vfs/ufs/ffs_inode.c @@ -201,23 +201,34 @@ ffs_truncate(struct vnode *vp, off_t length, int flags, struct ucred *cred) #endif softdep_setup_freeblocks(oip, length); vinvalbuf(ovp, 0, 0, 0); - vnode_pager_setsize(ovp, 0); + nvnode_pager_setsize(ovp, 0, fs->fs_bsize, 0); oip->i_flag |= IN_CHANGE | IN_UPDATE; return (ffs_update(ovp, 0)); } } osize = oip->i_size; + /* * Lengthen the size of the file. We must ensure that the * last byte of the file is allocated. Since the smallest * value of osize is 0, length will be at least 1. + * + * nvextendbuf() only breads the old buffer. The blocksize + * of the new buffer must be specified so it knows how large + * to make the VM object. */ if (osize < length) { - vnode_pager_setsize(ovp, length); + nvextendbuf(vp, osize, length, + blkoffsize(fs, oip, osize), /* oblksize */ + blkoffresize(fs, length), /* nblksize */ + blkoff(fs, osize), + blkoff(fs, length), + 0); + aflags = B_CLRBUF; if (flags & IO_SYNC) aflags |= B_SYNC; - /* BALLOC reallocates fragment at old EOF */ + /* BALLOC will reallocate the fragment at the old EOF */ error = VOP_BALLOC(ovp, length - 1, 1, cred, aflags, &bp); if (error) return (error); @@ -231,23 +242,16 @@ ffs_truncate(struct vnode *vp, off_t length, int flags, struct ucred *cred) oip->i_flag |= IN_CHANGE | IN_UPDATE; return (ffs_update(ovp, 1)); } + /* - * Shorten the size of the file. If the file is not being - * truncated to a block boundary, the contents of the - * partial block following the end of the file must be - * zero'ed in case it ever becomes accessible again because - * of subsequent file growth. Directories however are not - * zero'ed as they should grow back initialized to empty. + * Shorten the size of the file. * - * The vtruncbuf() must be issued prior the b*write() of - * the buffer straddling the truncation point. The b*write() - * calls vfs_clean_bio() which revalidates VM pages which - * may have been invalidated by the vtruncbuf(). Otherwise - * we may wind up with B_CACHE set on a buf containing invalid - * pages which will really mess up getpages. + * NOTE: The block size specified in nvtruncbuf() is the blocksize + * of the buffer containing length prior to any reallocation + * of the block. */ - allerror = vtruncbuf(ovp, length, fs->fs_bsize); - + allerror = nvtruncbuf(ovp, length, blkoffsize(fs, oip, length), + blkoff(fs, length)); offset = blkoff(fs, length); if (offset == 0) { oip->i_size = length; @@ -260,6 +264,7 @@ ffs_truncate(struct vnode *vp, off_t length, int flags, struct ucred *cred) if (error) { return (error); } + /* * When we are doing soft updates and the UFS_BALLOC * above fills in a direct block hole with a full sized @@ -275,9 +280,12 @@ ffs_truncate(struct vnode *vp, off_t length, int flags, struct ucred *cred) } oip->i_size = length; size = blksize(fs, oip, lbn); +#if 0 + /* vtruncbuf deals with this */ if (ovp->v_type != VDIR) bzero((char *)bp->b_data + offset, (uint)(size - offset)); +#endif /* Kirk's code has reallocbuf(bp, size, 1) here */ allocbuf(bp, size); if (bp->b_bufsize == fs->fs_bsize) diff --git a/sys/vfs/ufs/fs.h b/sys/vfs/ufs/fs.h index b05e5342d1..52ff517365 100644 --- a/sys/vfs/ufs/fs.h +++ b/sys/vfs/ufs/fs.h @@ -545,6 +545,12 @@ struct ocg { ? (fs)->fs_bsize \ : (fragroundup(fs, blkoff(fs, (size))))) +/* + * Extract the block size for the buffer cache buffer at offset (loc) + * relative to the current ip->i_size, or relative to a specific ip->i_size. + */ +#define blkoffsize(fs, ip, loc) blksize(fs, ip, lblkno(fs, loc)) +#define blkoffresize(fs, loc) sblksize(fs, loc, lblkno(fs, loc)) /* * Number of disk sectors per block/fragment; assumes DEV_BSIZE byte diff --git a/sys/vfs/ufs/ufs_lookup.c b/sys/vfs/ufs/ufs_lookup.c index df7af7fe9c..22fc72a81a 100644 --- a/sys/vfs/ufs/ufs_lookup.c +++ b/sys/vfs/ufs/ufs_lookup.c @@ -716,7 +716,8 @@ ufs_direnter(struct vnode *dvp, struct vnode *tvp, struct direct *dirp, */ if (dp->i_offset & (DIRBLKSIZ - 1)) panic("ufs_direnter: newblk"); - vnode_pager_setsize(dvp, dp->i_offset + DIRBLKSIZ); + nvnode_pager_setsize(dvp, dp->i_offset + DIRBLKSIZ, + DIRBLKSIZ, -1); flags = B_CLRBUF; if (!DOINGSOFTDEP(dvp) && !DOINGASYNC(dvp)) flags |= B_SYNC; diff --git a/sys/vfs/ufs/ufs_readwrite.c b/sys/vfs/ufs/ufs_readwrite.c index c440239d22..cced082738 100644 --- a/sys/vfs/ufs/ufs_readwrite.c +++ b/sys/vfs/ufs/ufs_readwrite.c @@ -239,6 +239,7 @@ ffs_write(struct vop_write_args *ap) struct buf *bp; ufs_daddr_t lbn; off_t osize; + off_t nsize; int seqcount; int blkoffset, error, extended, flags, ioflag, resid, size, xfersize; struct thread *td; @@ -312,8 +313,11 @@ ffs_write(struct vop_write_args *ap) if (uio->uio_resid < xfersize) xfersize = uio->uio_resid; - if (uio->uio_offset + xfersize > ip->i_size) - vnode_pager_setsize(vp, uio->uio_offset + xfersize); + if (uio->uio_offset + xfersize > ip->i_size) { + nsize = uio->uio_offset + xfersize; + nvnode_pager_setsize(vp, nsize, + blkoffresize(fs, nsize), blkoff(fs, nsize)); + } #if 0 /* diff --git a/sys/vfs/ufs/ufs_vnops.c b/sys/vfs/ufs/ufs_vnops.c index 6a014a5459..990b5a27ba 100644 --- a/sys/vfs/ufs/ufs_vnops.c +++ b/sys/vfs/ufs/ufs_vnops.c @@ -1377,7 +1377,7 @@ ufs_mkdir(struct vop_old_mkdir_args *ap) dirtemplate = *dtp; dirtemplate.dot_ino = ip->i_number; dirtemplate.dotdot_ino = dp->i_number; - vnode_pager_setsize(tvp, DIRBLKSIZ); + nvnode_pager_setsize(tvp, DIRBLKSIZ, DIRBLKSIZ, -1); error = VOP_BALLOC(tvp, 0LL, DIRBLKSIZ, cnp->cn_cred, B_CLRBUF, &bp); if (error) goto bad; diff --git a/sys/vm/swap_pager.c b/sys/vm/swap_pager.c index fe7601bb52..bfa9c23e28 100644 --- a/sys/vm/swap_pager.c +++ b/sys/vm/swap_pager.c @@ -1159,12 +1159,11 @@ swap_pager_getpage(vm_object_t object, vm_page_t *mpp, int seqaccess) * set on the last page of the read-ahead to continue the pipeline. */ if (mreq->valid == VM_PAGE_BITS_ALL) { - if (swap_burst_read) + if (swap_burst_read == 0 || mreq->pindex + 1 >= object->size) return(VM_PAGER_OK); crit_enter(); - blk = swp_pager_meta_ctl(mreq->object, mreq->pindex + 1, 0); - if (blk == SWAPBLK_NONE || - mreq->pindex + 1 >= object->size) { + blk = swp_pager_meta_ctl(object, mreq->pindex + 1, 0); + if (blk == SWAPBLK_NONE) { crit_exit(); return(VM_PAGER_OK); } @@ -1181,7 +1180,7 @@ swap_pager_getpage(vm_object_t object, vm_page_t *mpp, int seqaccess) crit_exit(); return(VM_PAGER_OK); } - /*vm_page_unqueue_nowakeup(m);*/ + vm_page_unqueue_nowakeup(m); vm_page_busy(m); } mreq = m; @@ -1208,7 +1207,6 @@ swap_pager_getpage(vm_object_t object, vm_page_t *mpp, int seqaccess) i < XIO_INTERNAL_PAGES && mreq->pindex + i < object->size; ++i) { daddr_t iblk; - break; iblk = swp_pager_meta_ctl(object, mreq->pindex + i, 0); if (iblk != blk + i) @@ -1224,7 +1222,7 @@ swap_pager_getpage(vm_object_t object, vm_page_t *mpp, int seqaccess) } else { if ((m->flags & PG_BUSY) || m->busy || m->valid) break; - /*vm_page_unqueue_nowakeup(m);*/ + vm_page_unqueue_nowakeup(m); vm_page_busy(m); } marray[i] = m; @@ -1285,7 +1283,7 @@ swap_pager_getpage(vm_object_t object, vm_page_t *mpp, int seqaccess) * We still hold the lock on mreq, and our automatic completion routine * does not remove it. */ - vm_object_pip_add(mreq->object, bp->b_xio.xio_npages); + vm_object_pip_add(object, bp->b_xio.xio_npages); /* * perform the I/O. NOTE!!! bp cannot be considered valid after @@ -1301,7 +1299,7 @@ swap_pager_getpage(vm_object_t object, vm_page_t *mpp, int seqaccess) vn_strategy(swapdev_vp, bio); /* - * wait for the page we want to complete. PG_SWAPINPROG is always + * Wait for the page we want to complete. PG_SWAPINPROG is always * cleared on completion. If an I/O error occurs, SWAPBLK_NONE * is set in the meta-data. * @@ -1311,8 +1309,10 @@ swap_pager_getpage(vm_object_t object, vm_page_t *mpp, int seqaccess) if (raonly) return(VM_PAGER_OK); + /* + * Read-ahead includes originally requested page case. + */ crit_enter(); - while ((mreq->flags & PG_SWAPINPROG) != 0) { vm_page_flag_set(mreq, PG_WANTED | PG_REFERENCED); mycpu->gd_cnt.v_intrans++; @@ -1325,7 +1325,6 @@ swap_pager_getpage(vm_object_t object, vm_page_t *mpp, int seqaccess) ); } } - crit_exit(); /* diff --git a/sys/vm/vm_fault.c b/sys/vm/vm_fault.c index 67fad1c18d..d00d2e8628 100644 --- a/sys/vm/vm_fault.c +++ b/sys/vm/vm_fault.c @@ -1909,6 +1909,7 @@ vm_prefault(pmap_t pmap, vm_offset_t addra, vm_map_entry_t entry, int prot) crit_enter(); for (i = 0; i < PAGEORDER_SIZE; i++) { vm_object_t lobject; + int allocated = 0; addr = addra + vm_prefault_pageorder[i]; if (addr > addra + (PFFOR * PAGE_SIZE)) @@ -1928,6 +1929,10 @@ vm_prefault(pmap_t pmap, vm_offset_t addra, vm_map_entry_t entry, int prot) * and we determine it would be advantageous, then allocate * a zero-fill page for the base object. The base object * is guaranteed to be OBJT_DEFAULT for this case. + * + * In order to not have to check the pager via *haspage*() + * we stop if any non-default object is encountered. e.g. + * a vnode or swap object would stop the loop. */ index = ((addr - entry->start) + entry->offset) >> PAGE_SHIFT; lobject = object; @@ -1945,6 +1950,7 @@ vm_prefault(pmap_t pmap, vm_offset_t addra, vm_map_entry_t entry, int prot) vm_page_count_min(0)) { break; } + /* note: allocate from base object */ m = vm_page_alloc(object, index, VM_ALLOC_NORMAL | VM_ALLOC_ZERO); @@ -1956,7 +1962,7 @@ vm_prefault(pmap_t pmap, vm_offset_t addra, vm_map_entry_t entry, int prot) } mycpu->gd_cnt.v_zfod++; m->valid = VM_PAGE_BITS_ALL; - vm_page_wakeup(m); + allocated = 1; pprot = prot; /* lobject = object .. not needed */ break; @@ -1993,9 +1999,16 @@ vm_prefault(pmap_t pmap, vm_offset_t addra, vm_map_entry_t entry, int prot) vm_object_set_writeable_dirty(m->object); /* - * Enter the page into the pmap if appropriate. + * Enter the page into the pmap if appropriate. If we had + * allocated the page we have to place it on a queue. If not + * we just have to make sure it isn't on the cache queue + * (pages on the cache queue are not allowed to be mapped). */ - if (((m->valid & VM_PAGE_BITS_ALL) == VM_PAGE_BITS_ALL) && + if (allocated) { + pmap_enter(pmap, addr, m, pprot, 0); + vm_page_deactivate(m); + vm_page_wakeup(m); + } else if (((m->valid & VM_PAGE_BITS_ALL) == VM_PAGE_BITS_ALL) && (m->busy == 0) && (m->flags & (PG_BUSY | PG_FICTITIOUS)) == 0) { -- 2.41.0 From f6468e9eb2c9de9b9af113b10cd1a0b3c64c0e42 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Tue, 26 Jan 2010 12:50:33 -0800 Subject: [PATCH 12/16] HAMMER VFS - Disallow rebalancing on small-memory machines * Rebalancing may have to hold upwards of 3900 buffers locked in the worst case, disallow the operation on machines which do not configure enough buffer cache buffers. --- sys/vfs/hammer/hammer.h | 10 ++++++++++ sys/vfs/hammer/hammer_ioctl.c | 11 +++++++++++ 2 files changed, 21 insertions(+) diff --git a/sys/vfs/hammer/hammer.h b/sys/vfs/hammer/hammer.h index e883edf5ba..b3cae002a0 100644 --- a/sys/vfs/hammer/hammer.h +++ b/sys/vfs/hammer/hammer.h @@ -856,6 +856,16 @@ struct hammer_sync_info { int waitfor; }; +/* + * Minium buffer cache bufs required to rebalance the B-Tree. + * This is because we must hold the children and the children's children + * locked. Even this might not be enough if things are horribly out + * of balance. + */ +#define HAMMER_REBALANCE_MIN_BUFS \ + (HAMMER_BTREE_LEAF_ELMS * HAMMER_BTREE_LEAF_ELMS) + + #endif /* diff --git a/sys/vfs/hammer/hammer_ioctl.c b/sys/vfs/hammer/hammer_ioctl.c index 7d68e13c92..e099a36439 100644 --- a/sys/vfs/hammer/hammer_ioctl.c +++ b/sys/vfs/hammer/hammer_ioctl.c @@ -88,6 +88,17 @@ hammer_ioctl(hammer_inode_t ip, u_long com, caddr_t data, int fflag, } break; case HAMMERIOC_REBALANCE: + /* + * Rebalancing needs to lock a lot of B-Tree nodes. The + * children and children's children. Systems with very + * little memory will not be able to do it. + */ + if (error == 0 && nbuf < HAMMER_REBALANCE_MIN_BUFS) { + kprintf("hammer: System has insufficient buffers " + "to rebalance the tree. nbuf < %d\n", + HAMMER_REBALANCE_MIN_BUFS); + error = ENOSPC; + } if (error == 0) { error = hammer_ioc_rebalance(&trans, ip, (struct hammer_ioc_rebalance *)data); -- 2.41.0 From 6362a262e633b546c510362dad6fd7adfea9f32e Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Thu, 28 Jan 2010 09:04:34 -0800 Subject: [PATCH 13/16] kernel - Even more buffer cache / VM coherency work * nvtruncbuf/nvextendbuf now clear the cached layer 2 disk offset from the buffer cache buffer being zero-extended or zero-truncated. This is required by HAMMER since HAMMER never overwrites data in the same media block. * Convert HAMMER over to the new nvtruncbuf/nvextendbuf API. The new API automatically handles zero-truncations and zero-extensions within the buffer straddling the file EOF and also changes the way backing VM pages are handled. Instead of cutting the VM pages off at the nearest boundary past file EOF any pages in the straddling buffer are left fully valid and intact, which avoids numerous pitfalls the old API had in dealing with VM page valid/dirty bits during file truncations and extensions. * Make sure the PG_ZERO flag in the VM page is cleared in allocbuf(). * Refactor HAMMER's strategy code to close two small windows of opportunity where stale data might be read from the media. In particular, refactor hammer_ip_*_bulk(), hammer_frontend_trunc*(), and hammer_io_direct_write(). These were detected by the fsx test program on a heavily paging system with physical memory set artificially low. Data flows through three stages in HAMMER: (1) Buffer cache. (2) In-memory records referencing the direct-write data offset on the media until the actual B-Tree is updated on-media at a later time. (3) Media B-Tree lookups referencing the committed data offset on the media. HAMMER must perform a careful, fragile dance to ensure that access to the data from userland doesn't slip through any cracks while the data is transitioning between stages. Two cracks were found and fixed: (A) The direct-write code was allowing the BUF/BIO in the strategy call to complete before adding the in-memory record to the index for the stage 1->2 transition. Now fixed. (B) The HAMMER truncation code was skipping in-memory records queued to the backend flusher under the assumption that the backend flusher would deal with them, which it will eventually, but there was a small window where the data was still accessible by userland after the truncation if userland did a truncation followed by an extension. Now fixed. --- sys/kern/vfs_bio.c | 1 + sys/kern/vfs_vm.c | 10 +++ sys/vfs/hammer/hammer.h | 6 +- sys/vfs/hammer/hammer_inode.c | 9 +-- sys/vfs/hammer/hammer_io.c | 25 +++---- sys/vfs/hammer/hammer_object.c | 119 ++++++++++++++++++++------------- sys/vfs/hammer/hammer_subs.c | 9 +++ sys/vfs/hammer/hammer_vnops.c | 87 ++++++++++++------------ 8 files changed, 156 insertions(+), 110 deletions(-) diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c index 07679e8a43..6a4cfba638 100644 --- a/sys/kern/vfs_bio.c +++ b/sys/kern/vfs_bio.c @@ -3163,6 +3163,7 @@ allocbuf(struct buf *bp, int size) if (m) { vm_page_wire(m); vm_page_wakeup(m); + vm_page_flag_clear(m, PG_ZERO); bp->b_flags &= ~B_CACHE; bp->b_xio.xio_pages[bp->b_xio.xio_npages] = m; ++bp->b_xio.xio_npages; diff --git a/sys/kern/vfs_vm.c b/sys/kern/vfs_vm.c index 02e9f8d51e..36c3955ee2 100644 --- a/sys/kern/vfs_vm.c +++ b/sys/kern/vfs_vm.c @@ -116,6 +116,10 @@ static int nvtruncbuf_bp_metasync(struct buf *bp, void *data); * any remainder when writing to the media in the strategy function when * it is able to do so without the page being mapped. The page may still * be mapped by userland here. + * + * When modifying a buffer we must clear any cached raw disk offset. + * bdwrite() will call BMAP on it again. Some filesystems, like HAMMER, + * never overwrite existing data blocks. */ int nvtruncbuf(struct vnode *vp, off_t length, int blksize, int boff) @@ -174,6 +178,7 @@ nvtruncbuf(struct vnode *vp, off_t length, int blksize, int boff) if (bp->b_dirtyend > boff) bp->b_dirtyend = boff; } + bp->b_bio2.bio_offset = NOOFFSET; bdwrite(bp); } } else { @@ -329,6 +334,10 @@ nvtruncbuf_bp_metasync(struct buf *bp, void *data) * any remainder when writing to the media in the strategy function when * it is able to do so without the page being mapped. The page may still * be mapped by userland here. + * + * When modifying a buffer we must clear any cached raw disk offset. + * bdwrite() will call BMAP on it again. Some filesystems, like HAMMER, + * never overwrite existing data blocks. */ int nvextendbuf(struct vnode *vp, off_t olength, off_t nlength, @@ -349,6 +358,7 @@ nvextendbuf(struct vnode *vp, off_t olength, off_t nlength, error = bread(vp, truncboffset, oblksize, &bp); if (error == 0) { bzero(bp->b_data + oboff, oblksize - oboff); + bp->b_bio2.bio_offset = NOOFFSET; bdwrite(bp); } } diff --git a/sys/vfs/hammer/hammer.h b/sys/vfs/hammer/hammer.h index b3cae002a0..99a41d4524 100644 --- a/sys/vfs/hammer/hammer.h +++ b/sys/vfs/hammer/hammer.h @@ -1236,6 +1236,7 @@ int hammer_ip_add_directory(struct hammer_transaction *trans, int hammer_ip_del_directory(struct hammer_transaction *trans, hammer_cursor_t cursor, hammer_inode_t dip, hammer_inode_t ip); +void hammer_ip_replace_bulk(hammer_mount_t hmp, hammer_record_t record); hammer_record_t hammer_ip_add_bulk(hammer_inode_t ip, off_t file_offset, void *data, int bytes, int *errorp); int hammer_ip_frontend_trunc(struct hammer_inode *ip, off_t file_size); @@ -1274,8 +1275,8 @@ void hammer_io_waitdep(struct hammer_io *io); void hammer_io_wait_all(hammer_mount_t hmp, const char *ident, int doflush); int hammer_io_direct_read(hammer_mount_t hmp, struct bio *bio, hammer_btree_leaf_elm_t leaf); -int hammer_io_direct_write(hammer_mount_t hmp, hammer_record_t record, - struct bio *bio); +int hammer_io_direct_write(hammer_mount_t hmp, struct bio *bio, + hammer_record_t record); void hammer_io_direct_wait(hammer_record_t record); void hammer_io_direct_uncache(hammer_mount_t hmp, hammer_btree_leaf_elm_t leaf); void hammer_io_write_interlock(hammer_io_t io); @@ -1354,6 +1355,7 @@ udev_t hammer_fsid_to_udev(uuid_t *uuid); int hammer_blocksize(int64_t file_offset); +int hammer_blockoff(int64_t file_offset); int64_t hammer_blockdemarc(int64_t file_offset1, int64_t file_offset2); /* diff --git a/sys/vfs/hammer/hammer_inode.c b/sys/vfs/hammer/hammer_inode.c index ed706b3a29..0904eda1e5 100644 --- a/sys/vfs/hammer/hammer_inode.c +++ b/sys/vfs/hammer/hammer_inode.c @@ -3045,13 +3045,10 @@ hammer_inode_unloadable_check(hammer_inode_t ip, int getvp) /* * Final cleanup */ - if (ip->vp) { - vtruncbuf(ip->vp, 0, HAMMER_BUFSIZE); - vnode_pager_setsize(ip->vp, 0); - } - if (getvp) { + if (ip->vp) + nvtruncbuf(ip->vp, 0, HAMMER_BUFSIZE, 0); + if (getvp) vput(vp); - } } } diff --git a/sys/vfs/hammer/hammer_io.c b/sys/vfs/hammer/hammer_io.c index 40f6ef7bd6..d679e645f8 100644 --- a/sys/vfs/hammer/hammer_io.c +++ b/sys/vfs/hammer/hammer_io.c @@ -1242,8 +1242,8 @@ hammer_io_direct_read_complete(struct bio *nbio) * is set. The recorded is added to its object. */ int -hammer_io_direct_write(hammer_mount_t hmp, hammer_record_t record, - struct bio *bio) +hammer_io_direct_write(hammer_mount_t hmp, struct bio *bio, + hammer_record_t record) { hammer_btree_leaf_elm_t leaf = &record->leaf; hammer_off_t buf_offset; @@ -1261,6 +1261,11 @@ hammer_io_direct_write(hammer_mount_t hmp, hammer_record_t record, KKASSERT(buf_offset > HAMMER_ZONE_BTREE); KKASSERT(bio->bio_buf->b_cmd == BUF_CMD_WRITE); + /* + * Issue or execute the I/O. The new memory record must replace + * the old one before the I/O completes, otherwise a reaquisition of + * the buffer will load the old media data instead of the new. + */ if ((buf_offset & HAMMER_BUFMASK) == 0 && leaf->data_len >= HAMMER_BUFSIZE) { /* @@ -1305,6 +1310,7 @@ hammer_io_direct_write(hammer_mount_t hmp, hammer_record_t record, nbio->bio_offset = volume->ondisk->vol_buf_beg + zone2_offset; hammer_stats_disk_write += bp->b_bufsize; + hammer_ip_replace_bulk(hmp, record); vn_strategy(volume->devvp, nbio); hammer_io_flush_mark(volume); } @@ -1326,20 +1332,15 @@ hammer_io_direct_write(hammer_mount_t hmp, hammer_record_t record, hammer_io_modify_done(&buffer->io); hammer_rel_buffer(buffer, 0); bp->b_resid = 0; + hammer_ip_replace_bulk(hmp, record); biodone(bio); } } - if (error == 0) { - /* - * The record is all setup now, add it. Potential conflics - * have already been dealt with. - */ - error = hammer_mem_add(record); - KKASSERT(error == 0); - } else { + if (error) { /* - * Major suckage occured. Also note: The record was never added - * to the tree so we do not have to worry about the backend. + * Major suckage occured. Also note: The record was + * never added to the tree so we do not have to worry + * about the backend. */ kprintf("hammer_direct_write: failed @ %016llx\n", (long long)leaf->data_offset); diff --git a/sys/vfs/hammer/hammer_object.c b/sys/vfs/hammer/hammer_object.c index b947084766..6f578db67a 100644 --- a/sys/vfs/hammer/hammer_object.c +++ b/sys/vfs/hammer/hammer_object.c @@ -54,7 +54,7 @@ struct rec_trunc_info { struct hammer_bulk_info { hammer_record_t record; - struct hammer_btree_leaf_elm leaf; + hammer_record_t conflict; }; /* @@ -140,7 +140,7 @@ static int hammer_rec_overlap_cmp(hammer_record_t rec, void *data) { struct hammer_bulk_info *info = data; - hammer_btree_leaf_elm_t leaf = &info->leaf; + hammer_btree_leaf_elm_t leaf = &info->record->leaf; if (rec->leaf.base.rec_type < leaf->base.rec_type) return(-3); @@ -893,33 +893,23 @@ hammer_ip_add_record(struct hammer_transaction *trans, hammer_record_t record) } /* - * Locate a bulk record in-memory. Bulk records allow disk space to be - * reserved so the front-end can flush large data writes without having - * to queue the BIO to the flusher. Only the related record gets queued - * to the flusher. + * Locate a pre-existing bulk record in memory. The caller wishes to + * replace the record with a new one. The existing record may have a + * different length (and thus a different key) so we have to use an + * overlap check function. */ - static hammer_record_t -hammer_ip_get_bulk(hammer_inode_t ip, off_t file_offset, int bytes) +hammer_ip_get_bulk(hammer_record_t record) { struct hammer_bulk_info info; - - bzero(&info, sizeof(info)); - info.leaf.base.obj_id = ip->obj_id; - info.leaf.base.key = file_offset + bytes; - info.leaf.base.create_tid = 0; - info.leaf.base.delete_tid = 0; - info.leaf.base.rec_type = HAMMER_RECTYPE_DATA; - info.leaf.base.obj_type = 0; /* unused */ - info.leaf.base.btype = HAMMER_BTREE_TYPE_RECORD; /* unused */ - info.leaf.base.localization = ip->obj_localization + /* unused */ - HAMMER_LOCALIZE_MISC; - info.leaf.data_len = bytes; + hammer_inode_t ip = record->ip; + info.record = record; + info.conflict = NULL; hammer_rec_rb_tree_RB_SCAN(&ip->rec_tree, hammer_rec_overlap_cmp, hammer_bulk_scan_callback, &info); - return(info.record); /* may be NULL */ + return(info.conflict); /* may be NULL */ } /* @@ -936,7 +926,7 @@ hammer_bulk_scan_callback(hammer_record_t record, void *data) return(0); } hammer_ref(&record->lock); - info->record = record; + info->conflict = record; return(-1); /* stop scan */ } @@ -948,39 +938,21 @@ hammer_bulk_scan_callback(hammer_record_t record, void *data) * cache buffers and we should be able to manipulate any overlapping * in-memory records. * - * The caller is responsible for adding the returned record. + * The caller is responsible for adding the returned record and deleting + * the returned conflicting record (if any), typically by calling + * hammer_ip_replace_bulk() (via hammer_io_direct_write()). */ hammer_record_t hammer_ip_add_bulk(hammer_inode_t ip, off_t file_offset, void *data, int bytes, int *errorp) { hammer_record_t record; - hammer_record_t conflict; int zone; /* - * Deal with conflicting in-memory records. We cannot have multiple - * in-memory records for the same base offset without seriously - * confusing the backend, including but not limited to the backend - * issuing delete-create-delete or create-delete-create sequences - * and asserting on the delete_tid being the same as the create_tid. - * - * If we encounter a record with the backend interlock set we cannot - * immediately delete it without confusing the backend. - */ - while ((conflict = hammer_ip_get_bulk(ip, file_offset, bytes)) !=NULL) { - if (conflict->flags & HAMMER_RECF_INTERLOCK_BE) { - conflict->flags |= HAMMER_RECF_WANTED; - tsleep(conflict, 0, "hmrrc3", 0); - } else { - conflict->flags |= HAMMER_RECF_DELETED_FE; - } - hammer_rel_mem_record(conflict); - } - - /* - * Create a record to cover the direct write. This is called with - * the related BIO locked so there should be no possible conflict. + * Create a record to cover the direct write. The record cannot + * be added to the in-memory RB tree here as it might conflict + * with an existing memory record. See hammer_io_direct_write(). * * The backend is responsible for finalizing the space reserved in * this record. @@ -1009,15 +981,53 @@ hammer_ip_add_bulk(hammer_inode_t ip, off_t file_offset, void *data, int bytes, record->leaf.data_len = bytes; hammer_crc_set_leaf(data, &record->leaf); KKASSERT(*errorp == 0); + return(record); } +/* + * Called by hammer_io_direct_write() prior to any possible completion + * of the BIO to emplace the memory record associated with the I/O and + * to replace any prior memory record which might still be active. + * + * Setting the FE deleted flag on the old record (if any) avoids any RB + * tree insertion conflict, amoung other things. + * + * This has to be done prior to the caller completing any related buffer + * cache I/O or a reinstantiation of the buffer may load data from the + * old media location instead of the new media location. The holding + * of the locked buffer cache buffer serves to interlock the record + * replacement operation. + */ +void +hammer_ip_replace_bulk(hammer_mount_t hmp, hammer_record_t record) +{ + hammer_record_t conflict; + int error; + + while ((conflict = hammer_ip_get_bulk(record)) != NULL) { + if ((conflict->flags & HAMMER_RECF_INTERLOCK_BE) == 0) { + conflict->flags |= HAMMER_RECF_DELETED_FE; + break; + } + conflict->flags |= HAMMER_RECF_WANTED; + tsleep(conflict, 0, "hmrrc3", 0); + hammer_rel_mem_record(conflict); + } + error = hammer_mem_add(record); + if (conflict) + hammer_rel_mem_record(conflict); + KKASSERT(error == 0); +} + /* * Frontend truncation code. Scan in-memory records only. On-disk records * and records in a flushing state are handled by the backend. The vnops * setattr code will handle the block containing the truncation point. * * Partial blocks are not deleted. + * + * This code is only called on regular files. */ int hammer_ip_frontend_trunc(struct hammer_inode *ip, off_t file_size) @@ -1040,15 +1050,30 @@ hammer_ip_frontend_trunc(struct hammer_inode *ip, off_t file_size) return(0); } +/* + * Scan callback for frontend records to destroy during a truncation. + * We must ensure that DELETED_FE is set on the record or the frontend + * will get confused in future read() calls. + * + * NOTE: DELETED_FE cannot be set while the record interlock (BE) is held. + * In this rare case we must wait for the interlock to be cleared. + * + * NOTE: This function is only called on regular files. There are further + * restrictions to the setting of DELETED_FE on directory records + * undergoing a flush due to sensitive inode link count calculations. + */ static int hammer_frontend_trunc_callback(hammer_record_t record, void *data __unused) { if (record->flags & HAMMER_RECF_DELETED_FE) return(0); +#if 0 if (record->flush_state == HAMMER_FST_FLUSH) return(0); - KKASSERT((record->flags & HAMMER_RECF_INTERLOCK_BE) == 0); +#endif hammer_ref(&record->lock); + while (record->flags & HAMMER_RECF_INTERLOCK_BE) + hammer_wait_mem_record_ident(record, "hmmtrr"); record->flags |= HAMMER_RECF_DELETED_FE; hammer_rel_mem_record(record); return(0); diff --git a/sys/vfs/hammer/hammer_subs.c b/sys/vfs/hammer/hammer_subs.c index 83d844021f..267159a8fa 100644 --- a/sys/vfs/hammer/hammer_subs.c +++ b/sys/vfs/hammer/hammer_subs.c @@ -773,6 +773,15 @@ hammer_blocksize(int64_t file_offset) return(HAMMER_XBUFSIZE); } +int +hammer_blockoff(int64_t file_offset) +{ + if (file_offset < HAMMER_XDEMARC) + return((int)file_offset & HAMMER_BUFMASK); + else + return((int)file_offset & HAMMER_XBUFMASK); +} + /* * Return the demarkation point between the two offsets where * the block size changes. diff --git a/sys/vfs/hammer/hammer_vnops.c b/sys/vfs/hammer/hammer_vnops.c index c7582eb36e..c12fc97692 100644 --- a/sys/vfs/hammer/hammer_vnops.c +++ b/sys/vfs/hammer/hammer_vnops.c @@ -533,6 +533,8 @@ hammer_vop_write(struct vop_write_args *ap) int fixsize = 0; int blksize; int blkmask; + int trivial; + off_t nsize; if ((error = hammer_checkspace(hmp, HAMMER_CHKSPC_WRITE)) != 0) break; @@ -626,8 +628,20 @@ hammer_vop_write(struct vop_write_args *ap) n = blksize - offset; if (n > uio->uio_resid) n = uio->uio_resid; - if (uio->uio_offset + n > ip->ino_data.size) { - vnode_pager_setsize(ap->a_vp, uio->uio_offset + n); + nsize = uio->uio_offset + n; + if (nsize > ip->ino_data.size) { + if (uio->uio_offset > ip->ino_data.size) + trivial = 0; + else + trivial = 1; + nvextendbuf(ap->a_vp, + ip->ino_data.size, + nsize, + hammer_blocksize(ip->ino_data.size), + hammer_blocksize(nsize), + hammer_blockoff(ip->ino_data.size), + hammer_blockoff(nsize), + trivial); fixsize = 1; kflags |= NOTE_EXTEND; } @@ -711,8 +725,9 @@ hammer_vop_write(struct vop_write_args *ap) if (error) { brelse(bp); if (fixsize) { - vtruncbuf(ap->a_vp, ip->ino_data.size, - hammer_blocksize(ip->ino_data.size)); + nvtruncbuf(ap->a_vp, ip->ino_data.size, + hammer_blocksize(ip->ino_data.size), + hammer_blockoff(ip->ino_data.size)); } break; } @@ -722,7 +737,6 @@ hammer_vop_write(struct vop_write_args *ap) if (ip->ino_data.size < uio->uio_offset) { ip->ino_data.size = uio->uio_offset; flags = HAMMER_INODE_SDIRTY; - vnode_pager_setsize(ap->a_vp, ip->ino_data.size); } else { flags = 0; } @@ -2037,7 +2051,9 @@ hammer_vop_setattr(struct vop_setattr_args *ap) int truncating; int blksize; int kflags; +#if 0 int64_t aligned_size; +#endif u_int32_t flags; vap = ap->a_vap; @@ -2132,11 +2148,20 @@ hammer_vop_setattr(struct vop_setattr_args *ap) * big deal here. */ if (vap->va_size < ip->ino_data.size) { - vtruncbuf(ap->a_vp, vap->va_size, blksize); + nvtruncbuf(ap->a_vp, vap->va_size, + blksize, + hammer_blockoff(vap->va_size)); truncating = 1; kflags |= NOTE_WRITE; } else { - vnode_pager_setsize(ap->a_vp, vap->va_size); + nvextendbuf(ap->a_vp, + ip->ino_data.size, + vap->va_size, + hammer_blocksize(ip->ino_data.size), + hammer_blocksize(vap->va_size), + hammer_blockoff(ip->ino_data.size), + hammer_blockoff(vap->va_size), + 0); truncating = 0; kflags |= NOTE_WRITE | NOTE_EXTEND; } @@ -2146,8 +2171,9 @@ hammer_vop_setattr(struct vop_setattr_args *ap) modflags |= HAMMER_INODE_MTIME | HAMMER_INODE_DDIRTY; /* - * on-media truncation is cached in the inode until - * the inode is synchronized. + * On-media truncation is cached in the inode until + * the inode is synchronized. We must immediately + * handle any frontend records. */ if (truncating) { hammer_ip_frontend_trunc(ip, vap->va_size); @@ -2179,45 +2205,20 @@ hammer_vop_setattr(struct vop_setattr_args *ap) } } +#if 0 /* - * If truncating we have to clean out a portion of - * the last block on-disk. We do this in the - * front-end buffer cache. - * - * NOTE: Calling bdwrite() (or bwrite/bawrite) on - * the buffer will clean its pages. This - * is necessary to set the valid bits on - * pages which vtruncbuf() may have cleared - * via vnode_pager_setsize(). - * - * If we don't do this the bp can be left - * with invalid pages and B_CACHE set, - * creating a situation where getpages can - * fail. + * When truncating, nvtruncbuf() may have cleaned out + * a portion of the last block on-disk in the buffer + * cache. We must clean out any frontend records + * for blocks beyond the new last block. */ aligned_size = (vap->va_size + (blksize - 1)) & ~(int64_t)(blksize - 1); if (truncating && vap->va_size < aligned_size) { - struct buf *bp; - int offset; - aligned_size -= blksize; - - offset = (int)vap->va_size & (blksize - 1); - error = bread(ap->a_vp, aligned_size, - blksize, &bp); hammer_ip_frontend_trunc(ip, aligned_size); - if (error == 0) { - bzero(bp->b_data + offset, - blksize - offset); - /* must de-cache direct-io offset */ - bp->b_bio2.bio_offset = NOOFFSET; - bdwrite(bp); - } else { - kprintf("ERROR %d\n", error); - brelse(bp); - } } +#endif break; case VDATABASE: if ((ip->flags & HAMMER_INODE_TRUNCATED) == 0) { @@ -2657,8 +2658,8 @@ hammer_vop_strategy_read(struct vop_strategy_args *ap) * buffers and frontend-owned in-memory records synchronously. */ if (ip->flags & HAMMER_INODE_TRUNCATED) { - if (hammer_cursor_ondisk(&cursor) || - cursor.iprec->flush_state == HAMMER_FST_FLUSH) { + if (hammer_cursor_ondisk(&cursor)/* || + cursor.iprec->flush_state == HAMMER_FST_FLUSH*/) { if (ip->trunc_off <= rec_offset) n = 0; else if (ip->trunc_off < rec_offset + n) @@ -3082,7 +3083,7 @@ hammer_vop_strategy_write(struct vop_strategy_args *ap) record->flags |= HAMMER_RECF_REDO; bp->b_flags &= ~B_VFSFLAG1; } - hammer_io_direct_write(hmp, record, bio); + hammer_io_direct_write(hmp, bio, record); if (ip->rsv_recs > 1 && hmp->rsv_recs > hammer_limit_recs) hammer_flush_inode(ip, 0); } else { -- 2.41.0 From 09327129c8183ca84176e5c2c5c21a2d1638edd6 Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Fri, 29 Jan 2010 10:55:34 -0800 Subject: [PATCH 14/16] kernel - Fix issue in UFS related to new nvtruncbuf() API use * When a UFS truncation must downsize a block it must sometimes call FSYNC twice, the second time to flush out softdep block dependencies related to the original indirect block. UFS depends on the first FSYNC call to prevent the buffer cache buffer straddling the new file/directory EOF from becoming dirty. However, nvtruncbuf() defeats this by re-dirtying the bp. The solution is to simply undirty the bp prior to the second FSYNC, which works fine since it will be written out later with a b*write() anyway. * Fixes 'locking against myself' panic w/UFS. Reported-by: Stathis Kamperis --- sys/vfs/ufs/ffs_inode.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/sys/vfs/ufs/ffs_inode.c b/sys/vfs/ufs/ffs_inode.c index aa9bd5ac50..41bb3dd8e4 100644 --- a/sys/vfs/ufs/ffs_inode.c +++ b/sys/vfs/ufs/ffs_inode.c @@ -261,9 +261,8 @@ ffs_truncate(struct vnode *vp, off_t length, int flags, struct ucred *cred) if (flags & IO_SYNC) aflags |= B_SYNC; error = VOP_BALLOC(ovp, length - 1, 1, cred, aflags, &bp); - if (error) { + if (error) return (error); - } /* * When we are doing soft updates and the UFS_BALLOC @@ -272,16 +271,28 @@ ffs_truncate(struct vnode *vp, off_t length, int flags, struct ucred *cred) * we must flush out the block dependency with an FSYNC * so that we do not get a soft updates inconsistency * when we create the fragment below. + * + * nvtruncbuf() may have re-dirtied the underlying block + * as part of its truncation zeroing code. To avoid a + * 'locking against myself' panic in the second fsync we + * can simply undirty the bp since the redirtying was + * related to areas of the buffer that we are going to + * throw away anyway, and we will b*write() the remainder + * anyway down below. */ if (DOINGSOFTDEP(ovp) && lbn < NDADDR && - fragroundup(fs, blkoff(fs, length)) < fs->fs_bsize && - (error = VOP_FSYNC(ovp, MNT_WAIT, 0)) != 0) { + fragroundup(fs, blkoff(fs, length)) < fs->fs_bsize) { + bundirty(bp); + error = VOP_FSYNC(ovp, MNT_WAIT, 0); + if (error) { + bdwrite(bp); return (error); + } } oip->i_size = length; size = blksize(fs, oip, lbn); #if 0 - /* vtruncbuf deals with this */ + /* remove - nvtruncbuf deals with this */ if (ovp->v_type != VDIR) bzero((char *)bp->b_data + offset, (uint)(size - offset)); -- 2.41.0 From 55000951c131b403974d01d0feae2b55834e8d1a Mon Sep 17 00:00:00 2001 From: "Constantine A. Murenin" Date: Sat, 30 Jan 2010 04:44:23 -0500 Subject: [PATCH 15/16] aibs(4): use ACPI_INTEGER and PRIx64; suggested by Jukka Ruohonen --- sys/dev/acpica5/aibs/atk0110.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/sys/dev/acpica5/aibs/atk0110.c b/sys/dev/acpica5/aibs/atk0110.c index cb2319ab24..0fe56dcb71 100644 --- a/sys/dev/acpica5/aibs/atk0110.c +++ b/sys/dev/acpica5/aibs/atk0110.c @@ -16,6 +16,8 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include + #include #include #include @@ -44,9 +46,9 @@ struct aibs_sensor { struct ksensor s; - int64_t i; - int64_t l; - int64_t h; + ACPI_INTEGER i; + ACPI_INTEGER l; + ACPI_INTEGER h; }; struct aibs_softc { @@ -248,10 +250,11 @@ aibs_attach_sif(struct aibs_softc *sc, enum sensor_type st) as[i].s.type = st; #ifdef AIBS_VERBOSE device_printf(sc->sc_dev, "%c%i: " - "0x%08jx %20s %5ji / %5ji 0x%jx\n", + "0x%08"PRIx64" %20s %5"PRIi64" / %5"PRIi64" " + "0x%"PRIx64"\n", name[0], i, - (uintmax_t)as[i].i, as[i].s.desc, (intmax_t)as[i].l, - (intmax_t)as[i].h, (uintmax_t)oi[4].Integer.Value); + as[i].i, as[i].s.desc, (int64_t)as[i].l, (int64_t)as[i].h, + oi[4].Integer.Value); #endif sensor_attach(&sc->sc_sensordev, &as[i].s); } @@ -334,9 +337,9 @@ aibs_refresh_r(struct aibs_softc *sc, enum sensor_type st) ACPI_OBJECT p, *bp; ACPI_OBJECT_LIST mp; ACPI_BUFFER b; - int64_t v; + ACPI_INTEGER v; struct ksensor *s = &as[i].s; - const int64_t l = as[i].l, h = as[i].h; + const ACPI_INTEGER l = as[i].l, h = as[i].h; p.Type = ACPI_TYPE_INTEGER; p.Integer.Value = as[i].i; -- 2.41.0 From dce9491f4bb3e50cfbbbb4b0dec497c6944603d2 Mon Sep 17 00:00:00 2001 From: "Constantine A. Murenin" Date: Sat, 30 Jan 2010 04:44:41 -0500 Subject: [PATCH 16/16] aibs(4): s/misformed/malformed/; suggested by Paul Goyette --- sys/dev/acpica5/aibs/atk0110.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/dev/acpica5/aibs/atk0110.c b/sys/dev/acpica5/aibs/atk0110.c index 0fe56dcb71..5e84048481 100644 --- a/sys/dev/acpica5/aibs/atk0110.c +++ b/sys/dev/acpica5/aibs/atk0110.c @@ -188,7 +188,7 @@ aibs_attach_sif(struct aibs_softc *sc, enum sensor_type st) #ifdef AIBS_MORE_SENSORS n = bp->Package.Count - 1; #endif - device_printf(sc->sc_dev, "%s: misformed package: %i/%i" + device_printf(sc->sc_dev, "%s: malformed package: %i/%i" ", assume %i\n", name, on, bp->Package.Count - 1, n); } if (n < 1) { -- 2.41.0