示例#1
0
func htmlFromMarkdown(md string) string {
	if len(md) == 0 {
		return md
	}

	// Render markdown to HTML
	//
	htmlFlags := 0 |
		blackfriday.HTML_USE_XHTML |
		blackfriday.HTML_USE_SMARTYPANTS |
		blackfriday.HTML_SMARTYPANTS_FRACTIONS |
		blackfriday.HTML_SMARTYPANTS_LATEX_DASHES

	markdownExtensions := 0 |
		blackfriday.EXTENSION_NO_INTRA_EMPHASIS |
		blackfriday.EXTENSION_FENCED_CODE |
		blackfriday.EXTENSION_STRIKETHROUGH |
		blackfriday.EXTENSION_SPACE_HEADERS

	// Leading whitespace can trigger Markdown features like
	// code blocks so let's avoid that by trimming the input
	//
	ret := string(blackfriday.MarkdownOptions(
		[]byte(strings.TrimSpace(md)),
		blackfriday.HtmlRenderer(htmlFlags, "", ""),
		blackfriday.Options{Extensions: markdownExtensions}))

	// Remove wrapping paragraph tags
	//
	ret = strings.TrimSpace(ret)
	if strings.HasPrefix(ret, "<p>") && strings.HasSuffix(ret, "</p>") {
		ret = ret[3 : len(ret)-4]
	}

	// Reinstate possible leading/trailing whitespace
	// (the markdown compiler will have removed it)
	//
	if leadingSpaces := util.LeadingWhitespace(md); 0 < len(leadingSpaces) {
		ret = leadingSpaces + ret
	}
	if trailingSpaces := util.TrailingWhitespace(md); 0 < len(trailingSpaces) {
		ret = ret + trailingSpaces
	}

	return ret
}
示例#2
0
func TestTrailingWhitespace(t *testing.T) {
	ass := func(expected string, given string) {
		assert.Equal(t, expected, util.TrailingWhitespace(given), given)
	}

	ass("", "")
	ass("", "Moro")
	ass("", " Moro")
	ass("", "   Moro")
	ass("", ".   Moro")
	ass("", "xx   Moro")
	ass(" ", "Moro ")
	ass("  ", "Moro  ")
	ass("\t", "Moro\t")
	ass(" \t ", "Moro \t ")
	ass("", "Moro  xx")
}