mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09: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" | 	"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, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user