From 4a89446914186ed3aa80539b0726483770f0a49d Mon Sep 17 00:00:00 2001 From: Michael Shavit Date: Sun, 27 Oct 2019 19:41:34 -0400 Subject: [PATCH] Enable Synthetic Spreads for the Kobo Forma. Rotating the device into landscape mode will cause it to display two pages side by side. This is particularly useful for input comics whose spreads are already split into two files. See https://github.com/kobolabs/epub-spec#synthetic-spreads for additional information on synthetic spreads. (Tiny drive-by: Add Kobo format to list of profiles for which the AUTO format is EPUB) --- kindlecomicconverter/comic2ebook.py | 57 ++++++++++++++++++++++++----- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/kindlecomicconverter/comic2ebook.py b/kindlecomicconverter/comic2ebook.py index 9cdeee7..d33a68f 100755 --- a/kindlecomicconverter/comic2ebook.py +++ b/kindlecomicconverter/comic2ebook.py @@ -302,6 +302,11 @@ def buildOPF(dstdir, title, filelist, cover=None): else: f.writelines(["\n", "\n"]) + elif options.supportSyntheticSpread: + f.writelines([ + "landscape\n", + "pre-paginated\n" + ]) else: f.writelines(["portrait\n", "portrait\n", @@ -334,38 +339,64 @@ def buildOPF(dstdir, title, filelist, cover=None): f.write("\n") f.write("\n") + + + def pageSpreadProperty(pageside): + if options.iskindle: + return "linear=\"yes\" properties=\"page-spread-%s\"" % pageside + elif options.isKobo: + return "properties=\"rendition:page-spread-%s\"" % pageside + else: + return "" + if options.righttoleft: f.write("\n\n") pageside = "right" else: f.write("\n\n") pageside = "left" - if options.iskindle: + if options.iskindle or options.supportSyntheticSpread: for entry in reflist: if options.righttoleft: if entry.endswith("-b"): - f.write("\n") + f.write( + "\n" % (entry, + pageSpreadProperty("right")) + ) pageside = "right" elif entry.endswith("-c"): - f.write("\n") + f.write( + "\n" % (entry, + pageSpreadProperty("left")) + ) pageside = "right" else: - f.write("\n") + f.write( + "\n" % (entry, + pageSpreadProperty(pageside)) + ) if pageside == "right": pageside = "left" else: pageside = "right" else: if entry.endswith("-b"): - f.write("\n") + f.write( + "\n" % (entry, + pageSpreadProperty("left")) + ) pageside = "left" elif entry.endswith("-c"): - f.write("\n") + f.write( + "\n" % (entry, + pageSpreadProperty("right")) + ) pageside = "left" else: - f.write("\n") + f.write( + "\n" % (entry, + pageSpreadProperty(pageside)) + ) if pageside == "right": pageside = "left" else: @@ -982,6 +1013,7 @@ def makeParser(): def checkOptions(options): options.panelview = True options.iskindle = False + options.isKobo = False options.bordersColor = None options.keep_epub = False if options.format == 'EPUB-200MB': @@ -993,6 +1025,7 @@ def checkOptions(options): options.keep_epub = True options.format = 'MOBI' options.kfx = False + options.supportSyntheticSpread = False if options.format == 'Auto': if options.profile in ['K1', 'K2', 'K34', 'K578', 'KPW', 'KPW5', 'KV', 'KO', 'K11', 'KS']: options.format = 'MOBI' @@ -1003,6 +1036,12 @@ def checkOptions(options): options.format = 'CBZ' if options.profile in ['K1', 'K2', 'K34', 'K578', 'KPW', 'KPW5', 'KV', 'KO', 'K11', 'KS']: options.iskindle = True + elif options.profile in ['OTHER', 'KoMT', 'KoG', 'KoGHD', 'KoA', 'KoAHD', 'KoAH2O', 'KoAO', 'KoF']: + options.isKobo = True + # Other Kobo devices probably support synthetic spreads as well, but + # they haven't been tested. + if options.profile in ['KoF']: + options.supportSyntheticSpread = True if options.white_borders: options.bordersColor = 'white' if options.black_borders: