Merge consecutive text nodes when inspecting markdown (#9112)
* Fix assertion order
expected/actual were in wrong order, resulting in misleading output in
case of failing tests
* Merge consesutive markdown text nodes
This ensures that parser quirks such as "hello!" being parsed as
two separate nodes ("hello" and "!") are not exposed to code inspecting
a markdown strings.
Этот коммит содержится в:
коммит произвёл
Joram Wilander
родитель
940d0bbbc2
Коммит
88eef609ab
@@ -476,6 +476,40 @@ func ParseInlines(markdown string, ranges []Range, referenceDefinitions []*Refer
|
||||
return newInlineParser(markdown, ranges, referenceDefinitions).Parse()
|
||||
}
|
||||
|
||||
func MergeInlineText(inlines []Inline) []Inline {
|
||||
var ret []Inline
|
||||
for i, v := range inlines {
|
||||
// always add first node
|
||||
if i == 0 {
|
||||
ret = append(ret, v)
|
||||
continue
|
||||
}
|
||||
// not a text node? nothing to merge
|
||||
text, ok := v.(*Text)
|
||||
if !ok {
|
||||
ret = append(ret, v)
|
||||
continue
|
||||
}
|
||||
// previous node is not a text node? nothing to merge
|
||||
prevText, ok := ret[len(ret)-1].(*Text)
|
||||
if !ok {
|
||||
ret = append(ret, v)
|
||||
continue
|
||||
}
|
||||
// previous node is not right before this one
|
||||
if prevText.Range.End != text.Range.Position {
|
||||
ret = append(ret, v)
|
||||
continue
|
||||
}
|
||||
// we have two consecutive text nodes
|
||||
ret[len(ret)-1] = &Text{
|
||||
Text: prevText.Text + text.Text,
|
||||
Range: Range{prevText.Range.Position, text.Range.End},
|
||||
}
|
||||
}
|
||||
return ret
|
||||
}
|
||||
|
||||
func Unescape(markdown string) string {
|
||||
ret := ""
|
||||
|
||||
|
||||
Ссылка в новой задаче
Block a user