Exemple #1
0
Document Parser::parse(const char* mkd) {
    document = Document();

    if (mkd) {
        struct buf *ib, *ob;

        ib = bufnew(INPUT_UNIT);
        bufputs(ib, mkd);

        ob = bufnew(OUTPUT_UNIT);

        mkd_callbacks.opaque = this;

        //parse and assemble document
        markdown(ob, ib, &mkd_callbacks);

        for (std::map<int, Element>::iterator it = elementSoup.begin(); it != elementSoup.end(); ++it) {
            document.append(it->second);
        }

        bufrelease(ib);
        bufrelease(ob);
    }

    return document;
}
Exemple #2
0
/* char* markdownify (char *in) { */
struct buf* markdownify (char *in) {
	struct buf *ib, *ob, *ob1;
	struct mkd_renderer renderer;

	/* reading everything */
	ib = bufnew (READ_UNIT);
	ib->size = strlen (in);
	ib->data = in;
	
	ob = bufnew (OUTPUT_UNIT);
	ob->size = 0;
	
	ob1 = bufnew (OUTPUT_UNIT);
	ob1->size = 0;

	
	/* Markdown parse */
	upshtml_renderer (&renderer, 65535);
	ups_markdown (ob, ib, &renderer, 65535);
	upshtml_free_renderer (&renderer);
	bufrelease (ib);
		
	upshtml_smartypants (ob1, ob);
	bufrelease (ob);
	
	
	return ob1;
}
Exemple #3
0
SEXP rmd_render_smartypants(SEXP Sfile, SEXP Soutput, SEXP Stext)
{
   struct buf *ib, *ob;
   SEXP ret_val = R_NilValue;
   Rboolean success;

   ib = bufnew(READ_UNIT);
   if (!ib)
      error("Out of memory!");

   success = rmd_input_to_buf(Sfile, Stext, ib);

   if (!success)
   {
      bufrelease(ib);
      error("Input error!");
   }

   ob = bufnew(OUTPUT_UNIT);
   if (!ob)
      error("Out of memory!");

   sdhtml_smartypants(ob,ib->data,ib->size);

   success = rmd_buf_to_output(ob,Soutput,&ret_val);

   bufrelease(ib);
   bufrelease(ob);

   if (!success)
      error("Output error!");

   return ret_val;
}
Exemple #4
0
JNIEXPORT jstring JNICALL Java_com_commonsware_cwac_anddown_AndDown_markdownToHtml
  (JNIEnv *env, jobject o, jstring raw) {
	struct buf *ib, *ob;
	int ret;
  jstring result;

	struct sd_callbacks callbacks;
	struct html_renderopt options;
	struct sd_markdown *markdown;

  const char* str;
  str = (*env)->GetStringUTFChars(env, raw, NULL);

	ib = bufnew(INPUT_UNIT);
  bufputs(ib, str);
	ob = bufnew(OUTPUT_UNIT);

  (*env)->ReleaseStringUTFChars(env, raw, str);

	sdhtml_renderer(&callbacks, &options, 0);
	markdown = sd_markdown_new(0, 16, &callbacks, &options);

	sd_markdown_render(ob, ib->data, ib->size, markdown);
	sd_markdown_free(markdown);

  result=(*env)->NewStringUTF(env, bufcstr(ob));

	/* cleanup */
	bufrelease(ib);
	bufrelease(ob);

  return(result);
}
Exemple #5
0
/* sundown.markdown(input_string) ==> output_string */
static int sundown_markdown(lua_State *L) {
    const char *indoc;
    size_t indocSize;
    struct buf *inbuf;
    struct buf *outbuf;
    struct html_renderopt options;
    struct sd_callbacks callbacks;
    struct sd_markdown *markdown;

    /* read input_string */
    indoc = luaL_checklstring(L, 1, &indocSize);
    inbuf = bufnew(READ_UNIT);
    bufgrow(inbuf, indocSize);
    bufput(inbuf, indoc, indocSize);

    /* prepare for output_string */
    outbuf = bufnew(OUTPUT_UNIT);
    sdhtml_renderer(&callbacks, &options, 0);
    markdown = sd_markdown_new(0, 16, &callbacks, &options);

    /* write output_string */
    sd_markdown_render(outbuf, inbuf->data, inbuf->size, markdown);
    lua_pushlstring(L, (const char*) outbuf->data, outbuf->size);
    
    bufrelease(inbuf);
    bufrelease(outbuf);
    sd_markdown_free(markdown);
    
    return 1;
}
Exemple #6
0
static VALUE rb_redcarpet__render(VALUE self, RendererType render_type)
{
    VALUE text = rb_funcall(self, rb_intern("text"), 0);
    VALUE result;

    struct buf input_buf, *output_buf;
    struct mkd_renderer renderer;
    unsigned int enabled_extensions, render_flags;

    Check_Type(text, T_STRING);

    memset(&input_buf, 0x0, sizeof(struct buf));
    input_buf.data = RSTRING_PTR(text);
    input_buf.size = RSTRING_LEN(text);

    output_buf = bufnew(128);
    bufgrow(output_buf, RSTRING_LEN(text) * 1.2f);

    rb_redcarpet__get_flags(self, &enabled_extensions, &render_flags);

    switch (render_type) {
    case REDCARPET_RENDER_HTML:
        upshtml_renderer(&renderer, render_flags);
        break;

    case REDCARPET_RENDER_TOC:
        upshtml_toc_renderer(&renderer);
        break;

    default:
        return Qnil;
    }

    ups_markdown(output_buf, &input_buf, &renderer, enabled_extensions);

    if (rb_funcall(self, rb_intern("smart"), 0) == Qtrue) {
        struct buf *smart_buf = bufnew(128);
        upshtml_smartypants(smart_buf, output_buf);
        result = rb_str_new(smart_buf->data, smart_buf->size);
        bufrelease(smart_buf);
    } else {
        result = rb_str_new(output_buf->data, output_buf->size);
    }

    bufrelease(output_buf);
    upshtml_free_renderer(&renderer);

    /* force the input encoding */
    if (rb_respond_to(text, rb_intern("encoding"))) {
        VALUE encoding = rb_funcall(text, rb_intern("encoding"), 0);
        rb_funcall(result, rb_intern("force_encoding"), 1, encoding);
    }

    return result;
}
BOOL convMd2Html(LPCTSTR outpath, const CString& csspath)
{
	struct buf *ob;
	int ret;
	FILE *outf = NULL;
	unsigned int extensions = 0xff;
	char hHead[] = "<!DOCTYPE html>\n<html>\n<head>\n<meta charset=""utf-8"">\n";
	char hSym[] = "<link href=""%s"" rel=""stylesheet""></link>\n</head>\n<body>\n";
	char hTail[] = "</body>\n</html>";
	char *hCSS = NULL;

	struct sd_callbacks callbacks;
	struct html_renderopt options;
	struct sd_markdown *markdown;

	char *cssbuf = unicode2Utf8((LPCTSTR)csspath, csspath.GetLength());
	int aclen = strlen(cssbuf) + strlen(hSym);

	hCSS = (char*)malloc(aclen+1);
	memset(hCSS, 0, aclen);
	sprintf(hCSS, "<link href=""%s"" rel=""stylesheet""></link>\n</head>\n<body>\n", cssbuf);
	free(cssbuf);


	/* performing markdown parsing */
	ob = bufnew(OUTPUT_UNIT);

	//extensions = MKDEXT_TABLES|MKDEXT_FENCED_CODE|MKDEXT_AUTOLINK|MKDEXT_STRIKETHROUGH|MKDEXT_SUPERSCRIPT|MKDEXT_LAX_SPACING;

	sdhtml_renderer(&callbacks, &options, 0);
	markdown = sd_markdown_new(extensions, 16, &callbacks, &options);

	sd_markdown_render(ob, mib_utf8->data, mib_utf8->size, markdown);
	sd_markdown_free(markdown);

	outf = _tfopen(outpath, _T("w"));
	if(outf != NULL) {
		fwrite(hHead, 1, strlen(hHead), outf);
		fwrite(hCSS, 1, strlen(hCSS), outf);
		/* writing the result to stdout */
		ret = fwrite(ob->data, 1, ob->size, outf);
		fwrite(hTail, 1, strlen(hTail), outf);
		fclose(outf);
	}

	/* cleanup */
	free(hCSS);
	bufrelease(mib_utf8);
	bufrelease(ob);
	mib_utf8 = NULL;

	return TRUE;
}
Exemple #8
0
SEXP rmd_render_markdown(SEXP Sfile, SEXP Soutput, SEXP Stext, SEXP Srenderer,
                            SEXP Soptions, SEXP Sextensions)
{
   const char *name;
   struct buf *ib, *ob;
   SEXP ret_val = R_NilValue;
   Rboolean success;

   name = CHAR(STRING_ELT(Srenderer,0));

   if (!rmd_renderer_exists(name))
   {
      error("Renderer '%s' not registered!",name);
      return R_NilValue;
   }

   ib = bufnew(READ_UNIT);
   if (!ib)
      error("Out of memory!");

   success = rmd_input_to_buf(Sfile,Stext,ib);
   if (!success)
   {
      bufrelease(ib);
      error("Input error!");
   }

   skip_pandoc_title_block(ib);
   skip_jekyll_front_matter(ib);

   ob = bufnew(OUTPUT_UNIT);
   if (!ob)
      error("Out of memory!");

   success = renderer(name)->render(ib,ob,Soptions,Sextensions);
   if (!success)
   {
      bufrelease(ib);
      bufrelease(ob);
      error("Render error!");
   }

   success = rmd_buf_to_output(ob,Soutput,&ret_val);

   bufrelease(ib);
   bufrelease(ob);

   if (!success)
      error("Output error!");

   return ret_val;
}
Exemple #9
0
/* main • main function, interfacing STDIO with the parser */
int
main(int argc, char **argv)
{
	struct buf *ib, *ob;
	int ret;
	FILE *in = stdin;

	struct sd_callbacks callbacks;
	struct html_renderopt options;
	struct sd_markdown *markdown;

	/* opening the file if given from the command line */
	if (argc > 1) {
		in = fopen(argv[1], "r");
		if (!in) {
			fprintf(stderr,"Unable to open input file \"%s\": %s\n", argv[1], strerror(errno));
			return 1;
		}
	}

	/* reading everything */
	ib = bufnew(READ_UNIT);
	bufgrow(ib, READ_UNIT);
	while ((ret = fread(ib->data + ib->size, 1, ib->asize - ib->size, in)) > 0) {
		ib->size += ret;
		bufgrow(ib, ib->size + READ_UNIT);
	}

	if (in != stdin)
		fclose(in);

	/* performing markdown parsing */
	ob = bufnew(OUTPUT_UNIT);

	sdhtml_renderer(&callbacks, &options, 0);
	markdown = sd_markdown_new(0, 16, &callbacks, &options);

	sd_markdown_render(ob, ib->data, ib->size, markdown);
	sd_markdown_free(markdown);

	/* writing the result to stdout */
	ret = fwrite(ob->data, 1, ob->size, stdout);

	/* cleanup */
	bufrelease(ib);
	bufrelease(ob);

	return (ret < 0) ? -1 : 0;
}
/**
 * Generic template
 */
static VALUE
rb_eu__generic(
	VALUE self, VALUE str,
	houdini_cb callback,
	size_t chunk_size)
{
	VALUE result;
	struct buf *out_buf;

	if (NIL_P(str))
		return rb_str_new2("");

	Check_Type(str, T_STRING);
	out_buf = bufnew(chunk_size);

	callback(out_buf, (uint8_t *)RSTRING_PTR(str), RSTRING_LEN(str));
	result = rb_str_new((char *)out_buf->data, out_buf->size);
	bufrelease(out_buf);

#ifdef HAVE_RUBY_ENCODING_H
	rb_enc_copy(result, str);
#endif

	return result;
}
Exemple #11
0
QByteArray md2html(const QByteArray &data, int ext)
{
    if (data.isEmpty()) {
        return data;
    }

    struct buf *ob;

    struct sd_callbacks callbacks;
    struct html_renderopt options;
    struct sd_markdown *markdown;

    /* performing markdown parsing */
    ob = bufnew(OUTPUT_UNIT);

    sdhtml_renderer(&callbacks, &options, 0);
    markdown = sd_markdown_new(ext, 16, &callbacks, &options);

    sd_markdown_render(ob, (uint8_t*)data.constData(), data.size(), markdown);
    sd_markdown_free(markdown);

    QByteArray out((char*)ob->data,ob->size);
    /* cleanup */
    bufrelease(ob);

    return out;
}
Exemple #12
0
static PyObject *
snudown_md(PyObject *self, PyObject *args, PyObject *kwargs)
{
    static char *kwlist[] = {"text", "nofollow", "target", NULL};

    struct buf ib, *ob;
    PyObject *py_result;
    const char* result_text;

    memset(&ib, 0x0, sizeof(struct buf));

    /* Parse arguments */
    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s#|iz", kwlist,
                                     &ib.data, &ib.size, &_state.options.nofollow, &_state.options.target)) {
        return NULL;
    }

    /* Output buffer */
    ob = bufnew(128);

    /* do the magic */
    sd_markdown_render(ob, ib.data, ib.size, sundown);

    /* make a Python string */
    result_text = "";
    if (ob->data)
        result_text = (const char*)ob->data;
    py_result = Py_BuildValue("s#", result_text, (int)ob->size);

    /* Cleanup */
    bufrelease(ob);
    return py_result;
}
Exemple #13
0
static VALUE rb_redcarpet_to_html(int argc, VALUE *argv, VALUE self)
{
	VALUE text = rb_funcall(self, rb_intern("text"), 0);
	VALUE result;

	struct buf input_buf, *output_buf;
	struct mkd_renderer redcarpet_render;

	Check_Type(text, T_STRING);

	memset(&input_buf, 0x0, sizeof(struct buf));
	input_buf.data = RSTRING_PTR(text);
	input_buf.size = RSTRING_LEN(text);

	output_buf = bufnew(64);

	rb_redcarpet__setup_render(self, &redcarpet_render);
	markdown(output_buf, &input_buf, &redcarpet_render);

	result = rb_str_new(output_buf->data, output_buf->size);
	bufrelease(output_buf);

	/* force the input encoding */
	if (rb_respond_to(text, rb_intern("encoding"))) {
		VALUE encoding = rb_funcall(text, rb_intern("encoding"), 0);
		rb_funcall(result, rb_intern("force_encoding"), 1, encoding);
	}

	return result;
}
Exemple #14
0
/* bufset • safely assigns a buffer to another */
void
bufset(struct buf **dest, struct buf *src) {
	if (src) {
		if (!src->asize) src = bufdup(src, 1);
		else src->ref += 1; }
	bufrelease(*dest);
	*dest = src; }
