diff options
author | John Olheiser <john.olheiser@gmail.com> | 2020-09-11 09:48:39 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-11 10:48:39 -0400 |
commit | 26c4a049da178993e5ccddcb50e7edc70a6bde5d (patch) | |
tree | 494106117720ff3ad5f9e77a380c9397c3cfe10b /modules/markup/markdown | |
parent | dd1a651b5895cfdb8a141a56aa824ed4d082c41a (diff) | |
download | gitea-26c4a049da178993e5ccddcb50e7edc70a6bde5d.tar.gz gitea-26c4a049da178993e5ccddcb50e7edc70a6bde5d.zip |
Issue templates directory (#11450)
* Issue templates
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Add some comments, appease the linter
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Add docs and re-use dir candidates
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Add default labels to issue templates
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Generate swagger
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Suggested changes
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Update issue.go
* Suggestions
Signed-off-by: jolheiser <john.olheiser@gmail.com>
* Extract metadata from legacy if possible
Signed-off-by: jolheiser <john.olheiser@gmail.com>
Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
Diffstat (limited to 'modules/markup/markdown')
-rw-r--r-- | modules/markup/markdown/meta.go | 49 |
1 files changed, 49 insertions, 0 deletions
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 +} |