From 3a9946166285b0dbfe632f15d44191e7f9c0776c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vytautas=20=C5=A0altenis?= Date: Sun, 21 Sep 2014 16:29:24 +0300 Subject: [PATCH 1/2] Make sure relative URLs are preserved Add tests to make sure we don't break relative URLs again. Extracted common html flags and common extensions for easy access from tests. Closes issue #104, which was fixed as a side effect of cf6bfc9. --- inline_test.go | 7 +++++++ markdown.go | 41 +++++++++++++++++++++++------------------ 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/inline_test.go b/inline_test.go index 58848cb..2ffda8b 100644 --- a/inline_test.go +++ b/inline_test.go @@ -42,6 +42,7 @@ func doLinkTestsInline(t *testing.T, tests []string) { params := HtmlRendererParameters{AbsolutePrefix: prefix} transformTests := transformLinks(tests, prefix) doTestsInlineParam(t, transformTests, 0, 0, params) + doTestsInlineParam(t, transformTests, 0, commonHtmlFlags(), params) } func doSafeTestsInline(t *testing.T, tests []string) { @@ -354,6 +355,12 @@ func TestInlineLink(t *testing.T) { "![foo with a title](/bar/ title with no quotes)\n", "

\"foo\n

\n", + "![](img.jpg)\n", + "

\"\"\n

\n", + + "[link](url)\n", + "

link

\n", + "![foo]()\n", "

![foo]()

\n", diff --git a/markdown.go b/markdown.go index 290370e..4b85e52 100644 --- a/markdown.go +++ b/markdown.go @@ -212,6 +212,27 @@ func MarkdownBasic(input []byte) []byte { return Markdown(input, renderer, extensions) } +func commonHtmlFlags() int { + htmlFlags := 0 + htmlFlags |= HTML_USE_XHTML + htmlFlags |= HTML_USE_SMARTYPANTS + htmlFlags |= HTML_SMARTYPANTS_FRACTIONS + htmlFlags |= HTML_SMARTYPANTS_LATEX_DASHES + return htmlFlags +} + +func commonExtensions() int { + extensions := 0 + extensions |= EXTENSION_NO_INTRA_EMPHASIS + extensions |= EXTENSION_TABLES + extensions |= EXTENSION_FENCED_CODE + extensions |= EXTENSION_AUTOLINK + extensions |= EXTENSION_STRIKETHROUGH + extensions |= EXTENSION_SPACE_HEADERS + extensions |= EXTENSION_HEADER_IDS + return extensions +} + // Call Markdown with most useful extensions enabled // MarkdownCommon is a convenience function for simple rendering. // It processes markdown input with common extensions enabled, including: @@ -233,24 +254,8 @@ func MarkdownBasic(input []byte) []byte { // * Custom Header IDs func MarkdownCommon(input []byte) []byte { // set up the HTML renderer - htmlFlags := 0 - htmlFlags |= HTML_USE_XHTML - htmlFlags |= HTML_USE_SMARTYPANTS - htmlFlags |= HTML_SMARTYPANTS_FRACTIONS - htmlFlags |= HTML_SMARTYPANTS_LATEX_DASHES - renderer := HtmlRenderer(htmlFlags, "", "") - - // set up the parser - extensions := 0 - extensions |= EXTENSION_NO_INTRA_EMPHASIS - extensions |= EXTENSION_TABLES - extensions |= EXTENSION_FENCED_CODE - extensions |= EXTENSION_AUTOLINK - extensions |= EXTENSION_STRIKETHROUGH - extensions |= EXTENSION_SPACE_HEADERS - extensions |= EXTENSION_HEADER_IDS - - return Markdown(input, renderer, extensions) + renderer := HtmlRenderer(commonHtmlFlags(), "", "") + return Markdown(input, renderer, commonExtensions()) } // Markdown is the main rendering function. From 427a14caf2d7988c34bf172c1822655fe7608444 Mon Sep 17 00:00:00 2001 From: Vytautas Saltenis Date: Mon, 22 Sep 2014 11:44:58 +0300 Subject: [PATCH 2/2] Convert silly funcs to consts --- inline_test.go | 2 +- markdown.go | 40 +++++++++++++++++----------------------- 2 files changed, 18 insertions(+), 24 deletions(-) diff --git a/inline_test.go b/inline_test.go index 2ffda8b..798fed4 100644 --- a/inline_test.go +++ b/inline_test.go @@ -42,7 +42,7 @@ func doLinkTestsInline(t *testing.T, tests []string) { params := HtmlRendererParameters{AbsolutePrefix: prefix} transformTests := transformLinks(tests, prefix) doTestsInlineParam(t, transformTests, 0, 0, params) - doTestsInlineParam(t, transformTests, 0, commonHtmlFlags(), params) + doTestsInlineParam(t, transformTests, 0, commonHtmlFlags, params) } func doSafeTestsInline(t *testing.T, tests []string) { diff --git a/markdown.go b/markdown.go index 4b85e52..0d13459 100644 --- a/markdown.go +++ b/markdown.go @@ -41,6 +41,21 @@ const ( EXTENSION_NO_EMPTY_LINE_BEFORE_BLOCK // No need to insert an empty line to start a (code, quote, order list, unorder list)block EXTENSION_HEADER_IDS // specify header IDs with {#id} EXTENSION_TITLEBLOCK // Titleblock ala pandoc + + commonHtmlFlags = 0 | + HTML_USE_XHTML | + HTML_USE_SMARTYPANTS | + HTML_SMARTYPANTS_FRACTIONS | + HTML_SMARTYPANTS_LATEX_DASHES + + commonExtensions = 0 | + EXTENSION_NO_INTRA_EMPHASIS | + EXTENSION_TABLES | + EXTENSION_FENCED_CODE | + EXTENSION_AUTOLINK | + EXTENSION_STRIKETHROUGH | + EXTENSION_SPACE_HEADERS | + EXTENSION_HEADER_IDS ) // These are the possible flag values for the link renderer. @@ -212,27 +227,6 @@ func MarkdownBasic(input []byte) []byte { return Markdown(input, renderer, extensions) } -func commonHtmlFlags() int { - htmlFlags := 0 - htmlFlags |= HTML_USE_XHTML - htmlFlags |= HTML_USE_SMARTYPANTS - htmlFlags |= HTML_SMARTYPANTS_FRACTIONS - htmlFlags |= HTML_SMARTYPANTS_LATEX_DASHES - return htmlFlags -} - -func commonExtensions() int { - extensions := 0 - extensions |= EXTENSION_NO_INTRA_EMPHASIS - extensions |= EXTENSION_TABLES - extensions |= EXTENSION_FENCED_CODE - extensions |= EXTENSION_AUTOLINK - extensions |= EXTENSION_STRIKETHROUGH - extensions |= EXTENSION_SPACE_HEADERS - extensions |= EXTENSION_HEADER_IDS - return extensions -} - // Call Markdown with most useful extensions enabled // MarkdownCommon is a convenience function for simple rendering. // It processes markdown input with common extensions enabled, including: @@ -254,8 +248,8 @@ func commonExtensions() int { // * Custom Header IDs func MarkdownCommon(input []byte) []byte { // set up the HTML renderer - renderer := HtmlRenderer(commonHtmlFlags(), "", "") - return Markdown(input, renderer, commonExtensions()) + renderer := HtmlRenderer(commonHtmlFlags, "", "") + return Markdown(input, renderer, commonExtensions) } // Markdown is the main rendering function.