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

Diff for /mandoc/man_term.c between version 1.128 and 1.132

version 1.128, 2012/05/27 17:39:28 version 1.132, 2012/07/14 10:47:07
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2010, 2011 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2010, 2011, 2012 Ingo Schwarze <schwarze@openbsd.org>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above   * purpose with or without fee is hereby granted, provided that the above
Line 127  static const struct termact termacts[MAN_MAX] = {
Line 127  static const struct termact termacts[MAN_MAX] = {
         { pre_in, NULL, MAN_NOTEXT }, /* in */          { pre_in, NULL, MAN_NOTEXT }, /* in */
         { pre_ft, NULL, MAN_NOTEXT }, /* ft */          { pre_ft, NULL, MAN_NOTEXT }, /* ft */
         { pre_OP, NULL, 0 }, /* OP */          { pre_OP, NULL, 0 }, /* OP */
           { pre_literal, NULL, 0 }, /* EX */
           { pre_literal, NULL, 0 }, /* EE */
 };  };
   
   
Line 243  pre_literal(DECL_ARGS)
Line 245  pre_literal(DECL_ARGS)
   
         term_newln(p);          term_newln(p);
   
         if (MAN_nf == n->tok)          if (MAN_nf == n->tok || MAN_EX == n->tok)
                 mt->fl |= MANT_LITERAL;                  mt->fl |= MANT_LITERAL;
         else          else
                 mt->fl &= ~MANT_LITERAL;                  mt->fl &= ~MANT_LITERAL;
Line 438  pre_in(DECL_ARGS)
Line 440  pre_in(DECL_ARGS)
 static int  static int
 pre_sp(DECL_ARGS)  pre_sp(DECL_ARGS)
 {  {
           char            *s;
         size_t           i, len;          size_t           i, len;
           int              neg;
   
         if ((NULL == n->prev && n->parent)) {          if ((NULL == n->prev && n->parent)) {
                 if (MAN_SS == n->parent->tok)                  switch (n->parent->tok) {
                   case (MAN_SH):
                           /* FALLTHROUGH */
                   case (MAN_SS):
                           /* FALLTHROUGH */
                   case (MAN_PP):
                           /* FALLTHROUGH */
                   case (MAN_LP):
                           /* FALLTHROUGH */
                   case (MAN_P):
                           /* FALLTHROUGH */
                         return(0);                          return(0);
                 if (MAN_SH == n->parent->tok)                  default:
                         return(0);                          break;
                   }
         }          }
   
           neg = 0;
         switch (n->tok) {          switch (n->tok) {
         case (MAN_br):          case (MAN_br):
                 len = 0;                  len = 0;
                 break;                  break;
         default:          default:
                 len = n->child ? a2height(p, n->child->string) : 1;                  if (NULL == n->child) {
                           len = 1;
                           break;
                   }
                   s = n->child->string;
                   if ('-' == *s) {
                           neg = 1;
                           s++;
                   }
                   len = a2height(p, s);
                 break;                  break;
         }          }
   
         if (0 == len)          if (0 == len)
                 term_newln(p);                  term_newln(p);
         for (i = 0; i < len; i++)          else if (neg)
                 term_vspace(p);                  p->skipvsp += len;
           else
                   for (i = 0; i < len; i++)
                           term_vspace(p);
   
         return(0);          return(0);
 }  }
Line 478  pre_HP(DECL_ARGS)
Line 506  pre_HP(DECL_ARGS)
                 print_bvspace(p, n);                  print_bvspace(p, n);
                 return(1);                  return(1);
         case (MAN_BODY):          case (MAN_BODY):
                 p->flags |= TERMP_NOBREAK;  
                 p->flags |= TERMP_TWOSPACE;  
                 break;                  break;
         default:          default:
                 return(0);                  return(0);
         }          }
   
           if ( ! (MANT_LITERAL & mt->fl)) {
                   p->flags |= TERMP_NOBREAK;
                   p->flags |= TERMP_TWOSPACE;
           }
   
         len = mt->lmargin[mt->lmargincur];          len = mt->lmargin[mt->lmargincur];
         ival = -1;          ival = -1;
   
