mirror of
https://github.com/Orc/discount.git
synced 2026-09-25 04:10:00 +03:00
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:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
@@ -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 */
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user