Mercurial > yakumo_izuru > aya
diff zs_ext.go @ 31:b2f491299cee draft
dead end with template functions
author | zaitsev.serge |
---|---|
date | Wed, 02 Sep 2015 14:54:16 +0000 |
parents | d966bcb229c0 |
children |
line wrap: on
line diff
--- a/zs_ext.go Sun Aug 30 21:16:51 2015 +0000 +++ b/zs_ext.go Wed Sep 02 14:54:16 2015 +0000 @@ -2,7 +2,10 @@ import ( "bytes" + "log" "os" + "path/filepath" + "sort" "strconv" "strings" "time" @@ -15,7 +18,7 @@ // zs var <filename> -- returns list of variables and their values // zs var <filename> <var...> -- returns list of variable values -func Var(args []string) string { +func Var(args ...string) string { if len(args) == 0 { return "var: filename expected" } else { @@ -38,7 +41,7 @@ } // zs lorem <n> -- returns <n> random lorem ipsum sentences -func Lorem(args []string) string { +func Lorem(args ...string) string { if len(args) > 1 { return "lorem: invalid usage" } @@ -53,7 +56,7 @@ } // zs datefmt <fmt> <date> -- returns formatted date from unix time -func DateFmt(args []string) string { +func DateFmt(args ...string) string { if len(args) == 0 || len(args) > 2 { return "datefmt: invalid usage" } @@ -65,7 +68,7 @@ } // zs dateparse <fmt> <date> -- returns unix time from the formatted date -func DateParse(args []string) string { +func DateParse(args ...string) string { if len(args) == 0 || len(args) > 2 { return "dateparse: invalid usage" } @@ -77,7 +80,7 @@ } // zs wc <file> -- returns word count in the file (markdown, html or amber) -func WordCount(args []string) int { +func WordCount(args ...string) int { if os.Getenv("ZS_RECURSION") != "" { return 0 } @@ -97,7 +100,69 @@ } // zs timetoread <file> -- returns number of minutes required to read the text -func TimeToRead(args []string) int { - wc := WordCount(args) +func TimeToRead(args ...string) int { + wc := WordCount(args...) return int(math.Floor(float64(wc)/200.0 + .5)) } + +// zs ls <dir> <regexp> +func List(args ...string) []string { + if len(args) != 2 { + return []string{} + } + + dir := args[0] + mask := args[1] + + res := []string{} + filepath.Walk(dir, func(path string, info os.FileInfo, err error) error { + if err != nil { + return nil + } + if !info.IsDir() { + if ok, err := filepath.Match(mask, info.Name()); ok && err == nil { + res = append(res, path) + } + } + return nil + }) + return res +} + +// zs sort <key> <files...> +func Sort(args ...string) []string { + delim := -1 + for i, s := range args { + if s == "--" { + delim = i + } + } + cmd := []string{"var", "title"} + if delim != -1 { + cmd = args[:delim] + args = args[delim+1:] + } + + sorted := map[string][]string{} + sortedKeys := []string{} + for _, f := range args { + params := append(cmd, f) + out := bytes.NewBuffer(nil) + run(os.Args[0], params, globals(), out) + val := string(out.Bytes()) + sorted[val] = append(sorted[val], f) + sortedKeys = append(sortedKeys, val) + } + log.Println(sortedKeys) + sort.Strings(sortedKeys) + if !asc { + } + + list := []string{} + for _, k := range sortedKeys { + vals := sorted[k] + sort.Strings(vals) + list = append(list, vals...) + } + return list +}