Line 514  post_HP(DECL_ARGS)
Line 545  post_HP(DECL_ARGS)
 {  {
   
         switch (n->type) {          switch (n->type) {
         case (MAN_BLOCK):  
                 term_flushln(p);  
                 break;  
         case (MAN_BODY):          case (MAN_BODY):
                 term_flushln(p);                  term_flushln(p);
                 p->flags &= ~TERMP_NOBREAK;                  p->flags &= ~TERMP_NOBREAK;
Line 694  pre_TP(DECL_ARGS)
Line 722  pre_TP(DECL_ARGS)
         case (MAN_BODY):          case (MAN_BODY):
                 p->offset = mt->offset + len;                  p->offset = mt->offset + len;
                 p->rmargin = p->maxrmargin;                  p->rmargin = p->maxrmargin;
                   p->flags &= ~TERMP_NOBREAK;
                   p->flags &= ~TERMP_TWOSPACE;
                 break;                  break;
         default:          default:
                 break;                  break;
Line 711  post_TP(DECL_ARGS)
Line 741  post_TP(DECL_ARGS)
         switch (n->type) {          switch (n->type) {
         case (MAN_HEAD):          case (MAN_HEAD):
                 term_flushln(p);                  term_flushln(p);
                 p->flags &= ~TERMP_NOBREAK;  
                 p->flags &= ~TERMP_TWOSPACE;  
                 p->rmargin = p->maxrmargin;  
                 break;                  break;
         case (MAN_BODY):          case (MAN_BODY):
                 term_newln(p);                  term_newln(p);
Line 910  print_man_node(DECL_ARGS)
Line 937  print_man_node(DECL_ARGS)
                         term_newln(p);                          term_newln(p);
   
                 term_word(p, n->string);                  term_word(p, n->string);
                   goto out;
   
                 /*  
                  * If we're in a literal context, make sure that words  
                  * togehter on the same line stay together.  This is a  
                  * POST-printing call, so we check the NEXT word.  Since  
                  * -man doesn't have nested macros, we don't need to be  
                  * more specific than this.  
                  */  
                 if (MANT_LITERAL & mt->fl && ! (TERMP_NOBREAK & p->flags) &&  
                                 (NULL == n->next ||  
                                  n->next->line > n->line)) {  
                         rm = p->rmargin;  
                         rmax = p->maxrmargin;  
                         p->rmargin = p->maxrmargin = TERM_MAXMARGIN;  
                         p->flags |= TERMP_NOSPACE;  
                         term_flushln(p);  
                         p->rmargin = rm;  
                         p->maxrmargin = rmax;  
                 }  
   
                 if (MAN_EOS & n->flags)  
                         p->flags |= TERMP_SENTENCE;  
                 return;  
         case (MAN_EQN):          case (MAN_EQN):
                 term_eqn(p, n->eqn);                  term_eqn(p, n->eqn);
                 return;                  return;
Line 964  print_man_node(DECL_ARGS)
Line 970  print_man_node(DECL_ARGS)
         if ( ! (MAN_NOTEXT & termacts[n->tok].flags))          if ( ! (MAN_NOTEXT & termacts[n->tok].flags))
                 term_fontrepl(p, TERMFONT_NONE);                  term_fontrepl(p, TERMFONT_NONE);
   
   out:
           /*
            * If we're in a literal context, make sure that words
            * together on the same line stay together.  This is a
            * POST-printing call, so we check the NEXT word.  Since
            * -man doesn't have nested macros, we don't need to be
            * more specific than this.
            */
           if (MANT_LITERAL & mt->fl && ! (TERMP_NOBREAK & p->flags) &&
               NULL != n->next && n->next->line > n->line) {
                   rm = p->rmargin;
                   rmax = p->maxrmargin;
                   p->rmargin = p->maxrmargin = TERM_MAXMARGIN;
                   p->flags |= TERMP_NOSPACE;
                   if (NULL != n->string && '\0' != *n->string)
                           term_flushln(p);
                   else
                           term_newln(p);
                   if (rm < rmax && n->parent->tok == MAN_HP) {
                           p->offset = rm;
                           p->rmargin = rmax;
                   } else
                           p->rmargin = rm;
                   p->maxrmargin = rmax;
           }
         if (MAN_EOS & n->flags)          if (MAN_EOS & n->flags)
                 p->flags |= TERMP_SENTENCE;                  p->flags |= TERMP_SENTENCE;
 }  }

Legend:
Removed from v.1.128  
changed lines
  Added in v.1.132

CVSweb