Mercurial > yakumo_izuru > aya
diff 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 |
line wrap: on
line diff
--- a/zs_util.go Sun Aug 30 21:16:51 2015 +0000 +++ b/zs_util.go Wed Sep 02 14:54:16 2015 +0000 @@ -3,6 +3,7 @@ import ( "bytes" "io" + "io/ioutil" "log" "os" "os/exec" @@ -10,6 +11,29 @@ "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 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 @@ 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...) }, } }