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