|
|
1.1 ! root 1: .TH FONT 5 ! 2: .CT 1 writing_output ! 3: .SH NAME ! 4: font \- description files for troff ! 5: .SH DESCRIPTION ! 6: Directories ! 7: .BI /usr/lib/font/dev dest ! 8: describe typesetters, ! 9: where ! 10: .I dest ! 11: is as in the ! 12: .B -T ! 13: option of ! 14: .IR troff (1). ! 15: Such directories contain files named as in FILES below. ! 16: .PP ! 17: Lines of a typesetter description in file ! 18: .F DESC ! 19: have the following forms. ! 20: .TF paperlength\ n ! 21: .TP ! 22: .BI res " n ! 23: Resolution of device is ! 24: .I n ! 25: basic units per inch. ! 26: .PD0 ! 27: .TP ! 28: .BI hor " n ! 29: Horizontal motion occurs in increments of ! 30: .I n ! 31: units. ! 32: .TP ! 33: .BI vert " n ! 34: Vertical motion occurs in increments of ! 35: .I n ! 36: units. ! 37: .TP ! 38: .BI unitwidth " n ! 39: Widths are given for pointsize ! 40: .I n. ! 41: .TP ! 42: .BI sizescale " n ! 43: Scaling for fractional pointsizes, not used. ! 44: .TP ! 45: .BI paperwidth " n ! 46: Width of paper is ! 47: .I n ! 48: units. ! 49: .TP ! 50: .BI paperlength " n ! 51: Length of paper is ! 52: .I n ! 53: units. ! 54: .TP ! 55: .BI biggestfont " n ! 56: Maximum number of characters in a font is ! 57: .I n. ! 58: .TP ! 59: .BI sizes " n n n ... " 0 ! 60: Pointsizes ! 61: .I "n ... ! 62: are available. ! 63: .TP ! 64: .BI fonts " n name ... ! 65: Number of initial fonts followed by their names, ! 66: for example ! 67: .br ! 68: .L ! 69: fonts 4 R I B S ! 70: .TP ! 71: .B charset ! 72: This line comes last, followed by ! 73: a list of special character names for ! 74: the device, separated by spaces or newlines, as ! 75: .BR bu ! 76: for ! 77: .BR \e(bu ! 78: .PD ! 79: .PP ! 80: Lines of a font description file have the following forms. ! 81: .TF paperlength\ n ! 82: .TP ! 83: .BI name " name ! 84: name of the font, ! 85: such as ! 86: .B R ! 87: or ! 88: .B CW ! 89: .PD 0 ! 90: .TP ! 91: .BI internalname " name ! 92: The typesetter's name for the font, independent of the ! 93: .I troff ! 94: name or font position. ! 95: .TP ! 96: .B special ! 97: A ! 98: .I troff ! 99: special font, logically part of all non-special fonts. ! 100: .TP ! 101: .BI ligatures " name ... " 0 ! 102: The named ligatures are available. ! 103: Legal names are ! 104: .BR "ff fi fl ffi ffl" . ! 105: .TP ! 106: .BI spacewidth " n ! 107: Space is ! 108: .I n ! 109: units wide (default 1/3 of an em). ! 110: .TP ! 111: .B charset ! 112: Must come last. ! 113: Each line following ! 114: .B charset ! 115: describes one character thus: ! 116: .PD ! 117: .IP ! 118: .I "name width height code ! 119: .IP ! 120: .I Name ! 121: is either a single ASCII character or a special character listed in ! 122: .FR DESC . ! 123: .I Width ! 124: is in basic units. ! 125: .I Height ! 126: is 1 if the character descends below ! 127: the baseline, ! 128: 2 if it rises above the letter `a', ! 129: 3 if it both rises and ! 130: descends, 0 for neither. ! 131: .I Code ! 132: is the number sent to the typesetter to produce the character. ! 133: If a character name is a synonym for the preceding one, ! 134: its width, height, and code may be replaced by one double quote ! 135: \fL"\fR. ! 136: .PP ! 137: Lines beginning with ! 138: .B # ! 139: are comments in both ! 140: .B DESC ! 141: and font description files. ! 142: .PP ! 143: .I Troff ! 144: and its postprocessors use the binary versions as compiled by ! 145: a program ! 146: .I makedev. ! 147: .ig ! 148: .PP ! 149: The file ! 150: .I DESC.out ! 151: starts with the ! 152: .I dev ! 153: structure, ! 154: defined by ! 155: .IR dev.h : ! 156: .CW ! 157: .ta0.6i 1.8i ! 158: /* ! 159: dev.h: characteristics of a typesetter ! 160: * / ! 161: ! 162: \s-1struct dev { ! 163: unsigned short\ filesize;\ \ /* number of bytes in file, */ ! 164: \0\0 \0\0\0\0\0 /* excluding dev part */ ! 165: short res; /* basic resolution in goobies/inch */ ! 166: short hor; /* goobies horizontally */ ! 167: short vert; ! 168: short unitwidth; /* size at which widths are given*/ ! 169: short nfonts;\0 /* number fonts physically available */ ! 170: short nsizes;\0 /* number of pointsizes */ ! 171: short sizescale; /* scaling for fractional pointsizes */ ! 172: short paperwidth; /* max line length in units */ ! 173: short paperlength; /* max paper length in units */ ! 174: short nchtab;\0 /* number of funny names in chtab */ ! 175: short lchname; /* length of chname table */ ! 176: short biggestfont; /* max # of chars in a font */ ! 177: short spare; /* in case of expansion */\f1 ! 178: }; ! 179: .CE ! 180: .IR filesize ! 181: is just the size of everything in ! 182: .I DESC.out ! 183: excluding the ! 184: .I dev ! 185: structure. ! 186: .I nfonts ! 187: is the number of different font positions available. ! 188: .I nsizes ! 189: is the number of different pointsizes supported by this typesetter. ! 190: .I nchtab ! 191: is the number of special character names. ! 192: .I lchname ! 193: is the total number of characters, ! 194: including nulls, ! 195: needed to list all ! 196: the special character names. ! 197: At the end of the structure is one spare for later expansions. ! 198: .PP ! 199: Immediately following the ! 200: .I dev ! 201: structure are a number of tables. ! 202: First is the ! 203: .I sizes ! 204: table, ! 205: which contains ! 206: .I nsizes ! 207: + 1 shorts(a null at the end), ! 208: describing the pointsizes of text ! 209: available on this device. ! 210: The second table is the ! 211: .IR funny_char_index_table . ! 212: It contains indexes into the table that follows it, ! 213: the ! 214: .IR funny_char_strings . ! 215: The indexes point to the beginning of each special character name ! 216: that is stored in the ! 217: .I funny_char_strings ! 218: table. ! 219: The ! 220: .I funny_char_strings ! 221: table is ! 222: .I lchname ! 223: characters long, ! 224: while the ! 225: .I funny_char_index_table ! 226: is ! 227: .I nchtab ! 228: shorts long. ! 229: .PP ! 230: Following the ! 231: .I dev ! 232: structure will occur ! 233: .I nfonts ! 234: .I {font}.out ! 235: files, ! 236: which are used to initialize the font positions. ! 237: These ! 238: .I {font}.out ! 239: files, ! 240: which also exist as separate files, ! 241: begin with a ! 242: .I Font ! 243: structure and then are followed by four character arrays: ! 244: .CW ! 245: \s-1struct Font { /* characteristics of a font */ ! 246: char nwfont; /* number of width entries */ ! 247: char specfont; /* 1 == special font */ ! 248: char ligfont; /* 1 == ligatures exist on this font */ ! 249: char namefont[10]; /* name of this font, e.g., R */ ! 250: char intname[10]; /* internal name of font, in ASCII */ ! 251: }\s+1; ! 252: .CE ! 253: The ! 254: .I Font ! 255: structure tells how many defined characters there are in ! 256: the font, whether the font is a "special" font and if it contains ! 257: ligatures. ! 258: It also has the ASCII name of the font, ! 259: which should ! 260: match the name of the file it appears in, ! 261: and the internal ! 262: name of the font on the typesetting device ! 263: .RI ( intname ). ! 264: The internal name is ! 265: independent of the font position and name that ! 266: .B troff ! 267: knows about. ! 268: For ! 269: example, you might say mount R in position 4, ! 270: but when asking ! 271: the typesetter to actually produce a character from the R ! 272: font, ! 273: the postprocessor which instructs the typesetter would ! 274: use ! 275: .IR intname . ! 276: .PP ! 277: The first three character arrays are specific for the font and run ! 278: in parallel. ! 279: The first array, ! 280: .IR widths , ! 281: contains the width of each character ! 282: relative to ! 283: .IR unitwidth . ! 284: .I unitwidth ! 285: is defined in ! 286: .IR DESC . ! 287: The second array, ! 288: .IR height , ! 289: contains height information. ! 290: If a character rises ! 291: above the letter 'a', ! 292: 02 is set. ! 293: If it descends below the line, ! 294: 01 is set. ! 295: The third array, ! 296: .IR codes , ! 297: contains the code that is sent to ! 298: the typesetter to produce the character. ! 299: .PP ! 300: The fourth array is defined by the device description in ! 301: .IR DESC . ! 302: It is the ! 303: .IR font_index_table . ! 304: This table contains indexes into the ! 305: .IR width , ! 306: .IR height , ! 307: and ! 308: .I code ! 309: tables for each character. ! 310: The order that characters appear in these three ! 311: tables is arbitrary and changes from one font to the next. ! 312: In order for ! 313: .B troff ! 314: to be able to translate from ASCII and the special character names to these ! 315: arbitrary tables, ! 316: the ! 317: .I font_index_table ! 318: is created with an order that is constant for each device. ! 319: The number of entries in this table is 96 plus the number of special ! 320: character names for this device. ! 321: The value ! 322: 96 is ! 323: 128 - 32, ! 324: the number of printable characters in the ! 325: ASCII alphabet. ! 326: To determine whether a normal ASCII character exists, ! 327: .B troff ! 328: takes the ASCII value of the character, ! 329: subtracts 32, ! 330: and looks in the ! 331: .IR font_index_table . ! 332: If it finds a 0, ! 333: the character is not defined in this font. ! 334: If it ! 335: finds anything else, ! 336: that is the index into ! 337: .IR widths , ! 338: .IR height , ! 339: and ! 340: .I codes ! 341: that describe that character. ! 342: .PP ! 343: To look up a special character name, ! 344: for example ! 345: .BR \e(pl , ! 346: the mathematical plus sign, ! 347: and determine whether it appears ! 348: in a particular font or not, ! 349: the following procedure is followed. ! 350: A ! 351: .I counter ! 352: is set to 0 and an index to a special character name ! 353: is picked out of the ! 354: .I counter'th ! 355: position in the ! 356: .IR funny_char_index_table . ! 357: A string comparison is performed between ! 358: .I funny_char_strings [ funny_char_index_table ! 359: .I [ counter ] ] ! 360: and the special character name, ! 361: in ! 362: our example ! 363: .BR pl , ! 364: and if it matches, ! 365: then ! 366: .B troff ! 367: refers to this character as (96 + ! 368: .IR counter ). ! 369: When it wants to ! 370: determine whether a specific font supports this character, ! 371: it ! 372: looks in ! 373: .IR font_index_table "[96 + " counter ]. ! 374: .PP ! 375: The 0th element of the ! 376: .I width ! 377: array defines the width of a space. ! 378: If that element is 0, the width of ! 379: a space is taken to be 1/3 the width of the ! 380: .LR \e(em ! 381: character. ! 382: .. ! 383: .SH FILES ! 384: .TF /usr/lib/font/dev* ! 385: .TP ! 386: .F /usr/lib/font/dev* ! 387: typesetter description directory ! 388: .TP ! 389: .F DESC ! 390: typesetter description (ASCII) ! 391: .TP ! 392: .F DESC.out ! 393: typesetter description (binary); created by ! 394: .I makedev ! 395: .TP ! 396: .I font ! 397: description of the named ! 398: .I font ! 399: (ASCII) ! 400: .TP ! 401: .IB font .out ! 402: description of the named ! 403: .I font ! 404: (binary); created by ! 405: .I makedev ! 406: .TP ! 407: .F /n/bowell/usr/src/cmd/troff/makedev ! 408: .SH "SEE ALSO" ! 409: .IR troff (1) ! 410: .br ! 411: B. W. Kernighan, ! 412: `A Typesetter-Independent Troff', ! 413: this manual, Volume 2
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.