Add csv file render support defaultly (#4105)
* add csv file render support defaultly * escaping csv column content
This commit is contained in:
		
							parent
							
								
									b174817b6a
								
							
						
					
					
						commit
						0bb1c84208
					
				
					 3 changed files with 84 additions and 0 deletions
				
			
		
							
								
								
									
										1
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								main.go
									
									
									
									
									
								
							|  | @ -14,6 +14,7 @@ import ( | ||||||
| 	"code.gitea.io/gitea/modules/log" | 	"code.gitea.io/gitea/modules/log" | ||||||
| 	"code.gitea.io/gitea/modules/setting" | 	"code.gitea.io/gitea/modules/setting" | ||||||
| 	// register supported doc types
 | 	// register supported doc types
 | ||||||
|  | 	_ "code.gitea.io/gitea/modules/markup/csv" | ||||||
| 	_ "code.gitea.io/gitea/modules/markup/markdown" | 	_ "code.gitea.io/gitea/modules/markup/markdown" | ||||||
| 	_ "code.gitea.io/gitea/modules/markup/orgmode" | 	_ "code.gitea.io/gitea/modules/markup/orgmode" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										58
									
								
								modules/markup/csv/csv.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								modules/markup/csv/csv.go
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,58 @@ | ||||||
|  | // Copyright 2018 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 ( | ||||||
|  | 	"bytes" | ||||||
|  | 	"encoding/csv" | ||||||
|  | 	"html" | ||||||
|  | 	"io" | ||||||
|  | 
 | ||||||
|  | 	"code.gitea.io/gitea/modules/markup" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func init() { | ||||||
|  | 	markup.RegisterParser(Parser{}) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Parser implements markup.Parser for orgmode
 | ||||||
|  | type Parser struct { | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Name implements markup.Parser
 | ||||||
|  | func (Parser) Name() string { | ||||||
|  | 	return "csv" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Extensions implements markup.Parser
 | ||||||
|  | func (Parser) Extensions() []string { | ||||||
|  | 	return []string{".csv"} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // Render implements markup.Parser
 | ||||||
|  | func (Parser) Render(rawBytes []byte, urlPrefix string, metas map[string]string, isWiki bool) []byte { | ||||||
|  | 	rd := csv.NewReader(bytes.NewReader(rawBytes)) | ||||||
|  | 	var tmpBlock bytes.Buffer | ||||||
|  | 	tmpBlock.WriteString(`<table class="table">`) | ||||||
|  | 	for { | ||||||
|  | 		fields, err := rd.Read() | ||||||
|  | 		if err == io.EOF { | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  | 		if err != nil { | ||||||
|  | 			continue | ||||||
|  | 		} | ||||||
|  | 		tmpBlock.WriteString("<tr>") | ||||||
|  | 		for _, field := range fields { | ||||||
|  | 			tmpBlock.WriteString("<td>") | ||||||
|  | 			tmpBlock.WriteString(html.EscapeString(field)) | ||||||
|  | 			tmpBlock.WriteString("</td>") | ||||||
|  | 		} | ||||||
|  | 		tmpBlock.WriteString("<tr>") | ||||||
|  | 	} | ||||||
|  | 	tmpBlock.WriteString("</table>") | ||||||
|  | 
 | ||||||
|  | 	return tmpBlock.Bytes() | ||||||
|  | } | ||||||
							
								
								
									
										25
									
								
								modules/markup/csv/csv_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								modules/markup/csv/csv_test.go
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | ||||||
|  | // Copyright 2018 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 ( | ||||||
|  | 	"testing" | ||||||
|  | 
 | ||||||
|  | 	"github.com/stretchr/testify/assert" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | func TestRenderCSV(t *testing.T) { | ||||||
|  | 	var parser Parser | ||||||
|  | 	var kases = map[string]string{ | ||||||
|  | 		"a":     "<table class=\"table\"><tr><td>a</td><tr></table>", | ||||||
|  | 		"1,2":   "<table class=\"table\"><tr><td>1</td><td>2</td><tr></table>", | ||||||
|  | 		"<br/>": "<table class=\"table\"><tr><td><br/></td><tr></table>", | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	for k, v := range kases { | ||||||
|  | 		res := parser.Render([]byte(k), "", nil, false) | ||||||
|  | 		assert.EqualValues(t, v, string(res)) | ||||||
|  | 	} | ||||||
|  | } | ||||||
		Loading…
	
		Reference in a new issue