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 }