Mercurial > yakumo_izuru > aya
annotate zs.go @ 20:f8373c23a3ff draft
replaced amber with my own fork, fixed file paths for amber and html
author | zaitsev.serge |
---|---|
date | Sat, 29 Aug 2015 21:43:59 +0000 |
parents | 802b96e67bae |
children | f5627d4212a3 |
rev | line source |
---|---|
0 | 1 package main |
2 | |
3 import ( | |
4 "bytes" | |
5 "fmt" | |
6 "io" | |
7 "io/ioutil" | |
8 "log" | |
9 "os" | |
10 "os/exec" | |
11 "path" | |
12 "path/filepath" | |
13 "strings" | |
18 | 14 "text/template" |
0 | 15 "time" |
16 | |
17 "github.com/russross/blackfriday" | |
17 | 18 "github.com/yosssi/gcss" |
20
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
19 "github.com/zserge/amber" |
0 | 20 ) |
21 | |
22 const ( | |
23 ZSDIR = ".zs" | |
24 PUBDIR = ".pub" | |
25 ) | |
26 | |
17 | 27 type Vars map[string]string |
3
53dea9841cd9
moved eval func type to the top, added some error logs
zaitsev.serge
parents:
2
diff
changeset
|
28 |
17 | 29 // Splits a string in exactly two parts by delimiter |
30 // If no delimiter is found - the second string is be empty | |
0 | 31 func split2(s, delim string) (string, string) { |
32 parts := strings.SplitN(s, delim, 2) | |
33 if len(parts) == 2 { | |
34 return parts[0], parts[1] | |
35 } else { | |
36 return parts[0], "" | |
37 } | |
38 } | |
39 | |
17 | 40 // Parses markdown content. Returns parsed header variables and content |
19
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
41 func md(path string, globals Vars) (Vars, string, error) { |
17 | 42 b, err := ioutil.ReadFile(path) |
43 if err != nil { | |
44 return nil, "", err | |
45 } | |
46 s := string(b) | |
6 | 47 url := path[:len(path)-len(filepath.Ext(path))] + ".html" |
17 | 48 v := Vars{ |
6 | 49 "file": path, |
50 "url": url, | |
51 "output": filepath.Join(PUBDIR, url), | |
52 } | |
20
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
53 if _, err := os.Stat(filepath.Join(ZSDIR, "layout.amber")); err == nil { |
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
54 v["layout"] = "layout.amber" |
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
55 } else { |
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
56 v["layout"] = "layout.html" |
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
57 } |
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
58 |
19
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
59 if info, err := os.Stat(path); err == nil { |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
60 v["date"] = info.ModTime().Format("02-01-2006") |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
61 } |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
62 for name, value := range globals { |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
63 v[name] = value |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
64 } |
2 | 65 if strings.Index(s, "\n\n") == -1 { |
19
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
66 return v, s, nil |
2 | 67 } |
0 | 68 header, body := split2(s, "\n\n") |
69 for _, line := range strings.Split(header, "\n") { | |
70 key, value := split2(line, ":") | |
71 v[strings.ToLower(strings.TrimSpace(key))] = strings.TrimSpace(value) | |
72 } | |
6 | 73 if strings.HasPrefix(v["url"], "./") { |
74 v["url"] = v["url"][2:] | |
75 } | |
17 | 76 return v, body, nil |
0 | 77 } |
78 | |
18 | 79 // Use standard Go templates |
80 func render(s string, funcs template.FuncMap, vars Vars) (string, error) { | |
81 f := template.FuncMap{} | |
82 for k, v := range funcs { | |
83 f[k] = v | |
84 } | |
85 for k, v := range vars { | |
86 f[k] = varFunc(v) | |
0 | 87 } |
18 | 88 tmpl, err := template.New("").Funcs(f).Parse(s) |
89 if err != nil { | |
90 return "", err | |
91 } | |
92 out := &bytes.Buffer{} | |
93 if err := tmpl.Execute(out, vars); err != nil { | |
94 return "", err | |
95 } | |
96 return string(out.Bytes()), nil | |
0 | 97 } |
98 | |
17 | 99 // Converts zs markdown variables into environment variables |
100 func env(vars Vars) []string { | |
7
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
101 env := []string{"ZS=" + os.Args[0], "ZS_OUTDIR=" + PUBDIR} |
4
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
102 env = append(env, os.Environ()...) |
7
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
103 if vars != nil { |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
104 for k, v := range vars { |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
105 env = append(env, "ZS_"+strings.ToUpper(k)+"="+v) |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
106 } |
0 | 107 } |
4
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
108 return env |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
109 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
110 |
17 | 111 // Runs command with given arguments and variables, intercepts stderr and |
112 // redirects stdout into the given writer | |
113 func run(cmd string, args []string, vars Vars, output io.Writer) error { | |
4
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
114 var errbuf bytes.Buffer |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
115 c := exec.Command(cmd, args...) |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
116 c.Env = env(vars) |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
117 c.Stdout = output |
0 | 118 c.Stderr = &errbuf |
4
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
119 |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
120 err := c.Run() |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
121 |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
122 if errbuf.Len() > 0 { |
20
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
123 log.Println("ERROR:", errbuf.String()) |
4
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
124 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
125 |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
126 if err != nil { |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
127 return err |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
128 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
129 return nil |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
130 } |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
131 |
18 | 132 // Expands macro: either replacing it with the variable value, or |
133 // running the plugin command and replacing it with the command's output | |
17 | 134 func eval(cmd []string, vars Vars) (string, error) { |
4
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
135 outbuf := bytes.NewBuffer(nil) |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
136 err := run(path.Join(ZSDIR, cmd[0]), cmd[1:], vars, outbuf) |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
137 if err != nil { |
5 | 138 if _, ok := err.(*exec.ExitError); ok { |
139 return "", err | |
140 } | |
4
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
141 outbuf = bytes.NewBuffer(nil) |
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
142 err := run(cmd[0], cmd[1:], vars, outbuf) |
5 | 143 // Return exit errors, but ignore if the command was not found |
144 if _, ok := err.(*exec.ExitError); ok { | |
0 | 145 return "", err |
146 } | |
147 } | |
148 return outbuf.String(), nil | |
149 } | |
150 | |
18 | 151 // Renders markdown with the given layout into html expanding all the macros |
152 func buildMarkdown(path string, funcs template.FuncMap, vars Vars) error { | |
19
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
153 v, body, err := md(path, vars) |
0 | 154 if err != nil { |
155 return err | |
156 } | |
18 | 157 content, err := render(body, funcs, v) |
0 | 158 if err != nil { |
159 return err | |
160 } | |
161 v["content"] = string(blackfriday.MarkdownBasic([]byte(content))) | |
18 | 162 if strings.HasSuffix(v["layout"], ".amber") { |
20
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
163 return buildAmber(filepath.Join(ZSDIR, v["layout"]), |
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
164 renameExt(path, "", ".html"), funcs, v) |
18 | 165 } else { |
20
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
166 return buildPlain(filepath.Join(ZSDIR, v["layout"]), |
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
167 renameExt(path, "", ".html"), funcs, v) |
18 | 168 } |
14 | 169 } |
170 | |
18 | 171 // Renders text file expanding all variable macros inside it |
20
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
172 func buildPlain(in, out string, funcs template.FuncMap, vars Vars) error { |
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
173 b, err := ioutil.ReadFile(in) |
0 | 174 if err != nil { |
175 return err | |
176 } | |
18 | 177 content, err := render(string(b), funcs, vars) |
0 | 178 if err != nil { |
179 return err | |
180 } | |
20
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
181 output := filepath.Join(PUBDIR, out) |
14 | 182 if s, ok := vars["output"]; ok { |
183 output = s | |
184 } | |
185 err = ioutil.WriteFile(output, []byte(content), 0666) | |
0 | 186 if err != nil { |
187 return err | |
188 } | |
189 return nil | |
190 } | |
191 | |
18 | 192 // Renders .amber file into .html |
20
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
193 func buildAmber(in, out string, funcs template.FuncMap, vars Vars) error { |
17 | 194 a := amber.New() |
20
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
195 err := a.ParseFile(in) |
17 | 196 if err != nil { |
197 return err | |
198 } | |
199 t, err := a.Compile() | |
200 if err != nil { | |
201 return err | |
202 } | |
203 //amber.FuncMap = amber.FuncMap | |
20
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
204 f, err := os.Create(filepath.Join(PUBDIR, out)) |
17 | 205 if err != nil { |
206 return err | |
207 } | |
208 defer f.Close() | |
209 return t.Execute(f, vars) | |
210 } | |
211 | |
18 | 212 // Compiles .gcss into .css |
213 func buildGCSS(path string) error { | |
214 f, err := os.Open(path) | |
215 if err != nil { | |
216 return err | |
217 } | |
218 s := strings.TrimSuffix(path, ".gcss") + ".css" | |
219 css, err := os.Create(filepath.Join(PUBDIR, s)) | |
220 if err != nil { | |
221 return err | |
222 } | |
223 | |
224 defer f.Close() | |
225 defer css.Close() | |
226 | |
227 _, err = gcss.Compile(css, f) | |
228 return err | |
229 } | |
230 | |
231 // Copies file from working directory into public directory | |
7
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
232 func copyFile(path string) (err error) { |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
233 var in, out *os.File |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
234 if in, err = os.Open(path); err == nil { |
0 | 235 defer in.Close() |
7
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
236 if out, err = os.Create(filepath.Join(PUBDIR, path)); err == nil { |
0 | 237 defer out.Close() |
238 _, err = io.Copy(out, in) | |
239 } | |
240 } | |
7
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
241 return err |
0 | 242 } |
243 | |
18 | 244 func varFunc(s string) func() string { |
245 return func() string { | |
246 return s | |
247 } | |
248 } | |
249 | |
250 func pluginFunc(cmd string) func() string { | |
251 return func() string { | |
252 return "Not implemented yet" | |
253 } | |
254 } | |
255 | |
256 func createFuncs() template.FuncMap { | |
257 // Builtin functions | |
19
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
258 funcs := template.FuncMap{ |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
259 "exec": func(s ...string) string { |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
260 // Run external command with arguments |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
261 return "" |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
262 }, |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
263 "zs": func(args ...string) string { |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
264 // Run zs with arguments |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
265 return "" |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
266 }, |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
267 } |
18 | 268 // Plugin functions |
269 files, _ := ioutil.ReadDir(ZSDIR) | |
270 for _, f := range files { | |
271 if !f.IsDir() { | |
272 name := f.Name() | |
273 if !strings.HasSuffix(name, ".html") && !strings.HasSuffix(name, ".amber") { | |
274 funcs[strings.TrimSuffix(name, filepath.Ext(name))] = pluginFunc(name) | |
275 } | |
276 } | |
277 } | |
278 return funcs | |
279 } | |
280 | |
20
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
281 func renameExt(path, from, to string) string { |
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
282 if from == "" { |
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
283 from = filepath.Ext(path) |
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
284 } |
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
285 return strings.TrimSuffix(path, from) + to |
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
286 } |
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
287 |
19
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
288 func globals() Vars { |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
289 vars := Vars{} |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
290 for _, e := range os.Environ() { |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
291 pair := strings.Split(e, "=") |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
292 if strings.HasPrefix(pair[0], "ZS_") { |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
293 vars[strings.ToLower(pair[0][3:])] = pair[1] |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
294 } |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
295 } |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
296 return vars |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
297 } |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
298 |
0 | 299 func buildAll(once bool) { |
300 lastModified := time.Unix(0, 0) | |
7
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
301 modified := false |
19
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
302 |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
303 vars := globals() |
0 | 304 for { |
305 os.Mkdir(PUBDIR, 0755) | |
18 | 306 funcs := createFuncs() |
0 | 307 err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error { |
308 // ignore hidden files and directories | |
309 if filepath.Base(path)[0] == '.' || strings.HasPrefix(path, ".") { | |
310 return nil | |
311 } | |
312 | |
7
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
313 if info.IsDir() { |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
314 os.Mkdir(filepath.Join(PUBDIR, path), 0755) |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
315 return nil |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
316 } else if info.ModTime().After(lastModified) { |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
317 if !modified { |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
318 // About to be modified, so run pre-build hook |
18 | 319 // FIXME on windows it might not work well |
7
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
320 run(filepath.Join(ZSDIR, "pre"), []string{}, nil, nil) |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
321 modified = true |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
322 } |
0 | 323 ext := filepath.Ext(path) |
13 | 324 if ext == ".md" || ext == ".mkd" { |
17 | 325 log.Println("md: ", path) |
19
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
326 return buildMarkdown(path, funcs, vars) |
15 | 327 } else if ext == ".html" || ext == ".xml" { |
17 | 328 log.Println("html: ", path) |
20
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
329 return buildPlain(path, path, funcs, vars) |
17 | 330 } else if ext == ".amber" { |
331 log.Println("html: ", path) | |
20
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
332 return buildAmber(path, renameExt(path, ".amber", ".html"), funcs, vars) |
17 | 333 } else if ext == ".gcss" { |
334 log.Println("css: ", path) | |
335 return buildGCSS(path) | |
0 | 336 } else { |
337 log.Println("raw: ", path) | |
338 return copyFile(path) | |
339 } | |
340 } | |
341 return nil | |
342 }) | |
343 if err != nil { | |
344 log.Println("ERROR:", err) | |
345 } | |
7
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
346 if modified { |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
347 // Something was modified, so post-build hook |
18 | 348 // FIXME on windows it might not work well |
7
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
349 run(filepath.Join(ZSDIR, "post"), []string{}, nil, nil) |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
350 modified = false |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
351 } |
0 | 352 lastModified = time.Now() |
353 if once { | |
354 break | |
355 } | |
356 time.Sleep(1 * time.Second) | |
357 } | |
358 } | |
359 | |
360 func main() { | |
361 if len(os.Args) == 1 { | |
362 fmt.Println(os.Args[0], "<command> [args]") | |
363 return | |
364 } | |
365 cmd := os.Args[1] | |
366 args := os.Args[2:] | |
367 switch cmd { | |
368 case "build": | |
369 buildAll(true) | |
370 case "watch": | |
371 buildAll(false) // pass duration | |
372 case "var": | |
373 if len(args) == 0 { | |
3
53dea9841cd9
moved eval func type to the top, added some error logs
zaitsev.serge
parents:
2
diff
changeset
|
374 log.Println("ERROR: filename expected") |
0 | 375 return |
376 } | |
19
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
377 if vars, _, err := md(args[0], globals()); err == nil { |
0 | 378 if len(args) > 1 { |
379 for _, a := range args[1:] { | |
380 fmt.Println(vars[a]) | |
381 } | |
382 } else { | |
383 for k, v := range vars { | |
384 fmt.Println(k + ":" + v) | |
385 } | |
386 } | |
387 } else { | |
20
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
388 log.Println("ERROR:", err) |
0 | 389 } |
390 default: | |
17 | 391 err := run(path.Join(ZSDIR, cmd), args, Vars{}, os.Stdout) |
4
05fc24caac37
render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents:
3
diff
changeset
|
392 if err != nil { |
20
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
393 log.Println("ERROR:", err) |
0 | 394 } |
395 } | |
396 } |