summaryrefslogtreecommitdiffstats
path: root/modules/markup/csv
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2018-07-21 05:08:15 +0800
committerLauris BH <lauris@nix.lv>2018-07-21 00:08:15 +0300
commit0bb1c842087295fd7ccd96adedeed57b7c0b30d9 (patch)
tree80dc363a4b35cdcf26bc2b2840769085f4bd2b7a /modules/markup/csv
parentb174817b6a6c4b32956d52878f54f62b9bf79638 (diff)
downloadgitea-0bb1c842087295fd7ccd96adedeed57b7c0b30d9.tar.gz
gitea-0bb1c842087295fd7ccd96adedeed57b7c0b30d9.zip
Add csv file render support defaultly (#4105)
* add csv file render support defaultly * escaping csv column content
Diffstat (limited to 'modules/markup/csv')
-rw-r--r--modules/markup/csv/csv.go58
-rw-r--r--modules/markup/csv/csv_test.go25
2 files changed, 83 insertions, 0 deletions
diff --git a/modules/markup/csv/csv.go b/modules/markup/csv/csv.go
new file mode 100644
index 0000000000..077947e774
--- /dev/null
+++ b/modules/markup/csv/csv.go
@@ -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()
+}
diff --git a/modules/markup/csv/csv_test.go b/modules/markup/csv/csv_test.go
new file mode 100644
index 0000000000..f050296cee
--- /dev/null
+++ b/modules/markup/csv/csv_test.go
@@ -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>&lt;br/&gt;</td><tr></table>",
+ }
+
+ for k, v := range kases {
+ res := parser.Render([]byte(k), "", nil, false)
+ assert.EqualValues(t, v, string(res))
+ }
+}