From 26c4a049da178993e5ccddcb50e7edc70a6bde5d Mon Sep 17 00:00:00 2001 From: John Olheiser Date: Fri, 11 Sep 2020 09:48:39 -0500 Subject: Issue templates directory (#11450) * Issue templates Signed-off-by: jolheiser * Add some comments, appease the linter Signed-off-by: jolheiser * Add docs and re-use dir candidates Signed-off-by: jolheiser * Add default labels to issue templates Signed-off-by: jolheiser * Generate swagger Signed-off-by: jolheiser * Suggested changes Signed-off-by: jolheiser * Update issue.go * Suggestions Signed-off-by: jolheiser * Extract metadata from legacy if possible Signed-off-by: jolheiser Co-authored-by: Lunny Xiao Co-authored-by: techknowlogick --- modules/markup/markdown/meta.go | 49 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 modules/markup/markdown/meta.go (limited to 'modules/markup/markdown') diff --git a/modules/markup/markdown/meta.go b/modules/markup/markdown/meta.go new file mode 100644 index 0000000000..ca95e4d26a --- /dev/null +++ b/modules/markup/markdown/meta.go @@ -0,0 +1,49 @@ +// Copyright 2020 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 markdown + +import ( + "errors" + "strings" + + "gopkg.in/yaml.v2" +) + +func isYAMLSeparator(line string) bool { + line = strings.TrimSpace(line) + for i := 0; i < len(line); i++ { + if line[i] != '-' { + return false + } + } + return len(line) > 2 +} + +// ExtractMetadata consumes a markdown file, parses YAML frontmatter, +// and returns the frontmatter metadata separated from the markdown content +func ExtractMetadata(contents string, out interface{}) (string, error) { + var front, body []string + var seps int + lines := strings.Split(contents, "\n") + for idx, line := range lines { + if seps == 2 { + front, body = lines[:idx], lines[idx:] + break + } + if isYAMLSeparator(line) { + seps++ + continue + } + } + + if len(front) == 0 && len(body) == 0 { + return "", errors.New("could not determine metadata") + } + + if err := yaml.Unmarshal([]byte(strings.Join(front, "\n")), out); err != nil { + return "", err + } + return strings.Join(body, "\n"), nil +} -- cgit v1.2.3