Просмотр исходного кода

Allow specifying content options in the YAML file

Lucas Stadler лет назад: 9
Родитель
Сommit
56f48db831
2 измененных файлов с 51 добавлено и 7 удалено
  1. 49 7
      go/blog/blog.go
  2. 2 0
      go/blog/blog.yaml

+ 49 - 7
go/blog/blog.go

@ -1,6 +1,7 @@
1 1
package main
2 2
3 3
import (
4
	"bytes"
4 5
	"crypto/md5"
5 6
	"crypto/rand"
6 7
	"encoding/hex"
@ -31,13 +32,13 @@ type Post struct {
31 32
}
32 33
33 34
type Options struct {
34
	WriteBack      bool
35
	HashIds        bool
36
	Reverse        bool
37
	Css            string
38
	NoDefaultStyle bool
39
	Title          string
40
	After          string
35
	WriteBack      bool   `yaml:"write_back"`
36
	HashIds        bool   `yaml:"hash_ids"`
37
	Reverse        bool   `yaml:"reverse"`
38
	Css            string `yaml:"css"`
39
	NoDefaultStyle bool   `yaml:"no_default_style"`
40
	Title          string `yaml:"title"`
41
	After          string `yaml:"after"`
41 42
}
42 43
43 44
var flags struct {
@ -180,6 +181,47 @@ func main() {
180 181
		exit(err)
181 182
	}
182 183
184
	i := bytes.Index(data, []byte{'\n', '-', '-', '-', '\n'})
185
	if i != -1 && i != 0 {
186
		var opts Options
187
		err = yaml.Unmarshal(data[0:i+1], &opts)
188
		if err != nil {
189
			exit(err)
190
		}
191
		data = data[i+5:]
192
193
		isSet := map[string]bool{}
194
		flag.Visit(func(f *flag.Flag) {
195
			isSet[f.Name] = true
196
		})
197
198
		flag.VisitAll(func(f *flag.Flag) {
199
			_, ok := isSet[f.Name]
200
			if ok {
201
				return
202
			}
203
204
			switch f.Name {
205
			case "write-back":
206
				flags.WriteBack = opts.WriteBack
207
			case "hash-ids":
208
				flags.HashIds = opts.HashIds
209
			case "reverse":
210
				flags.Reverse = opts.Reverse
211
			case "css":
212
				flags.Css = opts.Css
213
			case "no-default-style":
214
				flags.NoDefaultStyle = opts.NoDefaultStyle
215
			case "title":
216
				if opts.Title != "" {
217
					flags.Title = opts.Title
218
				}
219
			case "after":
220
				flags.After = opts.After
221
			}
222
		})
223
	}
224
183 225
	var posts []Post
184 226
	err = yaml.Unmarshal(data, &posts)
185 227
	if err != nil {

+ 2 - 0
go/blog/blog.yaml

@ -1,3 +1,5 @@
1
title: A test blog
2
reverse: true
1 3
---
2 4
- title: pacman -Qo $(ls -1t --time=atime /usr/bin | tail -n30)
3 5
  content: