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)