void Markdown(sLONG_PTR *pResult, PackagePtr pParams) { C_TEXT Param1; C_TEXT Param2; C_LONGINT Param3; C_LONGINT Param4; C_LONGINT returnValue; Param1.fromParamAtIndex(pParams, 1); Param3.fromParamAtIndex(pParams, 3); Param4.fromParamAtIndex(pParams, 4); CUTF8String src; Param1.copyUTF8String(&src); mkd_flag_t flags; flags = (mkd_flag_t)Param3.getIntValue(); if(MKD_WITH_HTML5_TAGS && Param4.getIntValue()) mkd_with_html5_tags(); Document *doc; if(MKD_GITHUB_FLAVOURED && Param4.getIntValue()) { doc = gfm_string((const char *)src.c_str(), src.length(), flags); }else{ doc = mkd_string((const char *)src.c_str(), src.length(), flags); } if(doc) { if(mkd_compile(doc, flags)) { std::ostringstream outstream; mkd_generatecss(doc, outstream); mkd_generatetoc(doc, outstream); mkd_generatehtml(doc, outstream); std::string dst = outstream.str(); Param2.setUTF8String((const uint8_t *)dst.c_str(), dst.length()); }else{returnValue.setIntValue(errno);} mkd_cleanup(doc); }else{returnValue.setIntValue(errno);} mkd_deallocate_tags(); Param2.toParamAtIndex(pParams, 2); returnValue.setReturn(pResult); }
int main(int argc, char **argv) { int opt; int rc; mkd_flag_t flags = 0; int debug = 0; int toc = 0; int content = 1; int version = 0; int with_html5 = 0; int styles = 0; int use_mkd_line = 0; int github_flavoured = 0; char *extra_footnote_prefix = 0; char *urlflags = 0; char *text = 0; char *ofile = 0; char *urlbase = 0; char *q; MMIOT *doc; if ( q = getenv("MARKDOWN_FLAGS") ) flags = strtol(q, 0, 0); pgm = basename(argv[0]); opterr = 1; while ( (opt=getopt(argc, argv, "5b:C:df:E:F:Gno:s:St:TV")) != EOF ) { switch (opt) { case '5': with_html5 = 1; break; case 'b': urlbase = optarg; break; case 'd': debug = 1; break; case 'V': version++; break; case 'E': urlflags = optarg; break; case 'F': if ( strcmp(optarg, "?") == 0 ) { show_flags(0); exit(0); } else flags = strtol(optarg, 0, 0); break; case 'f': if ( strcmp(optarg, "?") == 0 ) { show_flags(1); exit(0); } else if ( !set_flag(&flags, optarg) ) complain("unknown option <%s>", optarg); break; case 'G': github_flavoured = 1; break; case 'n': content = 0; break; case 's': text = optarg; break; case 'S': styles = 1; break; case 't': text = optarg; use_mkd_line = 1; break; case 'T': toc = 1; break; case 'C': extra_footnote_prefix = optarg; break; case 'o': if ( ofile ) { complain("Too many -o options"); exit(1); } if ( !freopen(ofile = optarg, "w", stdout) ) { perror(ofile); exit(1); } break; default: fprintf(stderr, "usage: %s [-dTV] [-b url-base]" " [-F bitmap] [-f {+-}flags]" " [-o ofile] [-s text]" " [-t text] [file]\n", pgm); exit(1); } } if ( version ) { printf("%s: discount %s%s", pgm, markdown_version, with_html5 ? " +html5":""); if ( version > 1 ) mkd_flags_are(stdout, flags, 0); putchar('\n'); exit(0); } argc -= optind; argv += optind; if ( with_html5 ) mkd_with_html5_tags(); if ( use_mkd_line ) 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) ; if ( !doc ) { perror(text); exit(1); } } else { if ( argc && !freopen(argv[0], "r", stdin) ) { perror(argv[0]); exit(1); } doc = github_flavoured ? gfm_in(stdin,flags) : mkd_in(stdin,flags); if ( !doc ) { perror(argc ? argv[0] : "stdin"); exit(1); } } if ( urlbase ) mkd_basename(doc, urlbase); if ( urlflags ) { mkd_e_data(doc, urlflags); mkd_e_flags(doc, e_flags); } if ( extra_footnote_prefix ) mkd_ref_prefix(doc, extra_footnote_prefix); if ( debug ) rc = mkd_dump(doc, stdout, 0, argc ? basename(argv[0]) : "stdin"); else { rc = 1; if ( mkd_compile(doc, flags) ) { rc = 0; if ( styles ) mkd_generatecss(doc, stdout); if ( toc ) mkd_generatetoc(doc, stdout); if ( content ) mkd_generatehtml(doc, stdout); } } mkd_cleanup(doc); } mkd_deallocate_tags(); adump(); exit( (rc == 0) ? 0 : errno ); }