[BACK]Return to pod2mdoc.c CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / pod2mdoc

Diff for /pod2mdoc/pod2mdoc.c between version 1.19 and 1.23

version 1.19, 2014/04/03 10:17:14 version 1.23, 2014/04/07 11:46:03
Line 179  formatescape(const char *buf, size_t *start, size_t en
Line 179  formatescape(const char *buf, size_t *start, size_t en
 static int  static int
 trylink(const char *buf, size_t *start, size_t end, size_t dsz)  trylink(const char *buf, size_t *start, size_t end, size_t dsz)
 {  {
         size_t           linkstart, realend, linkend, i, j, textsz;          size_t           linkstart, realend, linkend,
                            i, j, textsz, stack;
         const char      *text;          const char      *text;
   
         /*          /*
          * Scan to the start of the terminus.           * Scan to the start of the terminus.
          * This function is more or less replicated in the formatcode()           * This function is more or less replicated in the formatcode()
          * for null or index formatting codes.           * for null or index formatting codes.
            * However, we're slightly different because we might have
            * nested escapes we need to ignore.
          */           */
           stack = 0;
         for (linkstart = realend = *start; realend < end; realend++) {          for (linkstart = realend = *start; realend < end; realend++) {
                   if ('<' == buf[realend])
                           stack++;
                 if ('>' != buf[realend])                  if ('>' != buf[realend])
                         continue;                          continue;
                 else if (dsz == 1)                  else if (stack-- > 0)
                           continue;
                   if (dsz == 1)
                         break;                          break;
                 assert(realend > 0);                  assert(realend > 0);
                 if (' ' != buf[realend - 1])                  if (' ' != buf[realend - 1])
Line 215  trylink(const char *buf, size_t *start, size_t end, si
Line 223  trylink(const char *buf, size_t *start, size_t end, si
                 if ('|' == buf[textsz] || '/' == buf[textsz])                  if ('|' == buf[textsz] || '/' == buf[textsz])
                         break;                          break;
   
         /* If we have a title, find the section. */  
         if (textsz < linkend && '|' == buf[textsz]) {          if (textsz < linkend && '|' == buf[textsz]) {
                   /* With title: set start, then end at section. */
                 linkstart = textsz + 1;                  linkstart = textsz + 1;
                 textsz = textsz - *start;                  textsz = textsz - *start;
                 for (i = linkstart; i < linkend; i++)                  for (i = linkstart; i < linkend; i++)
Line 224  trylink(const char *buf, size_t *start, size_t end, si
Line 232  trylink(const char *buf, size_t *start, size_t end, si
                                 break;                                  break;
                 if (i < linkend)                  if (i < linkend)
                         linkend = i;                          linkend = i;
         } else {          } else if (textsz < linkend && '/' == buf[textsz]) {
                   /* With section: set end at section. */
                   linkend = textsz;
                 textsz = 0;                  textsz = 0;
                 if (textsz < linkend && '/' == buf[textsz])          } else
                         linkend = textsz;                  /* No title, no section. */
         }                  textsz = 0;
   
         *start = realend;          *start = realend;
   
         j = linkend - linkstart;          j = linkend - linkstart;
   
         if (0 == j)          /* Do we have only subsection material? */
           if (0 == j && '/' == buf[linkend]) {
                   linkstart = linkend + 1;
                   linkend = dsz > 1 ? realend - 1 : realend;
                   if (0 == (j = linkend - linkstart))
                           return(0);
                   printf("Sx %.*s", (int)j, &buf[linkstart]);
                   return(1);
           } else if (0 == j)
                 return(0);                  return(0);
   
         /* See if we qualify as being a link or not. */          /* See if we qualify as being a link or not. */
         if ((j > 5 && 0 == memcmp("http:", &buf[linkstart], j)) ||          if ((j > 4 && 0 == memcmp("http:", &buf[linkstart], j)) ||
                 (j > 6 && 0 == memcmp("https:", &buf[linkstart], j)) ||                  (j > 5 && 0 == memcmp("https:", &buf[linkstart], j)) ||
                 (j > 4 && 0 == memcmp("ftp:", &buf[linkstart], j)) ||                  (j > 3 && 0 == memcmp("ftp:", &buf[linkstart], j)) ||
                 (j > 5 && 0 == memcmp("sftp:", &buf[linkstart], j)) ||                  (j > 4 && 0 == memcmp("sftp:", &buf[linkstart], j)) ||
                 (j > 4 && 0 == memcmp("smb:", &buf[linkstart], j)) ||                  (j > 3 && 0 == memcmp("smb:", &buf[linkstart], j)) ||
                 (j > 4 && 0 == memcmp("afs:", &buf[linkstart], j))) {                  (j > 3 && 0 == memcmp("afs:", &buf[linkstart], j))) {
                 printf("Lk %.*s", (int)j, &buf[linkstart]);                  /* Gross. */
                   printf("Lk %.*s", (int)((dsz > 1 ? realend - 1 :
                           realend) - linkstart), &buf[linkstart]);
                 return(1);                  return(1);
         }          }
   
         /* See if we qualify as a mailto. */          /* See if we qualify as a mailto. */
         if (j > 7 && 0 == memcmp("mailto:", &buf[linkstart], j)) {          if (j > 6 && 0 == memcmp("mailto:", &buf[linkstart], j)) {
                 printf("Mt %.*s", (int)j, &buf[linkstart]);                  printf("Mt %.*s", (int)j, &buf[linkstart]);
                 return(1);                  return(1);
         }          }
Line 837  static void
Line 856  static void
 verbatim(struct state *st, const char *buf, size_t start, size_t end)  verbatim(struct state *st, const char *buf, size_t start, size_t end)
 {  {
         int              last;          int              last;
           size_t           i;
   
         if ( ! st->parsing || st->paused)          if ( ! st->parsing || st->paused)
                 return;                  return;
   again:
           /*
            * If we're in the SYNOPSIS, see if we're an #include block.
            * If we are, then print the "In" macro and re-loop.
            * This handles any number of inclusions, but only when they
            * come before the remaining parts...
            */
           if (SECT_SYNOPSIS == st->sect) {
                   i = start;
                   for (i = start; i < end && ' ' == buf[i]; i++)
                           /* Spin. */ ;
                   if (i == end)
                           return;
                   /* We're an include block! */
                   if (end - i > 10 &&
                           0 == memcmp(&buf[i], "#include <", 10)) {
                           start = i + 10;
                           while (start < end && ' ' == buf[start])
                                   start++;
                           fputs(".In ", stdout);
                           /* Stop til the '>' marker or we hit eoln. */
                           while (start < end &&
                                   '>' != buf[start] && '\n' != buf[start])
                                   putchar(buf[start++]);
                           putchar('\n');
                           if (start < end && '>' == buf[start])
                                   start++;
                           if (start < end && '\n' == buf[start])
                                   start++;
                           if (start < end)
                                   goto again;
                           return;
                   }
           }
   
           if (start == end)
                   return;
         puts(".Bd -literal");          puts(".Bd -literal");
         for (last = ' '; start < end; start++) {          for (last = ' '; start < end; start++) {
                 /*                  /*

Legend:
Removed from v.1.19  
changed lines
  Added in v.1.23

CVSweb