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'
|
||||
|
||||
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):
|
||||
|
||||
@ -13,15 +42,88 @@ class InputProfile(Plugin):
|
||||
can_be_disabled = False
|
||||
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'
|
||||
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 '
|
||||
'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):
|
||||
@ -37,23 +139,86 @@ class OutputProfile(Plugin):
|
||||
'if you want to produce a document intended to be read at a '
|
||||
'computer or on a range of devices.')
|
||||
|
||||
epub_flow_size = sys.maxint
|
||||
screen_size = None
|
||||
remove_special_chars = None
|
||||
remove_object_tags = False
|
||||
# ADE dies an agonizing, long drawn out death if HTML files have more
|
||||
# bytes than this.
|
||||
flow_size = sys.maxint
|
||||
# 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'
|
||||
short_name = 'sony'
|
||||
description = _('This profile is intended for the SONY PRS line. '
|
||||
'The 500/505/700 etc.')
|
||||
|
||||
epub_flow_size = 270000
|
||||
screen_size = (590, 765)
|
||||
remove_special_chars = re.compile(u'[\u200b\u00ad]')
|
||||
remove_object_tags = True
|
||||
flow_size = 270000
|
||||
screen_size = (600, 775)
|
||||
dpi = 168.451
|
||||
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