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

Diff for /pod2mdoc/pod2mdoc.c between version 1.21 and 1.26

version 1.21, 2014/04/03 11:55:01 version 1.26, 2014/07/11 09:07:33
Line 187  trylink(const char *buf, size_t *start, size_t end, si
Line 187  trylink(const char *buf, size_t *start, size_t end, si
          * 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;          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 454  formatcode(struct state *st, const char *buf, size_t *
Line 460  formatcode(struct state *st, const char *buf, size_t *
                         (*start) += dsz;                          (*start) += dsz;
                         break;                          break;
                 }                  }
                   if (*start < end) {
                           assert('>' == buf[*start]);
                           (*start)++;
                   }
                   if (isspace(last))
                           while (*start < end && isspace((int)buf[*start]))
                                   (*start)++;
                 return(0);                  return(0);
         }          }
   
Line 850  static void
Line 863  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++) {
                 /*                  /*
Line 1220  readfile(const struct args *args, const char *fname)
Line 1270  readfile(const struct args *args, const char *fname)
         time_t           ttm;          time_t           ttm;
         struct stat      st;          struct stat      st;
   
         assert(NULL != fname);  
   
         fd = 0 != strcmp("-", fname) ?          fd = 0 != strcmp("-", fname) ?
                 open(fname, O_RDONLY, 0) : STDIN_FILENO;                  open(fname, O_RDONLY, 0) : STDIN_FILENO;
   
Line 1327  main(int argc, char *argv[])
Line 1375  main(int argc, char *argv[])
   
         /* Accept only a single input file. */          /* Accept only a single input file. */
   
         if (argc > 2)          if (argc > 1)
                 return(EXIT_FAILURE);                  goto usage;
         else if (1 == argc)          else if (1 == argc)
                 fname = *argv;                  fname = *argv;
   
Line 1337  main(int argc, char *argv[])
Line 1385  main(int argc, char *argv[])
   
 usage:  usage:
         fprintf(stderr, "usage: %s [-d date] "          fprintf(stderr, "usage: %s [-d date] "
                 "[-n title] [-s section]\n", name);              "[-n title] [-s section] [file]\n", name);
   
         return(EXIT_FAILURE);          return(EXIT_FAILURE);
 }  }

Legend:
Removed from v.1.21  
changed lines
  Added in v.1.26

CVSweb