comparison zs_util.go @ 31:b2f491299cee draft

dead end with template functions
author zaitsev.serge
date Wed, 02 Sep 2015 14:54:16 +0000
parents d052f3a44195
children
comparison
equal deleted inserted replaced
30:526ba3c717ba 31:b2f491299cee
1 package main 1 package main
2 2
3 import ( 3 import (
4 "bytes" 4 "bytes"
5 "io" 5 "io"
6 "io/ioutil"
6 "log" 7 "log"
7 "os" 8 "os"
8 "os/exec" 9 "os/exec"
9 "path/filepath" 10 "path/filepath"
10 "strings" 11 "strings"
11 ) 12 )
13
14 func makeFuncs(funcs Funcs, vars Vars) Funcs {
15 f := Funcs{}
16 for k, v := range funcs {
17 f[k] = v
18 }
19 for k, v := range vars {
20 f[k] = varFunc(v)
21 }
22 // Plugin functions
23 files, _ := ioutil.ReadDir(ZSDIR)
24 for _, file := range files {
25 if !file.IsDir() {
26 name := file.Name()
27 if !strings.HasSuffix(name, ".html") && !strings.HasSuffix(name, ".amber") {
28 f[renameExt(name, "", "")] = pluginFunc(name, vars)
29 } else {
30 f[renameExt(name, "", "")] = partialFunc(name, f, vars)
31 }
32 }
33 }
34 return f
35 }
12 36
13 func varFunc(s string) func() string { 37 func varFunc(s string) func() string {
14 return func() string { 38 return func() string {
15 return s 39 return s
16 } 40 }
25 return string(out.Bytes()) 49 return string(out.Bytes())
26 } 50 }
27 } 51 }
28 } 52 }
29 53
54 func partialFunc(name string, funcs Funcs, vars Vars) func() string {
55 return func() string {
56 var err error
57 w := bytes.NewBuffer(nil)
58 if strings.HasSuffix(name, ".amber") {
59 err = buildAmber(filepath.Join(ZSDIR, name), w, funcs, vars)
60 } else {
61 err = buildHTML(filepath.Join(ZSDIR, name), w, funcs, vars)
62 }
63 if err != nil {
64 return name + ":" + err.Error()
65 }
66 return string(w.Bytes())
67 }
68 }
69
30 func builtins() Funcs { 70 func builtins() Funcs {
31 exec := func(cmd string, args ...string) string { 71 exec := func(cmd string, args ...string) string {
32 out := bytes.NewBuffer(nil) 72 out := bytes.NewBuffer(nil)
33 if err := run(cmd, args, Vars{}, out); err != nil { 73 if err := run(cmd, args, Vars{}, out); err != nil {
34 return cmd + ":" + err.Error() 74 return cmd + ":" + err.Error()
36 return string(out.Bytes()) 76 return string(out.Bytes())
37 } 77 }
38 return "" 78 return ""
39 } 79 }
40 return Funcs{ 80 return Funcs{
41 "exec": exec, 81 "exec": exec,
42 "zs": func(args ...string) string { 82 "var": Var,
43 return exec(os.Args[0], args...) 83 "lorem": Lorem,
84 "dateparse": DateParse,
85 "datefmt": DateFmt,
86 "wc": WordCount,
87 "ttr": TimeToRead,
88 "ls": List,
89 "...": func(args ...string) []string {
90 return append([]string{"..."}, args...)
91 },
92 "sort": func(args ...string) []string {
93
94 return Sort(args...)
44 }, 95 },
45 } 96 }
46 } 97 }
47 98
48 func renameExt(path, from, to string) string { 99 func renameExt(path, from, to string) string {