summaryrefslogtreecommitdiff
path: root/internal/text/common.go
diff options
context:
space:
mode:
authorLibravatar Autumn! <86073772+autumnull@users.noreply.github.com>2023-02-03 10:58:58 +0000
committerLibravatar GitHub <noreply@github.com>2023-02-03 11:58:58 +0100
commit49beb17a8fbdbf3517c103a477a5459a3bba404d (patch)
tree364c82d4089c75d3b95a5d78fd31b33d91b30b59 /internal/text/common.go
parent[bugfix] Read Bookwyrm Articles more thoroughly (#1410) (diff)
downloadgotosocial-49beb17a8fbdbf3517c103a477a5459a3bba404d.tar.xz
[chore] Text formatting overhaul (#1406)
* Implement goldmark debug print for hashtags and mentions * Minify HTML in FromPlain * Convert plaintext status parser to goldmark * Move mention/tag/emoji finding logic into formatter * Combine mention and hashtag boundary characters * Normalize unicode when rendering hashtags
Diffstat (limited to 'internal/text/common.go')
-rw-r--r--internal/text/common.go112
1 files changed, 0 insertions, 112 deletions
diff --git a/internal/text/common.go b/internal/text/common.go
deleted file mode 100644
index 2293ca3fe..000000000
--- a/internal/text/common.go
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- GoToSocial
- Copyright (C) 2021-2023 GoToSocial Authors admin@gotosocial.org
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU Affero General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-package text
-
-import (
- "bytes"
- "context"
- "strings"
- "unicode"
-
- "github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
- "github.com/superseriousbusiness/gotosocial/internal/log"
- "github.com/superseriousbusiness/gotosocial/internal/regexes"
- "github.com/superseriousbusiness/gotosocial/internal/util"
-)
-
-func (f *formatter) ReplaceTags(ctx context.Context, in string, tags []*gtsmodel.Tag) string {
- spans := util.FindHashtagSpansInText(in)
-
- if len(spans) == 0 {
- return in
- }
-
- var b strings.Builder
- i := 0
-
-spans:
- for _, t := range spans {
- b.WriteString(in[i:t.First])
- i = t.Second
- tagAsEntered := in[t.First+1 : t.Second]
-
- for _, tag := range tags {
- if strings.EqualFold(tagAsEntered, tag.Name) {
- // replace the #tag with the formatted tag content
- // `<a href="tag.URL" class="mention hashtag" rel="tag">#<span>tagAsEntered</span></a>
- b.WriteString(`<a href="`)
- b.WriteString(tag.URL)
- b.WriteString(`" class="mention hashtag" rel="tag">#<span>`)
- b.WriteString(tagAsEntered)
- b.WriteString(`</span></a>`)
- continue spans
- }
- }
-
- b.WriteString(in[t.First:t.Second])
- }
-
- // Get the last bits.
- i = spans[len(spans)-1].Second
- b.WriteString(in[i:])
-
- return b.String()
-}
-
-func (f *formatter) ReplaceMentions(ctx context.Context, in string, mentions []*gtsmodel.Mention) string {
- return regexes.ReplaceAllStringFunc(regexes.MentionFinder, in, func(match string, buf *bytes.Buffer) string {
- // we have a match, trim any spaces
- matchTrimmed := strings.TrimSpace(match)
-
- // check through mentions to find what we're matching
- for _, menchie := range mentions {
- if strings.EqualFold(matchTrimmed, menchie.NameString) {
- // make sure we have an account attached to this mention
- if menchie.TargetAccount == nil {
- a, err := f.db.GetAccountByID(ctx, menchie.TargetAccountID)
- if err != nil {
- log.Errorf("error getting account with id %s from the db: %s", menchie.TargetAccountID, err)
- return match
- }
- menchie.TargetAccount = a
- }
-
- // The mention's target is our target
- targetAccount := menchie.TargetAccount
-
- // Add any dropped space from match
- if unicode.IsSpace(rune(match[0])) {
- buf.WriteByte(match[0])
- }
-
- // replace the mention with the formatted mention content
- // <span class="h-card"><a href="targetAccount.URL" class="u-url mention">@<span>targetAccount.Username</span></a></span>
- buf.WriteString(`<span class="h-card"><a href="`)
- buf.WriteString(targetAccount.URL)
- buf.WriteString(`" class="u-url mention">@<span>`)
- buf.WriteString(targetAccount.Username)
- buf.WriteString(`</span></a></span>`)
- return buf.String()
- }
- }
-
- // the match wasn't in the list of mentions for whatever reason, so just return the match as we found it so nothing changes
- return match
- })
-}