diff --git a/block.go b/block.go index 1f300b3..768c40b 100644 --- a/block.go +++ b/block.go @@ -399,23 +399,7 @@ func (p *parser) html(out *bytes.Buffer, data []byte, doRender bool) int { // HTML comment, lax form func (p *parser) htmlComment(out *bytes.Buffer, data []byte, doRender bool) int { - if data[0] != '<' || data[1] != '!' || data[2] != '-' || data[3] != '-' { - return 0 - } - - i := 5 - - // scan for an end-of-comment marker, across lines if necessary - for i < len(data) && !(data[i-2] == '-' && data[i-1] == '-' && data[i] == '>') { - i++ - } - i++ - - // no end-of-comment marker - if i >= len(data) { - return 0 - } - + i := p.inlineHtmlComment(out, data) // needs to end with a blank line if j := p.isEmpty(data[i:]); j > 0 { size := i + j @@ -429,7 +413,6 @@ func (p *parser) htmlComment(out *bytes.Buffer, data []byte, doRender bool) int } return size } - return 0 } diff --git a/block_test.go b/block_test.go index f52506f..a78a7d5 100644 --- a/block_test.go +++ b/block_test.go @@ -1401,7 +1401,19 @@ func TestTitleBlock_EXTENSION_TITLEBLOCK(t *testing.T) { "Yep, more here too\n" + "", } - doTestsBlock(t, tests, EXTENSION_TITLEBLOCK) - +} + +func TestBlockComments(t *testing.T) { + var tests = []string{ + "Some text\n\n\n", + "

Some text

\n\n\n", + + "Some text\n\n\n", + "

Some text

\n\n\n", + + "Some text\n\n\n", + "

Some text

\n\n\n", + } + doTestsBlock(t, tests, 0) } diff --git a/inline.go b/inline.go index 56d7d3a..1c3956c 100644 --- a/inline.go +++ b/inline.go @@ -553,12 +553,33 @@ func link(p *parser, out *bytes.Buffer, data []byte, offset int) int { return i } +func (p *parser) inlineHtmlComment(out *bytes.Buffer, data []byte) int { + if len(data) < 5 { + return 0 + } + if data[0] != '<' || data[1] != '!' || data[2] != '-' || data[3] != '-' { + return 0 + } + i := 5 + // scan for an end-of-comment marker, across lines if necessary + for i < len(data) && !(data[i-2] == '-' && data[i-1] == '-' && data[i] == '>') { + i++ + } + // no end-of-comment marker + if i >= len(data) { + return 0 + } + return i + 1 +} + // '<' when tags or autolinks are allowed func leftAngle(p *parser, out *bytes.Buffer, data []byte, offset int) int { data = data[offset:] altype := LINK_TYPE_NOT_AUTOLINK end := tagLength(data, &altype) - + if size := p.inlineHtmlComment(out, data); size > 0 { + end = size + } if end > 2 { if altype != LINK_TYPE_NOT_AUTOLINK { var uLink bytes.Buffer diff --git a/inline_test.go b/inline_test.go index 9f8a97e..03af41a 100644 --- a/inline_test.go +++ b/inline_test.go @@ -1000,6 +1000,35 @@ func TestFootnotesWithParameters(t *testing.T) { doTestsInlineParam(t, tests, Options{Extensions: EXTENSION_FOOTNOTES}, HTML_FOOTNOTE_RETURN_LINKS, params) } +func TestInlineComments(t *testing.T) { + var tests = []string{ + "Hello \n", + "

Hello

\n", + + "Hello ", + "

Hello

\n", + + "Hello \n", + "

Hello

\n", + + "Hello \na", + "

Hello \na

\n", + + "* list \n", + "\n", + + " comment\n", + "

comment

\n", + + "blahblah\n\nrhubarb\n", + "

blahblah\n\nrhubarb

\n", + } + doTestsInlineParam(t, tests, Options{}, HTML_USE_SMARTYPANTS, HtmlRendererParameters{}) +} + func TestSmartDoubleQuotes(t *testing.T) { var tests = []string{ "this should be normal \"quoted\" text.\n",