mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Conversion pipeline: Create input and output profiles
This commit is contained in:
parent
44799e05ef
commit
1cd42cffb3
@ -4,7 +4,36 @@ __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
|||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import sys, re
|
import sys, re
|
||||||
from calibre.customize import Plugin
|
from itertools import izip
|
||||||
|
|
||||||
|
from calibre.customize import Plugin as _Plugin
|
||||||
|
|
||||||
|
FONT_SIZES = [('xx-small', 1),
|
||||||
|
('x-small', None),
|
||||||
|
('small', 2),
|
||||||
|
('medium', 3),
|
||||||
|
('large', 4),
|
||||||
|
('x-large', 5),
|
||||||
|
('xx-large', 6),
|
||||||
|
(None, 7)]
|
||||||
|
|
||||||
|
|
||||||
|
class Plugin(_Plugin):
|
||||||
|
|
||||||
|
fbase = 12
|
||||||
|
fsizes = [5, 7, 9, 12, 13.5, 17, 20, 22, 24]
|
||||||
|
screen_size = (800, 600)
|
||||||
|
dpi = 100
|
||||||
|
|
||||||
|
def initialize(self):
|
||||||
|
self.width, self.height = self.screen_size
|
||||||
|
fsizes = list(self.fsizes)
|
||||||
|
self.fsizes = []
|
||||||
|
for (name, num), size in izip(FONT_SIZES, fsizes):
|
||||||
|
self.fsizes.append((name, num, float(size)))
|
||||||
|
self.fnames = dict((name, sz) for name, _, sz in self.fsizes if name)
|
||||||
|
self.fnums = dict((num, sz) for _, num, sz in self.fsizes if num)
|
||||||
|
|
||||||
|
|
||||||
class InputProfile(Plugin):
|
class InputProfile(Plugin):
|
||||||
|
|
||||||
@ -13,15 +42,88 @@ class InputProfile(Plugin):
|
|||||||
can_be_disabled = False
|
can_be_disabled = False
|
||||||
type = _('Input profile')
|
type = _('Input profile')
|
||||||
|
|
||||||
# TODO: Add some real information to this profile. All other profiles must
|
|
||||||
# inherit from this profile and override as needed
|
|
||||||
|
|
||||||
name = 'Default Input Profile'
|
name = 'Default Input Profile'
|
||||||
short_name = 'default' # Used in the CLI so dont use spaces etc. in it
|
short_name = 'default' # Used in the CLI so dont use spaces etc. in it
|
||||||
description = _('This profile tries to provide sane defaults and is useful '
|
description = _('This profile tries to provide sane defaults and is useful '
|
||||||
'if you know nothing about the input document.')
|
'if you know nothing about the input document.')
|
||||||
|
|
||||||
input_profiles = [InputProfile]
|
|
||||||
|
class SonyReaderInput(InputProfile):
|
||||||
|
|
||||||
|
name = 'Sony Reader'
|
||||||
|
short_name = 'sony'
|
||||||
|
description = _('This profile is intended for the SONY PRS line. '
|
||||||
|
'The 500/505/700 etc.')
|
||||||
|
|
||||||
|
screen_size = (584, 754)
|
||||||
|
dpi = 168.451
|
||||||
|
fbase = 12
|
||||||
|
fsizes = [7.5, 9, 10, 12, 15.5, 20, 22, 24]
|
||||||
|
|
||||||
|
|
||||||
|
class MSReaderInput(InputProfile):
|
||||||
|
|
||||||
|
name = 'Microsoft Reader'
|
||||||
|
short_name = 'msreader'
|
||||||
|
description = _('This profile is intended for the Microsoft Reader.')
|
||||||
|
|
||||||
|
screen_size = (480, 652)
|
||||||
|
dpi = 96
|
||||||
|
fbase = 13
|
||||||
|
fsizes = [10, 11, 13, 16, 18, 20, 22, 26]
|
||||||
|
|
||||||
|
class MobipocketInput(InputProfile):
|
||||||
|
|
||||||
|
name = 'Mobipocket Books'
|
||||||
|
short_name = 'mobipocket'
|
||||||
|
description = _('This profile is intended for the Mobipocket books.')
|
||||||
|
|
||||||
|
# Unfortunately MOBI books are not narrowly targeted, so this information is
|
||||||
|
# quite likely to be spurious
|
||||||
|
screen_size = (600, 800)
|
||||||
|
dpi = 96
|
||||||
|
fbase = 18
|
||||||
|
fsizes = [14, 14, 16, 18, 20, 22, 24, 26]
|
||||||
|
|
||||||
|
class HanlinV3Input(InputProfile):
|
||||||
|
|
||||||
|
name = 'Hanlin V3'
|
||||||
|
short_name = 'hanlinv3'
|
||||||
|
description = _('This profile is intended for the Hanlin V3 and its clones.')
|
||||||
|
|
||||||
|
# Screen size is a best guess
|
||||||
|
screen_size = (584, 754)
|
||||||
|
dpi = 168.451
|
||||||
|
fbase = 16
|
||||||
|
fsizes = [12, 12, 14, 16, 18, 20, 22, 24]
|
||||||
|
|
||||||
|
class CybookG3Input(InputProfile):
|
||||||
|
|
||||||
|
name = 'Cybook G3'
|
||||||
|
short_name = 'cybookg3'
|
||||||
|
description = _('This profile is intended for the Cybook G3.')
|
||||||
|
|
||||||
|
# Screen size is a best guess
|
||||||
|
screen_size = (600, 800)
|
||||||
|
dpi = 168.451
|
||||||
|
fbase = 16
|
||||||
|
fsizes = [12, 12, 14, 16, 18, 20, 22, 24]
|
||||||
|
|
||||||
|
class KindleInput(InputProfile):
|
||||||
|
|
||||||
|
name = 'Kindle'
|
||||||
|
short_name = 'kindle'
|
||||||
|
description = _('This profile is intended for the Amazon Kindle.')
|
||||||
|
|
||||||
|
# Screen size is a best guess
|
||||||
|
screen_size = (525, 640)
|
||||||
|
dpi = 168.451
|
||||||
|
fbase = 16
|
||||||
|
fsizes = [12, 12, 14, 16, 18, 20, 22, 24]
|
||||||
|
|
||||||
|
|
||||||
|
input_profiles = [InputProfile, SonyReaderInput, MSReaderInput,
|
||||||
|
MobipocketInput, HanlinV3Input, CybookG3Input, KindleInput]
|
||||||
|
|
||||||
|
|
||||||
class OutputProfile(Plugin):
|
class OutputProfile(Plugin):
|
||||||
@ -37,23 +139,86 @@ class OutputProfile(Plugin):
|
|||||||
'if you want to produce a document intended to be read at a '
|
'if you want to produce a document intended to be read at a '
|
||||||
'computer or on a range of devices.')
|
'computer or on a range of devices.')
|
||||||
|
|
||||||
epub_flow_size = sys.maxint
|
# ADE dies an agonizing, long drawn out death if HTML files have more
|
||||||
screen_size = None
|
# bytes than this.
|
||||||
remove_special_chars = None
|
flow_size = sys.maxint
|
||||||
remove_object_tags = False
|
# ADE runs screaming when it sees these characters
|
||||||
|
remove_special_chars = re.compile(u'[\u200b\u00ad]')
|
||||||
|
# ADE falls to the ground in a dead faint when it sees an <object>
|
||||||
|
remove_object_tags = True
|
||||||
|
|
||||||
class SonyReader(OutputProfile):
|
class SonyReaderOutput(OutputProfile):
|
||||||
|
|
||||||
name = 'Sony Reader'
|
name = 'Sony Reader'
|
||||||
short_name = 'sony'
|
short_name = 'sony'
|
||||||
description = _('This profile is intended for the SONY PRS line. '
|
description = _('This profile is intended for the SONY PRS line. '
|
||||||
'The 500/505/700 etc.')
|
'The 500/505/700 etc.')
|
||||||
|
|
||||||
epub_flow_size = 270000
|
flow_size = 270000
|
||||||
screen_size = (590, 765)
|
screen_size = (600, 775)
|
||||||
remove_special_chars = re.compile(u'[\u200b\u00ad]')
|
dpi = 168.451
|
||||||
remove_object_tags = True
|
fbase = 12
|
||||||
|
fsizes = [7.5, 9, 10, 12, 15.5, 20, 22, 24]
|
||||||
|
|
||||||
|
class MSReaderOutput(OutputProfile):
|
||||||
|
|
||||||
|
name = 'Microsoft Reader'
|
||||||
|
short_name = 'msreader'
|
||||||
|
description = _('This profile is intended for the Microsoft Reader.')
|
||||||
|
|
||||||
output_profiles = [OutputProfile, SonyReader]
|
screen_size = (480, 652)
|
||||||
|
dpi = 96
|
||||||
|
fbase = 13
|
||||||
|
fsizes = [10, 11, 13, 16, 18, 20, 22, 26]
|
||||||
|
|
||||||
|
class MobipocketOutput(OutputProfile):
|
||||||
|
|
||||||
|
name = 'Mobipocket Books'
|
||||||
|
short_name = 'mobipocket'
|
||||||
|
description = _('This profile is intended for the Mobipocket books.')
|
||||||
|
|
||||||
|
# Unfortunately MOBI books are not narrowly targeted, so this information is
|
||||||
|
# quite likely to be spurious
|
||||||
|
screen_size = (600, 800)
|
||||||
|
dpi = 96
|
||||||
|
fbase = 18
|
||||||
|
fsizes = [14, 14, 16, 18, 20, 22, 24, 26]
|
||||||
|
|
||||||
|
class HanlinV3Output(OutputProfile):
|
||||||
|
|
||||||
|
name = 'Hanlin V3'
|
||||||
|
short_name = 'hanlinv3'
|
||||||
|
description = _('This profile is intended for the Hanlin V3 and its clones.')
|
||||||
|
|
||||||
|
# Screen size is a best guess
|
||||||
|
screen_size = (584, 754)
|
||||||
|
dpi = 168.451
|
||||||
|
fbase = 16
|
||||||
|
fsizes = [12, 12, 14, 16, 18, 20, 22, 24]
|
||||||
|
|
||||||
|
class CybookG3Output(OutputProfile):
|
||||||
|
|
||||||
|
name = 'Cybook G3'
|
||||||
|
short_name = 'cybookg3'
|
||||||
|
description = _('This profile is intended for the Cybook G3.')
|
||||||
|
|
||||||
|
# Screen size is a best guess
|
||||||
|
screen_size = (600, 800)
|
||||||
|
dpi = 168.451
|
||||||
|
fbase = 16
|
||||||
|
fsizes = [12, 12, 14, 16, 18, 20, 22, 24]
|
||||||
|
|
||||||
|
class KindleOutput(OutputProfile):
|
||||||
|
|
||||||
|
name = 'Kindle'
|
||||||
|
short_name = 'kindle'
|
||||||
|
description = _('This profile is intended for the Amazon Kindle.')
|
||||||
|
|
||||||
|
# Screen size is a best guess
|
||||||
|
screen_size = (525, 640)
|
||||||
|
dpi = 168.451
|
||||||
|
fbase = 16
|
||||||
|
fsizes = [12, 12, 14, 16, 18, 20, 22, 24]
|
||||||
|
|
||||||
|
output_profiles = [OutputProfile, SonyReaderOutput, MSReaderOutput,
|
||||||
|
MobipocketOutput, HanlinV3Output, CybookG3Output, KindleOutput]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user