From 8f6aeb4493fb6f1a38e83f2050d27529fc2d238b Mon Sep 17 00:00:00 2001 From: wl Date: Wed, 20 Jul 2011 18:44:50 +0000 Subject: Improve line numbering support in tbl and with me macros. * tmac/e.tmac (n1, n2, TH, PS): Implement it. (@h, @n, @o, @t, @k, )b, (c, (q, )q, (l, )l, (f, @q, PE): Updated. * doc/meref.me: Document changes. * src/preproc/tbl/table.cpp (ROW_START_LINE_REG, ROW_SAVE_LINE_REG, ROW_MAX_LINE_REG, REPEATED_NM_SET_MACRO, REPEATED_NM_SUS_MACRO): New macros. (table::init_output): Define REPEATED_NM_SET_MACRO and REPEATED_NM_SUS_MACRO. (table::print_single_hline, table::print_double_hline, table::define_bottom_macro, table::do_row, table::do_top, table::do_bottom): Updated. * doc/webpage.ms: Updated. --- tmac/e.tmac | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 106 insertions(+), 14 deletions(-) (limited to 'tmac') diff --git a/tmac/e.tmac b/tmac/e.tmac index a5bfaabb..af0a28e8 100644 --- a/tmac/e.tmac +++ b/tmac/e.tmac @@ -253,7 +253,7 @@ . sp |\\n(tmu \" move to top of text .ev .mk _k \" for columned output -.if \\n(?n .nm 1 \" restore line numbering if n1 mode +.if \\n(?n=1 .nm 1 \" restore line numbering if n1 mode .nr $c 1 \" set first column .if \n@>4 .tm -- @h >> .ns nl=\\n(nl %=\\n% _k=\\n(_k tm=\\n(tm .ie \\n(?s \ @@ -297,9 +297,13 @@ .if \\n(?T \ \{\ . nr _i \\n(.i +. if \\n(?n \ +. nm \\n(ln . in 0 . |h\" \" output the table header . in \\n(_iu +. if \\n(?n \ +. nm . rr _i . mk #T \" for tbl commands . ns @@ -351,7 +355,11 @@ .in 0 .if \n@>2 .tm @o last printed text = \\n(nl placing @r trap at -\\n(_B .wh -\\n(_Bu @r +.if \\n(?n \ +. nm \\n(ln .|f +.if \\n(?n \ +. nm .fi .if \n@>2 .tm @o triggered @r (?o) = \\n(?o .if \\n(?o \ @@ -394,9 +402,13 @@ . sz \\n(tp\" \" set header/footer type fonts, etc. . @F \\n(tf . lt \\n(_Lu \" make title span entire page +. if \\n(?n \ +. nm \\n(ln . nf . \\$1 . br +. if \\n(?n \ +. nm .\} .. . @@ -506,16 +518,46 @@ . .de n1 \" *** line numbering 1 .nm 1 -.xl -\w'0000'u +.ll -\w'0000'u .nr ?n 1 .. . .de n2 \" *** line numbering 2 -.nm \\$1 .ie \\n(.$ \ -. xl -\w'0000'u +\{\ +. ie !`\\$2`c` \ +. po -\w'0000'u +. el \ +. ll -\w'0000'u +. ie \\B`\\$1` \ +\{\ +. ds |i \\$1 +. ds |j \\$1 +. do substring |i 0 0 \" pick off leading char and rest to check +. do substring |j 1 \" for +N / -N +. ie `\\*(|i`+` \ +. nr ln (\\n[_ln])+\\*(|j +. el \ +. ie `\\*(|i`-` \ +. nr ln (\\n[_ln])-\\*(|j +. el \ +. nr ln \\$1 \" unsigned N +. nm \\n(ln +. nr ?n 2 +. rm |i |j +.\} +. el \ +. tm Line \\n(.c -- Bad .n2 value +.\} .el \ -. xl \\n($lu +\{\ +. nm +. nr _ln \\n(ln +. po +\w'0000'u +. ll \\n($lu +. nr ?n 0 +. nr ln 0 +.\} .. . .de pa \" *** new page @@ -914,7 +956,11 @@ .ls 1 .in 0 .sp \\n(zsu +.if \\n(?n \ +. nm \\n(ln .\\$1 +.if \\n(?n \ +. nm .ec .br .rm \\$1 @@ -942,15 +988,8 @@ .@) .if (\\n(bt=0):(\\n(.t<\\n(bt) \ . ne \\n(dnu \" make it all on one page -.ls 1 -.nf -.|k -.ec -.fi -.in 0 -.xl \\n($lu -.ev -.rm |k +.@k |k +.ev \" return from display environment .sp \\n(bsu+\\n(.Lv-1v .. . @@ -992,6 +1031,7 @@ . .de (c \" *** begin block centered text .if "\\n(.z"|c" .tm Line \\n(c. -- Nested .(c requests +.if \\n(?n .nm .di |c .. . @@ -1004,11 +1044,15 @@ .ls 1 .in (\\n(.lu-\\n(.iu-\\n(dlu)/2u .if \n@>4 .tm -- .)c << .in .l=\\n(.l .i=\\n(.i dl=\\n(dl +.if \\n(?n \ +. nm \\n(ln .nf .|c .ec .in .ls +.if \\n(?n \ +. nm .ev .rm |c .. @@ -1025,10 +1069,14 @@ .in +\\n(qiu .xl -\\n(qiu .sz \\n(qp +.if \\n(?n \ +. nm \\n(ln .. . .de )q \" *** end block quote .br +.if \\n(?n \ +. nm .ev .sp \\n(qsu+\\n(.Lv-1v .nr ?k 0 @@ -1039,11 +1087,15 @@ .sp \\n(bsu .@D 3 \\$1 \\$2 .@M +.if \\n(?n \ +. nm \\n(ln .if '\*(.T'html' .sp \\n(bsu .. . .de )l \" *** end list .br +.if \\n(?n \ +. nm .ev .sp \\n(bsu+\\n(.Lv-1v .nr ?k 0 @@ -1123,7 +1175,11 @@ . tl """\\*(|p" . rt \\n(_qu .\} +.if \\n(?n \ +. nm \\n(ln .|e +.if \\n(?n \ +. nm .sp |\\n(_qu+\\n(_Qu .sp \\n(esu+\\n(.Lv-1v .rr _q @@ -1157,12 +1213,14 @@ .de TH \" *** end header part of table .nr T. 0 .T# 0 +.if \\n(?n \!.nm .di .nr _T \\n(?T .nr ?T 0 .ne \\n(dnu+1v .nr ?T \\n(_T .nr _i \\n(.i +.if \\n(?n .nm \\n(ln .in 0 .|h\" \" put in the initial header .in \\n(_iu @@ -1220,9 +1278,41 @@ .ne \\$1u .nr g7 \\n(.u .ls 1 +.if \\n(?n \ +\{\ +. de PS_nm_check && \" define macro to emit .nm at top diversion +. if \n@>4 .tm -- PS: \\\\$1 \\\\$2 .z=\\\\n(.z PS_nm_cnt=\\\\n[PS_nm_cnt] +. \" \" multiple .PS/.PE in a keep. +. if `\\\\$2`init` \ +. do nr PS_nm_cnt \\\\n[PS_nm_cnt]+1 +. ie `\\\\n(.z`` \ +\{\ +. if `\\\\$1`suspend` \ +. nm +. if `\\\\$1`resume` \ +\{\ +. nm \\\\n(ln +. do nr PS_nm_cnt \\\\n[PS_nm_cnt]-1 +. do if !\\\\n[PS_nm_cnt] \ +\{\ +. do rm PS_nm_check +. do rr PS_nm_cnt +.\} +.\} +.\} +.el \!.PS_nm_check \\\\$1 +.&& +. mk _q \" emit a single numbered line for PS picture +. rs +\&\ +. br +. rt \\n(_qu +. PS_nm_check suspend init +.\} .. . .de PE \" *** end picture +.if \\n(?n .PS_nm_check resume .ls .in .if \\n(g7 .fi @@ -1380,6 +1470,7 @@ . nr _D \\n(dn . nr _0 1v+\\n(nlu . ev 2 +. nm . da |f . in 0 . xl \\n($lu-\\n(fuu @@ -1420,6 +1511,7 @@ .el \ \{\ . ev 2 +. nm . in 0 . xl \\n($lu-\\n(fuu . @F \\n(ff -- cgit v1.2.1