|
|
1.1 root 1: .bp
2: .sh 1 "Introduction to the syntax of Intertext"
3: .sh 2 Introduction
4: .lp
5: This section describes a language used to represent an Interpress master,
6: called \fIIntertext\fP. In order to make an Interpress master compact,
7: an encoding scheme is used to represent the operators and the values.
8: Although this encoding uses less disk space and results in shorter
9: transmission times, it is practically impossible to examine or edit an
10: Interpress master. For this reason, the utilities \fIiptotext\fP and
11: \fItexttoip\fP represent the master in a language called \fIIntertext\fP.
12: For someone to completely use the Interpress utilities and understand the
13: output, an understanding of this language is necessary. It is recommended
14: that the reader of this section have a working knowledge of Interpress.
15: .sh 2 Tokens
16: .sh 3 "Keywords"
17: .lp
18: The keyword \*(lqHeader\*(rq indicates that the following string is the
19: header that appears at the front of the Interpress file. This keyword can
20: only be used once at the top of the file. It is not checked for validity.
21: .sh 2 "Integers"
22: .lp
23: A series of digits optionally preceded by a plus or minus sign is an integer.
24: .sh 2 "Short numbers"
25: .lp
26: Any integer that starts in the first column is translated into an Interpress
27: \fIshort number\fP. This number must be in the range \(mi4000..28767.
28: .sh 2 "Operators"
29: .lp
30: Any word that starts in the first column
31: is translated into an operator, with the exceptions noted in \fIkeywords\fP.
32: The \*(lqpseudo\*(rq operators are handled as follows.
33: The word \*(lqBEGIN\*(rq marks
34: the beginning of a block. The word \*(lqEND\*(rq indicates the
35: end of a block. The character \*(lq{\*(rq indicates the beginning
36: of a body and the character \*(lq}\*(rq indicates the end of a
37: body. All other words refer to an Interpress operator. The names found in
38: Appendix B of the \fIInterpress Electronic printing Standard\fP
39: are recognized. The case of the letters is insignificant.
40: .sh 2 "Comments"
41: .lp
42: Anything that appears in parentheses is assumed to be a
43: comment and is ignored. These comments should not be confused with a
44: comment sequence.
45: .sh 2 "Sequences"
46: .lp
47: If the first
48: character on the line is \*(lq>\*(rq then the remainder of the line
49: describes a \fIsequence\fP.
50: If the second character is also \*(lq>\*(rq then the
51: sequence described is \fIlong\fP, otherwise it is \fIshort\fP.
52: The keyword that starts
53: in the third column describes the type of sequence. The value of the
54: sequence appears after the colon. The following names are valid sequence
55: names: Comment, Identifier, Insert file, Integer, Rational, String.
56: .sh 2 "Strings"
57: .lp
58: Strings are represented in the same way they are in C.
59: A double quote is used to mark each end of the string
60: and a backslash is used to indicate the start of a special
61: character. If a digit follows a backslash, it starts an octal number that
62: does not exceed three digits. This number is the octal value of the
63: character represented. For example, the string "a\e244b" consists of an
64: ascii \*(lqa\*(rq followed by the octal value 244 and ending with an ascii
65: \*(lqb\*(rq. Two successive backslashes represents a single backslash and a
66: backslash followed by a double quote represents a double quote. It will not
67: be uncommon in program listings to use strings like:
68: "#include\ \e"file.h\e"".
69: .sh 2 "Rationals"
70: .lp
71: A rational number is represented as a fraction with a slash separating the
72: numerator and the denominator.
73: For example: \*(lq1/2\*(rq represents the rational 1 over 2.
74: .sh 2 Format
75: .sp
76: Here is a Backus-Naur style grammar that describes the Intertext format
77: (tokens are in italics, literals are contained in double quotes):
78: .sp
79: .(l
80: Intertext ::= prelim body | body
81:
82: prelim ::= file header | file | header
83:
84: file ::= "File: " \fIstring\fP \fInl\fP
85:
86: header ::= "Header: " \fIstring\fP \fInl\fP
87:
88: body ::= line \fInl\fP\^ body | line \fInl\fP
89:
90: line ::= \fIinteger\fP | \fIoperator\fP | short-long sequence
91:
92: .ta \w'sequence ::= 'u
93: sequence ::= "Comment: " \fIstring\fP |
94: "Identifier: " \fIidentifier\fP |
95: "Insert file: " \fIstring\fP |
96: "Integer: " \fIinteger\fP |
97: "Rational: " \fIinteger\fP\^ "/" \fIinteger\fP |
98: "String: " \fIstring\fP
99:
100: short-long ::= "> " | ">>"
101: .)l
102: .sp
103: The token \fInl\fP\^ is a newline or line terminator.
104: The other italicized tokens are explained in the previous section.
105: .sh 2 Omissions
106: .lp
107: There is currently no way to express large vectors or any
108: of the pixel vectors. There is also no way to specify a continued
109: sequence.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.