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

Diff for /docbook2mdoc/docbook2mdoc.c between version 1.34 and 1.38

version 1.34, 2014/04/30 09:37:26 version 1.38, 2014/04/30 12:54:26
Line 64  struct pattr {
Line 64  struct pattr {
 struct  pnode {  struct  pnode {
         enum nodeid      node; /* node type */          enum nodeid      node; /* node type */
         char            *b; /* binary data buffer */          char            *b; /* binary data buffer */
           char            *real; /* store for "b" */
         size_t           bsz; /* data buffer size */          size_t           bsz; /* data buffer size */
         struct pnode    *parent; /* parent (or NULL if top) */          struct pnode    *parent; /* parent (or NULL if top) */
         struct pnodeq    childq; /* queue of children */          struct pnodeq    childq; /* queue of children */
Line 111  static const struct node nodes[NODE__MAX] = {
Line 112  static const struct node nodes[NODE__MAX] = {
         { "group", NODE_IGNTEXT },          { "group", NODE_IGNTEXT },
         { "holder", NODE_IGNTEXT },          { "holder", NODE_IGNTEXT },
         { "info", NODE_IGNTEXT },          { "info", NODE_IGNTEXT },
           { "informaltable", NODE_IGNTEXT },
         { "itemizedlist", NODE_IGNTEXT },          { "itemizedlist", NODE_IGNTEXT },
         { "link", 0 },          { "link", 0 },
         { "listitem", NODE_IGNTEXT },          { "listitem", NODE_IGNTEXT },
Line 131  static const struct node nodes[NODE__MAX] = {
Line 133  static const struct node nodes[NODE__MAX] = {
         { "refentryinfo", NODE_IGNTEXT },          { "refentryinfo", NODE_IGNTEXT },
         { "refentrytitle", 0 },          { "refentrytitle", 0 },
         { "refmeta", NODE_IGNTEXT },          { "refmeta", NODE_IGNTEXT },
           { "refmetainfo", NODE_IGNTEXT },
         { "refmiscinfo", NODE_IGNTEXT },          { "refmiscinfo", NODE_IGNTEXT },
         { "refname", 0 },          { "refname", 0 },
         { "refnamediv", NODE_IGNTEXT },          { "refnamediv", NODE_IGNTEXT },
Line 167  static const struct node nodes[NODE__MAX] = {
Line 170  static const struct node nodes[NODE__MAX] = {
         { "year", NODE_IGNTEXT },          { "year", NODE_IGNTEXT },
 };  };
   
   static  int warn = 0;
   
 static void  static void
 pnode_print(struct parse *p, struct pnode *pn);  pnode_print(struct parse *p, struct pnode *pn);
   
Line 232  xml_char(void *arg, const XML_Char *p, int sz)
Line 237  xml_char(void *arg, const XML_Char *p, int sz)
         }          }
         memcpy(ps->cur->b + ps->cur->bsz, p, sz);          memcpy(ps->cur->b + ps->cur->bsz, p, sz);
         ps->cur->bsz += (size_t)sz;          ps->cur->bsz += (size_t)sz;
           ps->cur->real = ps->cur->b;
 }  }
   
 static void  static void
Line 269  xml_elem_start(void *arg, const XML_Char *name, const 
Line 275  xml_elem_start(void *arg, const XML_Char *name, const 
         struct pattr     *pattr;          struct pattr     *pattr;
         const XML_Char  **att;          const XML_Char  **att;
   
         if (ps->stop)          /* FIXME: find a better way to ditch other namespaces. */
           if (ps->stop || 0 == strcmp(name, "xi:include"))
                 return;                  return;
   
         /* Close out text node, if applicable... */          /* Close out text node, if applicable... */
Line 281  xml_elem_start(void *arg, const XML_Char *name, const 
Line 288  xml_elem_start(void *arg, const XML_Char *name, const 
                 ps->node = ps->cur->node;                  ps->node = ps->cur->node;
         }          }
   
   
         for (node = 0; node < NODE__MAX; node++)          for (node = 0; node < NODE__MAX; node++)
                 if (NULL == nodes[node].name)                  if (NULL == nodes[node].name)
                         continue;                          continue;
Line 341  xml_elem_start(void *arg, const XML_Char *name, const 
Line 349  xml_elem_start(void *arg, const XML_Char *name, const 
                         if (0 == strcmp(*att, attrkeys[key]))                          if (0 == strcmp(*att, attrkeys[key]))
                                 break;                                  break;
                 if (ATTRKEY__MAX == key) {                  if (ATTRKEY__MAX == key) {
                         fprintf(stderr, "%s:%zu:%zu: warning: "                          if (warn)
                                 "unknown attribute \"%s\"\n",                                  fprintf(stderr, "%s:%zu:%zu: warning: "
                                 ps->fname,                                          "unknown attribute \"%s\"\n",
                                 XML_GetCurrentLineNumber(ps->xml),                                          ps->fname,
                                 XML_GetCurrentColumnNumber(ps->xml),                                          XML_GetCurrentLineNumber(ps->xml),
                                 *att);                                          XML_GetCurrentColumnNumber(ps->xml),
                                           *att);
                         continue;                          continue;
                 } else if ( ! isattrkey(node, key)) {                  } else if ( ! isattrkey(node, key)) {
                         fprintf(stderr, "%s:%zu:%zu: warning: "                          if (warn)
                                 "bad attribute \"%s\"\n",                                  fprintf(stderr, "%s:%zu:%zu: warning: "
                                 ps->fname,                                          "bad attribute \"%s\"\n",
                                 XML_GetCurrentLineNumber(ps->xml),                                          ps->fname,
                                 XML_GetCurrentColumnNumber(ps->xml),                                          XML_GetCurrentLineNumber(ps->xml),
                                 *att);                                          XML_GetCurrentColumnNumber(ps->xml),
                                           *att);
                         continue;                          continue;
                 }                  }
                 for (val = 0; val < ATTRVAL__MAX; val++)                  for (val = 0; val < ATTRVAL__MAX; val++)
                         if (0 == strcmp(*(att + 1), attrvals[val]))                          if (0 == strcmp(*(att + 1), attrvals[val]))
                                 break;                                  break;
                 if (ATTRVAL__MAX != val && ! isattrval(key, val)) {                  if (ATTRVAL__MAX != val && ! isattrval(key, val)) {
                         fprintf(stderr, "%s:%zu:%zu: warning: "                          if (warn)
                                 "bad attribute value \"%s\"\n",                                  fprintf(stderr, "%s:%zu:%zu: warning: "
                                 ps->fname,                                          "bad attribute value \"%s\"\n",
                                 XML_GetCurrentLineNumber(ps->xml),                                          ps->fname,
                                 XML_GetCurrentColumnNumber(ps->xml),                                          XML_GetCurrentLineNumber(ps->xml),
                                 *(att + 1));                                          XML_GetCurrentColumnNumber(ps->xml),
                                           *(att + 1));
                         continue;                          continue;
                 }                  }
                 pattr = calloc(1, sizeof(struct pattr));                  pattr = calloc(1, sizeof(struct pattr));
Line 389  xml_elem_end(void *arg, const XML_Char *name)
Line 400  xml_elem_end(void *arg, const XML_Char *name)
 {  {
         struct parse    *ps = arg;          struct parse    *ps = arg;
   
           /* FIXME: find a better way to ditch other namespaces. */
         if (ps->stop || NODE_ROOT == ps->node)          if (ps->stop || NODE_ROOT == ps->node)
                 return;                  return;
           else if (0 == strcmp(name, "xi:include"))
                   return;
   
         /* Close out text node, if applicable... */          /* Close out text node, if applicable... */
         if (NODE_TEXT == ps->node) {          if (NODE_TEXT == ps->node) {
Line 430  pnode_free(struct pnode *pn)
Line 444  pnode_free(struct pnode *pn)
                 free(ap);                  free(ap);
         }          }
   
         free(pn->b);          free(pn->real);
         free(pn);          free(pn);
 }  }
   
Line 614  pnode_printmclose(struct parse *p, int sv)
Line 628  pnode_printmclose(struct parse *p, int sv)
 }  }
   
 /*  /*
    * Like pnode_printmclose() except we look to the next node, and, if
    * found, see if it starts with punctuation.
    * If it does, then we print that punctuation before the newline.
    */
   static void
   pnode_printmclosepunct(struct parse *p, struct pnode *pn, int sv)
   {
           /* We wouldn't have done anything anyway. */
           if ( ! (sv && ! p->newln))
                   return;
   
           /* No next node or it's not text. */
           if (NULL == (pn = TAILQ_NEXT(pn, child))) {
                   pnode_printmclose(p, sv);
                   return;
           } else if (NODE_TEXT != pn->node) {
                   pnode_printmclose(p, sv);
                   return;
           }
   
           /* Only do this for the comma/period. */
           if (pn->bsz > 0 &&
                   (',' == pn->b[0] || '.' == pn->b[0]) &&
                   (1 == pn->bsz || isspace((int)pn->b[1]))) {
                   putchar(' ');
                   putchar(pn->b[0]);
                   pn->b++;
                   pn->bsz--;
           }
   
           putchar('\n');
           p->newln = 1;
   }
   
   /*
  * If the SYNOPSIS macro has a superfluous title, kill it.   * If the SYNOPSIS macro has a superfluous title, kill it.
  */   */
 static void  static void
Line 1236  pnode_print(struct parse *p, struct pnode *pn)
Line 1285  pnode_print(struct parse *p, struct pnode *pn)
                 fputs("Vt", stdout);                  fputs("Vt", stdout);
                 break;                  break;
         case (NODE_TABLE):          case (NODE_TABLE):
                   /* FALLTHROUGH */
           case (NODE_INFORMALTABLE):
                 assert(p->newln);                  assert(p->newln);
                 pnode_printtable(p, pn);                  pnode_printtable(p, pn);
                 pnode_unlinksub(pn);                  pnode_unlinksub(pn);
Line 1243  pnode_print(struct parse *p, struct pnode *pn)
Line 1294  pnode_print(struct parse *p, struct pnode *pn)
         case (NODE_TEXT):          case (NODE_TEXT):
                 if (0 == p->newln)                  if (0 == p->newln)
                         putchar(' ');                          putchar(' ');
   
                 bufclear(p);                  bufclear(p);
                 bufappend(p, pn);                  bufappend(p, pn);
   
                   if (0 == p->bsz) {
                           assert(pn->real != pn->b);
                           break;
                   }
   
                 /*                  /*
                  * Output all characters, squeezing out whitespace                   * Output all characters, squeezing out whitespace
                  * between newlines.                   * between newlines.
Line 1253  pnode_print(struct parse *p, struct pnode *pn)
Line 1311  pnode_print(struct parse *p, struct pnode *pn)
                  */                   */
                 assert(p->bsz);                  assert(p->bsz);
                 cp = p->b;                  cp = p->b;
   
                 /*                  /*
                  * There's often a superfluous "-" in its <option> tags                   * There's often a superfluous "-" in its <option> tags
                  * before the actual flags themselves.                   * before the actual flags themselves.
Line 1325  pnode_print(struct parse *p, struct pnode *pn)
Line 1384  pnode_print(struct parse *p, struct pnode *pn)
         case (NODE_TEXT):          case (NODE_TEXT):
         case (NODE_USERINPUT):          case (NODE_USERINPUT):
         case (NODE_VARNAME):          case (NODE_VARNAME):
                 pnode_printmclose(p, sv);                  pnode_printmclosepunct(p, pn, sv);
                 break;                  break;
         case (NODE_QUOTE):          case (NODE_QUOTE):
                 pnode_printmclose(p, sv);                  pnode_printmclose(p, sv);
Line 1415  main(int argc, char *argv[])
Line 1474  main(int argc, char *argv[])
         XML_Parser       xp;          XML_Parser       xp;
         const char      *fname;          const char      *fname;
         char            *buf;          char            *buf;
         int              fd, rc;          int              fd, rc, ch;
           const char      *progname;
   
           progname = strrchr(argv[0], '/');
           if (progname == NULL)
                   progname = argv[0];
           else
                   ++progname;
   
         fname = "-";          fname = "-";
         xp = NULL;          xp = NULL;
         buf = NULL;          buf = NULL;
         rc = 0;          rc = 0;
   
         if (-1 != getopt(argc, argv, ""))          while (-1 != (ch = getopt(argc, argv, "W")))
                 return(EXIT_FAILURE);                  switch (ch) {
                   case ('W'):
                           warn = 1;
                           break;
                   default:
                           goto usage;
                   }
   
         argc -= optind;          argc -= optind;
         argv += optind;          argv += optind;
Line 1457  main(int argc, char *argv[])
Line 1529  main(int argc, char *argv[])
         if (STDIN_FILENO != fd)          if (STDIN_FILENO != fd)
                 close(fd);                  close(fd);
         return(rc ? EXIT_SUCCESS : EXIT_FAILURE);          return(rc ? EXIT_SUCCESS : EXIT_FAILURE);
   
   usage:
           fprintf(stderr, "usage: %s [-W]\n", progname);
           return(EXIT_FAILURE);
 }  }

Legend:
Removed from v.1.34  
changed lines
  Added in v.1.38

CVSweb