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:
79
zs_ext.go
79
zs_ext.go
@@ -2,7 +2,10 @@ package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
@@ -15,7 +18,7 @@ import (
|
||||
|
||||
// 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 @@ func Var(args []string) string {
|
||||
}
|
||||
|
||||
// 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 @@ func Lorem(args []string) string {
|
||||
}
|
||||
|
||||
// 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 @@ func DateFmt(args []string) string {
|
||||
}
|
||||
|
||||
// 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 @@ func DateParse(args []string) string {
|
||||
}
|
||||
|
||||
// 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 @@ func WordCount(args []string) int {
|
||||
}
|
||||
|
||||
// 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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user