added word count and time to read functions

This commit is contained in:
Serge A. Zaitsev 2015-08-30 14:42:22 +02:00
parent 6b2dbafa34
commit 2901049048
2 changed files with 34 additions and 0 deletions

4
zs.go
View File

@ -304,6 +304,10 @@ func main() {
fmt.Println(DateParse(args)) fmt.Println(DateParse(args))
case "datefmt": case "datefmt":
fmt.Println(DateFmt(args)) fmt.Println(DateFmt(args))
case "wc":
fmt.Println(WordCount(args))
case "timetoread":
fmt.Println(TimeToRead(args))
default: default:
err := run(path.Join(ZSDIR, cmd), args, Vars{}, os.Stdout) err := run(path.Join(ZSDIR, cmd), args, Vars{}, os.Stdout)
if err != nil { if err != nil {

View File

@ -1,11 +1,15 @@
package main package main
import ( import (
"bytes"
"os"
"strconv" "strconv"
"strings" "strings"
"time" "time"
"github.com/drhodes/golorem" "github.com/drhodes/golorem"
"github.com/google/gxui/math"
"github.com/jaytaylor/html2text"
) )
// zs var <filename> -- returns list of variables and their values // zs var <filename> -- returns list of variables and their values
@ -70,3 +74,29 @@ func DateParse(args []string) string {
return strconv.FormatInt(d.Unix(), 10) return strconv.FormatInt(d.Unix(), 10)
} }
} }
// zs wc <file> -- returns word count in the file (markdown, html or amber)
func WordCount(args []string) int {
if os.Getenv("ZS_RECURSION") != "" {
return 0
}
if len(args) != 1 {
return 0
}
os.Setenv("ZS_RECURSION", "1")
out := &bytes.Buffer{}
if err := build(args[0], out, builtins(), globals()); err != nil {
return 0
}
if s, err := html2text.FromString(string(out.Bytes())); err != nil {
return 0
} else {
return len(strings.Fields(s))
}
}
// zs timetoread <file> -- returns number of minutes required to read the text
func TimeToRead(args []string) int {
wc := WordCount(args)
return int(math.Round(float64(wc) / float64(200)))
}