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

Diff for /mandoc/Attic/mdoctree.c between version 1.2 and 1.3

version 1.2, 2009/02/22 22:58:39 version 1.3, 2009/02/23 07:09:13
Line 19 
Line 19 
 #include <assert.h>  #include <assert.h>
 #include <err.h>  #include <err.h>
 #include <getopt.h>  #include <getopt.h>
   #include <stdio.h>
 #include <stdlib.h>  #include <stdlib.h>
   
 #include "mmain.h"  #include "mmain.h"
   
 extern  void    treeprint(const struct mdoc_node *,  #define xprintf (void)printf
                         const struct mdoc_meta *);  
   
   static  void    doprint(const struct mdoc_node *, int);
   
 int  int
 main(int argc, char *argv[])  main(int argc, char *argv[])
 {  {
         struct mmain    *p;          struct mmain    *p;
         const struct mdoc *mdoc;          const struct mdoc *mdoc;
         int              c;  
   
         extern int       optreset;          extern int       optreset;
         extern int       optind;          extern int       optind;
   
         p = mmain_alloc();          p = mmain_alloc();
   
         if ( ! mmain_getopt(p, argc, argv, NULL))          if ( ! mmain_getopt(p, argc, argv, NULL, NULL, NULL, NULL))
                 mmain_exit(p, 1);                  mmain_exit(p, 1);
   
         optreset = optind = 1;  
         printf("here\n");  
   
         while (-1 != (c = getopt(argc, argv, "f:")))  
                 switch (c) {  
                 case ('f'):  
                         printf("%s\n", optarg);  
                         break;  
                 case ('?'):  
                         if (mmain_isopt(optopt)) {  
                                 printf("ok: %d\n", optopt);  
                                 break;  
                         }  
                         printf("bad: %d\n", optopt);  
                         /* FALLTHROUGH */  
                 default:  
                         mmain_usage(NULL);  
                         mmain_exit(p, 1);  
                         /* NOTREACHED */  
                 }  
   
         if (NULL == (mdoc = mmain_mdoc(p)))          if (NULL == (mdoc = mmain_mdoc(p)))
                 mmain_exit(p, 1);                  mmain_exit(p, 1);
   
         treeprint(mdoc_node(mdoc), mdoc_meta(mdoc));          doprint(mdoc_node(mdoc), 0);
         mmain_exit(p, 0);          mmain_exit(p, 0);
         /* NOTREACHED */          /* NOTREACHED */
 }  }
   
   
   static void
   doprint(const struct mdoc_node *n, int indent)
   {
           const char       *p, *t;
           int               i, j;
           size_t            argc, sz;
           char            **params;
           struct mdoc_arg  *argv;
   
           argv = NULL;
           argc = sz = 0;
           params = NULL;
   
           switch (n->type) {
           case (MDOC_ROOT):
                   t = "root";
                   break;
           case (MDOC_BLOCK):
                   t = "block";
                   break;
           case (MDOC_HEAD):
                   t = "block-head";
                   break;
           case (MDOC_BODY):
                   t = "block-body";
                   break;
           case (MDOC_TAIL):
                   t = "block-tail";
                   break;
           case (MDOC_ELEM):
                   t = "elem";
                   break;
           case (MDOC_TEXT):
                   t = "text";
                   break;
           default:
                   abort();
                   /* NOTREACHED */
           }
   
           switch (n->type) {
           case (MDOC_TEXT):
                   p = n->data.text.string;
                   break;
           case (MDOC_BODY):
                   p = mdoc_macronames[n->tok];
                   break;
           case (MDOC_HEAD):
                   p = mdoc_macronames[n->tok];
                   break;
           case (MDOC_TAIL):
                   p = mdoc_macronames[n->tok];
                   break;
           case (MDOC_ELEM):
                   p = mdoc_macronames[n->tok];
                   argv = n->data.elem.argv;
                   argc = n->data.elem.argc;
                   break;
           case (MDOC_BLOCK):
                   p = mdoc_macronames[n->tok];
                   argv = n->data.block.argv;
                   argc = n->data.block.argc;
                   break;
           case (MDOC_ROOT):
                   p = "root";
                   break;
           default:
                   abort();
                   /* NOTREACHED */
           }
   
           for (i = 0; i < indent; i++)
                   xprintf("    ");
           xprintf("%s (%s)", p, t);
   
           for (i = 0; i < (int)argc; i++) {
                   xprintf(" -%s", mdoc_argnames[argv[i].arg]);
                   if (argv[i].sz > 0)
                           xprintf(" [");
                   for (j = 0; j < (int)argv[i].sz; j++)
                           xprintf(" [%s]", argv[i].value[j]);
                   if (argv[i].sz > 0)
                           xprintf(" ]");
           }
   
           for (i = 0; i < (int)sz; i++)
                   xprintf(" [%s]", params[i]);
   
           xprintf(" %d:%d\n", n->line, n->pos);
   
           if (n->child)
                   doprint(n->child, indent + 1);
           if (n->next)
                   doprint(n->next, indent);
   }

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

CVSweb