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

Diff for /pod2mdoc/pod2mdoc.c between version 1.41 and 1.45

version 1.41, 2015/02/13 18:44:04 version 1.45, 2015/02/14 13:11:10
Line 135  static const char fmts[FMT__MAX] = {
Line 135  static const char fmts[FMT__MAX] = {
         'Z'             /* FMT_NULL */          'Z'             /* FMT_NULL */
 };  };
   
 static  int     last;  static  unsigned char   last;
   
   
 static void  static void
Line 1120  again:
Line 1120  again:
                                 break;                                  break;
                         }                          }
                         switch (buf[i]) {                          switch (buf[i]) {
                           case '\t':
                                   /* FALLTHROUGH */
                         case ' ':                          case ' ':
                                 if ( ! ifa)                                  if ( ! ifa)
                                         ifo = i;                                          ifo = i;
Line 1183  again:
Line 1185  again:
                                 printf(".Fa \"%s\"\n", buf + ifa);                                  printf(".Fa \"%s\"\n", buf + ifa);
                                 if (cp == NULL)                                  if (cp == NULL)
                                         break;                                          break;
                                 while (*cp == ' ')                                  while (*cp == ' ' || *cp == '\t')
                                         cp++;                                          cp++;
                                 ifa = cp - buf;                                  ifa = cp - buf;
                         }                          }
Line 1328  donamenm(struct state *st, const char *buf, size_t *st
Line 1330  donamenm(struct state *st, const char *buf, size_t *st
 static void  static void
 ordinary(struct state *st, const char *buf, size_t start, size_t end)  ordinary(struct state *st, const char *buf, size_t start, size_t end)
 {  {
         size_t          i, j, opstack;          size_t          i, j, opstack, wend;
         int             seq;          enum mdoc_type  mtype;
           int             eos, noeos, seq;
   
         if ( ! st->parsing || st->paused)          if ( ! st->parsing || st->paused)
                 return;                  return;
Line 1395  ordinary(struct state *st, const char *buf, size_t sta
Line 1398  ordinary(struct state *st, const char *buf, size_t sta
                                     &start, end, &opstack))                                      &start, end, &opstack))
                                 continue;                                  continue;
   
                         /*                          /* Merely buffer non-whitespace. */
                          * On whitespace, flush the output buffer  
                          * and allow breaking to a macro line.  
                          * Otherwise, merely buffer text.  
                          */  
   
                         last = buf[start++];                          last = buf[start++];
                         if (' ' != last) {                          if ( ! isspace(last))
                                 outbuf_addchar(st);                                  outbuf_addchar(st);
                           if (start < end &&
                               ! isspace((unsigned char)buf[start]))
                                 continue;                                  continue;
                         }  
   
                         if ( ! strcmp(st->outbuf + st->outbuflen - 2, "()") &&                          /*
                             dict_get(st->outbuf, st->outbuflen - 2) ==                           * Found the end of a word.
                             MDOC_Fo) {                           * Rewind trailing delimiters.
                                 st->outbuflen -= 2;                           */
                                 st->outbuf[st->outbuflen] = '\0';  
                                 mdoc_newln(st);                          eos = noeos = 0;
                                 fputs(".Fn ", stdout);                          for (wend = st->outbuflen; wend; wend--)
                                 outbuf_flush(st);                                  if ('.' == st->outbuf[wend - 1] ||
                                 mdoc_newln(st);                                      '!' == st->outbuf[wend - 1] ||
                                 continue;                                      '?' == st->outbuf[wend - 1])
                                           eos = 1;
                                   else if ('|' == st->outbuf[wend - 1] ||
                                       ',' == st->outbuf[wend - 1] ||
                                       ';' == st->outbuf[wend - 1] ||
                                       ':' == st->outbuf[wend - 1])
                                           noeos = 1;
                                   else if ('\'' != st->outbuf[wend - 1] &&
                                       '"' != st->outbuf[wend - 1] &&
                                       ')' != st->outbuf[wend - 1] &&
                                       ']' != st->outbuf[wend - 1])
                                           break;
                           eos &= ! noeos;
   
                           /*
                            * Detect function names.
                            */
   
                           mtype = MDOC_Fa;
                           if (wend && ')' == st->outbuf[wend] &&
                               '(' == st->outbuf[wend - 1]) {
                                   mtype = dict_get(st->outbuf, --wend);
                                   if (MDOC_Fo == mtype || MDOC_MAX == mtype) {
                                           st->outbuflen = wend;
                                           st->outbuf[wend] = '\0';
                                           mdoc_newln(st);
                                           if (MDOC_Fo == mtype)
                                                   fputs(".Fn ", stdout);
                                           else
                                                   fputs(".Xr ", stdout);
                                           st->oust = OUST_MAC;
                                   }
                         }                          }
   
                           /*
                            * On whitespace, flush the output buffer
                            * and allow breaking to a macro line.
                            */
   
                         outbuf_flush(st);                          outbuf_flush(st);
                         if (OUST_MAC == st->oust)  
                           /*
                            * End macro lines, and
                            * end text lines at the end of sentences.
                            */
   
                           if (OUST_MAC == st->oust || (eos && wend > 1 &&
                               islower((unsigned char)st->outbuf[wend - 1]))) {
                                   if (MDOC_MAX == mtype)
                                           fputs(" 3", stdout);
                                   if (MDOC_Fa != mtype)
                                           for (wend += 2;
                                                '\0' != st->outbuf[wend];
                                                wend++)
                                                   printf(" %c",
                                                       st->outbuf[wend]);
                                 mdoc_newln(st);                                  mdoc_newln(st);
                         else                          }
                                 st->wantws = 1;  
                           /* Advance to the next word. */
   
                           while ('\n' != buf[start] &&
                                  isspace((unsigned char)buf[start]))
                                   start++;
                           st->wantws = 1;
                 }                  }
   
                 if (start < end - 1 && '<' == buf[start + 1] &&                  if (start < end - 1 && '<' == buf[start + 1] &&

Legend:
Removed from v.1.41  
changed lines
  Added in v.1.45

CVSweb