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

Diff for /mandoc/mdoc_term.c between version 1.170 and 1.183

version 1.170, 2010/07/04 21:59:30 version 1.183, 2010/08/21 14:04:13
Line 1 
Line 1 
 /*      $Id$ */  /*      $Id$ */
 /*  /*
  * Copyright (c) 2008, 2009 Kristaps Dzonsons <kristaps@bsd.lv>   * Copyright (c) 2008, 2009, 2010 Kristaps Dzonsons <kristaps@bsd.lv>
    * Copyright (c) 2010 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 30 
Line 31 
 #include "mandoc.h"  #include "mandoc.h"
 #include "out.h"  #include "out.h"
 #include "term.h"  #include "term.h"
 #include "regs.h"  
 #include "mdoc.h"  #include "mdoc.h"
 #include "chars.h"  #include "chars.h"
 #include "main.h"  #include "main.h"
Line 151  static const struct termact termacts[MDOC_MAX] = {
Line 151  static const struct termact termacts[MDOC_MAX] = {
         { termp_bl_pre, termp_bl_post }, /* Bl */          { termp_bl_pre, termp_bl_post }, /* Bl */
         { NULL, NULL }, /* El */          { NULL, NULL }, /* El */
         { termp_it_pre, termp_it_post }, /* It */          { termp_it_pre, termp_it_post }, /* It */
         { NULL, NULL }, /* Ad */          { termp_under_pre, NULL }, /* Ad */
         { termp_an_pre, termp_an_post }, /* An */          { termp_an_pre, termp_an_post }, /* An */
         { termp_under_pre, NULL }, /* Ar */          { termp_under_pre, NULL }, /* Ar */
         { termp_cd_pre, NULL }, /* Cd */          { termp_cd_pre, NULL }, /* Cd */
