File indexing completed on 2024-05-05 11:56:30
0001 /* 0002 * makepage: Use mkd_xhtmlpage() to convert markdown input to a 0003 * fully-formed xhtml page. 0004 */ 0005 #include <stdio.h> 0006 #include <stdlib.h> 0007 #include <string.h> 0008 #include <mkdio.h> 0009 #include "config.h" 0010 #include "pgm_options.h" 0011 #include "gethopt.h" 0012 0013 #ifndef HAVE_BASENAME 0014 char* 0015 basename(char *p) 0016 { 0017 char *ret = strrchr(p, '/'); 0018 0019 return ret ? (1+ret) : p; 0020 } 0021 #endif 0022 0023 char *pgm = "makepage"; 0024 0025 struct h_opt opts[] = { 0026 { 0, "version", 'V', 0, "show version info" }, 0027 { 0, 0, 'F', "bitmap", "set/show hex flags" }, 0028 { 0, "flags", 'f', "{+-}flags", "set/show named flags" }, 0029 } ; 0030 #define NROPTS (sizeof opts / sizeof opts[0]) 0031 0032 int 0033 main(argc, argv) 0034 int argc; 0035 char **argv; 0036 { 0037 MMIOT *doc; 0038 char *q; 0039 int version = 0; 0040 int ret; 0041 mkd_flag_t flags = 0; 0042 struct h_opt *opt; 0043 struct h_context blob; 0044 0045 if ( (q = getenv("MARKDOWN_FLAGS")) ) 0046 flags = strtol(q, 0, 0); 0047 0048 hoptset(&blob, argc, argv); 0049 hopterr(&blob, 1); 0050 0051 while ( opt = gethopt(&blob, opts, NROPTS) ) { 0052 if ( opt == HOPTERR ) { 0053 hoptusage(pgm, opts, NROPTS, "[file]"); 0054 exit(1); 0055 } 0056 switch ( opt->optchar ) { 0057 case 'V': version++; 0058 break; 0059 case 'F': if ( strcmp(hoptarg(&blob), "?") == 0 ) { 0060 show_flags(0,0); 0061 exit(0); 0062 } 0063 else 0064 flags = strtol(hoptarg(&blob), 0, 0); 0065 break; 0066 case 'f': if ( strcmp(hoptarg(&blob), "?") == 0 ) { 0067 show_flags(1,version); 0068 exit(0); 0069 } 0070 else if ( q = set_flag(&flags, hoptarg(&blob)) ) 0071 fprintf(stderr, "unknown option <%s>\n", q); 0072 break; 0073 } 0074 } 0075 0076 argc -= hoptind(&blob); 0077 argv += hoptind(&blob); 0078 0079 if ( version ) { 0080 printf("%s: discount %s", pgm, markdown_version); 0081 if ( version > 1 ) 0082 mkd_flags_are(stdout, flags, 0); 0083 putchar('\n'); 0084 exit(0); 0085 } 0086 0087 if ( (argc > 0) && !freopen(argv[0], "r", stdin) ) { 0088 perror(argv[0]); 0089 exit(1); 0090 } 0091 0092 if ( (doc = mkd_in(stdin, flags)) == 0 ) { 0093 perror( (argc > 1) ? argv[1] : "stdin" ); 0094 exit(1); 0095 } 0096 0097 ret = mkd_xhtmlpage(doc, flags, stdout); 0098 0099 mkd_cleanup(doc); 0100 0101 return (ret == EOF); 0102 }