mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	go1.16 (#14783)
This commit is contained in:
		
							
								
								
									
										90
									
								
								vendor/github.com/russross/blackfriday/v2/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										90
									
								
								vendor/github.com/russross/blackfriday/v2/README.md
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,4 +1,6 @@ | ||||
| Blackfriday [](https://travis-ci.org/russross/blackfriday) | ||||
| Blackfriday | ||||
| [![Build Status][BuildV2SVG]][BuildV2URL] | ||||
| [![PkgGoDev][PkgGoDevV2SVG]][PkgGoDevV2URL] | ||||
| =========== | ||||
|  | ||||
| Blackfriday is a [Markdown][1] processor implemented in [Go][2]. It | ||||
| @@ -16,19 +18,21 @@ It started as a translation from C of [Sundown][3]. | ||||
| Installation | ||||
| ------------ | ||||
|  | ||||
| Blackfriday is compatible with any modern Go release. With Go 1.7 and git | ||||
| installed: | ||||
| Blackfriday is compatible with modern Go releases in module mode. | ||||
| With Go installed: | ||||
|  | ||||
|     go get gopkg.in/russross/blackfriday.v2 | ||||
|     go get github.com/russross/blackfriday/v2 | ||||
|  | ||||
| will download, compile, and install the package into your `$GOPATH` | ||||
| directory hierarchy. Alternatively, you can achieve the same if you | ||||
| import it into a project: | ||||
| will resolve and add the package to the current development module, | ||||
| then build and install it. Alternatively, you can achieve the same | ||||
| if you import it in a package: | ||||
|  | ||||
|     import "gopkg.in/russross/blackfriday.v2" | ||||
|     import "github.com/russross/blackfriday/v2" | ||||
|  | ||||
| and `go get` without parameters. | ||||
|  | ||||
| Legacy GOPATH mode is unsupported. | ||||
|  | ||||
|  | ||||
| Versions | ||||
| -------- | ||||
| @@ -36,13 +40,9 @@ Versions | ||||
| Currently maintained and recommended version of Blackfriday is `v2`. It's being | ||||
| developed on its own branch: https://github.com/russross/blackfriday/tree/v2 and the | ||||
| documentation is available at | ||||
| https://godoc.org/gopkg.in/russross/blackfriday.v2. | ||||
| https://pkg.go.dev/github.com/russross/blackfriday/v2. | ||||
|  | ||||
| It is `go get`-able via via [gopkg.in][6] at `gopkg.in/russross/blackfriday.v2`, | ||||
| but we highly recommend using package management tool like [dep][7] or | ||||
| [Glide][8] and make use of semantic versioning. With package management you | ||||
| should import `github.com/russross/blackfriday` and specify that you're using | ||||
| version 2.0.0. | ||||
| It is `go get`-able in module mode at `github.com/russross/blackfriday/v2`. | ||||
|  | ||||
| Version 2 offers a number of improvements over v1: | ||||
|  | ||||
| @@ -62,6 +62,11 @@ Potential drawbacks: | ||||
|   v2. See issue [#348](https://github.com/russross/blackfriday/issues/348) for | ||||
|   tracking. | ||||
|  | ||||
| If you are still interested in the legacy `v1`, you can import it from | ||||
| `github.com/russross/blackfriday`. Documentation for the legacy v1 can be found | ||||
| here: https://pkg.go.dev/github.com/russross/blackfriday. | ||||
|  | ||||
|  | ||||
| Usage | ||||
| ----- | ||||
|  | ||||
| @@ -91,7 +96,7 @@ Here's an example of simple usage of Blackfriday together with Bluemonday: | ||||
| ```go | ||||
| import ( | ||||
|     "github.com/microcosm-cc/bluemonday" | ||||
|     "github.com/russross/blackfriday" | ||||
|     "github.com/russross/blackfriday/v2" | ||||
| ) | ||||
|  | ||||
| // ... | ||||
| @@ -104,6 +109,8 @@ html := bluemonday.UGCPolicy().SanitizeBytes(unsafe) | ||||
| If you want to customize the set of options, use `blackfriday.WithExtensions`, | ||||
| `blackfriday.WithRenderer` and `blackfriday.WithRefOverride`. | ||||
|  | ||||
| ### `blackfriday-tool` | ||||
|  | ||||
| You can also check out `blackfriday-tool` for a more complete example | ||||
| of how to use it. Download and install it using: | ||||
|  | ||||
| @@ -114,7 +121,7 @@ markdown file using a standalone program.  You can also browse the | ||||
| source directly on github if you are just looking for some example | ||||
| code: | ||||
|  | ||||
| * <http://github.com/russross/blackfriday-tool> | ||||
| * <https://github.com/russross/blackfriday-tool> | ||||
|  | ||||
| Note that if you have not already done so, installing | ||||
| `blackfriday-tool` will be sufficient to download and install | ||||
| @@ -123,6 +130,22 @@ installed in `$GOPATH/bin`.  This is a statically-linked binary that | ||||
| can be copied to wherever you need it without worrying about | ||||
| dependencies and library versions. | ||||
|  | ||||
| ### Sanitized anchor names | ||||
|  | ||||
| Blackfriday includes an algorithm for creating sanitized anchor names | ||||
| corresponding to a given input text. This algorithm is used to create | ||||
| anchors for headings when `AutoHeadingIDs` extension is enabled. The | ||||
| algorithm has a specification, so that other packages can create | ||||
| compatible anchor names and links to those anchors. | ||||
|  | ||||
| The specification is located at https://pkg.go.dev/github.com/russross/blackfriday/v2#hdr-Sanitized_Anchor_Names. | ||||
|  | ||||
| [`SanitizedAnchorName`](https://pkg.go.dev/github.com/russross/blackfriday/v2#SanitizedAnchorName) exposes this functionality, and can be used to | ||||
| create compatible links to the anchor names generated by blackfriday. | ||||
| This algorithm is also implemented in a small standalone package at | ||||
| [`github.com/shurcooL/sanitized_anchor_name`](https://pkg.go.dev/github.com/shurcooL/sanitized_anchor_name). It can be useful for clients | ||||
| that want a small package and don't need full functionality of blackfriday. | ||||
|  | ||||
|  | ||||
| Features | ||||
| -------- | ||||
| @@ -199,6 +222,15 @@ implements the following extensions: | ||||
|     You can use 3 or more backticks to mark the beginning of the | ||||
|     block, and the same number to mark the end of the block. | ||||
|  | ||||
|     To preserve classes of fenced code blocks while using the bluemonday | ||||
|     HTML sanitizer, use the following policy: | ||||
|  | ||||
|     ```go | ||||
|     p := bluemonday.UGCPolicy() | ||||
|     p.AllowAttrs("class").Matching(regexp.MustCompile("^language-[a-zA-Z0-9]+$")).OnElements("code") | ||||
|     html := p.SanitizeBytes(unsafe) | ||||
|     ``` | ||||
|  | ||||
| *   **Definition lists**. A simple definition list is made of a single-line | ||||
|     term followed by a colon and the definition for that term. | ||||
|  | ||||
| @@ -250,7 +282,7 @@ Other renderers | ||||
| Blackfriday is structured to allow alternative rendering engines. Here | ||||
| are a few of note: | ||||
|  | ||||
| *   [github_flavored_markdown](https://godoc.org/github.com/shurcooL/github_flavored_markdown): | ||||
| *   [github_flavored_markdown](https://pkg.go.dev/github.com/shurcooL/github_flavored_markdown): | ||||
|     provides a GitHub Flavored Markdown renderer with fenced code block | ||||
|     highlighting, clickable heading anchor links. | ||||
|  | ||||
| @@ -261,20 +293,28 @@ are a few of note: | ||||
| *   [markdownfmt](https://github.com/shurcooL/markdownfmt): like gofmt, | ||||
|     but for markdown. | ||||
|  | ||||
| *   [LaTeX output](https://github.com/Ambrevar/Blackfriday-LaTeX): | ||||
| *   [LaTeX output](https://gitlab.com/ambrevar/blackfriday-latex): | ||||
|     renders output as LaTeX. | ||||
|  | ||||
| *   [bfchroma](https://github.com/Depado/bfchroma/): provides convenience | ||||
|     integration with the [Chroma](https://github.com/alecthomas/chroma) code | ||||
|     highlighting library. bfchroma is only compatible with v2 of Blackfriday and | ||||
|     provides a drop-in renderer ready to use with Blackfriday, as well as | ||||
|     options and means for further customization. | ||||
|  | ||||
| *   [Blackfriday-Confluence](https://github.com/kentaro-m/blackfriday-confluence): provides a [Confluence Wiki Markup](https://confluence.atlassian.com/doc/confluence-wiki-markup-251003035.html) renderer. | ||||
|  | ||||
| *   [Blackfriday-Slack](https://github.com/karriereat/blackfriday-slack): converts markdown to slack message style | ||||
|  | ||||
| Todo | ||||
|  | ||||
| TODO | ||||
| ---- | ||||
|  | ||||
| *   More unit testing | ||||
| *   Improve unicode support. It does not understand all unicode | ||||
| *   Improve Unicode support. It does not understand all Unicode | ||||
|     rules (about what constitutes a letter, a punctuation symbol, | ||||
|     etc.), so it may fail to detect word boundaries correctly in | ||||
|     some instances. It is safe on all utf-8 input. | ||||
|     some instances. It is safe on all UTF-8 input. | ||||
|  | ||||
|  | ||||
| License | ||||
| @@ -286,6 +326,10 @@ License | ||||
|    [1]: https://daringfireball.net/projects/markdown/ "Markdown" | ||||
|    [2]: https://golang.org/ "Go Language" | ||||
|    [3]: https://github.com/vmg/sundown "Sundown" | ||||
|    [4]: https://godoc.org/gopkg.in/russross/blackfriday.v2#Parse "Parse func" | ||||
|    [4]: https://pkg.go.dev/github.com/russross/blackfriday/v2#Parse "Parse func" | ||||
|    [5]: https://github.com/microcosm-cc/bluemonday "Bluemonday" | ||||
|    [6]: https://labix.org/gopkg.in "gopkg.in" | ||||
|  | ||||
|    [BuildV2SVG]: https://travis-ci.org/russross/blackfriday.svg?branch=v2 | ||||
|    [BuildV2URL]: https://travis-ci.org/russross/blackfriday | ||||
|    [PkgGoDevV2SVG]: https://pkg.go.dev/badge/github.com/russross/blackfriday/v2 | ||||
|    [PkgGoDevV2URL]: https://pkg.go.dev/github.com/russross/blackfriday/v2 | ||||
|   | ||||
							
								
								
									
										30
									
								
								vendor/github.com/russross/blackfriday/v2/block.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										30
									
								
								vendor/github.com/russross/blackfriday/v2/block.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -18,8 +18,7 @@ import ( | ||||
| 	"html" | ||||
| 	"regexp" | ||||
| 	"strings" | ||||
|  | ||||
| 	"github.com/shurcooL/sanitized_anchor_name" | ||||
| 	"unicode" | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| @@ -259,7 +258,7 @@ func (p *Markdown) prefixHeading(data []byte) int { | ||||
| 	} | ||||
| 	if end > i { | ||||
| 		if id == "" && p.extensions&AutoHeadingIDs != 0 { | ||||
| 			id = sanitized_anchor_name.Create(string(data[i:end])) | ||||
| 			id = SanitizedAnchorName(string(data[i:end])) | ||||
| 		} | ||||
| 		block := p.addBlock(Heading, data[i:end]) | ||||
| 		block.HeadingID = id | ||||
| @@ -673,6 +672,7 @@ func (p *Markdown) fencedCodeBlock(data []byte, doRender bool) int { | ||||
| 	if beg == 0 || beg >= len(data) { | ||||
| 		return 0 | ||||
| 	} | ||||
| 	fenceLength := beg - 1 | ||||
|  | ||||
| 	var work bytes.Buffer | ||||
| 	work.Write([]byte(info)) | ||||
| @@ -706,6 +706,7 @@ func (p *Markdown) fencedCodeBlock(data []byte, doRender bool) int { | ||||
| 	if doRender { | ||||
| 		block := p.addBlock(CodeBlock, work.Bytes()) // TODO: get rid of temp buffer | ||||
| 		block.IsFenced = true | ||||
| 		block.FenceLength = fenceLength | ||||
| 		finalizeCodeBlock(block) | ||||
| 	} | ||||
|  | ||||
| @@ -1503,7 +1504,7 @@ func (p *Markdown) paragraph(data []byte) int { | ||||
|  | ||||
| 				id := "" | ||||
| 				if p.extensions&AutoHeadingIDs != 0 { | ||||
| 					id = sanitized_anchor_name.Create(string(data[prev:eol])) | ||||
| 					id = SanitizedAnchorName(string(data[prev:eol])) | ||||
| 				} | ||||
|  | ||||
| 				block := p.addBlock(Heading, data[prev:eol]) | ||||
| @@ -1588,3 +1589,24 @@ func skipUntilChar(text []byte, start int, char byte) int { | ||||
| 	} | ||||
| 	return i | ||||
| } | ||||
|  | ||||
| // SanitizedAnchorName returns a sanitized anchor name for the given text. | ||||
| // | ||||
| // It implements the algorithm specified in the package comment. | ||||
| func SanitizedAnchorName(text string) string { | ||||
| 	var anchorName []rune | ||||
| 	futureDash := false | ||||
| 	for _, r := range text { | ||||
| 		switch { | ||||
| 		case unicode.IsLetter(r) || unicode.IsNumber(r): | ||||
| 			if futureDash && len(anchorName) > 0 { | ||||
| 				anchorName = append(anchorName, '-') | ||||
| 			} | ||||
| 			futureDash = false | ||||
| 			anchorName = append(anchorName, unicode.ToLower(r)) | ||||
| 		default: | ||||
| 			futureDash = true | ||||
| 		} | ||||
| 	} | ||||
| 	return string(anchorName) | ||||
| } | ||||
|   | ||||
							
								
								
									
										28
									
								
								vendor/github.com/russross/blackfriday/v2/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								vendor/github.com/russross/blackfriday/v2/doc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -15,4 +15,32 @@ | ||||
| // | ||||
| // If you're interested in calling Blackfriday from command line, see | ||||
| // https://github.com/russross/blackfriday-tool. | ||||
| // | ||||
| // Sanitized Anchor Names | ||||
| // | ||||
| // Blackfriday includes an algorithm for creating sanitized anchor names | ||||
| // corresponding to a given input text. This algorithm is used to create | ||||
| // anchors for headings when AutoHeadingIDs extension is enabled. The | ||||
| // algorithm is specified below, so that other packages can create | ||||
| // compatible anchor names and links to those anchors. | ||||
| // | ||||
| // The algorithm iterates over the input text, interpreted as UTF-8, | ||||
| // one Unicode code point (rune) at a time. All runes that are letters (category L) | ||||
| // or numbers (category N) are considered valid characters. They are mapped to | ||||
| // lower case, and included in the output. All other runes are considered | ||||
| // invalid characters. Invalid characters that precede the first valid character, | ||||
| // as well as invalid character that follow the last valid character | ||||
| // are dropped completely. All other sequences of invalid characters | ||||
| // between two valid characters are replaced with a single dash character '-'. | ||||
| // | ||||
| // SanitizedAnchorName exposes this functionality, and can be used to | ||||
| // create compatible links to the anchor names generated by blackfriday. | ||||
| // This algorithm is also implemented in a small standalone package at | ||||
| // github.com/shurcooL/sanitized_anchor_name. It can be useful for clients | ||||
| // that want a small package and don't need full functionality of blackfriday. | ||||
| package blackfriday | ||||
|  | ||||
| // NOTE: Keep Sanitized Anchor Name algorithm in sync with package | ||||
| //       github.com/shurcooL/sanitized_anchor_name. | ||||
| //       Otherwise, users of sanitized_anchor_name will get anchor names | ||||
| //       that are incompatible with those generated by blackfriday. | ||||
|   | ||||
							
								
								
									
										2236
									
								
								vendor/github.com/russross/blackfriday/v2/entities.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2236
									
								
								vendor/github.com/russross/blackfriday/v2/entities.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										42
									
								
								vendor/github.com/russross/blackfriday/v2/esc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								vendor/github.com/russross/blackfriday/v2/esc.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -13,13 +13,27 @@ var htmlEscaper = [256][]byte{ | ||||
| } | ||||
|  | ||||
| func escapeHTML(w io.Writer, s []byte) { | ||||
| 	escapeEntities(w, s, false) | ||||
| } | ||||
|  | ||||
| func escapeAllHTML(w io.Writer, s []byte) { | ||||
| 	escapeEntities(w, s, true) | ||||
| } | ||||
|  | ||||
| func escapeEntities(w io.Writer, s []byte, escapeValidEntities bool) { | ||||
| 	var start, end int | ||||
| 	for end < len(s) { | ||||
| 		escSeq := htmlEscaper[s[end]] | ||||
| 		if escSeq != nil { | ||||
| 			w.Write(s[start:end]) | ||||
| 			w.Write(escSeq) | ||||
| 			start = end + 1 | ||||
| 			isEntity, entityEnd := nodeIsEntity(s, end) | ||||
| 			if isEntity && !escapeValidEntities { | ||||
| 				w.Write(s[start : entityEnd+1]) | ||||
| 				start = entityEnd + 1 | ||||
| 			} else { | ||||
| 				w.Write(s[start:end]) | ||||
| 				w.Write(escSeq) | ||||
| 				start = end + 1 | ||||
| 			} | ||||
| 		} | ||||
| 		end++ | ||||
| 	} | ||||
| @@ -28,6 +42,28 @@ func escapeHTML(w io.Writer, s []byte) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func nodeIsEntity(s []byte, end int) (isEntity bool, endEntityPos int) { | ||||
| 	isEntity = false | ||||
| 	endEntityPos = end + 1 | ||||
|  | ||||
| 	if s[end] == '&' { | ||||
| 		for endEntityPos < len(s) { | ||||
| 			if s[endEntityPos] == ';' { | ||||
| 				if entities[string(s[end:endEntityPos+1])] { | ||||
| 					isEntity = true | ||||
| 					break | ||||
| 				} | ||||
| 			} | ||||
| 			if !isalnum(s[endEntityPos]) && s[endEntityPos] != '&' && s[endEntityPos] != '#' { | ||||
| 				break | ||||
| 			} | ||||
| 			endEntityPos++ | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return isEntity, endEntityPos | ||||
| } | ||||
|  | ||||
| func escLink(w io.Writer, text []byte) { | ||||
| 	unesc := html.UnescapeString(string(text)) | ||||
| 	escapeHTML(w, []byte(unesc)) | ||||
|   | ||||
							
								
								
									
										9
									
								
								vendor/github.com/russross/blackfriday/v2/html.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								vendor/github.com/russross/blackfriday/v2/html.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -132,7 +132,10 @@ func NewHTMLRenderer(params HTMLRendererParameters) *HTMLRenderer { | ||||
| 	} | ||||
|  | ||||
| 	if params.FootnoteReturnLinkContents == "" { | ||||
| 		params.FootnoteReturnLinkContents = `<sup>[return]</sup>` | ||||
| 		// U+FE0E is VARIATION SELECTOR-15. | ||||
| 		// It suppresses automatic emoji presentation of the preceding | ||||
| 		// U+21A9 LEFTWARDS ARROW WITH HOOK on iOS and iPadOS. | ||||
| 		params.FootnoteReturnLinkContents = "<span aria-label='Return'>↩\ufe0e</span>" | ||||
| 	} | ||||
|  | ||||
| 	return &HTMLRenderer{ | ||||
| @@ -616,7 +619,7 @@ func (r *HTMLRenderer) RenderNode(w io.Writer, node *Node, entering bool) WalkSt | ||||
| 		} | ||||
| 	case Code: | ||||
| 		r.out(w, codeTag) | ||||
| 		escapeHTML(w, node.Literal) | ||||
| 		escapeAllHTML(w, node.Literal) | ||||
| 		r.out(w, codeCloseTag) | ||||
| 	case Document: | ||||
| 		break | ||||
| @@ -762,7 +765,7 @@ func (r *HTMLRenderer) RenderNode(w io.Writer, node *Node, entering bool) WalkSt | ||||
| 		r.cr(w) | ||||
| 		r.out(w, preTag) | ||||
| 		r.tag(w, codeTag[:len(codeTag)-1], attrs) | ||||
| 		escapeHTML(w, node.Literal) | ||||
| 		escapeAllHTML(w, node.Literal) | ||||
| 		r.out(w, codeCloseTag) | ||||
| 		r.out(w, preCloseTag) | ||||
| 		if node.Parent.Type != Item { | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/github.com/russross/blackfriday/v2/inline.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/github.com/russross/blackfriday/v2/inline.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -278,7 +278,7 @@ func link(p *Markdown, data []byte, offset int) (int, *Node) { | ||||
| 		case data[i] == '\n': | ||||
| 			textHasNl = true | ||||
|  | ||||
| 		case data[i-1] == '\\': | ||||
| 		case isBackslashEscaped(data, i): | ||||
| 			continue | ||||
|  | ||||
| 		case data[i] == '[': | ||||
|   | ||||
							
								
								
									
										12
									
								
								vendor/github.com/russross/blackfriday/v2/node.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/github.com/russross/blackfriday/v2/node.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -199,7 +199,8 @@ func (n *Node) InsertBefore(sibling *Node) { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (n *Node) isContainer() bool { | ||||
| // IsContainer returns true if 'n' can contain children. | ||||
| func (n *Node) IsContainer() bool { | ||||
| 	switch n.Type { | ||||
| 	case Document: | ||||
| 		fallthrough | ||||
| @@ -238,6 +239,11 @@ func (n *Node) isContainer() bool { | ||||
| 	} | ||||
| } | ||||
|  | ||||
| // IsLeaf returns true if 'n' is a leaf node. | ||||
| func (n *Node) IsLeaf() bool { | ||||
| 	return !n.IsContainer() | ||||
| } | ||||
|  | ||||
| func (n *Node) canContain(t NodeType) bool { | ||||
| 	if n.Type == List { | ||||
| 		return t == Item | ||||
| @@ -309,11 +315,11 @@ func newNodeWalker(root *Node) *nodeWalker { | ||||
| } | ||||
|  | ||||
| func (nw *nodeWalker) next() { | ||||
| 	if (!nw.current.isContainer() || !nw.entering) && nw.current == nw.root { | ||||
| 	if (!nw.current.IsContainer() || !nw.entering) && nw.current == nw.root { | ||||
| 		nw.current = nil | ||||
| 		return | ||||
| 	} | ||||
| 	if nw.entering && nw.current.isContainer() { | ||||
| 	if nw.entering && nw.current.IsContainer() { | ||||
| 		if nw.current.FirstChild != nil { | ||||
| 			nw.current = nw.current.FirstChild | ||||
| 			nw.entering = true | ||||
|   | ||||
		Reference in New Issue
	
	Block a user