Annotation of researchv10dc/man/man5/font.5, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.