comparison zs.go @ 6:cb66f5b86616 draft

rewritted default variables assignment
author zaitsev.serge
date Fri, 05 Dec 2014 18:26:15 +0000
parents e0ee0721d34f
children 11073a30f71f
comparison
equal deleted inserted replaced
5:e0ee0721d34f 6:cb66f5b86616
30 } else { 30 } else {
31 return parts[0], "" 31 return parts[0], ""
32 } 32 }
33 } 33 }
34 34
35 func md(s string) (map[string]string, string) { 35 func md(path, s string) (map[string]string, string) {
36 v := map[string]string{} 36 url := path[:len(path)-len(filepath.Ext(path))] + ".html"
37 v := map[string]string{
38 "file": path,
39 "url": url,
40 "outdir": PUBDIR,
41 "output": filepath.Join(PUBDIR, url),
42 "layout": "index.html",
43 }
37 if strings.Index(s, "\n\n") == -1 { 44 if strings.Index(s, "\n\n") == -1 {
38 return map[string]string{}, s 45 return map[string]string{}, s
39 } 46 }
40 header, body := split2(s, "\n\n") 47 header, body := split2(s, "\n\n")
41 for _, line := range strings.Split(header, "\n") { 48 for _, line := range strings.Split(header, "\n") {
42 key, value := split2(line, ":") 49 key, value := split2(line, ":")
43 v[strings.ToLower(strings.TrimSpace(key))] = strings.TrimSpace(value) 50 v[strings.ToLower(strings.TrimSpace(key))] = strings.TrimSpace(value)
51 }
52 if strings.HasPrefix(v["url"], "./") {
53 v["url"] = v["url"][2:]
44 } 54 }
45 return v, body 55 return v, body
46 } 56 }
47 57
48 func render(s string, vars map[string]string, eval EvalFn) (string, error) { 58 func render(s string, vars map[string]string, eval EvalFn) (string, error) {
126 func buildMarkdown(path string) error { 136 func buildMarkdown(path string) error {
127 b, err := ioutil.ReadFile(path) 137 b, err := ioutil.ReadFile(path)
128 if err != nil { 138 if err != nil {
129 return err 139 return err
130 } 140 }
131 v, body := md(string(b)) 141 v, body := md(path, string(b))
132 defaultVars(v, path)
133 content, err := render(body, v, eval) 142 content, err := render(body, v, eval)
134 if err != nil { 143 if err != nil {
135 return err 144 return err
136 } 145 }
137 v["content"] = string(blackfriday.MarkdownBasic([]byte(content))) 146 v["content"] = string(blackfriday.MarkdownBasic([]byte(content)))
146 err = ioutil.WriteFile(v["output"], []byte(content), 0666) 155 err = ioutil.WriteFile(v["output"], []byte(content), 0666)
147 if err != nil { 156 if err != nil {
148 return err 157 return err
149 } 158 }
150 return nil 159 return nil
151 }
152
153 func defaultVars(vars map[string]string, path string) {
154 if _, ok := vars["file"]; !ok {
155 vars["file"] = path
156 }
157 if _, ok := vars["url"]; !ok {
158 vars["url"] = path[:len(path)-len(filepath.Ext(path))] + ".html"
159 if strings.HasPrefix(vars["url"], "./") {
160 vars["url"] = vars["url"][2:]
161 }
162 }
163 if _, ok := vars["outdir"]; !ok {
164 vars["outdir"] = PUBDIR
165 }
166 if _, ok := vars["output"]; !ok {
167 vars["output"] = filepath.Join(PUBDIR, vars["url"])
168 }
169 if _, ok := vars["layout"]; !ok {
170 vars["layout"] = "index.html"
171 }
172 } 160 }
173 161
174 func copyFile(path string) error { 162 func copyFile(path string) error {
175 if in, err := os.Open(path); err != nil { 163 if in, err := os.Open(path); err != nil {
176 return err 164 return err
247 if len(args) == 0 { 235 if len(args) == 0 {
248 log.Println("ERROR: filename expected") 236 log.Println("ERROR: filename expected")
249 return 237 return
250 } 238 }
251 if b, err := ioutil.ReadFile(args[0]); err == nil { 239 if b, err := ioutil.ReadFile(args[0]); err == nil {
252 vars, _ := md(string(b)) 240 vars, _ := md(args[0], string(b))
253 defaultVars(vars, args[0])
254 if len(args) > 1 { 241 if len(args) > 1 {
255 for _, a := range args[1:] { 242 for _, a := range args[1:] {
256 fmt.Println(vars[a]) 243 fmt.Println(vars[a])
257 } 244 }
258 } else { 245 } else {