From 49beb17a8fbdbf3517c103a477a5459a3bba404d Mon Sep 17 00:00:00 2001 From: Autumn! <86073772+autumnull@users.noreply.github.com> Date: Fri, 3 Feb 2023 10:58:58 +0000 Subject: [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 --- internal/text/link.go | 86 --------------------------------------------------- 1 file changed, 86 deletions(-) delete mode 100644 internal/text/link.go (limited to 'internal/text/link.go') diff --git a/internal/text/link.go b/internal/text/link.go deleted file mode 100644 index 2b2b45e73..000000000 --- a/internal/text/link.go +++ /dev/null @@ -1,86 +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 . -*/ - -package text - -import ( - "bytes" - "context" - "net/url" - "strings" - - "github.com/superseriousbusiness/gotosocial/internal/regexes" -) - -// FindLinks parses the given string looking for recognizable URLs (including scheme). -// It returns a list of those URLs, without changing the string, or an error if something goes wrong. -// If no URLs are found within the given string, an empty slice and nil will be returned. -func FindLinks(in string) []*url.URL { - var urls []*url.URL - - // bail already if we don't find anything - found := regexes.LinkScheme.FindAllString(in, -1) - if len(found) == 0 { - return nil - } - - urlmap := map[string]struct{}{} - - // for each string we find, we want to parse it into a URL if we can - // if we fail to parse it, just ignore this match and continue - for _, f := range found { - u, err := url.Parse(f) - if err != nil { - continue - } - - // Calculate string - ustr := u.String() - - if _, ok := urlmap[ustr]; !ok { - // Has not been encountered yet - urls = append(urls, u) - urlmap[ustr] = struct{}{} - } - } - - return urls -} - -// ReplaceLinks replaces all detected links in a piece of text with their HTML (href) equivalents. -// Note: because Go doesn't allow negative lookbehinds in regex, it's possible that an already-formatted -// href will end up double-formatted, if the text you pass here contains one or more hrefs already. -// To avoid this, you should sanitize any HTML out of text before you pass it into this function. -func (f *formatter) ReplaceLinks(ctx context.Context, in string) string { - return regexes.ReplaceAllStringFunc(regexes.LinkScheme, in, func(urlString string, buf *bytes.Buffer) string { - thisURL, err := url.Parse(urlString) - if err != nil { - return urlString // we can't parse it as a URL so don't replace it - } - // urlString - urlString = thisURL.String() - buf.WriteString(``) - urlString = strings.TrimPrefix(urlString, thisURL.Scheme) - urlString = strings.TrimPrefix(urlString, "://") - buf.WriteString(urlString) - buf.WriteString(``) - return buf.String() - }) -} -- cgit v1.2.3