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

Diff for /pod2mdoc/pod2mdoc.c between version 1.43 and 1.47

version 1.43, 2015/02/14 11:12:48 version 1.47, 2015/02/19 10:46:40
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 1285  donamenm(struct state *st, const char *buf, size_t *st
Line 1287  donamenm(struct state *st, const char *buf, size_t *st
         assert(OUST_NL == st->oust);          assert(OUST_NL == st->oust);
         assert(st->wantws);          assert(st->wantws);
   
         while (*start < end && ' ' == buf[*start])          while (*start < end && isspace((unsigned char)buf[*start]))
                 (*start)++;                  (*start)++;
   
         if (end == *start) {          if (end == *start) {
Line 1306  donamenm(struct state *st, const char *buf, size_t *st
Line 1308  donamenm(struct state *st, const char *buf, size_t *st
                 printf(" ,");                  printf(" ,");
                 mdoc_newln(st);                  mdoc_newln(st);
                 (*start)++;                  (*start)++;
                 while (*start < end && ' ' == buf[*start])                  while (*start < end && isspace((unsigned char)buf[*start]))
                         (*start)++;                          (*start)++;
         }          }
 }  }
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;
         enum mdoc_type  mtype;          enum mdoc_type  mtype;
         int             seq;          int             eos, noeos, seq;
   
         if ( ! st->parsing || st->paused)          if ( ! st->parsing || st->paused)
                 return;                  return;
Line 1343  ordinary(struct state *st, const char *buf, size_t sta
Line 1345  ordinary(struct state *st, const char *buf, size_t sta
          */           */
         if (SECT_NAME == st->sect) {          if (SECT_NAME == st->sect) {
                 for (i = end - 2; i > start; i--)                  for (i = end - 2; i > start; i--)
                         if ('-' == buf[i] && ' ' == buf[i + 1])                          if ('-' == buf[i] &&
                               isspace((unsigned char)buf[i + 1]))
                                 break;                                  break;
                 if ('-' == buf[i]) {                  if ('-' == buf[i]) {
                         j = i;                          j = i;
Line 1353  ordinary(struct state *st, const char *buf, size_t sta
Line 1356  ordinary(struct state *st, const char *buf, size_t sta
                                         break;                                          break;
                         donamenm(st, buf, &start, i + 1);                          donamenm(st, buf, &start, i + 1);
                         start = j + 1;                          start = j + 1;
                         while (start < end && ' ' == buf[start])                          while (start < end &&
                                isspace((unsigned char)buf[start]))
                                 start++;                                  start++;
                         formatcodeln(st, "Nd", buf, &start, end, 1);                          formatcodeln(st, "Nd", buf, &start, end, 1);
                         mdoc_newln(st);                          mdoc_newln(st);
Line 1399  ordinary(struct state *st, const char *buf, size_t sta
Line 1403  ordinary(struct state *st, const char *buf, size_t sta
                         /* Merely buffer non-whitespace. */                          /* Merely buffer non-whitespace. */
   
                         last = buf[start++];                          last = buf[start++];
                         if ( ! isspace(last)) {                          if ( ! isspace(last))
                                 outbuf_addchar(st);                                  outbuf_addchar(st);
                           if (start < end &&
                               ! isspace((unsigned char)buf[start]))
                                 continue;                                  continue;
                         }  
   
                         /* Detect function names. */                          /*
                            * Found the end of a word.
                            * Rewind trailing delimiters.
                            */
   
                           eos = noeos = 0;
                           for (wend = st->outbuflen; wend; wend--)
                                   if ('.' == st->outbuf[wend - 1] ||
                                       '!' == st->outbuf[wend - 1] ||
                                       '?' == 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;                          mtype = MDOC_Fa;
                         if (st->outbuflen > 2 &&                          if (wend && ')' == st->outbuf[wend] &&
                             ')' == st->outbuf[st->outbuflen - 1] &&                              '(' == st->outbuf[wend - 1]) {
                             '(' == st->outbuf[st->outbuflen - 2]) {                                  mtype = dict_get(st->outbuf, --wend);
                                 mtype = dict_get(st->outbuf,  
                                     st->outbuflen - 2);  
                                 if (MDOC_Fo == mtype || MDOC_MAX == mtype) {                                  if (MDOC_Fo == mtype || MDOC_MAX == mtype) {
                                         st->outbuflen -= 2;                                          st->outbuflen = wend;
                                         st->outbuf[st->outbuflen] = '\0';                                          st->outbuf[wend] = '\0';
                                         mdoc_newln(st);                                          mdoc_newln(st);
                                         if (MDOC_Fo == mtype)                                          if (MDOC_Fo == mtype)
                                                 fputs(".Fn ", stdout);                                                  fputs(".Fn ", stdout);
Line 1436  ordinary(struct state *st, const char *buf, size_t sta
Line 1464  ordinary(struct state *st, const char *buf, size_t sta
                          * end text lines at the end of sentences.                           * end text lines at the end of sentences.
                          */                           */
   
                         if (OUST_MAC == st->oust || (start > 3 &&                          if (OUST_MAC == st->oust || (eos && wend > 1 &&
                             ('.' == buf[start - 2] ||                              islower((unsigned char)st->outbuf[wend - 1]))) {
                              '!' == buf[start - 2] ||  
                              '?' == buf[start - 2]) &&  
                             islower((unsigned char)buf[start - 3]) &&  
                             islower((unsigned char)buf[start - 4]))) {  
                                 if (MDOC_MAX == mtype)                                  if (MDOC_MAX == mtype)
                                         fputs(" 3", stdout);                                          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);
                         }                          }
   
                         /* Advance to the next word. */                          /* Advance to the next word. */
   
                         while (isspace((unsigned char)buf[start]))                          while ('\n' != buf[start] &&
                                  isspace((unsigned char)buf[start]))
                                 start++;                                  start++;
                         st->wantws = 1;                          st->wantws = 1;
                 }                  }
Line 1556  dofile(const struct args *args, const char *fname, 
Line 1587  dofile(const struct args *args, const char *fname, 
 {  {
         char             datebuf[64];          char             datebuf[64];
         struct state     st;          struct state     st;
         const char      *fbase, *fext, *section, *date;          const char      *fbase, *fext, *section, *date, *format;
         char            *title, *cp;          char            *title, *cp;
         size_t           sup, end, i, cur = 0;          size_t           sup, end, i, cur = 0;
   
Line 1601  dofile(const struct args *args, const char *fname, 
Line 1632  dofile(const struct args *args, const char *fname, 
   
         /* Date.  Or the given "tm" if not supplied. */          /* Date.  Or the given "tm" if not supplied. */
   
         if (NULL == (date = args->date)) {          date = args->date;
                 strftime(datebuf, sizeof(datebuf), "%B %d, %Y", tm);          format = (NULL == date) ? "%B %d, %Y" :
               strcmp(date, "Mdocdate") ? NULL : "$Mdocdate$";
   
           if (NULL != format) {
                   strftime(datebuf, sizeof(datebuf), format, tm);
                 date = datebuf;                  date = datebuf;
         }          }
   

Legend:
Removed from v.1.43  
changed lines
  Added in v.1.47

CVSweb