all repos — grayfriday @ a18a46c9b94395417241e528fc53478ad914c670

blackfriday fork with a few changes

Merge pull request #203 from russross/issue-136

Handle comments within a block
Vytautas Ĺ altenis vytas@rtfb.lt
Tue, 20 Oct 2015 20:45:00 +0300
commit

a18a46c9b94395417241e528fc53478ad914c670

parent

53982c119c3f1095dcb09fba8d5e5bae523d8f12

4 files changed, 65 insertions(+), 20 deletions(-)

jump to
M block.goblock.go

@@ -399,23 +399,7 @@ }

// 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 @@ p.r.BlockHtml(out, data[:end])

} return size } - return 0 }
M block_test.goblock_test.go

@@ -1401,7 +1401,19 @@ "Another title line\n" +

"Yep, more here too\n" + "</h1>", } + doTestsBlock(t, tests, EXTENSION_TITLEBLOCK) +} - doTestsBlock(t, tests, EXTENSION_TITLEBLOCK) +func TestBlockComments(t *testing.T) { + var tests = []string{ + "Some text\n\n<!-- comment -->\n", + "<p>Some text</p>\n\n<!-- comment -->\n", + "Some text\n\n<!--\n\nmultiline\ncomment\n-->\n", + "<p>Some text</p>\n\n<!--\n\nmultiline\ncomment\n-->\n", + + "Some text\n\n<!--\n\n<div><p>Commented</p>\n<span>html</span></div>\n-->\n", + "<p>Some text</p>\n\n<!--\n\n<div><p>Commented</p>\n<span>html</span></div>\n-->\n", + } + doTestsBlock(t, tests, 0) }
M inline.goinline.go

@@ -553,12 +553,33 @@

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
M inline_test.goinline_test.go

@@ -1000,6 +1000,35 @@

doTestsInlineParam(t, tests, Options{Extensions: EXTENSION_FOOTNOTES}, HTML_FOOTNOTE_RETURN_LINKS, params) } +func TestInlineComments(t *testing.T) { + var tests = []string{ + "Hello <!-- there ->\n", + "<p>Hello &lt;!&mdash; there &ndash;&gt;</p>\n", + + "Hello <!-- there -->\n", + "<p>Hello <!-- there --></p>\n", + + "Hello <!-- there -->", + "<p>Hello <!-- there --></p>\n", + + "Hello <!---->\n", + "<p>Hello <!----></p>\n", + + "Hello <!-- there -->\na", + "<p>Hello <!-- there -->\na</p>\n", + + "* list <!-- item -->\n", + "<ul>\n<li>list <!-- item --></li>\n</ul>\n", + + "<!-- Front --> comment\n", + "<p><!-- Front --> comment</p>\n", + + "blahblah\n<!--- foo -->\nrhubarb\n", + "<p>blahblah\n<!--- foo -->\nrhubarb</p>\n", + } + doTestsInlineParam(t, tests, Options{}, HTML_USE_SMARTYPANTS, HtmlRendererParameters{}) +} + func TestSmartDoubleQuotes(t *testing.T) { var tests = []string{ "this should be normal \"quoted\" text.\n",