summaryrefslogtreecommitdiffstats
path: root/modules
diff options
context:
space:
mode:
authorsilverwind <me@silverwind.io>2022-09-26 07:50:03 +0200
committerGitHub <noreply@github.com>2022-09-26 13:50:03 +0800
commitec0a06e52c67dd3aef25afd940d146c4bbae2020 (patch)
tree84c13a0adfd2926183c5425949a97a87980fbcbf /modules
parent2649e7ffbdfb98b29297533a937a7004a44a1a61 (diff)
downloadgitea-ec0a06e52c67dd3aef25afd940d146c4bbae2020.tar.gz
gitea-ec0a06e52c67dd3aef25afd940d146c4bbae2020.zip
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>
Diffstat (limited to 'modules')
-rw-r--r--modules/highlight/highlight.go39
-rw-r--r--modules/markup/markdown/markdown.go4
-rw-r--r--modules/markup/orgmode/orgmode.go4
-rw-r--r--modules/markup/orgmode/orgmode_test.go8
4 files changed, 25 insertions, 30 deletions
diff --git a/modules/highlight/highlight.go b/modules/highlight/highlight.go
index af3376e8d7..65ed74b019 100644
--- a/modules/highlight/highlight.go
+++ b/modules/highlight/highlight.go
@@ -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)
- }
-
- _ = htmlWriter.Flush()
+ tokensLines := chroma.SplitTokensIntoLines(iterator.Tokens())
+ htmlBuf := &bytes.Buffer{}
- // 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)
+ 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()
}
- return m, nil
+
+ return lines, nil
}
// PlainText returns non-highlighted HTML for code
diff --git a/modules/markup/markdown/markdown.go b/modules/markup/markdown/markdown.go
index c0e72fd6ce..fa289986cc 100644
--- a/modules/markup/markdown/markdown.go
+++ b/modules/markup/markdown/markdown.go
@@ -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"
diff --git a/modules/markup/orgmode/orgmode.go b/modules/markup/orgmode/orgmode.go
index a78531720d..1c02f274ba 100644
--- a/modules/markup/orgmode/orgmode.go
+++ b/modules/markup/orgmode/orgmode.go
@@ -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"
)
diff --git a/modules/markup/orgmode/orgmode_test.go b/modules/markup/orgmode/orgmode_test.go
index 4fc0a20db2..cd12cd8c17 100644
--- a/modules/markup/orgmode/orgmode_test.go
+++ b/modules/markup/orgmode/orgmode_test.go
@@ -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 &#34;Hello World&#34;
-</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">&#34;Hello World&#34;</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 &#34;Hello World&#34;
+</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">&#34;Hello World&#34;</span><span class="p">)</span>
+<span class="p">}</span></code></pre>
</div>`)
}