markup

package
v3.1.21 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 21, 2026 License: MIT Imports: 37 Imported by: 0

Documentation

Index

Constants

View Source
const (
	IssueNameStyleNumeric      = "numeric"
	IssueNameStyleAlphanumeric = "alphanumeric"
	IssueNameStyleRegexp       = "regexp"
)

Issue name styles

View Source
const (
	LinkTypeDefault = ""
	LinkTypeRoot    = "/:root"  // the link is relative to the AppSubURL(ROOT_URL)
	LinkTypeMedia   = "/:media" // the link should be used to access media files (images, videos)
	LinkTypeRaw     = "/:raw"   // not really useful, mainly for environment GITEA_PREFIX_RAW for external renders
)

Variables

View Source
var RenderBehaviorForTesting struct {
	// Gitea will emit some additional attributes for various purposes, these attributes don't affect rendering.
	// But there are too many hard-coded test cases, to avoid changing all of them again and again, we can disable emitting these internal attributes.
	DisableAdditionalAttributes bool
}

Functions

func CamoEncode

func CamoEncode(link string) string

CamoEncode encodes a lnk to fit with the go-camo and camo proxy links. The purposes of camo-proxy are: 1. Allow accessing "http://" images on a HTTPS site by using the "https://" URLs provided by camo-proxy. 2. Hide the visitor's real IP (protect privacy) when accessing external images.

func ComposeSimpleDocumentMetas

func ComposeSimpleDocumentMetas() map[string]string

func CustomLinkURLSchemes

func CustomLinkURLSchemes(schemes []string)

CustomLinkURLSchemes allows for additional schemes to be detected when parsing links within text

func DetectMarkupTypeByFileName

func DetectMarkupTypeByFileName(filename string) string

DetectMarkupTypeByFileName returns the possible markup format type via the filename

func DetectRendererType

func DetectRendererType(filename string, sniffedType typesniffer.SniffedType, prefetchBuf []byte) string

DetectRendererType detects the markup type of the content

func Init

func Init(renderHelpFuncs *RenderHelperFuncs)

Init initializes the render global variables

func IsFullURLString

func IsFullURLString(link string) bool

func IsNonEmptyRelativePath

func IsNonEmptyRelativePath(link string) bool
func ParseRenderedLink(s, preferLinkType string) (linkType, link string)

func PostProcessCommitMessage

func PostProcessCommitMessage(ctx *RenderContext, content string) (string, error)

PostProcessCommitMessage will use the same logic as PostProcess, but will disable the shortLinkProcessor.

func PostProcessCommitMessageSubject

func PostProcessCommitMessageSubject(ctx *RenderContext, defaultLink, content string) (string, error)

PostProcessCommitMessageSubject will use the same logic as PostProcess and PostProcessCommitMessage, but will disable the shortLinkProcessor and emailAddressProcessor, will add a defaultLinkProcessor if defaultLink is set, which changes every text node into a link to the passed default link.

func PostProcessDefault

func PostProcessDefault(ctx *RenderContext, input io.Reader, output io.Writer) error

PostProcessDefault does the final required transformations to the passed raw HTML data, and ensures its validity. Transformations include: replacing links and emails with HTML links, parsing shortlinks in the format of [[Link]], like MediaWiki, linking issues in the format #ID, and mentions in the format @user, and others.

func PostProcessDescriptionHTML

func PostProcessDescriptionHTML(ctx *RenderContext, content string) (string, error)

PostProcessDescriptionHTML will use similar logic as PostProcess, but will use a single special linkProcessor.

func PostProcessEmoji

func PostProcessEmoji(ctx *RenderContext, content string) (string, error)

PostProcessEmoji for when we want to just process emoji and shortcodes in various places it isn't already run through the normal markdown processor

func PostProcessIssueTitle

func PostProcessIssueTitle(ctx *RenderContext, title string) (string, error)

PostProcessIssueTitle to process title on individual issue/pull page

func PreviewableExtensions

func PreviewableExtensions() []string

func RegisterRenderer

func RegisterRenderer(renderer Renderer)

RegisterRenderer registers a new markup file renderer

func Render

func Render(ctx *RenderContext, input io.Reader, output io.Writer) error

Render renders markup file to HTML with all specific handling stuff.

func RenderString

func RenderString(ctx *RenderContext, content string) (string, error)

RenderString renders Markup string to HTML with all specific handling stuff and return string

func RenderWithRenderer

func RenderWithRenderer(ctx *RenderContext, renderer Renderer, input io.Reader, output io.Writer) error

func RendererNeedPostProcess

func RendererNeedPostProcess(renderer Renderer) bool

func ResetDefaultSanitizerForTesting

func ResetDefaultSanitizerForTesting()

func Sanitize

func Sanitize(s string) template.HTML

Sanitize use default sanitizer policy to sanitize a string

func SanitizeDescription

func SanitizeDescription(s string) string

SanitizeDescription sanitizes the HTML generated for a repository description.

func SanitizeReader

func SanitizeReader(r io.Reader, renderer string, w io.Writer) error

SanitizeReader sanitizes a Reader

Types

type ExternalRenderer

type ExternalRenderer interface {
	GetExternalRendererOptions() ExternalRendererOptions
}

ExternalRenderer defines an interface for external renderers

type ExternalRendererOptions

type ExternalRendererOptions struct {
	SanitizerDisabled bool
	DisplayInIframe   bool
	ContentSandbox    string
}

type PostProcessRenderer

type PostProcessRenderer interface {
	NeedPostProcess() bool
}

PostProcessRenderer defines an interface for renderers who need post process

type RenderCodePreviewOptions

type RenderCodePreviewOptions struct {
	FullURL   string
	OwnerName string
	RepoName  string
	CommitID  string
	FilePath  string

	LineStart, LineStop int
}

type RenderContext

type RenderContext struct {
	SidebarTocNode ast.Node

	RenderHelper   RenderHelper
	RenderOptions  RenderOptions
	RenderInternal internal.RenderInternal
	// contains filtered or unexported fields
}

RenderContext represents a render context

func NewRenderContext

func NewRenderContext(ctx context.Context) *RenderContext

func NewTestRenderContext

func NewTestRenderContext(baseLinkOrMetas ...any) *RenderContext

NewTestRenderContext is a helper function to create a RenderContext for testing purpose It accepts string (BaseLink), map[string]string (Metas)

func (*RenderContext) Deadline

func (ctx *RenderContext) Deadline() (deadline time.Time, ok bool)

func (*RenderContext) Done

func (ctx *RenderContext) Done() <-chan struct{}

func (*RenderContext) Err

func (ctx *RenderContext) Err() error

func (*RenderContext) ResolveLinkRelative

func (ctx *RenderContext) ResolveLinkRelative(base, cur, link string) string

func (*RenderContext) ResolveLinkRoot

func (ctx *RenderContext) ResolveLinkRoot(link string) string

func (*RenderContext) Value

func (ctx *RenderContext) Value(key any) any

func (*RenderContext) WithHelper

func (ctx *RenderContext) WithHelper(helper RenderHelper) *RenderContext

func (*RenderContext) WithInStandalonePage

func (ctx *RenderContext) WithInStandalonePage(v bool) *RenderContext

func (*RenderContext) WithMarkupType

func (ctx *RenderContext) WithMarkupType(typ string) *RenderContext

func (*RenderContext) WithMetas

func (ctx *RenderContext) WithMetas(metas map[string]string) *RenderContext

func (*RenderContext) WithRelativePath

func (ctx *RenderContext) WithRelativePath(path string) *RenderContext
func (ctx *RenderContext) WithUseAbsoluteLink(v bool) *RenderContext

type RenderHelper

type RenderHelper interface {
	CleanUp()

	IsCommitIDExisting(commitID string) bool
	ResolveLink(link, preferLinkType string) string
}

type RenderHelperFuncs

