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