diff --git a/internal/epub/epub.go b/internal/epub/epub.go index bcc33f9..8a7ef1c 100644 --- a/internal/epub/epub.go +++ b/internal/epub/epub.go @@ -49,12 +49,7 @@ type epubPart struct { } func New(options *Options) *ePub { - uid, err := uuid.NewV4() - if err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) - } - + uid := uuid.Must(uuid.NewV4()) tmpl := template.New("parser") tmpl.Funcs(template.FuncMap{ "mod": func(i, j int) bool { return i%j == 0 }, @@ -71,20 +66,12 @@ func New(options *Options) *ePub { } func (e *ePub) render(templateString string, data any) string { - tmpl, err := e.templateProcessor.Parse(templateString) - if err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) + var result strings.Builder + tmpl := template.Must(e.templateProcessor.Parse(templateString)) + if err := tmpl.Execute(&result, data); err != nil { + panic(err) } - result := &strings.Builder{} - if err := tmpl.Execute(result, data); err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) - } - - stripBlank := regexp.MustCompile("\n+") - - return stripBlank.ReplaceAllString(result.String(), "\n") + return regexp.MustCompile("\n+").ReplaceAllString(result.String(), "\n") } func (e *ePub) writeImage(wz *epubzip.EpubZip, img *epubimage.Image) error { diff --git a/internal/epub/imagedata/epub_image_data.go b/internal/epub/imagedata/epub_image_data.go index 572893f..517ee52 100644 --- a/internal/epub/imagedata/epub_image_data.go +++ b/internal/epub/imagedata/epub_image_data.go @@ -21,30 +21,42 @@ func (img *ImageData) CompressedSize() uint64 { return img.Header.CompressedSize64 + 30 + uint64(len(img.Header.Name)) } +func exitWithError(err error) { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) +} + func New(id int, part int, img image.Image, quality int) *ImageData { name := fmt.Sprintf("OEBPS/Images/%d_p%d.jpg", id, part) return NewRaw(name, img, quality) } func NewRaw(name string, img image.Image, quality int) *ImageData { - data := bytes.NewBuffer([]byte{}) - if err := jpeg.Encode(data, img, &jpeg.Options{Quality: quality}); err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) + var ( + data, cdata bytes.Buffer + err error + ) + + err = jpeg.Encode(&data, img, &jpeg.Options{Quality: quality}) + if err != nil { + exitWithError(err) } - cdata := bytes.NewBuffer([]byte{}) - wcdata, err := flate.NewWriter(cdata, flate.BestCompression) + wcdata, err := flate.NewWriter(&cdata, flate.BestCompression) if err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) + exitWithError(err) } - wcdata.Write(data.Bytes()) - wcdata.Close() + + _, err = wcdata.Write(data.Bytes()) if err != nil { - fmt.Fprintln(os.Stderr, err) - os.Exit(1) + exitWithError(err) } + + err = wcdata.Close() + if err != nil { + exitWithError(err) + } + t := time.Now() return &ImageData{ &zip.FileHeader{