mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Add code block highlight to orgmode back (#14222)
Fix missed orgmode code block hightlight Co-authored-by: zeripath <art27@cantab.net>
This commit is contained in:
		@@ -11,9 +11,12 @@ import (
 | 
			
		||||
	"io"
 | 
			
		||||
	"strings"
 | 
			
		||||
 | 
			
		||||
	"code.gitea.io/gitea/modules/highlight"
 | 
			
		||||
	"code.gitea.io/gitea/modules/markup"
 | 
			
		||||
	"code.gitea.io/gitea/modules/util"
 | 
			
		||||
 | 
			
		||||
	"github.com/alecthomas/chroma"
 | 
			
		||||
	"github.com/alecthomas/chroma/lexers"
 | 
			
		||||
	"github.com/niklasfasching/go-org/org"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -41,6 +44,47 @@ func (Renderer) Extensions() []string {
 | 
			
		||||
// Render renders orgmode rawbytes to HTML
 | 
			
		||||
func Render(ctx *markup.RenderContext, input io.Reader, output io.Writer) error {
 | 
			
		||||
	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{
 | 
			
		||||
		HTMLWriter: htmlWriter,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user