Просмотр исходного кода

Support writing directly to a file

Lucas Stadler лет назад: 9
Родитель
Сommit
9cf0b55b98
1 измененных файлов с 19 добавлено и 10 удалено
  1. 19 10
      go/blog/blog.go

+ 19 - 10
go/blog/blog.go

77
	}
77
	}
78
	defer f.Close()
78
	defer f.Close()
79
79
80
	out := os.Stdout
81
	if flag.NArg() > 1 {
82
		out, err = os.Create(flag.Arg(1))
83
		if err != nil {
84
			exit(err)
85
		}
86
	}
87
80
	data, err := ioutil.ReadAll(f)
88
	data, err := ioutil.ReadAll(f)
81
	if err != nil {
89
	if err != nil {
82
		exit(err)
90
		exit(err)
88
		exit(err)
96
		exit(err)
89
	}
97
	}
90
98
91
	fmt.Printf(`<!doctype html>
99
	fmt.Fprintf(out, `<!doctype html>
92
<html>
100
<html>
93
<head>
101
<head>
94
	<meta charset="utf-8" />
102
	<meta charset="utf-8" />
117
		var err error
125
		var err error
118
		switch post.Type {
126
		switch post.Type {
119
		case "shell":
127
		case "shell":
120
			err = shellTmpl.Execute(os.Stdout, post)
128
			err = shellTmpl.Execute(out, post)
121
		case "link":
129
		case "link":
122
			err = linkTmpl.Execute(os.Stdout, post)
130
			err = linkTmpl.Execute(out, post)
123
		case "image":
131
		case "image":
124
			err = imageTmpl.Execute(os.Stdout, post)
132
			err = imageTmpl.Execute(out, post)
125
		case "song":
133
		case "song":
126
			err = songTmpl.Execute(os.Stdout, post)
134
			err = songTmpl.Execute(out, post)
127
		case "text":
135
		case "text":
128
			err = textTmpl.Execute(os.Stdout, post)
136
			err = textTmpl.Execute(out, post)
129
		case "video":
137
		case "video":
130
			u, err := url.Parse(post.URL)
138
			u, err := url.Parse(post.URL)
131
			if err != nil {
139
			if err != nil {
136
				exit(fmt.Errorf("unsupported video url '%s'", post.URL))
144
				exit(fmt.Errorf("unsupported video url '%s'", post.URL))
137
			}
145
			}
138
			post.URL = id
146
			post.URL = id
139
			err = videoTmpl.Execute(os.Stdout, post)
147
			err = videoTmpl.Execute(out, post)
140
		default:
148
		default:
141
			fmt.Fprintf(os.Stderr, "Error: no output for type '%s'\n", post.Type)
149
			fmt.Fprintf(os.Stderr, "Error: no output for type '%s'\n", post.Type)
142
			os.Exit(1)
150
			os.Exit(1)
146
		}
154
		}
147
	}
155
	}
148
156
149
	fmt.Printf("\n</body>\n</html>\n")
157
	fmt.Fprintf(out, "\n</body>\n</html>\n")
158
	out.Close()
150
159
151
	if flags.writeBack {
160
	if flags.writeBack {
152
		out, err := yaml.Marshal(posts)
161
		dataOut, err := yaml.Marshal(posts)
153
		if err != nil {
162
		if err != nil {
154
			exit(err)
163
			exit(err)
155
		}
164
		}
156
		ioutil.WriteFile(dataPath, out, 0664)
165
		ioutil.WriteFile(dataPath, dataOut, 0664)
157
	}
166
	}
158
}
167
}
159
168