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" | ||||
| 	"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