From e219764e7fff79f53c25ef9d7d9c3bb94c5a2fee Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Thu, 18 Sep 2014 19:44:23 -0700 Subject: Implementing M2 register and .M2SS extension. Updating date of the man page and documenting extensions. Changing .ab request to exit unsuccessfully. Index generation needed to be trivially extended to handle more than two levels. --- man2html/man2html.c | 54 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 45 insertions(+), 9 deletions(-) (limited to 'man2html/man2html.c') diff --git a/man2html/man2html.c b/man2html/man2html.c index c5f22dc..7a7ef56 100644 --- a/man2html/man2html.c +++ b/man2html/man2html.c @@ -1571,17 +1571,19 @@ add_to_index(int level, char *item) label[2]++; } - if (level != subs) { - manidx_need(6); - if (subs) { - strcpy(manidx+mip, "\n"); - mip += 6; - } else { + while (level != subs) { + if (level > subs) { + manidx_need(5); strcpy(manidx+mip, "
\n"); mip += 5; + subs++; + } else { + manidx_need(6); + strcpy(manidx+mip, "
\n"); + mip += 6; + subs--; } } - subs = level; scan_troff(item, 1, &c); manidx_need(100 + strlen(c)); @@ -1654,7 +1656,7 @@ scan_request(char *c) { printf("%s\n", buffer); } fprintf(stderr, "%s\n", c+2); /* XXX */ - exit(0); + exit(1); break; case V('d','i'): { @@ -2218,6 +2220,40 @@ scan_request(char *c) { else out_html("\n"); curpos=0; break; + case V4('M','2','S','S'): + { + char *h = NULL, *p; + c=c+j; + c = fill_words(c, wordlist, SIZE(wordlist), &words, 0); + if (words<3) + abort(); + p = strchr(wordlist[2], '\n'); + if (p) *p = 0; + out_html(change_to_font(0)); + out_html(change_to_size(0)); + (void) scan_expression(wordlist[0], &i); + add_to_index(i, wordlist[2]); + if (mandoc_command) + scan_troff_mandoc(wordlist[1],1,&h); + else + scan_troff(wordlist[1],1,&h); + wordlist[1] = h; + h = NULL; + if (mandoc_command) + scan_troff_mandoc(wordlist[2],1,&h); + else + scan_troff(wordlist[2],1,&h); + wordlist[2] = h; + out_html(" \n<"); + out_html(wordlist[1]); out_html(">"); + out_html(wordlist[2]); out_html("\n"); + free(wordlist[1]); + free(wordlist[2]); + } + break; case V('T','S'): c=scan_table(c); break; @@ -3351,7 +3387,7 @@ main(int argc, char **argv) { manidx[mip]=0; printf("%s", manidx); } - if (subs) printf("\n"); + while (subs--) printf("\n"); printf("\n"); print_sig(); printf("\n\n"); -- cgit v1.2.3