[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.61 and 1.62

version 1.61, 2014/03/30 23:34:32 version 1.62, 2014/04/20 16:46:05
Line 274  static struct {
Line 274  static struct {
         size_t   size;          size_t   size;
 }       fontqueue;  }       fontqueue;
   
   
 static void  static void
 font_push(char newfont)  font_push(char newfont)
 {  {
Line 281  font_push(char newfont)
Line 282  font_push(char newfont)
         if (fontqueue.head + fontqueue.size <= ++fontqueue.tail) {          if (fontqueue.head + fontqueue.size <= ++fontqueue.tail) {
                 fontqueue.size += 8;                  fontqueue.size += 8;
                 fontqueue.head = mandoc_realloc(fontqueue.head,                  fontqueue.head = mandoc_realloc(fontqueue.head,
                                 fontqueue.size);                      fontqueue.size);
         }          }
         *fontqueue.tail = newfont;          *fontqueue.tail = newfont;
         print_word("");          print_word("");
Line 307  print_word(const char *s)
Line 308  print_word(const char *s)
 {  {
   
         if ((MMAN_PP | MMAN_sp | MMAN_br | MMAN_nl) & outflags) {          if ((MMAN_PP | MMAN_sp | MMAN_br | MMAN_nl) & outflags) {
                 /*                  /*
                  * If we need a newline, print it now and start afresh.                   * If we need a newline, print it now and start afresh.
                  */                   */
                 if (MMAN_PP & outflags) {                  if (MMAN_PP & outflags) {
Line 362  print_word(const char *s)
Line 363  print_word(const char *s)
   
         for ( ; *s; s++) {          for ( ; *s; s++) {
                 switch (*s) {                  switch (*s) {
                 case (ASCII_NBRSP):                  case ASCII_NBRSP:
                         printf("\\ ");                          printf("\\ ");
                         break;                          break;
                 case (ASCII_HYPH):                  case ASCII_HYPH:
                         putchar('-');                          putchar('-');
                         break;                          break;
                 case (ASCII_BREAK):                  case ASCII_BREAK:
                         printf("\\:");                          printf("\\:");
                         break;                          break;
                 case (' '):                  case ' ':
                         if (MMAN_nbrword & outflags) {                          if (MMAN_nbrword & outflags) {
                                 printf("\\ ");                                  printf("\\ ");
                                 break;                                  break;
Line 490  print_width(const char *v, const struct mdoc_node *chi
Line 491  print_width(const char *v, const struct mdoc_node *chi
   
         /* XXX Rough estimation, might have multiple parts. */          /* XXX Rough estimation, might have multiple parts. */
         chsz = (NULL != child && MDOC_TEXT == child->type) ?          chsz = (NULL != child && MDOC_TEXT == child->type) ?
                         strlen(child->string) : 0;              strlen(child->string) : 0;
   
         /* Maybe we are inside an enclosing list? */          /* Maybe we are inside an enclosing list? */
         mid_it();          mid_it();
Line 548  man_mdoc(void *arg, const struct mdoc *mdoc)
Line 549  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->msec, meta->date,
                         meta->os, meta->vol);              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 587  print_node(DECL_ARGS)
Line 588  print_node(DECL_ARGS)
                  * Make sure that we don't happen to start with a                   * Make sure that we don't happen to start with a
                  * control character at the start of a line.                   * control character at the start of a line.
                  */                   */
                 if (MMAN_nl & outflags && ('.' == *n->string ||                  if (MMAN_nl & outflags &&
                                         '\'' == *n->string)) {                      ('.' == *n->string || '\'' == *n->string)) {
                         print_word("");                          print_word("");
                         printf("\\&");                          printf("\\&");
                         outflags &= ~MMAN_spc;                          outflags &= ~MMAN_spc;
Line 605  print_node(DECL_ARGS)
Line 606  print_node(DECL_ARGS)
                         do_sub = (*act->pre)(meta, n);                          do_sub = (*act->pre)(meta, n);
         }          }
   
         /*          /*
          * Conditionally run all child nodes.           * Conditionally run all child nodes.
          * Note that this iterates over children instead of using           * Note that this iterates over children instead of using
          * recursion.  This prevents unnecessary depth in the stack.           * recursion.  This prevents unnecessary depth in the stack.
Line 697  static int
Line 698  static int
 pre__t(DECL_ARGS)  pre__t(DECL_ARGS)
 {  {
   
         if (n->parent && MDOC_Rs == n->parent->tok &&          if (n->parent && MDOC_Rs == n->parent->tok &&
                         n->parent->norm->Rs.quote_T) {              n->parent->norm->Rs.quote_T) {
                 print_word("");                  print_word("");
                 putchar('\"');                  putchar('\"');
                 outflags &= ~MMAN_spc;                  outflags &= ~MMAN_spc;
Line 711  static void
Line 712  static void
 post__t(DECL_ARGS)  post__t(DECL_ARGS)
 {  {
   
         if (n->parent && MDOC_Rs == n->parent->tok &&          if (n->parent && MDOC_Rs == n->parent->tok &&
                         n->parent->norm->Rs.quote_T) {              n->parent->norm->Rs.quote_T) {
                 outflags &= ~MMAN_spc;                  outflags &= ~MMAN_spc;
                 print_word("");                  print_word("");
                 putchar('\"');                  putchar('\"');
Line 764  pre_syn(const struct mdoc_node *n)
Line 765  pre_syn(const struct mdoc_node *n)
                 return;                  return;
   
         if (n->prev->tok == n->tok &&          if (n->prev->tok == n->tok &&
                         MDOC_Ft != n->tok &&              MDOC_Ft != n->tok &&
                         MDOC_Fo != n->tok &&              MDOC_Fo != n->tok &&
                         MDOC_Fn != n->tok) {              MDOC_Fn != n->tok) {
                 outflags |= MMAN_br;                  outflags |= MMAN_br;
                 return;                  return;
         }          }
   
         switch (n->prev->tok) {          switch (n->prev->tok) {
         case (MDOC_Fd):          case MDOC_Fd:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case (MDOC_Fn):          case MDOC_Fn:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case (MDOC_Fo):          case MDOC_Fo:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case (MDOC_In):          case MDOC_In:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case (MDOC_Vt):          case MDOC_Vt:
                 outflags |= MMAN_sp;                  outflags |= MMAN_sp;
                 break;                  break;
         case (MDOC_Ft):          case MDOC_Ft:
                 if (MDOC_Fn != n->tok && MDOC_Fo != n->tok) {                  if (MDOC_Fn != n->tok && MDOC_Fo != n->tok) {
                         outflags |= MMAN_sp;                          outflags |= MMAN_sp;
                         break;                          break;
Line 800  pre_an(DECL_ARGS)
Line 801  pre_an(DECL_ARGS)
 {  {
   
         switch (n->norm->An.auth) {          switch (n->norm->An.auth) {
         case (AUTH_split):          case AUTH_split:
                 outflags &= ~MMAN_An_nosplit;                  outflags &= ~MMAN_An_nosplit;
                 outflags |= MMAN_An_split;                  outflags |= MMAN_An_split;
                 return(0);                  return(0);
         case (AUTH_nosplit):          case AUTH_nosplit:
                 outflags &= ~MMAN_An_split;                  outflags &= ~MMAN_An_split;
                 outflags |= MMAN_An_nosplit;                  outflags |= MMAN_An_nosplit;
                 return(0);                  return(0);
Line 863  pre_bf(DECL_ARGS)
Line 864  pre_bf(DECL_ARGS)
 {  {
   
         switch (n->type) {          switch (n->type) {
         case (MDOC_BLOCK):          case MDOC_BLOCK:
                 return(1);                  return(1);
         case (MDOC_BODY):          case MDOC_BODY:
                 break;                  break;
         default:          default:
                 return(0);                  return(0);
         }          }
         switch (n->norm->Bf.font) {          switch (n->norm->Bf.font) {
         case (FONT_Em):          case FONT_Em:
                 font_push('I');                  font_push('I');
                 break;                  break;
         case (FONT_Sy):          case FONT_Sy:
                 font_push('B');                  font_push('B');
                 break;                  break;
         default:          default:
Line 897  pre_bk(DECL_ARGS)
Line 898  pre_bk(DECL_ARGS)
 {  {
   
         switch (n->type) {          switch (n->type) {
         case (MDOC_BLOCK):          case MDOC_BLOCK:
                 return(1);                  return(1);
         case (MDOC_BODY):          case MDOC_BODY:
                 outflags |= MMAN_Bk;                  outflags |= MMAN_Bk;
                 return(1);                  return(1);
         default:          default:
Line 931  pre_bl(DECL_ARGS)
Line 932  pre_bl(DECL_ARGS)
         }          }
   
         switch (n->norm->Bl.type) {          switch (n->norm->Bl.type) {
         case (LIST_enum):          case LIST_enum:
                 n->norm->Bl.count = 0;                  n->norm->Bl.count = 0;
                 return(1);                  return(1);
         case (LIST_column):          case LIST_column:
                 break;                  break;
         default:          default:
                 return(1);                  return(1);
Line 953  post_bl(DECL_ARGS)
Line 954  post_bl(DECL_ARGS)
 {  {
   
         switch (n->norm->Bl.type) {          switch (n->norm->Bl.type) {
         case (LIST_column):          case LIST_column:
                 print_line(".TE", 0);                  print_line(".TE", 0);
                 break;                  break;
         case (LIST_enum):          case LIST_enum:
                 n->norm->Bl.count = 0;                  n->norm->Bl.count = 0;
                 break;                  break;
         default:          default:
Line 1151  pre_fo(DECL_ARGS)
Line 1152  pre_fo(DECL_ARGS)
 {  {
   
         switch (n->type) {          switch (n->type) {
         case (MDOC_BLOCK):          case MDOC_BLOCK:
                 pre_syn(n);                  pre_syn(n);
                 break;                  break;
         case (MDOC_HEAD):          case MDOC_HEAD:
                 if (MDOC_SYNPRETTY & n->flags)                  if (MDOC_SYNPRETTY & n->flags)
                         print_block(".HP 4n", MMAN_nl);                          print_block(".HP 4n", MMAN_nl);
                 font_push('B');                  font_push('B');
                 break;                  break;
         case (MDOC_BODY):          case MDOC_BODY:
                 outflags &= ~MMAN_spc;                  outflags &= ~MMAN_spc;
                 print_word("(");                  print_word("(");
                 outflags &= ~MMAN_spc;                  outflags &= ~MMAN_spc;
Line 1175  post_fo(DECL_ARGS)
Line 1176  post_fo(DECL_ARGS)
 {  {
   
         switch (n->type) {          switch (n->type) {
         case (MDOC_HEAD):          case MDOC_HEAD:
                 font_pop();                  font_pop();
                 break;                  break;
         case (MDOC_BODY):          case MDOC_BODY:
                 post_fn(meta, n);                  post_fn(meta, n);
                 break;                  break;
         default:          default:
Line 1234  pre_it(DECL_ARGS)
Line 1235  pre_it(DECL_ARGS)
         const struct mdoc_node *bln;          const struct mdoc_node *bln;
   
         switch (n->type) {          switch (n->type) {
         case (MDOC_HEAD):          case MDOC_HEAD:
                 outflags |= MMAN_PP | MMAN_nl;                  outflags |= MMAN_PP | MMAN_nl;
                 bln = n->parent->parent;                  bln = n->parent->parent;
                 if (0 == bln->norm->Bl.comp ||                  if (0 == bln->norm->Bl.comp ||
Line 1243  pre_it(DECL_ARGS)
Line 1244  pre_it(DECL_ARGS)
                         outflags |= MMAN_sp;                          outflags |= MMAN_sp;
                 outflags &= ~MMAN_br;                  outflags &= ~MMAN_br;
                 switch (bln->norm->Bl.type) {                  switch (bln->norm->Bl.type) {
                 case (LIST_item):                  case LIST_item:
                         return(0);                          return(0);
                 case (LIST_inset):                  case LIST_inset:
                         /* FALLTHROUGH */                          /* FALLTHROUGH */
                 case (LIST_diag):                  case LIST_diag:
                         /* FALLTHROUGH */                          /* FALLTHROUGH */
                 case (LIST_ohang):                  case LIST_ohang:
                         if (bln->norm->Bl.type == LIST_diag)                          if (bln->norm->Bl.type == LIST_diag)
                                 print_line(".B \"", 0);                                  print_line(".B \"", 0);
                         else                          else
                                 print_line(".R \"", 0);                                  print_line(".R \"", 0);
                         outflags &= ~MMAN_spc;                          outflags &= ~MMAN_spc;
                         return(1);                          return(1);
                 case (LIST_bullet):                  case LIST_bullet:
                         /* FALLTHROUGH */                          /* FALLTHROUGH */
                 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.width, NULL, 0);
                         TPremain = 0;                          TPremain = 0;
                         outflags |= MMAN_nl;                          outflags |= MMAN_nl;
Line 1271  pre_it(DECL_ARGS)
Line 1272  pre_it(DECL_ARGS)
                                 print_word("-");                                  print_word("-");
                         font_pop();                          font_pop();
                         break;                          break;
                 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;                          break;
                 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;                          break;
                 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');
                         outflags &= ~MMAN_spc;                          outflags &= ~MMAN_spc;
Line 1330  post_it(DECL_ARGS)
Line 1331  post_it(DECL_ARGS)
         bln = n->parent->parent;          bln = n->parent->parent;
   
         switch (n->type) {          switch (n->type) {
         case (MDOC_HEAD):          case MDOC_HEAD:
                 switch (bln->norm->Bl.type) {                  switch (bln->norm->Bl.type) {
                 case (LIST_diag):                  case LIST_diag:
                         outflags &= ~MMAN_spc;                          outflags &= ~MMAN_spc;
                         print_word("\\ ");                          print_word("\\ ");
                         break;                          break;
                 case (LIST_ohang):                  case LIST_ohang:
                         outflags |= MMAN_br;                          outflags |= MMAN_br;
                         break;                          break;
                 default:                  default:
                         break;                          break;
                 }                  }
                 break;                  break;
         case (MDOC_BODY):          case MDOC_BODY:
                 switch (bln->norm->Bl.type) {                  switch (bln->norm->Bl.type) {
                 case (LIST_bullet):                  case LIST_bullet:
                         /* FALLTHROUGH */                          /* FALLTHROUGH */
                 case (LIST_dash):                  case LIST_dash:
                         /* FALLTHROUGH */                          /* FALLTHROUGH */
                 case (LIST_hyphen):                  case LIST_hyphen:
                         /* FALLTHROUGH */                          /* FALLTHROUGH */
                 case (LIST_enum):                  case LIST_enum:
                         /* FALLTHROUGH */                          /* FALLTHROUGH */
                 case (LIST_hang):                  case LIST_hang:
                         /* FALLTHROUGH */                          /* FALLTHROUGH */
                 case (LIST_tag):                  case LIST_tag:
                         assert(Bl_stack_len);                          assert(Bl_stack_len);
                         Bl_stack[--Bl_stack_len] = 0;                          Bl_stack[--Bl_stack_len] = 0;
   
Line 1369  post_it(DECL_ARGS)
Line 1370  post_it(DECL_ARGS)
                                 Bl_stack_post[Bl_stack_len] = 0;                                  Bl_stack_post[Bl_stack_len] = 0;
                         }                          }
                         break;                          break;
                 case (LIST_column):                  case LIST_column:
                         if (NULL != n->next) {                          if (NULL != n->next) {
                                 putchar('\t');                                  putchar('\t');
                                 outflags &= ~MMAN_spc;                                  outflags &= ~MMAN_spc;
Line 1464  post_nm(DECL_ARGS)
Line 1465  post_nm(DECL_ARGS)
 {  {
   
         switch (n->type) {          switch (n->type) {
         case (MDOC_BLOCK):          case MDOC_BLOCK:
                 outflags &= ~MMAN_Bk;                  outflags &= ~MMAN_Bk;
                 break;                  break;
         case (MDOC_HEAD):          case MDOC_HEAD:
                 /* FALLTHROUGH */                  /* FALLTHROUGH */
         case (MDOC_ELEM):          case MDOC_ELEM:
                 font_pop();                  font_pop();
                 break;                  break;
         default:          default:
Line 1567  pre_vt(DECL_ARGS)
Line 1568  pre_vt(DECL_ARGS)
   
         if (MDOC_SYNPRETTY & n->flags) {          if (MDOC_SYNPRETTY & n->flags) {
                 switch (n->type) {                  switch (n->type) {
                 case (MDOC_BLOCK):                  case MDOC_BLOCK:
                         pre_syn(n);                          pre_syn(n);
                         return(1);                          return(1);
                 case (MDOC_BODY):                  case MDOC_BODY:
                         break;                          break;
                 default:                  default:
                         return(0);                          return(0);

Legend:
Removed from v.1.61  
changed lines
  Added in v.1.62

CVSweb