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

Diff for /mandoc/Attic/mdocterm.c between version 1.18 and 1.22

version 1.18, 2009/02/27 10:55:16 version 1.22, 2009/03/01 13:06:49
Line 112  main(int argc, char *argv[])
Line 112  main(int argc, char *argv[])
         if (NULL == (mdoc = mmain_mdoc(p)))          if (NULL == (mdoc = mmain_mdoc(p)))
                 mmain_exit(p, 1);                  mmain_exit(p, 1);
   
         termp.maxrmargin = 80; /* XXX */          termp.maxrmargin = 78; /* XXX */
         termp.rmargin = termp.maxrmargin;          termp.rmargin = termp.maxrmargin;
         termp.maxcols = 1024;          termp.maxcols = 1024;
         termp.offset = termp.col = 0;          termp.offset = termp.col = 0;
Line 190  flushln(struct termp *p)
Line 190  flushln(struct termp *p)
                 assert(vsz > 0);                  assert(vsz > 0);
   
                 /*                  /*
                    * If we're breaking normally...
                    *
                  * If a word is too long and we're within a line, put it                   * If a word is too long and we're within a line, put it
                  * on the next line.  Puke if we're being asked to write                   * on the next line.  Puke if we're being asked to write
                  * something that will exceed the right margin (i.e.,                   * something that will exceed the right margin (i.e.,
                  * from a fresh line or when we're not allowed to break                   * from a fresh line).
                  * the line with TERMP_NOBREAK).                   *
                    * If we're not breaking...
                    *
                    * Don't let the visible size exceed the full margin.
                  */                   */
   
                 /* FIXME: allow selective right-margin breaking. */                  if ( ! (TERMP_NOBREAK & p->flags)) {
                           if (vis && vis + vsz > maxvis) {
                 if (vis && vis + vsz > maxvis) {                                  putchar('\n');
                         if (p->flags & TERMP_NOBREAK)                                  for (j = 0; j < p->offset; j++)
                                           putchar(' ');
                                   vis = 0;
                           } else if (vis + vsz > maxvis)
                                 errx(1, "word breaks right margin");                                  errx(1, "word breaks right margin");
                         putchar('\n');                  } else if (vis + vsz > p->maxrmargin)
                         for (j = 0; j < p->offset; j++)  
                                 putchar(' ');  
                         vis = 0;  
                 } else if (vis + vsz > maxvis)  
                         errx(1, "word breaks right margin");                          errx(1, "word breaks right margin");
   
                 /*                  /*
Line 226  flushln(struct termp *p)
Line 230  flushln(struct termp *p)
                 }                  }
         }          }
   
           if ((TERMP_NOBREAK & p->flags) && vis >= maxvis) {
                   putchar('\n');
                   for (i = 0; i < p->rmargin; i++)
                           putchar(' ');
                   p->col = 0;
                   return;
           }
   
         /*          /*
          * If we're not to right-marginalise it (newline), then instead           * If we're not to right-marginalise it (newline), then instead
          * pad to the right margin and stay off.           * pad to the right margin and stay off.
          */           */
   
         if (p->flags & TERMP_NOBREAK) {          if (p->flags & TERMP_NOBREAK) {
                 if ( ! (p->flags & TERMP_NORPAD))                  for ( ; vis < maxvis; vis++)
                         for ( ; vis < maxvis; vis++)                          putchar(' ');
                                 putchar(' ');  
         } else          } else
                 putchar('\n');                  putchar('\n');
   
Line 465  pescape(struct termp *p, const char *word, size_t *i, 
Line 476  pescape(struct termp *p, const char *word, size_t *i, 
                         /* FALLTHROUGH */                          /* FALLTHROUGH */
                 case ('.'):                  case ('.'):
                         chara(p, word[*i]);                          chara(p, word[*i]);
                           break;
                   case ('e'):
                           chara(p, '\\');
                           break;
                 default:                  default:
                         break;                          break;
                 }                  }
Line 554  word(struct termp *p, const char *word)
Line 569  word(struct termp *p, const char *word)
                 if ( ! xisspace(word[i])) {                  if ( ! xisspace(word[i])) {
                         j++;                          j++;
                         continue;                          continue;
                   }
   
                   /* Escaped spaces don't delimit... */
                   if (i > 0 && xisspace(word[i]) && '\\' == word[i - 1]) {
                           j++;
                           continue;
                 }                  }
   
                 if (0 == j)                  if (0 == j)
                         continue;                          continue;
                 assert(i >= j);                  assert(i >= j);

Legend:
Removed from v.1.18  
changed lines
  Added in v.1.22

CVSweb