Skip to content

Commit ce745c4

Browse files
committed
refactoring
1 parent c7aa25b commit ce745c4

File tree

10 files changed

+625
-59
lines changed

10 files changed

+625
-59
lines changed

kadai2/tanaka0325/imgconv/cmd/imgconv/main.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,20 +67,18 @@ func main() {
6767

6868
for _, path := range paths {
6969
param := imgconv.ConvertParam{
70-
Path: path,
71-
File: imgconv.NewFile(),
72-
BeforeImage: imgconv.NewImage(from),
73-
AfterImage: imgconv.NewImage(to),
74-
FromExt: from,
75-
ToExt: to,
70+
Path: path,
71+
FileHandler: imgconv.NewFile(),
72+
BeforeFormat: imgconv.NewImageFormat(from),
73+
AfterFormat: imgconv.NewImageFormat(to),
7674
}
7775

7876
if !dryRun {
7977
if err := imgconv.Do(param); err != nil {
8078
onExit(err)
8179
}
8280
} else {
83-
e := len(param.Path) - len(param.FromExt)
81+
e := len(param.Path) - len(from)
8482
fmt.Printf("%s => %s%s\n", path, path[:e], to)
8583
}
8684
}

kadai2/tanaka0325/imgconv/cover.html

Lines changed: 269 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,269 @@
1+
2+
<!DOCTYPE html>
3+
<html>
4+
<head>
5+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
6+
<style>
7+
body {
8+
background: black;
9+
color: rgb(80, 80, 80);
10+
}
11+
body, pre, #legend span {
12+
font-family: Menlo, monospace;
13+
font-weight: bold;
14+
}
15+
#topbar {
16+
background: black;
17+
position: fixed;
18+
top: 0; left: 0; right: 0;
19+
height: 42px;
20+
border-bottom: 1px solid rgb(80, 80, 80);
21+
}
22+
#content {
23+
margin-top: 50px;
24+
}
25+
#nav, #legend {
26+
float: left;
27+
margin-left: 10px;
28+
}
29+
#legend {
30+
margin-top: 12px;
31+
}
32+
#nav {
33+
margin-top: 10px;
34+
}
35+
#legend span {
36+
margin: 0 5px;
37+
}
38+
.cov0 { color: rgb(192, 0, 0) }
39+
.cov1 { color: rgb(128, 128, 128) }
40+
.cov2 { color: rgb(116, 140, 131) }
41+
.cov3 { color: rgb(104, 152, 134) }
42+
.cov4 { color: rgb(92, 164, 137) }
43+
.cov5 { color: rgb(80, 176, 140) }
44+
.cov6 { color: rgb(68, 188, 143) }
45+
.cov7 { color: rgb(56, 200, 146) }
46+
.cov8 { color: rgb(44, 212, 149) }
47+
.cov9 { color: rgb(32, 224, 152) }
48+
.cov10 { color: rgb(20, 236, 155) }
49+
50+
</style>
51+
</head>
52+
<body>
53+
<div id="topbar">
54+
<div id="nav">
55+
<select id="files">
56+
57+
<option value="file0">github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/file.go (0.0%)</option>
58+
59+
<option value="file1">github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go (0.0%)</option>
60+
61+
<option value="file2">github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/imgconv.go (95.2%)</option>
62+
63+
</select>
64+
</div>
65+
<div id="legend">
66+
<span>not tracked</span>
67+
68+
<span class="cov0">not covered</span>
69+
<span class="cov8">covered</span>
70+
71+
</div>
72+
</div>
73+
<div id="content">
74+
75+
<pre class="file" id="file0" style="display: none">package imgconv
76+
77+
import (
78+
"io"
79+
"os"
80+
)
81+
82+
type FileHandler interface {
83+
Open(string) (io.ReadCloser, error)
84+
Create(string) (io.WriteCloser, error)
85+
}
86+
87+
type File struct {
88+
Reader io.Reader
89+
Writer io.Writer
90+
}
91+
92+
func (File) Open(n string) (io.ReadCloser, error) <span class="cov0" title="0">{ return os.Open(n) }</span>
93+
func (File) Create(n string) (io.WriteCloser, error) <span class="cov0" title="0">{ return os.Create(n) }</span>
94+
95+
func NewFile() File <span class="cov0" title="0">{
96+
return File{}
97+
}</span>
98+
</pre>
99+
100+
<pre class="file" id="file1" style="display: none">package imgconv
101+
102+
import (
103+
"image"
104+
"image/gif"
105+
"image/jpeg"
106+
"image/png"
107+
"io"
108+
109+
"golang.org/x/image/bmp"
110+
"golang.org/x/image/tiff"
111+
)
112+
113+
type Decoder interface {
114+
Decode(io.Reader) (image.Image, error)
115+
}
116+
117+
type Encoder interface {
118+
Encode(io.Writer, image.Image) error
119+
}
120+
121+
type ImageFormater interface {
122+
Decoder
123+
Encoder
124+
GetExt() string
125+
}
126+
127+
type ImageFormat struct {
128+
Ext string
129+
}
130+
131+
// ImagePng is type for png format.
132+
type PNG ImageFormat
133+
134+
func (PNG) Decode(r io.Reader) (image.Image, error) <span class="cov0" title="0">{ return png.Decode(r) }</span>
135+
func (PNG) Encode(w io.Writer, i image.Image) error <span class="cov0" title="0">{ return png.Encode(w, i) }</span>
136+
func (p *PNG) GetExt() string <span class="cov0" title="0">{ return p.Ext }</span>
137+
138+
// JPEG is type for jpeg format.
139+
type JPEG ImageFormat
140+
141+
func (JPEG) Decode(r io.Reader) (image.Image, error) <span class="cov0" title="0">{ return jpeg.Decode(r) }</span>
142+
func (JPEG) Encode(w io.Writer, i image.Image) error <span class="cov0" title="0">{ return jpeg.Encode(w, i, nil) }</span>
143+
func (j *JPEG) GetExt() string <span class="cov0" title="0">{ return j.Ext }</span>
144+
145+
// GIF is type for gif format.
146+
type GIF ImageFormat
147+
148+
func (GIF) Decode(r io.Reader) (image.Image, error) <span class="cov0" title="0">{ return gif.Decode(r) }</span>
149+
func (GIF) Encode(w io.Writer, i image.Image) error <span class="cov0" title="0">{
150+
return gif.Encode(w, i, &amp;gif.Options{NumColors: 256})
151+
}</span>
152+
func (g *GIF) GetExt() string <span class="cov0" title="0">{ return g.Ext }</span>
153+
154+
// BMP is type for bmp format.
155+
type BMP ImageFormat
156+
157+
func (BMP) Decode(r io.Reader) (image.Image, error) <span class="cov0" title="0">{ return bmp.Decode(r) }</span>
158+
func (BMP) Encode(w io.Writer, i image.Image) error <span class="cov0" title="0">{ return bmp.Encode(w, i) }</span>
159+
func (b *BMP) GetExt() string <span class="cov0" title="0">{ return b.Ext }</span>
160+
161+
// TIFF is type for tiff format.
162+
type TIFF ImageFormat
163+
164+
func (TIFF) Decode(r io.Reader) (image.Image, error) <span class="cov0" title="0">{ return tiff.Decode(r) }</span>
165+
func (TIFF) Encode(w io.Writer, i image.Image) error <span class="cov0" title="0">{ return tiff.Encode(w, i, nil) }</span>
166+
func (t *TIFF) GetExt() string <span class="cov0" title="0">{ return t.Ext }</span>
167+
168+
func NewImageFormat(ext string) ImageFormater <span class="cov0" title="0">{
169+
switch ext </span>{
170+
case "png":<span class="cov0" title="0">
171+
return &amp;PNG{Ext: "png"}</span>
172+
case "jpg", "jpeg":<span class="cov0" title="0">
173+
return &amp;JPEG{Ext: "jpeg"}</span>
174+
case "gif":<span class="cov0" title="0">
175+
return &amp;GIF{Ext: "gif"}</span>
176+
case "bmp":<span class="cov0" title="0">
177+
return &amp;BMP{Ext: "bmp"}</span>
178+
case "tiff", "tif":<span class="cov0" title="0">
179+
return &amp;TIFF{Ext: "tiff"}</span>
180+
}
181+
182+
<span class="cov0" title="0">return nil</span>
183+
}
184+
</pre>
185+
186+
<pre class="file" id="file2" style="display: none">// Imgconv package is to convert images file format.
187+
package imgconv
188+
189+
import "io"
190+
191+
// ConvertParam is parameter to convert image format.
192+
type ConvertParam struct {
193+
Path string
194+
FileHandler FileHandler
195+
BeforeFormat ImageFormater
196+
AfterFormat ImageFormater
197+
}
198+
199+
// Do is func to convert image format.
200+
func Do(param ConvertParam) (rerr error) <span class="cov8" title="1">{
201+
r, err := param.FileHandler.Open(param.Path)
202+
if err != nil </span><span class="cov8" title="1">{
203+
return err
204+
}</span>
205+
<span class="cov8" title="1">defer r.Close()
206+
207+
e := len(param.Path) - len(param.BeforeFormat.GetExt())
208+
w, err := param.FileHandler.Create(param.Path[:e] + param.AfterFormat.GetExt())
209+
if err != nil </span><span class="cov8" title="1">{
210+
return err
211+
}</span>
212+
<span class="cov8" title="1">defer func() </span><span class="cov8" title="1">{
213+
err := w.Close()
214+
if err != nil </span><span class="cov0" title="0">{
215+
rerr = err
216+
}</span>
217+
}()
218+
219+
<span class="cov8" title="1">if err := convert(r, param.BeforeFormat, w, param.AfterFormat); err != nil </span><span class="cov8" title="1">{
220+
return err
221+
}</span>
222+
223+
<span class="cov8" title="1">return nil</span>
224+
}
225+
226+
func convert(r io.Reader, d Decoder, w io.Writer, e Encoder) error <span class="cov8" title="1">{
227+
img, err := d.Decode(r)
228+
if err != nil </span><span class="cov8" title="1">{
229+
return err
230+
}</span>
231+
232+
<span class="cov8" title="1">if err := e.Encode(w, img); err != nil </span><span class="cov8" title="1">{
233+
return err
234+
}</span>
235+
236+
<span class="cov8" title="1">return nil</span>
237+
}
238+
</pre>
239+
240+
</div>
241+
</body>
242+
<script>
243+
(function() {
244+
var files = document.getElementById('files');
245+
var visible;
246+
files.addEventListener('change', onChange, false);
247+
function select(part) {
248+
if (visible)
249+
visible.style.display = 'none';
250+
visible = document.getElementById(part);
251+
if (!visible)
252+
return;
253+
files.value = part;
254+
visible.style.display = 'block';
255+
location.hash = part;
256+
}
257+
function onChange() {
258+
select(files.value);
259+
window.scrollTo(0, 0);
260+
}
261+
if (location.hash != "") {
262+
select(location.hash.substr(1));
263+
}
264+
if (!visible) {
265+
select("file0");
266+
}
267+
})();
268+
</script>
269+
</html>

kadai2/tanaka0325/imgconv/cover.out

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
mode: set
2+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/file.go:18.54,18.75 1 0
3+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/file.go:19.54,19.77 1 0
4+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/file.go:21.21,23.2 1 0
5+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:35.53,35.77 1 0
6+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:36.53,36.80 1 0
7+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:37.53,37.69 1 0
8+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:42.54,42.79 1 0
9+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:43.54,43.87 1 0
10+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:44.54,44.70 1 0
11+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:49.53,49.77 1 0
12+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:50.53,52.2 1 0
13+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:53.31,53.47 1 0
14+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:58.53,58.77 1 0
15+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:59.53,59.80 1 0
16+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:60.53,60.69 1 0
17+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:65.54,65.79 1 0
18+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:66.54,66.87 1 0
19+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:67.54,67.70 1 0
20+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:69.47,70.13 1 0
21+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:83.2,83.12 1 0
22+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:71.13,72.26 1 0
23+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:73.21,74.28 1 0
24+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:75.13,76.26 1 0
25+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:77.13,78.26 1 0
26+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/format.go:79.21,80.28 1 0
27+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/imgconv.go:15.42,17.16 2 1
28+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/imgconv.go:20.2,24.16 4 1
29+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/imgconv.go:27.2,27.15 1 1
30+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/imgconv.go:34.2,34.77 1 1
31+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/imgconv.go:38.2,38.12 1 1
32+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/imgconv.go:17.16,19.3 1 1
33+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/imgconv.go:24.16,26.3 1 1
34+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/imgconv.go:27.15,29.17 2 1
35+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/imgconv.go:29.17,31.4 1 0
36+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/imgconv.go:34.77,36.3 1 1
37+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/imgconv.go:41.68,43.16 2 1
38+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/imgconv.go:47.2,47.41 1 1
39+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/imgconv.go:51.2,51.12 1 1
40+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/imgconv.go:43.16,45.3 1 1
41+
github.com/gopherdojo/dojo8/kadai2/tanaka0325/imgconv/imgconv.go:47.41,49.3 1 1
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package imgconv
2+
3+
var ConvertFunc = convert

kadai2/tanaka0325/imgconv/file.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,15 @@ import (
55
"os"
66
)
77

8-
type OpenCreator interface {
8+
type FileHandler interface {
99
Open(string) (io.ReadCloser, error)
1010
Create(string) (io.WriteCloser, error)
1111
}
1212

13-
type File struct{}
13+
type File struct {
14+
Reader io.Reader
15+
Writer io.Writer
16+
}
1417

1518
func (File) Open(n string) (io.ReadCloser, error) { return os.Open(n) }
1619
func (File) Create(n string) (io.WriteCloser, error) { return os.Create(n) }

0 commit comments

Comments
 (0)