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
+}