comparison zs.go @ 31:b2f491299cee draft

dead end with template functions
author zaitsev.serge
date Wed, 02 Sep 2015 14:54:16 +0000
parents 526ba3c717ba
children 75822e38c3e0
comparison
equal deleted inserted replaced
30:526ba3c717ba 31:b2f491299cee
65 return v, body, nil 65 return v, body, nil
66 } 66 }
67 67
68 // Use standard Go templates 68 // Use standard Go templates
69 func render(s string, funcs Funcs, vars Vars) (string, error) { 69 func render(s string, funcs Funcs, vars Vars) (string, error) {
70 f := Funcs{} 70 f := makeFuncs(funcs, vars)
71 for k, v := range funcs {
72 f[k] = v
73 }
74 for k, v := range vars {
75 f[k] = varFunc(v)
76 }
77 // Plugin functions
78 files, _ := ioutil.ReadDir(ZSDIR)
79 for _, file := range files {
80 if !file.IsDir() {
81 name := file.Name()
82 if !strings.HasSuffix(name, ".html") && !strings.HasSuffix(name, ".amber") {
83 f[strings.TrimSuffix(name, filepath.Ext(name))] = pluginFunc(name, vars)
84 }
85 }
86 }
87
88 tmpl, err := template.New("").Funcs(template.FuncMap(f)).Parse(s) 71 tmpl, err := template.New("").Funcs(template.FuncMap(f)).Parse(s)
89 if err != nil { 72 if err != nil {
90 return "", err 73 return "", err
91 } 74 }
92 out := &bytes.Buffer{} 75 out := &bytes.Buffer{}
104 } 87 }
105 content, err := render(body, funcs, v) 88 content, err := render(body, funcs, v)
106 if err != nil { 89 if err != nil {
107 return err 90 return err
108 } 91 }
109 v["content"] = string(blackfriday.MarkdownBasic([]byte(content))) 92 v["content"] = string(blackfriday.MarkdownCommon([]byte(content)))
110 if w == nil { 93 if w == nil {
111 out, err := os.Create(filepath.Join(PUBDIR, renameExt(path, "", ".html"))) 94 out, err := os.Create(filepath.Join(PUBDIR, renameExt(path, "", ".html")))
112 if err != nil { 95 if err != nil {
113 return err 96 return err
114 } 97 }
154 137
155 data := map[string]interface{}{} 138 data := map[string]interface{}{}
156 for k, v := range vars { 139 for k, v := range vars {
157 data[k] = v 140 data[k] = v
158 } 141 }
159 for k, v := range funcs { 142 for k, v := range makeFuncs(funcs, Vars{}) {
160 data[k] = v 143 data[k] = v
161 } 144 }
162 145
163 t, err := a.Compile() 146 t, err := a.Compile()
164 if err != nil { 147 if err != nil {
300 fmt.Println("ERROR: too many arguments") 283 fmt.Println("ERROR: too many arguments")
301 } 284 }
302 case "watch": 285 case "watch":
303 buildAll(true) 286 buildAll(true)
304 case "var": 287 case "var":
305 fmt.Println(Var(args)) 288 fmt.Println(Var(args...))
306 case "lorem": 289 case "lorem":
307 fmt.Println(Lorem(args)) 290 fmt.Println(Lorem(args...))
308 case "dateparse": 291 case "dateparse":
309 fmt.Println(DateParse(args)) 292 fmt.Println(DateParse(args...))
310 case "datefmt": 293 case "datefmt":
311 fmt.Println(DateFmt(args)) 294 fmt.Println(DateFmt(args...))
312 case "wc": 295 case "wc":
313 fmt.Println(WordCount(args)) 296 fmt.Println(WordCount(args...))
314 case "timetoread": 297 case "ttr":
315 fmt.Println(TimeToRead(args)) 298 fmt.Println(TimeToRead(args...))
299 case "ls":
300 fmt.Println(strings.Join(List(args...), "\n"))
301 case "sort":
302 fmt.Println(strings.Join(Sort(args...), "\n"))
303 case "exec":
304 // TODO
316 default: 305 default:
317 err := run(path.Join(ZSDIR, cmd), args, globals(), os.Stdout) 306 err := run(path.Join(ZSDIR, cmd), args, globals(), os.Stdout)
318 if err != nil { 307 if err != nil {
319 log.Println("ERROR:", err) 308 log.Println("ERROR:", err)
320 } 309 }