mirror of
https://github.com/yuin/goldmark
synced 2025-03-04 23:04:52 +00:00
fix logic for soft line breaks
This commit is contained in:
parent
155754ef6e
commit
9568b57c4b
1 changed files with 11 additions and 5 deletions
|
|
@ -1129,21 +1129,27 @@ func (p *parser) parseBlock(block text.BlockReader, parent ast.Node, pc Context)
|
|||
break
|
||||
}
|
||||
lineLength := len(line)
|
||||
softLinebreak := false
|
||||
hardlineBreak := false
|
||||
softLinebreak := line[lineLength-1] == '\n'
|
||||
if lineLength >= 2 && line[lineLength-2] == '\\' && softLinebreak { // ends with \\n
|
||||
hasNewLine := line[lineLength-1] == '\n'
|
||||
if lineLength >= 2 && line[lineLength-2] == '\\' && hasNewLine { // ends with \\n
|
||||
lineLength -= 2
|
||||
hardlineBreak = true
|
||||
|
||||
} else if lineLength >= 3 && line[lineLength-3] == '\\' && line[lineLength-2] == '\r' && softLinebreak { // ends with \\r\n
|
||||
} else if lineLength >= 3 && line[lineLength-3] == '\\' && line[lineLength-2] == '\r' && hasNewLine { // ends with \\r\n
|
||||
lineLength -= 3
|
||||
hardlineBreak = true
|
||||
} else if lineLength >= 3 && line[lineLength-3] == ' ' && line[lineLength-2] == ' ' && softLinebreak { // ends with [space][space]\n
|
||||
} else if lineLength >= 3 && line[lineLength-3] == ' ' && line[lineLength-2] == ' ' && hasNewLine { // ends with [space][space]\n
|
||||
lineLength -= 3
|
||||
hardlineBreak = true
|
||||
} else if lineLength >= 4 && line[lineLength-4] == ' ' && line[lineLength-3] == ' ' && line[lineLength-2] == '\r' && softLinebreak { // ends with [space][space]\r\n
|
||||
} else if lineLength >= 4 && line[lineLength-4] == ' ' && line[lineLength-3] == ' ' && line[lineLength-2] == '\r' && hasNewLine { // ends with [space][space]\r\n
|
||||
lineLength -= 4
|
||||
hardlineBreak = true
|
||||
} else if hasNewLine {
|
||||
// If the line ends with a newline character, but it is not a hardlineBreak, then it is a softLinebreak
|
||||
// If the line ends with a hardlineBreak, then it cannot end with a softLinebreak
|
||||
// See https://spec.commonmark.org/0.29/#soft-line-breaks
|
||||
softLinebreak = true
|
||||
}
|
||||
|
||||
l, startPosition := block.Position()
|
||||
|
|
|
|||
Loading…
Reference in a new issue