Mercurial > yakumo_izuru > aya
comparison zs.go @ 34:ed40ca93db1e draft
added explicit yaml separator, fixed amber compilation sequence
author | zaitsev.serge |
---|---|
date | Wed, 02 Sep 2015 17:35:26 +0000 |
parents | e3c902a7380d |
children | 0498cb3afc1d |
comparison
equal
deleted
inserted
replaced
33:e3c902a7380d | 34:ed40ca93db1e |
---|---|
14 "time" | 14 "time" |
15 | 15 |
16 "github.com/eknkc/amber" | 16 "github.com/eknkc/amber" |
17 "github.com/russross/blackfriday" | 17 "github.com/russross/blackfriday" |
18 "github.com/yosssi/gcss" | 18 "github.com/yosssi/gcss" |
19 "gopkg.in/yaml.v1" | 19 "gopkg.in/yaml.v2" |
20 ) | 20 ) |
21 | 21 |
22 const ( | 22 const ( |
23 ZSDIR = ".zs" | 23 ZSDIR = ".zs" |
24 PUBDIR = ".pub" | 24 PUBDIR = ".pub" |
113 } | 113 } |
114 v["file"] = path | 114 v["file"] = path |
115 v["url"] = path[:len(path)-len(filepath.Ext(path))] + ".html" | 115 v["url"] = path[:len(path)-len(filepath.Ext(path))] + ".html" |
116 v["output"] = filepath.Join(PUBDIR, v["url"]) | 116 v["output"] = filepath.Join(PUBDIR, v["url"]) |
117 | 117 |
118 if sep := strings.Index(s, "\n\n"); sep == -1 { | 118 delim := "\n---\n" |
119 if sep := strings.Index(s, delim); sep == -1 { | |
119 return v, s, nil | 120 return v, s, nil |
120 } else { | 121 } else { |
121 header := s[:sep] | 122 header := s[:sep] |
122 body := s[sep+len("\n\n"):] | 123 body := s[sep+len(delim):] |
124 | |
123 vars := Vars{} | 125 vars := Vars{} |
124 if err := yaml.Unmarshal([]byte(header), &vars); err != nil { | 126 if err := yaml.Unmarshal([]byte(header), &vars); err != nil { |
125 fmt.Println("ERROR: failed to parse header", err) | 127 fmt.Println("ERROR: failed to parse header", err) |
128 return nil, "", err | |
126 } else { | 129 } else { |
127 for key, value := range vars { | 130 for key, value := range vars { |
128 v[key] = value | 131 v[key] = value |
132 log.Println(key, value) | |
129 } | 133 } |
130 } | 134 } |
131 if strings.HasPrefix(v["url"], "./") { | 135 if strings.HasPrefix(v["url"], "./") { |
132 v["url"] = v["url"][2:] | 136 v["url"] = v["url"][2:] |
133 } | 137 } |
224 func buildAmber(path string, w io.Writer, vars Vars) error { | 228 func buildAmber(path string, w io.Writer, vars Vars) error { |
225 v, body, err := getVars(path, vars) | 229 v, body, err := getVars(path, vars) |
226 if err != nil { | 230 if err != nil { |
227 return err | 231 return err |
228 } | 232 } |
229 if body, err = render(body, v); err != nil { | |
230 return err | |
231 } | |
232 | |
233 a := amber.New() | 233 a := amber.New() |
234 if err := a.Parse(body); err != nil { | 234 if err := a.Parse(body); err != nil { |
235 fmt.Println(body) | |
235 return err | 236 return err |
236 } | 237 } |
237 | 238 |
238 t, err := a.Compile() | 239 t, err := a.Compile() |
239 if err != nil { | 240 if err != nil { |
240 return err | 241 return err |
241 } | 242 } |
243 | |
244 htmlBuf := &bytes.Buffer{} | |
245 if err := t.Execute(htmlBuf, v); err != nil { | |
246 return err | |
247 } | |
248 | |
249 if body, err = render(string(htmlBuf.Bytes()), v); err != nil { | |
250 return err | |
251 } | |
252 | |
242 if w == nil { | 253 if w == nil { |
243 f, err := os.Create(filepath.Join(PUBDIR, renameExt(path, ".amber", ".html"))) | 254 f, err := os.Create(filepath.Join(PUBDIR, renameExt(path, ".amber", ".html"))) |
244 if err != nil { | 255 if err != nil { |
245 return err | 256 return err |
246 } | 257 } |
247 defer f.Close() | 258 defer f.Close() |
248 w = f | 259 w = f |
249 } | 260 } |
250 return t.Execute(w, vars) | 261 _, err = io.WriteString(w, body) |
262 return err | |
251 } | 263 } |
252 | 264 |
253 // Compiles .gcss into .css | 265 // Compiles .gcss into .css |
254 func buildGCSS(path string, w io.Writer) error { | 266 func buildGCSS(path string, w io.Writer) error { |
255 f, err := os.Open(path) | 267 f, err := os.Open(path) |