mirror of
https://github.com/yuin/goldmark
synced 2025-03-04 23:04:52 +00:00
Merge pull request #221 from stephenafamo/soft-line-break
Fix logic for soft line breaks
This commit is contained in:
commit
43353aeea4
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
|
break
|
||||||
}
|
}
|
||||||
lineLength := len(line)
|
lineLength := len(line)
|
||||||
|
softLinebreak := false
|
||||||
hardlineBreak := false
|
hardlineBreak := false
|
||||||
softLinebreak := line[lineLength-1] == '\n'
|
hasNewLine := line[lineLength-1] == '\n'
|
||||||
if lineLength >= 2 && line[lineLength-2] == '\\' && softLinebreak { // ends with \\n
|
if lineLength >= 2 && line[lineLength-2] == '\\' && hasNewLine { // ends with \\n
|
||||||
lineLength -= 2
|
lineLength -= 2
|
||||||
hardlineBreak = true
|
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
|
lineLength -= 3
|
||||||
hardlineBreak = true
|
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
|
lineLength -= 3
|
||||||
hardlineBreak = true
|
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
|
lineLength -= 4
|
||||||
hardlineBreak = true
|
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()
|
l, startPosition := block.Position()
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue