Blob


1 #include "a.h"
3 /*
4 * 10. Input and Output Conventions and Character Translation.
5 */
7 /* set escape character */
8 void
9 r_ec(int argc, Rune **argv)
10 {
11 if(argc == 1)
12 backslash = '\\';
13 else
14 backslash = argv[1][0];
15 }
17 /* turn off escape character */
18 void
19 r_eo(int argc, Rune **argv)
20 {
21 USED(argc);
22 USED(argv);
23 backslash = -2;
24 }
26 /* continuous underline (same as ul in troff) for the next N lines */
27 /* set underline font */
28 void
29 g_uf(int argc, Rune **argv)
30 {
31 USED(argc);
32 USED(argv);
33 }
35 /* set control character */
36 void
37 r_cc(int argc, Rune **argv)
38 {
39 if(argc == 1)
40 dot = '.';
41 else
42 dot = argv[1][0];
43 }
45 /* set no-break control character */
46 void
47 r_c2(int argc, Rune **argv)
48 {
49 if(argc == 1)
50 tick = '\'';
51 else
52 tick = argv[1][0];
53 }
55 /* output translation */
57 int
58 e_bang(void)
59 {
60 Rune *line;
62 line = readline(CopyMode);
63 out(line);
64 outrune('\n');
65 free(line);
66 return 0;
67 }
69 int
70 e_X(void)
71 {
72 int c, c1;
74 c1 = getrune();
75 if(c1 < 0 || c1 == '\n') {
76 c = c1;
77 c1 = 0;
78 } else {
79 while((c = getrune()) >= 0 && c != c1 && c != '\n')
80 ;
81 }
82 if(c == '\n'){
83 warn("newline in %CX'...'", backslash);
84 outrune(c);
85 }
86 if(c < 0)
87 warn("eof in %CX'...'", backslash);
88 return 0;
89 }
91 int
92 e_quote(void)
93 {
94 int c;
96 if(inputmode&ArgMode){
97 /* Leave \" around for argument parsing */
98 ungetrune('"');
99 return '\\';
101 while((c = getrune()) >= 0 && c != '\n')
103 return '\n';
106 int
107 e_newline(void)
109 return 0;
112 int
113 e_e(void)
115 return backslash;
118 void
119 r_comment(Rune *name)
121 int c;
123 USED(name);
124 while((c = getrune()) >= 0 && c != '\n')
128 void
129 t10init(void)
131 addreq(L("ec"), r_ec, -1);
132 addreq(L("eo"), r_eo, 0);
133 addreq(L("lg"), r_nop, -1);
134 addreq(L("cc"), r_cc, -1);
135 addreq(L("c2"), r_c2, -1);
136 addreq(L("tr"), r_warn, -1);
137 addreq(L("ul"), r_nop, -1);
138 addraw(L("\\\""), r_comment);
140 addesc('!', e_bang, 0);
141 addesc('X', e_X, 0);
142 addesc('\"', e_quote, CopyMode|ArgMode);
143 addesc('\n', e_newline, CopyMode|ArgMode|HtmlMode);
144 addesc('e', e_e, 0);