dead end with template functions

git-svn-id: file:///srv/svn/repo/aya/trunk@32 cec141ff-132a-4243-88a5-ce187bd62f94
This commit is contained in:
zaitsev.serge
2015-09-02 14:54:16 +00:00
parent 443716fb2a
commit 21269a84d0
3 changed files with 142 additions and 37 deletions

View File

@@ -3,6 +3,7 @@ package main
import (
"bytes"
"io"
"io/ioutil"
"log"
"os"
"os/exec"
@@ -10,6 +11,29 @@ import (
"strings"
)
func makeFuncs(funcs Funcs, vars Vars) Funcs {
f := Funcs{}
for k, v := range funcs {
f[k] = v
}
for k, v := range vars {
f[k] = varFunc(v)
}
// Plugin functions
files, _ := ioutil.ReadDir(ZSDIR)
for _, file := range files {
if !file.IsDir() {
name := file.Name()
if !strings.HasSuffix(name, ".html") && !strings.HasSuffix(name, ".amber") {
f[renameExt(name, "", "")] = pluginFunc(name, vars)
} else {
f[renameExt(name, "", "")] = partialFunc(name, f, vars)
}
}
}
return f
}
func varFunc(s string) func() string {
return func() string {
return s
@@ -27,6 +51,22 @@ func pluginFunc(cmd string, vars Vars) func(args ...string) string {
}
}
func partialFunc(name string, funcs Funcs, vars Vars) func() string {
return func() string {
var err error
w := bytes.NewBuffer(nil)
if strings.HasSuffix(name, ".amber") {
err = buildAmber(filepath.Join(ZSDIR, name), w, funcs, vars)
} else {
err = buildHTML(filepath.Join(ZSDIR, name), w, funcs, vars)
}
if err != nil {
return name + ":" + err.Error()
}
return string(w.Bytes())
}
}
func builtins() Funcs {
exec := func(cmd string, args ...string) string {
out := bytes.NewBuffer(nil)
@@ -38,9 +78,20 @@ func builtins() Funcs {
return ""
}
return Funcs{
"exec": exec,
"zs": func(args ...string) string {
return exec(os.Args[0], args...)
"exec": exec,
"var": Var,
"lorem": Lorem,
"dateparse": DateParse,
"datefmt": DateFmt,
"wc": WordCount,
"ttr": TimeToRead,
"ls": List,
"...": func(args ...string) []string {
return append([]string{"..."}, args...)
},
"sort": func(args ...string) []string {
return Sort(args...)
},
}
}