1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
package config
import (
// "encoding/yaml"
"gopkg.in/yaml.v2"
"io/ioutil"
"log"
)
type Settings struct {
// required
TxtDir string `yaml:"input_dir"`
HtmlDir string `yaml:"output_dir"`
TmplDir string `yaml:"tmpl_dir"`
// optional
SiteTitle string `yaml:"site_title,omitempty"`
SiteURL string `yaml:"site_url,omitempty"`
Filters []RegexFilter `yaml:"filters,omitempty"`
// required -- set defaults
PermalinkFmt string `yaml:"permalink_fmt,omitempty"`
PostFileFmt string `yaml:"post_file_fmt,omitempty"`
ShowFuture bool `yaml:"show_future,omitempty"`
PreviewServer string `yaml:"preview_server,omitempty"`
PreviewDir string `yaml:"preview_dir,omitempty"`
FileBlacklist []string `yaml:"ignore_files,omitempty"`
Verbose bool `yaml:"verbose,omitempty"`
}
type RegexFilter struct {
S string `yaml:"s"`
R string `yaml:"r"`
}
var Config Settings
func Init(filename string) {
readConfig(filename)
checkRequired()
addDefaults()
}
func readConfig(filename string) {
file, e := ioutil.ReadFile(filename)
if e != nil {
log.Fatal("Can not read config file: ", e)
}
e = yaml.Unmarshal(file, &Config)
if e != nil {
log.Fatal("Config read error: ", e)
}
}
func checkRequired() {
if Config.TxtDir == "" {
log.Fatal("Error: input_dir not set in configuration")
}
if Config.HtmlDir == "" {
log.Fatal("Error: output_dir not set in configuration")
}
if Config.TmplDir == "" {
log.Fatal("Error: tmpl_dir not set in configuration")
}
}
func addDefaults() {
if Config.PermalinkFmt == "" {
Config.PermalinkFmt = "/%F/"
}
if Config.PostFileFmt == "" {
Config.PostFileFmt = "%F/index.html"
}
if Config.PreviewServer == "" {
Config.PreviewServer = "127.0.0.1:8000"
}
if Config.PreviewDir == "" {
Config.PreviewDir = Config.HtmlDir
}
}
// IgnoredFile returns true if `filename` is in the ignored_files config
func IgnoredFile(filename string) bool {
for _, badFile := range Config.FileBlacklist {
if filename == badFile {
return true
}
}
return false
}
|