]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/htmlroff/t10.c
ndb/dns: remove single-ip-address assuptions
[plan9front.git] / sys / src / cmd / htmlroff / t10.c
1 #include "a.h"
2
3 /*
4  * 10. Input and Output Conventions and Character Translation.
5  */
6
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 }
16
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 }
25
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 }
34
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 }
44
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 }
54
55 /* output translation */
56
57 int
58 e_bang(void)
59 {
60         Rune *line;
61         
62         line = readline(CopyMode);
63         out(line);
64         outrune('\n');
65         free(line);
66         return 0;
67 }
68
69 int
70 e_X(void)
71 {
72         int c;
73         
74         while((c = getrune()) >= 0 && c != '\'' && c != '\n')
75                 outrune(c);
76         if(c == '\n'){
77                 warn("newline in %CX'...'", backslash);
78                 outrune(c);
79         }
80         if(c < 0)
81                 warn("eof in %CX'...'", backslash);
82         return 0;
83 }
84
85 int
86 e_quote(void)
87 {
88         int c;
89
90         if(inputmode&ArgMode){
91                 /* Leave \" around for argument parsing */
92                 ungetrune('"');
93                 return '\\';
94         }
95         while((c = getrune()) >= 0 && c != '\n')
96                 ;
97         return '\n';
98 }
99
100 int
101 e_newline(void)
102 {
103         return 0;
104 }
105
106 int
107 e_e(void)
108 {
109         return backslash;
110 }
111
112 void
113 r_comment(Rune *name)
114 {
115         int c;
116         
117         USED(name);
118         while((c = getrune()) >= 0 && c != '\n')
119                 ;
120 }
121
122 void
123 t10init(void)
124 {
125         addreq(L("ec"), r_ec, -1);
126         addreq(L("eo"), r_eo, 0);
127         addreq(L("lg"), r_nop, -1);
128         addreq(L("cc"), r_cc, -1);
129         addreq(L("c2"), r_c2, -1);
130         addreq(L("tr"), r_warn, -1);
131         addreq(L("ul"), r_nop, -1);
132         addraw(L("\\\""), r_comment);
133         
134         addesc('!', e_bang, 0);
135         addesc('X', e_X, 0);
136         addesc('\"', e_quote, CopyMode|ArgMode);
137         addesc('\n', e_newline, CopyMode|ArgMode|HtmlMode);
138         addesc('e', e_e, 0);
139 }
140