some fixes

This commit is contained in:
2026-01-16 15:34:43 +03:00
parent b88715d6d3
commit 21623788c6
3 changed files with 71 additions and 8 deletions

View File

@@ -39,9 +39,9 @@ func Map[T, V any](ts []T, fn func(T) V) []V {
}
func EscapeMarkdown(s string) string {
s = strings.ReplaceAll(s, "_", "\\_")
s = strings.ReplaceAll(s, "*", "\\*")
s = strings.ReplaceAll(s, "[", "\\[")
s = strings.ReplaceAll(s, "_", `\_`)
s = strings.ReplaceAll(s, "*", `\*`)
s = strings.ReplaceAll(s, "[", `\[`)
return strings.ReplaceAll(s, "`", "\\`")
}
@@ -52,3 +52,57 @@ func EscapeMarkdownV2(s string) string {
}
return s
}
func GetUnclosedTag(markdown string) string {
// order is important!
var tags = []string{
"```",
"`",
"*",
"_",
}
var currentTag = ""
markdownRunes := []rune(markdown)
var i = 0
outer:
for i < len(markdownRunes) {
// skip escaped characters (only outside tags)
if markdownRunes[i] == '\\' && currentTag == "" {
i += 2
continue
}
if currentTag != "" {
if strings.HasPrefix(string(markdownRunes[i:]), currentTag) {
// turn a tag off
i += len(currentTag)
currentTag = ""
continue
}
} else {
for _, tag := range tags {
if strings.HasPrefix(string(markdownRunes[i:]), tag) {
// turn a tag on
currentTag = tag
i += len(currentTag)
continue outer
}
}
}
i++
}
return currentTag
}
func IsValid(markdown string) bool {
return GetUnclosedTag(markdown) == ""
}
func FixMarkdown(markdown string) string {
tag := GetUnclosedTag(markdown)
if tag == "" {
return markdown
}
return markdown + tag
}