mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Merge from trunk
This commit is contained in:
commit
815fd891d3
@ -194,7 +194,7 @@ class ANDROID(USBMS):
|
|||||||
'GENERIC-', 'ZTE', 'MID', 'QUALCOMM', 'PANDIGIT', 'HYSTON',
|
'GENERIC-', 'ZTE', 'MID', 'QUALCOMM', 'PANDIGIT', 'HYSTON',
|
||||||
'VIZIO', 'GOOGLE', 'FREESCAL', 'KOBO_INC', 'LENOVO', 'ROCKCHIP',
|
'VIZIO', 'GOOGLE', 'FREESCAL', 'KOBO_INC', 'LENOVO', 'ROCKCHIP',
|
||||||
'POCKET', 'ONDA_MID', 'ZENITHIN', 'INGENIC', 'PMID701C', 'PD',
|
'POCKET', 'ONDA_MID', 'ZENITHIN', 'INGENIC', 'PMID701C', 'PD',
|
||||||
'PMP5097C', 'MASS', 'NOVO7']
|
'PMP5097C', 'MASS', 'NOVO7', 'ZEKI']
|
||||||
WINDOWS_MAIN_MEM = ['ANDROID_PHONE', 'A855', 'A853', 'INC.NEXUS_ONE',
|
WINDOWS_MAIN_MEM = ['ANDROID_PHONE', 'A855', 'A853', 'INC.NEXUS_ONE',
|
||||||
'__UMS_COMPOSITE', '_MB200', 'MASS_STORAGE', '_-_CARD', 'SGH-I897',
|
'__UMS_COMPOSITE', '_MB200', 'MASS_STORAGE', '_-_CARD', 'SGH-I897',
|
||||||
'GT-I9000', 'FILE-STOR_GADGET', 'SGH-T959_CARD', 'SGH-T959', 'SAMSUNG_ANDROID',
|
'GT-I9000', 'FILE-STOR_GADGET', 'SGH-T959_CARD', 'SGH-T959', 'SAMSUNG_ANDROID',
|
||||||
@ -212,7 +212,7 @@ class ANDROID(USBMS):
|
|||||||
'KTABLET_PC', 'INGENIC', 'GT-I9001_CARD', 'USB_2.0_DRIVER',
|
'KTABLET_PC', 'INGENIC', 'GT-I9001_CARD', 'USB_2.0_DRIVER',
|
||||||
'GT-S5830L_CARD', 'UNIVERSE', 'XT875', 'PRO', '.KOBO_VOX',
|
'GT-S5830L_CARD', 'UNIVERSE', 'XT875', 'PRO', '.KOBO_VOX',
|
||||||
'THINKPAD_TABLET', 'SGH-T989', 'YP-G70', 'STORAGE_DEVICE',
|
'THINKPAD_TABLET', 'SGH-T989', 'YP-G70', 'STORAGE_DEVICE',
|
||||||
'ADVANCED', 'SGH-I727']
|
'ADVANCED', 'SGH-I727', 'USB_FLASH_DRIVER']
|
||||||
WINDOWS_CARD_A_MEM = ['ANDROID_PHONE', 'GT-I9000_CARD', 'SGH-I897',
|
WINDOWS_CARD_A_MEM = ['ANDROID_PHONE', 'GT-I9000_CARD', 'SGH-I897',
|
||||||
'FILE-STOR_GADGET', 'SGH-T959_CARD', 'SGH-T959', 'SAMSUNG_ANDROID', 'GT-P1000_CARD',
|
'FILE-STOR_GADGET', 'SGH-T959_CARD', 'SGH-T959', 'SAMSUNG_ANDROID', 'GT-P1000_CARD',
|
||||||
'A70S', 'A101IT', '7', 'INCREDIBLE', 'A7EB', 'SGH-T849_CARD',
|
'A70S', 'A101IT', '7', 'INCREDIBLE', 'A7EB', 'SGH-T849_CARD',
|
||||||
@ -221,7 +221,8 @@ class ANDROID(USBMS):
|
|||||||
'A1-07___C0541A4F', 'XT912', 'MB855', 'XT910', 'BOOK_A10_CARD',
|
'A1-07___C0541A4F', 'XT912', 'MB855', 'XT910', 'BOOK_A10_CARD',
|
||||||
'USB_2.0_DRIVER', 'I9100T', 'P999DW_SD_CARD', 'KTABLET_PC',
|
'USB_2.0_DRIVER', 'I9100T', 'P999DW_SD_CARD', 'KTABLET_PC',
|
||||||
'FILE-CD_GADGET', 'GT-I9001_CARD', 'USB_2.0_DRIVER', 'XT875',
|
'FILE-CD_GADGET', 'GT-I9001_CARD', 'USB_2.0_DRIVER', 'XT875',
|
||||||
'UMS_COMPOSITE', 'PRO', '.KOBO_VOX', 'SGH-T989_CARD', 'SGH-I727']
|
'UMS_COMPOSITE', 'PRO', '.KOBO_VOX', 'SGH-T989_CARD', 'SGH-I727',
|
||||||
|
'USB_FLASH_DRIVER']
|
||||||
|
|
||||||
OSX_MAIN_MEM = 'Android Device Main Memory'
|
OSX_MAIN_MEM = 'Android Device Main Memory'
|
||||||
|
|
||||||
|
@ -326,7 +326,7 @@ OptionRecommendation(name='page_breaks_before',
|
|||||||
recommended_value="//*[name()='h1' or name()='h2']",
|
recommended_value="//*[name()='h1' or name()='h2']",
|
||||||
level=OptionRecommendation.LOW,
|
level=OptionRecommendation.LOW,
|
||||||
help=_('An XPath expression. Page breaks are inserted '
|
help=_('An XPath expression. Page breaks are inserted '
|
||||||
'before the specified elements.')
|
'before the specified elements. To disable use the expression: /')
|
||||||
),
|
),
|
||||||
|
|
||||||
OptionRecommendation(name='remove_fake_margins',
|
OptionRecommendation(name='remove_fake_margins',
|
||||||
|
@ -82,10 +82,17 @@ class DetectStructure(object):
|
|||||||
|
|
||||||
def detect_chapters(self):
|
def detect_chapters(self):
|
||||||
self.detected_chapters = []
|
self.detected_chapters = []
|
||||||
|
|
||||||
|
def find_matches(expr, doc):
|
||||||
|
try:
|
||||||
|
return XPath(expr)(doc)
|
||||||
|
except:
|
||||||
|
self.log.warn('Invalid chapter expression, ignoring: %s'%expr)
|
||||||
|
return []
|
||||||
|
|
||||||
if self.opts.chapter:
|
if self.opts.chapter:
|
||||||
chapter_xpath = XPath(self.opts.chapter)
|
|
||||||
for item in self.oeb.spine:
|
for item in self.oeb.spine:
|
||||||
for x in chapter_xpath(item.data):
|
for x in find_matches(self.opts.chapter, item.data):
|
||||||
self.detected_chapters.append((item, x))
|
self.detected_chapters.append((item, x))
|
||||||
|
|
||||||
chapter_mark = self.opts.chapter_mark
|
chapter_mark = self.opts.chapter_mark
|
||||||
@ -164,11 +171,19 @@ class DetectStructure(object):
|
|||||||
added = OrderedDict()
|
added = OrderedDict()
|
||||||
added2 = OrderedDict()
|
added2 = OrderedDict()
|
||||||
counter = 1
|
counter = 1
|
||||||
|
|
||||||
|
def find_matches(expr, doc):
|
||||||
|
try:
|
||||||
|
return XPath(expr)(doc)
|
||||||
|
except:
|
||||||
|
self.log.warn('Invalid ToC expression, ignoring: %s'%expr)
|
||||||
|
return []
|
||||||
|
|
||||||
for document in self.oeb.spine:
|
for document in self.oeb.spine:
|
||||||
previous_level1 = list(added.itervalues())[-1] if added else None
|
previous_level1 = list(added.itervalues())[-1] if added else None
|
||||||
previous_level2 = list(added2.itervalues())[-1] if added2 else None
|
previous_level2 = list(added2.itervalues())[-1] if added2 else None
|
||||||
|
|
||||||
for elem in XPath(self.opts.level1_toc)(document.data):
|
for elem in find_matches(self.opts.level1_toc, document.data):
|
||||||
text, _href = self.elem_to_link(document, elem, counter)
|
text, _href = self.elem_to_link(document, elem, counter)
|
||||||
counter += 1
|
counter += 1
|
||||||
if text:
|
if text:
|
||||||
@ -178,7 +193,7 @@ class DetectStructure(object):
|
|||||||
#node.add(_('Top'), _href)
|
#node.add(_('Top'), _href)
|
||||||
|
|
||||||
if self.opts.level2_toc is not None and added:
|
if self.opts.level2_toc is not None and added:
|
||||||
for elem in XPath(self.opts.level2_toc)(document.data):
|
for elem in find_matches(self.opts.level2_toc, document.data):
|
||||||
level1 = None
|
level1 = None
|
||||||
for item in document.data.iterdescendants():
|
for item in document.data.iterdescendants():
|
||||||
if item in added:
|
if item in added:
|
||||||
@ -196,7 +211,8 @@ class DetectStructure(object):
|
|||||||
break
|
break
|
||||||
|
|
||||||
if self.opts.level3_toc is not None and added2:
|
if self.opts.level3_toc is not None and added2:
|
||||||
for elem in XPath(self.opts.level3_toc)(document.data):
|
for elem in find_matches(self.opts.level3_toc,
|
||||||
|
document.data):
|
||||||
level2 = None
|
level2 = None
|
||||||
for item in document.data.iterdescendants():
|
for item in document.data.iterdescendants():
|
||||||
if item in added2:
|
if item in added2:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user