Exemple #15
0
static VALUE rb_redcarpet_md_render(VALUE self, VALUE text)
{
	VALUE rb_rndr;
	struct buf *output_buf;
	struct sd_markdown *markdown;

	Check_Type(text, T_STRING);
	check_utf8_encoding(text);

	rb_rndr = rb_iv_get(self, "@renderer");
	Data_Get_Struct(self, struct sd_markdown, markdown);

	if (rb_respond_to(rb_rndr, rb_intern("preprocess")))
		text = rb_funcall(rb_rndr, rb_intern("preprocess"), 1, text);

	/* initialize buffers */
	output_buf = bufnew(128);

	/* render the magic */
	sd_markdown_render(
		output_buf,
		RSTRING_PTR(text),
		RSTRING_LEN(text),
		markdown);

	/* build the Ruby string */
	text = redcarpet_str_new(output_buf->data, output_buf->size);

	bufrelease(output_buf);

	if (rb_respond_to(rb_rndr, rb_intern("postprocess")))
		text = rb_funcall(rb_rndr, rb_intern("postprocess"), 1, text);

	return text;
}
Exemple #16
0
/**
 * HTML methods
 */
static VALUE rb_eu_escape_html(int argc, VALUE *argv, VALUE self)
{
	VALUE rb_out_buf, str, rb_secure;
	struct buf *out_buf;
	int secure = g_html_secure;

	if (rb_scan_args(argc, argv, "11", &str, &rb_secure) == 2) {
		if (rb_secure == Qfalse) {
			secure = 0;
		}
	}

	Check_Type(str, T_STRING);
	out_buf = bufnew(128);

	houdini_escape_html0(out_buf, (uint8_t *)RSTRING_PTR(str), RSTRING_LEN(str), secure);

	rb_out_buf = rb_str_new((char *)out_buf->data, out_buf->size);
	bufrelease(out_buf);

#ifdef HAVE_RUBY_ENCODING_H
	rb_enc_copy(rb_out_buf, str);
#endif

	return rb_out_buf;
}
Exemple #17
0
int
main(int argc, char **argv)
{
	int i;
	bd_status_t sts = BD_SUCCESS;
	struct buf *ib, *ob;
	FILE *in;

	/* performing markdown parsing */
	ib = bufnew(READ_UNIT);
	ob = bufnew(OUTPUT_UNIT);

	if (ib && ob)
	{
		if (argc <= 1)
			sts = bd_io(ob, ib, stdin);

		for (i = 1; i < argc && BD_SUCCESS == sts; ++i)
		{
			if ((in = fopen(argv[i], "r")))
			{
				sts = bd_io(ob, ib, in);
				fclose(in);
				/* reset buffet for next step */
				bufreset(ib);
				bufreset(ob);
			}
			else
			{
				sts = BD_UNABLE_OPEN_FILE;
			}
		}
	}
	else
	{
		sts = BD_UNABLE_ALLOCATE_MEMORY;
	}

	/* cleanup */
	bufrelease(ib);
	bufrelease(ob);

	/* result output with status */
	bd_result(sts);
	return sts;
}
Exemple #18
0
static PyObject *
misaka_render(const char *text, unsigned int extensions,
                 unsigned int render_flags, char toc_only)
{
    struct buf *ib, *ob;
    struct mkd_renderer renderer;

    /* Input buffer */
    ib = bufnew(1);
    bufputs(ib, text);

    /* Output buffer */
    ob = bufnew(ib->size * 1.2);

    /* Parse Markdown */
    if (toc_only != -1) {
        upshtml_toc_renderer(&renderer);
    } else {
        upshtml_renderer(&renderer, render_flags);
    }

    ups_markdown(ob, ib, &renderer, extensions);
    upshtml_free_renderer(&renderer);

    /* Smartypants actions */
    if (render_flags & HTML_SMARTYPANTS)
    {
        struct buf *sb = bufnew(1);
        upshtml_smartypants(sb, ob);
        ob = bufdup(sb, sb->size); /* Duplicate Smartypants buffer to output buffer */
        bufrelease(sb); /* Cleanup Smartypants buffer */
    }

    /* Append a null terminator to the output buffer and make a Python string */
    bufnullterm(ob);
    PyObject *html = Py_BuildValue("s", ob->data);

    /* Cleanup */
    bufrelease(ib);
    bufrelease(ob);

    return html;
}
int main()
{
	const char TEST_STRING[] = "This &#x2663; is & just &quot;an example&diams;&quot;";
	struct buf *buffer;

	buffer = bufnew(128);
	houdini_unescape_html(buffer, TEST_STRING, strlen(TEST_STRING));
	printf("Result: %.*s\n", (int)buffer->size, buffer->data);
	bufrelease(buffer);
	return 0;
}
Exemple #20
0
int
main(int argc, char **argv)
{
	struct buf *ib, *ob;
	size_t ret;
	FILE *in = stdin;

	/* opening the file if given from the command line */
	if (argc > 1) {
		in = fopen(argv[1], "r");
		if (!in) {
			fprintf(stderr, "Unable to open input file \"%s\": %s\n", argv[0], strerror(errno));
			return 1;
		}
	}

	/* reading everything */
	ib = bufnew(READ_UNIT);
	bufgrow(ib, READ_UNIT);
	while ((ret = fread(ib->data + ib->size, 1, ib->asize - ib->size, in)) > 0) {
		ib->size += ret;
		bufgrow(ib, ib->size + READ_UNIT);
	}

	if (in != stdin)
		fclose(in);

	/* performing markdown parsing */
	ob = bufnew(OUTPUT_UNIT);

	ups_xhtml_smartypants(ob, ib);

	/* writing the result to stdout */
	fwrite(ob->data, 1, ob->size, stdout);

	/* cleanup */
	bufrelease(ib);
	bufrelease(ob);

	return 0;
}
Exemple #21
0
/* main • main function, interfacing STDIO with the parser */
int
main(int argc, char **argv) {
	struct buf *ib, *ob;
	size_t ret;
	FILE *in = stdin;

	/* opening the file if given from the command line */
	if (argc > 1) {
		in = fopen(argv[1], "r");
		if (!in) {
			fprintf(stderr,"Unable to open input file \"%s\": %s\n",
				argv[1], strerror(errno));
			return 1; } }

	/* reading everything */
	ib = bufnew(READ_UNIT);
	bufgrow(ib, READ_UNIT);
	while ((ret = fread(ib->data + ib->size, 1,
			ib->asize - ib->size, in)) > 0) {
		ib->size += ret;
		bufgrow(ib, ib->size + READ_UNIT); }
	if (in != stdin) fclose(in);

	/* performing markdown to LaTeX */
	ob = bufnew(OUTPUT_UNIT);
	markdown(ob, ib, &to_latex);

	/* writing the result to stdout */
	ret = fwrite(ob->data, 1, ob->size, stdout);
	if (ret < ob->size)
		fprintf(stderr, "Warning: only %zu output byte written, "
				"out of %zu\n",
				ret,
				ob->size);

	/* cleanup */
	bufrelease(ib);
	bufrelease(ob);
	return 0; }
