[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.64 and 1.72

version 1.64, 2014/07/02 03:48:07 version 1.72, 2014/11/06 22:28:36
Line 14 
Line 14 
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF   * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.   * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */   */
 #ifdef HAVE_CONFIG_H  
 #include "config.h"  #include "config.h"
 #endif  
   
   #include <sys/types.h>
   
 #include <assert.h>  #include <assert.h>
 #include <stdio.h>  #include <stdio.h>
 #include <string.h>  #include <string.h>
Line 83  static int   pre_en(DECL_ARGS);
Line 83  static int   pre_en(DECL_ARGS);
 static  int       pre_enc(DECL_ARGS);  static  int       pre_enc(DECL_ARGS);
 static  int       pre_em(DECL_ARGS);  static  int       pre_em(DECL_ARGS);
 static  int       pre_es(DECL_ARGS);  static  int       pre_es(DECL_ARGS);
   static  int       pre_ex(DECL_ARGS);
 static  int       pre_fa(DECL_ARGS);  static  int       pre_fa(DECL_ARGS);
 static  int       pre_fd(DECL_ARGS);  static  int       pre_fd(DECL_ARGS);
 static  int       pre_fl(DECL_ARGS);  static  int       pre_fl(DECL_ARGS);
Line 99  static int   pre_no(DECL_ARGS);
Line 100  static int   pre_no(DECL_ARGS);
 static  int       pre_ns(DECL_ARGS);  static  int       pre_ns(DECL_ARGS);
 static  int       pre_pp(DECL_ARGS);  static  int       pre_pp(DECL_ARGS);
 static  int       pre_rs(DECL_ARGS);  static  int       pre_rs(DECL_ARGS);
   static  int       pre_rv(DECL_ARGS);
 static  int       pre_sm(DECL_ARGS);  static  int       pre_sm(DECL_ARGS);
 static  int       pre_sp(DECL_ARGS);  static  int       pre_sp(DECL_ARGS);
 static  int       pre_sect(DECL_ARGS);  static  int       pre_sect(DECL_ARGS);
Line 110  static int   pre_xr(DECL_ARGS);
Line 112  static int   pre_xr(DECL_ARGS);
 static  void      print_word(const char *);  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 *);  static  void      print_offs(const char *, int);
 static  void      print_width(const char *,  static  void      print_width(const char *,
                                 const struct mdoc_node *, size_t);                                  const struct mdoc_node *, size_t);
 static  void      print_count(int *);  static  void      print_count(int *);
