static VALUE rb_markdown_to_html(int argc, VALUE *argv, VALUE self) { /* grab char pointer to markdown input text */ VALUE text = rb_funcall(self, rb_intern("text"), 0); Check_Type(text, T_STRING); char * ptext = StringValuePtr(text); /* flip extension bits */ int extensions = 0; if ( rb_funcall(self, rb_intern("smart"), 0) == Qtrue ) extensions = extensions | EXT_SMART ; if ( rb_funcall(self, rb_intern("notes"), 0) == Qtrue ) extensions = extensions | EXT_NOTES ; if ( rb_funcall(self, rb_intern("filter_html"), 0) == Qtrue ) extensions = extensions | EXT_FILTER_HTML ; if ( rb_funcall(self, rb_intern("filter_styles"), 0) == Qtrue ) extensions = extensions | EXT_FILTER_STYLES ; if ( rb_funcall(self, rb_intern("strike"), 0) == Qtrue ) extensions = extensions | EXT_STRIKE ; if ( rb_funcall(self, rb_intern("autolink"), 0) == Qtrue ) extensions = extensions | EXT_AUTOLINK ; if ( rb_funcall(self, rb_intern("hard_wrap"), 0) == Qtrue ) extensions = extensions | EXT_HARD_WRAP ; if ( rb_funcall(self, rb_intern("no_images"), 0) == Qtrue ) extensions = extensions | EXT_NO_IMAGES ; if ( rb_funcall(self, rb_intern("media"), 0) == Qtrue ) extensions = extensions | EXT_MEDIA ; if ( rb_funcall(self, rb_intern("codeblock"), 0) == Qtrue ) extensions = extensions | EXT_CODEBLOCK ; if ( rb_funcall(self, rb_intern("hashtags"), 0) == Qtrue ) extensions = extensions | EXT_HASHTAGS ; if ( rb_funcall(self, rb_intern("usernames"), 0) == Qtrue ) extensions = extensions | EXT_USERNAMES ; if ( rb_funcall(self, rb_intern("spoilerblock"), 0) == Qtrue ) extensions = extensions | EXT_SPOILERBLOCK ; char *html = markdown_to_string(ptext, extensions, HTML_FORMAT); VALUE result = rb_str_new2(html); free(html); return result; }
void CirclesDialog::updateWikiPage(const RsWikiSnapshot &page) { #ifdef USE_PEGMMD_RENDERER /* render as HTML */ int extensions = 0; char *answer = markdown_to_string((char *) page.mPage.c_str(), extensions, HTML_FORMAT); QString renderedText = QString::fromUtf8(answer); ui.textBrowser->setHtml(renderedText); // free answer. free(answer); #else /* render as HTML */ QString renderedText = "IN (dummy) RENDERED TEXT MODE:\n"; renderedText += QString::fromStdString(page.mPage); ui.textBrowser->setPlainText(renderedText); #endif }
static VALUE rb_markdown_to_groff_mm(int argc, VALUE *argv, VALUE self) { /* grab char pointer to markdown input text */ VALUE text = rb_funcall(self, rb_intern("text"), 0); Check_Type(text, T_STRING); char * ptext = StringValuePtr(text); /* flip extension bits - note that defaults are different than * for HTML */ int extensions = EXT_SMART | EXT_NOTES | EXT_FILTER_HTML | EXT_FILTER_STYLES; if ( rb_funcall(self, rb_intern("smart"), 0) == Qfalse ) extensions = extensions & ~ EXT_SMART ; if ( rb_funcall(self, rb_intern("notes"), 0) == Qfalse ) extensions = extensions & ~ EXT_NOTES ; char *groff = markdown_to_string(ptext, extensions, GROFF_MM_FORMAT); VALUE result = rb_str_new2(groff); free(groff); return result; }
int main(int argc, char * argv[]) { int numargs; /* number of filename arguments */ int i; GString *inputbuf; char *out; /* string containing processed output */ GString *file; char *fake; FILE *input; FILE *output; char curchar; char *progname = argv[0]; int output_format = HTML_FORMAT; /* Code for command-line option parsing. */ static gboolean opt_version = FALSE; static gchar *opt_output = 0; static gchar *opt_to = 0; static gboolean opt_smart = TRUE; static gboolean opt_no_smart = FALSE; static gboolean opt_notes = TRUE; static gboolean opt_no_notes = FALSE; static gboolean opt_process_html = FALSE; static gboolean opt_filter_html = FALSE; static gboolean opt_filter_styles = FALSE; static gboolean opt_allext = FALSE; static gboolean opt_compatibility = FALSE; static gboolean opt_batchmode = FALSE; static gchar *opt_extract_meta = FALSE; static gboolean opt_no_labels = FALSE; static struct option entries[] = { MD_ARGUMENT_FLAG( "help", 'h', 1, NULL, "Show help options", NULL ), MD_ARGUMENT_FLAG( "version", 'v', 1, &opt_version, "print version and exit", NULL ), MD_ARGUMENT_STRING( "output", 'o', &opt_output, "send output to FILE (default is stdout)", "FILE" ), MD_ARGUMENT_STRING( "to", 't', &opt_to, "convert to FORMAT (default is html)", "FORMAT" ), MD_ARGUMENT_FLAG( "extensions", 'x', 1, &opt_allext, "use all syntax extensions", NULL ), MD_ARGUMENT_FLAG( "filter-html", 0, 1, &opt_filter_html, "filter out raw HTML (except styles)", NULL ), MD_ARGUMENT_FLAG( "filter-styles", 0, 1, &opt_filter_styles, "filter out HTML styles", NULL ), MD_ARGUMENT_FLAG( "compatibility", 'c', 1, &opt_compatibility, "markdown compatibility mode", NULL ), MD_ARGUMENT_FLAG( "batch", 'b', 1, &opt_batchmode, "process multiple files automatically", NULL ), MD_ARGUMENT_STRING( "extract", 'e', &opt_extract_meta, "extract and display specified metadata", NULL ), MD_ARGUMENT_FLAG( "smart", 0, 1, &opt_smart, "use smart typography extension (on by default)", NULL ), MD_ARGUMENT_FLAG( "nosmart", 0, 1, &opt_no_smart, "do not use smart typography extension", NULL ), MD_ARGUMENT_FLAG( "notes", 0, 1, &opt_notes, "use notes extension (on by default)", NULL ), MD_ARGUMENT_FLAG( "nonotes", 0, 1, &opt_no_notes, "do not use notes extension", NULL ), MD_ARGUMENT_FLAG( "process-html", 0, 1, &opt_process_html, "process MultiMarkdown inside of raw HTML", NULL ), MD_ARGUMENT_FLAG( "nolabels", 0, 1, &opt_no_labels, "do not generate id attributes for headers", NULL ), { NULL } }; char ch; while ((ch = getopt_long(argc, argv, "hvo:t:xcbe:", entries, NULL)) != -1) { switch (ch) { case 'h': printUsage(); return EXIT_SUCCESS; break; case 'v': opt_version = true; break; case 'o': opt_output = malloc(strlen(optarg) + 1); strcpy(opt_output, optarg); break; case 't': opt_to = malloc(strlen(optarg) + 1); strcpy(opt_to, optarg); break; case 'x': opt_allext = true; break; case 'c': opt_compatibility = true; break; case 'b': opt_batchmode = true; break; case 'e': opt_extract_meta = malloc(strlen(optarg) + 1); strcpy(opt_extract_meta, optarg); break; } } argc -= optind; argv += optind; /* We expect argc and argv to still point just one below the start of remaining args */ argc++; argv--; /* Process command-line options and arguments. */ if (opt_version) { version(progname); return EXIT_SUCCESS; } extensions = 0; if (opt_allext) extensions = 0xFFFFFF; /* turn on all extensions */ if (opt_no_smart) opt_smart = FALSE; if (opt_smart) extensions = extensions | EXT_SMART; if (opt_no_notes) opt_notes = FALSE; if (opt_notes) extensions = extensions | EXT_NOTES; if (opt_process_html) extensions = extensions | EXT_PROCESS_HTML; if (opt_filter_html) extensions = extensions | EXT_FILTER_HTML; if (opt_filter_styles) extensions = extensions | EXT_FILTER_STYLES; if (opt_no_labels) extensions = extensions | EXT_NO_LABELS; /* Compatibility mode turns off extensions and most MultiMarkdown-specific features */ if (opt_compatibility) { extensions = 0x000000; extensions = extensions | EXT_COMPATIBILITY; extensions = extensions | EXT_NO_LABELS; } if (opt_to == NULL) output_format = HTML_FORMAT; else if (strcmp(opt_to, "html") == 0) output_format = HTML_FORMAT; else if (strcmp(opt_to, "latex") == 0) output_format = LATEX_FORMAT; else if (strcmp(opt_to, "memoir") == 0) output_format = MEMOIR_FORMAT; else if (strcmp(opt_to, "beamer") == 0) output_format = BEAMER_FORMAT; else if (strcmp(opt_to, "opml") == 0) output_format = OPML_FORMAT; else if (strcmp(opt_to, "odf") == 0) output_format = ODF_FORMAT; else { fprintf(stderr, "%s: Unknown output format '%s'\n", progname, opt_to); exit(EXIT_FAILURE); } numargs = argc - 1; if (opt_batchmode && numargs != 0) { /* handle each file individually, and set output to filename with appropriate extension */ for (i = 0; i < numargs; i++) { inputbuf = g_string_new(""); /* string for concatenated input */ /* Read file */ if ((input = fopen(argv[i+1], "r")) == NULL) { perror(argv[i+1]); exit(EXIT_FAILURE); } while ((curchar = fgetc(input)) != EOF) g_string_append_c(inputbuf, curchar); fclose(input); /* Display metadata on request */ if (opt_extract_meta) { out = extract_metadata_value(inputbuf->str, extensions, opt_extract_meta); if (out != NULL) fprintf(stdout, "%s\n", out); return(EXIT_SUCCESS); } /* remove file extension, if present */ fake = argv[i+1]; if (strrchr(fake, '.') != NULL) { int count = strrchr(fake,'.') - fake; if (count != 0) { fake[count] = '\0'; } } file = g_string_new(fake); if (output_format == HTML_FORMAT) { g_string_append(file,".html"); } else if (output_format == OPML_FORMAT) { g_string_append(file,".opml"); } else if (output_format == ODF_FORMAT) { g_string_append(file,".fodt"); } else { g_string_append(file,".tex"); } /* open output file */ if (!(output = fopen(file->str, "w"))) { perror(opt_output); return 1; } out = markdown_to_string(inputbuf->str, extensions, output_format); fprintf(output, "%s\n", out); fclose(output); g_string_free(file,true); free(out); g_string_free(inputbuf, true); } } else { /* Read input from stdin or input files into inputbuf */ inputbuf = g_string_new(""); /* string for concatenated input */ if (numargs == 0) { /* use stdin if no files specified */ while ((curchar = fgetc(stdin)) != EOF) g_string_append_c(inputbuf, curchar); fclose(stdin); } else { /* open all the files on command line */ for (i = 0; i < numargs; i++) { if ((input = fopen(argv[i+1], "r")) == NULL) { perror(argv[i+1]); exit(EXIT_FAILURE); } while ((curchar = fgetc(input)) != EOF) g_string_append_c(inputbuf, curchar); fclose(input); } } /* Display metadata on request */ if (opt_extract_meta) { out = extract_metadata_value(inputbuf->str, extensions, opt_extract_meta); if (out != NULL) fprintf(stdout, "%s\n", out); return(EXIT_SUCCESS); } /* we allow "-" as a synonym for stdout here */ if (opt_output == NULL || strcmp(opt_output, "-") == 0) output = stdout; else if (!(output = fopen(opt_output, "w"))) { perror(opt_output); return 1; } out = markdown_to_string(inputbuf->str, extensions, output_format); fprintf(output, "%s\n", out); free(out); fclose(output); g_string_free(inputbuf, true); } return(EXIT_SUCCESS); }
int main(int argc, char * argv[]) { int numargs; /* number of filename arguments */ int i; GString *inputbuf; char *out; /* string containing processed output */ FILE *input; FILE *output; char curchar; char *progname = argv[0]; int output_format = HTML_FORMAT; /* Code for command-line option parsing. */ static gboolean opt_version = FALSE; static gchar *opt_output = 0; static gchar *opt_to = 0; static gboolean opt_smart = FALSE; static gboolean opt_notes = FALSE; static gboolean opt_filter_html = FALSE; static gboolean opt_filter_styles = FALSE; static gboolean opt_strike = FALSE; static gboolean opt_allext = FALSE; static GOptionEntry entries[] = { { "version", 'v', 0, G_OPTION_ARG_NONE, &opt_version, "print version and exit", NULL }, { "output", 'o', 0, G_OPTION_ARG_STRING, &opt_output, "send output to FILE (default is stdout)", "FILE" }, { "to", 't', 0, G_OPTION_ARG_STRING, &opt_to, "convert to FORMAT (default is html)", "FORMAT" }, { "extensions", 'x', 0, G_OPTION_ARG_NONE, &opt_allext, "use all syntax extensions", NULL }, { "filter-html", 0, 0, G_OPTION_ARG_NONE, &opt_filter_html, "filter out raw HTML (except styles)", NULL }, { "filter-styles", 0, 0, G_OPTION_ARG_NONE, &opt_filter_styles, "filter out HTML styles", NULL }, { NULL } }; /* Options to active syntax extensions. These appear separately in --help. */ static GOptionEntry ext_entries[] = { { "smart", 0, 0, G_OPTION_ARG_NONE, &opt_smart, "use smart typography extension", NULL }, { "notes", 0, 0, G_OPTION_ARG_NONE, &opt_notes, "use notes extension", NULL }, { "strike", 0, 0, G_OPTION_ARG_NONE, &opt_strike, "use strike-through extension", NULL }, { NULL } }; GError *error = NULL; GOptionContext *context; GOptionGroup *ext_group; context = g_option_context_new ("[FILE...]"); g_option_context_add_main_entries (context, entries, NULL); ext_group = g_option_group_new ("extensions", "Syntax extensions", "show available syntax extensions", NULL, NULL); g_option_group_add_entries (ext_group, ext_entries); g_option_context_add_group (context, ext_group); g_option_context_set_description (context, "Converts text in specified files (or stdin) from markdown to FORMAT.\n" "Available FORMATs: html, latex, groff-mm, odf"); if (!g_option_context_parse (context, &argc, &argv, &error)) { g_print ("option parsing failed: %s\n", error->message); exit (1); } g_option_context_free(context); /* Process command-line options and arguments. */ if (opt_version) { version(progname); return EXIT_SUCCESS; } extensions = 0; if (opt_allext) extensions = 0xFFFFFF; /* turn on all extensions */ if (opt_smart) extensions = extensions | EXT_SMART; if (opt_notes) extensions = extensions | EXT_NOTES; if (opt_filter_html) extensions = extensions | EXT_FILTER_HTML; if (opt_filter_styles) extensions = extensions | EXT_FILTER_STYLES; if (opt_strike) extensions = extensions | EXT_STRIKE; if (opt_to == NULL) output_format = HTML_FORMAT; else if (strcmp(opt_to, "html") == 0) output_format = HTML_FORMAT; else if (strcmp(opt_to, "latex") == 0) output_format = LATEX_FORMAT; else if (strcmp(opt_to, "groff-mm") == 0) output_format = GROFF_MM_FORMAT; else if (strcmp(opt_to, "odf") == 0) output_format = ODF_FORMAT; else { fprintf(stderr, "%s: Unknown output format '%s'\n", progname, opt_to); exit(EXIT_FAILURE); } /* we allow "-" as a synonym for stdout here */ if (opt_output == NULL || strcmp(opt_output, "-") == 0) output = stdout; else if (!(output = fopen(opt_output, "w"))) { perror(opt_output); return 1; } inputbuf = g_string_new(""); /* string for concatenated input */ /* Read input from stdin or input files into inputbuf */ numargs = argc - 1; if (numargs == 0) { /* use stdin if no files specified */ while ((curchar = fgetc(stdin)) != EOF) g_string_append_c(inputbuf, curchar); fclose(stdin); } else { /* open all the files on command line */ for (i = 0; i < numargs; i++) { if ((input = fopen(argv[i+1], "r")) == NULL) { perror(argv[i+1]); exit(EXIT_FAILURE); } while ((curchar = fgetc(input)) != EOF) g_string_append_c(inputbuf, curchar); fclose(input); } } out = markdown_to_string(inputbuf->str, extensions, output_format); fprintf(output, "%s\n", out); free(out); g_string_free(inputbuf, true); return(EXIT_SUCCESS); }