Exemple #22
0
static VALUE rb_redcarpet_smartypants_render(VALUE self, VALUE text)
{
	VALUE result;
	struct buf *output_buf;

	Check_Type(text, T_STRING);

	output_buf = bufnew(128);

	sdhtml_smartypants(output_buf, RSTRING_PTR(text), RSTRING_LEN(text));
	result = redcarpet_str_new(output_buf->data, output_buf->size, rb_enc_get(text));

	bufrelease(output_buf);
	return result;
}
Exemple #23
0
static VALUE rb_redcarpet_md_render(VALUE self, VALUE text)
{
	VALUE rb_rndr;
	struct buf *output_buf;
	struct sd_markdown *markdown;

	Check_Type(text, T_STRING);

	rb_rndr = rb_iv_get(self, "@renderer");
	Data_Get_Struct(self, struct sd_markdown, markdown);

	if (rb_respond_to(rb_rndr, rb_intern("preprocess")))
		text = rb_funcall(rb_rndr, rb_intern("preprocess"), 1, text);
	if (NIL_P(text))
		return Qnil;

#ifdef HAVE_RUBY_ENCODING_H
	{
		struct rb_redcarpet_rndr *renderer;
		Data_Get_Struct(rb_rndr, struct rb_redcarpet_rndr, renderer);
		renderer->options.active_enc = rb_enc_get(text);
	}
#endif

	/* initialize buffers */
	output_buf = bufnew(128);

	/* render the magic */
	sd_markdown_render(
		output_buf,
		(const uint8_t*)RSTRING_PTR(text),
		RSTRING_LEN(text),
		markdown);

	/* build the Ruby string */
	text = rb_enc_str_new((const char*)output_buf->data, output_buf->size, rb_enc_get(text));

	bufrelease(output_buf);

	if (rb_respond_to(rb_rndr, rb_intern("postprocess")))
		text = rb_funcall(rb_rndr, rb_intern("postprocess"), 1, text);

	return text;
}
static int markdown_link(struct buf *ob, const struct buf *link, const struct buf *title, const struct buf *content, void *opaque) {
	struct markdown_state *const state = opaque;
	if(0 != bufprefix(link, "hash://")) {
		return state->link(ob, link, title, content, opaque);
	}
	// TODO: Query string escaping
	struct buf *rel = bufnew(strlen("?q=")+link->size);
	bufputs(rel, "?q=");
	bufput(rel, link->data, link->size);
	int const r = state->link(ob, rel, title, content, opaque);
	bufrelease(rel);

	bufputs(ob, "<sup>[");
	struct buf icon = BUF_STATIC("#");
	struct buf info = BUF_STATIC("Hash address");
	state->link(ob, link, &info, &icon, opaque);
	bufputs(ob, "]</sup>");

	return r;
}
Exemple #25
0
QString markDown(QString text) {
  struct sd_callbacks callbacks;
  struct html_renderopt options;
  sdhtml_renderer(&callbacks, &options, 0);

  struct sd_markdown* markdown = sd_markdown_new(0, 16, &callbacks, &options);

  struct buf* ob = bufnew(64);
  // QByteArray ba = text.toLocal8Bit();
  QByteArray ba = text.toUtf8();

  sd_markdown_render(ob, (const unsigned char*)ba.constData(), ba.size(),
                     markdown);
  sd_markdown_free(markdown);

  // QString ret = QString::fromLocal8Bit((char*)ob->data, ob->size);
  QString ret = QString::fromUtf8((char*)ob->data, ob->size);
  bufrelease(ob);

  return ret.trimmed();
}
BOOL CmdwEditorDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)
	if(m_bHtmlExisted)
	{
		POSITION pos = this->GetFirstViewPosition();
		CView* cv = NULL;
		CEditView* pEv = NULL;
		
		do {
			cv = this->GetNextView(pos);
			if( cv != NULL && cv->IsKindOf(RUNTIME_CLASS(CEditView))) {
				pEv = (CEditView*)cv;  
				break;
			}
		} while(cv != NULL);
		if(pEv != NULL)
			pEv->SetWindowText(_T(" "));

		if(mib_utf8 != NULL) {
			bufrelease(mib_utf8);
			mib_utf8 = NULL;
		}

		FILE *fp = _tfopen((LPCTSTR)m_htmlPath, _T("w"));
		if(fp != NULL) {
			char hHead[] = "<!DOCTYPE html><html><head><meta charset=""utf-8""></head><body></body></html>";
			fwrite(hHead, 1, sizeof(hHead), fp);
			fclose(fp);
		}

		this->UpdateAllViews(NULL, (LPARAM)(LPCTSTR)m_htmlPath, NULL);
	}

	return TRUE;
}
BOOL readUtf8Data(CFile* pCF)
{
	int ret;

	if(pCF == NULL)	return FALSE;

	if(mib_utf8 != NULL) {
		bufrelease(mib_utf8);
		mib_utf8 = NULL;
	}

	/* reading everything */
	mib_utf8 = bufnew(READ_UNIT);
	bufgrow(mib_utf8, READ_UNIT);

	while ((ret = pCF->Read(mib_utf8->data + mib_utf8->size, mib_utf8->asize - mib_utf8->size)) > 0) {
		mib_utf8->size += ret;
		bufgrow(mib_utf8, mib_utf8->size + READ_UNIT);
	}

	return TRUE;
}
Exemple #28
0
tdRenderer::~tdRenderer()
{
    bufrelease(m_buffer);
    bufrelease(m_tmpbuffer);
    sd_markdown_free(m_markdown);
}
Exemple #29
0
static Rboolean render_to_html(struct buf *ib, struct buf *ob,
                                  SEXP Soptions, SEXP Sextensions)
{
   struct sd_callbacks callbacks;
   struct html_renderopt renderopt;
   unsigned int exts=0, options=0;
   struct sd_markdown *markdown;
   struct buf *htmlbuf;
   Rboolean toc = FALSE, smarty = FALSE;

   /* Marshal extensions */
   if (isString(Sextensions))
   {
      int i;
      for (i = 0; i < LENGTH(Sextensions); i++)
      {
         if (strcasecmp(CHAR(STRING_ELT(Sextensions,i)),
                        "NO_INTRA_EMPHASIS") == 0)
            exts |= MKDEXT_NO_INTRA_EMPHASIS;
         else if (strcasecmp(CHAR(STRING_ELT(Sextensions,i)),
                        "TABLES") == 0)
            exts |= MKDEXT_TABLES;
         else if (strcasecmp(CHAR(STRING_ELT(Sextensions,i)),
                        "FENCED_CODE") == 0)
            exts |= MKDEXT_FENCED_CODE;
         else if (strcasecmp(CHAR(STRING_ELT(Sextensions,i)),
                        "AUTOLINK") == 0)
            exts |= MKDEXT_AUTOLINK;
         else if (strcasecmp(CHAR(STRING_ELT(Sextensions,i)),
                        "STRIKETHROUGH") == 0)
            exts |= MKDEXT_STRIKETHROUGH;
         else if (strcasecmp(CHAR(STRING_ELT(Sextensions,i)),
                        "LAX_SPACING") == 0)
            exts |= MKDEXT_LAX_SPACING;
         else if (strcasecmp(CHAR(STRING_ELT(Sextensions,i)),
                        "SPACE_HEADERS") == 0)
            exts |= MKDEXT_SPACE_HEADERS;
         else if (strcasecmp(CHAR(STRING_ELT(Sextensions,i)),
                        "SUPERSCRIPT") == 0)
            exts |= MKDEXT_SUPERSCRIPT;
         else if (strcasecmp(CHAR(STRING_ELT(Sextensions,i)),
                        "LATEX_MATH") == 0)
            exts |= MKDEXT_LATEX_MATH;
      }
   }

   /* Marshal HTML options */
   if (isString(Soptions))
   {
      int i;
      for (i = 0; i < LENGTH(Soptions); i++)
      {
         if (strcasecmp(CHAR(STRING_ELT(Soptions,i)),
                        "SKIP_HTML") == 0)
            options |= HTML_SKIP_HTML;
         else if (strcasecmp(CHAR(STRING_ELT(Soptions,i)),
                        "SKIP_STYLE") == 0)
            options |= HTML_SKIP_STYLE;
         else if (strcasecmp(CHAR(STRING_ELT(Soptions,i)),
                        "SKIP_IMAGES") == 0)
            options |= HTML_SKIP_IMAGES;
         else if (strcasecmp(CHAR(STRING_ELT(Soptions,i)),
                        "SKIP_LINKS") == 0)
            options |= HTML_SKIP_LINKS;
         else if (strcasecmp(CHAR(STRING_ELT(Soptions,i)),
                        "SAFELINK") == 0)
            options |= HTML_SAFELINK;
         else if (strcasecmp(CHAR(STRING_ELT(Soptions,i)),
                        "TOC") == 0)
         {
            options |= HTML_TOC;
            toc = TRUE;
         }
         else if (strcasecmp(CHAR(STRING_ELT(Soptions,i)),
                        "HARD_WRAP") == 0)
            options |= HTML_HARD_WRAP;
         else if (strcasecmp(CHAR(STRING_ELT(Soptions,i)),
                        "USE_XHTML") == 0)
            options |= HTML_USE_XHTML;
         else if (strcasecmp(CHAR(STRING_ELT(Soptions,i)),
                        "ESCAPE") == 0)
            options |= HTML_ESCAPE;
         else if (strcasecmp(CHAR(STRING_ELT(Soptions,i)),
                        "SMARTYPANTS") == 0)
            smarty = TRUE;
      }
   }

   htmlbuf = bufnew(OUTPUT_UNIT);
   if (!htmlbuf)
   {
      RMD_WARNING_NOMEM;
      return FALSE;
   }

   if (toc==TRUE)
   {
      struct buf *tocbuf = bufnew(OUTPUT_UNIT);

      if (!tocbuf)
      {
         RMD_WARNING_NOMEM;
         return FALSE;
      }

      sdhtml_toc_renderer(&callbacks, &renderopt);
      markdown = sd_markdown_new(exts,16,&callbacks,(void *)&renderopt);
      if (!markdown)
      {
         RMD_WARNING_NOMEM;
         return FALSE;
      }
      
      sd_markdown_render(tocbuf, ib->data, ib->size, markdown);
      sd_markdown_free(markdown);

      bufputs(htmlbuf,"<div id=\"toc\">\n");
      bufputs(htmlbuf,"<div id=\"toc_header\">Table of Contents</div>\n");
      bufput(htmlbuf,tocbuf->data,tocbuf->size);
      bufputs(htmlbuf,"</div>\n");
      bufputs(htmlbuf,"\n");
      bufrelease(tocbuf);
   }

   sdhtml_renderer(&callbacks, &renderopt, options);

   markdown = sd_markdown_new(exts,16,&callbacks,(void *)&renderopt);
   if (!markdown)
   {
      RMD_WARNING_NOMEM;
      return FALSE;
   }

   sd_markdown_render(htmlbuf, ib->data, ib->size, markdown);

   sd_markdown_free(markdown);

   if (smarty==TRUE)
   {
      struct buf *smartybuf = bufnew(OUTPUT_UNIT);
      if (!smartybuf)
      {
         RMD_WARNING_NOMEM;
         return FALSE;
      }
      sdhtml_smartypants(smartybuf,htmlbuf->data,htmlbuf->size);
      bufrelease(htmlbuf);
      htmlbuf = smartybuf;
   }

   bufput(ob,htmlbuf->data,htmlbuf->size);

   bufrelease(htmlbuf);

   return TRUE;
}
Exemple #30
0
static PyObject *
snudown_md(PyObject *self, PyObject *args, PyObject *kwargs)
{
	static char *kwlist[] = {"text", "nofollow", "target", "toc_id_prefix", "renderer", "enable_toc", NULL};

	struct buf ib, *ob;
	PyObject *py_result;
	const char* result_text;
	int renderer = RENDERER_USERTEXT;
	int enable_toc = 0;
	struct snudown_renderer _snudown;
	int nofollow = 0;
	char* target = NULL;
	char* toc_id_prefix = NULL;
	unsigned int flags;

	memset(&ib, 0x0, sizeof(struct buf));

	/* Parse arguments */
	if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s#|izzii", kwlist,
				&ib.data, &ib.size, &nofollow,
				&target, &toc_id_prefix, &renderer, &enable_toc)) {
		return NULL;
	}

	if (renderer < 0 || renderer >= RENDERER_COUNT) {
		PyErr_SetString(PyExc_ValueError, "Invalid renderer");
		return NULL;
	}

	_snudown = sundown[renderer];

	struct snudown_renderopt *options = &(_snudown.state->options);
	options->nofollow = nofollow;
	options->target = target;

	/* Output buffer */
	ob = bufnew(128);

	flags = options->html.flags;

	if (enable_toc) {
		_snudown.toc_state->options.html.toc_id_prefix = toc_id_prefix;
		sd_markdown_render(ob, ib.data, ib.size, _snudown.toc_renderer);
		_snudown.toc_state->options.html.toc_id_prefix = NULL;

		options->html.flags |= HTML_TOC;
	}

	options->html.toc_id_prefix = toc_id_prefix;

	/* do the magic */
	sd_markdown_render(ob, ib.data, ib.size, _snudown.main_renderer);

	options->html.toc_id_prefix = NULL;
	options->html.flags = flags;

	/* make a Python string */
	result_text = "";
	if (ob->data)
		result_text = (const char*)ob->data;
	py_result = Py_BuildValue("s#", result_text, (int)ob->size);

	/* Cleanup */
	bufrelease(ob);
	return py_result;
}