mirror of https://github.com/hrfee/jfa-go
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.4 KiB
56 lines
1.4 KiB
package main
|
|
|
|
import (
|
|
"strings"
|
|
|
|
stripmd "github.com/writeas/go-strip-markdown"
|
|
)
|
|
|
|
func stripMarkdown(md string) string {
|
|
// Search for markdown-formatted urls, and replace them with just the url, then use a library to strip any traces of markdown. You'll need some eyebleach after this.
|
|
foundOpenSquare := false
|
|
openSquare := -1
|
|
openBracket := -1
|
|
closeBracket := -1
|
|
openSquares := []int{}
|
|
closeBrackets := []int{}
|
|
links := []string{}
|
|
foundOpen := false
|
|
for i, c := range md {
|
|
if !foundOpenSquare && !foundOpen && c != '[' && c != ']' {
|
|
continue
|
|
}
|
|
if c == '[' && md[i-1] != '!' {
|
|
foundOpenSquare = true
|
|
openSquare = i
|
|
} else if c == ']' {
|
|
if md[i+1] == '(' {
|
|
foundOpenSquare = false
|
|
foundOpen = true
|
|
openBracket = i + 1
|
|
continue
|
|
}
|
|
} else if c == ')' {
|
|
closeBracket = i
|
|
openSquares = append(openSquares, openSquare)
|
|
closeBrackets = append(closeBrackets, closeBracket)
|
|
links = append(links, md[openBracket+1:closeBracket])
|
|
openBracket = -1
|
|
closeBracket = -1
|
|
openSquare = -1
|
|
foundOpenSquare = false
|
|
foundOpen = false
|
|
}
|
|
}
|
|
fullLinks := make([]string, len(openSquares))
|
|
for i := range openSquares {
|
|
if openSquares[i] != -1 && closeBrackets[i] != -1 {
|
|
fullLinks[i] = md[openSquares[i] : closeBrackets[i]+1]
|
|
}
|
|
}
|
|
for i, _ := range openSquares {
|
|
md = strings.Replace(md, fullLinks[i], links[i], 1)
|
|
}
|
|
return strings.TrimPrefix(strings.TrimSuffix(stripmd.Strip(md), "</p>"), "<p>")
|
|
}
|