diff zs_ext.go @ 25:42b0a9fa5883 draft

added word count and time to read functions
author zaitsev.serge
date Sun, 30 Aug 2015 12:42:22 +0000
parents 40f55059fbfa
children d966bcb229c0
line wrap: on
line diff
--- 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)))
+}