4 * Section 2 - Font and character size control.
7 /* 2.1 - Character set */
10 * \C'name' - character named name
11 * \N'n' - character number
12 * \(xx - two-letter character
24 static Rune buf[MaxLine];
49 if((a = getqarg()) == nil)
54 warn("malformed %CN'...'", backslash);
64 if((c = getrune()) < 0 || c == '\n')
66 if((cc = getrune()) < 0 || cc == '\n')
72 warn("unknown char %C(%C%C", backslash, c, cc);
76 warn("malformed %C(xx", backslash);
81 Rune fonttab[10][100];
84 * \fx \f(xx \fN - font change
85 * number register .f - current font
86 * \f0 previous font (undocumented?)
88 /* change to font f. also \fx, \f(xx, \fN */
89 /* .ft LongName is okay - temporarily at fp 0 */
96 if(f && runestrcmp(f, L("P")) == 0)
100 else if(isdigit(f[0]))
103 for(i=0; i<nelem(fonttab); i++){
104 if(runestrcmp(fonttab[i], f) == 0){
109 warn("unknown font %S", f);
113 if(fn < 0 || fn >= nelem(fonttab)){
114 warn("unknown font %d", fn);
118 fn = getnr(L(".f0"));
119 nr(L(".f0"), getnr(L(".f")));
121 runmacro1(L("font"));
124 /* mount font named f on physical position N */
128 if(i <= 0 || i >= nelem(fonttab)){
129 warn("bad font position %d", i);
132 runestrecpy(fonttab[i], fonttab[i]+sizeof fonttab[i], f);
143 r_ft(int argc, Rune **argv)
152 r_fp(int argc, Rune **argv)
155 warn("missing arguments to %Cfp", dot);
158 fp(eval(argv[1]), argv[2]);
161 /* 2.3 - Character size */
163 /* \H'±N' sets height */
170 nr(L(".s0"), getnr(L(".s")));
172 runmacro1(L("font"));
177 r_ps(int argc, Rune **argv)
181 if(argc == 1 || argv[1][0] == 0)
186 ps(getnr(L(".s"))-eval(p+1));
188 ps(getnr(L(".s"))+eval(p+1));
197 int c, cc, ccc, n, twodigit;
202 if(c == '+' || c == '-'){
207 if(cc < '0' || cc > '9' || ccc < '0' || ccc > '9'){
208 warn("bad size %Cs%C(%C%C", backslash, c, cc, ccc);
211 n = (cc-'0')*10+ccc-'0';
213 if(cc < '0' || cc > '9'){
214 warn("bad size %Cs%C%C", backslash, c, cc);
220 ps(getnr(L(".s"))+n);
222 ps(getnr(L(".s"))-n);
232 if(c < '0' || c > '9'){
233 warn("bad size %Cs%C", backslash, c);
237 if(twodigit || (c < '4' && c != '0')){
241 n = (c-'0')*10+cc-'0';
260 addreq(L("ft"), r_ft, -1);
261 addreq(L("fp"), r_fp, -1);
262 addreq(L("ps"), r_ps, -1);
263 addreq(L("ss"), r_warn, -1);
264 addreq(L("cs"), r_warn, -1);
265 addreq(L("bd"), r_warn, -1);
269 addesc('(', e_paren, 0); /* ) */
270 addesc('C', e_warn, 0);
272 /* \- \' \` are handled in html.c */