type RenderHelperFuncs struct {
	IsUsernameMentionable     func(ctx context.Context, username string) bool
	RenderRepoFileCodePreview func(ctx context.Context, options RenderCodePreviewOptions) (template.HTML, error)
	RenderRepoIssueIconTitle  func(ctx context.Context, options RenderIssueIconTitleOptions) (template.HTML, error)
}

RenderHelperFuncs is used to decouple cycle-import At the moment there are different packages: modules/markup: basic markup rendering models/renderhelper: need to access models and git repo, and models/issues needs it services/markup: some real helper functions could only be provided here because it needs to access various services & templates

var DefaultRenderHelperFuncs *RenderHelperFuncs

type RenderIssueIconTitleOptions

type RenderIssueIconTitleOptions struct {
	OwnerName  string
	RepoName   string
	LinkHref   string
	IssueIndex int64
}

type RenderMetaMode

type RenderMetaMode string
const (
	RenderMetaAsDetails RenderMetaMode = "details" // default
	RenderMetaAsNone    RenderMetaMode = "none"
	RenderMetaAsTable   RenderMetaMode = "table"
)

type RenderOptions

type RenderOptions struct {
	UseAbsoluteLink bool

	// relative path from tree root of the branch
	RelativePath string

	// eg: "orgmode", "asciicast", "console"
	// for file mode, it could be left as empty, and will be detected by file extension in RelativePath
	MarkupType string

	// user&repo, format&style&regexp (for external issue pattern), teams&org (for mention)
	// RefTypeNameSubURL (for iframe&asciicast)
	// markupAllowShortIssuePattern
	// markdownNewLineHardBreak
	Metas map[string]string

	// used by external render. the router "/org/repo/render/..." will output the rendered content in a standalone page
	InStandalonePage bool
}

type Renderer

type Renderer interface {
	Name() string // markup format name
	Extensions() []string
	SanitizerRules() []setting.MarkupSanitizerRule
	Render(ctx *RenderContext, input io.Reader, output io.Writer) error
}

Renderer defines an interface for rendering markup file to HTML

func FindRendererByContext

func FindRendererByContext(ctx *RenderContext) (Renderer, error)

FindRendererByContext finds renderer by RenderContext TODO: it should be merged with other similar functions like GetRendererByFileName, DetectMarkupTypeByFileName, etc

func GetRendererByFileName

func GetRendererByFileName(filename string) Renderer

GetRendererByFileName get renderer by filename

type RendererContentDetector

type RendererContentDetector interface {
	CanRender(filename string, sniffedType typesniffer.SniffedType, prefetchBuf []byte) bool
}

RendererContentDetector detects if the content can be rendered by specified renderer

type Sanitizer

type Sanitizer struct {
	// contains filtered or unexported fields
}

Sanitizer is a protection wrapper of *bluemonday.Policy which does not allow any modification to the underlying policies once it's been created.

func GetDefaultSanitizer

func GetDefaultSanitizer() *Sanitizer

type SimpleRenderHelper

type SimpleRenderHelper struct{}

func (*SimpleRenderHelper) CleanUp

func (r *SimpleRenderHelper) CleanUp()

func (*SimpleRenderHelper) IsCommitIDExisting

func (r *SimpleRenderHelper) IsCommitIDExisting(commitID string) bool
func (r *SimpleRenderHelper) ResolveLink(link, preferLinkType string) string

type TestRenderHelper

type TestRenderHelper struct {
	BaseLink string
	// contains filtered or unexported fields
}

func (*TestRenderHelper) CleanUp

func (r *TestRenderHelper) CleanUp()

func (*TestRenderHelper) IsCommitIDExisting

func (r *TestRenderHelper) IsCommitIDExisting(commitID string) bool
func (r *TestRenderHelper) ResolveLink(link, preferLinkType string) string

Source Files

  • camo.go
  • html.go
  • html_codepreview.go
  • html_commit.go
  • html_email.go
  • html_emoji.go
  • html_issue.go
  • html_link.go
  • html_mention.go
  • html_node.go
  • render.go
  • render_helper.go
  • render_link.go
  • renderer.go
  • sanitizer.go
  • sanitizer_custom.go
  • sanitizer_default.go
  • sanitizer_description.go

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL