=================================================================== RCS file: /cvs/texi2mdoc/main.c,v retrieving revision 1.35 retrieving revision 1.39 diff -u -p -r1.35 -r1.39 --- texi2mdoc/main.c 2015/02/23 15:09:09 1.35 +++ texi2mdoc/main.c 2015/02/23 20:54:53 1.39 @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.35 2015/02/23 15:09:09 kristaps Exp $ */ +/* $Id: main.c,v 1.39 2015/02/23 20:54:53 kristaps Exp $ */ /* * Copyright (c) 2015 Kristaps Dzonsons * @@ -14,6 +14,9 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#if defined(__linux__) || defined(__MINT__) +# define _GNU_SOURCE /* memmem */ +#endif #include #include @@ -532,7 +535,7 @@ doignblock(struct texi *p, enum texicmd cmd, */ term = memmem(&buf[*pos], sz, end, endsz); endpos = NULL == term ? sz : - *pos + term - &buf[*pos]; + *pos + (size_t)(term - &buf[*pos]); assert(endpos <= sz); while (*pos < endpos) advance(p, buf, pos); @@ -664,7 +667,7 @@ doverbatim(struct texi *p, enum texicmd cmd, */ term = memmem(&buf[*pos], sz, end, endsz); endpos = NULL == term ? sz : - *pos + term - &buf[*pos]; + *pos + (size_t)(term - &buf[*pos]); teximacro(p, "Bd -literal -offset indent"); assert(endpos <= sz); @@ -1061,10 +1064,10 @@ dosymbol(struct texi *p, enum texicmd cmd, case (TEXICMD_SQUIGGLE_RIGHT): texiputchars(p, "}"); break; - case (TEXICMD_TIE): + case (TEXICMD_TEXSYM): texiputchars(p, "TeX"); break; - case (TEXICMD_TEXSYM): + case (TEXICMD_TIE): texiputchars(p, "\\ "); break; case (TEXICMD_COLON): @@ -1209,15 +1212,15 @@ dolink(struct texi *p, enum texicmd cmd, break; case (TEXICMD_XREF): texiputchars(p, "See Section"); - teximacroopen(p, "Qq"); + teximacroopen(p, "Dq"); break; case (TEXICMD_PXREF): texiputchars(p, "see Section"); - teximacroopen(p, "Qq"); + teximacroopen(p, "Dq"); break; case (TEXICMD_INFOREF): texiputchars(p, "See Info file node"); - teximacroopen(p, "Qq"); + teximacroopen(p, "Dq"); break; default: abort(); @@ -1355,7 +1358,10 @@ dosp(struct texi *p, enum texicmd cmd, const char *buf, size_t sz, size_t *pos) { - texivspace(p); + if (p->literal) + texiputchar(p, '\n'); + else + texivspace(p); /* FIXME: ignore and parseeoln. */ advanceeoln(p, buf, sz, pos, 1); } @@ -1631,7 +1637,7 @@ main(int argc, char *argv[]) { struct texi texi; int c; - char *path, *dir; + char *dirpath, *dir, *ccp; const char *progname, *Idir, *cp; progname = strrchr(argv[0], '/'); @@ -1656,13 +1662,11 @@ main(int argc, char *argv[]) if (0 == (argc -= optind)) goto usage; - if (NULL == (path = strdup(argv[0]))) + if (NULL == (dirpath = strdup(argv[0]))) texiabort(&texi, NULL); - else if (NULL == (dir = dirname(path))) + if (NULL == (dir = dirname(dirpath))) texiabort(&texi, NULL); - free(path); - if (NULL != (cp = strrchr(argv[0], '/'))) texi.title = strdup(cp + 1); else @@ -1670,11 +1674,12 @@ main(int argc, char *argv[]) if (NULL == texi.title) texiabort(&texi, NULL); - else if (NULL != (path = strchr(texi.title, '.'))) - *path = '\0'; + else if (NULL != (ccp = strchr(texi.title, '.'))) + *ccp = '\0'; texi.ign = 1; texi.dirs = parsedirs(&texi, dir, Idir, &texi.dirsz); + free(dirpath); parsefile(&texi, argv[0], 1); /* We shouldn't get here. */ texiexit(&texi);