Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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
}
Ejemplo n.º 3
0
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;
}
Ejemplo n.º 4
0
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);
}
Ejemplo n.º 5
0
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);
}