Line 139  static const struct manact manacts[MDOC_MAX + 1] = {
Line 141  static const struct manact manacts[MDOC_MAX + 1] = {
         { NULL, pre_li, post_font, NULL, NULL }, /* Dv */          { NULL, pre_li, post_font, NULL, NULL }, /* Dv */
         { NULL, pre_li, post_font, NULL, NULL }, /* Er */          { NULL, pre_li, post_font, NULL, NULL }, /* Er */
         { NULL, pre_li, post_font, NULL, NULL }, /* Ev */          { NULL, pre_li, post_font, NULL, NULL }, /* Ev */
         { NULL, pre_enc, post_enc, "The \\fB",          { NULL, pre_ex, NULL, NULL, NULL }, /* Ex */
             "\\fP\nutility exits 0 on success, and >0 if an error occurs."  
             }, /* Ex */  
         { NULL, pre_fa, post_fa, NULL, NULL }, /* Fa */          { NULL, pre_fa, post_fa, NULL, NULL }, /* Fa */
         { NULL, pre_fd, post_fd, NULL, NULL }, /* Fd */          { NULL, pre_fd, post_fd, NULL, NULL }, /* Fd */
         { NULL, pre_fl, post_fl, NULL, NULL }, /* Fl */          { NULL, pre_fl, post_fl, NULL, NULL }, /* Fl */
Line 155  static const struct manact manacts[MDOC_MAX + 1] = {
Line 155  static const struct manact manacts[MDOC_MAX + 1] = {
         { cond_body, pre_enc, post_enc, "[", "]" }, /* Op */          { cond_body, pre_enc, post_enc, "[", "]" }, /* Op */
         { NULL, pre_ft, post_font, NULL, NULL }, /* Ot */          { NULL, pre_ft, post_font, NULL, NULL }, /* Ot */
         { NULL, pre_em, post_font, NULL, NULL }, /* Pa */          { NULL, pre_em, post_font, NULL, NULL }, /* Pa */
         { NULL, pre_enc, post_enc, "The \\fB",          { NULL, pre_rv, NULL, NULL, NULL }, /* Rv */
                 "\\fP\nfunction returns the value 0 if successful;\n"  
                 "otherwise the value -1 is returned and the global\n"  
                 "variable \\fIerrno\\fP is set to indicate the error."  
                 }, /* Rv */  
         { NULL, NULL, NULL, NULL, NULL }, /* St */          { NULL, NULL, NULL, NULL, NULL }, /* St */
         { NULL, pre_em, post_font, NULL, NULL }, /* Va */          { NULL, pre_em, post_font, NULL, NULL }, /* Va */
         { NULL, pre_vt, post_vt, NULL, NULL }, /* Vt */          { NULL, pre_vt, post_vt, NULL, NULL }, /* Vt */
Line 420  print_block(const char *s, int newflags)
Line 416  print_block(const char *s, int newflags)
 }  }
   
 static void  static void
 print_offs(const char *v)  print_offs(const char *v, int keywords)
 {  {
         char              buf[24];          char              buf[24];
         struct roffsu     su;          struct roffsu     su;
Line 429  print_offs(const char *v)
Line 425  print_offs(const char *v)
         print_line(".RS", MMAN_Bk_susp);          print_line(".RS", MMAN_Bk_susp);
   
         /* Convert v into a number (of characters). */          /* Convert v into a number (of characters). */
         if (NULL == v || '\0' == *v || 0 == strcmp(v, "left"))          if (NULL == v || '\0' == *v || (keywords && !strcmp(v, "left")))
                 sz = 0;                  sz = 0;
         else if (0 == strcmp(v, "indent"))          else if (keywords && !strcmp(v, "indent"))
                 sz = 6;                  sz = 6;
         else if (0 == strcmp(v, "indent-two"))          else if (keywords && !strcmp(v, "indent-two"))
                 sz = 12;                  sz = 12;
         else if (a2roffsu(v, &su, SCALE_MAX)) {          else if (a2roffsu(v, &su, SCALE_MAX)) {
                 if (SCALE_EN == su.unit)                  if (SCALE_EN == su.unit)
Line 552  man_mdoc(void *arg, const struct mdoc *mdoc)
Line 548  man_mdoc(void *arg, const struct mdoc *mdoc)
         n = mdoc_node(mdoc);          n = mdoc_node(mdoc);
   
         printf(".TH \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"\n",          printf(".TH \"%s\" \"%s\" \"%s\" \"%s\" \"%s\"\n",
             meta->title, meta->msec, meta->date,              meta->title,
             meta->os, meta->vol);              (meta->msec == NULL ? "" : meta->msec),
               meta->date, meta->os, meta->vol);
   
         /* Disable hyphenation and if nroff, disable justification. */          /* Disable hyphenation and if nroff, disable justification. */
         printf(".nh\n.if n .ad l");          printf(".nh\n.if n .ad l");
Line 673  post_enc(DECL_ARGS)
Line 670  post_enc(DECL_ARGS)
         print_word(suffix);          print_word(suffix);
 }  }
   
   static int
   pre_ex(DECL_ARGS)
   {
           int      nchild;
   
           outflags |= MMAN_br | MMAN_nl;
   
           print_word("The");
   
           nchild = n->nchild;
           for (n = n->child; n; n = n->next) {
                   font_push('B');
                   print_word(n->string);
                   font_pop();
   
                   if (n->next == NULL)
                           continue;
   
                   if (nchild > 2) {
                           outflags &= ~MMAN_spc;
                           print_word(",");
                   }
                   if (n->next->next == NULL)
                           print_word("and");
           }
   
           if (nchild > 1)
                   print_word("utilities exit\\~0");
           else
                   print_word("utility exits\\~0");
   
           print_word("on success, and\\~>0 if an error occurs.");
           outflags |= MMAN_nl;
           return(0);
   }
   
 static void  static void
 post_font(DECL_ARGS)  post_font(DECL_ARGS)
 {  {
Line 843  pre_bd(DECL_ARGS)
Line 876  pre_bd(DECL_ARGS)
                 print_line(".nf", 0);                  print_line(".nf", 0);
         if (0 == n->norm->Bd.comp && NULL != n->parent->prev)          if (0 == n->norm->Bd.comp && NULL != n->parent->prev)
                 outflags |= MMAN_sp;                  outflags |= MMAN_sp;
         print_offs(n->norm->Bd.offs);          print_offs(n->norm->Bd.offs, 1);
         return(1);          return(1);
 }  }
   
Line 930  pre_bl(DECL_ARGS)
Line 963  pre_bl(DECL_ARGS)
          * just nest and do not add up their indentation.           * just nest and do not add up their indentation.
          */           */
         if (n->norm->Bl.offs) {          if (n->norm->Bl.offs) {
                 print_offs(n->norm->Bl.offs);                  print_offs(n->norm->Bl.offs, 0);
                 Bl_stack[Bl_stack_len++] = 0;                  Bl_stack[Bl_stack_len++] = 0;
         }          }
   
Line 1015  static int
Line 1048  static int
 pre_dl(DECL_ARGS)  pre_dl(DECL_ARGS)
 {  {
   
         print_offs("6n");          print_offs("6n", 0);
         return(1);          return(1);
 }  }
   
Line 1133  pre_fl(DECL_ARGS)
Line 1166  pre_fl(DECL_ARGS)
   
         font_push('B');          font_push('B');
         print_word("\\-");          print_word("\\-");
         outflags &= ~MMAN_spc;          if (n->nchild)
                   outflags &= ~MMAN_spc;
         return(1);          return(1);
 }  }
   
Line 1142  post_fl(DECL_ARGS)
Line 1176  post_fl(DECL_ARGS)
 {  {
   
         font_pop();          font_pop();
         if (0 == n->nchild && NULL != n->next &&          if ( ! (n->nchild ||
                         n->next->line == n->line)              n->next == NULL ||
               n->next->type == MDOC_TEXT ||
               n->next->flags & MDOC_LINE))
                 outflags &= ~MMAN_spc;                  outflags &= ~MMAN_spc;
 }  }
   
Line 1304  pre_it(DECL_ARGS)
Line 1340  pre_it(DECL_ARGS)
                         outflags |= MMAN_nl;                          outflags |= MMAN_nl;
                         font_push('B');                          font_push('B');
                         if (LIST_bullet == bln->norm->Bl.type)                          if (LIST_bullet == bln->norm->Bl.type)
                                 print_word("o");                                  print_word("\\(bu");
                         else                          else
                                 print_word("-");                                  print_word("-");
                         font_pop();                          font_pop();
                         break;                          outflags |= MMAN_nl;
                           return(0);
                 case LIST_enum:                  case LIST_enum:
                         print_width(bln->norm->Bl.width, NULL, 0);                          print_width(bln->norm->Bl.width, NULL, 0);
                         TPremain = 0;                          TPremain = 0;
                         outflags |= MMAN_nl;                          outflags |= MMAN_nl;
                         print_count(&bln->norm->Bl.count);                          print_count(&bln->norm->Bl.count);
                         break;                          outflags |= MMAN_nl;
                           return(0);
                 case LIST_hang:                  case LIST_hang:
                         print_width(bln->norm->Bl.width, n->child, 6);                          print_width(bln->norm->Bl.width, n->child, 6);
                         TPremain = 0;                          TPremain = 0;
                         break;                          outflags |= MMAN_nl;
                           return(1);
                 case LIST_tag:                  case LIST_tag:
                         print_width(bln->norm->Bl.width, n->child, 0);                          print_width(bln->norm->Bl.width, n->child, 0);
                         putchar('\n');                          putchar('\n');
Line 1327  pre_it(DECL_ARGS)
Line 1366  pre_it(DECL_ARGS)
                 default:                  default:
                         return(1);                          return(1);
                 }                  }
                 outflags |= MMAN_nl;  
         default:          default:
                 break;                  break;
         }          }
