Mercurial > yakumo_izuru > aya
comparison 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 |
comparison
equal
deleted
inserted
replaced
19:802b96e67bae | 20:f8373c23a3ff |
---|---|
12 "path/filepath" | 12 "path/filepath" |
13 "strings" | 13 "strings" |
14 "text/template" | 14 "text/template" |
15 "time" | 15 "time" |
16 | 16 |
17 "github.com/eknkc/amber" | |
18 "github.com/russross/blackfriday" | 17 "github.com/russross/blackfriday" |
19 "github.com/yosssi/gcss" | 18 "github.com/yosssi/gcss" |
19 "github.com/zserge/amber" | |
20 ) | 20 ) |
21 | 21 |
22 const ( | 22 const ( |
23 ZSDIR = ".zs" | 23 ZSDIR = ".zs" |
24 PUBDIR = ".pub" | 24 PUBDIR = ".pub" |
47 url := path[:len(path)-len(filepath.Ext(path))] + ".html" | 47 url := path[:len(path)-len(filepath.Ext(path))] + ".html" |
48 v := Vars{ | 48 v := Vars{ |
49 "file": path, | 49 "file": path, |
50 "url": url, | 50 "url": url, |
51 "output": filepath.Join(PUBDIR, url), | 51 "output": filepath.Join(PUBDIR, url), |
52 "layout": "index.html", | 52 } |
53 } | 53 if _, err := os.Stat(filepath.Join(ZSDIR, "layout.amber")); err == nil { |
54 v["layout"] = "layout.amber" | |
55 } else { | |
56 v["layout"] = "layout.html" | |
57 } | |
58 | |
54 if info, err := os.Stat(path); err == nil { | 59 if info, err := os.Stat(path); err == nil { |
55 v["date"] = info.ModTime().Format("02-01-2006") | 60 v["date"] = info.ModTime().Format("02-01-2006") |
56 } | 61 } |
57 for name, value := range globals { | 62 for name, value := range globals { |
58 v[name] = value | 63 v[name] = value |
113 c.Stderr = &errbuf | 118 c.Stderr = &errbuf |
114 | 119 |
115 err := c.Run() | 120 err := c.Run() |
116 | 121 |
117 if errbuf.Len() > 0 { | 122 if errbuf.Len() > 0 { |
118 log.Println(errbuf.String()) | 123 log.Println("ERROR:", errbuf.String()) |
119 } | 124 } |
120 | 125 |
121 if err != nil { | 126 if err != nil { |
122 return err | 127 return err |
123 } | 128 } |
153 if err != nil { | 158 if err != nil { |
154 return err | 159 return err |
155 } | 160 } |
156 v["content"] = string(blackfriday.MarkdownBasic([]byte(content))) | 161 v["content"] = string(blackfriday.MarkdownBasic([]byte(content))) |
157 if strings.HasSuffix(v["layout"], ".amber") { | 162 if strings.HasSuffix(v["layout"], ".amber") { |
158 return buildAmber(filepath.Join(ZSDIR, v["layout"]), funcs, v) | 163 return buildAmber(filepath.Join(ZSDIR, v["layout"]), |
164 renameExt(path, "", ".html"), funcs, v) | |
159 } else { | 165 } else { |
160 return buildPlain(filepath.Join(ZSDIR, v["layout"]), funcs, v) | 166 return buildPlain(filepath.Join(ZSDIR, v["layout"]), |
167 renameExt(path, "", ".html"), funcs, v) | |
161 } | 168 } |
162 } | 169 } |
163 | 170 |
164 // Renders text file expanding all variable macros inside it | 171 // Renders text file expanding all variable macros inside it |
165 func buildPlain(path string, funcs template.FuncMap, vars Vars) error { | 172 func buildPlain(in, out string, funcs template.FuncMap, vars Vars) error { |
166 b, err := ioutil.ReadFile(path) | 173 b, err := ioutil.ReadFile(in) |
167 if err != nil { | 174 if err != nil { |
168 return err | 175 return err |
169 } | 176 } |
170 content, err := render(string(b), funcs, vars) | 177 content, err := render(string(b), funcs, vars) |
171 if err != nil { | 178 if err != nil { |
172 return err | 179 return err |
173 } | 180 } |
174 output := filepath.Join(PUBDIR, path) | 181 output := filepath.Join(PUBDIR, out) |
175 if s, ok := vars["output"]; ok { | 182 if s, ok := vars["output"]; ok { |
176 output = s | 183 output = s |
177 } | 184 } |
178 err = ioutil.WriteFile(output, []byte(content), 0666) | 185 err = ioutil.WriteFile(output, []byte(content), 0666) |
179 if err != nil { | 186 if err != nil { |
181 } | 188 } |
182 return nil | 189 return nil |
183 } | 190 } |
184 | 191 |
185 // Renders .amber file into .html | 192 // Renders .amber file into .html |
186 func buildAmber(path string, funcs template.FuncMap, vars Vars) error { | 193 func buildAmber(in, out string, funcs template.FuncMap, vars Vars) error { |
187 a := amber.New() | 194 a := amber.New() |
188 err := a.ParseFile(path) | 195 err := a.ParseFile(in) |
189 if err != nil { | 196 if err != nil { |
190 return err | 197 return err |
191 } | 198 } |
192 t, err := a.Compile() | 199 t, err := a.Compile() |
193 if err != nil { | 200 if err != nil { |
194 return err | 201 return err |
195 } | 202 } |
196 //amber.FuncMap = amber.FuncMap | 203 //amber.FuncMap = amber.FuncMap |
197 s := strings.TrimSuffix(path, ".amber") + ".html" | 204 f, err := os.Create(filepath.Join(PUBDIR, out)) |
198 f, err := os.Create(filepath.Join(PUBDIR, s)) | |
199 if err != nil { | 205 if err != nil { |
200 return err | 206 return err |
201 } | 207 } |
202 defer f.Close() | 208 defer f.Close() |
203 return t.Execute(f, vars) | 209 return t.Execute(f, vars) |
268 funcs[strings.TrimSuffix(name, filepath.Ext(name))] = pluginFunc(name) | 274 funcs[strings.TrimSuffix(name, filepath.Ext(name))] = pluginFunc(name) |
269 } | 275 } |
270 } | 276 } |
271 } | 277 } |
272 return funcs | 278 return funcs |
279 } | |
280 | |
281 func renameExt(path, from, to string) string { | |
282 if from == "" { | |
283 from = filepath.Ext(path) | |
284 } | |
285 return strings.TrimSuffix(path, from) + to | |
273 } | 286 } |
274 | 287 |
275 func globals() Vars { | 288 func globals() Vars { |
276 vars := Vars{} | 289 vars := Vars{} |
277 for _, e := range os.Environ() { | 290 for _, e := range os.Environ() { |
311 if ext == ".md" || ext == ".mkd" { | 324 if ext == ".md" || ext == ".mkd" { |
312 log.Println("md: ", path) | 325 log.Println("md: ", path) |
313 return buildMarkdown(path, funcs, vars) | 326 return buildMarkdown(path, funcs, vars) |
314 } else if ext == ".html" || ext == ".xml" { | 327 } else if ext == ".html" || ext == ".xml" { |
315 log.Println("html: ", path) | 328 log.Println("html: ", path) |
316 return buildPlain(path, funcs, vars) | 329 return buildPlain(path, path, funcs, vars) |
317 } else if ext == ".amber" { | 330 } else if ext == ".amber" { |
318 log.Println("html: ", path) | 331 log.Println("html: ", path) |
319 return buildAmber(path, funcs, vars) | 332 return buildAmber(path, renameExt(path, ".amber", ".html"), funcs, vars) |
320 } else if ext == ".gcss" { | 333 } else if ext == ".gcss" { |
321 log.Println("css: ", path) | 334 log.Println("css: ", path) |
322 return buildGCSS(path) | 335 return buildGCSS(path) |
323 } else { | 336 } else { |
324 log.Println("raw: ", path) | 337 log.Println("raw: ", path) |
370 for k, v := range vars { | 383 for k, v := range vars { |
371 fmt.Println(k + ":" + v) | 384 fmt.Println(k + ":" + v) |
372 } | 385 } |
373 } | 386 } |
374 } else { | 387 } else { |
375 log.Println(err) | 388 log.Println("ERROR:", err) |
376 } | 389 } |
377 default: | 390 default: |
378 err := run(path.Join(ZSDIR, cmd), args, Vars{}, os.Stdout) | 391 err := run(path.Join(ZSDIR, cmd), args, Vars{}, os.Stdout) |
379 if err != nil { | 392 if err != nil { |
380 log.Println(err) | 393 log.Println("ERROR:", err) |
381 } | 394 } |
382 } | 395 } |
383 } | 396 } |