diff options
Diffstat (limited to 'src/cmd/htmlroff/t11.c')
-rw-r--r-- | src/cmd/htmlroff/t11.c | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/src/cmd/htmlroff/t11.c b/src/cmd/htmlroff/t11.c new file mode 100644 index 00000000..53d68aac --- /dev/null +++ b/src/cmd/htmlroff/t11.c @@ -0,0 +1,107 @@ +#include "a.h" + +/* + * 11. Local Horizontal and Vertical Motions, and the Width Function. + */ + +int +e_0(void) +{ + /* digit-width space */ + return ' '; +} + +int +dv(int d) +{ + Rune sub[6]; + + d += getnr(L(".dv")); + nr(L(".dv"), d); + + runestrcpy(sub, L("<sub>")); + sub[0] = Ult; + sub[4] = Ugt; + if(d < 0){ + sub[3] = 'p'; + ihtml(L(".dv"), sub); + }else if(d > 0) + ihtml(L(".dv"), sub); + else + ihtml(L(".dv"), nil); + return 0; +} + +int +e_v(void) +{ + dv(eval(getqarg())); + return 0; +} + +int +e_u(void) +{ + dv(eval(L("-0.5m"))); + return 0; +} + +int +e_d(void) +{ + dv(eval(L("0.5m"))); + return 0; +} + +int +e_r(void) +{ + dv(eval(L("-1m"))); + return 0; +} + +int +e_h(void) +{ + getqarg(); + return 0; +} + +int +e_w(void) +{ + Rune *a; + Rune buf[40]; + + a = getqarg(); + runesnprint(buf, sizeof buf, "%ld", runestrlen(a)); + pushinputstring(buf); + nr(L("st"), 0); + nr(L("sb"), 0); + nr(L("ct"), 0); + return 0; +} + +int +e_k(void) +{ + getname(); + warn("%Ck not available", backslash); + return 0; +} + +void +t11init(void) +{ + addesc('|', e_nop, 0); + addesc('^', e_nop, 0); + addesc('v', e_v, 0); + addesc('h', e_h, 0); + addesc('w', e_w, 0); + addesc('0', e_0, 0); + addesc('u', e_u, 0); + addesc('d', e_d, 0); + addesc('r', e_r, 0); + addesc('k', e_k, 0); +} + |