=================================================================== RCS file: /cvs/pod2mdoc/pod2mdoc.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -p -r1.17 -r1.18 --- pod2mdoc/pod2mdoc.c 2014/04/02 20:32:41 1.17 +++ pod2mdoc/pod2mdoc.c 2014/04/02 22:36:56 1.18 @@ -1,4 +1,4 @@ -/* $Id: pod2mdoc.c,v 1.17 2014/04/02 20:32:41 kristaps Exp $ */ +/* $Id: pod2mdoc.c,v 1.18 2014/04/02 22:36:56 kristaps Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons * @@ -179,21 +179,16 @@ formatescape(const char *buf, size_t *start, size_t en static int trylink(const char *buf, size_t *start, size_t end, size_t dsz) { - size_t sv, nstart, nend, i, j; - int hasdouble; + size_t sv, nstart, nend, i, j, textsz; + const char *text; + int hasdouble; /* * Scan to the start of the terminus. * This function is more or less replicated in the formatcode() * for null or index formatting codes. */ - hasdouble = 0; for (sv = nstart = *start; nstart < end; nstart++) { - /* Do we have a double-colon? */ - if (':' == buf[nstart] && - nstart > sv && - ':' == buf[nstart - 1]) - hasdouble = 1; if ('>' != buf[nstart]) continue; else if (dsz == 1) @@ -201,8 +196,7 @@ trylink(const char *buf, size_t *start, size_t end, si assert(nstart > 0); if (' ' != buf[nstart - 1]) continue; - i = nstart; - for (j = 0; i < end && j < dsz; j++) + for (i = nstart, j = 0; i < end && j < dsz; j++) if ('>' != buf[i++]) break; if (dsz == j) @@ -217,6 +211,25 @@ trylink(const char *buf, size_t *start, size_t end, si nend = nstart; if (dsz > 1) nend--; + + /* Re-scan to see if we have a title. */ + text = &buf[*start]; + for (textsz = *start; textsz < nend; textsz++) + if ('|' == buf[textsz]) + break; + + if (textsz < nend) { + sv = textsz + 1; + textsz = textsz - *start; + } else + textsz = 0; + + /* Now see if we're a Perl manual. */ + for (hasdouble = 0, i = sv + 1; i < end; i++) + if (':' == buf[i] && ':' == buf[i - 1]) { + hasdouble = 1; + break; + } /* * Provide for some common invocations of the link primitive.