make the published mkd_flag_t opaque and add a new function (mkd_flags()) to generate a flag structure and return it in malloced memory

This commit is contained in:
david parsons
2020-03-07 19:56:22 -08:00
parent 12e8c9c715
commit 2e900346a0
5 changed files with 61 additions and 36 deletions
+11
View File
@@ -103,3 +103,14 @@ mkd_init_flags(mkd_flag_t *p)
{
memset(p, 0, sizeof(*p));
}
mkd_flag_t *
mkd_flags()
{
mkd_flag_t *p = malloc( sizeof(mkd_flag_t) );
if ( p )
mkd_init_flags(p);
return p;
}
+20 -18
View File
@@ -168,7 +168,6 @@ int
main(int argc, char **argv)
{
int rc;
mkd_flag_t flags;
int debug = 0;
int toc = 0;
int content = 1;
@@ -188,16 +187,18 @@ main(int argc, char **argv)
MMIOT *doc;
struct h_context blob;
struct h_opt *opt;
mkd_flag_t *flags = mkd_flags();
if ( !flags )
perror("new_flags");
hoptset(&blob, argc, argv);
hopterr(&blob, 1);
pgm = basename(argv[0]);
mkd_init_flags(&flags);
if ( q = getenv("MARKDOWN_FLAGS") )
mkd_set_flag_bitmap(&flags, strtol(q,0,0));
mkd_set_flag_bitmap(flags, strtol(q,0,0));
while ( opt=gethopt(&blob, opts, NROPTS) ) {
if ( opt == HOPTERR ) {
@@ -221,10 +222,10 @@ main(int argc, char **argv)
exit(0);
}
else if ( strcmp(q, "??") == 0 ) {
show_flags(1, version, &flags);
show_flags(1, version, flags);
exit(0);
}
else if ( q=mkd_set_flag_string(&flags, hoptarg(&blob)) )
else if ( q=mkd_set_flag_string(flags, hoptarg(&blob)) )
complain("unknown option <%s>", q);
break;
case 'F': q = hoptarg(&blob);
@@ -233,11 +234,11 @@ main(int argc, char **argv)
exit(0);
}
else if ( strcmp(q, "??") == 0 ) {
show_flags(0, version, &flags);
show_flags(0, version, flags);
exit(0);
}
else
mkd_set_flag_bitmap(&flags,strtol(q, 0, 0));
mkd_set_flag_bitmap(flags,strtol(q, 0, 0));
break;
case 'G': github_flavoured = 1;
break;
@@ -250,7 +251,7 @@ main(int argc, char **argv)
case 't': text = hoptarg(&blob);
use_mkd_line = 1;
break;
case 'T': mkd_set_flag_num(&flags, MKD_TOC);
case 'T': mkd_set_flag_num(flags, MKD_TOC);
toc = 1;
break;
case 'C': extra_footnote_prefix = hoptarg(&blob);
@@ -267,7 +268,7 @@ main(int argc, char **argv)
case 'x': squash = 1;
break;
case 'X': use_e_codefmt = 1;
mkd_set_flag_num(&flags, MKD_FENCEDCODE);
mkd_set_flag_num(flags, MKD_FENCEDCODE);
break;
}
}
@@ -277,7 +278,7 @@ main(int argc, char **argv)
printf("%s: discount %s%s", pgm, markdown_version,
with_html5 ? " +html5":"");
if ( version == 2 )
mkd_flags_are(stdout, &flags, 0);
mkd_flags_are(stdout, flags, 0);
putchar('\n');
exit(0);
}
@@ -289,11 +290,11 @@ main(int argc, char **argv)
mkd_with_html5_tags();
if ( use_mkd_line )
rc = mkd_generateline( text, strlen(text), stdout, &flags);
rc = mkd_generateline( text, strlen(text), stdout, flags);
else {
if ( text ) {
doc = github_flavoured ? gfm_string(text, strlen(text), &flags)
: mkd_string(text, strlen(text), &flags) ;
doc = github_flavoured ? gfm_string(text, strlen(text), flags)
: mkd_string(text, strlen(text), flags) ;
if ( !doc ) {
perror(text);
@@ -306,8 +307,8 @@ main(int argc, char **argv)
exit(1);
}
doc = github_flavoured ? gfm_in(stdin,&flags)
: mkd_in(stdin,&flags);
doc = github_flavoured ? gfm_in(stdin,flags)
: mkd_in(stdin,flags);
if ( !doc ) {
perror(argc ? argv[0] : "stdin");
exit(1);
@@ -331,10 +332,10 @@ main(int argc, char **argv)
mkd_ref_prefix(doc, extra_footnote_prefix);
if ( debug )
rc = mkd_dump(doc, stdout, &flags, argc ? basename(argv[0]) : "stdin");
rc = mkd_dump(doc, stdout, flags, argc ? basename(argv[0]) : "stdin");
else {
rc = 1;
if ( mkd_compile(doc, &flags) ) {
if ( mkd_compile(doc, flags) ) {
rc = 0;
if ( styles )
mkd_generatecss(doc, stdout);
@@ -347,6 +348,7 @@ main(int argc, char **argv)
mkd_cleanup(doc);
}
mkd_deallocate_tags();
free(flags);
adump();
exit( (rc == 0) ? 0 : errno );
}
+11 -8
View File
@@ -39,18 +39,19 @@ char **argv;
int version = 0;
int ret, i;
DWORD bits;
mkd_flag_t flags;
mkd_flag_t *flags = mkd_flags();
struct h_opt *opt;
struct h_context blob;
mkd_init_flags(&flags);
if ( !flags )
perror("mkd_flags");
if ( (q = getenv("MARKDOWN_FLAGS")) ) {
bits = strtol(q, 0, 0);
for ( i=0; i < 8*sizeof(bits); i++)
if ( bits & (1<<i) )
mkd_set_flag_num(&flags, i);
mkd_set_flag_num(flags, i);
}
hoptset(&blob, argc, argv);
@@ -73,14 +74,14 @@ char **argv;
for (i=0; i < 8*sizeof(bits); i++)
if ( bits & (1<<i) )
mkd_set_flag_num(&flags, i);
mkd_set_flag_num(flags, i);
}
break;
case 'f': if ( strcmp(hoptarg(&blob), "?") == 0 ) {
show_flags(1,version,0);
exit(0);
}
else if ( q = mkd_set_flag_string(&flags, hoptarg(&blob)) )
else if ( q = mkd_set_flag_string(flags, hoptarg(&blob)) )
fprintf(stderr, "unknown option <%s>\n", q);
break;
}
@@ -92,7 +93,7 @@ char **argv;
if ( version ) {
printf("%s: discount %s", pgm, markdown_version);
if ( version > 1 )
mkd_flags_are(stdout, &flags, 0);
mkd_flags_are(stdout, flags, 0);
putchar('\n');
exit(0);
}
@@ -102,14 +103,16 @@ char **argv;
exit(1);
}
if ( (doc = mkd_in(stdin, &flags)) == 0 ) {
if ( (doc = mkd_in(stdin, flags)) == 0 ) {
perror( (argc > 1) ? argv[1] : "stdin" );
exit(1);
}
ret = mkd_xhtmlpage(doc, &flags, stdout);
ret = mkd_xhtmlpage(doc, flags, stdout);
mkd_cleanup(doc);
free(flags);
return (ret == EOF);
}
+2 -2
View File
@@ -43,13 +43,13 @@ enum { MKD_NOLINKS=0, /* don't do link processing, block <a> tags */
MKD_NR_FLAGS };
/* abstract flag type */
typedef struct { char bfr[MKD_NR_FLAGS*2]; } mkd_flag_t;
typedef void mkd_flag_t;
int mkd_flag_isset(mkd_flag_t*, int); /* check a flag status */
void mkd_flag_set(mkd_flag_t*, int); /* set a flag */
void mkd_flag_clear(mkd_flag_t*, int); /* clear a flag */
void mkd_init_flags(mkd_flag_t*); /* initialize the flags */
mkd_flag_t *mkd_flags(); /* create a flag structure */
char *mkd_set_flag_string(mkd_flag_t*, char*); /* set named flags */
void mkd_set_flag_num(mkd_flag_t*, unsigned long);/* set a specific flag */
void mkd_clr_flag_num(mkd_flag_t*, unsigned long);/* clear a specific flag */
+17 -8
View File
@@ -450,8 +450,6 @@ static struct _keyword {
static void
setup_flags(mkd_flag_t *flagp, int where)
{
mkd_init_flags(flagp);
#ifdef THEME_DL_MODE
switch (THEME_DL_MODE) {
case 3: mkd_set_flag_num(flagp, MKD_DLEXTRA);
@@ -482,9 +480,12 @@ spin(FILE *template, MMIOT *doc, FILE *output)
{
int c;
int *p;
mkd_flag_t flags;
mkd_flag_t *flags = mkd_flags();
int where = 0x0;
int i;
if ( !flags )
fail("cannot initialize mkd_flags");
prepare(template);
@@ -509,8 +510,8 @@ spin(FILE *template, MMIOT *doc, FILE *output)
for (i=0; i < NR(keyword); i++)
if ( thesame(p, keyword[i].kw) ) {
if ( everywhere || (keyword[i].where & where) ) {
setup_flags(&flags, where);
(*keyword[i].what)(doc,output,&flags,where);
setup_flags(flags, where);
(*keyword[i].what)(doc,output,flags,where);
}
break;
}
@@ -538,6 +539,7 @@ spin(FILE *template, MMIOT *doc, FILE *output)
putc(c, output);
}
free(flags);
} /* spin */
@@ -561,11 +563,17 @@ char **argv;
char *template = "page.theme";
char *source = "stdin";
FILE *tmplfile;
mkd_flag_t flags;
int force = 0;
MMIOT *doc;
struct stat sourceinfo;
char *q;
mkd_flag_t *flags = mkd_flags();
if ( !flags ) {
perror("mkd_flags");
exit(1);
}
struct h_opt *opt;
struct h_context blob;
@@ -595,7 +603,7 @@ char **argv;
show_flags(1,0, 0);
exit(0);
}
else if ( q = mkd_set_flag_string(&flags, hoptarg(&blob)) )
else if ( q = mkd_set_flag_string(flags, hoptarg(&blob)) )
fprintf(stderr,"%s: unknown option <%s>", pgm, q);
break;
case 'o': output_file = hoptarg(&blob);
@@ -674,7 +682,7 @@ char **argv;
fail("out of memory");
#endif
if ( !mkd_compile(doc, &flags) )
if ( !mkd_compile(doc, flags) )
fail("couldn't compile input");
if ( tmplfile )
@@ -683,6 +691,7 @@ char **argv;
mkd_generatehtml(doc, stdout);
mkd_cleanup(doc);
free(flags);
exit(0);
}