all repos — grayfriday @ c6be4fadb114a6855d6c6c00235f5b5dcd80d0e2

blackfriday fork with a few changes

Merge pull request #161 from rtfb/issue-146

Issue 146
Vytautas Ĺ altenis vytas@rtfb.lt
Wed, 06 May 2015 15:30:31 +0300
commit

c6be4fadb114a6855d6c6c00235f5b5dcd80d0e2

parent

d3270c47aca4443007405354152a2a1c478ac6b9

3 files changed, 31 insertions(+), 35 deletions(-)

jump to
M block.goblock.go

@@ -196,11 +196,8 @@ level := 0

for level < 6 && data[level] == '#' { level++ } - i, end := 0, 0 - for i = level; data[i] == ' '; i++ { - } - for end = i; data[end] != '\n'; end++ { - } + i := skipChar(data, level, ' ') + end := skipUntilChar(data, i, '\n') skip := end id := "" if p.flags&EXTENSION_HEADER_IDS != 0 {

@@ -221,6 +218,9 @@ }

} } for end > 0 && data[end-1] == '#' { + if isBackslashEscaped(data, end-1) { + break + } end-- } for end > 0 && data[end-1] == ' ' {

@@ -242,13 +242,8 @@

func (p *parser) isUnderlinedHeader(data []byte) int { // test of level 1 header if data[0] == '=' { - i := 1 - for data[i] == '=' { - i++ - } - for data[i] == ' ' { - i++ - } + i := skipChar(data, 1, '=') + i = skipChar(data, i, ' ') if data[i] == '\n' { return 1 } else {

@@ -258,13 +253,8 @@ }

// test of level 2 header if data[0] == '-' { - i := 1 - for data[i] == '-' { - i++ - } - for data[i] == ' ' { - i++ - } + i := skipChar(data, 1, '-') + i = skipChar(data, i, ' ') if data[i] == '\n' { return 2 } else {

@@ -593,10 +583,7 @@ }

if syntax != nil { syn := 0 - - for i < len(data) && data[i] == ' ' { - i++ - } + i = skipChar(data, i, ' ') if i >= len(data) { return

@@ -640,9 +627,7 @@ language := string(data[syntaxStart : syntaxStart+syn])

*syntax = &language } - for i < len(data) && data[i] == ' ' { - i++ - } + i = skipChar(data, i, ' ') if i >= len(data) || data[i] != '\n' { return }

@@ -671,11 +656,7 @@ break

} // copy the current line - end := beg - for end < len(data) && data[end] != '\n' { - end++ - } - end++ + end := skipUntilChar(data, beg, '\n') + 1 // did we reach the end of the buffer without a closing marker? if end >= len(data) {

@@ -733,7 +714,7 @@

return i } -// check if the specified position is preceeded by an odd number of backslashes +// check if the specified position is preceded by an odd number of backslashes func isBackslashEscaped(data []byte, i int) bool { backslashes := 0 for i-backslashes-1 >= 0 && data[i-backslashes-1] == '\\' {

@@ -778,9 +759,7 @@

if data[i] == '|' && !isBackslashEscaped(data, i) { i++ } - for data[i] == ' ' { - i++ - } + i = skipChar(data, i, ' ') // each column header is of form: / *:?-+:? *|/ with # dashes + # colons >= 3 // and trailing | optional on last column
M block_test.goblock_test.go

@@ -132,6 +132,15 @@

"* List\n * Nested list\n # Nested header\n", "<ul>\n<li><p>List</p>\n\n<ul>\n<li><p>Nested list</p>\n\n" + "<h1>Nested header</h1></li>\n</ul></li>\n</ul>\n", + + "#Header 1 \\#\n", + "<h1>Header 1 #</h1>\n", + + "#Header 1 \\# foo\n", + "<h1>Header 1 # foo</h1>\n", + + "#Header 1 #\\##\n", + "<h1>Header 1 ##</h1>\n", } doTestsBlock(t, tests, 0) }
M html.gohtml.go

@@ -867,6 +867,14 @@ }

return i } +func skipChar(data []byte, start int, char byte) int { + i := start + for i < len(data) && data[i] == char { + i++ + } + return i +} + func doubleSpace(out *bytes.Buffer) { if out.Len() > 0 { out.WriteByte('\n')