// 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" "html" "io" "strconv" "code.gitea.io/gitea/modules/csv" "code.gitea.io/gitea/modules/markup" "code.gitea.io/gitea/modules/setting" ) func init() { markup.RegisterParser(Parser{}) } // Parser implements markup.Parser for csv files type Parser struct { } // Name implements markup.Parser func (Parser) Name() string { return "csv" } // NeedPostProcess implements markup.Parser func (Parser) NeedPostProcess() bool { return false } // Extensions implements markup.Parser func (Parser) Extensions() []string { return []string{".csv", ".tsv"} } // Render implements markup.Parser func (Parser) Render(rawBytes []byte, urlPrefix string, metas map[string]string, isWiki bool) []byte { var tmpBlock bytes.Buffer if setting.UI.CSV.MaxFileSize != 0 && setting.UI.CSV.MaxFileSize < int64(len(rawBytes)) { tmpBlock.WriteString("
") tmpBlock.WriteString(html.EscapeString(string(rawBytes))) tmpBlock.WriteString("") return tmpBlock.Bytes() } rd := csv.CreateReaderAndGuessDelimiter(rawBytes) writeField := func(element, class, field string) { tmpBlock.WriteString("<") tmpBlock.WriteString(element) if len(class) > 0 { tmpBlock.WriteString(" class=\"") tmpBlock.WriteString(class) tmpBlock.WriteString("\"") } tmpBlock.WriteString(">") tmpBlock.WriteString(html.EscapeString(field)) tmpBlock.WriteString("") tmpBlock.WriteString(element) tmpBlock.WriteString(">") } tmpBlock.WriteString(`