gtsocial-umbx

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

formatter.go (2567B)


      1 // GoToSocial
      2 // Copyright (C) GoToSocial Authors admin@gotosocial.org
      3 // SPDX-License-Identifier: AGPL-3.0-or-later
      4 //
      5 // This program is free software: you can redistribute it and/or modify
      6 // it under the terms of the GNU Affero General Public License as published by
      7 // the Free Software Foundation, either version 3 of the License, or
      8 // (at your option) any later version.
      9 //
     10 // This program is distributed in the hope that it will be useful,
     11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
     12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13 // GNU Affero General Public License for more details.
     14 //
     15 // You should have received a copy of the GNU Affero General Public License
     16 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
     17 
     18 package text
     19 
     20 import (
     21 	"context"
     22 
     23 	"github.com/superseriousbusiness/gotosocial/internal/db"
     24 	"github.com/superseriousbusiness/gotosocial/internal/gtsmodel"
     25 )
     26 
     27 // Formatter wraps some logic and functions for parsing statuses and other text input into nice html.
     28 // Each of the member functions returns a struct containing the formatted HTML and any tags, mentions, and
     29 // emoji that were found in the text.
     30 type Formatter interface {
     31 	// FromPlain parses an HTML text from a plaintext.
     32 	FromPlain(ctx context.Context, pmf gtsmodel.ParseMentionFunc, authorID string, statusID string, plain string) *FormatResult
     33 	// FromPlainNoParagraph parses an HTML text from a plaintext, without wrapping the resulting text in <p> tags.
     34 	FromPlainNoParagraph(ctx context.Context, pmf gtsmodel.ParseMentionFunc, authorID string, statusID string, plain string) *FormatResult
     35 	// FromMarkdown parses an HTML text from a markdown-formatted text.
     36 	FromMarkdown(ctx context.Context, pmf gtsmodel.ParseMentionFunc, authorID string, statusID string, md string) *FormatResult
     37 	// FromPlainEmojiOnly parses an HTML text from a plaintext, only parsing emojis and not mentions etc.
     38 	FromPlainEmojiOnly(ctx context.Context, pmf gtsmodel.ParseMentionFunc, authorID string, statusID string, plain string) *FormatResult
     39 }
     40 
     41 type FormatFunc func(ctx context.Context, pmf gtsmodel.ParseMentionFunc, authorID string, statusID string, text string) *FormatResult
     42 
     43 type formatter struct {
     44 	db db.DB
     45 }
     46 
     47 // NewFormatter returns a new Formatter interface for parsing statuses and other text input into nice html.
     48 func NewFormatter(db db.DB) Formatter {
     49 	return &formatter{
     50 		db: db,
     51 	}
     52 }
     53 
     54 type FormatResult struct {
     55 	HTML     string
     56 	Mentions []*gtsmodel.Mention
     57 	Tags     []*gtsmodel.Tag
     58 	Emojis   []*gtsmodel.Emoji
     59 }