mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 19:38:23 +00:00 
			
		
		
		
	Add init support of orgmode document type on file view and readme (#2525)
* add init support of orgmode document type on file view and readme * fix imports * fix imports and readmeExist * fix imports order * fix format * remove unnecessary convert
This commit is contained in:
		
							
								
								
									
										56
									
								
								modules/markup/orgmode/orgmode.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								modules/markup/orgmode/orgmode.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| // Copyright 2017 The Gitea Authors. All rights reserved. | ||||
| // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package markup | ||||
|  | ||||
| import ( | ||||
| 	"code.gitea.io/gitea/modules/markup" | ||||
| 	"code.gitea.io/gitea/modules/markup/markdown" | ||||
|  | ||||
| 	"github.com/chaseadamsio/goorgeous" | ||||
| 	"github.com/russross/blackfriday" | ||||
| ) | ||||
|  | ||||
| func init() { | ||||
| 	markup.RegisterParser(Parser{}) | ||||
| } | ||||
|  | ||||
| // Parser implements markup.Parser for orgmode | ||||
| type Parser struct { | ||||
| } | ||||
|  | ||||
| // Name implements markup.Parser | ||||
| func (Parser) Name() string { | ||||
| 	return "orgmode" | ||||
| } | ||||
|  | ||||
| // Extensions implements markup.Parser | ||||
| func (Parser) Extensions() []string { | ||||
| 	return []string{".org"} | ||||
| } | ||||
|  | ||||
| // Render renders orgmode rawbytes to HTML | ||||
| func Render(rawBytes []byte, urlPrefix string, metas map[string]string, isWiki bool) []byte { | ||||
| 	htmlFlags := blackfriday.HTML_USE_XHTML | ||||
| 	htmlFlags |= blackfriday.HTML_SKIP_STYLE | ||||
| 	htmlFlags |= blackfriday.HTML_OMIT_CONTENTS | ||||
| 	renderer := &markdown.Renderer{ | ||||
| 		Renderer:  blackfriday.HtmlRenderer(htmlFlags, "", ""), | ||||
| 		URLPrefix: urlPrefix, | ||||
| 		IsWiki:    isWiki, | ||||
| 	} | ||||
|  | ||||
| 	result := goorgeous.Org(rawBytes, renderer) | ||||
| 	return result | ||||
| } | ||||
|  | ||||
| // RenderString reners orgmode string to HTML string | ||||
| func RenderString(rawContent string, urlPrefix string, metas map[string]string, isWiki bool) string { | ||||
| 	return string(Render([]byte(rawContent), urlPrefix, metas, isWiki)) | ||||
| } | ||||
|  | ||||
| // Render implements markup.Parser | ||||
| func (Parser) Render(rawBytes []byte, urlPrefix string, metas map[string]string, isWiki bool) []byte { | ||||
| 	return Render(rawBytes, urlPrefix, metas, isWiki) | ||||
| } | ||||
							
								
								
									
										54
									
								
								modules/markup/orgmode/orgmode_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								modules/markup/orgmode/orgmode_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| // Copyright 2017 The Gitea Authors. All rights reserved. | ||||
| // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package markup | ||||
|  | ||||
| import ( | ||||
| 	"strings" | ||||
| 	"testing" | ||||
|  | ||||
| 	"code.gitea.io/gitea/modules/markup" | ||||
| 	"code.gitea.io/gitea/modules/setting" | ||||
|  | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| ) | ||||
|  | ||||
| const AppURL = "http://localhost:3000/" | ||||
| const Repo = "gogits/gogs" | ||||
| const AppSubURL = AppURL + Repo + "/" | ||||
|  | ||||
| func TestRender_StandardLinks(t *testing.T) { | ||||
| 	setting.AppURL = AppURL | ||||
| 	setting.AppSubURL = AppSubURL | ||||
|  | ||||
| 	test := func(input, expected string) { | ||||
| 		buffer := RenderString(input, setting.AppSubURL, nil, false) | ||||
| 		assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(buffer)) | ||||
| 	} | ||||
|  | ||||
| 	googleRendered := `<p><a href="https://google.com/" title="https://google.com/">https://google.com/</a></p>` | ||||
| 	test("[[https://google.com/]]", googleRendered) | ||||
|  | ||||
| 	lnk := markup.URLJoin(AppSubURL, "WikiPage") | ||||
| 	test("[[WikiPage][WikiPage]]", | ||||
| 		`<p><a href="`+lnk+`" title="WikiPage">WikiPage</a></p>`) | ||||
| } | ||||
|  | ||||
| func TestRender_Images(t *testing.T) { | ||||
| 	setting.AppURL = AppURL | ||||
| 	setting.AppSubURL = AppSubURL | ||||
|  | ||||
| 	test := func(input, expected string) { | ||||
| 		buffer := RenderString(input, setting.AppSubURL, nil, false) | ||||
| 		assert.Equal(t, strings.TrimSpace(expected), strings.TrimSpace(buffer)) | ||||
| 	} | ||||
|  | ||||
| 	url := "../../.images/src/02/train.jpg" | ||||
| 	title := "Train" | ||||
| 	result := markup.URLJoin(AppSubURL, url) | ||||
|  | ||||
| 	test( | ||||
| 		"[[file:"+url+"]["+title+"]]", | ||||
| 		`<p><a href="`+result+`"><img src="`+result+`" alt="`+title+`" title="`+title+`" /></a></p>`) | ||||
| } | ||||
		Reference in New Issue
	
	Block a user