| #include "a.h" |
| |
| /* |
| * 4 - Text filling, centering, and adjusting. |
| * "\ " - unbreakable space |
| * .n register - length of last line |
| * nl register - text baseline position on this page |
| * .h register - baseline high water mark |
| * .k register - current horizontal output position |
| * \p - cause break at end of word, justify |
| * \& - non-printing zero-width filler |
| * tr - output translation |
| * \c - break (but don't) input line in .nf mode |
| * \c - break (but don't) word in .fi mode |
| */ |
| |
| int |
| e_space(void) |
| { |
| return 0xA0; /* non-breaking space */ |
| } |
| |
| int |
| e_amp(void) |
| { |
| return Uempty; |
| } |
| |
| int |
| e_c(void) |
| { |
| getrune(); |
| bol = 1; |
| return 0; |
| } |
| |
| void |
| r_br(int argc, Rune **argv) |
| { |
| USED(argc); |
| USED(argv); |
| br(); |
| } |
| |
| /* fill mode on */ |
| void |
| r_fi(int argc, Rune **argv) |
| { |
| USED(argc); |
| USED(argv); |
| nr(L(".fi"), 1); |
| // warn(".fi"); |
| } |
| |
| /* no-fill mode */ |
| void |
| r_nf(int argc, Rune **argv) |
| { |
| USED(argc); |
| USED(argv); |
| nr(L(".fi"), 0); |
| } |
| |
| /* adjust */ |
| void |
| r_ad(int argc, Rune **argv) |
| { |
| int c, n; |
| |
| nr(L(".j"), getnr(L(".j"))|1); |
| if(argc < 2) |
| return; |
| c = argv[1][0]; |
| switch(c){ |
| default: |
| fprint(2, "%L: bad adjust %C\n", c); |
| return; |
| case 'r': |
| n = 2*2|1; |
| break; |
| case 'l': |
| n = 0; |
| break; |
| case 'c': |
| n = 1*2|1; |
| break; |
| case 'b': |
| case 'n': |
| n = 0*2|1; |
| break; |
| case '0': |
| case '1': |
| case '2': |
| case '3': |
| case '4': |
| case '5': |
| n = c-'0'; |
| break; |
| } |
| nr(L(".j"), n); |
| } |
| |
| /* no adjust */ |
| void |
| r_na(int argc, Rune **argv) |
| { |
| USED(argc); |
| USED(argv); |
| |
| nr(L(".j"), getnr(L(".j"))&~1); |
| } |
| |
| /* center next N lines */ |
| void |
| r_ce(int argc, Rune **argv) |
| { |
| if(argc < 2) |
| nr(L(".ce"), 1); |
| else |
| nr(L(".ce"), eval(argv[1])); |
| /* XXX set trap */ |
| } |
| |
| void |
| t4init(void) |
| { |
| nr(L(".fi"), 1); |
| nr(L(".j"), 1); |
| |
| addreq(L("br"), r_br, 0); |
| addreq(L("fi"), r_fi, 0); |
| addreq(L("nf"), r_nf, 0); |
| addreq(L("ad"), r_ad, -1); |
| addreq(L("na"), r_na, 0); |
| addreq(L("ce"), r_ce, -1); |
| |
| addesc(' ', e_space, 0); |
| addesc('p', e_warn, 0); |
| addesc('&', e_amp, 0); |
| addesc('c', e_c, 0); |
| } |
| |