Line 1509  post_nm(DECL_ARGS)
Line 1547  post_nm(DECL_ARGS)
         case MDOC_HEAD:          case MDOC_HEAD:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case MDOC_ELEM:          case MDOC_ELEM:
                 font_pop();                  if (n->child != NULL || meta->name != NULL)
                           font_pop();
                 break;                  break;
         default:          default:
                 break;                  break;
Line 1562  pre_rs(DECL_ARGS)
Line 1601  pre_rs(DECL_ARGS)
 }  }
   
 static int  static int
   pre_rv(DECL_ARGS)
   {
           int      nchild;
   
           outflags |= MMAN_br | MMAN_nl;
   
           nchild = n->nchild;
           if (nchild > 0) {
                   print_word("The");
   
                   for (n = n->child; n; n = n->next) {
                           font_push('B');
                           print_word(n->string);
                           font_pop();
   
                           outflags &= ~MMAN_spc;
                           print_word("()");
   
                           if (n->next == NULL)
                                   continue;
   
                           if (nchild > 2) {
                                   outflags &= ~MMAN_spc;
                                   print_word(",");
                           }
                           if (n->next->next == NULL)
                                   print_word("and");
                   }
   
                   if (nchild > 1)
                           print_word("functions return");
                   else
                           print_word("function returns");
   
                   print_word("the value\\~0 if successful;");
           } else
                   print_word("Upon successful completion, "
                       "the value\\~0 is returned;");
   
           print_word("otherwise the value\\~\\-1 is returned"
               " and the global variable");
   
           font_push('I');
           print_word("errno");
           font_pop();
   
           print_word("is set to indicate the error.");
           outflags |= MMAN_nl;
           return(0);
   }
   
   static int
 pre_sm(DECL_ARGS)  pre_sm(DECL_ARGS)
 {  {
   
         assert(n->child && MDOC_TEXT == n->child->type);          if (NULL == n->child)
         if (0 == strcmp("on", n->child->string))                  outflags ^= MMAN_Sm;
                 outflags |= MMAN_Sm | MMAN_spc;          else if (0 == strcmp("on", n->child->string))
                   outflags |= MMAN_Sm;
         else          else
                 outflags &= ~MMAN_Sm;                  outflags &= ~MMAN_Sm;
   
           if (MMAN_Sm & outflags)
                   outflags |= MMAN_spc;
   
         return(0);          return(0);
 }  }
   

Legend:
Removed from v.1.64  
changed lines
  Added in v.1.72

CVSweb