annotate zs.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 d052f3a44195
children 1254e8cb6e75
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
1 package main
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
2
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
3 import (
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
4 "bytes"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
5 "fmt"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
6 "io"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
7 "io/ioutil"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
8 "log"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
9 "os"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
10 "path"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
11 "path/filepath"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
12 "strings"
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
13 "text/template"
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
14 "time"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
15
22
f5627d4212a3 restored the original amber since my issue has been fixed
zaitsev.serge
parents: 20
diff changeset
16 "github.com/eknkc/amber"
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
17 "github.com/russross/blackfriday"
17
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
18 "github.com/yosssi/gcss"
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
19 )
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
20
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
21 const (
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
22 ZSDIR = ".zs"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
23 PUBDIR = ".pub"
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
24 )
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
25
17
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
26 type Vars map[string]string
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: 22
diff changeset
27 type Funcs template.FuncMap
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
28
17
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
29 // Parses markdown content. Returns parsed header variables and content
19
802b96e67bae added global variables, added default date for markdown
zaitsev.serge
parents: 18
diff changeset
30 func md(path string, globals Vars) (Vars, string, error) {
17
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
31 b, err := ioutil.ReadFile(path)
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
32 if err != nil {
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
33 return nil, "", err
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
34 }
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
35 s := string(b)
6
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
36 url := path[:len(path)-len(filepath.Ext(path))] + ".html"
17
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
37 v := Vars{
6
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
38 "file": path,
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
39 "url": url,
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
40 "output": filepath.Join(PUBDIR, url),
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
41 }
20
f8373c23a3ff replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents: 19
diff changeset
42 if _, err := os.Stat(filepath.Join(ZSDIR, "layout.amber")); err == nil {
f8373c23a3ff replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents: 19
diff changeset
43 v["layout"] = "layout.amber"
f8373c23a3ff replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents: 19
diff changeset
44 } else {
f8373c23a3ff replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents: 19
diff changeset
45 v["layout"] = "layout.html"
f8373c23a3ff replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents: 19
diff changeset
46 }
f8373c23a3ff replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents: 19
diff changeset
47
19
802b96e67bae added global variables, added default date for markdown
zaitsev.serge
parents: 18
diff changeset
48 if info, err := os.Stat(path); err == nil {
802b96e67bae added global variables, added default date for markdown
zaitsev.serge
parents: 18
diff changeset
49 v["date"] = info.ModTime().Format("02-01-2006")
802b96e67bae added global variables, added default date for markdown
zaitsev.serge
parents: 18
diff changeset
50 }
802b96e67bae added global variables, added default date for markdown
zaitsev.serge
parents: 18
diff changeset
51 for name, value := range globals {
802b96e67bae added global variables, added default date for markdown
zaitsev.serge
parents: 18
diff changeset
52 v[name] = value
802b96e67bae added global variables, added default date for markdown
zaitsev.serge
parents: 18
diff changeset
53 }
2
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 0
diff changeset
54 if strings.Index(s, "\n\n") == -1 {
19
802b96e67bae added global variables, added default date for markdown
zaitsev.serge
parents: 18
diff changeset
55 return v, s, nil
2
fd79b3a90bef fixed empty header in markdown
zaitsev.serge
parents: 0
diff changeset
56 }
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
57 header, body := split2(s, "\n\n")
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
58 for _, line := range strings.Split(header, "\n") {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
59 key, value := split2(line, ":")
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
60 v[strings.ToLower(strings.TrimSpace(key))] = strings.TrimSpace(value)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
61 }
6
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
62 if strings.HasPrefix(v["url"], "./") {
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
63 v["url"] = v["url"][2:]
cb66f5b86616 rewritted default variables assignment
zaitsev.serge
parents: 5
diff changeset
64 }
17
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
65 return v, body, nil
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
66 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
67
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
68 // Use standard Go templates
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: 22
diff changeset
69 func render(s string, funcs Funcs, vars Vars) (string, 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: 22
diff changeset
70 f := Funcs{}
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
71 for k, v := range funcs {
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
72 f[k] = v
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
73 }
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
74 for k, v := range vars {
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
75 f[k] = varFunc(v)
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
76 }
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: 22
diff changeset
77 // Plugin functions
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: 22
diff changeset
78 files, _ := ioutil.ReadDir(ZSDIR)
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: 22
diff changeset
79 for _, file := range files {
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: 22
diff changeset
80 if !file.IsDir() {
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: 22
diff changeset
81 name := file.Name()
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: 22
diff changeset
82 if !strings.HasSuffix(name, ".html") && !strings.HasSuffix(name, ".amber") {
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: 22
diff changeset
83 f[strings.TrimSuffix(name, filepath.Ext(name))] = pluginFunc(name, 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: 22
diff changeset
84 }
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: 22
diff changeset
85 }
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: 22
diff changeset
86 }
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: 22
diff changeset
87
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: 22
diff changeset
88 tmpl, err := template.New("").Funcs(template.FuncMap(f)).Parse(s)
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
89 if err != nil {
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
90 return "", err
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
91 }
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
92 out := &bytes.Buffer{}
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
93 if err := tmpl.Execute(out, vars); err != nil {
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
94 return "", err
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
95 }
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
96 return string(out.Bytes()), nil
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
97 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
98
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
99 // Renders markdown with the given layout into html expanding all the macros
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: 22
diff changeset
100 func buildMarkdown(path string, w io.Writer, funcs Funcs, vars Vars) error {
19
802b96e67bae added global variables, added default date for markdown
zaitsev.serge
parents: 18
diff changeset
101 v, body, err := md(path, vars)
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
102 if err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
103 return err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
104 }
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
105 content, err := render(body, funcs, v)
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
106 if err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
107 return err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
108 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
109 v["content"] = string(blackfriday.MarkdownBasic([]byte(content)))
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: 22
diff changeset
110 if w == 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: 22
diff changeset
111 out, err := os.Create(filepath.Join(PUBDIR, renameExt(path, "", ".html")))
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: 22
diff changeset
112 if 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: 22
diff changeset
113 return err
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: 22
diff changeset
114 }
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: 22
diff changeset
115 defer out.Close()
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: 22
diff changeset
116 w = out
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: 22
diff changeset
117 }
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
118 if strings.HasSuffix(v["layout"], ".amber") {
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: 22
diff changeset
119 return buildAmber(filepath.Join(ZSDIR, v["layout"]), w, funcs, v)
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
120 } else {
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: 22
diff changeset
121 return buildHTML(filepath.Join(ZSDIR, v["layout"]), w, funcs, v)
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
122 }
14
515078352442 moved html rendering into a separate function
zaitsev.serge
parents: 13
diff changeset
123 }
515078352442 moved html rendering into a separate function
zaitsev.serge
parents: 13
diff changeset
124
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
125 // Renders text file expanding all variable macros inside it
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: 22
diff changeset
126 func buildHTML(path string, w io.Writer, funcs Funcs, vars Vars) 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: 22
diff changeset
127 b, err := ioutil.ReadFile(path)
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
128 if err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
129 return err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
130 }
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
131 content, err := render(string(b), funcs, vars)
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
132 if err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
133 return err
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
134 }
24
d052f3a44195 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: 23
diff changeset
135 if w == nil {
d052f3a44195 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: 23
diff changeset
136 f, err := os.Create(filepath.Join(PUBDIR, path))
d052f3a44195 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: 23
diff changeset
137 if err != nil {
d052f3a44195 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: 23
diff changeset
138 return err
d052f3a44195 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: 23
diff changeset
139 }
d052f3a44195 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: 23
diff changeset
140 defer f.Close()
d052f3a44195 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: 23
diff changeset
141 w = f
14
515078352442 moved html rendering into a separate function
zaitsev.serge
parents: 13
diff changeset
142 }
24
d052f3a44195 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: 23
diff changeset
143 _, err = io.WriteString(w, content)
d052f3a44195 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: 23
diff changeset
144 return err
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
145 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
146
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
147 // Renders .amber file into .html
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: 22
diff changeset
148 func buildAmber(path string, w io.Writer, funcs Funcs, vars Vars) error {
17
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
149 a := amber.New()
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: 22
diff changeset
150 err := a.ParseFile(path)
17
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
151 if err != nil {
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
152 return err
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
153 }
24
d052f3a44195 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: 23
diff changeset
154
d052f3a44195 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: 23
diff changeset
155 data := map[string]interface{}{}
d052f3a44195 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: 23
diff changeset
156 for k, v := range vars {
d052f3a44195 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: 23
diff changeset
157 data[k] = v
d052f3a44195 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: 23
diff changeset
158 }
d052f3a44195 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: 23
diff changeset
159 for k, v := range funcs {
d052f3a44195 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: 23
diff changeset
160 data[k] = v
d052f3a44195 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: 23
diff changeset
161 }
d052f3a44195 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: 23
diff changeset
162
17
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
163 t, err := a.Compile()
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
164 if err != nil {
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
165 return err
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
166 }
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: 22
diff changeset
167 if w == 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: 22
diff changeset
168 f, err := os.Create(filepath.Join(PUBDIR, renameExt(path, ".amber", ".html")))
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: 22
diff changeset
169 if 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: 22
diff changeset
170 return err
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: 22
diff changeset
171 }
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: 22
diff changeset
172 defer f.Close()
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: 22
diff changeset
173 w = f
17
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
174 }
24
d052f3a44195 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: 23
diff changeset
175 return t.Execute(w, data)
17
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
176 }
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
177
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
178 // Compiles .gcss into .css
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: 22
diff changeset
179 func buildGCSS(path string, w io.Writer) error {
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
180 f, err := os.Open(path)
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
181 if err != nil {
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
182 return err
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
183 }
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: 22
diff changeset
184 defer f.Close()
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: 22
diff changeset
185
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: 22
diff changeset
186 if w == 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: 22
diff changeset
187 s := strings.TrimSuffix(path, ".gcss") + ".css"
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: 22
diff changeset
188 css, err := os.Create(filepath.Join(PUBDIR, 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: 22
diff changeset
189 if 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: 22
diff changeset
190 return err
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: 22
diff changeset
191 }
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: 22
diff changeset
192 defer css.Close()
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: 22
diff changeset
193 w = css
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
194 }
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: 22
diff changeset
195 _, err = gcss.Compile(w, f)
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
196 return err
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
197 }
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
198
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: 22
diff changeset
199 // Copies file as is from path to writer
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: 22
diff changeset
200 func buildRaw(path string, w io.Writer) 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: 22
diff changeset
201 in, err := os.Open(path)
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: 22
diff changeset
202 if 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: 22
diff changeset
203 return err
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: 22
diff changeset
204 }
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: 22
diff changeset
205 defer in.Close()
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: 22
diff changeset
206 if w == 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: 22
diff changeset
207 if out, err := os.Create(filepath.Join(PUBDIR, path)); 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: 22
diff changeset
208 return err
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: 22
diff changeset
209 } else {
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
210 defer out.Close()
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: 22
diff changeset
211 w = out
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
212 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
213 }
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: 22
diff changeset
214 _, err = io.Copy(w, in)
7
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
215 return err
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
216 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
217
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: 22
diff changeset
218 func build(path string, w io.Writer, funcs Funcs, vars Vars) 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: 22
diff changeset
219 ext := filepath.Ext(path)
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: 22
diff changeset
220 if ext == ".md" || ext == ".mkd" {
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: 22
diff changeset
221 return buildMarkdown(path, w, funcs, 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: 22
diff changeset
222 } else if ext == ".html" || ext == ".xml" {
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: 22
diff changeset
223 return buildHTML(path, w, funcs, 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: 22
diff changeset
224 } else if ext == ".amber" {
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: 22
diff changeset
225 return buildAmber(path, w, funcs, 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: 22
diff changeset
226 } else if ext == ".gcss" {
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: 22
diff changeset
227 return buildGCSS(path, w)
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: 22
diff changeset
228 } 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: 22
diff changeset
229 return buildRaw(path, w)
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
230 }
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
231 }
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
232
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: 22
diff changeset
233 func buildAll(watch bool) {
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
234 lastModified := time.Unix(0, 0)
7
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
235 modified := false
19
802b96e67bae added global variables, added default date for markdown
zaitsev.serge
parents: 18
diff changeset
236
802b96e67bae added global variables, added default date for markdown
zaitsev.serge
parents: 18
diff changeset
237 vars := globals()
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
238 for {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
239 os.Mkdir(PUBDIR, 0755)
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: 22
diff changeset
240 funcs := builtins()
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
241 err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
242 // ignore hidden files and directories
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
243 if filepath.Base(path)[0] == '.' || strings.HasPrefix(path, ".") {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
244 return nil
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
245 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
246
7
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
247 if info.IsDir() {
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
248 os.Mkdir(filepath.Join(PUBDIR, path), 0755)
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
249 return nil
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
250 } else if info.ModTime().After(lastModified) {
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
251 if !modified {
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
252 // About to be modified, so run pre-build hook
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
253 // FIXME on windows it might not work well
7
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
254 run(filepath.Join(ZSDIR, "pre"), []string{}, nil, nil)
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
255 modified = true
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
256 }
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: 22
diff changeset
257 log.Println("build: ", path)
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: 22
diff changeset
258 return build(path, nil, funcs, vars)
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
259 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
260 return nil
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
261 })
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
262 if err != nil {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
263 log.Println("ERROR:", err)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
264 }
7
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
265 if modified {
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
266 // Something was modified, so post-build hook
18
ae3116ea938b started migration to go templates
zaitsev.serge
parents: 17
diff changeset
267 // FIXME on windows it might not work well
7
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
268 run(filepath.Join(ZSDIR, "post"), []string{}, nil, nil)
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
269 modified = false
11073a30f71f simplified build process, added pre and post build hooks
zaitsev.serge
parents: 6
diff changeset
270 }
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: 22
diff changeset
271 if !watch {
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
272 break
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
273 }
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: 22
diff changeset
274 lastModified = time.Now()
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
275 time.Sleep(1 * time.Second)
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
276 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
277 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
278
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
279 func main() {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
280 if len(os.Args) == 1 {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
281 fmt.Println(os.Args[0], "<command> [args]")
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
282 return
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
283 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
284 cmd := os.Args[1]
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
285 args := os.Args[2:]
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
286 switch cmd {
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
287 case "build":
24
d052f3a44195 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: 23
diff changeset
288 if len(args) == 0 {
d052f3a44195 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: 23
diff changeset
289 buildAll(false)
d052f3a44195 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: 23
diff changeset
290 } else if len(args) == 1 {
d052f3a44195 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: 23
diff changeset
291 if err := build(args[0], os.Stdout, builtins(), globals()); err != nil {
d052f3a44195 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: 23
diff changeset
292 fmt.Println("ERROR: " + err.Error())
d052f3a44195 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: 23
diff changeset
293 }
d052f3a44195 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: 23
diff changeset
294 } else {
d052f3a44195 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: 23
diff changeset
295 fmt.Println("ERROR: too many arguments")
d052f3a44195 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: 23
diff changeset
296 }
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
297 case "watch":
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: 22
diff changeset
298 buildAll(true)
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: 22
diff changeset
299 case "var":
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: 22
diff changeset
300 fmt.Println(Var(args))
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: 22
diff changeset
301 case "lorem":
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: 22
diff changeset
302 fmt.Println(Lorem(args))
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: 22
diff changeset
303 case "dateparse":
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: 22
diff changeset
304 fmt.Println(DateParse(args))
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: 22
diff changeset
305 case "datefmt":
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: 22
diff changeset
306 fmt.Println(DateFmt(args))
25
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 24
diff changeset
307 case "wc":
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 24
diff changeset
308 fmt.Println(WordCount(args))
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 24
diff changeset
309 case "timetoread":
42b0a9fa5883 added word count and time to read functions
zaitsev.serge
parents: 24
diff changeset
310 fmt.Println(TimeToRead(args))
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
311 default:
17
0214b1b5f5eb added amber and gcss compilers
zaitsev.serge
parents: 15
diff changeset
312 err := run(path.Join(ZSDIR, cmd), args, Vars{}, os.Stdout)
4
05fc24caac37 render uses strings, not bytes; added helpers for env and run
zaitsev.serge
parents: 3
diff changeset
313 if err != nil {
20
f8373c23a3ff replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents: 19
diff changeset
314 log.Println("ERROR:", err)
0
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
315 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
316 }
45a9e1fac18e initial commit
zaitsev.serge
parents:
diff changeset
317 }