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

Diff for /mandoc/demandoc.c between version 1.13 and 1.18

version 1.13, 2015/01/15 04:26:39 version 1.18, 2015/04/18 16:06:39
Line 26 
Line 26 
 #include <string.h>  #include <string.h>
 #include <unistd.h>  #include <unistd.h>
   
   #include "roff.h"
 #include "man.h"  #include "man.h"
 #include "mdoc.h"  #include "mdoc.h"
 #include "mandoc.h"  #include "mandoc.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 47  main(int argc, char *argv[])
Line 48  main(int argc, char *argv[])
         int              ch, fd, i, list;          int              ch, fd, i, list;
         extern int       optind;          extern int       optind;
   
         progname = strrchr(argv[0], '/');          if (argc < 1)
         if (progname == NULL)                  progname = "demandoc";
           else if ((progname = strrchr(argv[0], '/')) == NULL)
                 progname = argv[0];                  progname = argv[0];
         else          else
                 ++progname;                  ++progname;
Line 81  main(int argc, char *argv[])
Line 83  main(int argc, char *argv[])
         mp = mparse_alloc(MPARSE_SO, MANDOCLEVEL_BADARG, NULL, mchars, NULL);          mp = mparse_alloc(MPARSE_SO, MANDOCLEVEL_BADARG, NULL, mchars, NULL);
         assert(mp);          assert(mp);
   
         if (0 == argc)          if (argc < 1)
                 pmandoc(mp, STDIN_FILENO, "<stdin>", list);                  pmandoc(mp, STDIN_FILENO, "<stdin>", list);
   
         for (i = 0; i < argc; i++) {          for (i = 0; i < argc; i++) {
Line 108  usage(void)
Line 110  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_man *mdoc;
         struct man      *man;          struct roff_man *man;
         int              line, col;          int              line, col;
   
         mparse_readfd(mp, fd, fn);          mparse_readfd(mp, fd, fn);
Line 117  pmandoc(struct mparse *mp, int fd, const char *fn, int
Line 119  pmandoc(struct mparse *mp, int fd, const char *fn, int
         line = 1;          line = 1;
         col = 0;          col = 0;
   
         if (mdoc)          if (mdoc)
                 pmdoc(mdoc_node(mdoc), &line, &col, list);                  pmdoc(mdoc_node(mdoc), &line, &col, list);
         else if (man)          else if (man)
                 pman(man_node(man), &line, &col, list);                  pman(man_node(man), &line, &col, list);
Line 167  again:
Line 169  again:
                 end = p - 1;                  end = p - 1;
   
                 while (end > start)                  while (end > start)
                         if ('.' == *end || ',' == *end ||                          if ('.' == *end || ',' == *end ||
                                         '\'' == *end || '"' == *end ||                                          '\'' == *end || '"' == *end ||
                                         ')' == *end || '!' == *end ||                                          ')' == *end || '!' == *end ||
                                         '?' == *end || ':' == *end ||                                          '?' == *end || ':' == *end ||
Line 199  again:
Line 201  again:
         /*          /*
          * Print the input word, skipping any special characters.           * Print the input word, skipping any special characters.
          */           */
         while ('\0' != *p)          while ('\0' != *p)
                 if ('\\' == *p) {                  if ('\\' == *p) {
                         p++;                          p++;
                         esc = mandoc_escape(&p, NULL, NULL);                          esc = mandoc_escape(&p, NULL, NULL);
Line 220  pline(int line, int *linep, int *col, int list)
Line 222  pline(int line, int *linep, int *col, int list)
   
         /*          /*
          * Print out as many lines as needed to reach parity with the           * Print out as many lines as needed to reach parity with the
          * original input.           * original input.
          */           */
   
         while (*linep < line) {          while (*linep < line) {
Line 232  pline(int line, int *linep, int *col, int list)
Line 234  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 (MDOC_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);
         }          }
 }  }
   
 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 (MAN_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.13  
changed lines
  Added in v.1.18

CVSweb