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

Diff for /mandoc/mdoc_man.c between version 1.80 and 1.81

version 1.80, 2014/12/23 13:48:57 version 1.81, 2014/12/24 23:32:42
Line 116  static void   print_word(const char *);
Line 116  static void   print_word(const char *);
 static  void      print_line(const char *, int);  static  void      print_line(const char *, int);
 static  void      print_block(const char *, int);  static  void      print_block(const char *, int);
 static  void      print_offs(const char *, int);  static  void      print_offs(const char *, int);
 static  void      print_width(const char *,  static  void      print_width(const struct mdoc_bl *,
                                 const struct mdoc_node *, size_t);                          const struct mdoc_node *);
 static  void      print_count(int *);  static  void      print_count(int *);
 static  void      print_node(DECL_ARGS);  static  void      print_node(DECL_ARGS);
   
Line 265  static int  outflags;
Line 265  static int  outflags;
   
 #define BL_STACK_MAX    32  #define BL_STACK_MAX    32
   
 static  size_t          Bl_stack[BL_STACK_MAX];  /* offsets [chars] */  static  int             Bl_stack[BL_STACK_MAX];  /* offsets [chars] */
 static  int             Bl_stack_post[BL_STACK_MAX];  /* add final .RE */  static  int             Bl_stack_post[BL_STACK_MAX];  /* add final .RE */
 static  int             Bl_stack_len;  /* number of nested Bl blocks */  static  int             Bl_stack_len;  /* number of nested Bl blocks */
 static  int             TPremain;  /* characters before tag is full */  static  int             TPremain;  /* characters before tag is full */
