fix typo & grammar

This commit is contained in:
Celogeek 2024-02-08 20:44:00 +02:00
parent 2d15bc43c2
commit b6db09aa9e
Signed by: celogeek
SSH Key Fingerprint: SHA256:DEDfxIK2nUWXbslbRkww3zsauDjhWHlTXar+ak4lDJ4
13 changed files with 53 additions and 51 deletions

View File

@ -2,7 +2,7 @@
Convert CBZ/CBR/Dir into EPUB for e-reader devices (Kindle Devices, ...) Convert CBZ/CBR/Dir into EPUB for e-reader devices (Kindle Devices, ...)
My goal is to make a simple, crossplatform, and fast tool to convert comics into EPUB. My goal is to make a simple, cross-platform, and fast tool to convert comics into EPUB.
EPUB is now support by Amazon through [SendToKindle](https://www.amazon.com/gp/sendtokindle/), by Email or by using the App. So I've made it simple to support the size limit constraint of those services. EPUB is now support by Amazon through [SendToKindle](https://www.amazon.com/gp/sendtokindle/), by Email or by using the App. So I've made it simple to support the size limit constraint of those services.
@ -16,7 +16,7 @@ EPUB is now support by Amazon through [SendToKindle](https://www.amazon.com/gp/s
- Auto contrast - Auto contrast
- Auto rotate (if reader mainly read on portrait) - Auto rotate (if reader mainly read on portrait)
- Auto split double page (for easy read on portrait) - Auto split double page (for easy read on portrait)
- Keep double page if splitted - Keep double page if split
- Remove blank image (empty image is removed) - Remove blank image (empty image is removed)
- Manga or Normal mode - Manga or Normal mode
- Support cover page or not (first page will be taken in that case) - Support cover page or not (first page will be taken in that case)
@ -91,7 +91,7 @@ Convert every supported image files found in the input directory:
$ go-comic-converter -profile SR -input ~/Download/MyComic $ go-comic-converter -profile SR -input ~/Download/MyComic
``` ```
By default it will output: ~/Download/MyComic.epub By default, it will output: ~/Download/MyComic.epub
## Convert CBZ, ZIP, CBR, RAR, PDF ## Convert CBZ, ZIP, CBR, RAR, PDF
@ -101,7 +101,7 @@ Convert every supported image files found in the input directory:
$ go-comic-converter -profile SR -input ~/Download/MyComic.[CBZ,ZIP,CBR,RAR,PDF] $ go-comic-converter -profile SR -input ~/Download/MyComic.[CBZ,ZIP,CBR,RAR,PDF]
``` ```
By default it will output: ~/Download/MyComic.epub By default, it will output: ~/Download/MyComic.epub
## Convert with size limit ## Convert with size limit
@ -130,7 +130,7 @@ If the total is above 1, then the title of the EPUB include:
## Dry run ## Dry run
If you want to preview what will be set during the convertion without running the conversion, then you can use the `-dry` option. If you want to preview what will be set during the conversion without running the conversion, then you can use the `-dry` option.
``` ```
$ go-comic-converter -input ~/Downloads/mymanga.cbr -profile SR -auto -manga -limitmb 200 -dry $ go-comic-converter -input ~/Downloads/mymanga.cbr -profile SR -auto -manga -limitmb 200 -dry
@ -176,7 +176,7 @@ TOC:
## Dry verbose ## Dry verbose
You can choose different way to sort path and files, depending of your source. You can preview the sorted result with the option `dry-verbose` associated with `dry`. You can choose different way to sort path and files, depending on your source. You can preview the sorted result with the option `dry-verbose` associated with `dry`.
The option `sort` allow you to change the sorting order. The option `sort` allow you to change the sorting order.
@ -418,7 +418,7 @@ Explanation:
- `-autocontrast`: automatically improve contrast - `-autocontrast`: automatically improve contrast
- `-manga`: manga mode, read right to left - `-manga`: manga mode, read right to left
- `-limitmb 200`: size limit to 200MB allowing upload from SendToKindle website - `-limitmb 200`: size limit to 200MB allowing upload from SendToKindle website
- `-strip`: remove first level if alone on TOC, as offen comics include a main directory with the title - `-strip`: remove first level if alone on TOC, as often comics include a main directory with the title
- `aspect-ratio`: ensure aspect ratio is 1:1.6, best for kindle devices. - `aspect-ratio`: ensure aspect ratio is 1:1.6, best for kindle devices.
# Help # Help

View File

@ -1,10 +1,8 @@
/* // Package converter Helper to parse and prepare options for go-comic-converter.
Converter Helper to parse and prepare options for go-comic-converter. //
// It uses goflag with additional feature:
It use goflag with additional feature: // - Keep original order
- Keep original order // - Support section
- Support section
*/
package converter package converter
import ( import (
@ -97,7 +95,7 @@ func (c *Converter) AddBoolParam(p *bool, name string, value bool, usage string)
c.order = append(c.order, converterOrderName{value: name}) c.order = append(c.order, converterOrderName{value: name})
} }
// Initialize the parser with all section and parameter. // InitParse Initialize the parser with all section and parameter.
func (c *Converter) InitParse() { func (c *Converter) InitParse() {
c.AddSection("Output") c.AddSection("Output")
c.AddStringParam(&c.Options.Input, "input", "", "Source of comic to convert: directory, cbz, zip, cbr, rar, pdf") c.AddStringParam(&c.Options.Input, "input", "", "Source of comic to convert: directory, cbz, zip, cbr, rar, pdf")
@ -115,25 +113,25 @@ func (c *Converter) InitParse() {
c.AddIntParam(&c.Options.CropRatioUp, "crop-ratio-up", c.Options.CropRatioUp, "Crop ratio up: ratio of pixels allow to be non blank while cutting on the top.") c.AddIntParam(&c.Options.CropRatioUp, "crop-ratio-up", c.Options.CropRatioUp, "Crop ratio up: ratio of pixels allow to be non blank while cutting on the top.")
c.AddIntParam(&c.Options.CropRatioRight, "crop-ratio-right", c.Options.CropRatioRight, "Crop ratio right: ratio of pixels allow to be non blank while cutting on the right.") c.AddIntParam(&c.Options.CropRatioRight, "crop-ratio-right", c.Options.CropRatioRight, "Crop ratio right: ratio of pixels allow to be non blank while cutting on the right.")
c.AddIntParam(&c.Options.CropRatioBottom, "crop-ratio-bottom", c.Options.CropRatioBottom, "Crop ratio bottom: ratio of pixels allow to be non blank while cutting on the bottom.") c.AddIntParam(&c.Options.CropRatioBottom, "crop-ratio-bottom", c.Options.CropRatioBottom, "Crop ratio bottom: ratio of pixels allow to be non blank while cutting on the bottom.")
c.AddIntParam(&c.Options.Brightness, "brightness", c.Options.Brightness, "Brightness readjustement: between -100 and 100, > 0 lighter, < 0 darker") c.AddIntParam(&c.Options.Brightness, "brightness", c.Options.Brightness, "Brightness readjustment: between -100 and 100, > 0 lighter, < 0 darker")
c.AddIntParam(&c.Options.Contrast, "contrast", c.Options.Contrast, "Contrast readjustement: between -100 and 100, > 0 more contrast, < 0 less contrast") c.AddIntParam(&c.Options.Contrast, "contrast", c.Options.Contrast, "Contrast readjustment: between -100 and 100, > 0 more contrast, < 0 less contrast")
c.AddBoolParam(&c.Options.AutoContrast, "autocontrast", c.Options.AutoContrast, "Improve contrast automatically") c.AddBoolParam(&c.Options.AutoContrast, "autocontrast", c.Options.AutoContrast, "Improve contrast automatically")
c.AddBoolParam(&c.Options.AutoRotate, "autorotate", c.Options.AutoRotate, "Auto Rotate page when width > height") c.AddBoolParam(&c.Options.AutoRotate, "autorotate", c.Options.AutoRotate, "Auto Rotate page when width > height")
c.AddBoolParam(&c.Options.AutoSplitDoublePage, "autosplitdoublepage", c.Options.AutoSplitDoublePage, "Auto Split double page when width > height") c.AddBoolParam(&c.Options.AutoSplitDoublePage, "autosplitdoublepage", c.Options.AutoSplitDoublePage, "Auto Split double page when width > height")
c.AddBoolParam(&c.Options.KeepDoublePageIfSplitted, "keepdoublepageifsplitted", c.Options.KeepDoublePageIfSplitted, "Keep the double page if splitted") c.AddBoolParam(&c.Options.KeepDoublePageIfSplitted, "keepdoublepageifsplitted", c.Options.KeepDoublePageIfSplitted, "Keep the double page if split")
c.AddBoolParam(&c.Options.NoBlankImage, "noblankimage", c.Options.NoBlankImage, "Remove blank image") c.AddBoolParam(&c.Options.NoBlankImage, "noblankimage", c.Options.NoBlankImage, "Remove blank image")
c.AddBoolParam(&c.Options.Manga, "manga", c.Options.Manga, "Manga mode (right to left)") c.AddBoolParam(&c.Options.Manga, "manga", c.Options.Manga, "Manga mode (right to left)")
c.AddBoolParam(&c.Options.HasCover, "hascover", c.Options.HasCover, "Has cover. Indicate if your comic have a cover. The first page will be used as a cover and include after the title.") c.AddBoolParam(&c.Options.HasCover, "hascover", c.Options.HasCover, "Has cover. Indicate if your comic have a cover. The first page will be used as a cover and include after the title.")
c.AddIntParam(&c.Options.LimitMb, "limitmb", c.Options.LimitMb, "Limit size of the EPUB: Default nolimit (0), Minimum 20") c.AddIntParam(&c.Options.LimitMb, "limitmb", c.Options.LimitMb, "Limit size of the EPUB: Default nolimit (0), Minimum 20")
c.AddBoolParam(&c.Options.StripFirstDirectoryFromToc, "strip", c.Options.StripFirstDirectoryFromToc, "Strip first directory from the TOC if only 1") c.AddBoolParam(&c.Options.StripFirstDirectoryFromToc, "strip", c.Options.StripFirstDirectoryFromToc, "Strip first directory from the TOC if only 1")
c.AddIntParam(&c.Options.SortPathMode, "sort", c.Options.SortPathMode, "Sort path mode\n0 = alpha for path and file\n1 = alphanum for path and alpha for file\n2 = alphanum for path and file") c.AddIntParam(&c.Options.SortPathMode, "sort", c.Options.SortPathMode, "Sort path mode\n0 = alpha for path and file\n1 = alphanumeric for path and alpha for file\n2 = alphanumeric for path and file")
c.AddStringParam(&c.Options.ForegroundColor, "foreground-color", c.Options.ForegroundColor, "Foreground color in hexa format RGB. Black=000, White=FFF") c.AddStringParam(&c.Options.ForegroundColor, "foreground-color", c.Options.ForegroundColor, "Foreground color in hexadecimal format RGB. Black=000, White=FFF")
c.AddStringParam(&c.Options.BackgroundColor, "background-color", c.Options.BackgroundColor, "Background color in hexa format RGB. Black=000, White=FFF, Light Gray=DDD, Dark Gray=777") c.AddStringParam(&c.Options.BackgroundColor, "background-color", c.Options.BackgroundColor, "Background color in hexadecimal format RGB. Black=000, White=FFF, Light Gray=DDD, Dark Gray=777")
c.AddBoolParam(&c.Options.NoResize, "noresize", c.Options.NoResize, "Do not reduce image size if exceed device size") c.AddBoolParam(&c.Options.NoResize, "noresize", c.Options.NoResize, "Do not reduce image size if exceed device size")
c.AddStringParam(&c.Options.Format, "format", c.Options.Format, "Format of output images: jpeg (lossy), png (lossless)") c.AddStringParam(&c.Options.Format, "format", c.Options.Format, "Format of output images: jpeg (lossy), png (lossless)")
c.AddFloatParam(&c.Options.AspectRatio, "aspect-ratio", c.Options.AspectRatio, "Aspect ratio (height/width) of the output\n -1 = same as device\n 0 = same as source\n1.6 = amazon advice for kindle") c.AddFloatParam(&c.Options.AspectRatio, "aspect-ratio", c.Options.AspectRatio, "Aspect ratio (height/width) of the output\n -1 = same as device\n 0 = same as source\n1.6 = amazon advice for kindle")
c.AddBoolParam(&c.Options.PortraitOnly, "portrait-only", c.Options.PortraitOnly, "Portrait only: force orientation to portrait only.") c.AddBoolParam(&c.Options.PortraitOnly, "portrait-only", c.Options.PortraitOnly, "Portrait only: force orientation to portrait only.")
c.AddIntParam(&c.Options.TitlePage, "titlepage", c.Options.TitlePage, "Title page\n0 = never\n1 = always\n2 = only if epub is splitted") c.AddIntParam(&c.Options.TitlePage, "titlepage", c.Options.TitlePage, "Title page\n0 = never\n1 = always\n2 = only if epub is split")
c.AddSection("Default config") c.AddSection("Default config")
c.AddBoolParam(&c.Options.Show, "show", false, "Show your default parameters") c.AddBoolParam(&c.Options.Show, "show", false, "Show your default parameters")
@ -363,11 +361,11 @@ func (c *Converter) Validate() error {
// Color // Color
colorRegex := regexp.MustCompile("^[0-9A-F]{3}$") colorRegex := regexp.MustCompile("^[0-9A-F]{3}$")
if !colorRegex.MatchString(c.Options.ForegroundColor) { if !colorRegex.MatchString(c.Options.ForegroundColor) {
return errors.New("foreground color must have color format in hexa: [0-9A-F]{3}") return errors.New("foreground color must have color format in hexadecimal: [0-9A-F]{3}")
} }
if !colorRegex.MatchString(c.Options.BackgroundColor) { if !colorRegex.MatchString(c.Options.BackgroundColor) {
return errors.New("background color must have color format in hexa: [0-9A-F]{3}") return errors.New("background color must have color format in hexadecimal: [0-9A-F]{3}")
} }
// Format // Format

View File

@ -225,9 +225,9 @@ func (o *Options) ShowConfig() string {
case 0: case 0:
sortpathmode = "path=alpha, file=alpha" sortpathmode = "path=alpha, file=alpha"
case 1: case 1:
sortpathmode = "path=alphanum, file=alpha" sortpathmode = "path=alphanumeric, file=alpha"
case 2: case 2:
sortpathmode = "path=alphanum, file=alphanum" sortpathmode = "path=alphanumeric, file=alphanumeric"
} }
aspectRatio := "auto" aspectRatio := "auto"
@ -301,7 +301,7 @@ func (o *Options) ResetConfig() error {
return o.LoadConfig() return o.LoadConfig()
} }
// save all current settings as futur default value // SaveConfig save all current settings as default value
func (o *Options) SaveConfig() error { func (o *Options) SaveConfig() error {
f, err := os.Create(o.FileName()) f, err := os.Create(o.FileName())
if err != nil { if err != nil {

View File

@ -20,7 +20,7 @@ type Profiles []Profile
// Initialize list of all supported profiles. // Initialize list of all supported profiles.
func New() Profiles { func New() Profiles {
return []Profile{ return []Profile{
// High Resolution for Tablette // High Resolution for Tablet
{"HR", "High Resolution", 2400, 3840}, {"HR", "High Resolution", 2400, 3840},
{"SR", "Standard Resolution", 1200, 1920}, {"SR", "Standard Resolution", 1200, 1920},
//Kindle //Kindle

View File

@ -25,27 +25,27 @@ type Image struct {
Error error Error error
} }
// key name of the blank plage after the image // SpaceKey key name of the blank page after the image
func (i *Image) SpaceKey() string { func (i *Image) SpaceKey() string {
return fmt.Sprintf("space_%d", i.Id) return fmt.Sprintf("space_%d", i.Id)
} }
// path of the blank page // SpacePath path of the blank page
func (i *Image) SpacePath() string { func (i *Image) SpacePath() string {
return fmt.Sprintf("Text/%s.xhtml", i.SpaceKey()) return fmt.Sprintf("Text/%s.xhtml", i.SpaceKey())
} }
// path of the blank page into the EPUB // EPUBSpacePath path of the blank page into the EPUB
func (i *Image) EPUBSpacePath() string { func (i *Image) EPUBSpacePath() string {
return fmt.Sprintf("OEBPS/%s", i.SpacePath()) return fmt.Sprintf("OEBPS/%s", i.SpacePath())
} }
// key for page // PageKey key for page
func (i *Image) PageKey() string { func (i *Image) PageKey() string {
return fmt.Sprintf("page_%d_p%d", i.Id, i.Part) return fmt.Sprintf("page_%d_p%d", i.Id, i.Part)
} }
// page path linked to the image // PagePath page path linked to the image
func (i *Image) PagePath() string { func (i *Image) PagePath() string {
return fmt.Sprintf("Text/%s.xhtml", i.PageKey()) return fmt.Sprintf("Text/%s.xhtml", i.PageKey())
} }
@ -70,10 +70,10 @@ func (i *Image) EPUBImgPath() string {
return fmt.Sprintf("OEBPS/%s", i.ImgPath()) return fmt.Sprintf("OEBPS/%s", i.ImgPath())
} }
// style to apply to the image. // ImgStyle style to apply to the image.
// //
// center by default. // center by default.
// align to left or right if it's part of the splitted double page. // align to left or right if it's part of the split double page.
func (i *Image) ImgStyle(viewWidth, viewHeight int, align string) string { func (i *Image) ImgStyle(viewWidth, viewHeight int, align string) string {
relWidth, relHeight := i.RelSize(viewWidth, viewHeight) relWidth, relHeight := i.RelSize(viewWidth, viewHeight)
marginW, marginH := float64(viewWidth-relWidth)/2, float64(viewHeight-relHeight)/2 marginW, marginH := float64(viewWidth-relWidth)/2, float64(viewHeight-relHeight)/2

View File

@ -78,7 +78,7 @@ func (f *autocontrast) Draw(dst draw.Image, src image.Image, options *gift.Optio
// compute a curve from dark and light factor applying to the color // compute a curve from dark and light factor applying to the color
c := (1 - d) + (d+l)*y c := (1 - d) + (d+l)*y
// applying the coef // applying the ratio
return f.cap(r0 * c), f.cap(g0 * c), f.cap(b0 * c), a0 return f.cap(r0 * c), f.cap(g0 * c), f.cap(b0 * c), a0
}).Draw(dst, src, options) }).Draw(dst, src, options)
} }

View File

@ -35,7 +35,7 @@ func (e *EPUBImageProcessor) Load() (images []*epubimage.Image, err error) {
return nil, err return nil, err
} }
// dry run, skip convertion // dry run, skip conversion
if e.Dry { if e.Dry {
for img := range imageInput { for img := range imageInput {
images = append(images, &epubimage.Image{ images = append(images, &epubimage.Image{

View File

@ -30,7 +30,9 @@ type tag struct {
value string value string
} }
// create the content file // Content create the content file
//
//goland:noinspection HttpUrlsUsage,HttpUrlsUsage,HttpUrlsUsage,HttpUrlsUsage
func Content(o *ContentOptions) string { func Content(o *ContentOptions) string {
doc := etree.NewDocument() doc := etree.NewDocument()
doc.CreateProcInst("xml", `version="1.0" encoding="UTF-8"`) doc.CreateProcInst("xml", `version="1.0" encoding="UTF-8"`)
@ -269,7 +271,7 @@ func getSpinePortrait(o *ContentOptions) []tag {
return spine return spine
} }
// guide part of the content // getGuide Section guide of the content
func getGuide(o *ContentOptions) []tag { func getGuide(o *ContentOptions) []tag {
return []tag{ return []tag{
{"reference", tagAttrs{"type": "cover", "title": "cover", "href": "Text/cover.xhtml"}, ""}, {"reference", tagAttrs{"type": "cover", "title": "cover", "href": "Text/cover.xhtml"}, ""},

View File

@ -8,7 +8,9 @@ import (
epubimage "github.com/celogeek/go-comic-converter/v2/internal/epub/image" epubimage "github.com/celogeek/go-comic-converter/v2/internal/epub/image"
) )
// create toc // Toc create toc
//
//goland:noinspection HttpUrlsUsage
func Toc(title string, hasTitle bool, stripFirstDirectoryFromToc bool, images []*epubimage.Image) string { func Toc(title string, hasTitle bool, stripFirstDirectoryFromToc bool, images []*epubimage.Image) string {
doc := etree.NewDocument() doc := etree.NewDocument()
doc.CreateProcInst("xml", `version="1.0" encoding="UTF-8"`) doc.CreateProcInst("xml", `version="1.0" encoding="UTF-8"`)

View File

@ -32,7 +32,7 @@ type node struct {
Children []*node Children []*node
} }
// initilize tree with a root node // New initialize tree with a root node
func New() *tree { func New() *tree {
return &tree{map[string]*node{ return &tree{map[string]*node{
".": {".", []*node{}}, ".": {".", []*node{}},

View File

@ -1,7 +1,7 @@
/* /*
sortpath support sorting of path that may include number. Package sortpath support sorting of path that may include number.
A series of path can looks like: A series of path can look like:
- Tome1/Chap1/Image1.jpg - Tome1/Chap1/Image1.jpg
- Tome1/Chap2/Image1.jpg - Tome1/Chap2/Image1.jpg
- Tome1/Chap10/Image2.jpg - Tome1/Chap10/Image2.jpg
@ -11,8 +11,8 @@ and compare them by decomposing the string and number part.
The module support 3 mode: The module support 3 mode:
- mode=0 alpha for path and file - mode=0 alpha for path and file
- mode=1 alphanum for path and alpha for file - mode=1 alphanumeric for path and alpha for file
- mode=2 alphanum for path and file - mode=2 alphanumeric for path and file
Example: Example:

View File

@ -43,8 +43,8 @@ func parsePart(p string) part {
} }
// mode=0 alpha for path and file // mode=0 alpha for path and file
// mode=1 alphanum for path and alpha for file // mode=1 alphanumeric for path and alpha for file
// mode=2 alphanum for path and file // mode=2 alphanumeric for path and file
func parse(filename string, mode int) []part { func parse(filename string, mode int) []part {
pathname, name := filepath.Split(strings.ToLower(filename)) pathname, name := filepath.Split(strings.ToLower(filename))
pathname = strings.TrimSuffix(pathname, string(filepath.Separator)) pathname = strings.TrimSuffix(pathname, string(filepath.Separator))
@ -53,13 +53,13 @@ func parse(filename string, mode int) []part {
f := []part{} f := []part{}
for _, p := range strings.Split(pathname, string(filepath.Separator)) { for _, p := range strings.Split(pathname, string(filepath.Separator)) {
if mode > 0 { // alphanum for path if mode > 0 { // alphanumeric for path
f = append(f, parsePart(p)) f = append(f, parsePart(p))
} else { } else {
f = append(f, part{p, p, 0}) f = append(f, part{p, p, 0})
} }
} }
if mode == 2 { // alphanum for file if mode == 2 { // alphanumeric for file
f = append(f, parsePart(name)) f = append(f, parsePart(name))
} else { } else {
f = append(f, part{name, name, 0}) f = append(f, part{name, name, 0})
@ -67,7 +67,7 @@ func parse(filename string, mode int) []part {
return f return f
} }
// compare 2 fullpath splitted into parts // compare 2 full path split into parts
func compareParts(a, b []part) float64 { func compareParts(a, b []part) float64 {
m := len(a) m := len(a)
if m > len(b) { if m > len(b) {

View File

@ -1,7 +1,7 @@
/* /*
Convert CBZ/CBR/Dir into EPUB for e-reader devices (Kindle Devices, ...) Convert CBZ/CBR/Dir into EPUB for e-reader devices (Kindle Devices, ...)
My goal is to make a simple, crossplatform, and fast tool to convert comics into EPUB. My goal is to make a simple, cross-platform, and fast tool to convert comics into EPUB.
EPUB is now support by Amazon through [SendToKindle](https://www.amazon.com/gp/sendtokindle/), by Email or by using the App. So I've made it simple to support the size limit constraint of those services. EPUB is now support by Amazon through [SendToKindle](https://www.amazon.com/gp/sendtokindle/), by Email or by using the App. So I've made it simple to support the size limit constraint of those services.
*/ */