[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.136 and 1.144

version 1.136, 2013/01/05 22:19:12 version 1.144, 2014/03/30 21:28:01
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, 2012, 2013 Ingo Schwarze <schwarze@openbsd.org>   * Copyright (c) 2010-2014 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 78  static int    pre_RS(DECL_ARGS);
Line 78  static int    pre_RS(DECL_ARGS);
 static  int               pre_SH(DECL_ARGS);  static  int               pre_SH(DECL_ARGS);
 static  int               pre_SS(DECL_ARGS);  static  int               pre_SS(DECL_ARGS);
 static  int               pre_TP(DECL_ARGS);  static  int               pre_TP(DECL_ARGS);
   static  int               pre_UR(DECL_ARGS);
 static  int               pre_alternate(DECL_ARGS);  static  int               pre_alternate(DECL_ARGS);
 static  int               pre_ft(DECL_ARGS);  static  int               pre_ft(DECL_ARGS);
 static  int               pre_ign(DECL_ARGS);  static  int               pre_ign(DECL_ARGS);
 static  int               pre_in(DECL_ARGS);  static  int               pre_in(DECL_ARGS);
 static  int               pre_literal(DECL_ARGS);  static  int               pre_literal(DECL_ARGS);
   static  int               pre_ll(DECL_ARGS);
 static  int               pre_sp(DECL_ARGS);  static  int               pre_sp(DECL_ARGS);
   
 static  void              post_IP(DECL_ARGS);  static  void              post_IP(DECL_ARGS);
Line 91  static void    post_RS(DECL_ARGS);
Line 93  static void    post_RS(DECL_ARGS);
 static  void              post_SH(DECL_ARGS);  static  void              post_SH(DECL_ARGS);
 static  void              post_SS(DECL_ARGS);  static  void              post_SS(DECL_ARGS);
 static  void              post_TP(DECL_ARGS);  static  void              post_TP(DECL_ARGS);
   static  void              post_UR(DECL_ARGS);
   
 static  const struct termact termacts[MAN_MAX] = {  static  const struct termact termacts[MAN_MAX] = {
         { pre_sp, NULL, MAN_NOTEXT }, /* br */          { pre_sp, NULL, MAN_NOTEXT }, /* br */
Line 129  static const struct termact termacts[MAN_MAX] = {
Line 132  static const struct termact termacts[MAN_MAX] = {
         { pre_OP, NULL, 0 }, /* OP */          { pre_OP, NULL, 0 }, /* OP */
         { pre_literal, NULL, 0 }, /* EX */          { pre_literal, NULL, 0 }, /* EX */
         { pre_literal, NULL, 0 }, /* EE */          { pre_literal, NULL, 0 }, /* EE */
           { pre_UR, post_UR, 0 }, /* UR */
           { NULL, NULL, 0 }, /* UE */
           { pre_ll, NULL, MAN_NOTEXT }, /* ll */
 };  };
   
   
Line 233  pre_ign(DECL_ARGS)
Line 239  pre_ign(DECL_ARGS)
   
 /* ARGSUSED */  /* ARGSUSED */
 static int  static int
   pre_ll(DECL_ARGS)
   {
   
           term_setwidth(p, n->nchild ? n->child->string : NULL);
           return(0);
   }
   
   
   /* ARGSUSED */
   static int
 pre_I(DECL_ARGS)  pre_I(DECL_ARGS)
 {  {
   
Line 261  pre_literal(DECL_ARGS)
Line 277  pre_literal(DECL_ARGS)
         if (MAN_HP == n->parent->tok && p->rmargin < p->maxrmargin) {          if (MAN_HP == n->parent->tok && p->rmargin < p->maxrmargin) {
                 p->offset = p->rmargin;                  p->offset = p->rmargin;
                 p->rmargin = p->maxrmargin;                  p->rmargin = p->maxrmargin;
                 p->flags &= ~(TERMP_NOBREAK | TERMP_TWOSPACE);                  p->trailspace = 0;
                   p->flags &= ~TERMP_NOBREAK;
                 p->flags |= TERMP_NOSPACE;                  p->flags |= TERMP_NOSPACE;
         }          }
   
Line 531  pre_HP(DECL_ARGS)
Line 548  pre_HP(DECL_ARGS)
   
         if ( ! (MANT_LITERAL & mt->fl)) {          if ( ! (MANT_LITERAL & mt->fl)) {
                 p->flags |= TERMP_NOBREAK;                  p->flags |= TERMP_NOBREAK;
                 p->flags |= TERMP_TWOSPACE;                  p->trailspace = 2;
         }          }
   
         len = mt->lmargin[mt->lmargincur];          len = mt->lmargin[mt->lmargincur];
Line 566  post_HP(DECL_ARGS)
Line 583  post_HP(DECL_ARGS)
         case (MAN_BODY):          case (MAN_BODY):
                 term_newln(p);                  term_newln(p);
                 p->flags &= ~TERMP_NOBREAK;                  p->flags &= ~TERMP_NOBREAK;
                 p->flags &= ~TERMP_TWOSPACE;                  p->trailspace = 0;
                 p->offset = mt->offset;                  p->offset = mt->offset;
                 p->rmargin = p->maxrmargin;                  p->rmargin = p->maxrmargin;
                 break;                  break;
Line 609  pre_IP(DECL_ARGS)
Line 626  pre_IP(DECL_ARGS)
                 break;                  break;
         case (MAN_HEAD):          case (MAN_HEAD):
                 p->flags |= TERMP_NOBREAK;                  p->flags |= TERMP_NOBREAK;
                   p->trailspace = 1;
                 break;                  break;
         case (MAN_BLOCK):          case (MAN_BLOCK):
                 print_bvspace(p, n, mt->pardist);                  print_bvspace(p, n, mt->pardist);
Line 652  pre_IP(DECL_ARGS)
Line 670  pre_IP(DECL_ARGS)
                 return(0);                  return(0);
         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->offset ?
                                   p->maxrmargin : p->offset;
                 break;                  break;
         default:          default:
                 break;                  break;
Line 671  post_IP(DECL_ARGS)
Line 690  post_IP(DECL_ARGS)
         case (MAN_HEAD):          case (MAN_HEAD):
                 term_flushln(p);                  term_flushln(p);
                 p->flags &= ~TERMP_NOBREAK;                  p->flags &= ~TERMP_NOBREAK;
                   p->trailspace = 0;
                 p->rmargin = p->maxrmargin;                  p->rmargin = p->maxrmargin;
                 break;                  break;
         case (MAN_BODY):          case (MAN_BODY):
                 term_newln(p);                  term_newln(p);
                   p->offset = mt->offset;
                 break;                  break;
         default:          default:
                 break;                  break;
Line 693  pre_TP(DECL_ARGS)
Line 714  pre_TP(DECL_ARGS)
         switch (n->type) {          switch (n->type) {
         case (MAN_HEAD):          case (MAN_HEAD):
                 p->flags |= TERMP_NOBREAK;                  p->flags |= TERMP_NOBREAK;
                   p->trailspace = 1;
                 break;                  break;
         case (MAN_BODY):          case (MAN_BODY):
                 p->flags |= TERMP_NOSPACE;                  p->flags |= TERMP_NOSPACE;
Line 710  pre_TP(DECL_ARGS)
Line 732  pre_TP(DECL_ARGS)
         /* Calculate offset. */          /* Calculate offset. */
   
         if (NULL != (nn = n->parent->head->child))          if (NULL != (nn = n->parent->head->child))
                 if (nn->string && nn->parent->line == nn->line)                  if (nn->string && 0 == (MAN_LINE & nn->flags))
                         if ((ival = a2width(p, nn->string)) >= 0)                          if ((ival = a2width(p, nn->string)) >= 0)
                                 len = (size_t)ival;                                  len = (size_t)ival;
   
Line 727  pre_TP(DECL_ARGS)
Line 749  pre_TP(DECL_ARGS)
                 mt->fl &= ~MANT_LITERAL;                  mt->fl &= ~MANT_LITERAL;
   
                 /* Don't print same-line elements. */                  /* Don't print same-line elements. */
                 for (nn = n->child; nn; nn = nn->next)                  nn = n->child;
                         if (nn->line > n->line)                  while (NULL != nn && 0 == (MAN_LINE & nn->flags))
                                 print_man_node(p, mt, nn, meta);                          nn = nn->next;
   
                   while (NULL != nn) {
                           print_man_node(p, mt, nn, meta);
                           nn = nn->next;
                   }
   
                 if (savelit)                  if (savelit)
                         mt->fl |= MANT_LITERAL;                          mt->fl |= MANT_LITERAL;
                 if (ival >= 0)                  if (ival >= 0)
Line 739  pre_TP(DECL_ARGS)
Line 766  pre_TP(DECL_ARGS)
                 return(0);                  return(0);
         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->offset ?
                                   p->maxrmargin : p->offset;
                   p->trailspace = 0;
                 p->flags &= ~TERMP_NOBREAK;                  p->flags &= ~TERMP_NOBREAK;
                 p->flags &= ~TERMP_TWOSPACE;  
                 break;                  break;
         default:          default:
                 break;                  break;
Line 762  post_TP(DECL_ARGS)
Line 790  post_TP(DECL_ARGS)
                 break;                  break;
         case (MAN_BODY):          case (MAN_BODY):
                 term_newln(p);                  term_newln(p);
                   p->offset = mt->offset;
                 break;                  break;
         default:          default:
                 break;                  break;
Line 899  pre_RS(DECL_ARGS)
Line 928  pre_RS(DECL_ARGS)
                         sz = (size_t)ival;                          sz = (size_t)ival;
   
         mt->offset += sz;          mt->offset += sz;
         p->rmargin = p->maxrmargin;          p->offset = mt->offset;
         p->offset = mt->offset < p->rmargin ? mt->offset : p->rmargin;          p->rmargin = p->maxrmargin > p->offset ?
                           p->maxrmargin : p->offset;
   
         if (++mt->lmarginsz < MAXMARGINS)          if (++mt->lmarginsz < MAXMARGINS)
                 mt->lmargincur = mt->lmarginsz;                  mt->lmargincur = mt->lmarginsz;
Line 939  post_RS(DECL_ARGS)
Line 969  post_RS(DECL_ARGS)
                 mt->lmargincur = mt->lmarginsz;                  mt->lmargincur = mt->lmarginsz;
 }  }
   
   /* ARGSUSED */
   static int
   pre_UR(DECL_ARGS)
   {
   
           return (MAN_HEAD != n->type);
   }
   
   /* ARGSUSED */
 static void  static void
   post_UR(DECL_ARGS)
   {
   
           if (MAN_BLOCK != n->type)
                   return;
   
           term_word(p, "<");
           p->flags |= TERMP_NOSPACE;
   
           if (NULL != n->child->child)
                   print_man_node(p, mt, n->child->child, meta);
   
           p->flags |= TERMP_NOSPACE;
           term_word(p, ">");
   }
   
   static void
 print_man_node(DECL_ARGS)  print_man_node(DECL_ARGS)
 {  {
         size_t           rm, rmax;          size_t           rm, rmax;
Line 1001  out:
Line 1057  out:
          * more specific than this.           * more specific than this.
          */           */
         if (MANT_LITERAL & mt->fl && ! (TERMP_NOBREAK & p->flags) &&          if (MANT_LITERAL & mt->fl && ! (TERMP_NOBREAK & p->flags) &&
             (NULL == n->next || n->next->line > n->line)) {              (NULL == n->next || MAN_LINE & n->next->flags)) {
                 rm = p->rmargin;                  rm = p->rmargin;
                 rmax = p->maxrmargin;                  rmax = p->maxrmargin;
                 p->rmargin = p->maxrmargin = TERM_MAXMARGIN;                  p->rmargin = p->maxrmargin = TERM_MAXMARGIN;
Line 1069  print_man_foot(struct termp *p, const void *arg)
Line 1125  print_man_foot(struct termp *p, const void *arg)
         /* Bottom left corner: manual source. */          /* Bottom left corner: manual source. */
   
         p->flags |= TERMP_NOSPACE | TERMP_NOBREAK;          p->flags |= TERMP_NOSPACE | TERMP_NOBREAK;
           p->trailspace = 1;
         p->offset = 0;          p->offset = 0;
         p->rmargin = (p->maxrmargin - datelen + term_len(p, 1)) / 2;          p->rmargin = (p->maxrmargin - datelen + term_len(p, 1)) / 2;
   
Line 1091  print_man_foot(struct termp *p, const void *arg)
Line 1148  print_man_foot(struct termp *p, const void *arg)
   
         p->flags &= ~TERMP_NOBREAK;          p->flags &= ~TERMP_NOBREAK;
         p->flags |= TERMP_NOSPACE;          p->flags |= TERMP_NOSPACE;
           p->trailspace = 0;
         p->offset = p->rmargin;          p->offset = p->rmargin;
         p->rmargin = p->maxrmargin;          p->rmargin = p->maxrmargin;
   
Line 1122  print_man_head(struct termp *p, const void *arg)
Line 1180  print_man_head(struct termp *p, const void *arg)
         titlen = term_strlen(p, title);          titlen = term_strlen(p, title);
   
         p->flags |= TERMP_NOBREAK | TERMP_NOSPACE;          p->flags |= TERMP_NOBREAK | TERMP_NOSPACE;
           p->trailspace = 1;
         p->offset = 0;          p->offset = 0;
         p->rmargin = 2 * (titlen+1) + buflen < p->maxrmargin ?          p->rmargin = 2 * (titlen+1) + buflen < p->maxrmargin ?
             (p->maxrmargin -              (p->maxrmargin -
Line 1144  print_man_head(struct termp *p, const void *arg)
Line 1203  print_man_head(struct termp *p, const void *arg)
         /* Top right corner: title and section, again. */          /* Top right corner: title and section, again. */
   
         p->flags &= ~TERMP_NOBREAK;          p->flags &= ~TERMP_NOBREAK;
           p->trailspace = 0;
         if (p->rmargin + titlen <= p->maxrmargin) {          if (p->rmargin + titlen <= p->maxrmargin) {
                 p->flags |= TERMP_NOSPACE;                  p->flags |= TERMP_NOSPACE;
                 p->offset = p->rmargin;                  p->offset = p->rmargin;

Legend:
Removed from v.1.136  
changed lines
  Added in v.1.144

CVSweb