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

Diff for /docbook2mdoc/docbook2mdoc.c between version 1.102 and 1.103

version 1.102, 2019/04/10 14:37:32 version 1.103, 2019/04/11 04:23:22
Line 19 
Line 19 
 #include <ctype.h>  #include <ctype.h>
 #include <stdio.h>  #include <stdio.h>
 #include <stdlib.h>  #include <stdlib.h>
   #include <string.h>
   
 #include "node.h"  #include "node.h"
 #include "macro.h"  #include "macro.h"
Line 36  pnode_printtext(struct format *f, struct pnode *n)
Line 37  pnode_printtext(struct format *f, struct pnode *n)
 {  {
         struct pnode    *nn;          struct pnode    *nn;
         char            *cp;          char            *cp;
           int              accept_arg;
         char             last;          char             last;
   
         if (n->bsz == 0) {          cp = n->b;
                 assert(n->real < n->b);          accept_arg = f->flags & FMT_ARG;
                 return;          if (f->linestate == LINE_MACRO && n->spc == 0 && !accept_arg) {
                   for (;;) {
                           if (*cp == '\0')
                                   return;
                           if (strchr("!),.:;?]", *cp) == NULL)
                                   break;
                           printf(" %c", *cp++);
                   }
                   if (isspace((unsigned char)*cp)) {
                           while (isspace((unsigned char)*cp))
                                   cp++;
                           macro_close(f);
                   } else {
                           fputs(" Ns", stdout);
                           f->flags &= FMT_IMPL;
                           accept_arg = 1;
                   }
         }          }
           if (f->linestate == LINE_MACRO && !accept_arg &&
               (f->flags & (FMT_CHILD | FMT_IMPL)) == 0)
                   macro_close(f);
   
         /*          /*
          * Text preceding a macro without intervening whitespace           * Text preceding a macro without intervening whitespace
Line 53  pnode_printtext(struct format *f, struct pnode *n)
Line 74  pnode_printtext(struct format *f, struct pnode *n)
             (nn = TAILQ_NEXT(n, child)) != NULL && nn->spc == 0 &&              (nn = TAILQ_NEXT(n, child)) != NULL && nn->spc == 0 &&
             (nn->node != NODE_TEXT && nn->node != NODE_ESCAPE)) {              (nn->node != NODE_TEXT && nn->node != NODE_ESCAPE)) {
                 macro_open(f, "Pf");                  macro_open(f, "Pf");
                   accept_arg = 1;
                   f->flags |= FMT_CHILD;
                 nn->spc = 1;                  nn->spc = 1;
         }          }
   
         if (f->linestate == LINE_NEW) {          switch (f->linestate) {
                 last = '\n';          case LINE_TEXT:
                 f->linestate = LINE_TEXT;                  if (n->spc)
         } else {                          putchar(' ');
                 last = ' ';                  last = ' ';
                 if (n->spc || f->linestate == LINE_MACRO)                  break;
           case LINE_MACRO:
                   if (accept_arg) {
                         putchar(' ');                          putchar(' ');
                           last = ' ';
                           break;
                   }
                   macro_close(f);
                   /* FALLTHROUGH */
           case LINE_NEW:
                   f->linestate = LINE_TEXT;
                   last = '\n';
                   break;
         }          }
   
         if (n->node == NODE_ESCAPE) {          if (n->node == NODE_ESCAPE) {
Line 75  pnode_printtext(struct format *f, struct pnode *n)
Line 109  pnode_printtext(struct format *f, struct pnode *n)
          * because the arguments of .Fl macros do not need it.           * because the arguments of .Fl macros do not need it.
          */           */
   
         cp = n->b;  
         if (n->parent != NULL && n->parent->node == NODE_OPTION && *cp == '-')          if (n->parent != NULL && n->parent->node == NODE_OPTION && *cp == '-')
                 cp++;                  cp++;
   
Line 109  pnode_printpara(struct format *f, struct pnode *n)
Line 142  pnode_printpara(struct format *f, struct pnode *n)
         if ((np = TAILQ_PREV(n, pnodeq, child)) == NULL)          if ((np = TAILQ_PREV(n, pnodeq, child)) == NULL)
             np = n->parent;              np = n->parent;
   
           f->flags = 0;
   
         switch (np->node) {          switch (np->node) {
         case NODE_ENTRY:          case NODE_ENTRY:
         case NODE_GLOSSTERM:          case NODE_GLOSSTERM:
Line 387  pnode_printarg(struct format *f, struct pnode *n)
Line 422  pnode_printarg(struct format *f, struct pnode *n)
 {  {
         struct pnode    *nc;          struct pnode    *nc;
         struct pattr    *a;          struct pattr    *a;
         int              isop, isrep;          int              isop, isrep, was_impl;
   
         isop = 1;          isop = 1;
         isrep = 0;          isrep = was_impl = 0;
         TAILQ_FOREACH(a, &n->attrq, child) {          TAILQ_FOREACH(a, &n->attrq, child) {
                 if (a->key == ATTRKEY_CHOICE &&                  if (a->key == ATTRKEY_CHOICE &&
                     (a->val == ATTRVAL_PLAIN || a->val == ATTRVAL_REQ))                      (a->val == ATTRVAL_PLAIN || a->val == ATTRVAL_REQ))
Line 398  pnode_printarg(struct format *f, struct pnode *n)
Line 433  pnode_printarg(struct format *f, struct pnode *n)
                 else if (a->key == ATTRKEY_REP && a->val == ATTRVAL_REPEAT)                  else if (a->key == ATTRKEY_REP && a->val == ATTRVAL_REPEAT)
                         isrep = 1;                          isrep = 1;
         }          }
         if (isop)          if (isop) {
                 macro_open(f, "Op");                  if (f->flags & FMT_IMPL) {
                           was_impl = 1;
                           macro_open(f, "Oo");
                   } else {
                           macro_open(f, "Op");
                           f->flags |= FMT_IMPL;
                   }
           }
   
         TAILQ_FOREACH(nc, &n->childq, child) {          TAILQ_FOREACH(nc, &n->childq, child) {
                 if (nc->node == NODE_TEXT)                  if (nc->node == NODE_TEXT)
Line 408  pnode_printarg(struct format *f, struct pnode *n)
Line 450  pnode_printarg(struct format *f, struct pnode *n)
                 if (isrep && nc->node == NODE_TEXT)                  if (isrep && nc->node == NODE_TEXT)
                         macro_addarg(f, "...", ARG_SPACE);                          macro_addarg(f, "...", ARG_SPACE);
         }          }
           if (isop) {
                   if (was_impl)
                           macro_open(f, "Oc");
                   else
                           f->flags &= ~FMT_IMPL;
           }
         pnode_unlinksub(n);          pnode_unlinksub(n);
 }  }
   
Line 436  pnode_printgroup(struct format *f, struct pnode *n)
Line 484  pnode_printgroup(struct format *f, struct pnode *n)
                 macro_open(f, "Op");                  macro_open(f, "Op");
         else if (sv)          else if (sv)
                 macro_open(f, "No");                  macro_open(f, "No");
           f->flags |= FMT_IMPL;
   
         /*          /*
          * Keep on printing text separated by the vertical bar as long           * Keep on printing text separated by the vertical bar as long
Line 459  pnode_printgroup(struct format *f, struct pnode *n)
Line 508  pnode_printgroup(struct format *f, struct pnode *n)
         }          }
         if (sv)          if (sv)
                 macro_close(f);                  macro_close(f);
           f->flags &= ~FMT_IMPL;
         pnode_unlinksub(n);          pnode_unlinksub(n);
 }  }
   
Line 516  pnode_printauthor(struct format *f, struct pnode *n)
Line 566  pnode_printauthor(struct format *f, struct pnode *n)
          */           */
   
         if ((nc = pnode_findfirst(n, NODE_EMAIL)) != NULL) {          if ((nc = pnode_findfirst(n, NODE_EMAIL)) != NULL) {
                   f->flags |= FMT_CHILD;
                 pnode_print(f, nc);                  pnode_print(f, nc);
                 pnode_unlink(nc);                  pnode_unlink(nc);
         }          }
Line 547  pnode_printlink(struct format *f, struct pnode *n)
Line 598  pnode_printlink(struct format *f, struct pnode *n)
                         if (text != NULL)                          if (text != NULL)
                                 print_text(f, text, ARG_SPACE);                                  print_text(f, text, ARG_SPACE);
                 }                  }
                 if (text != NULL)                  if (text != NULL) {
                         macro_open(f, "Pq");                          macro_open(f, "Pq");
                           f->flags |= FMT_CHILD;
                   }
                 macro_open(f, "Sx");                  macro_open(f, "Sx");
                 macro_addarg(f, uri, ARG_SPACE);                  macro_addarg(f, uri, ARG_SPACE);
                 pnode_unlinksub(n);                  pnode_unlinksub(n);
Line 606  pnode_printvarlistentry(struct format *f, struct pnode
Line 659  pnode_printvarlistentry(struct format *f, struct pnode
   
         macro_close(f);          macro_close(f);
         macro_open(f, "It");          macro_open(f, "It");
           f->flags |= FMT_IMPL;
         TAILQ_FOREACH(nc, &n->childq, child) {          TAILQ_FOREACH(nc, &n->childq, child) {
                 if (nc->node != NODE_TERM && nc->node != NODE_GLOSSTERM)                  if (nc->node != NODE_TERM && nc->node != NODE_GLOSSTERM)
                         continue;                          continue;
Line 673  pnode_printtgroup2(struct format *f, struct pnode *n)
Line 727  pnode_printtgroup2(struct format *f, struct pnode *n)
         while ((nr = pnode_findfirst(n, NODE_ROW)) != NULL) {          while ((nr = pnode_findfirst(n, NODE_ROW)) != NULL) {
                 if ((ne = pnode_findfirst(n, NODE_ENTRY)) == NULL)                  if ((ne = pnode_findfirst(n, NODE_ENTRY)) == NULL)
                         break;                          break;
                 macro_close(f);  
                 macro_open(f, "It");                  macro_open(f, "It");
                   f->flags |= FMT_IMPL;
                 pnode_print(f, ne);                  pnode_print(f, ne);
                 macro_close(f);                  macro_close(f);
                 pnode_unlink(ne);                  pnode_unlink(ne);
Line 758  pnode_print(struct format *f, struct pnode *n)
Line 812  pnode_print(struct format *f, struct pnode *n)
         if (n == NULL)          if (n == NULL)
                 return;                  return;
   
         f->spc = n->spc;  
         sv = f->linestate;          sv = f->linestate;
           if (n->spc)
                   f->flags &= ~FMT_NOSPC;
           else
                   f->flags |= FMT_NOSPC;
   
         switch (n->node) {          switch (n->node) {
         case NODE_APPLICATION:          case NODE_APPLICATION:
Line 961  pnode_print(struct format *f, struct pnode *n)
Line 1018  pnode_print(struct format *f, struct pnode *n)
                 pnode_print(f, nc);                  pnode_print(f, nc);
   
         switch (n->node) {          switch (n->node) {
           case NODE_ESCAPE:
           case NODE_TERM:
           case NODE_TEXT:
                   /* Accept more arguments to the previous macro. */
                   return;
         case NODE_INFORMALEQUATION:          case NODE_INFORMALEQUATION:
                 macro_line(f, "EN");                  macro_line(f, "EN");
                 break;                  break;
Line 994  pnode_print(struct format *f, struct pnode *n)
Line 1056  pnode_print(struct format *f, struct pnode *n)
                         break;                          break;
                 fputs(" } ", stdout);                  fputs(" } ", stdout);
                 break;                  break;
         case NODE_APPLICATION:  
         case NODE_ARG:  
         case NODE_AUTHOR:  
         case NODE_CITEREFENTRY:  
         case NODE_CITETITLE:  
         case NODE_COMMAND:  
         case NODE_CONSTANT:  
         case NODE_EDITOR:  
         case NODE_EMAIL:  
         case NODE_EMPHASIS:  
         case NODE_ENVAR:  
         case NODE_ERRORNAME:  
         case NODE_FILENAME:  
         case NODE_FIRSTTERM:  
         case NODE_FUNCTION:  
         case NODE_FUNCSYNOPSISINFO:  
         case NODE_KEYSYM:  
         case NODE_LINK:  
         case NODE_LITERAL:  
         case NODE_OPTION:  
         case NODE_PARAMETER:  
         case NODE_REPLACEABLE:  
         case NODE_REFPURPOSE:  
         case NODE_SGMLTAG:  
         case NODE_TYPE:  
         case NODE_VARNAME:  
                 if (sv != LINE_MACRO && f->linestate == LINE_MACRO &&  
                     (n->parent == NULL || n->parent->node != NODE_MEMBER))  
                         macro_closepunct(f, n);  
                 break;  
         case NODE_QUOTE:          case NODE_QUOTE:
                 if (sv == LINE_NEW)                  if (sv == LINE_NEW)
                         macro_close(f);                          macro_close(f);
Line 1071  pnode_print(struct format *f, struct pnode *n)
Line 1103  pnode_print(struct format *f, struct pnode *n)
         default:          default:
                 break;                  break;
         }          }
           f->flags &= ~FMT_ARG;
 }  }
   
 void  void

Legend:
Removed from v.1.102  
changed lines
  Added in v.1.103

CVSweb