Mercurial > yakumo_izuru > aya
annotate zs.go @ 35:0498cb3afc1d draft
removed fs/walk error check, added title default value heuristics
author | zaitsev.serge |
---|---|
date | Wed, 02 Sep 2015 17:41:06 +0000 |
parents | ed40ca93db1e |
children | a88ccfbd4103 |
rev | line source |
---|---|
0 | 1 package main |
2 | |
3 import ( | |
4 "bytes" | |
5 "fmt" | |
6 "io" | |
7 "io/ioutil" | |
8 "log" | |
9 "os" | |
32 | 10 "os/exec" |
0 | 11 "path/filepath" |
12 "strings" | |
18 | 13 "text/template" |
0 | 14 "time" |
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 | 17 "github.com/russross/blackfriday" |
17 | 18 "github.com/yosssi/gcss" |
34
ed40ca93db1e
added explicit yaml separator, fixed amber compilation sequence
zaitsev.serge
parents:
33
diff
changeset
|
19 "gopkg.in/yaml.v2" |
0 | 20 ) |
21 | |
22 const ( | |
23 ZSDIR = ".zs" | |
24 PUBDIR = ".pub" | |
25 ) | |
26 | |
17 | 27 type Vars map[string]string |
32 | 28 |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
29 // renameExt renames extension (if any) from oldext to newext |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
30 // If oldext is an empty string - extension is extracted automatically. |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
31 // If path has no extension - new extension is appended |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
32 func renameExt(path, oldext, newext string) string { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
33 if oldext == "" { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
34 oldext = filepath.Ext(path) |
32 | 35 } |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
36 if oldext == "" || strings.HasSuffix(path, oldext) { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
37 return strings.TrimSuffix(path, oldext) + newext |
32 | 38 } else { |
39 return path | |
40 } | |
41 } | |
42 | |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
43 // globals returns list of global OS environment variables that start |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
44 // with ZS_ prefix as Vars, so the values can be used inside templates |
32 | 45 func globals() Vars { |
46 vars := Vars{} | |
47 for _, e := range os.Environ() { | |
48 pair := strings.Split(e, "=") | |
49 if strings.HasPrefix(pair[0], "ZS_") { | |
50 vars[strings.ToLower(pair[0][3:])] = pair[1] | |
51 } | |
52 } | |
53 return vars | |
54 } | |
55 | |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
56 // run executes a command or a script. Vars define the command environment, |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
57 // each zs var is converted into OS environemnt variable with ZS_ prefix |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
58 // prepended. Additional variable $ZS contains path to the zs binary. Command |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
59 // stderr is printed to zs stderr, command output is returned as a string. |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
60 func run(vars Vars, cmd string, args ...string) (string, error) { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
61 // First check if partial exists (.amber or .html) |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
62 if b, err := ioutil.ReadFile(filepath.Join(ZSDIR, cmd+".amber")); err == nil { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
63 return string(b), nil |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
64 } |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
65 if b, err := ioutil.ReadFile(filepath.Join(ZSDIR, cmd+".html")); err == nil { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
66 return string(b), nil |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
67 } |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
68 |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
69 var errbuf, outbuf bytes.Buffer |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
70 c := exec.Command(cmd, args...) |
32 | 71 env := []string{"ZS=" + os.Args[0], "ZS_OUTDIR=" + PUBDIR} |
72 env = append(env, os.Environ()...) | |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
73 for k, v := range vars { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
74 env = append(env, "ZS_"+strings.ToUpper(k)+"="+v) |
32 | 75 } |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
76 c.Env = env |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
77 c.Stdout = &outbuf |
32 | 78 c.Stderr = &errbuf |
79 | |
80 err := c.Run() | |
81 | |
82 if errbuf.Len() > 0 { | |
83 log.Println("ERROR:", errbuf.String()) | |
84 } | |
85 if err != nil { | |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
86 return "", err |
32 | 87 } |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
88 return string(outbuf.Bytes()), nil |
32 | 89 } |
90 | |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
91 // getVars returns list of variables defined in a text file and actual file |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
92 // content following the variables declaration. Header is separated from |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
93 // content by an empty line. Header can be either YAML or JSON. |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
94 // If no empty newline is found - file is treated as content-only. |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
95 func getVars(path string, globals Vars) (Vars, string, error) { |
17 | 96 b, err := ioutil.ReadFile(path) |
97 if err != nil { | |
98 return nil, "", err | |
99 } | |
100 s := string(b) | |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
101 |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
102 // Copy globals first |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
103 v := Vars{} |
29
dd669a7e582f
file, url and output should not be overridden by globals
zaitsev.serge
parents:
28
diff
changeset
|
104 for name, value := range globals { |
dd669a7e582f
file, url and output should not be overridden by globals
zaitsev.serge
parents:
28
diff
changeset
|
105 v[name] = value |
6 | 106 } |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
107 |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
108 // Override them by default values extracted from file name/path |
20
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
109 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
|
110 v["layout"] = "layout.amber" |
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
111 } else { |
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
112 v["layout"] = "layout.html" |
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
113 } |
35
0498cb3afc1d
removed fs/walk error check, added title default value heuristics
zaitsev.serge
parents:
34
diff
changeset
|
114 title := strings.Replace(strings.Replace(path, "_", " ", -1), "-", " ", -1) |
0498cb3afc1d
removed fs/walk error check, added title default value heuristics
zaitsev.serge
parents:
34
diff
changeset
|
115 v["title"] = strings.ToTitle(title) |
0498cb3afc1d
removed fs/walk error check, added title default value heuristics
zaitsev.serge
parents:
34
diff
changeset
|
116 v["description"] = "" |
29
dd669a7e582f
file, url and output should not be overridden by globals
zaitsev.serge
parents:
28
diff
changeset
|
117 v["file"] = path |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
118 v["url"] = path[:len(path)-len(filepath.Ext(path))] + ".html" |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
119 v["output"] = filepath.Join(PUBDIR, v["url"]) |
20
f8373c23a3ff
replaced amber with my own fork, fixed file paths for amber and html
zaitsev.serge
parents:
19
diff
changeset
|
120 |
34
ed40ca93db1e
added explicit yaml separator, fixed amber compilation sequence
zaitsev.serge
parents:
33
diff
changeset
|
121 delim := "\n---\n" |
ed40ca93db1e
added explicit yaml separator, fixed amber compilation sequence
zaitsev.serge
parents:
33
diff
changeset
|
122 if sep := strings.Index(s, delim); sep == -1 { |
19
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
123 return v, s, nil |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
124 } else { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
125 header := s[:sep] |
34
ed40ca93db1e
added explicit yaml separator, fixed amber compilation sequence
zaitsev.serge
parents:
33
diff
changeset
|
126 body := s[sep+len(delim):] |
ed40ca93db1e
added explicit yaml separator, fixed amber compilation sequence
zaitsev.serge
parents:
33
diff
changeset
|
127 |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
128 vars := Vars{} |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
129 if err := yaml.Unmarshal([]byte(header), &vars); err != nil { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
130 fmt.Println("ERROR: failed to parse header", err) |
34
ed40ca93db1e
added explicit yaml separator, fixed amber compilation sequence
zaitsev.serge
parents:
33
diff
changeset
|
131 return nil, "", err |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
132 } else { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
133 for key, value := range vars { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
134 v[key] = value |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
135 } |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
136 } |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
137 if strings.HasPrefix(v["url"], "./") { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
138 v["url"] = v["url"][2:] |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
139 } |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
140 return v, body, nil |
2 | 141 } |
0 | 142 } |
143 | |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
144 // Render expanding zs plugins and variables |
32 | 145 func render(s string, vars Vars) (string, error) { |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
146 delim_open := "{{" |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
147 delim_close := "}}" |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
148 |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
149 out := &bytes.Buffer{} |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
150 for { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
151 if from := strings.Index(s, delim_open); from == -1 { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
152 out.WriteString(s) |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
153 return out.String(), nil |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
154 } else { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
155 if to := strings.Index(s, delim_close); to == -1 { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
156 return "", fmt.Errorf("Close delim not found") |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
157 } else { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
158 out.WriteString(s[:from]) |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
159 cmd := s[from+len(delim_open) : to] |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
160 s = s[to+len(delim_close):] |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
161 m := strings.Fields(cmd) |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
162 if len(m) == 1 { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
163 if v, ok := vars[m[0]]; ok { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
164 out.WriteString(v) |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
165 continue |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
166 } |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
167 } |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
168 if res, err := run(vars, m[0], m[1:]...); err == nil { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
169 out.WriteString(res) |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
170 } else { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
171 fmt.Println(err) |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
172 } |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
173 } |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
174 } |
18 | 175 } |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
176 return s, nil |
0 | 177 } |
178 | |
18 | 179 // Renders markdown with the given layout into html expanding all the macros |
32 | 180 func buildMarkdown(path string, w io.Writer, vars Vars) error { |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
181 v, body, err := getVars(path, vars) |
0 | 182 if err != nil { |
183 return err | |
184 } | |
32 | 185 content, err := render(body, v) |
0 | 186 if err != nil { |
187 return err | |
188 } | |
31 | 189 v["content"] = string(blackfriday.MarkdownCommon([]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
|
190 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
|
191 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
|
192 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
|
193 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
|
194 } |
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 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
|
196 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
|
197 } |
18 | 198 if strings.HasSuffix(v["layout"], ".amber") { |
32 | 199 return buildAmber(filepath.Join(ZSDIR, v["layout"]), w, v) |
18 | 200 } else { |
32 | 201 return buildHTML(filepath.Join(ZSDIR, v["layout"]), w, v) |
18 | 202 } |
14 | 203 } |
204 | |
18 | 205 // Renders text file expanding all variable macros inside it |
32 | 206 func buildHTML(path string, w io.Writer, vars Vars) error { |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
207 v, body, err := getVars(path, vars) |
0 | 208 if err != nil { |
209 return err | |
210 } | |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
211 if body, err = render(body, v); err != nil { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
212 return err |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
213 } |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
214 tmpl, err := template.New("").Delims("<%", "%>").Parse(body) |
0 | 215 if err != nil { |
216 return err | |
217 } | |
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
|
218 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
|
219 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
|
220 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
|
221 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
|
222 } |
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
|
223 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
|
224 w = f |
14 | 225 } |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
226 return tmpl.Execute(w, vars) |
0 | 227 } |
228 | |
18 | 229 // Renders .amber file into .html |
32 | 230 func buildAmber(path string, w io.Writer, vars Vars) error { |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
231 v, body, err := getVars(path, vars) |
17 | 232 if err != nil { |
233 return err | |
234 } | |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
235 a := amber.New() |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
236 if err := a.Parse(body); err != nil { |
34
ed40ca93db1e
added explicit yaml separator, fixed amber compilation sequence
zaitsev.serge
parents:
33
diff
changeset
|
237 fmt.Println(body) |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
238 return err |
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
|
239 } |
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
|
240 |
17 | 241 t, err := a.Compile() |
242 if err != nil { | |
243 return err | |
244 } | |
34
ed40ca93db1e
added explicit yaml separator, fixed amber compilation sequence
zaitsev.serge
parents:
33
diff
changeset
|
245 |
ed40ca93db1e
added explicit yaml separator, fixed amber compilation sequence
zaitsev.serge
parents:
33
diff
changeset
|
246 htmlBuf := &bytes.Buffer{} |
ed40ca93db1e
added explicit yaml separator, fixed amber compilation sequence
zaitsev.serge
parents:
33
diff
changeset
|
247 if err := t.Execute(htmlBuf, v); err != nil { |
ed40ca93db1e
added explicit yaml separator, fixed amber compilation sequence
zaitsev.serge
parents:
33
diff
changeset
|
248 return err |
ed40ca93db1e
added explicit yaml separator, fixed amber compilation sequence
zaitsev.serge
parents:
33
diff
changeset
|
249 } |
ed40ca93db1e
added explicit yaml separator, fixed amber compilation sequence
zaitsev.serge
parents:
33
diff
changeset
|
250 |
ed40ca93db1e
added explicit yaml separator, fixed amber compilation sequence
zaitsev.serge
parents:
33
diff
changeset
|
251 if body, err = render(string(htmlBuf.Bytes()), v); err != nil { |
ed40ca93db1e
added explicit yaml separator, fixed amber compilation sequence
zaitsev.serge
parents:
33
diff
changeset
|
252 return err |
ed40ca93db1e
added explicit yaml separator, fixed amber compilation sequence
zaitsev.serge
parents:
33
diff
changeset
|
253 } |
ed40ca93db1e
added explicit yaml separator, fixed amber compilation sequence
zaitsev.serge
parents:
33
diff
changeset
|
254 |
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
|
255 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
|
256 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
|
257 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
|
258 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
|
259 } |
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
|
260 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
|
261 w = f |
17 | 262 } |
34
ed40ca93db1e
added explicit yaml separator, fixed amber compilation sequence
zaitsev.serge
parents:
33
diff
changeset
|
263 _, err = io.WriteString(w, body) |
ed40ca93db1e
added explicit yaml separator, fixed amber compilation sequence
zaitsev.serge
parents:
33
diff
changeset
|
264 return err |
17 | 265 } |
266 | |
18 | 267 // 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
|
268 func buildGCSS(path string, w io.Writer) error { |
18 | 269 f, err := os.Open(path) |
270 if err != nil { | |
271 return err | |
272 } | |
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
|
273 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
|
274 |
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
|
275 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
|
276 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
|
277 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
|
278 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
|
279 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
|
280 } |
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
|
281 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
|
282 w = css |
18 | 283 } |
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
|
284 _, err = gcss.Compile(w, f) |
18 | 285 return err |
286 } | |
287 | |
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
|
288 // 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
|
289 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
|
290 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
|
291 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
|
292 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
|
293 } |
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
|
294 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
|
295 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
|
296 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
|
297 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
|
298 } else { |
0 | 299 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
|
300 w = out |
0 | 301 } |
302 } | |
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
|
303 _, err = io.Copy(w, in) |
7
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
304 return err |
0 | 305 } |
306 | |
32 | 307 func build(path string, w io.Writer, vars Vars) error { |
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
|
308 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
|
309 if ext == ".md" || ext == ".mkd" { |
32 | 310 return buildMarkdown(path, w, vars) |
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
|
311 } else if ext == ".html" || ext == ".xml" { |
32 | 312 return buildHTML(path, w, vars) |
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
|
313 } else if ext == ".amber" { |
32 | 314 return buildAmber(path, w, vars) |
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
|
315 } 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
|
316 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
|
317 } 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
|
318 return buildRaw(path, w) |
18 | 319 } |
320 } | |
321 | |
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
|
322 func buildAll(watch bool) { |
0 | 323 lastModified := time.Unix(0, 0) |
7
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
324 modified := false |
19
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
325 |
802b96e67bae
added global variables, added default date for markdown
zaitsev.serge
parents:
18
diff
changeset
|
326 vars := globals() |
0 | 327 for { |
328 os.Mkdir(PUBDIR, 0755) | |
35
0498cb3afc1d
removed fs/walk error check, added title default value heuristics
zaitsev.serge
parents:
34
diff
changeset
|
329 filepath.Walk(".", func(path string, info os.FileInfo, err error) error { |
0 | 330 // ignore hidden files and directories |
331 if filepath.Base(path)[0] == '.' || strings.HasPrefix(path, ".") { | |
332 return nil | |
333 } | |
30 | 334 // inform user about fs walk errors, but continue iteration |
335 if err != nil { | |
35
0498cb3afc1d
removed fs/walk error check, added title default value heuristics
zaitsev.serge
parents:
34
diff
changeset
|
336 fmt.Println("error:", err) |
30 | 337 return nil |
338 } | |
0 | 339 |
7
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
340 if info.IsDir() { |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
341 os.Mkdir(filepath.Join(PUBDIR, path), 0755) |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
342 return nil |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
343 } else if info.ModTime().After(lastModified) { |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
344 if !modified { |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
345 // First file in this build cycle is about to be modified |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
346 run(vars, "prehook") |
7
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
347 modified = true |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
348 } |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
349 log.Println("build:", path) |
32 | 350 return build(path, nil, vars) |
0 | 351 } |
352 return nil | |
353 }) | |
7
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
354 if modified { |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
355 // At least one file in this build cycle has been modified |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
356 run(vars, "posthook") |
7
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
357 modified = false |
11073a30f71f
simplified build process, added pre and post build hooks
zaitsev.serge
parents:
6
diff
changeset
|
358 } |
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
|
359 if !watch { |
0 | 360 break |
361 } | |
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
|
362 lastModified = time.Now() |
0 | 363 time.Sleep(1 * time.Second) |
364 } | |
365 } | |
366 | |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
367 func init() { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
368 // prepend .zs to $PATH, so plugins will be found before OS commands |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
369 p := os.Getenv("PATH") |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
370 p = ZSDIR + ":" + p |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
371 os.Setenv("PATH", p) |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
372 } |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
373 |
0 | 374 func main() { |
375 if len(os.Args) == 1 { | |
376 fmt.Println(os.Args[0], "<command> [args]") | |
377 return | |
378 } | |
379 cmd := os.Args[1] | |
380 args := os.Args[2:] | |
381 switch cmd { | |
382 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
|
383 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
|
384 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
|
385 } else if len(args) == 1 { |
32 | 386 if err := build(args[0], os.Stdout, globals()); err != nil { |
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
|
387 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
|
388 } |
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
|
389 } 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
|
390 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
|
391 } |
0 | 392 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
|
393 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
|
394 case "var": |
32 | 395 if len(args) == 0 { |
396 fmt.Println("var: filename expected") | |
397 } else { | |
398 s := "" | |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
399 if vars, _, err := getVars(args[0], globals()); err != nil { |
32 | 400 fmt.Println("var: " + err.Error()) |
401 } else { | |
402 if len(args) > 1 { | |
403 for _, a := range args[1:] { | |
404 s = s + vars[a] + "\n" | |
405 } | |
406 } else { | |
407 for k, v := range vars { | |
408 s = s + k + ":" + v + "\n" | |
409 } | |
410 } | |
411 } | |
412 fmt.Println(strings.TrimSpace(s)) | |
413 } | |
0 | 414 default: |
33
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
415 if s, err := run(globals(), cmd, args...); err != nil { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
416 fmt.Println(err) |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
417 } else { |
e3c902a7380d
rewritten using zs templates, allowing go templates using <% %> delimiters
zaitsev.serge
parents:
32
diff
changeset
|
418 fmt.Println(s) |
0 | 419 } |
420 } | |
421 } |