mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	Upgrade chroma to v2.3.0 (#21259)
The behaviour of `PreventSurroundingPre` has changed in https://github.com/alecthomas/chroma/pull/618 so that apparently it now causes line wrapper tags to be no longer emitted, but we need some form of indication to split the HTML into lines, so I did what https://github.com/yuin/goldmark-highlighting/pull/33 did and added the `nopWrapper`. Maybe there are more elegant solutions but for some reason, just splitting the HTML string on `\n` did not work. Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		
							
								
								
									
										6
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								go.mod
									
									
									
									
									
								
							| @@ -15,7 +15,7 @@ require ( | ||||
| 	github.com/42wim/sshsig v0.0.0-20211121163825-841cf5bbc121 | ||||
| 	github.com/NYTimes/gziphandler v1.1.1 | ||||
| 	github.com/PuerkitoBio/goquery v1.8.0 | ||||
| 	github.com/alecthomas/chroma v0.10.0 | ||||
| 	github.com/alecthomas/chroma/v2 v2.3.0 | ||||
| 	github.com/blevesearch/bleve/v2 v2.3.2 | ||||
| 	github.com/buildkite/terminal-to-html/v3 v3.7.0 | ||||
| 	github.com/caddyserver/certmagic v0.17.0 | ||||
| @@ -89,8 +89,8 @@ require ( | ||||
| 	github.com/urfave/cli v1.22.9 | ||||
| 	github.com/xanzy/go-gitlab v0.73.1 | ||||
| 	github.com/yohcop/openid-go v1.0.0 | ||||
| 	github.com/yuin/goldmark v1.4.13 | ||||
| 	github.com/yuin/goldmark-highlighting v0.0.0-20220208100518-594be1970594 | ||||
| 	github.com/yuin/goldmark v1.4.15 | ||||
| 	github.com/yuin/goldmark-highlighting/v2 v2.0.0-20220924101305-151362477c87 | ||||
| 	github.com/yuin/goldmark-meta v1.1.0 | ||||
| 	go.jolheiser.com/hcaptcha v0.0.4 | ||||
| 	go.jolheiser.com/pwn v0.0.3 | ||||
|   | ||||
							
								
								
									
										16
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								go.sum
									
									
									
									
									
								
							| @@ -158,9 +158,12 @@ github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ | ||||
| github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= | ||||
| github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= | ||||
| github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= | ||||
| github.com/alecthomas/chroma v0.10.0 h1:7XDcGkCQopCNKjZHfYrNLraA+M7e0fMiJ/Mfikbfjek= | ||||
| github.com/alecthomas/chroma v0.10.0/go.mod h1:jtJATyUxlIORhUOFNA9NZDWGAQ8wpxQQqNSB4rjA/1s= | ||||
| github.com/alecthomas/chroma/v2 v2.2.0/go.mod h1:vf4zrexSH54oEjJ7EdB65tGNHmH3pGZmVkgTP5RHvAs= | ||||
| github.com/alecthomas/chroma/v2 v2.3.0 h1:83xfxrnjv8eK+Cf8qZDzNo3PPF9IbTWHs7z28GY6D0U= | ||||
| github.com/alecthomas/chroma/v2 v2.3.0/go.mod h1:mZxeWZlxP2Dy+/8cBob2PYd8O2DwNAzave5AY7A2eQw= | ||||
| github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE= | ||||
| github.com/alecthomas/repr v0.0.0-20220113201626-b1b626ac65ae/go.mod h1:2kn6fqh/zIyPLmm3ugklbEi5hg5wS435eygvNfaDQL8= | ||||
| github.com/alecthomas/repr v0.1.0 h1:ENn2e1+J3k09gyj2shc0dHr/yjaWSHRlrJ4DPMevDqE= | ||||
| github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | ||||
| github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= | ||||
| github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= | ||||
| @@ -1467,11 +1470,10 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de | ||||
| github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | ||||
| github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= | ||||
| github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= | ||||
| github.com/yuin/goldmark v1.4.5/go.mod h1:rmuwmfZ0+bvzB24eSC//bk1R1Zp3hM0OXYv/G2LIilg= | ||||
| github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= | ||||
| github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= | ||||
| github.com/yuin/goldmark-highlighting v0.0.0-20220208100518-594be1970594 h1:yHfZyN55+5dp1wG7wDKv8HQ044moxkyGq12KFFMFDxg= | ||||
| github.com/yuin/goldmark-highlighting v0.0.0-20220208100518-594be1970594/go.mod h1:U9ihbh+1ZN7fR5Se3daSPoz1CGF9IYtSvWwVQtnzGHU= | ||||
| github.com/yuin/goldmark v1.4.15 h1:CFa84T0goNn/UIXYS+dmjjVxMyTAvpOmzld40N/nfK0= | ||||
| github.com/yuin/goldmark v1.4.15/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= | ||||
| github.com/yuin/goldmark-highlighting/v2 v2.0.0-20220924101305-151362477c87 h1:Py16JEzkSdKAtEFJjiaYLYBOWGXc1r/xHj/Q/5lA37k= | ||||
| github.com/yuin/goldmark-highlighting/v2 v2.0.0-20220924101305-151362477c87/go.mod h1:ovIvrum6DQJA4QsJSovrkC4saKHQVs7TvcaeO8AIl5I= | ||||
| github.com/yuin/goldmark-meta v1.1.0 h1:pWw+JLHGZe8Rk0EGsMVssiNb/AaPMHfSRszZeUeiOUc= | ||||
| github.com/yuin/goldmark-meta v1.1.0/go.mod h1:U4spWENafuA7Zyg+Lj5RqK/MF+ovMYtBvXi1lBb2VP0= | ||||
| github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= | ||||
|   | ||||
| @@ -19,10 +19,10 @@ import ( | ||||
| 	"code.gitea.io/gitea/modules/log" | ||||
| 	"code.gitea.io/gitea/modules/setting" | ||||
|  | ||||
| 	"github.com/alecthomas/chroma" | ||||
| 	"github.com/alecthomas/chroma/formatters/html" | ||||
| 	"github.com/alecthomas/chroma/lexers" | ||||
| 	"github.com/alecthomas/chroma/styles" | ||||
| 	"github.com/alecthomas/chroma/v2" | ||||
| 	"github.com/alecthomas/chroma/v2/formatters/html" | ||||
| 	"github.com/alecthomas/chroma/v2/lexers" | ||||
| 	"github.com/alecthomas/chroma/v2/styles" | ||||
| 	lru "github.com/hashicorp/golang-lru" | ||||
| ) | ||||
|  | ||||
| @@ -147,9 +147,6 @@ func File(fileName, language string, code []byte) ([]string, error) { | ||||
| 		html.PreventSurroundingPre(true), | ||||
| 	) | ||||
|  | ||||
| 	htmlBuf := bytes.Buffer{} | ||||
| 	htmlWriter := bufio.NewWriter(&htmlBuf) | ||||
|  | ||||
| 	var lexer chroma.Lexer | ||||
|  | ||||
| 	// provided language overrides everything | ||||
| @@ -180,23 +177,21 @@ func File(fileName, language string, code []byte) ([]string, error) { | ||||
| 		return nil, fmt.Errorf("can't tokenize code: %w", err) | ||||
| 	} | ||||
|  | ||||
| 	err = formatter.Format(htmlWriter, styles.GitHub, iterator) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("can't format code: %w", err) | ||||
| 	tokensLines := chroma.SplitTokensIntoLines(iterator.Tokens()) | ||||
| 	htmlBuf := &bytes.Buffer{} | ||||
|  | ||||
| 	lines := make([]string, 0, len(tokensLines)) | ||||
| 	for _, tokens := range tokensLines { | ||||
| 		iterator = chroma.Literator(tokens...) | ||||
| 		err = formatter.Format(htmlBuf, styles.GitHub, iterator) | ||||
| 		if err != nil { | ||||
| 			return nil, fmt.Errorf("can't format code: %w", err) | ||||
| 		} | ||||
| 		lines = append(lines, htmlBuf.String()) | ||||
| 		htmlBuf.Reset() | ||||
| 	} | ||||
|  | ||||
| 	_ = htmlWriter.Flush() | ||||
|  | ||||
| 	// at the moment, Chroma generates stable output `<span class="line"><span class="cl">...\n</span></span>` for each line | ||||
| 	htmlStr := htmlBuf.String() | ||||
| 	lines := strings.Split(htmlStr, `<span class="line"><span class="cl">`) | ||||
| 	m := make([]string, 0, len(lines)) | ||||
| 	for i := 1; i < len(lines); i++ { | ||||
| 		line := lines[i] | ||||
| 		line = strings.TrimSuffix(line, "</span></span>") | ||||
| 		m = append(m, line) | ||||
| 	} | ||||
| 	return m, nil | ||||
| 	return lines, nil | ||||
| } | ||||
|  | ||||
| // PlainText returns non-highlighted HTML for code | ||||
|   | ||||
| @@ -18,9 +18,9 @@ import ( | ||||
| 	"code.gitea.io/gitea/modules/setting" | ||||
| 	giteautil "code.gitea.io/gitea/modules/util" | ||||
|  | ||||
| 	chromahtml "github.com/alecthomas/chroma/formatters/html" | ||||
| 	chromahtml "github.com/alecthomas/chroma/v2/formatters/html" | ||||
| 	"github.com/yuin/goldmark" | ||||
| 	highlighting "github.com/yuin/goldmark-highlighting" | ||||
| 	highlighting "github.com/yuin/goldmark-highlighting/v2" | ||||
| 	meta "github.com/yuin/goldmark-meta" | ||||
| 	"github.com/yuin/goldmark/extension" | ||||
| 	"github.com/yuin/goldmark/parser" | ||||
|   | ||||
| @@ -17,8 +17,8 @@ import ( | ||||
| 	"code.gitea.io/gitea/modules/setting" | ||||
| 	"code.gitea.io/gitea/modules/util" | ||||
|  | ||||
| 	"github.com/alecthomas/chroma" | ||||
| 	"github.com/alecthomas/chroma/lexers" | ||||
| 	"github.com/alecthomas/chroma/v2" | ||||
| 	"github.com/alecthomas/chroma/v2/lexers" | ||||
| 	"github.com/niklasfasching/go-org/org" | ||||
| ) | ||||
|  | ||||
|   | ||||
| @@ -79,9 +79,9 @@ func HelloWorld() { | ||||
| } | ||||
| #+end_src | ||||
| `, `<div class="src src-go"> | ||||
| <pre><code class="chroma language-go"><span class="line"><span class="cl"><span class="c1">// HelloWorld prints "Hello World" | ||||
| </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">func</span> <span class="nf">HelloWorld</span><span class="p">()</span> <span class="p">{</span> | ||||
| </span></span><span class="line"><span class="cl">	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">"Hello World"</span><span class="p">)</span> | ||||
| </span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre> | ||||
| <pre><code class="chroma language-go"><span class="c1">// HelloWorld prints "Hello World" | ||||
| </span><span class="c1"></span><span class="kd">func</span> <span class="nf">HelloWorld</span><span class="p">()</span> <span class="p">{</span> | ||||
| 	<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="s">"Hello World"</span><span class="p">)</span> | ||||
| <span class="p">}</span></code></pre> | ||||
| </div>`) | ||||
| } | ||||
|   | ||||
| @@ -21,11 +21,11 @@ func TestDiffWithHighlight(t *testing.T) { | ||||
| 		"		run(db)\n", | ||||
| 	) | ||||
|  | ||||
| 	expected := `		<span class="n">run</span><span class="o">(</span><span class="removed-code"><span class="k">'</span><span class="o"><</span><span class="o">></span><span class="k">'</span></span><span class="o">)</span>` + "\n" | ||||
| 	expected := `		<span class="n">run</span><span class="o">(</span><span class="removed-code"><span class="k">'</span><span class="o"><</span><span class="o">></span><span class="k">'</span></span><span class="o">)</span>` | ||||
| 	output := diffToHTML(nil, diffs, DiffLineDel) | ||||
| 	assert.Equal(t, expected, output) | ||||
|  | ||||
| 	expected = `		<span class="n">run</span><span class="o">(</span><span class="added-code"><span class="n">db</span></span><span class="o">)</span>` + "\n" | ||||
| 	expected = `		<span class="n">run</span><span class="o">(</span><span class="added-code"><span class="n">db</span></span><span class="o">)</span>` | ||||
| 	output = diffToHTML(nil, diffs, DiffLineAdd) | ||||
| 	assert.Equal(t, expected, output) | ||||
|  | ||||
| @@ -57,7 +57,7 @@ func TestDiffWithHighlightPlaceholder(t *testing.T) { | ||||
| 	assert.Equal(t, "", hcd.placeholderTokenMap[0x00100000]) | ||||
| 	assert.Equal(t, "", hcd.placeholderTokenMap[0x0010FFFD]) | ||||
|  | ||||
| 	expected := fmt.Sprintf(`<span class="line"><span class="cl"><span class="nx">a</span><span class="o">=</span><span class="s1">'</span><span class="removed-code">%s</span>'</span></span>`, "\U00100000") | ||||
| 	expected := fmt.Sprintf(`<span class="nx">a</span><span class="o">=</span><span class="s1">'</span><span class="removed-code">%s</span>'`, "\U00100000") | ||||
| 	output := diffToHTML(hcd.lineWrapperTags, diffs, DiffLineDel) | ||||
| 	assert.Equal(t, expected, output) | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user