Mercurial > yakumo_izuru > aya
changeset 25:42b0a9fa5883 draft
added word count and time to read functions
author | zaitsev.serge |
---|---|
date | Sun, 30 Aug 2015 12:42:22 +0000 |
parents | d052f3a44195 |
children | d966bcb229c0 |
files | zs.go zs_ext.go |
diffstat | 2 files changed, 34 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/zs.go Sun Aug 30 12:22:00 2015 +0000 +++ b/zs.go Sun Aug 30 12:42:22 2015 +0000 @@ -304,6 +304,10 @@ fmt.Println(DateParse(args)) case "datefmt": fmt.Println(DateFmt(args)) + case "wc": + fmt.Println(WordCount(args)) + case "timetoread": + fmt.Println(TimeToRead(args)) default: err := run(path.Join(ZSDIR, cmd), args, Vars{}, os.Stdout) if err != nil {
--- a/zs_ext.go Sun Aug 30 12:22:00 2015 +0000 +++ b/zs_ext.go Sun Aug 30 12:42:22 2015 +0000 @@ -1,11 +1,15 @@ package main import ( + "bytes" + "os" "strconv" "strings" "time" "github.com/drhodes/golorem" + "github.com/google/gxui/math" + "github.com/jaytaylor/html2text" ) // zs var <filename> -- returns list of variables and their values @@ -70,3 +74,29 @@ 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))) +}