Kaynağa Gözat

Segregate markdown utilities to discordmd package

ayntgl 3 yıl önce
ebeveyn
işleme
02a8dbd740
4 değiştirilmiş dosya ile 31 ekleme ve 23 silme
  1. 24 0
      discordmd/discordmd.go
  2. 5 4
      ui/builder.go
  3. 2 1
      ui/messages_view.go
  4. 0 18
      ui/util.go

+ 24 - 0
discordmd/discordmd.go

@@ -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
+}

+ 5 - 4
ui/builder.go

@@ -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")

+ 2 - 1
ui/messages_view.go

@@ -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)

+ 0 - 18
ui/util.go

@@ -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