Line 208  static const struct termact termacts[MDOC_MAX] = {
Line 208  static const struct termact termacts[MDOC_MAX] = {
         { termp_under_pre, NULL }, /* Em */          { termp_under_pre, NULL }, /* Em */
         { NULL, NULL }, /* Eo */          { NULL, NULL }, /* Eo */
         { termp_xx_pre, NULL }, /* Fx */          { termp_xx_pre, NULL }, /* Fx */
         { termp_bold_pre, NULL }, /* Ms */ /* FIXME: convert to symbol? */          { termp_bold_pre, NULL }, /* Ms */
         { NULL, NULL }, /* No */          { NULL, NULL }, /* No */
         { termp_ns_pre, NULL }, /* Ns */          { termp_ns_pre, NULL }, /* Ns */
         { termp_xx_pre, NULL }, /* Nx */          { termp_xx_pre, NULL }, /* Nx */
Line 329  print_mdoc_node(DECL_ARGS)
Line 329  print_mdoc_node(DECL_ARGS)
         else if (termacts[n->tok].pre && ENDBODY_NOT == n->end)          else if (termacts[n->tok].pre && ENDBODY_NOT == n->end)
                 chld = (*termacts[n->tok].pre)(p, &npair, m, n);                  chld = (*termacts[n->tok].pre)(p, &npair, m, n);
   
           /*
            * Keeps only work until the end of a line.  If a keep was
            * invoked in a prior line, revert it to PREKEEP.
            */
   
           if (TERMP_KEEP & p->flags) {
                   if (n->prev && n->prev->line != n->line) {
                           p->flags &= ~TERMP_KEEP;
                           p->flags |= TERMP_PREKEEP;
                   } else if (NULL == n->prev) {
                           if (n->parent && n->parent->line != n->line) {
                                   p->flags &= ~TERMP_KEEP;
                                   p->flags |= TERMP_PREKEEP;
                           }
                   }
           }
   
         if (chld && n->child)          if (chld && n->child)
                 print_mdoc_nodelist(p, &npair, m, n->child);                  print_mdoc_nodelist(p, &npair, m, n->child);
   
Line 1009  termp_nm_pre(DECL_ARGS)
Line 1026  termp_nm_pre(DECL_ARGS)
         if (NULL == n->child && NULL == m->name)          if (NULL == n->child && NULL == m->name)
                 return(0);                  return(0);
   
         synopsis_pre(p, n);          if (MDOC_HEAD == n->type)
                   synopsis_pre(p, n->parent);
   
         if (MDOC_HEAD == n->type && n->next->child) {          if (MDOC_HEAD == n->type && n->next->child) {
                 p->flags |= TERMP_NOSPACE | TERMP_NOBREAK | TERMP_HANG;                  p->flags |= TERMP_NOSPACE | TERMP_NOBREAK | TERMP_HANG;
Line 1603  termp_fa_pre(DECL_ARGS)
Line 1621  termp_fa_pre(DECL_ARGS)
 static int  static int
 termp_bd_pre(DECL_ARGS)  termp_bd_pre(DECL_ARGS)
 {  {
         size_t                   tabwidth;          size_t                   tabwidth, rm, rmax;
         size_t                   rm, rmax;  
         const struct mdoc_node  *nn;          const struct mdoc_node  *nn;
   
         if (MDOC_BLOCK == n->type) {          if (MDOC_BLOCK == n->type) {
Line 1636  termp_bd_pre(DECL_ARGS)
Line 1653  termp_bd_pre(DECL_ARGS)
         p->rmargin = p->maxrmargin = TERM_MAXMARGIN;          p->rmargin = p->maxrmargin = TERM_MAXMARGIN;
   
         for (nn = n->child; nn; nn = nn->next) {          for (nn = n->child; nn; nn = nn->next) {
                 p->flags |= TERMP_NOSPACE;  
                 print_mdoc_node(p, pair, m, nn);                  print_mdoc_node(p, pair, m, nn);
                 if (NULL == nn->prev ||                  if (nn->next && nn->next->line == nn->line)
                     nn->prev->line < nn->line ||                          continue;
                     NULL == nn->next)                  term_flushln(p);
                         term_flushln(p);                  p->flags |= TERMP_NOSPACE;
         }          }
   
         p->tabwidth = tabwidth;          p->tabwidth = tabwidth;
Line 1888  termp_sp_pre(DECL_ARGS)
Line 1904  termp_sp_pre(DECL_ARGS)
                 len = 0;                  len = 0;
                 break;                  break;
         default:          default:
                   assert(n->parent);
                   if ((NULL == n->next || NULL == n->prev) &&
                                   (MDOC_Ss == n->parent->tok ||
                                    MDOC_Sh == n->parent->tok))
                           return(0);
                 len = 1;                  len = 1;
                 break;                  break;
         }          }
Line 2049  termp_sm_pre(DECL_ARGS)
Line 2070  termp_sm_pre(DECL_ARGS)
 {  {
   
         assert(n->child && MDOC_TEXT == n->child->type);          assert(n->child && MDOC_TEXT == n->child->type);
         if (0 == strcmp("on", n->child->string))          if (0 == strcmp("on", n->child->string)) {
                   if (p->col)
                           p->flags &= ~TERMP_NOSPACE;
                 p->flags &= ~TERMP_NONOSPACE;                  p->flags &= ~TERMP_NONOSPACE;
         else          } else
                 p->flags |= TERMP_NONOSPACE;                  p->flags |= TERMP_NONOSPACE;
   
         return(0);          return(0);
Line 2096  termp_li_pre(DECL_ARGS)
Line 2119  termp_li_pre(DECL_ARGS)
 static int  static int
 termp_lk_pre(DECL_ARGS)  termp_lk_pre(DECL_ARGS)
 {  {
         const struct mdoc_node *nn;          const struct mdoc_node *nn, *sv;
   
         term_fontpush(p, TERMFONT_UNDER);          term_fontpush(p, TERMFONT_UNDER);
         nn = n->child;  
   
           nn = sv = n->child;
   
         if (NULL == nn->next)          if (NULL == nn->next)
                 return(1);                  return(1);
   
         term_word(p, nn->string);          for (nn = nn->next; nn; nn = nn->next)
                   term_word(p, nn->string);
   
         term_fontpop(p);          term_fontpop(p);
   
         p->flags |= TERMP_NOSPACE;          p->flags |= TERMP_NOSPACE;
         term_word(p, ":");          term_word(p, ":");
   
         term_fontpush(p, TERMFONT_BOLD);          term_fontpush(p, TERMFONT_BOLD);
         for (nn = nn->next; nn; nn = nn->next)          term_word(p, sv->string);
                 term_word(p, nn->string);  
         term_fontpop(p);          term_fontpop(p);
   
         return(0);          return(0);

Legend:
Removed from v.1.170  
changed lines
  Added in v.1.183

CVSweb