annotate zs_ext.go @ 28:5ee89d094279 draft

removed default date value, added some default title/description/keywords for markdown
author zaitsev.serge
date Sun, 30 Aug 2015 13:50:03 +0000
parents d966bcb229c0
children b2f491299cee
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
1 package main
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
2
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
3 import (
25
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
4 "bytes"
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
5 "os"
23
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
6 "strconv"
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
7 "strings"
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
8 "time"
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
9
26
d966bcb229c0 fixed math package
zaitsev.serge
parents: 25
diff changeset
10 "math"
d966bcb229c0 fixed math package
zaitsev.serge
parents: 25
diff changeset
11
23
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
12 "github.com/drhodes/golorem"
25
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
13 "github.com/jaytaylor/html2text"
23
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
14 )
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
15
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
16 // zs var <filename> -- returns list of variables and their values
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
17 // zs var <filename> <var...> -- returns list of variable values
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
18 func Var(args []string) string {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
19 if len(args) == 0 {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
20 return "var: filename expected"
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
21 } else {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
22 s := ""
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
23 if vars, _, err := md(args[0], globals()); err != nil {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
24 return "var: " + err.Error()
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
25 } else {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
26 if len(args) > 1 {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
27 for _, a := range args[1:] {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
28 s = s + vars[a] + "\n"
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
29 }
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
30 } else {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
31 for k, v := range vars {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
32 s = s + k + ":" + v + "\n"
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
33 }
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
34 }
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
35 }
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
36 return strings.TrimSpace(s)
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
37 }
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
38 }
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
39
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
40 // zs lorem <n> -- returns <n> random lorem ipsum sentences
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
41 func Lorem(args []string) string {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
42 if len(args) > 1 {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
43 return "lorem: invalid usage"
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
44 }
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
45 if len(args) == 0 {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
46 return lorem.Paragraph(5, 5)
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
47 }
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
48 if n, err := strconv.Atoi(args[0]); err == nil {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
49 return lorem.Paragraph(n, n)
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
50 } else {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
51 return "lorem: " + err.Error()
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
52 }
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
53 }
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
54
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
55 // zs datefmt <fmt> <date> -- returns formatted date from unix time
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
56 func DateFmt(args []string) string {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
57 if len(args) == 0 || len(args) > 2 {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
58 return "datefmt: invalid usage"
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
59 }
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
60 if n, err := strconv.ParseInt(args[1], 10, 64); err == nil {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
61 return time.Unix(n, 0).Format(args[0])
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
62 } else {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
63 return "datefmt: " + err.Error()
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
64 }
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
65 }
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
66
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
67 // zs dateparse <fmt> <date> -- returns unix time from the formatted date
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
68 func DateParse(args []string) string {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
69 if len(args) == 0 || len(args) > 2 {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
70 return "dateparse: invalid usage"
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
71 }
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
72 if d, err := time.Parse(args[0], args[1]); err != nil {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
73 return "dateparse: " + err.Error()
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
74 } else {
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
75 return strconv.FormatInt(d.Unix(), 10)
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
76 }
40f55059fbfa fixed output file names in html pages, fixed amber function bindings, replaced print command with build, fixed plugin functions, implemented zs and exec functions
zaitsev.serge
parents:
diff changeset
77 }
25
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
78
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
79 // zs wc <file> -- returns word count in the file (markdown, html or amber)
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
80 func WordCount(args []string) int {
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
81 if os.Getenv("ZS_RECURSION") != "" {
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
82 return 0
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
83 }
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
84 if len(args) != 1 {
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
85 return 0
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
86 }
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
87 os.Setenv("ZS_RECURSION", "1")
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
88 out := &bytes.Buffer{}
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
89 if err := build(args[0], out, builtins(), globals()); err != nil {
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
90 return 0
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
91 }
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
92 if s, err := html2text.FromString(string(out.Bytes())); err != nil {
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
93 return 0
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
94 } else {
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
95 return len(strings.Fields(s))
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
96 }
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
97 }
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
98
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
99 // zs timetoread <file> -- returns number of minutes required to read the text
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
100 func TimeToRead(args []string) int {
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
101 wc := WordCount(args)
26
d966bcb229c0 fixed math package
zaitsev.serge
parents: 25
diff changeset
102 return int(math.Floor(float64(wc)/200.0 + .5))
25
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 23
diff changeset
103 }