[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.265 and 1.268

version 1.265, 2014/04/20 19:40:13 version 1.268, 2014/07/02 03:48:07
Line 30 
Line 30 
 #include <string.h>  #include <string.h>
   
 #include "mandoc.h"  #include "mandoc.h"
   #include "mandoc_aux.h"
 #include "out.h"  #include "out.h"
 #include "term.h"  #include "term.h"
 #include "mdoc.h"  #include "mdoc.h"
Line 94  static int   termp_bt_pre(DECL_ARGS);
Line 95  static int   termp_bt_pre(DECL_ARGS);
 static  int       termp_bx_pre(DECL_ARGS);  static  int       termp_bx_pre(DECL_ARGS);
 static  int       termp_cd_pre(DECL_ARGS);  static  int       termp_cd_pre(DECL_ARGS);
 static  int       termp_d1_pre(DECL_ARGS);  static  int       termp_d1_pre(DECL_ARGS);
   static  int       termp_es_pre(DECL_ARGS);
 static  int       termp_ex_pre(DECL_ARGS);  static  int       termp_ex_pre(DECL_ARGS);
 static  int       termp_fa_pre(DECL_ARGS);  static  int       termp_fa_pre(DECL_ARGS);
 static  int       termp_fd_pre(DECL_ARGS);  static  int       termp_fd_pre(DECL_ARGS);
Line 157  static const struct termact termacts[MDOC_MAX] = {
Line 159  static const struct termact termacts[MDOC_MAX] = {
         { termp_nd_pre, NULL }, /* Nd */          { termp_nd_pre, NULL }, /* Nd */
         { termp_nm_pre, termp_nm_post }, /* Nm */          { termp_nm_pre, termp_nm_post }, /* Nm */
         { termp_quote_pre, termp_quote_post }, /* Op */          { termp_quote_pre, termp_quote_post }, /* Op */
         { NULL, NULL }, /* Ot */          { termp_ft_pre, NULL }, /* Ot */
         { termp_under_pre, NULL }, /* Pa */          { termp_under_pre, NULL }, /* Pa */
         { termp_rv_pre, NULL }, /* Rv */          { termp_rv_pre, NULL }, /* Rv */
         { NULL, NULL }, /* St */          { NULL, NULL }, /* St */
Line 227  static const struct termact termacts[MDOC_MAX] = {
Line 229  static const struct termact termacts[MDOC_MAX] = {
         { NULL, NULL }, /* Ek */          { NULL, NULL }, /* Ek */
         { termp_bt_pre, NULL }, /* Bt */          { termp_bt_pre, NULL }, /* Bt */
         { NULL, NULL }, /* Hf */          { NULL, NULL }, /* Hf */
         { NULL, NULL }, /* Fr */          { termp_under_pre, NULL }, /* Fr */
         { termp_ud_pre, NULL }, /* Ud */          { termp_ud_pre, NULL }, /* Ud */
         { NULL, termp_lb_post }, /* Lb */          { NULL, termp_lb_post }, /* Lb */
         { termp_sp_pre, NULL }, /* Lp */          { termp_sp_pre, NULL }, /* Lp */
Line 237  static const struct termact termacts[MDOC_MAX] = {
Line 239  static const struct termact termacts[MDOC_MAX] = {
         { termp_quote_pre, termp_quote_post }, /* Bro */          { termp_quote_pre, termp_quote_post }, /* Bro */
         { NULL, NULL }, /* Brc */          { NULL, NULL }, /* Brc */
         { NULL, termp____post }, /* %C */          { NULL, termp____post }, /* %C */
         { NULL, NULL }, /* Es */ /* TODO */          { termp_es_pre, NULL }, /* Es */
         { NULL, NULL }, /* En */ /* TODO */          { termp_quote_pre, termp_quote_post }, /* En */
         { termp_xx_pre, NULL }, /* Dx */          { termp_xx_pre, NULL }, /* Dx */
         { NULL, termp____post }, /* %Q */          { NULL, termp____post }, /* %Q */
         { termp_sp_pre, NULL }, /* br */          { termp_sp_pre, NULL }, /* br */
Line 441  print_mdoc_foot(struct termp *p, const void *arg)
Line 443  print_mdoc_foot(struct termp *p, const void *arg)
 static void  static void
 print_mdoc_head(struct termp *p, const void *arg)  print_mdoc_head(struct termp *p, const void *arg)
 {  {
         char            buf[BUFSIZ], title[BUFSIZ];          const struct mdoc_meta  *meta;
         size_t          buflen, titlen;          char                    *volume, *title;
         const struct mdoc_meta *meta;          size_t                   vollen, titlen;
   
         meta = (const struct mdoc_meta *)arg;          meta = (const struct mdoc_meta *)arg;
   
Line 464  print_mdoc_head(struct termp *p, const void *arg)
Line 466  print_mdoc_head(struct termp *p, const void *arg)
         p->rmargin = p->maxrmargin;          p->rmargin = p->maxrmargin;
   
         assert(meta->vol);          assert(meta->vol);
         strlcpy(buf, meta->vol, BUFSIZ);          if (NULL == meta->arch)
         buflen = term_strlen(p, buf);                  volume = mandoc_strdup(meta->vol);
           else
                   mandoc_asprintf(&volume, "%s (%s)",
                       meta->vol, meta->arch);
           vollen = term_strlen(p, volume);
   
         if (meta->arch) {          mandoc_asprintf(&title, "%s(%s)", meta->title, meta->msec);
                 strlcat(buf, " (", BUFSIZ);  
                 strlcat(buf, meta->arch, BUFSIZ);  
                 strlcat(buf, ")", BUFSIZ);  
         }  
   
         snprintf(title, BUFSIZ, "%s(%s)", meta->title, meta->msec);  
         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->trailspace = 1;
         p->offset = 0;          p->offset = 0;
         p->rmargin = 2 * (titlen+1) + buflen < p->maxrmargin ?          p->rmargin = 2 * (titlen+1) + vollen < p->maxrmargin ?
             (p->maxrmargin -              (p->maxrmargin - vollen + term_len(p, 1)) / 2 :
              term_strlen(p, buf) + term_len(p, 1)) / 2 :              p->maxrmargin - vollen;
             p->maxrmargin - buflen;  
   
         term_word(p, title);          term_word(p, title);
         term_flushln(p);          term_flushln(p);
   
         p->flags |= TERMP_NOSPACE;          p->flags |= TERMP_NOSPACE;
         p->offset = p->rmargin;          p->offset = p->rmargin;
         p->rmargin = p->offset + buflen + titlen < p->maxrmargin ?          p->rmargin = p->offset + vollen + titlen < p->maxrmargin ?
             p->maxrmargin - titlen : p->maxrmargin;              p->maxrmargin - titlen : p->maxrmargin;
   
         term_word(p, buf);          term_word(p, volume);
         term_flushln(p);          term_flushln(p);
   
         p->flags &= ~TERMP_NOBREAK;          p->flags &= ~TERMP_NOBREAK;
Line 508  print_mdoc_head(struct termp *p, const void *arg)
Line 507  print_mdoc_head(struct termp *p, const void *arg)
         p->flags &= ~TERMP_NOSPACE;          p->flags &= ~TERMP_NOSPACE;
         p->offset = 0;          p->offset = 0;
         p->rmargin = p->maxrmargin;          p->rmargin = p->maxrmargin;
           free(title);
           free(volume);
 }  }
   
 static size_t  static size_t
Line 1829  termp_sp_pre(DECL_ARGS)
Line 1830  termp_sp_pre(DECL_ARGS)
 }  }
   
 static int  static int
   termp_es_pre(DECL_ARGS)
   {
   
           return(0);
   }
   
   static int
 termp_quote_pre(DECL_ARGS)  termp_quote_pre(DECL_ARGS)
 {  {
   
Line 1860  termp_quote_pre(DECL_ARGS)
Line 1868  termp_quote_pre(DECL_ARGS)
         case MDOC_Dq:          case MDOC_Dq:
                 term_word(p, "\\(lq");                  term_word(p, "\\(lq");
                 break;                  break;
           case MDOC_En:
                   if (NULL == n->norm->Es ||
                       NULL == n->norm->Es->child)
                           return(1);
                   term_word(p, n->norm->Es->child->string);
                   break;
         case MDOC_Eo:          case MDOC_Eo:
                 break;                  break;
         case MDOC_Po:          case MDOC_Po:
Line 1897  termp_quote_post(DECL_ARGS)
Line 1911  termp_quote_post(DECL_ARGS)
         if (MDOC_BODY != n->type && MDOC_ELEM != n->type)          if (MDOC_BODY != n->type && MDOC_ELEM != n->type)
                 return;                  return;
   
         p->flags |= TERMP_NOSPACE;          if (MDOC_En != n->tok)
                   p->flags |= TERMP_NOSPACE;
   
         switch (n->tok) {          switch (n->tok) {
         case MDOC_Ao:          case MDOC_Ao:
Line 1923  termp_quote_post(DECL_ARGS)
Line 1938  termp_quote_post(DECL_ARGS)
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case MDOC_Dq:          case MDOC_Dq:
                 term_word(p, "\\(rq");                  term_word(p, "\\(rq");
                   break;
           case MDOC_En:
                   if (NULL != n->norm->Es &&
                       NULL != n->norm->Es->child &&
                       NULL != n->norm->Es->child->next) {
                           p->flags |= TERMP_NOSPACE;
                           term_word(p, n->norm->Es->child->next->string);
                   }
                 break;                  break;
         case MDOC_Eo:          case MDOC_Eo:
                 break;                  break;

Legend:
Removed from v.1.265  
changed lines
  Added in v.1.268

CVSweb