mirror of https://github.com/go-gitea/gitea.git
Add code block highlight to orgmode back (#14222)
Fix missed orgmode code block hightlight Co-authored-by: zeripath <art27@cantab.net>pull/16238/head
parent
58501a2682
commit
f2babf3346
|
@ -11,9 +11,12 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"code.gitea.io/gitea/modules/highlight"
|
||||||
"code.gitea.io/gitea/modules/markup"
|
"code.gitea.io/gitea/modules/markup"
|
||||||
"code.gitea.io/gitea/modules/util"
|
"code.gitea.io/gitea/modules/util"
|
||||||
|
|
||||||
|
"github.com/alecthomas/chroma"
|
||||||
|
"github.com/alecthomas/chroma/lexers"
|
||||||
"github.com/niklasfasching/go-org/org"
|
"github.com/niklasfasching/go-org/org"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -41,6 +44,47 @@ func (Renderer) Extensions() []string {
|
||||||
// Render renders orgmode rawbytes to HTML
|
// Render renders orgmode rawbytes to HTML
|
||||||
func Render(ctx *markup.RenderContext, input io.Reader, output io.Writer) error {
|
func Render(ctx *markup.RenderContext, input io.Reader, output io.Writer) error {
|
||||||
htmlWriter := org.NewHTMLWriter()
|
htmlWriter := org.NewHTMLWriter()
|
||||||
|
htmlWriter.HighlightCodeBlock = func(source, lang string, inline bool) string {
|
||||||
|
var w strings.Builder
|
||||||
|
if _, err := w.WriteString(`<pre>`); err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
lexer := lexers.Get(lang)
|
||||||
|
if lexer == nil && lang == "" {
|
||||||
|
lexer = lexers.Analyse(source)
|
||||||
|
if lexer == nil {
|
||||||
|
lexer = lexers.Fallback
|
||||||
|
}
|
||||||
|
lang = strings.ToLower(lexer.Config().Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
if lexer == nil {
|
||||||
|
// include language-x class as part of commonmark spec
|
||||||
|
if _, err := w.WriteString(`<code class="chroma language-` + string(lang) + `">`); err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
if _, err := w.WriteString(html.EscapeString(source)); err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// include language-x class as part of commonmark spec
|
||||||
|
if _, err := w.WriteString(`<code class="chroma language-` + string(lang) + `">`); err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
lexer = chroma.Coalesce(lexer)
|
||||||
|
|
||||||
|
if _, err := w.WriteString(highlight.Code(lexer.Config().Filenames[0], source)); err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := w.WriteString("</code></pre>"); err != nil {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
return w.String()
|
||||||
|
}
|
||||||
|
|
||||||
w := &Writer{
|
w := &Writer{
|
||||||
HTMLWriter: htmlWriter,
|
HTMLWriter: htmlWriter,
|
||||||
|
|
Loading…
Reference in New Issue