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

Diff for /docbook2mdoc/docbook2mdoc.c between version 1.142 and 1.143

version 1.142, 2019/04/28 19:05:11 version 1.143, 2019/04/28 19:59:01
Line 31 
Line 31 
  */   */
   
 static void      pnode_print(struct format *, struct pnode *);  static void      pnode_print(struct format *, struct pnode *);
 static void      pnode_printrefentry(struct format *, struct pnode *);  
   
   
 static void  static void
Line 196  pnode_printsection(struct format *f, struct pnode *n)
Line 195  pnode_printsection(struct format *f, struct pnode *n)
         struct pnode    *nc, *ncc;          struct pnode    *nc, *ncc;
         int              flags, level;          int              flags, level;
   
         if (n->parent == NULL) {          if (n->parent == NULL)
                 pnode_printrefentry(f, n);  
                 return;                  return;
         }  
   
         level = ++f->level;          level = ++f->level;
         flags = ARG_SPACE;          flags = ARG_SPACE;
Line 726  pnode_printprologue(struct format *f, struct pnode *ro
Line 723  pnode_printprologue(struct format *f, struct pnode *ro
         f->parastate = PARA_HAVE;          f->parastate = PARA_HAVE;
 }  }
   
 static void  
 pnode_printrefentry(struct format *f, struct pnode *n)  
 {  
         struct pnode    *info, *meta, *nc, *title;  
         struct pnode    *match, *later;  
   
         /* Collect nodes that remained behind when writing the prologue. */  
   
         meta = NULL;  
         info = pnode_takefirst(n, NODE_BOOKINFO);  
         if (info != NULL && TAILQ_FIRST(&info->childq) == NULL) {  
                 pnode_unlink(info);  
                 info = NULL;  
         }  
         if (info == NULL) {  
                 info = pnode_takefirst(n, NODE_REFENTRYINFO);  
                 if (info != NULL && TAILQ_FIRST(&info->childq) == NULL) {  
                         pnode_unlink(info);  
                         info = NULL;  
                 }  
                 if (info == NULL)  
                         info = pnode_takefirst(n, NODE_INFO);  
                 meta = pnode_takefirst(n, NODE_REFMETA);  
                 if (meta != NULL && TAILQ_FIRST(&meta->childq) == NULL) {  
                         pnode_unlink(meta);  
                         meta = NULL;  
                 }  
         }  
         if (info == NULL && meta == NULL)  
                 return;  
   
         /*  
          * Find the best place to put this information.  
          * Use the last existing AUTHORS node, if any.  
          * Otherwise, put it behind all standard sections that  
          * conventionally precede AUTHORS, and also behind any  
          * non-standard sections that follow the last of these,  
          * but before the next standard section.  
          */  
   
         match = later = NULL;  
         TAILQ_FOREACH(nc, &n->childq, child) {  
                 switch (nc->node) {  
                 case NODE_REFENTRY:  
                 case NODE_REFNAMEDIV:  
                 case NODE_REFSYNOPSISDIV:  
                         later = NULL;  
                         continue;  
                 case NODE_APPENDIX:  
                 case NODE_INDEX:  
                         if (later == NULL)  
                                 later = nc;  
                         continue;  
                 default:  
                         break;  
                 }  
                 if ((title = pnode_findfirst(nc, NODE_TITLE)) == NULL ||  
                     (title = TAILQ_FIRST(&title->childq)) == NULL ||  
                     title->node != NODE_TEXT)  
                         continue;  
                 if (strcasecmp(title->b, "AUTHORS") == 0 ||  
                     strcasecmp(title->b, "AUTHOR") == 0)  
                         match = nc;  
                 else if (strcasecmp(title->b, "NAME") == 0 ||  
                     strcasecmp(title->b, "SYNOPSIS") == 0 ||  
                     strcasecmp(title->b, "DESCRIPTION") == 0 ||  
                     strcasecmp(title->b, "RETURN VALUES") == 0 ||  
                     strcasecmp(title->b, "ENVIRONMENT") == 0 ||  
                     strcasecmp(title->b, "FILES") == 0 ||  
                     strcasecmp(title->b, "EXIT STATUS") == 0 ||  
                     strcasecmp(title->b, "EXAMPLES") == 0 ||  
                     strcasecmp(title->b, "DIAGNOSTICS") == 0 ||  
                     strcasecmp(title->b, "ERRORS") == 0 ||  
                     strcasecmp(title->b, "SEE ALSO") == 0 ||  
                     strcasecmp(title->b, "STANDARDS") == 0 ||  
                     strcasecmp(title->b, "HISTORY") == 0)  
                         later = NULL;  
                 else if ((strcasecmp(title->b, "CAVEATS") == 0 ||  
                     strcasecmp(title->b, "BUGS") == 0) &&  
                     later == NULL)  
                         later = nc;  
         }  
   
         /*  
          * If no AUTHORS section was found, create one from scratch,  
          * and insert that at the place selected earlier.  
          */  
   
         if (match == NULL) {  
                 match = xcalloc(1, sizeof(*match));  
                 match->node = NODE_SECTION;  
                 match->flags |= NFLAG_SPC;  
                 match->parent = n;  
                 TAILQ_INIT(&match->childq);  
                 TAILQ_INIT(&match->attrq);  
                 nc = pnode_alloc(match);  
                 nc->node = NODE_TITLE;  
                 nc->flags |= NFLAG_SPC;  
                 nc = pnode_alloc_text(nc, "AUTHORS");  
                 nc->flags |= NFLAG_SPC;  
                 if (later == NULL)  
                         TAILQ_INSERT_TAIL(&n->childq, match, child);  
                 else  
                         TAILQ_INSERT_BEFORE(later, match, child);  
         }  
   
         /*  
          * Dump the stuff excised at the beginning  
          * into this AUTHORS section.  
          */  
   
         if (info != NULL)  
                 TAILQ_INSERT_TAIL(&match->childq, info, child);  
         if (meta != NULL)  
                 TAILQ_INSERT_TAIL(&match->childq, meta, child);  
 }  
   
 /*  /*
  * We can have multiple <term> elements within a <varlistentry>, which   * We can have multiple <term> elements within a <varlistentry>, which
  * we should comma-separate as list headers.   * we should comma-separate as list headers.
Line 1226  pnode_print(struct format *f, struct pnode *n)
Line 1106  pnode_print(struct format *f, struct pnode *n)
         case NODE_SYSTEMITEM:          case NODE_SYSTEMITEM:
                 pnode_printsystemitem(f, n);                  pnode_printsystemitem(f, n);
                 break;                  break;
         case NODE_REFENTRY:  
                 pnode_printrefentry(f, n);  
                 break;  
         case NODE_REFNAME:          case NODE_REFNAME:
                 /* More often, these appear inside NODE_REFNAMEDIV. */                  /* More often, these appear inside NODE_REFNAMEDIV. */
                 macro_open(f, "Nm");                  macro_open(f, "Nm");
Line 1391  pnode_print(struct format *f, struct pnode *n)
Line 1268  pnode_print(struct format *f, struct pnode *n)
         case NODE_SIMPLESECT:          case NODE_SIMPLESECT:
         case NODE_APPENDIX:          case NODE_APPENDIX:
         case NODE_NOTE:          case NODE_NOTE:
                 f->level--;                  if (n->parent != NULL)
                           f->level--;
                 break;                  break;
         case NODE_BLOCKQUOTE:          case NODE_BLOCKQUOTE:
         case NODE_LITERALLAYOUT:          case NODE_LITERALLAYOUT:

Legend:
Removed from v.1.142  
changed lines
  Added in v.1.143

CVSweb