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

Diff for /mandoc/demandoc.c between version 1.15 and 1.32

version 1.15, 2015/02/10 08:05:30 version 1.32, 2018/12/30 00:49:54
Line 20 
Line 20 
   
 #include <assert.h>  #include <assert.h>
 #include <ctype.h>  #include <ctype.h>
 #include <getopt.h>  
 #include <stdio.h>  #include <stdio.h>
 #include <stdlib.h>  #include <stdlib.h>
 #include <string.h>  #include <string.h>
 #include <unistd.h>  #include <unistd.h>
   
   #include "mandoc.h"
   #include "roff.h"
 #include "man.h"  #include "man.h"
 #include "mdoc.h"  #include "mdoc.h"
 #include "mandoc.h"  #include "mandoc_parse.h"
   
 static  void     pline(int, int *, int *, int);  static  void     pline(int, int *, int *, int);
 static  void     pman(const struct man_node *, int *, int *, int);  static  void     pman(const struct roff_node *, int *, int *, int);
 static  void     pmandoc(struct mparse *, int, const char *, int);  static  void     pmandoc(struct mparse *, int, const char *, int);
 static  void     pmdoc(const struct mdoc_node *, int *, int *, int);  static  void     pmdoc(const struct roff_node *, int *, int *, int);
 static  void     pstring(const char *, int, int *, int);  static  void     pstring(const char *, int, int *, int);
 static  void     usage(void);  static  void     usage(void);
   
Line 43  int
Line 44  int
 main(int argc, char *argv[])  main(int argc, char *argv[])
 {  {
         struct mparse   *mp;          struct mparse   *mp;
         struct mchars   *mchars;  
         int              ch, fd, i, list;          int              ch, fd, i, list;
         extern int       optind;          extern int       optind;
   
Line 72  main(int argc, char *argv[])
Line 72  main(int argc, char *argv[])
                         break;                          break;
                 default:                  default:
                         usage();                          usage();
                         return((int)MANDOCLEVEL_BADARG);                          return (int)MANDOCLEVEL_BADARG;
                 }                  }
   
         argc -= optind;          argc -= optind;
         argv += optind;          argv += optind;
   
         mchars = mchars_alloc();          mchars_alloc();
         mp = mparse_alloc(MPARSE_SO, MANDOCLEVEL_BADARG, NULL, mchars, NULL);          mp = mparse_alloc(MPARSE_SO | MPARSE_VALIDATE, MANDOC_OS_OTHER, NULL);
         assert(mp);          assert(mp);
   
         if (argc < 1)          if (argc < 1)
Line 87  main(int argc, char *argv[])
Line 87  main(int argc, char *argv[])
   
         for (i = 0; i < argc; i++) {          for (i = 0; i < argc; i++) {
                 mparse_reset(mp);                  mparse_reset(mp);
                 if (mparse_open(mp, &fd, argv[i]) != MANDOCLEVEL_OK) {                  if ((fd = mparse_open(mp, argv[i])) == -1) {
                         perror(argv[i]);                          perror(argv[i]);
                         continue;                          continue;
                 }                  }
Line 95  main(int argc, char *argv[])
Line 95  main(int argc, char *argv[])
         }          }
   
         mparse_free(mp);          mparse_free(mp);
         mchars_free(mchars);          mchars_free();
         return((int)MANDOCLEVEL_OK);          return (int)MANDOCLEVEL_OK;
 }  }
   
 static void  static void
Line 109  usage(void)
Line 109  usage(void)
 static void  static void
 pmandoc(struct mparse *mp, int fd, const char *fn, int list)  pmandoc(struct mparse *mp, int fd, const char *fn, int list)
 {  {
         struct mdoc     *mdoc;          struct roff_meta        *meta;
         struct man      *man;  
         int              line, col;          int              line, col;
   
         mparse_readfd(mp, fd, fn);          mparse_readfd(mp, fd, fn);
         mparse_result(mp, &mdoc, &man, NULL);          close(fd);
           meta = mparse_result(mp);
         line = 1;          line = 1;
         col = 0;          col = 0;
   
         if (mdoc)          if (meta->macroset == MACROSET_MDOC)
                 pmdoc(mdoc_node(mdoc), &line, &col, list);                  pmdoc(meta->first->child, &line, &col, list);
         else if (man)  
                 pman(man_node(man), &line, &col, list);  
         else          else
                 return;                  pman(meta->first->child, &line, &col, list);
   
         if ( ! list)          if ( ! list)
                 putchar('\n');                  putchar('\n');
Line 233  pline(int line, int *linep, int *col, int list)
Line 231  pline(int line, int *linep, int *col, int list)
 }  }
   
 static void  static void
 pmdoc(const struct mdoc_node *p, int *line, int *col, int list)  pmdoc(const struct roff_node *p, int *line, int *col, int list)
 {  {
   
         for ( ; p; p = p->next) {          for ( ; p; p = p->next) {
                 if (MDOC_LINE & p->flags)                  if (NODE_LINE & p->flags)
                         pline(p->line, line, col, list);                          pline(p->line, line, col, list);
                 if (MDOC_TEXT == p->type)                  if (ROFFT_TEXT == p->type)
                         pstring(p->string, p->pos, col, list);                          pstring(p->string, p->pos, col, list);
                 if (p->child)                  if (p->child)
                         pmdoc(p->child, line, col, list);                          pmdoc(p->child, line, col, list);
Line 247  pmdoc(const struct mdoc_node *p, int *line, int *col, 
Line 245  pmdoc(const struct mdoc_node *p, int *line, int *col, 
 }  }
   
 static void  static void
 pman(const struct man_node *p, int *line, int *col, int list)  pman(const struct roff_node *p, int *line, int *col, int list)
 {  {
   
         for ( ; p; p = p->next) {          for ( ; p; p = p->next) {
                 if (MAN_LINE & p->flags)                  if (NODE_LINE & p->flags)
                         pline(p->line, line, col, list);                          pline(p->line, line, col, list);
                 if (MAN_TEXT == p->type)                  if (ROFFT_TEXT == p->type)
                         pstring(p->string, p->pos, col, list);                          pstring(p->string, p->pos, col, list);
                 if (p->child)                  if (p->child)
                         pman(p->child, line, col, list);                          pman(p->child, line, col, list);

Legend:
Removed from v.1.15  
changed lines
  Added in v.1.32

CVSweb