commit
c6be4fadb1
49
block.go
49
block.go
|
@ -196,11 +196,8 @@ func (p *parser) prefixHeader(out *bytes.Buffer, data []byte) int {
|
|||
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 @@ func (p *parser) prefixHeader(out *bytes.Buffer, data []byte) int {
|
|||
}
|
||||
}
|
||||
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) prefixHeader(out *bytes.Buffer, data []byte) int {
|
|||
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 @@ func (p *parser) isUnderlinedHeader(data []byte) int {
|
|||
|
||||
// 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 @@ func (p *parser) isFencedCode(data []byte, syntax **string, oldmarker string) (s
|
|||
|
||||
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 @@ func (p *parser) isFencedCode(data []byte, syntax **string, oldmarker string) (s
|
|||
*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 @@ func (p *parser) fencedCode(out *bytes.Buffer, data []byte, doRender bool) int {
|
|||
}
|
||||
|
||||
// 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 @@ func (p *parser) table(out *bytes.Buffer, data []byte) int {
|
|||
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 @@ func (p *parser) tableHeader(out *bytes.Buffer, data []byte) (size int, columns
|
|||
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
|
||||
|
|
|
@ -132,6 +132,15 @@ func TestPrefixHeaderNoExtensions(t *testing.T) {
|
|||
"* 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)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue