diff options
Diffstat (limited to 'src/cmd/htmlroff/t10.c')
-rw-r--r-- | src/cmd/htmlroff/t10.c | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/src/cmd/htmlroff/t10.c b/src/cmd/htmlroff/t10.c new file mode 100644 index 00000000..e029db35 --- /dev/null +++ b/src/cmd/htmlroff/t10.c @@ -0,0 +1,140 @@ +#include "a.h" + +/* + * 10. Input and Output Conventions and Character Translation. + */ + +/* set escape character */ +void +r_ec(int argc, Rune **argv) +{ + if(argc == 1) + backslash = '\\'; + else + backslash = argv[1][0]; +} + +/* turn off escape character */ +void +r_eo(int argc, Rune **argv) +{ + USED(argc); + USED(argv); + backslash = -2; +} + +/* continuous underline (same as ul in troff) for the next N lines */ +/* set underline font */ +void +g_uf(int argc, Rune **argv) +{ + USED(argc); + USED(argv); +} + +/* set control character */ +void +r_cc(int argc, Rune **argv) +{ + if(argc == 1) + dot = '.'; + else + dot = argv[1][0]; +} + +/* set no-break control character */ +void +r_c2(int argc, Rune **argv) +{ + if(argc == 1) + tick = '\''; + else + tick = argv[1][0]; +} + +/* output translation */ + +int +e_bang(void) +{ + Rune *line; + + line = readline(CopyMode); + out(line); + outrune('\n'); + free(line); + return 0; +} + +int +e_X(void) +{ + int c; + + while((c = getrune()) >= 0 && c != '\'' && c != '\n') + outrune(c); + if(c == '\n'){ + warn("newline in %CX'...'", backslash); + outrune(c); + } + if(c < 0) + warn("eof in %CX'...'", backslash); + return 0; +} + +int +e_quote(void) +{ + int c; + + if(inputmode&ArgMode){ + /* Leave \" around for argument parsing */ + ungetrune('"'); + return '\\'; + } + while((c = getrune()) >= 0 && c != '\n') + ; + return '\n'; +} + +int +e_newline(void) +{ + return 0; +} + +int +e_e(void) +{ + return backslash; +} + +void +r_comment(Rune *name) +{ + int c; + + USED(name); + while((c = getrune()) >= 0 && c != '\n') + ; +} + +void +t10init(void) +{ + addreq(L("ec"), r_ec, -1); + addreq(L("eo"), r_eo, 0); + addreq(L("lg"), r_nop, -1); + addreq(L("cc"), r_cc, -1); + addreq(L("c2"), r_c2, -1); + addreq(L("tr"), r_warn, -1); + addreq(L("ul"), r_nop, -1); + addraw(L("\\\""), r_comment); + + addesc('!', e_bang, 0); + addesc('X', e_X, 0); + addesc('\"', e_quote, CopyMode|ArgMode); + addesc('\n', e_newline, CopyMode|ArgMode|HtmlMode); + addesc('e', e_e, 0); +} + |