Merge pull request #161 from rtfb/issue-146 Issue 146
Vytautas Ĺ altenis vytas@rtfb.lt
Wed, 06 May 2015 15:30:31 +0300
3 files changed,
31 insertions(+),
35 deletions(-)
M
block.go
→
block.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.go
→
block_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) }