From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from localhost (fantadrom.bsd.lv [local]); by fantadrom.bsd.lv (OpenSMTPD) with ESMTPA id 41083645; for ; Sun, 1 Mar 2015 08:40:21 -0500 (EST) Date: Sun, 1 Mar 2015 08:40:21 -0500 (EST) Message-Id: <7267762544119361078.enqueue@fantadrom.bsd.lv> X-Mailinglist: mdocml-source Reply-To: source@mdocml.bsd.lv MIME-Version: 1.0 From: kristaps@mdocml.bsd.lv To: source@mdocml.bsd.lv Subject: texi2mdoc: Allow @value in the settitle block as found in GMP. X-Mailer: activitymail 1.26, http://search.cpan.org/dist/activitymail/ Content-Type: text/plain; charset=utf-8 Log Message: ----------- Allow @value in the settitle block as found in GMP. Modified Files: -------------- texi2mdoc: extern.h main.c util.c Revision Data ------------- Index: extern.h =================================================================== RCS file: /home/cvs/mdocml/texi2mdoc/extern.h,v retrieving revision 1.21 retrieving revision 1.22 diff -Lextern.h -Lextern.h -u -p -r1.21 -r1.22 --- extern.h +++ extern.h @@ -444,7 +444,7 @@ void texifilepop(struct texi *); void teximacro(struct texi *, const char *); void teximacroclose(struct texi *); void teximacroopen(struct texi *, const char *); -void teximdocopen(struct texi *); +void teximdocopen(struct texi *, size_t *); void teximdocclose(struct texi *, int); void texipunctuate(struct texi *, size_t *); void texiputbuf(struct texi *p, size_t, size_t); @@ -453,7 +453,7 @@ void texiputchars(struct texi *, const c void texivspace(struct texi *); void texiwarn(const struct texi *, const char *, ...) __attribute__((format(printf, 2, 3))); -void texisplice(struct texi *, const char *, size_t, size_t *); +void texisplice(struct texi *, const char *, size_t, size_t); void valueadd(struct texi *, char *, char *); const char * Index: main.c =================================================================== RCS file: /home/cvs/mdocml/texi2mdoc/main.c,v retrieving revision 1.55 retrieving revision 1.56 diff -Lmain.c -Lmain.c -u -p -r1.55 -r1.56 --- main.c +++ main.c @@ -990,6 +990,8 @@ dotitle(struct texi *p, enum texicmd cmd start = end = *pos; while (end < BUFSZ(p) && '\n' != BUF(p)[end]) end++; + if (end < BUFSZ(p)) + end++; advanceeoln(p, pos, 1); free(p->subtitle); p->subtitle = malloc(end - start + 1); @@ -1410,7 +1412,7 @@ dovalue(struct texi *p, enum texicmd cmd texiputchar(p, ' '); p->seenws = 0; if (NULL != (cp = valueblookup(p, pos))) - texisplice(p, cp, strlen(cp), pos); + texisplice(p, cp, strlen(cp), *pos); else texiputchars(p, "{No value}"); } else if (TEXICMD_IFCLEAR == cmd) { @@ -1577,7 +1579,7 @@ dosection(struct texi *p, enum texicmd c if (0 == sec && NULL != p->chapters) { teximdocclose(p, 0); - teximdocopen(p); + teximdocopen(p, pos); } teximacroopen(p, sects[sec]); @@ -1594,7 +1596,7 @@ dotop(struct texi *p, enum texicmd cmd, texierr(p, "@top command while ignoring"); if (NULL == p->chapters) - teximdocopen(p); + teximdocopen(p, pos); dosection(p, cmd, pos); } @@ -1752,7 +1754,8 @@ doend(struct texi *p, enum texicmd cmd, while (*pos < BUFSZ(p) && '\n' != BUF(p)[*pos]) advance(p, pos); - texiwarn(p, "unexpected \"end\": %.*s", (int)(*pos - start), &BUF(p)[start]); + texiwarn(p, "unexpected \"end\": %.*s", + (int)(*pos - start), &BUF(p)[start]); advanceeoln(p, pos, 1); } @@ -1899,7 +1902,7 @@ main(int argc, char *argv[]) } texiexit(&texi); - return(EXIT_FAILURE); + exit(EXIT_SUCCESS); usage: fprintf(stderr, "usage: %s [-Cdir] [-Idirs] [file]\n", progname); return(EXIT_FAILURE); Index: util.c =================================================================== RCS file: /home/cvs/mdocml/texi2mdoc/util.c,v retrieving revision 1.20 retrieving revision 1.21 diff -Lutil.c -Lutil.c -u -p -r1.20 -r1.21 --- util.c +++ util.c @@ -472,7 +472,7 @@ texiexecmacro(struct texi *p, struct tex aasz = asz < m->argsz ? asz : m->argsz; if (0 == aasz) { - texisplice(p, m->value, valsz, pos); + texisplice(p, m->value, valsz, *pos); return; } @@ -535,7 +535,7 @@ texiexecmacro(struct texi *p, struct tex i = end; } - texisplice(p, val, strlen(val), pos); + texisplice(p, val, strlen(val), *pos); for (i = 0; i < asz; i++) free(args[i]); @@ -927,7 +927,7 @@ parseeof(struct texi *p) } void -texisplice(struct texi *p, const char *buf, size_t sz, size_t *pos) +texisplice(struct texi *p, const char *buf, size_t sz, size_t pos) { char *cp; struct texifile *f; @@ -944,8 +944,8 @@ texisplice(struct texi *p, const char *b } f->insplice += sz; - memmove(f->map + *pos + sz, f->map + *pos, f->mapsz - *pos); - memcpy(f->map + *pos, buf, sz); + memmove(f->map + pos + sz, f->map + pos, f->mapsz - pos); + memcpy(f->map + pos, buf, sz); f->mapsz += sz; } @@ -1405,7 +1405,7 @@ teximdocclose(struct texi *p, int last) * Otherwise just print the mdoc(7) prologue. */ void -teximdocopen(struct texi *p) +teximdocopen(struct texi *p, size_t *pos) { const char *cp; time_t t; @@ -1445,10 +1445,14 @@ teximdocopen(struct texi *p) texiputchar(p, *cp); teximacroclose(p); teximacroopen(p, "Nd"); - if (NULL != p->subtitle) - for (cp = p->subtitle; '\0' != *cp; cp++) - texiputchar(p, *cp); - else + /* + * The subtitle `Nd' can consist of arbitrary macros, so paste + * it and parse to the end of the line. + */ + if (NULL != p->subtitle) { + texisplice(p, p->subtitle, strlen(p->subtitle), *pos); + parseeoln(p, pos); + } else texiputchars(p, "Unknown description"); teximacroclose(p); p->seenvs = 1; -- To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv