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

Diff for /mandoc/Attic/mdocml.c between version 1.8 and 1.20

version 1.8, 2008/11/23 22:30:53 version 1.20, 2008/12/10 14:42:46
Line 30 
Line 30 
   
 #include "libmdocml.h"  #include "libmdocml.h"
   
 #define BUFFER_IN_DEF   BUFSIZ  #define BUFFER_IN_DEF   BUFSIZ   /* See begin_bufs. */
 #define BUFFER_OUT_DEF  BUFSIZ  #define BUFFER_OUT_DEF  BUFSIZ   /* See begin_bufs. */
   
 static void              usage(void);  #ifdef  DEBUG
 static int               begin_io(const struct md_args *,  #define CSS             "mdocml.css"
   #else
   #define CSS             "/usr/local/share/mdocml/mdocml.css"
   #endif
   
   static  void             usage(void);
   
   static  int              begin_io(const struct md_args *,
                                 char *, char *);                                  char *, char *);
 static int               leave_io(const struct md_buf *,  static  int              leave_io(const struct md_buf *,
                                 const struct md_buf *, int);                                  const struct md_buf *, int);
 static int               begin_bufs(const struct md_args *,  static  int              begin_bufs(const struct md_args *,
                                 struct md_buf *, struct md_buf *);                                  struct md_buf *, struct md_buf *);
 static int               leave_bufs(const struct md_buf *,  static int               leave_bufs(const struct md_buf *,
                                 const struct md_buf *, int);                                  const struct md_buf *, int);
   
   #ifdef __linux__
   extern  int              getsubopt(char **, char *const *, char **);
   #endif
   
 int  int
 main(int argc, char *argv[])  main(int argc, char *argv[])
 {  {
         int              c;          int              c;
         char            *out, *in;          char            *out, *in, *opts, *v;
         struct md_args   args;          struct md_args   args;
   #define ALL              0
   #define ERROR            1
           char            *toks[] = { "all", "error", NULL };
   
         extern char     *optarg;          extern char     *optarg;
         extern int       optind;          extern int       optind;
   
         out = in = NULL;          out = in = NULL;
   
         while (-1 != (c = getopt(argc, argv, "o:")))          (void)memset(&args, 0, sizeof(struct md_args));
   
           args.type = MD_NOOP;
   
           while (-1 != (c = getopt(argc, argv, "c:ef:o:vW:")))
                 switch (c) {                  switch (c) {
                   case ('c'):
                           if (args.type != MD_HTML)
                                   errx(1, "-c only valid for -fhtml");
                           args.params.html.css = optarg;
                           break;
                   case ('e'):
                           if (args.type != MD_HTML)
                                   errx(1, "-e only valid for -fhtml");
                           args.params.html.flags |= HTML_CSS_EMBED;
                           break;
                   case ('f'):
                           if (0 == strcmp(optarg, "html"))
                                   args.type = MD_HTML;
                           else if (0 == strcmp(optarg, "xml"))
                                   args.type = MD_XML;
                           else if (0 == strcmp(optarg, "noop"))
                                   args.type = MD_NOOP;
                           else
                                   errx(1, "invalid filter type");
                           break;
                 case ('o'):                  case ('o'):
                         out = optarg;                          out = optarg;
                         break;                          break;
                   case ('v'):
                           args.verbosity++;
                           break;
                   case ('W'):
                           opts = optarg;
                           while (*opts)
                                   switch (getsubopt(&opts, toks, &v)) {
                                   case (ALL):
                                           args.warnings |= MD_WARN_ALL;
                                           break;
                                   case (ERROR):
                                           args.warnings |= MD_WARN_ERROR;
                                           break;
                                   default:
                                           usage();
                                           return(1);
                                   }
                           break;
                 default:                  default:
                         usage();                          usage();
                         return(1);                          return(1);
                 }                  }
   
           if (MD_HTML == args.type)
                   if (NULL == args.params.html.css)
                           args.params.html.css = CSS;
   
         argv += optind;          argv += optind;
         argc -= optind;          argc -= optind;
   
         if (1 == argc)          if (1 == argc)
                 in = *argv++;                  in = *argv++;
   
         args.type = MD_HTML4_STRICT;  
         args.dbg = MD_DBG_TREE;  
   
         return(begin_io(&args, out ? out : "-", in ? in : "-"));          return(begin_io(&args, out ? out : "-", in ? in : "-"));
 }  }
   
   
   /*
    * Close out file descriptors opened in begin_io.  If the descriptor
    * refers to stdin/stdout, then do nothing.
    */
 static int  static int
 leave_io(const struct md_buf *out,  leave_io(const struct md_buf *out,
                 const struct md_buf *in, int c)                  const struct md_buf *in, int c)
Line 96  leave_io(const struct md_buf *out, 
Line 157  leave_io(const struct md_buf *out, 
                 warn("%s", out->name);                  warn("%s", out->name);
                 c = 1;                  c = 1;
         }          }
           if (1 == c && STDOUT_FILENO != out->fd)
                   if (-1 == unlink(out->name))
                           warn("%s", out->name);
   
         return(c);          return(c);
 }  }
   
   
   /*
    * Open file descriptors or assign stdin/stdout, if dictated by the "-"
    * token instead of a filename.
    */
 static int  static int
 begin_io(const struct md_args *args, char *out, char *in)  begin_io(const struct md_args *args, char *out, char *in)
 {  {
Line 139  begin_io(const struct md_args *args, char *out, char *
Line 207  begin_io(const struct md_args *args, char *out, char *
 }  }
   
   
   /*
    * Free buffers allocated in begin_bufs.
    */
 static int  static int
 leave_bufs(const struct md_buf *out,  leave_bufs(const struct md_buf *out,
                 const struct md_buf *in, int c)                  const struct md_buf *in, int c)
Line 153  leave_bufs(const struct md_buf *out, 
Line 224  leave_bufs(const struct md_buf *out, 
 }  }
   
   
   /*
    * Allocate buffers to the maximum of either the input file's blocksize
    * or BUFFER_IN_DEF/BUFFER_OUT_DEF, which should be around BUFSIZE.
    */
 static int  static int
 begin_bufs(const struct md_args *args,  begin_bufs(const struct md_args *args,
                 struct md_buf *out, struct md_buf *in)                  struct md_buf *out, struct md_buf *in)
Line 167  begin_bufs(const struct md_args *args, 
Line 242  begin_bufs(const struct md_args *args, 
         if (-1 == fstat(in->fd, &stin)) {          if (-1 == fstat(in->fd, &stin)) {
                 warn("%s", in->name);                  warn("%s", in->name);
                 return(1);                  return(1);
         } else if (0 == stin.st_size) {          } else if (STDIN_FILENO != in->fd && 0 == stin.st_size) {
                 warnx("%s: empty file", in->name);                  warnx("%s: empty file", in->name);
                 return(1);                  return(1);
         } else if (-1 == fstat(out->fd, &stout)) {          } else if (-1 == fstat(out->fd, &stout)) {
Line 196  usage(void)
Line 271  usage(void)
 {  {
         extern char     *__progname;          extern char     *__progname;
   
         (void)printf("usage: %s [-o outfile] [infile]\n", __progname);          (void)fprintf(stderr, "usage: %s [-v] [-Wwarn...]  "
                           "[-f filter] [-o outfile] [infile]\n",
                           __progname);
 }  }
   

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.20

CVSweb