Line 423  print_offs(const char *v, int keywords)
Line 423  print_offs(const char *v, int keywords)
 {  {
         char              buf[24];          char              buf[24];
         struct roffsu     su;          struct roffsu     su;
         size_t            sz;          int               sz;
   
         print_line(".RS", MMAN_Bk_susp);          print_line(".RS", MMAN_Bk_susp);
   
Line 435  print_offs(const char *v, int keywords)
Line 435  print_offs(const char *v, int keywords)
         else if (keywords && !strcmp(v, "indent-two"))          else if (keywords && !strcmp(v, "indent-two"))
                 sz = 12;                  sz = 12;
         else if (a2roffsu(v, &su, SCALE_EN) > 1) {          else if (a2roffsu(v, &su, SCALE_EN) > 1) {
                 if (su.scale < 0.0)  
                         su.scale = 0.0;  
                 if (SCALE_EN == su.unit)                  if (SCALE_EN == su.unit)
                         sz = su.scale;                          sz = su.scale;
                 else {                  else {
Line 461  print_offs(const char *v, int keywords)
Line 459  print_offs(const char *v, int keywords)
         if (Bl_stack_len)          if (Bl_stack_len)
                 sz += Bl_stack[Bl_stack_len - 1];                  sz += Bl_stack[Bl_stack_len - 1];
   
         (void)snprintf(buf, sizeof(buf), "%zun", sz);          (void)snprintf(buf, sizeof(buf), "%dn", sz);
         print_word(buf);          print_word(buf);
         outflags |= MMAN_nl;          outflags |= MMAN_nl;
 }  }
Line 470  print_offs(const char *v, int keywords)
Line 468  print_offs(const char *v, int keywords)
  * Set up the indentation for a list item; used from pre_it().   * Set up the indentation for a list item; used from pre_it().
  */   */
 static void  static void
 print_width(const char *v, const struct mdoc_node *child, size_t defsz)  print_width(const struct mdoc_bl *bl, const struct mdoc_node *child)
 {  {
         char              buf[24];          char              buf[24];
         struct roffsu     su;          struct roffsu     su;
         size_t            sz, chsz;          int               numeric, remain, sz, chsz;
         int               numeric, remain;  
   
         numeric = 1;          numeric = 1;
         remain = 0;          remain = 0;
   
         /* Convert v into a number (of characters). */          /* Convert the width into a number (of characters). */
         if (NULL == v)          if (bl->width == NULL)
                 sz = defsz;                  sz = (bl->type == LIST_hang) ? 6 : 0;
         else if (a2roffsu(v, &su, SCALE_MAX) > 1) {          else if (a2roffsu(bl->width, &su, SCALE_MAX) > 1) {
                 if (su.scale < 0.0)  
                         su.scale = 0.0;  
                 if (SCALE_EN == su.unit)                  if (SCALE_EN == su.unit)
                         sz = su.scale;                          sz = su.scale;
                 else {                  else {
Line 493  print_width(const char *v, const struct mdoc_node *chi
Line 488  print_width(const char *v, const struct mdoc_node *chi
                         numeric = 0;                          numeric = 0;
                 }                  }
         } else          } else
                 sz = strlen(v);                  sz = strlen(bl->width);
   
         /* XXX Rough estimation, might have multiple parts. */          /* XXX Rough estimation, might have multiple parts. */
         chsz = (NULL != child && MDOC_TEXT == child->type) ?          if (bl->type == LIST_enum)
             strlen(child->string) : 0;                  chsz = (bl->count > 8) + 1;
           else if (child != NULL && child->type == MDOC_TEXT)
                   chsz = strlen(child->string);
           else
                   chsz = 0;
   
         /* Maybe we are inside an enclosing list? */          /* Maybe we are inside an enclosing list? */
         mid_it();          mid_it();
Line 509  print_width(const char *v, const struct mdoc_node *chi
Line 508  print_width(const char *v, const struct mdoc_node *chi
         Bl_stack[Bl_stack_len++] = sz + 2;          Bl_stack[Bl_stack_len++] = sz + 2;
   
         /* Set up the current list. */          /* Set up the current list. */
         if (defsz && chsz > sz)          if (chsz > sz && bl->type != LIST_tag)
                 print_block(".HP", 0);                  print_block(".HP", 0);
         else {          else {
                 print_block(".TP", 0);                  print_block(".TP", 0);
                 remain = sz + 2;                  remain = sz + 2;
         }          }
         if (numeric) {          if (numeric) {
                 (void)snprintf(buf, sizeof(buf), "%zun", sz + 2);                  (void)snprintf(buf, sizeof(buf), "%dn", sz + 2);
                 print_word(buf);                  print_word(buf);
         } else          } else
                 print_word(v);                  print_word(bl->width);
         TPremain = remain;          TPremain = remain;
 }  }
   
Line 528  print_count(int *count)
Line 527  print_count(int *count)
 {  {
         char              buf[24];          char              buf[24];
   
         (void)snprintf(buf, sizeof(buf), "%d.", ++*count);          (void)snprintf(buf, sizeof(buf), "%d.\\&", ++*count);
         print_word(buf);          print_word(buf);
 }  }
   
Line 1366  pre_it(DECL_ARGS)
Line 1365  pre_it(DECL_ARGS)
                 case LIST_dash:                  case LIST_dash:
                         /* FALLTHROUGH */                          /* FALLTHROUGH */
                 case LIST_hyphen:                  case LIST_hyphen:
                         print_width(bln->norm->Bl.width, NULL, 0);                          print_width(&bln->norm->Bl, NULL);
                         TPremain = 0;                          TPremain = 0;
                         outflags |= MMAN_nl;                          outflags |= MMAN_nl;
                         font_push('B');                          font_push('B');
Line 1378  pre_it(DECL_ARGS)
Line 1377  pre_it(DECL_ARGS)
                         outflags |= MMAN_nl;                          outflags |= MMAN_nl;
                         return(0);                          return(0);
                 case LIST_enum:                  case LIST_enum:
                         print_width(bln->norm->Bl.width, NULL, 0);                          print_width(&bln->norm->Bl, NULL);
                         TPremain = 0;                          TPremain = 0;
                         outflags |= MMAN_nl;                          outflags |= MMAN_nl;
                         print_count(&bln->norm->Bl.count);                          print_count(&bln->norm->Bl.count);
                         outflags |= MMAN_nl;                          outflags |= MMAN_nl;
                         return(0);                          return(0);
                 case LIST_hang:                  case LIST_hang:
                         print_width(bln->norm->Bl.width, n->child, 6);                          print_width(&bln->norm->Bl, n->child);
                         TPremain = 0;                          TPremain = 0;
                         outflags |= MMAN_nl;                          outflags |= MMAN_nl;
                         return(1);                          return(1);
                 case LIST_tag:                  case LIST_tag:
                         print_width(bln->norm->Bl.width, n->child, 0);                          print_width(&bln->norm->Bl, n->child);
                         putchar('\n');                          putchar('\n');
                         outflags &= ~MMAN_spc;                          outflags &= ~MMAN_spc;
                         return(1);                          return(1);
Line 1422  mid_it(void)
Line 1421  mid_it(void)
   
         /* Restore the indentation of the enclosing list. */          /* Restore the indentation of the enclosing list. */
         print_line(".RS", MMAN_Bk_susp);          print_line(".RS", MMAN_Bk_susp);
         (void)snprintf(buf, sizeof(buf), "%zun",          (void)snprintf(buf, sizeof(buf), "%dn",
             Bl_stack[Bl_stack_len - 1]);              Bl_stack[Bl_stack_len - 1]);
         print_word(buf);          print_word(buf);
   

Legend:
Removed from v.1.80  
changed lines
  Added in v.1.81

CVSweb