Segregate markdown utilities to discordmd package

This commit is contained in:
ayntgl 2022-10-24 16:24:39 +05:30
parent 31bbb86a2d
commit 02a8dbd740
4 changed files with 31 additions and 23 deletions

24
discordmd/discordmd.go Normal file
View file

@ -0,0 +1,24 @@
package discordmd
import (
"regexp"
)
var (
boldRegex = regexp.MustCompile(`(?ms)\*\*(.*?)\*\*`)
italicRegex = regexp.MustCompile(`(?ms)\*(.*?)\*`)
underlineRegex = regexp.MustCompile(`(?ms)__(.*?)__`)
strikeThroughRegex = regexp.MustCompile(`(?ms)~~(.*?)~~`)
)
// Parse parses Discord-flavored markdown to tview's [Color Tags].
//
// [Color Tags]: https://pkg.go.dev/github.com/rivo/tview#hdr-Colors
func Parse(md string) string {
md = boldRegex.ReplaceAllString(md, "[::b]$1[::-]")
md = italicRegex.ReplaceAllString(md, "[::i]$1[::-]")
md = underlineRegex.ReplaceAllString(md, "[::u]$1[::-]")
md = strikeThroughRegex.ReplaceAllString(md, "[::s]$1[::-]")
return md
}

View file

@ -5,6 +5,7 @@ import (
"strings"
"time"
"github.com/ayntgl/discordo/discordmd"
"github.com/diamondburned/arikawa/v3/discord"
)
@ -93,7 +94,7 @@ func buildReferencedMessage(b *strings.Builder, rm *discord.Message, clientID di
if rm.Content != "" {
rm.Content = buildMentions(rm.Content, rm.Mentions, clientID)
b.WriteString(parseMarkdown(rm.Content))
b.WriteString(discordmd.Parse(rm.Content))
}
b.WriteString("[::-]")
@ -104,7 +105,7 @@ func buildReferencedMessage(b *strings.Builder, rm *discord.Message, clientID di
func buildContent(b *strings.Builder, m discord.Message, clientID discord.UserID) {
if m.Content != "" {
m.Content = buildMentions(m.Content, m.Mentions, clientID)
b.WriteString(parseMarkdown(m.Content))
b.WriteString(discordmd.Parse(m.Content))
}
}
@ -147,7 +148,7 @@ func buildEmbeds(b *strings.Builder, es []discord.Embed) {
embedBuilder.WriteByte('\n')
}
embedBuilder.WriteString(parseMarkdown(e.Description))
embedBuilder.WriteString(discordmd.Parse(e.Description))
}
if len(e.Fields) != 0 {
@ -161,7 +162,7 @@ func buildEmbeds(b *strings.Builder, es []discord.Embed) {
embedBuilder.WriteString(ef.Name)
embedBuilder.WriteString("[::-]")
embedBuilder.WriteByte('\n')
embedBuilder.WriteString(parseMarkdown(ef.Value))
embedBuilder.WriteString(discordmd.Parse(ef.Value))
if i != len(e.Fields)-1 {
embedBuilder.WriteString("\n\n")

View file

@ -3,6 +3,7 @@ package ui
import (
"log"
"github.com/ayntgl/discordo/discordmd"
"github.com/diamondburned/arikawa/v3/discord"
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
@ -43,7 +44,7 @@ func newMessagesView(app *Application) *MessagesView {
func (v *MessagesView) setTitle(c *discord.Channel) {
title := channelToString(*c)
if c.Topic != "" {
title += " - " + parseMarkdown(c.Topic)
title += " - " + discordmd.Parse(c.Topic)
}
v.SetTitle(title)

View file

@ -1,30 +1,12 @@
package ui
import (
"regexp"
"strings"
"github.com/diamondburned/arikawa/v3/discord"
"github.com/diamondburned/arikawa/v3/state"
)
var (
boldRegex = regexp.MustCompile(`(?ms)\*\*(.*?)\*\*`)
italicRegex = regexp.MustCompile(`(?ms)\*(.*?)\*`)
underlineRegex = regexp.MustCompile(`(?ms)__(.*?)__`)
strikeThroughRegex = regexp.MustCompile(`(?ms)~~(.*?)~~`)
)
func parseMarkdown(md string) string {
var res string
res = boldRegex.ReplaceAllString(md, "[::b]$1[::-]")
res = italicRegex.ReplaceAllString(res, "[::i]$1[::-]")
res = underlineRegex.ReplaceAllString(res, "[::u]$1[::-]")
res = strikeThroughRegex.ReplaceAllString(res, "[::s]$1[::-]")
return res
}
func channelToString(c discord.Channel) string {
var repr string