Refactor markdown render (#32728)
Follow up recent render system refactoring PRs (split test code), and fine tune the math render (added some new cases)
This commit is contained in:
parent
f7f68e4cc0
commit
0f18046df4
6 changed files with 268 additions and 166 deletions
|
@ -26,7 +26,6 @@ var defaultDualDollarParser = &inlineParser{
|
|||
end: []byte{'$', '$'},
|
||||
}
|
||||
|
||||
// NewInlineDollarParser returns a new inline parser
|
||||
func NewInlineDollarParser() parser.InlineParser {
|
||||
return defaultInlineDollarParser
|
||||
}
|
||||
|
@ -40,7 +39,6 @@ var defaultInlineBracketParser = &inlineParser{
|
|||
end: []byte{'\\', ')'},
|
||||
}
|
||||
|
||||
// NewInlineDollarParser returns a new inline parser
|
||||
func NewInlineBracketParser() parser.InlineParser {
|
||||
return defaultInlineBracketParser
|
||||
}
|
||||
|
@ -81,35 +79,29 @@ func (parser *inlineParser) Parse(parent ast.Node, block text.Reader, pc parser.
|
|||
opener := len(parser.start)
|
||||
|
||||
// Now look for an ending line
|
||||
ender := opener
|
||||
for {
|
||||
pos := bytes.Index(line[ender:], parser.end)
|
||||
if pos < 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
ender += pos
|
||||
|
||||
// Now we want to check the character at the end of our parser section
|
||||
// that is ender + len(parser.end) and check if char before ender is '\'
|
||||
pos = ender + len(parser.end)
|
||||
if len(line) <= pos {
|
||||
ender := -1
|
||||
for i := opener; i < len(line); i++ {
|
||||
if bytes.HasPrefix(line[i:], parser.end) {
|
||||
succeedingCharacter := byte(0)
|
||||
if i+len(parser.end) < len(line) {
|
||||
succeedingCharacter = line[i+len(parser.end)]
|
||||
}
|
||||
// check valid ending character
|
||||
isValidEndingChar := isPunctuation(succeedingCharacter) || isBracket(succeedingCharacter) ||
|
||||
succeedingCharacter == ' ' || succeedingCharacter == '\n' || succeedingCharacter == 0
|
||||
if !isValidEndingChar {
|
||||
break
|
||||
}
|
||||
ender = i
|
||||
break
|
||||
}
|
||||
suceedingCharacter := line[pos]
|
||||
// check valid ending character
|
||||
if !isPunctuation(suceedingCharacter) &&
|
||||
!(suceedingCharacter == ' ') &&
|
||||
!(suceedingCharacter == '\n') &&
|
||||
!isBracket(suceedingCharacter) {
|
||||
return nil
|
||||
if line[i] == '\\' {
|
||||
i++
|
||||
continue
|
||||
}
|
||||
if line[ender-1] != '\\' {
|
||||
break
|
||||
}
|
||||
|
||||
// move the pointer onwards
|
||||
ender += len(parser.end)
|
||||
}
|
||||
if ender == -1 {
|
||||
return nil
|
||||
}
|
||||
|
||||
block.Advance(opener)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue