mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Sync to trunk
This commit is contained in:
commit
f2403514e4
@ -93,6 +93,8 @@ def freeze():
|
|||||||
'dateutil', 'dns', 'email']
|
'dateutil', 'dns', 'email']
|
||||||
|
|
||||||
includes += ['calibre.web.feeds.recipes.'+r for r in recipe_modules]
|
includes += ['calibre.web.feeds.recipes.'+r for r in recipe_modules]
|
||||||
|
includes += [x.split('/')[-1].rpartition('.')[0] for x in \
|
||||||
|
glob.glob('src/calibre/gui2/convert/*.py')]
|
||||||
|
|
||||||
LOADER = '/tmp/loader.py'
|
LOADER = '/tmp/loader.py'
|
||||||
open(LOADER, 'wb').write('# This script is never actually used.\nimport sys')
|
open(LOADER, 'wb').write('# This script is never actually used.\nimport sys')
|
||||||
|
@ -254,8 +254,6 @@ _check_symlinks_prescript()
|
|||||||
os.link(os.path.expanduser('~/pdftohtml/pdftohtml'), os.path.join(frameworks_dir, 'pdftohtml'))
|
os.link(os.path.expanduser('~/pdftohtml/pdftohtml'), os.path.join(frameworks_dir, 'pdftohtml'))
|
||||||
os.link(os.path.expanduser('~/pdftohtml/libpoppler.4.dylib'),
|
os.link(os.path.expanduser('~/pdftohtml/libpoppler.4.dylib'),
|
||||||
os.path.join(frameworks_dir, 'libpoppler.4.dylib'))
|
os.path.join(frameworks_dir, 'libpoppler.4.dylib'))
|
||||||
print 'Adding plugins'
|
|
||||||
module_dir = os.path.join(resource_dir, 'lib', 'python2.6', 'lib-dynload')
|
|
||||||
print 'Adding fontconfig'
|
print 'Adding fontconfig'
|
||||||
for f in glob.glob(os.path.expanduser('~/fontconfig-bundled/*')):
|
for f in glob.glob(os.path.expanduser('~/fontconfig-bundled/*')):
|
||||||
dest = os.path.join(frameworks_dir, os.path.basename(f))
|
dest = os.path.join(frameworks_dir, os.path.basename(f))
|
||||||
@ -347,7 +345,7 @@ def main():
|
|||||||
'PyQt4.QtSvg', 'PyQt4.QtWebKit', 'commands',
|
'PyQt4.QtSvg', 'PyQt4.QtWebKit', 'commands',
|
||||||
'mechanize', 'ClientForm', 'usbobserver',
|
'mechanize', 'ClientForm', 'usbobserver',
|
||||||
'genshi', 'calibre.web.feeds.recipes.*',
|
'genshi', 'calibre.web.feeds.recipes.*',
|
||||||
'calibre.ebooks.lrf.any.*', 'calibre.ebooks.lrf.feeds.*',
|
'calibre.gui2.convert.*',
|
||||||
'keyword', 'codeop', 'pydoc', 'readline',
|
'keyword', 'codeop', 'pydoc', 'readline',
|
||||||
'BeautifulSoup', 'calibre.ebooks.lrf.fonts.prs500.*',
|
'BeautifulSoup', 'calibre.ebooks.lrf.fonts.prs500.*',
|
||||||
'dateutil', 'email.iterators',
|
'dateutil', 'email.iterators',
|
||||||
|
@ -50,6 +50,12 @@ DefaultDirectoryLocation
|
|||||||
DefaultLanguage
|
DefaultLanguage
|
||||||
English
|
English
|
||||||
|
|
||||||
|
DefaultToSystemLanguage
|
||||||
|
Yes
|
||||||
|
|
||||||
|
EnableResponseFiles
|
||||||
|
Yes
|
||||||
|
|
||||||
Ext
|
Ext
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -138,7 +144,7 @@ ProjectID
|
|||||||
DA98A0C6-9102-73EC-2516-B147E972D3F7
|
DA98A0C6-9102-73EC-2516-B147E972D3F7
|
||||||
|
|
||||||
ProjectVersion
|
ProjectVersion
|
||||||
1.2.7.0
|
1.2.13.1
|
||||||
|
|
||||||
SaveOnlyToplevelDirs
|
SaveOnlyToplevelDirs
|
||||||
No
|
No
|
||||||
@ -206,85 +212,130 @@ test
|
|||||||
{Testing Switch Yes No {} {run uninstaller without uninstalling any files}}
|
{Testing Switch Yes No {} {run uninstaller without uninstalling any files}}
|
||||||
|
|
||||||
}
|
}
|
||||||
FileGroup ::BEF8D398-58BA-1F66-39D6-D4A63D5BEEF9 -setup Install -active Yes -platforms {AIX-ppc FreeBSD-4-x86 FreeBSD-x86 HPUX-hppa Linux-x86 Solaris-sparc Windows TarArchive ZipArchive} -name {Program Files} -parent FileGroups
|
FileGroup ::BEF8D398-58BA-1F66-39D6-D4A63D5BEEF9 -setup Install -active Yes -platforms {AIX-ppc FreeBSD-4-x86 FreeBSD-x86 HPUX-hppa Linux-x86 Solaris-sparc Windows TarArchive ZipArchive FreeBSD-5-x86 FreeBSD-6-x86 FreeBSD-7-x86 Linux-x86_64 Solaris-x86} -name {Program Files} -parent FileGroups
|
||||||
File ::8E5D85A4-7608-47A1-CF7C-309060D5FF40 -filemethod {Always overwrite files} -type dir -directory <%InstallDir%> -name /home/kovid/work/calibre/build/py2exe -parent BEF8D398-58BA-1F66-39D6-D4A63D5BEEF9
|
File ::8E5D85A4-7608-47A1-CF7C-309060D5FF40 -filemethod {Always overwrite files} -type dir -directory <%InstallDir%> -name /home/kovid/work/calibre/build/py2exe -parent BEF8D398-58BA-1F66-39D6-D4A63D5BEEF9
|
||||||
File ::FC870EE7-667B-481F-113B-B4504DFCCFA5 -type dir -name bin -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::FC870EE7-667B-481F-113B-B4504DFCCFA5 -type dir -name bin -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::377C588B-B324-CA09-ED49-4DB5F82A15ED -type dir -name etc -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::377C588B-B324-CA09-ED49-4DB5F82A15ED -type dir -name etc -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::55DE4B9F-0881-FF51-E2BA-EC72B5D3425C -type dir -name fonts -parent 377C588B-B324-CA09-ED49-4DB5F82A15ED
|
||||||
|
File ::A27B68D9-43A6-B994-3091-E829AFBA340D -type dir -name conf.d -parent 55DE4B9F-0881-FF51-E2BA-EC72B5D3425C
|
||||||
|
File ::974ADD48-88E5-BC7A-1963-928A245F133A -type dir -name conf.avail -parent 55DE4B9F-0881-FF51-E2BA-EC72B5D3425C
|
||||||
|
File ::5E5273D8-3423-8DC8-83C4-BE000069A803 -name fonts.dtd -parent 55DE4B9F-0881-FF51-E2BA-EC72B5D3425C
|
||||||
|
File ::32D7DBE0-E0B1-5BDD-66C5-2A13D8BC8F90 -name fonts.conf -parent 55DE4B9F-0881-FF51-E2BA-EC72B5D3425C
|
||||||
File ::B95D03D4-EA59-F00E-59E1-BA05758879DA -type dir -name imageformats -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::B95D03D4-EA59-F00E-59E1-BA05758879DA -type dir -name imageformats -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::A624029D-AE0F-49A5-4DAC-7720CDCAB271 -name qmng4.dll -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::C53E8AB9-30FC-730C-3DA3-851C9B4838A1 -name qmng4.exp -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::36ADF34E-46AD-663F-6C3A-D45E971CB722 -name qmng4.lib -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::A1EEB0BC-ADA2-86C8-631B-E88FE03328EA -name qico4.dll -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::516069B4-FC33-F267-8C4B-95475515A853 -name qico4.exp -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::129AE39B-995D-9BE2-3FB4-69F129C4E86E -name qico4.lib -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::113DBCCE-B6CA-2742-35DB-6FB53EE75919 -name qico4.dll.manifest -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::CC7FFFF8-5DA6-3CCB-540C-A24B528B3DD6 -name qjpeg4.dll -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::9C5B362E-D06B-D92F-6B39-F9F2B5BE9E17 -name qjpeg4.exp -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::0FF52CC9-3920-A82E-0657-5B2A31CD1457 -name qjpeg4.lib -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::9DD8CFAE-2E69-CACA-B451-16683C0F168D -name qjpeg4.dll.manifest -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::5E16CADD-7269-4247-B35C-046D5B67E298 -name qtiff4.dll.manifest -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::633981BF-9A0C-589D-25D3-50866757C3B8 -name qmng4.dll.manifest -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::DB93E311-ECDF-21E0-8C5D-0B2EDAE6C424 -name qgif4.dll.manifest -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::48E4C188-4ABF-4CCD-C410-7936B4898DDF -name qsvg4.dll.manifest -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::BFF82F4E-0F3C-8F6E-381C-CCF91E220226 -name qgif4.dll -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::3FAEE4BA-C005-E833-8BE4-EC8EF7BDAF1B -name qgif4.exp -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::4AB682B9-C811-C68A-0100-5B32E0127093 -name qgif4.lib -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::6EBEF5E4-1FA0-B14A-736F-DD1068874D19 -name qtiff4.dll -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::8B2F7092-5B97-9DA8-90CD-46D191B49C28 -name qtiff4.exp -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::9D014D0C-E6F4-A713-7CE9-CD71AFCEBC61 -name qtiff4.lib -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::5EA8BF5D-76A7-023E-CF87-ED92DBCA527D -name qsvg4.dll -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::A5298D0E-A211-EB2E-6892-7045D04B264E -name qsvg4.exp -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
|
File ::8A138EC0-728A-A421-A723-DE84F8DDE3EA -name qsvg4.lib -parent B95D03D4-EA59-F00E-59E1-BA05758879DA
|
||||||
File ::5EF561A9-E70B-8F01-A852-C36D28D1FA14 -type dir -name codecs -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::5EF561A9-E70B-8F01-A852-C36D28D1FA14 -type dir -name codecs -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::D60D391E-2AA1-900B-DB5A-348EFC529375 -name qkrcodecs4.dll -parent 5EF561A9-E70B-8F01-A852-C36D28D1FA14
|
||||||
|
File ::4B320138-FB4B-DBD2-81BC-9D1413CF7ED6 -name qkrcodecs4.exp -parent 5EF561A9-E70B-8F01-A852-C36D28D1FA14
|
||||||
|
File ::38BE74BB-3CFA-7131-0467-BB1C4AE76512 -name qkrcodecs4.lib -parent 5EF561A9-E70B-8F01-A852-C36D28D1FA14
|
||||||
|
File ::49F00491-8056-0B75-7FC5-87761A3C6161 -name qcncodecs4.dll -parent 5EF561A9-E70B-8F01-A852-C36D28D1FA14
|
||||||
|
File ::CE567CBA-06A4-6D8E-E389-560CAC84E168 -name qcncodecs4.exp -parent 5EF561A9-E70B-8F01-A852-C36D28D1FA14
|
||||||
|
File ::2546B812-DBD7-3EDF-5CB2-B5F6B62639AB -name qcncodecs4.lib -parent 5EF561A9-E70B-8F01-A852-C36D28D1FA14
|
||||||
|
File ::12148DF6-6953-C6D3-6CDA-0ACED6F7D7FA -name qjpcodecs4.dll.manifest -parent 5EF561A9-E70B-8F01-A852-C36D28D1FA14
|
||||||
|
File ::E4C54E9A-D1E4-DCC9-C43E-FC3A5FD7F8C7 -name qcncodecs4.dll.manifest -parent 5EF561A9-E70B-8F01-A852-C36D28D1FA14
|
||||||
|
File ::1A86AC76-87FD-5EA9-0F23-2F21CA22F0CE -name qjpcodecs4.dll -parent 5EF561A9-E70B-8F01-A852-C36D28D1FA14
|
||||||
|
File ::FEB0CF93-169B-D996-2363-3AE057322EA6 -name qjpcodecs4.exp -parent 5EF561A9-E70B-8F01-A852-C36D28D1FA14
|
||||||
|
File ::0C8E6656-F734-B2B5-F0F7-6F5BDB5C6885 -name qjpcodecs4.lib -parent 5EF561A9-E70B-8F01-A852-C36D28D1FA14
|
||||||
|
File ::F95B9748-FC4E-4AF3-C037-8493AD7BE0DA -name qtwcodecs4.dll.manifest -parent 5EF561A9-E70B-8F01-A852-C36D28D1FA14
|
||||||
|
File ::2C3B2B03-3911-E7A8-035A-33E25A510F27 -name qtwcodecs4.dll -parent 5EF561A9-E70B-8F01-A852-C36D28D1FA14
|
||||||
|
File ::BD1A8C7A-D485-9272-4B9A-05EE511A59CF -name qtwcodecs4.exp -parent 5EF561A9-E70B-8F01-A852-C36D28D1FA14
|
||||||
|
File ::7EC5EFFB-7AA7-AEB1-46AD-4234DEE6A377 -name qtwcodecs4.lib -parent 5EF561A9-E70B-8F01-A852-C36D28D1FA14
|
||||||
|
File ::CEE6F2FE-EEBA-8973-AAA5-DCAAAD279B72 -name qkrcodecs4.dll.manifest -parent 5EF561A9-E70B-8F01-A852-C36D28D1FA14
|
||||||
File ::48EA1D8C-F4C8-3D34-229D-B501057802F3 -type dir -name driver -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::48EA1D8C-F4C8-3D34-229D-B501057802F3 -type dir -name driver -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::596DAFDA-23D2-26B3-1535-3D4BF36C9AD9 -name libusb0.dll -parent 48EA1D8C-F4C8-3D34-229D-B501057802F3
|
||||||
|
File ::E6B997AB-A35F-1142-14AB-6B9513D98C40 -name libusb0.sys -parent 48EA1D8C-F4C8-3D34-229D-B501057802F3
|
||||||
|
File ::20557983-9D6C-4AB5-D2DF-BE418BEE6BA3 -name libusb0_x64.dll -parent 48EA1D8C-F4C8-3D34-229D-B501057802F3
|
||||||
|
File ::CFCED8FB-FE60-07EC-690D-4C47C2C786F6 -name libusb0_x64.sys -parent 48EA1D8C-F4C8-3D34-229D-B501057802F3
|
||||||
|
File ::6D2B03D1-8449-045C-298A-9E65C168F64A -name prs500_x64.cat -parent 48EA1D8C-F4C8-3D34-229D-B501057802F3
|
||||||
|
File ::8147A9D4-D17C-55EB-CAA5-CC0C04EDC0D2 -name prs500.cat -parent 48EA1D8C-F4C8-3D34-229D-B501057802F3
|
||||||
|
File ::1085BEED-C76A-5FF4-209A-E03CFB697462 -name prs500.inf -parent 48EA1D8C-F4C8-3D34-229D-B501057802F3
|
||||||
File ::0AC00D67-8452-CABB-6843-FE6A464E9AE9 -type dir -name plugins -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::0AC00D67-8452-CABB-6843-FE6A464E9AE9 -type dir -name plugins -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::540FEFD3-9B1B-00E6-B8A5-EA8EB959428E -name podofo.pyd -parent 0AC00D67-8452-CABB-6843-FE6A464E9AE9
|
||||||
|
File ::87BCFAF5-FAEB-219C-BA28-1DFD1B2A7743 -name podofo.pyd.manifest -parent 0AC00D67-8452-CABB-6843-FE6A464E9AE9
|
||||||
|
File ::0C77BC18-CE53-35EF-A667-C25B81C43E64 -name pictureflow.pyd -parent 0AC00D67-8452-CABB-6843-FE6A464E9AE9
|
||||||
|
File ::9F15B633-412B-51ED-2B7D-4EB0A0847740 -name winutil.pyd.manifest -parent 0AC00D67-8452-CABB-6843-FE6A464E9AE9
|
||||||
|
File ::9E3D908E-B119-30AE-391D-D16CA6BEE7AC -name msdes.pyd.manifest -parent 0AC00D67-8452-CABB-6843-FE6A464E9AE9
|
||||||
|
File ::F1D1D581-9194-D12F-6139-F920EEC1B14E -name winutil.pyd -parent 0AC00D67-8452-CABB-6843-FE6A464E9AE9
|
||||||
|
File ::A94E4D31-5F8C-A363-AE61-A8F2E3A7B756 -name lzx.pyd -parent 0AC00D67-8452-CABB-6843-FE6A464E9AE9
|
||||||
|
File ::34C430AE-BC1B-8352-1713-50C89C176C77 -name lzx.pyd.manifest -parent 0AC00D67-8452-CABB-6843-FE6A464E9AE9
|
||||||
|
File ::2C88788E-B9FB-729D-442B-600ED97096A0 -name cPalmdoc.pyd -parent 0AC00D67-8452-CABB-6843-FE6A464E9AE9
|
||||||
|
File ::8A15A76F-105D-3B6C-6E54-A01F8EA16CE3 -name cPalmdoc.pyd.manifest -parent 0AC00D67-8452-CABB-6843-FE6A464E9AE9
|
||||||
|
File ::26503DDE-8C5F-102F-B689-C6A17B2D6C93 -name msdes.pyd -parent 0AC00D67-8452-CABB-6843-FE6A464E9AE9
|
||||||
File ::01034EB7-C79C-42B9-6FF0-E06C72EF2623 -type dir -name iconengines -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::01034EB7-C79C-42B9-6FF0-E06C72EF2623 -type dir -name iconengines -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::8ADB07A0-6B9E-8F53-34DF-2035C7C343F1 -name qsvgicon4.dll -parent 01034EB7-C79C-42B9-6FF0-E06C72EF2623
|
||||||
|
File ::41F512E3-9F39-68C6-BB7F-58F572755D35 -name qsvgicon4.exp -parent 01034EB7-C79C-42B9-6FF0-E06C72EF2623
|
||||||
|
File ::7EE2621C-0EAE-B516-505A-6CE11A8F8951 -name qsvgicon4.lib -parent 01034EB7-C79C-42B9-6FF0-E06C72EF2623
|
||||||
|
File ::99A56CA8-60A5-CC90-1F6F-0A393722F9D2 -name qsvgicon4.dll.manifest -parent 01034EB7-C79C-42B9-6FF0-E06C72EF2623
|
||||||
File ::7FC7557D-E1AF-082B-7286-24939CD5EE76 -name IM_MOD_RL_sfw_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::7FC7557D-E1AF-082B-7286-24939CD5EE76 -name IM_MOD_RL_sfw_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::EF383C5E-5939-F73E-5F9C-26009B469ADA -name feeds2mobi.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::71A18B69-E38B-AB9F-3B81-BECFD4454D38 -name PyQt4.QtNetwork.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::71A18B69-E38B-AB9F-3B81-BECFD4454D38 -name PyQt4.QtNetwork.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::E1BF1A4F-2942-73DB-1770-1ECB02CA9799 -name comic2lrf.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::EEC00227-DED5-B9BF-A36D-24239AEDE932 -name rtf-meta.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::F6C99732-1835-1C2A-02F9-F2BB631BEC81 -name dde.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::F6C99732-1835-1C2A-02F9-F2BB631BEC81 -name dde.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::3334C5D8-8513-326D-A96C-C86D1C325EBB -name pdf2lrf.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::20079501-EBD5-FEFD-8E49-2CF6A63E83E0 -name IM_MOD_RL_rle_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::20079501-EBD5-FEFD-8E49-2CF6A63E83E0 -name IM_MOD_RL_rle_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::D98A0557-D988-24A1-9F32-67F3E9A5A123 -name opf-meta.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::470243F6-C8E4-DB45-678F-6A314747097E -name sqlite3.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::470243F6-C8E4-DB45-678F-6A314747097E -name sqlite3.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::4AA221F6-EBE3-997E-AECF-DD8E03265385 -name html2epub.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::0213D597-D9C7-F155-EE44-1BD9E19520E3 -name IM_MOD_RL_tiff_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::0213D597-D9C7-F155-EE44-1BD9E19520E3 -name IM_MOD_RL_tiff_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::F782E3D0-C2CA-481C-70C4-2257FEF52EAF -name CORE_RL_libxml_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::F782E3D0-C2CA-481C-70C4-2257FEF52EAF -name CORE_RL_libxml_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::414CB1DC-A13E-CE54-60A9-157381D4DDC4 -name oeb2lit.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::9306B7C1-11DE-7B54-1AFB-67AFF82B8013 -name _sqlite3.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::9306B7C1-11DE-7B54-1AFB-67AFF82B8013 -name _sqlite3.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::4D6B4FC9-F900-E0AD-5258-8918CBFEB9AD -name lrs2lrf.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::4D6B4FC9-F900-E0AD-5258-8918CBFEB9AD -name lrs2lrf.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::05329209-3CCE-90C0-FFEA-BECEBA6A6AB4 -name lit2lrf.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::A2AF7001-960E-F5EA-AA09-025E35FD09BC -name IM_MOD_RL_sun_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::A2AF7001-960E-F5EA-AA09-025E35FD09BC -name IM_MOD_RL_sun_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::C472ABCF-2160-C218-41CA-0DDE625AAEC6 -name IM_MOD_RL_msl_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::C472ABCF-2160-C218-41CA-0DDE625AAEC6 -name IM_MOD_RL_msl_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::DC7D8C3A-81C2-7FC5-4AC0-8CDC4069FC97 -name IM_MOD_RL_jp2_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::DC7D8C3A-81C2-7FC5-4AC0-8CDC4069FC97 -name IM_MOD_RL_jp2_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::555AF3FA-9A08-CCFF-4028-3F8891A6D212 -name CORE_RL_ttf_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::555AF3FA-9A08-CCFF-4028-3F8891A6D212 -name CORE_RL_ttf_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::92F06FE6-C2C5-FF23-0A9B-884AB21D8221 -name PIL._imagingft.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::92F06FE6-C2C5-FF23-0A9B-884AB21D8221 -name PIL._imagingft.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::DA2ABF54-3BC2-87E4-BA86-24C8B2915AC0 -name txt2lrf.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::C3B86C9F-1A59-9573-DCA2-A2747E7C3B4F -name odt2oeb.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::ED8542BE-DDE4-72B2-B05A-A09D00818994 -name web2disk.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::ED8542BE-DDE4-72B2-B05A-A09D00818994 -name web2disk.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::A2154B84-F146-FD50-1DA9-1DB374A5439E -name IM_MOD_RL_exr_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::A2154B84-F146-FD50-1DA9-1DB374A5439E -name IM_MOD_RL_exr_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::A442B5C3-724F-6542-816D-30C3D3EDD1E3 -name CORE_RL_Magick++_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::A442B5C3-724F-6542-816D-30C3D3EDD1E3 -name CORE_RL_Magick++_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::A18318B3-88EF-11EB-4E14-B02CBD4F0E5E -name calibre-parallel.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::A18318B3-88EF-11EB-4E14-B02CBD4F0E5E -name calibre-parallel.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::E26C9A86-F12B-7F1E-F2E8-8A42C0436321 -name IM_MOD_RL_dib_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::E26C9A86-F12B-7F1E-F2E8-8A42C0436321 -name IM_MOD_RL_dib_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::2E94EBE2-F588-C484-009C-48C0DA7D1932 -name IM_MOD_RL_preview_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::2E94EBE2-F588-C484-009C-48C0DA7D1932 -name IM_MOD_RL_preview_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::9D75046B-57DC-872C-39F1-4C6E44337227 -name html2lrf.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::7294280B-8324-B1A0-A054-92F330874F48 -name numpy.fft.fftpack_lite.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::7294280B-8324-B1A0-A054-92F330874F48 -name numpy.fft.fftpack_lite.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::5322B2EC-82CF-9446-964E-38CB7C688C1B -name oeb2mobi.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::74DC3F8D-5C56-8FB8-F59A-0C4C5ECB70A0 -name CORE_RL_magick_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::74DC3F8D-5C56-8FB8-F59A-0C4C5ECB70A0 -name CORE_RL_magick_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::1638722F-A861-F762-1514-5649B2AD08FF -name IM_MOD_RL_svg_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::1638722F-A861-F762-1514-5649B2AD08FF -name IM_MOD_RL_svg_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::D345F98D-EDB4-53D0-95A6-82968E47E080 -name IM_MOD_RL_mpeg_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::D345F98D-EDB4-53D0-95A6-82968E47E080 -name IM_MOD_RL_mpeg_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::91CA5392-5F4E-12F7-C670-939B1500616B -name ebook-viewer.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::91CA5392-5F4E-12F7-C670-939B1500616B -name ebook-viewer.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::4706580D-D101-13EA-DED0-2593D7FBADE8 -name LICENSE -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::4706580D-D101-13EA-DED0-2593D7FBADE8 -name LICENSE -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::63F996B0-07D9-EA5B-2176-F02D9851EAE4 -name feeds2disk.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::89CAC9B2-DA65-DBF2-6295-757553882213 -name numpy.core.umath.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::89CAC9B2-DA65-DBF2-6295-757553882213 -name numpy.core.umath.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::2F90282D-B59F-B6BA-090B-45858AF7F3B2 -name IM_MOD_RL_clipboard_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::2F90282D-B59F-B6BA-090B-45858AF7F3B2 -name IM_MOD_RL_clipboard_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::B512D139-B295-D7C3-F0B4-43775849CF58 -name numpy.core._sort.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::B512D139-B295-D7C3-F0B4-43775849CF58 -name numpy.core._sort.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::A999B024-1024-E709-07C1-22BA67A850BB -name feeds2mobi.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::A2C063AC-2F12-9260-501A-0E8BD0B8A932 -name calibre.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::A2C063AC-2F12-9260-501A-0E8BD0B8A932 -name calibre.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::439B6D05-7DE6-061D-4BCC-3F04F4FA2FA2 -name IM_MOD_RL_png_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::439B6D05-7DE6-061D-4BCC-3F04F4FA2FA2 -name IM_MOD_RL_png_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::BA464D11-BBCE-DEDA-C354-0C7BE60FAA05 -name IM_MOD_RL_braille_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::BA464D11-BBCE-DEDA-C354-0C7BE60FAA05 -name IM_MOD_RL_braille_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::8F9FF823-AF6D-A288-8AE6-7D74F55DCE29 -name CORE_RL_bzlib_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::8F9FF823-AF6D-A288-8AE6-7D74F55DCE29 -name CORE_RL_bzlib_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::ABAEA510-B003-29CB-6ADE-F6E1826DD501 -name web2lrf.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::57A3F5D5-BFC8-CB38-5A57-548EE0DB033B -name QtNetwork4.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::57A3F5D5-BFC8-CB38-5A57-548EE0DB033B -name QtNetwork4.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::4DB7E8DE-905A-822A-AF14-17BD5ACEF915 -name IM_MOD_RL_wmf_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::4DB7E8DE-905A-822A-AF14-17BD5ACEF915 -name IM_MOD_RL_wmf_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::559057ED-0FEA-62A1-68C2-023116B5636C -name win32ui.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::559057ED-0FEA-62A1-68C2-023116B5636C -name win32ui.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::83F3AC3F-A485-B791-D4F0-6E67135FF19D -name IM_MOD_RL_txt_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::83F3AC3F-A485-B791-D4F0-6E67135FF19D -name IM_MOD_RL_txt_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::FABA7768-743B-08F7-B871-ED5E9082DF38 -name win32gui.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::FABA7768-743B-08F7-B871-ED5E9082DF38 -name win32gui.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::A8D10C63-CDFB-0809-CA84-4CB7A0A451FC -name fb2-meta.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::C49805D2-C0B8-01C4-DF6F-674D9C0BFD15 -name IM_MOD_RL_viff_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::C49805D2-C0B8-01C4-DF6F-674D9C0BFD15 -name IM_MOD_RL_viff_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::1B9F2F00-20A5-B207-5A80-8F75470286AD -name txt2lrf.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::826F1915-9F97-59DD-6637-3EEC0744A79C -name IM_MOD_RL_ps2_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::826F1915-9F97-59DD-6637-3EEC0744A79C -name IM_MOD_RL_ps2_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::519A6618-8A1F-93A5-93B4-6EEF5A4A3DE9 -name comic2pdf.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::A5F23791-BCDC-A997-4941-5D1F2F227E6D -name type.xml -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::A5F23791-BCDC-A997-4941-5D1F2F227E6D -name type.xml -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::0A1C107A-C0AA-3ED6-4F37-A6894386DCBE -name IM_MOD_RL_ps3_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::0A1C107A-C0AA-3ED6-4F37-A6894386DCBE -name IM_MOD_RL_ps3_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::EEBA64E7-6509-EBAF-3E23-1A203216F39A -name epub2lrf.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::2655F4FC-F682-46D8-B75C-6AF322323EF5 -name IM_MOD_RL_dot_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::2655F4FC-F682-46D8-B75C-6AF322323EF5 -name IM_MOD_RL_dot_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::176456BB-237C-9EBE-60E1-D8F78AAFFEC8 -name IM_MOD_RL_xwd_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::176456BB-237C-9EBE-60E1-D8F78AAFFEC8 -name IM_MOD_RL_xwd_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::9AE8498B-C89C-8B12-B8A1-35E1B6650469 -name lxml.objectify.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::9AE8498B-C89C-8B12-B8A1-35E1B6650469 -name lxml.objectify.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::EA37C1C2-57BB-4E7A-C004-0010D79142C2 -name IM_MOD_RL_fits_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::EA37C1C2-57BB-4E7A-C004-0010D79142C2 -name IM_MOD_RL_fits_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::05F5C10D-6988-F1F4-A486-86C96DB20302 -name pywintypes26.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::05F5C10D-6988-F1F4-A486-86C96DB20302 -name pywintypes26.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::0137A2B1-EB94-EB26-7295-0C7CD941A1DF -name IM_MOD_RL_histogram_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::0137A2B1-EB94-EB26-7295-0C7CD941A1DF -name IM_MOD_RL_histogram_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::7F199A1F-4FA4-2ABA-DED3-36ECF3C089CA -name epub2lrf.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::CF6398D8-2140-53CF-1DA6-421A82E92621 -name any2epub.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::8DFA6C69-360D-FA63-7FF9-860E3DB00B19 -name any2lrf.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::5BB7579D-9183-412C-81F8-B411B07C57B3 -name IM_MOD_RL_pnm_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::5BB7579D-9183-412C-81F8-B411B07C57B3 -name IM_MOD_RL_pnm_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::97B8BB83-7772-D87B-C8D1-5215E324AF2C -name library.ico -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::97B8BB83-7772-D87B-C8D1-5215E324AF2C -name library.ico -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::DF1361A2-2580-EFBF-65D2-156AD9919DE1 -name library.zip -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::DF1361A2-2580-EFBF-65D2-156AD9919DE1 -name library.zip -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
@ -293,7 +344,6 @@ File ::E658FBE0-5860-D041-12D3-76ADD18F804B -name servicemanager.pyd -parent 8E5
|
|||||||
File ::C98A6FC4-E341-7FD4-005C-DA2B384E11D8 -name win32api.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::C98A6FC4-E341-7FD4-005C-DA2B384E11D8 -name win32api.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::ADA36EEA-7DE1-447C-B1AB-A4908E65E2CD -name IM_MOD_RL_ipl_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::ADA36EEA-7DE1-447C-B1AB-A4908E65E2CD -name IM_MOD_RL_ipl_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::53C2EC15-850F-8F49-6425-C228FB6E6D0E -name libfontconfig-1.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::53C2EC15-850F-8F49-6425-C228FB6E6D0E -name libfontconfig-1.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::2BCD9281-2CBC-CF0D-0E12-2CE11F6ED758 -name comic2epub.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::EDE6F457-C83F-C5FA-9AF4-38FDFF17D929 -name PIL._imagingtk.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::EDE6F457-C83F-C5FA-9AF4-38FDFF17D929 -name PIL._imagingtk.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::09D0906E-3611-3DB7-32CF-A140585694A7 -name win32pdh.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::09D0906E-3611-3DB7-32CF-A140585694A7 -name win32pdh.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::4C84F0DC-7157-0C90-2062-180139B03E25 -name IM_MOD_RL_rgb_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::4C84F0DC-7157-0C90-2062-180139B03E25 -name IM_MOD_RL_rgb_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
@ -302,71 +352,48 @@ File ::69072379-7D16-B9F7-9F39-3E6403C48267 -name IM_MOD_RL_xbm_.dll -parent 8E5
|
|||||||
File ::FBD11D98-D1E7-5DD9-BF02-01CE92518859 -name IM_MOD_RL_otb_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::FBD11D98-D1E7-5DD9-BF02-01CE92518859 -name IM_MOD_RL_otb_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::8D0CFD32-2B7F-2BB3-8FA0-760A8DB24B52 -name win32service.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::8D0CFD32-2B7F-2BB3-8FA0-760A8DB24B52 -name win32service.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::C7F9AB12-AAF7-2954-3DB6-F2C84F41655B -name win32clipboard.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::C7F9AB12-AAF7-2954-3DB6-F2C84F41655B -name win32clipboard.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::76676624-68A9-D9D9-6EC7-40CF201520A4 -name pdfreflow.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::62CD997A-A5C7-D71B-A8F7-54567B36A071 -name msvcp90.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::62CD997A-A5C7-D71B-A8F7-54567B36A071 -name msvcp90.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::7D76BBE6-FD20-1290-4DBA-93D14FC45B81 -name sip.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::7D76BBE6-FD20-1290-4DBA-93D14FC45B81 -name sip.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::17D27485-128E-E247-14CE-9C3B6988E182 -name pdfreflow.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::BF2007D6-5AFE-6D04-4DB0-36A3644D988D -name pdf-meta.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::D4354621-69ED-DFCB-068A-0812DB1C09C3 -name IM_MOD_RL_avi_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::D4354621-69ED-DFCB-068A-0812DB1C09C3 -name IM_MOD_RL_avi_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::109FBE61-82CD-D5AB-AA9D-F9D52947DD22 -name rtf-meta.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::9BA20E46-014F-DA6A-DEF3-D78E2AEFDD47 -name odt-meta.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::EAFAC6D5-A7E8-1843-6D98-6663D899BB11 -name PyQt4.QtCore.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::EAFAC6D5-A7E8-1843-6D98-6663D899BB11 -name PyQt4.QtCore.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::155505A4-F0D8-05B2-10AD-149E178976A4 -name calibredb.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::155505A4-F0D8-05B2-10AD-149E178976A4 -name calibredb.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::39D5114E-1E70-5402-7E19-D86490678506 -name CORE_RL_lcms_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::39D5114E-1E70-5402-7E19-D86490678506 -name CORE_RL_lcms_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::75C3F298-B07C-DA98-38B2-40FFD39C32ED -name oeb2lit.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::388E0308-35A8-69B9-6837-383FD72E99E9 -name IM_MOD_RL_xpm_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::388E0308-35A8-69B9-6837-383FD72E99E9 -name IM_MOD_RL_xpm_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::3DB88954-1B0D-FDBC-CE29-EFCC01D4121E -name epub-meta.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::43C0DE14-A935-2139-6690-256C49C461C4 -name IM_MOD_RL_xcf_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::43C0DE14-A935-2139-6690-256C49C461C4 -name IM_MOD_RL_xcf_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::E185A35A-93DB-61BB-E7EE-2C2222FD4939 -name win32security.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::E185A35A-93DB-61BB-E7EE-2C2222FD4939 -name win32security.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::498CCC26-383A-87CA-30C0-626D52555B37 -name librarything.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::498CCC26-383A-87CA-30C0-626D52555B37 -name librarything.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::404A98F1-84FD-B6D0-B130-354EECD9253C -name IM_MOD_RL_emf_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::404A98F1-84FD-B6D0-B130-354EECD9253C -name IM_MOD_RL_emf_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::17034C34-403E-B405-99C1-F80B7F00E27C -name log.xml -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::17034C34-403E-B405-99C1-F80B7F00E27C -name log.xml -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::34E63A2C-65C5-0A84-ACF1-BD6A844D4579 -name pythoncom26.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::34E63A2C-65C5-0A84-ACF1-BD6A844D4579 -name pythoncom26.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::CE737360-1B73-DEC3-E511-3FAEC61F5292 -name epub-meta.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::2F20484B-53B8-B08E-B691-C5B2D49A9CB4 -name QtWebKit4.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::2F20484B-53B8-B08E-B691-C5B2D49A9CB4 -name QtWebKit4.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::8AF134C8-9189-3F9A-A081-9143FFD44C45 -name freetype6.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::8AF134C8-9189-3F9A-A081-9143FFD44C45 -name freetype6.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::E8A4442D-D0D3-31CD-997A-3CEB641CF5B7 -name IM_MOD_RL_mtv_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::E8A4442D-D0D3-31CD-997A-3CEB641CF5B7 -name IM_MOD_RL_mtv_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::56B7883F-B4FE-BE25-BCBA-4AF17CC84C93 -name fb22lrf.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::0CA87D0B-5A04-1439-AEE8-C97072D47BA7 -name CORE_RL_tiff_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::0CA87D0B-5A04-1439-AEE8-C97072D47BA7 -name CORE_RL_tiff_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::AC24F520-88D4-D1CF-5797-27C715CE8ACA -name pyexpat.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::AC24F520-88D4-D1CF-5797-27C715CE8ACA -name pyexpat.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::16848F38-71CD-55B8-4D96-1537F6773744 -name IM_MOD_RL_dps_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::16848F38-71CD-55B8-4D96-1537F6773744 -name IM_MOD_RL_dps_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::33A46CC5-BAC4-5863-C83D-303DCCA0CAA1 -name tk85.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::33A46CC5-BAC4-5863-C83D-303DCCA0CAA1 -name tk85.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::39E11D64-CC0C-E565-B3CC-882A5AA9F4AF -name html2oeb.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::81116DD3-1715-AA87-472F-544FC616EDAF -name IM_MOD_RL_dcm_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::81116DD3-1715-AA87-472F-544FC616EDAF -name IM_MOD_RL_dcm_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::A6EF7DB0-FC94-8794-1F15-394432CD283D -name imp-meta.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::335A4CFB-5C2D-44E4-C438-7018E8244C3D -name ebook-viewer.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::335A4CFB-5C2D-44E4-C438-7018E8244C3D -name ebook-viewer.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::62A16C3B-ED9C-5187-2807-58857DF3A990 -name calibre-debug.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::62A16C3B-ED9C-5187-2807-58857DF3A990 -name calibre-debug.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::2B8B1DCD-AA68-7612-80A5-C20CAAF06019 -name any2lit.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::55ECA7B7-279A-F51D-81C2-C8DC44CF0E22 -name select.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::55ECA7B7-279A-F51D-81C2-C8DC44CF0E22 -name select.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::A6AF5ECC-A981-4CBD-DBEE-303A9340C603 -name IM_MOD_RL_xps_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::A6AF5ECC-A981-4CBD-DBEE-303A9340C603 -name IM_MOD_RL_xps_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::5BCBF71F-18E7-5C52-E3F5-7D7F3028AD46 -name locale.xml -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::5BCBF71F-18E7-5C52-E3F5-7D7F3028AD46 -name locale.xml -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::2EDE0641-B5DF-220F-9FF3-486E5A081EFC -name rb-meta.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::5C9FA94C-B8B0-A94B-548D-1D24FDEA5770 -name CORE_RL_wand_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::5C9FA94C-B8B0-A94B-548D-1D24FDEA5770 -name CORE_RL_wand_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::E39E60BE-DE77-AB8C-42C6-5A7D7DC073E3 -name IM_MOD_RL_ttf_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::E39E60BE-DE77-AB8C-42C6-5A7D7DC073E3 -name IM_MOD_RL_ttf_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::8F1AF028-E819-4ED6-8B69-704183C3BD1D -name pdf-meta.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::D8F566FB-93DA-3128-5DBD-DF1068B3E3ED -name IM_MOD_RL_dpx_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::D8F566FB-93DA-3128-5DBD-DF1068B3E3ED -name IM_MOD_RL_dpx_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::FFE5F178-A1A4-3691-9C88-E5109D144437 -name IM_MOD_RL_jpeg_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::FFE5F178-A1A4-3691-9C88-E5109D144437 -name IM_MOD_RL_jpeg_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::0C9C97F6-5622-D4B5-E7CD-B4E5E9A8634C -name odt-meta.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::C05AD359-A7A5-9760-A4C8-310074353C89 -name feeds2lrf.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::03665A74-B895-EB3D-EBA0-2D2B6D26DDDA -name PIL._imagingmath.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::03665A74-B895-EB3D-EBA0-2D2B6D26DDDA -name PIL._imagingmath.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::81AED538-B97F-6272-5C6E-9B27D7285B35 -name IM_MOD_RL_fax_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::81AED538-B97F-6272-5C6E-9B27D7285B35 -name IM_MOD_RL_fax_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::BDCCAEC0-4847-B8D8-50B1-1B434B73A01F -name IM_MOD_RL_avs_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::BDCCAEC0-4847-B8D8-50B1-1B434B73A01F -name IM_MOD_RL_avs_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::727B9BD6-B55E-386E-D3B9-D99D0D9ADBB1 -name QtGui4.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::727B9BD6-B55E-386E-D3B9-D99D0D9ADBB1 -name QtGui4.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::1C7421A2-1BA7-7807-EB41-67578E0302E8 -name IM_MOD_RL_mvg_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::1C7421A2-1BA7-7807-EB41-67578E0302E8 -name IM_MOD_RL_mvg_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::C3466B70-23C3-31C9-3B4F-1B3B56E4D013 -name markdown-calibre.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::C3466B70-23C3-31C9-3B4F-1B3B56E4D013 -name markdown-calibre.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::A190F216-F7F7-A425-5F9D-F6B5C35D3A8F -name lrf-meta.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::6ED1C675-C4D5-6BFF-7C8A-9AB4BF39D00C -name _hashlib.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::6ED1C675-C4D5-6BFF-7C8A-9AB4BF39D00C -name _hashlib.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::21F7F333-3063-71E3-85F5-5C88584B15CC -name IM_MOD_RL_tga_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::21F7F333-3063-71E3-85F5-5C88584B15CC -name IM_MOD_RL_tga_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::738CADE4-6C0A-5155-A1BE-8F789C1D92E7 -name feeds2lrf.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::26741B21-C241-E100-8BB1-8B679BC3E662 -name configure.xml -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::26741B21-C241-E100-8BB1-8B679BC3E662 -name configure.xml -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::7D491E89-C6D3-1E6E-F4BD-8E55260FE33E -name libexpat.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::7D491E89-C6D3-1E6E-F4BD-8E55260FE33E -name libexpat.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::A4910EB3-0F1C-F6F0-CD2D-16A64BBAA92B -name calibre-fontconfig.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::8711327A-716D-B162-6AC6-2FB4AD071266 -name fb22lrf.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::476CB977-5155-D56F-26CA-EB243AEBBA99 -name unrar.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::476CB977-5155-D56F-26CA-EB243AEBBA99 -name unrar.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::2DA1CC8D-AF5C-3B03-2060-301DFE0356CC -name mobi2oeb.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::2E2A9EDA-5386-444E-8479-557386794552 -name IM_MOD_RL_uil_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::2E2A9EDA-5386-444E-8479-557386794552 -name IM_MOD_RL_uil_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::4530C4C8-BCFA-E461-5F72-0EF5B553C7F5 -name pdf2lrf.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::29582E09-00E0-B2F9-475C-8C6D2E4BF7E8 -name any2lrf.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::D3301E15-1B1A-E2AB-1B04-30A601B3FB44 -name IM_MOD_RL_cut_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::D3301E15-1B1A-E2AB-1B04-30A601B3FB44 -name IM_MOD_RL_cut_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::181B28B9-CF13-0C28-8380-B39DF6E7397D -name markdown-calibre.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::181B28B9-CF13-0C28-8380-B39DF6E7397D -name markdown-calibre.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::BC1D2D23-48ED-ECFF-2180-37C83554FDED -name Xext.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::BC1D2D23-48ED-ECFF-2180-37C83554FDED -name Xext.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
@ -379,7 +406,6 @@ File ::DE476170-B65E-B429-A23C-F822E4190FFC -name IM_MOD_RL_thumbnail_.dll -pare
|
|||||||
File ::31E46936-560D-1E88-8FC1-F8E590D2FD02 -name IM_MOD_RL_mpc_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::31E46936-560D-1E88-8FC1-F8E590D2FD02 -name IM_MOD_RL_mpc_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::0C04692E-5DCF-864F-6640-2FF5BF12BA91 -name IM_MOD_RL_cmyk_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::0C04692E-5DCF-864F-6640-2FF5BF12BA91 -name IM_MOD_RL_cmyk_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::A620FEB9-39FE-B102-6963-FEDA25EBF2F1 -name IM_MOD_RL_pcd_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::A620FEB9-39FE-B102-6963-FEDA25EBF2F1 -name IM_MOD_RL_pcd_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::0A4D27B3-157D-357A-6A86-32D8EB5B30D7 -name lit2lrf.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::80D1F9CA-D7DA-578E-CE25-4E0EE988D280 -name IM_MOD_RL_sct_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::80D1F9CA-D7DA-578E-CE25-4E0EE988D280 -name IM_MOD_RL_sct_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::C85307C1-5F11-01EF-2193-95F37CB49822 -name IM_MOD_RL_pict_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::C85307C1-5F11-01EF-2193-95F37CB49822 -name IM_MOD_RL_pict_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::3ECF2FC0-91AA-9573-42B3-4BD784FA5BC9 -name IM_MOD_RL_gradient_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::3ECF2FC0-91AA-9573-42B3-4BD784FA5BC9 -name IM_MOD_RL_gradient_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
@ -389,46 +415,29 @@ File ::CBF83E89-39E0-D7C3-7902-A4A0ADCDEF48 -name IM_MOD_RL_jbig_.dll -parent 8E
|
|||||||
File ::FFF32C7F-BB57-4BB3-A52D-4E4F3496B967 -name calibre-debug.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::FFF32C7F-BB57-4BB3-A52D-4E4F3496B967 -name calibre-debug.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::80A3C65A-553D-EA27-FAED-4F831578F4F8 -name magic.xml -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::80A3C65A-553D-EA27-FAED-4F831578F4F8 -name magic.xml -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::E2DF0DC3-3372-3CDF-5177-5B3F3BF84E66 -name IM_MOD_RL_mat_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::E2DF0DC3-3372-3CDF-5177-5B3F3BF84E66 -name IM_MOD_RL_mat_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::955B176E-5F6A-FFFA-9387-893E38C23E33 -name prs500.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::4D938678-59AF-F5F6-697B-E3A5BE76B43B -name QtXml4.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::4D938678-59AF-F5F6-697B-E3A5BE76B43B -name QtXml4.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::FCAEFF6A-1E96-FA23-C8AC-0F5F3297B14A -name rtf2lrf.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::0A5A70A8-39EC-B733-E807-9C358E5EA7A3 -name IM_MOD_RL_meta_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::0A5A70A8-39EC-B733-E807-9C358E5EA7A3 -name IM_MOD_RL_meta_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::E6419523-253A-3052-B9B4-0EA792EF4A64 -name pdftohtml.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::E6419523-253A-3052-B9B4-0EA792EF4A64 -name pdftohtml.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::EF062C24-09D8-1DC8-891A-F9563BBA57C2 -name IM_MOD_RL_gray_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::EF062C24-09D8-1DC8-891A-F9563BBA57C2 -name IM_MOD_RL_gray_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::E1D4796B-733B-F45A-2ECC-D498A1AC4EAD -name opf-meta.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::0E21E0B1-C2D4-3F6D-E788-9EEB821128C3 -name web2disk.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::0E21E0B1-C2D4-3F6D-E788-9EEB821128C3 -name web2disk.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::12DE2886-5926-F8AD-77C4-EAAC5DD9413C -name rtf2lrf.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::E96D95C6-2D53-A67B-C704-06BD213BBC86 -name mobi-meta.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::A4D76085-EFC7-A237-7BB7-AA8A33BFB849 -name html2epub.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::27127583-9DC6-4397-3E86-052A515ED051 -name lrfviewer.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::27127583-9DC6-4397-3E86-052A515ED051 -name lrfviewer.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::7229472A-2A5A-2685-0223-2DF2CED0C9D4 -name comic2epub.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::396B4F78-FB45-C0B2-ACB3-97769CF5CD5D -name msvcr90.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::396B4F78-FB45-C0B2-ACB3-97769CF5CD5D -name msvcr90.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::1DE767EE-4891-4E54-422D-67A4DFF8C3B5 -name lrfviewer.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::1DE767EE-4891-4E54-422D-67A4DFF8C3B5 -name lrfviewer.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::AFFEC28A-615C-E3E6-0026-CCE2594A6D25 -name calibre-server.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::AFFEC28A-615C-E3E6-0026-CCE2594A6D25 -name calibre-server.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::2C64F86B-9366-B52D-F7B2-5BBD51F6982A -name IM_MOD_RL_pwp_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::2C64F86B-9366-B52D-F7B2-5BBD51F6982A -name IM_MOD_RL_pwp_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::187D965E-40CE-18AB-5684-18C31A7FD8D4 -name any2epub.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::F4B2EF9C-EB18-B865-6E99-75CFB9B60D87 -name IM_MOD_RL_dds_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::F4B2EF9C-EB18-B865-6E99-75CFB9B60D87 -name IM_MOD_RL_dds_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::9D0CC46C-E254-7F11-4B64-A6E8E16CF6FB -name mobi2lrf.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::72769321-EF4D-C796-5E76-3D5807772233 -name any2mobi.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::38770D87-6CA9-9E3E-FBA1-A8CCFCD88FB5 -name IM_MOD_RL_fpx_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::38770D87-6CA9-9E3E-FBA1-A8CCFCD88FB5 -name IM_MOD_RL_fpx_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::A31CA43B-4456-BB26-A8EE-73C4C4B1F6FC -name pdftrim.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::BE2D7BC3-D294-AF3F-65E7-3B372DEFDE36 -name PIL._imaging.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::BE2D7BC3-D294-AF3F-65E7-3B372DEFDE36 -name PIL._imaging.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::200B9AEC-809F-75B7-DC12-A51BFC2A6F93 -name PyQt4.QtSvg.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::200B9AEC-809F-75B7-DC12-A51BFC2A6F93 -name PyQt4.QtSvg.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::3A424677-A66A-CAA0-4FD2-4FE8086DBBA6 -name comic2mobi.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::52132A31-D3AE-C617-7568-BF2AF46B5D74 -name IM_MOD_RL_pcl_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::52132A31-D3AE-C617-7568-BF2AF46B5D74 -name IM_MOD_RL_pcl_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::F94472C3-C8D0-950F-5ED9-1611D1CE30E5 -name IM_MOD_RL_inline_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::F94472C3-C8D0-950F-5ED9-1611D1CE30E5 -name IM_MOD_RL_inline_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::794E99A2-79AB-BABB-97A1-9E3482002EA8 -name imp-meta.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::055ADB4B-20C5-E071-442F-4DA0A8D6F3C5 -name english.xml -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::055ADB4B-20C5-E071-442F-4DA0A8D6F3C5 -name english.xml -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::DE4F9AD0-3D79-865A-2DD9-4A4CB6886AFC -name lit-meta.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::B10B6B91-0C03-642D-90D8-37B607B164AD -name IM_MOD_RL_wpg_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::B10B6B91-0C03-642D-90D8-37B607B164AD -name IM_MOD_RL_wpg_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::BFBB144B-1794-8304-9772-F103A42F2CA4 -name IM_MOD_RL_pdb_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::BFBB144B-1794-8304-9772-F103A42F2CA4 -name IM_MOD_RL_pdb_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::EAED9280-84D7-9768-9F89-CEC61CE549DF -name mobi-meta.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::2FE2FF56-5CF5-15B7-2BD8-32100DF421DC -name _ssl.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::2FE2FF56-5CF5-15B7-2BD8-32100DF421DC -name _ssl.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::AE47BDA8-A1E5-2E84-28D7-DF8A84B18202 -name Microsoft.VC90.CRT.manifest -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::AE47BDA8-A1E5-2E84-28D7-DF8A84B18202 -name Microsoft.VC90.CRT.manifest -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::A6B1C213-DC68-B7C3-8EDE-806286829899 -name w9xpopen.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::A6B1C213-DC68-B7C3-8EDE-806286829899 -name w9xpopen.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::D3E03CFA-4AF0-93FB-E04B-B282926099E0 -name IM_MOD_RL_label_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::D3E03CFA-4AF0-93FB-E04B-B282926099E0 -name IM_MOD_RL_label_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::6F40E97B-430C-08FE-30CA-9E6622EE29EB -name feeds2epub.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::345C74B8-B45D-A370-27F3-78CEA9EAB1E1 -name prs500.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::662783C0-3826-9869-8EB8-326B363D3686 -name IM_MOD_RL_clip_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::662783C0-3826-9869-8EB8-326B363D3686 -name IM_MOD_RL_clip_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::442D92A7-97B1-74BC-F150-A9992A925356 -name numpy.core.multiarray.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::442D92A7-97B1-74BC-F150-A9992A925356 -name numpy.core.multiarray.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::54991918-D11F-EEAD-F7E3-0EE28F22249E -name IM_MOD_RL_pix_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::54991918-D11F-EEAD-F7E3-0EE28F22249E -name IM_MOD_RL_pix_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
@ -440,41 +449,26 @@ File ::5CB76241-5682-AE44-82D3-A6C8C66B88D6 -name IM_MOD_RL_bmp_.dll -parent 8E5
|
|||||||
File ::A843E4DA-8671-C4F7-BA61-998AA1D278C8 -name numpy.linalg.lapack_lite.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::A843E4DA-8671-C4F7-BA61-998AA1D278C8 -name numpy.linalg.lapack_lite.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::908EA762-5568-17BE-D77D-5DE5551895D0 -name IM_MOD_RL_raw_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::908EA762-5568-17BE-D77D-5DE5551895D0 -name IM_MOD_RL_raw_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::CC186E15-8751-A4AA-B2A7-D2E522F1F9DF -name lrf2lrs.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::CC186E15-8751-A4AA-B2A7-D2E522F1F9DF -name lrf2lrs.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::36135E27-30B6-A0E9-5423-FDDFBCBD4FA2 -name feeds2disk.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::A99CACD7-FE57-8A5E-BAA1-2D8B41925593 -name IM_MOD_RL_cip_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::A99CACD7-FE57-8A5E-BAA1-2D8B41925593 -name IM_MOD_RL_cip_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::782BE25A-B08E-D914-73F5-D92430823BE1 -name mobi2lrf.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::C4649D7A-9312-8984-E7CD-A0AB794C5A8E -name IM_MOD_RL_pdf_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::C4649D7A-9312-8984-E7CD-A0AB794C5A8E -name IM_MOD_RL_pdf_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::B50467F0-07D0-B634-EB43-C4B721798A84 -name analyze.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::B50467F0-07D0-B634-EB43-C4B721798A84 -name analyze.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::5531BA1B-8FDA-01B2-7DEE-6E9A116F7AB3 -name lrf-meta.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::47658BFB-7389-6866-359E-7517C18E768D -name IM_MOD_RL_mpr_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::47658BFB-7389-6866-359E-7517C18E768D -name IM_MOD_RL_mpr_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::673BD772-ACE7-1695-EAAC-EDD1A3EA0425 -name pdftrim.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::3F6735E8-D4E6-A6F9-C9F8-4219E6BBC827 -name CORE_RL_jpeg_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::3F6735E8-D4E6-A6F9-C9F8-4219E6BBC827 -name CORE_RL_jpeg_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::918BE500-1E97-90C0-3FB3-4056FE8D0E15 -name IM_MOD_RL_wbmp_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::918BE500-1E97-90C0-3FB3-4056FE8D0E15 -name IM_MOD_RL_wbmp_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::D59F7D54-24A7-774D-79EB-423A64E8CB21 -name IM_MOD_RL_stegano_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::D59F7D54-24A7-774D-79EB-423A64E8CB21 -name IM_MOD_RL_stegano_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::BB8BCD59-9EBA-3D9B-D802-79D9C384AADB -name fb2-meta.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::17F9A868-E52D-F961-9DB7-8AC69BA702EA -name CORE_RL_jp2_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::17F9A868-E52D-F961-9DB7-8AC69BA702EA -name CORE_RL_jp2_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::2ABAD420-B987-612E-C654-10BDB18DE638 -name html2oeb.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::81715796-F363-675F-998E-EEEF890009A2 -name calibre-fontconfig.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::5CA62422-C207-8C9C-79EB-45260E3DB37B -name odt2oeb.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::878003DC-9B1D-7C58-29F8-14D4565ABA64 -name IM_MOD_RL_yuv_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::878003DC-9B1D-7C58-29F8-14D4565ABA64 -name IM_MOD_RL_yuv_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::602B3244-CF6C-F934-E86C-8161800DB150 -name coder.xml -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::602B3244-CF6C-F934-E86C-8161800DB150 -name coder.xml -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::C23261F0-19EA-2216-A8D6-45FCC4ECBECE -name win32file.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::C23261F0-19EA-2216-A8D6-45FCC4ECBECE -name win32file.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::100103F9-C269-9B03-A133-7D046DCC5B30 -name IM_MOD_RL_null_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::100103F9-C269-9B03-A133-7D046DCC5B30 -name IM_MOD_RL_null_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::D0461A63-6890-CC43-23D1-48E938BF1E6D -name oeb2mobi.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::F3996144-7BA7-6038-FBB2-C210721BD20E -name lit-meta.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::9BEE3580-3674-F4AE-C1F3-B8623E0E4FC8 -name IM_MOD_RL_pattern_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::9BEE3580-3674-F4AE-C1F3-B8623E0E4FC8 -name IM_MOD_RL_pattern_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::AC4AE65E-78A4-28C0-1C1B-B99239D0A0EC -name rb-meta.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::C025F962-60EE-E4EF-6428-93755DD24F7D -name web2lrf.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::6A41C4F0-802D-9999-2F7D-AF86466BC420 -name feeds2epub.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::58F70BF7-491E-38D1-B836-1BBF340AA602 -name IM_MOD_RL_plasma_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::58F70BF7-491E-38D1-B836-1BBF340AA602 -name IM_MOD_RL_plasma_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::4B6C22CD-D139-FCAB-45FB-E9B7DADFFFED -name win32process.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::4B6C22CD-D139-FCAB-45FB-E9B7DADFFFED -name win32process.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::4F391A40-8D34-DFEA-2CEB-97A45FF5D234 -name lit2oeb.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::9698339D-6A1E-7CBC-A772-C9C4B10418BC -name librarything.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::9698339D-6A1E-7CBC-A772-C9C4B10418BC -name librarything.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::A3F1DC1C-BEF6-CB6B-F7AC-39F34F4DFABD -name IM_MOD_RL_pcx_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::A3F1DC1C-BEF6-CB6B-F7AC-39F34F4DFABD -name IM_MOD_RL_pcx_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::BE44B72D-2ED1-4983-F652-DE8814401946 -name CORE_RL_xlib_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::BE44B72D-2ED1-4983-F652-DE8814401946 -name CORE_RL_xlib_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::EC5B5C55-8347-0A8C-E9B5-28E45680E2F2 -name IM_MOD_RL_caption_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::EC5B5C55-8347-0A8C-E9B5-28E45680E2F2 -name IM_MOD_RL_caption_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::519BA66E-0CD3-00EA-0932-8D225C4C7EC8 -name calibredb.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::519BA66E-0CD3-00EA-0932-8D225C4C7EC8 -name calibredb.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::EF7BD102-32B6-EEAB-1C3F-AC4059EFEB1E -name comic2lrf.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::B7E13F99-C8D3-F2FB-1E5F-E8530A77BB71 -name IM_MOD_RL_url_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::B7E13F99-C8D3-F2FB-1E5F-E8530A77BB71 -name IM_MOD_RL_url_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::D0762C72-29E8-85CC-8550-6AC9E9AE39E9 -name _win32sysloader.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::D0762C72-29E8-85CC-8550-6AC9E9AE39E9 -name _win32sysloader.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::4921649D-06BD-A568-3879-BD2D94423FCB -name pdftohtml.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::4921649D-06BD-A568-3879-BD2D94423FCB -name pdftohtml.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
@ -499,10 +493,8 @@ File ::80EC4265-6F3B-7F74-F995-4FA85E87A877 -name IM_MOD_RL_vicar_.dll -parent 8
|
|||||||
File ::4CDC2DC5-5A3D-B773-A338-3E12E8C5BB9D -name IM_MOD_RL_psd_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::4CDC2DC5-5A3D-B773-A338-3E12E8C5BB9D -name IM_MOD_RL_psd_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::4AF4C7B2-8926-4581-2896-C6436460C81F -name IM_MOD_RL_uyvy_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::4AF4C7B2-8926-4581-2896-C6436460C81F -name IM_MOD_RL_uyvy_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::BF71D048-1137-4453-960C-9267CB790EAD -name IM_MOD_RL_art_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::BF71D048-1137-4453-960C-9267CB790EAD -name IM_MOD_RL_art_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::1BB40D21-9061-9B38-E653-26D808F7DEEA -name html2lrf.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::D9B6371C-332C-45FB-DAEE-1A247130F704 -name calibre-customize.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::D9B6371C-332C-45FB-DAEE-1A247130F704 -name calibre-customize.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::605E727F-DE13-27FE-75C0-34567C468B18 -name calibre-parallel.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::605E727F-DE13-27FE-75C0-34567C468B18 -name calibre-parallel.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::61F250E4-BAA0-5AF3-F597-E53ADEC19877 -name comic2pdf.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::37306B68-BABB-418C-A2CA-BAF4E439D3F1 -name viewer.ico -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::37306B68-BABB-418C-A2CA-BAF4E439D3F1 -name viewer.ico -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::6092C5A2-8740-2769-DB77-E0B664CD19EC -name PyQt4.QtWebKit.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::6092C5A2-8740-2769-DB77-E0B664CD19EC -name PyQt4.QtWebKit.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::73C82473-A35A-23B8-067C-AA3120D1CEE2 -name win32pipe.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::73C82473-A35A-23B8-067C-AA3120D1CEE2 -name win32pipe.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
@ -521,14 +513,9 @@ File ::29022F2B-4E69-8624-2B2C-98A40E12DC0A -name calibre-server.exe -parent 8E5
|
|||||||
File ::7592A236-4835-6A9D-56B1-78985267D9AD -name win32console.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::7592A236-4835-6A9D-56B1-78985267D9AD -name win32console.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::05F4A6BD-A7C3-5108-4708-1524EB0628D9 -name calibre.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::05F4A6BD-A7C3-5108-4708-1524EB0628D9 -name calibre.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::DEB8E703-365E-A7BB-2315-6306B2E5C978 -name win32evtlog.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::DEB8E703-365E-A7BB-2315-6306B2E5C978 -name win32evtlog.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::6C90CF50-4894-7672-BB1B-F7EE5EB631E3 -name lit2oeb.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::AB44B44C-E258-A5AB-9511-8D0FBB456EE8 -name IM_MOD_RL_gif_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::AB44B44C-E258-A5AB-9511-8D0FBB456EE8 -name IM_MOD_RL_gif_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::5D5F2AAD-6668-5E14-B84C-5D80C4CCC968 -name calibre-customize.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::5D5F2AAD-6668-5E14-B84C-5D80C4CCC968 -name calibre-customize.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::5A0DA3BB-2659-F5AA-A305-C4810FA28D89 -name mobi2oeb.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::9A0C05D0-26E3-72C5-1F04-76F76ABB180F -name numpy.core.scalarmath.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::9A0C05D0-26E3-72C5-1F04-76F76ABB180F -name numpy.core.scalarmath.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::42616D6D-2797-559B-7E96-2685599993DF -name any2lit.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::CB47F917-A45E-B7DE-645C-CA33F005D1BD -name any2mobi.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::16AF75CF-CA5E-F533-6C28-7CF167B1215C -name comic2mobi.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
|
||||||
File ::0888A744-B049-01E8-6AC8-ECC3EE2CEFE6 -name IM_MOD_RL_sgi_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::0888A744-B049-01E8-6AC8-ECC3EE2CEFE6 -name IM_MOD_RL_sgi_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::4AEEBBED-E749-15A9-E1F7-9F6BE2A2C3D0 -name _socket.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::4AEEBBED-E749-15A9-E1F7-9F6BE2A2C3D0 -name _socket.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::35B19292-0C50-4AEE-0A79-B2F3BC34B529 -name w9xpopen.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::35B19292-0C50-4AEE-0A79-B2F3BC34B529 -name w9xpopen.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
@ -544,8 +531,27 @@ File ::6F5D62F3-5E63-0753-364C-01CAAF1002E0 -name IM_MOD_RL_magick_.dll -parent
|
|||||||
File ::9FDAC308-5D4F-A865-A09A-9FBF48162A47 -name IM_MOD_RL_djvu_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::9FDAC308-5D4F-A865-A09A-9FBF48162A47 -name IM_MOD_RL_djvu_.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::5D748040-5973-EFF1-41FC-B424636C642E -name fetch-ebook-metadata.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::5D748040-5973-EFF1-41FC-B424636C642E -name fetch-ebook-metadata.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
File ::8B8655B8-3823-AA02-1CDA-02F5AD4677C0 -name fetch-ebook-metadata.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
File ::8B8655B8-3823-AA02-1CDA-02F5AD4677C0 -name fetch-ebook-metadata.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
Component ::F6829AB7-9F66-4CEE-CA0E-21F54C6D3609 -setup Install -active Yes -platforms {AIX-ppc FreeBSD-4-x86 FreeBSD-x86 HPUX-hppa Linux-x86 Solaris-sparc Windows} -name Main -parent Components
|
File ::8FC3D58A-F3FA-A2D1-711F-F4C3128620CE -name podofo.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
SetupType ::D9ADE41C-B744-690C-2CED-CF826BF03D2E -setup Install -active Yes -platforms {AIX-ppc FreeBSD-4-x86 FreeBSD-x86 HPUX-hppa Linux-x86 Solaris-sparc Windows} -name Typical -parent SetupTypes
|
File ::88034147-A376-B759-D48C-5F17A47E8CC3 -name ebook-meta.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::6E6F2A97-6614-F2A6-1751-95C099B909FD -name pdfmanipulate.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::AC456A9A-6653-5852-D1F7-B04E2C1AA481 -name isbndb.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::94580010-4CE4-8EC0-3834-9A2BCCB28C70 -name isbndb.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::BA087530-7CF4-5460-C9AA-DE4A796C9AEB -name pdfmanipulate.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::6AF80BFC-A813-074D-897A-856744A91949 -name ebook-convert.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::F8C59A30-9E90-0861-5604-95E7C69C3C80 -name ebook-convert.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::9389D511-7BF3-4D72-C78E-4F98DCE8F723 -name calibre-smtp.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::36E9023D-CCBC-9C59-CDA3-71A4D3203B25 -name ebook-meta.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::B757AEB8-74A7-1EA8-AC7C-C2B5F690B539 -name ebook-device.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::CD137106-C058-6035-57F3-420F9540386E -name _multiprocessing.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::7930C2FB-1C6F-3CFB-D8C6-BC677D96045F -name zlib1.dll -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::7FDFCBEF-0687-FDA5-F5B7-632966E87BD3 -name calibre-complete.exe -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::0450D3E0-07EB-F81F-DA39-038494E4C8FE -name win32com.shell.shell.pyd -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::8D7A36A6-4517-E995-E989-2E522E7A1438 -name calibre-smtp.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::9E4E5E8F-30C0-E631-9516-2AE01A5CA0E9 -name ebook-device.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::7BE6B538-70D5-A7EB-5F91-E14CE57B394B -name calibre-complete.exe.local -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
File ::F54BC3BB-5F21-3D81-043E-603D53754CFC -name pdftohtml.exe.manifest -parent 8E5D85A4-7608-47A1-CF7C-309060D5FF40
|
||||||
|
Component ::F6829AB7-9F66-4CEE-CA0E-21F54C6D3609 -setup Install -active Yes -platforms {AIX-ppc FreeBSD-4-x86 FreeBSD-x86 HPUX-hppa Linux-x86 Solaris-sparc Windows FreeBSD-5-x86 FreeBSD-6-x86 FreeBSD-7-x86 Linux-x86_64 Solaris-x86} -name Main -parent Components
|
||||||
|
SetupType ::D9ADE41C-B744-690C-2CED-CF826BF03D2E -setup Install -active Yes -platforms {AIX-ppc FreeBSD-4-x86 FreeBSD-x86 HPUX-hppa Linux-x86 Solaris-sparc Windows FreeBSD-5-x86 FreeBSD-6-x86 FreeBSD-7-x86 Linux-x86_64 Solaris-x86} -name Typical -parent SetupTypes
|
||||||
|
|
||||||
InstallComponent 3EA07B17-04D8-6508-B535-96CC7173B49A -setup Install -type pane -conditions D7F585DB-0DEC-A94E-DAB0-94D558D82764 -title {Welcome Screen} -component Welcome -command insert -active Yes -parent StandardInstall
|
InstallComponent 3EA07B17-04D8-6508-B535-96CC7173B49A -setup Install -type pane -conditions D7F585DB-0DEC-A94E-DAB0-94D558D82764 -title {Welcome Screen} -component Welcome -command insert -active Yes -parent StandardInstall
|
||||||
Condition D7F585DB-0DEC-A94E-DAB0-94D558D82764 -active Yes -parent 3EA07B17-04D8-6508-B535-96CC7173B49A -title {Execute Script Condition} -component ExecuteScriptCondition -TreeObject::id D7F585DB-0DEC-A94E-DAB0-94D558D82764
|
Condition D7F585DB-0DEC-A94E-DAB0-94D558D82764 -active Yes -parent 3EA07B17-04D8-6508-B535-96CC7173B49A -title {Execute Script Condition} -component ExecuteScriptCondition -TreeObject::id D7F585DB-0DEC-A94E-DAB0-94D558D82764
|
||||||
@ -1871,6 +1877,168 @@ No
|
|||||||
FreeBSD-4-x86,RootInstallDir
|
FreeBSD-4-x86,RootInstallDir
|
||||||
/usr/local/<%ShortAppName%>
|
/usr/local/<%ShortAppName%>
|
||||||
|
|
||||||
|
FreeBSD-5-x86,Active
|
||||||
|
No
|
||||||
|
|
||||||
|
FreeBSD-5-x86,BuildSeparateArchives
|
||||||
|
No
|
||||||
|
|
||||||
|
FreeBSD-5-x86,DefaultDirectoryPermission
|
||||||
|
0755
|
||||||
|
|
||||||
|
FreeBSD-5-x86,DefaultFilePermission
|
||||||
|
0755
|
||||||
|
|
||||||
|
FreeBSD-5-x86,Executable
|
||||||
|
<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%>
|
||||||
|
|
||||||
|
FreeBSD-5-x86,FallBackToConsole
|
||||||
|
Yes
|
||||||
|
|
||||||
|
FreeBSD-5-x86,InstallDir
|
||||||
|
<%Home%>/<%ShortAppName%>
|
||||||
|
|
||||||
|
FreeBSD-5-x86,InstallMode
|
||||||
|
Standard
|
||||||
|
|
||||||
|
FreeBSD-5-x86,InstallType
|
||||||
|
Typical
|
||||||
|
|
||||||
|
FreeBSD-5-x86,ProgramExecutable
|
||||||
|
{}
|
||||||
|
|
||||||
|
FreeBSD-5-x86,ProgramFolderAllUsers
|
||||||
|
No
|
||||||
|
|
||||||
|
FreeBSD-5-x86,ProgramFolderName
|
||||||
|
<%AppName%>
|
||||||
|
|
||||||
|
FreeBSD-5-x86,ProgramLicense
|
||||||
|
<%InstallDir%>/LICENSE.txt
|
||||||
|
|
||||||
|
FreeBSD-5-x86,ProgramName
|
||||||
|
{}
|
||||||
|
|
||||||
|
FreeBSD-5-x86,ProgramReadme
|
||||||
|
<%InstallDir%>/README.txt
|
||||||
|
|
||||||
|
FreeBSD-5-x86,PromptForRoot
|
||||||
|
Yes
|
||||||
|
|
||||||
|
FreeBSD-5-x86,RequireRoot
|
||||||
|
No
|
||||||
|
|
||||||
|
FreeBSD-5-x86,RootInstallDir
|
||||||
|
/usr/local/<%ShortAppName%>
|
||||||
|
|
||||||
|
FreeBSD-6-x86,Active
|
||||||
|
No
|
||||||
|
|
||||||
|
FreeBSD-6-x86,BuildSeparateArchives
|
||||||
|
No
|
||||||
|
|
||||||
|
FreeBSD-6-x86,DefaultDirectoryPermission
|
||||||
|
0755
|
||||||
|
|
||||||
|
FreeBSD-6-x86,DefaultFilePermission
|
||||||
|
0755
|
||||||
|
|
||||||
|
FreeBSD-6-x86,Executable
|
||||||
|
<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%>
|
||||||
|
|
||||||
|
FreeBSD-6-x86,FallBackToConsole
|
||||||
|
Yes
|
||||||
|
|
||||||
|
FreeBSD-6-x86,InstallDir
|
||||||
|
<%Home%>/<%ShortAppName%>
|
||||||
|
|
||||||
|
FreeBSD-6-x86,InstallMode
|
||||||
|
Standard
|
||||||
|
|
||||||
|
FreeBSD-6-x86,InstallType
|
||||||
|
Typical
|
||||||
|
|
||||||
|
FreeBSD-6-x86,ProgramExecutable
|
||||||
|
{}
|
||||||
|
|
||||||
|
FreeBSD-6-x86,ProgramFolderAllUsers
|
||||||
|
No
|
||||||
|
|
||||||
|
FreeBSD-6-x86,ProgramFolderName
|
||||||
|
<%AppName%>
|
||||||
|
|
||||||
|
FreeBSD-6-x86,ProgramLicense
|
||||||
|
<%InstallDir%>/LICENSE.txt
|
||||||
|
|
||||||
|
FreeBSD-6-x86,ProgramName
|
||||||
|
{}
|
||||||
|
|
||||||
|
FreeBSD-6-x86,ProgramReadme
|
||||||
|
<%InstallDir%>/README.txt
|
||||||
|
|
||||||
|
FreeBSD-6-x86,PromptForRoot
|
||||||
|
Yes
|
||||||
|
|
||||||
|
FreeBSD-6-x86,RequireRoot
|
||||||
|
No
|
||||||
|
|
||||||
|
FreeBSD-6-x86,RootInstallDir
|
||||||
|
/usr/local/<%ShortAppName%>
|
||||||
|
|
||||||
|
FreeBSD-7-x86,Active
|
||||||
|
No
|
||||||
|
|
||||||
|
FreeBSD-7-x86,BuildSeparateArchives
|
||||||
|
No
|
||||||
|
|
||||||
|
FreeBSD-7-x86,DefaultDirectoryPermission
|
||||||
|
0755
|
||||||
|
|
||||||
|
FreeBSD-7-x86,DefaultFilePermission
|
||||||
|
0755
|
||||||
|
|
||||||
|
FreeBSD-7-x86,Executable
|
||||||
|
<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%>
|
||||||
|
|
||||||
|
FreeBSD-7-x86,FallBackToConsole
|
||||||
|
Yes
|
||||||
|
|
||||||
|
FreeBSD-7-x86,InstallDir
|
||||||
|
<%Home%>/<%ShortAppName%>
|
||||||
|
|
||||||
|
FreeBSD-7-x86,InstallMode
|
||||||
|
Standard
|
||||||
|
|
||||||
|
FreeBSD-7-x86,InstallType
|
||||||
|
Typical
|
||||||
|
|
||||||
|
FreeBSD-7-x86,ProgramExecutable
|
||||||
|
{}
|
||||||
|
|
||||||
|
FreeBSD-7-x86,ProgramFolderAllUsers
|
||||||
|
No
|
||||||
|
|
||||||
|
FreeBSD-7-x86,ProgramFolderName
|
||||||
|
<%AppName%>
|
||||||
|
|
||||||
|
FreeBSD-7-x86,ProgramLicense
|
||||||
|
<%InstallDir%>/LICENSE.txt
|
||||||
|
|
||||||
|
FreeBSD-7-x86,ProgramName
|
||||||
|
{}
|
||||||
|
|
||||||
|
FreeBSD-7-x86,ProgramReadme
|
||||||
|
<%InstallDir%>/README.txt
|
||||||
|
|
||||||
|
FreeBSD-7-x86,PromptForRoot
|
||||||
|
Yes
|
||||||
|
|
||||||
|
FreeBSD-7-x86,RequireRoot
|
||||||
|
No
|
||||||
|
|
||||||
|
FreeBSD-7-x86,RootInstallDir
|
||||||
|
/usr/local/<%ShortAppName%>
|
||||||
|
|
||||||
FreeBSD-x86,Active
|
FreeBSD-x86,Active
|
||||||
No
|
No
|
||||||
|
|
||||||
@ -2033,6 +2201,60 @@ Yes
|
|||||||
Linux-x86,RootInstallDir
|
Linux-x86,RootInstallDir
|
||||||
/opt/<%ShortAppName%>
|
/opt/<%ShortAppName%>
|
||||||
|
|
||||||
|
Linux-x86_64,Active
|
||||||
|
No
|
||||||
|
|
||||||
|
Linux-x86_64,BuildSeparateArchives
|
||||||
|
No
|
||||||
|
|
||||||
|
Linux-x86_64,DefaultDirectoryPermission
|
||||||
|
0755
|
||||||
|
|
||||||
|
Linux-x86_64,DefaultFilePermission
|
||||||
|
0755
|
||||||
|
|
||||||
|
Linux-x86_64,Executable
|
||||||
|
<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%>
|
||||||
|
|
||||||
|
Linux-x86_64,FallBackToConsole
|
||||||
|
Yes
|
||||||
|
|
||||||
|
Linux-x86_64,InstallDir
|
||||||
|
<%Home%>/<%ShortAppName%>
|
||||||
|
|
||||||
|
Linux-x86_64,InstallMode
|
||||||
|
Standard
|
||||||
|
|
||||||
|
Linux-x86_64,InstallType
|
||||||
|
Typical
|
||||||
|
|
||||||
|
Linux-x86_64,ProgramExecutable
|
||||||
|
{}
|
||||||
|
|
||||||
|
Linux-x86_64,ProgramFolderAllUsers
|
||||||
|
No
|
||||||
|
|
||||||
|
Linux-x86_64,ProgramFolderName
|
||||||
|
<%AppName%>
|
||||||
|
|
||||||
|
Linux-x86_64,ProgramLicense
|
||||||
|
<%InstallDir%>/LICENSE.txt
|
||||||
|
|
||||||
|
Linux-x86_64,ProgramName
|
||||||
|
{}
|
||||||
|
|
||||||
|
Linux-x86_64,ProgramReadme
|
||||||
|
<%InstallDir%>/README.txt
|
||||||
|
|
||||||
|
Linux-x86_64,PromptForRoot
|
||||||
|
Yes
|
||||||
|
|
||||||
|
Linux-x86_64,RequireRoot
|
||||||
|
No
|
||||||
|
|
||||||
|
Linux-x86_64,RootInstallDir
|
||||||
|
/usr/local/<%ShortAppName%>
|
||||||
|
|
||||||
Solaris-sparc,Active
|
Solaris-sparc,Active
|
||||||
No
|
No
|
||||||
|
|
||||||
@ -2087,6 +2309,60 @@ No
|
|||||||
Solaris-sparc,RootInstallDir
|
Solaris-sparc,RootInstallDir
|
||||||
/usr/local/<%ShortAppName%>
|
/usr/local/<%ShortAppName%>
|
||||||
|
|
||||||
|
Solaris-x86,Active
|
||||||
|
No
|
||||||
|
|
||||||
|
Solaris-x86,BuildSeparateArchives
|
||||||
|
No
|
||||||
|
|
||||||
|
Solaris-x86,DefaultDirectoryPermission
|
||||||
|
0755
|
||||||
|
|
||||||
|
Solaris-x86,DefaultFilePermission
|
||||||
|
0755
|
||||||
|
|
||||||
|
Solaris-x86,Executable
|
||||||
|
<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%>
|
||||||
|
|
||||||
|
Solaris-x86,FallBackToConsole
|
||||||
|
Yes
|
||||||
|
|
||||||
|
Solaris-x86,InstallDir
|
||||||
|
<%Home%>/<%ShortAppName%>
|
||||||
|
|
||||||
|
Solaris-x86,InstallMode
|
||||||
|
Standard
|
||||||
|
|
||||||
|
Solaris-x86,InstallType
|
||||||
|
Typical
|
||||||
|
|
||||||
|
Solaris-x86,ProgramExecutable
|
||||||
|
{}
|
||||||
|
|
||||||
|
Solaris-x86,ProgramFolderAllUsers
|
||||||
|
No
|
||||||
|
|
||||||
|
Solaris-x86,ProgramFolderName
|
||||||
|
<%AppName%>
|
||||||
|
|
||||||
|
Solaris-x86,ProgramLicense
|
||||||
|
<%InstallDir%>/LICENSE.txt
|
||||||
|
|
||||||
|
Solaris-x86,ProgramName
|
||||||
|
{}
|
||||||
|
|
||||||
|
Solaris-x86,ProgramReadme
|
||||||
|
<%InstallDir%>/README.txt
|
||||||
|
|
||||||
|
Solaris-x86,PromptForRoot
|
||||||
|
Yes
|
||||||
|
|
||||||
|
Solaris-x86,RequireRoot
|
||||||
|
No
|
||||||
|
|
||||||
|
Solaris-x86,RootInstallDir
|
||||||
|
/usr/local/<%ShortAppName%>
|
||||||
|
|
||||||
TarArchive,Active
|
TarArchive,Active
|
||||||
No
|
No
|
||||||
|
|
||||||
|
@ -175,6 +175,7 @@ def main(args=sys.argv):
|
|||||||
'BeautifulSoup', 'pyreadline',
|
'BeautifulSoup', 'pyreadline',
|
||||||
'pydoc', 'IPython.Extensions.*',
|
'pydoc', 'IPython.Extensions.*',
|
||||||
'calibre.web.feeds.recipes.*',
|
'calibre.web.feeds.recipes.*',
|
||||||
|
'calibre.gui2.convert.*',
|
||||||
'calibre.ebooks.lrf.fonts.prs500.*',
|
'calibre.ebooks.lrf.fonts.prs500.*',
|
||||||
'PyQt4.QtWebKit', 'PyQt4.QtNetwork',
|
'PyQt4.QtWebKit', 'PyQt4.QtNetwork',
|
||||||
],
|
],
|
||||||
|
16
setup.py
16
setup.py
@ -53,7 +53,7 @@ if __name__ == '__main__':
|
|||||||
tag_release, upload_demo, build_linux, build_windows, \
|
tag_release, upload_demo, build_linux, build_windows, \
|
||||||
build_osx, upload_installers, upload_user_manual, \
|
build_osx, upload_installers, upload_user_manual, \
|
||||||
upload_to_pypi, stage3, stage2, stage1, upload, \
|
upload_to_pypi, stage3, stage2, stage1, upload, \
|
||||||
upload_rss
|
upload_rss, betas
|
||||||
|
|
||||||
entry_points['console_scripts'].append(
|
entry_points['console_scripts'].append(
|
||||||
'calibre_postinstall = calibre.linux:post_install')
|
'calibre_postinstall = calibre.linux:post_install')
|
||||||
@ -76,8 +76,21 @@ if __name__ == '__main__':
|
|||||||
print 'WARNING: PoDoFo not found on your system. Various PDF related',
|
print 'WARNING: PoDoFo not found on your system. Various PDF related',
|
||||||
print 'functionality will not work.'
|
print 'functionality will not work.'
|
||||||
|
|
||||||
|
fc_inc = '/usr/include/fontconfig' if islinux else \
|
||||||
|
r'C:\cygwin\home\kovid\fontconfig\include\fontconfig' if iswindows else \
|
||||||
|
'/Users/kovid/fontconfig/include/fontconfig'
|
||||||
|
fc_lib = '/usr/lib' if islinux else \
|
||||||
|
r'C:\cygwin\home\kovid\fontconfig\lib' if iswindows else \
|
||||||
|
'/Users/kovid/fontconfig/lib'
|
||||||
|
|
||||||
ext_modules = optional + [
|
ext_modules = optional + [
|
||||||
|
|
||||||
|
Extension('calibre.plugins.fontconfig',
|
||||||
|
sources = ['src/calibre/utils/fonts/fontconfig.c'],
|
||||||
|
include_dirs = [os.environ.get('FC_INC_DIR', fc_inc)],
|
||||||
|
libraries=['fontconfig'],
|
||||||
|
library_dirs=[os.environ.get('FC_LIB_DIR', fc_lib)]),
|
||||||
|
|
||||||
Extension('calibre.plugins.lzx',
|
Extension('calibre.plugins.lzx',
|
||||||
sources=['src/calibre/utils/lzx/lzxmodule.c',
|
sources=['src/calibre/utils/lzx/lzxmodule.c',
|
||||||
'src/calibre/utils/lzx/compressor.c',
|
'src/calibre/utils/lzx/compressor.c',
|
||||||
@ -199,6 +212,7 @@ if __name__ == '__main__':
|
|||||||
'stage2' : stage2,
|
'stage2' : stage2,
|
||||||
'stage1' : stage1,
|
'stage1' : stage1,
|
||||||
'publish' : upload,
|
'publish' : upload,
|
||||||
|
'betas' : betas,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -284,39 +284,7 @@ def launch(path_or_url):
|
|||||||
path_or_url = 'file:'+path_or_url
|
path_or_url = 'file:'+path_or_url
|
||||||
QDesktopServices.openUrl(QUrl(path_or_url))
|
QDesktopServices.openUrl(QUrl(path_or_url))
|
||||||
|
|
||||||
def relpath(target, base=os.curdir):
|
relpath = os.path.relpath
|
||||||
"""
|
|
||||||
Return a relative path to the target from either the current dir or an optional base dir.
|
|
||||||
Base can be a directory specified either as absolute or relative to current dir.
|
|
||||||
"""
|
|
||||||
|
|
||||||
#if not os.path.exists(target):
|
|
||||||
# raise OSError, 'Target does not exist: '+target
|
|
||||||
if target == base:
|
|
||||||
raise ValueError('target and base are both: %s'%target)
|
|
||||||
if not os.path.isdir(base):
|
|
||||||
raise OSError, 'Base is not a directory or does not exist: '+base
|
|
||||||
|
|
||||||
base_list = (os.path.abspath(base)).split(os.sep)
|
|
||||||
target_list = (os.path.abspath(target)).split(os.sep)
|
|
||||||
|
|
||||||
# On the windows platform the target may be on a completely different drive from the base.
|
|
||||||
if iswindows and base_list[0].upper() != target_list[0].upper():
|
|
||||||
raise OSError, 'Target is on a different drive to base. Target: '+repr(target)+', base: '+repr(base)
|
|
||||||
|
|
||||||
# Starting from the filepath root, work out how much of the filepath is
|
|
||||||
# shared by base and target.
|
|
||||||
for i in range(min(len(base_list), len(target_list))):
|
|
||||||
if base_list[i] != target_list[i]: break
|
|
||||||
else:
|
|
||||||
# If we broke out of the loop, i is pointing to the first differing path elements.
|
|
||||||
# If we didn't break out of the loop, i is pointing to identical path elements.
|
|
||||||
# Increment i so that in all cases it points to the first differing path elements.
|
|
||||||
i+=1
|
|
||||||
|
|
||||||
rel_list = [os.pardir] * (len(base_list)-i) + target_list[i:]
|
|
||||||
return os.path.join(*rel_list)
|
|
||||||
|
|
||||||
_spat = re.compile(r'^the\s+|^a\s+|^an\s+', re.IGNORECASE)
|
_spat = re.compile(r'^the\s+|^a\s+|^an\s+', re.IGNORECASE)
|
||||||
def english_sort(x, y):
|
def english_sort(x, y):
|
||||||
'''
|
'''
|
||||||
|
@ -59,7 +59,8 @@ if plugins is None:
|
|||||||
plugin_path = getattr(pkg_resources, 'resource_filename')('calibre', 'plugins')
|
plugin_path = getattr(pkg_resources, 'resource_filename')('calibre', 'plugins')
|
||||||
sys.path.insert(0, plugin_path)
|
sys.path.insert(0, plugin_path)
|
||||||
|
|
||||||
for plugin in ['pictureflow', 'lzx', 'msdes', 'podofo', 'cPalmdoc'] + \
|
for plugin in ['pictureflow', 'lzx', 'msdes', 'podofo', 'cPalmdoc',
|
||||||
|
'fontconfig'] + \
|
||||||
(['winutil'] if iswindows else []) + \
|
(['winutil'] if iswindows else []) + \
|
||||||
(['usbobserver'] if isosx else []):
|
(['usbobserver'] if isosx else []):
|
||||||
try:
|
try:
|
||||||
|
@ -235,7 +235,22 @@ class KindleOutput(OutputProfile):
|
|||||||
def tags_to_string(cls, tags):
|
def tags_to_string(cls, tags):
|
||||||
return 'ttt '.join(tags)+'ttt '
|
return 'ttt '.join(tags)+'ttt '
|
||||||
|
|
||||||
|
class KindleDXOutput(OutputProfile):
|
||||||
|
|
||||||
|
name = 'Kindle DX'
|
||||||
|
short_name = 'kindle_dx'
|
||||||
|
description = _('This profile is intended for the Amazon Kindle DX.')
|
||||||
|
|
||||||
|
# Screen size is a best guess
|
||||||
|
screen_size = (1200, 824)
|
||||||
|
dpi = 150.0
|
||||||
|
comic_screen_size = (1180, 800)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def tags_to_string(cls, tags):
|
||||||
|
return 'ttt '.join(tags)+'ttt '
|
||||||
|
|
||||||
|
|
||||||
output_profiles = [OutputProfile, SonyReaderOutput, MSReaderOutput,
|
output_profiles = [OutputProfile, SonyReaderOutput, MSReaderOutput,
|
||||||
MobipocketOutput, HanlinV3Output, CybookG3Output, KindleOutput,
|
MobipocketOutput, HanlinV3Output, CybookG3Output, KindleOutput,
|
||||||
SonyReaderLandscapeOutput]
|
SonyReaderLandscapeOutput, KindleDXOutput]
|
||||||
|
@ -85,7 +85,7 @@ class USBMS(CLI, Device):
|
|||||||
elif on_card == 'cardb' and not self._card_b_prefix:
|
elif on_card == 'cardb' and not self._card_b_prefix:
|
||||||
raise ValueError(_('The reader has no storage card in this slot.'))
|
raise ValueError(_('The reader has no storage card in this slot.'))
|
||||||
elif on_card and on_card not in ('carda', 'cardb'):
|
elif on_card and on_card not in ('carda', 'cardb'):
|
||||||
raise DeviceError(_('Selected slot: %s is not supported.' % on_card))
|
raise DeviceError(_('Selected slot: %s is not supported.') % on_card)
|
||||||
|
|
||||||
if on_card == 'carda':
|
if on_card == 'carda':
|
||||||
path = os.path.join(self._card_a_prefix, self.EBOOK_DIR_CARD_A)
|
path = os.path.join(self._card_a_prefix, self.EBOOK_DIR_CARD_A)
|
||||||
|
@ -7,6 +7,15 @@ __docformat__ = 'restructuredtext en'
|
|||||||
Command line interface to conversion sub-system
|
Command line interface to conversion sub-system
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
import sys, os
|
||||||
|
from optparse import OptionGroup, Option
|
||||||
|
|
||||||
|
from calibre.utils.config import OptionParser
|
||||||
|
from calibre.utils.logging import Log
|
||||||
|
from calibre.constants import preferred_encoding
|
||||||
|
from calibre.customize.conversion import OptionRecommendation
|
||||||
|
|
||||||
|
|
||||||
USAGE = '%prog ' + _('''\
|
USAGE = '%prog ' + _('''\
|
||||||
input_file output_file [options]
|
input_file output_file [options]
|
||||||
|
|
||||||
@ -33,14 +42,6 @@ option.
|
|||||||
For full documentation of the conversion system see
|
For full documentation of the conversion system see
|
||||||
''') + 'http://calibre.kovidgoyal.net/user_manual/conversion.html'
|
''') + 'http://calibre.kovidgoyal.net/user_manual/conversion.html'
|
||||||
|
|
||||||
import sys, os
|
|
||||||
from optparse import OptionGroup, Option
|
|
||||||
|
|
||||||
from calibre.utils.config import OptionParser
|
|
||||||
from calibre.utils.logging import Log
|
|
||||||
from calibre.constants import preferred_encoding
|
|
||||||
from calibre.customize.conversion import OptionRecommendation
|
|
||||||
|
|
||||||
def print_help(parser, log):
|
def print_help(parser, log):
|
||||||
help = parser.format_help().encode(preferred_encoding, 'replace')
|
help = parser.format_help().encode(preferred_encoding, 'replace')
|
||||||
log(help)
|
log(help)
|
||||||
|
@ -3,7 +3,7 @@ __license__ = 'GPL 3'
|
|||||||
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
import os, re
|
import os, re, sys
|
||||||
|
|
||||||
from calibre.customize.conversion import OptionRecommendation, DummyReporter
|
from calibre.customize.conversion import OptionRecommendation, DummyReporter
|
||||||
from calibre.customize.ui import input_profiles, output_profiles, \
|
from calibre.customize.ui import input_profiles, output_profiles, \
|
||||||
@ -551,6 +551,13 @@ OptionRecommendation(name='list_recipes',
|
|||||||
|
|
||||||
self.read_user_metadata()
|
self.read_user_metadata()
|
||||||
|
|
||||||
|
def flush(self):
|
||||||
|
try:
|
||||||
|
sys.stdout.flush()
|
||||||
|
sys.stderr.flush()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
'''
|
'''
|
||||||
Run the conversion pipeline
|
Run the conversion pipeline
|
||||||
@ -566,11 +573,13 @@ OptionRecommendation(name='list_recipes',
|
|||||||
self.log('\t'+title)
|
self.log('\t'+title)
|
||||||
self.log('%d recipes available'%len(titles))
|
self.log('%d recipes available'%len(titles))
|
||||||
raise SystemExit(0)
|
raise SystemExit(0)
|
||||||
|
self.flush()
|
||||||
|
|
||||||
# Run any preprocess plugins
|
# Run any preprocess plugins
|
||||||
from calibre.customize.ui import run_plugins_on_preprocess
|
from calibre.customize.ui import run_plugins_on_preprocess
|
||||||
self.input = run_plugins_on_preprocess(self.input)
|
self.input = run_plugins_on_preprocess(self.input)
|
||||||
|
|
||||||
|
self.flush()
|
||||||
# Create an OEBBook from the input file. The input plugin does all the
|
# Create an OEBBook from the input file. The input plugin does all the
|
||||||
# heavy lifting.
|
# heavy lifting.
|
||||||
accelerators = {}
|
accelerators = {}
|
||||||
@ -595,11 +604,13 @@ OptionRecommendation(name='list_recipes',
|
|||||||
self.oeb = create_oebbook(self.log, self.oeb, self.opts,
|
self.oeb = create_oebbook(self.log, self.oeb, self.opts,
|
||||||
self.input_plugin)
|
self.input_plugin)
|
||||||
pr = CompositeProgressReporter(0.34, 0.67, self.ui_reporter)
|
pr = CompositeProgressReporter(0.34, 0.67, self.ui_reporter)
|
||||||
|
self.flush()
|
||||||
pr(0., _('Running transforms on ebook...'))
|
pr(0., _('Running transforms on ebook...'))
|
||||||
|
|
||||||
from calibre.ebooks.oeb.transforms.guide import Clean
|
from calibre.ebooks.oeb.transforms.guide import Clean
|
||||||
Clean()(self.oeb, self.opts)
|
Clean()(self.oeb, self.opts)
|
||||||
pr(0.1)
|
pr(0.1)
|
||||||
|
self.flush()
|
||||||
|
|
||||||
self.opts.source = self.opts.input_profile
|
self.opts.source = self.opts.input_profile
|
||||||
self.opts.dest = self.opts.output_profile
|
self.opts.dest = self.opts.output_profile
|
||||||
@ -608,10 +619,12 @@ OptionRecommendation(name='list_recipes',
|
|||||||
MergeMetadata()(self.oeb, self.user_metadata,
|
MergeMetadata()(self.oeb, self.user_metadata,
|
||||||
self.opts.prefer_metadata_cover)
|
self.opts.prefer_metadata_cover)
|
||||||
pr(0.2)
|
pr(0.2)
|
||||||
|
self.flush()
|
||||||
|
|
||||||
from calibre.ebooks.oeb.transforms.structure import DetectStructure
|
from calibre.ebooks.oeb.transforms.structure import DetectStructure
|
||||||
DetectStructure()(self.oeb, self.opts)
|
DetectStructure()(self.oeb, self.opts)
|
||||||
pr(0.35)
|
pr(0.35)
|
||||||
|
self.flush()
|
||||||
|
|
||||||
from calibre.ebooks.oeb.transforms.flatcss import CSSFlattener
|
from calibre.ebooks.oeb.transforms.flatcss import CSSFlattener
|
||||||
fbase = self.opts.base_font_size
|
fbase = self.opts.base_font_size
|
||||||
@ -626,6 +639,7 @@ OptionRecommendation(name='list_recipes',
|
|||||||
from calibre.ebooks.oeb.transforms.jacket import Jacket
|
from calibre.ebooks.oeb.transforms.jacket import Jacket
|
||||||
Jacket()(self.oeb, self.opts, self.user_metadata)
|
Jacket()(self.oeb, self.opts, self.user_metadata)
|
||||||
pr(0.4)
|
pr(0.4)
|
||||||
|
self.flush()
|
||||||
|
|
||||||
if self.opts.extra_css and os.path.exists(self.opts.extra_css):
|
if self.opts.extra_css and os.path.exists(self.opts.extra_css):
|
||||||
self.opts.extra_css = open(self.opts.extra_css, 'rb').read()
|
self.opts.extra_css = open(self.opts.extra_css, 'rb').read()
|
||||||
@ -651,6 +665,7 @@ OptionRecommendation(name='list_recipes',
|
|||||||
from calibre.ebooks.oeb.transforms.linearize_tables import LinearizeTables
|
from calibre.ebooks.oeb.transforms.linearize_tables import LinearizeTables
|
||||||
LinearizeTables()(self.oeb, self.opts)
|
LinearizeTables()(self.oeb, self.opts)
|
||||||
pr(0.9)
|
pr(0.9)
|
||||||
|
self.flush()
|
||||||
|
|
||||||
from calibre.ebooks.oeb.transforms.trimmanifest import ManifestTrimmer
|
from calibre.ebooks.oeb.transforms.trimmanifest import ManifestTrimmer
|
||||||
|
|
||||||
@ -660,6 +675,7 @@ OptionRecommendation(name='list_recipes',
|
|||||||
|
|
||||||
self.oeb.toc.rationalize_play_orders()
|
self.oeb.toc.rationalize_play_orders()
|
||||||
pr(1.)
|
pr(1.)
|
||||||
|
self.flush()
|
||||||
|
|
||||||
self.log.info('Creating %s...'%self.output_plugin.name)
|
self.log.info('Creating %s...'%self.output_plugin.name)
|
||||||
our = CompositeProgressReporter(0.67, 1., self.ui_reporter)
|
our = CompositeProgressReporter(0.67, 1., self.ui_reporter)
|
||||||
@ -669,6 +685,7 @@ OptionRecommendation(name='list_recipes',
|
|||||||
self.opts, self.log)
|
self.opts, self.log)
|
||||||
self.ui_reporter(1.)
|
self.ui_reporter(1.)
|
||||||
self.log(self.output_fmt.upper(), 'output written to', self.output)
|
self.log(self.output_fmt.upper(), 'output written to', self.output)
|
||||||
|
self.flush()
|
||||||
|
|
||||||
def create_oebbook(log, path_or_stream, opts, input_plugin, reader=None,
|
def create_oebbook(log, path_or_stream, opts, input_plugin, reader=None,
|
||||||
encoding='utf-8'):
|
encoding='utf-8'):
|
||||||
|
@ -35,7 +35,8 @@ class PRS500_PROFILE(object):
|
|||||||
name = 'prs500'
|
name = 'prs500'
|
||||||
|
|
||||||
def find_custom_fonts(options, logger):
|
def find_custom_fonts(options, logger):
|
||||||
from calibre.utils.fontconfig import files_for_family
|
from calibre.utils.fonts import fontconfig
|
||||||
|
files_for_family = fontconfig.files_for_family
|
||||||
fonts = {'serif' : None, 'sans' : None, 'mono' : None}
|
fonts = {'serif' : None, 'sans' : None, 'mono' : None}
|
||||||
def family(cmd):
|
def family(cmd):
|
||||||
return cmd.split(',')[-1].strip()
|
return cmd.split(',')[-1].strip()
|
||||||
|
@ -15,7 +15,6 @@ from lxml import etree
|
|||||||
from dateutil import parser
|
from dateutil import parser
|
||||||
|
|
||||||
from calibre.ebooks.chardet import xml_to_unicode
|
from calibre.ebooks.chardet import xml_to_unicode
|
||||||
from calibre import relpath
|
|
||||||
from calibre.constants import __appname__, __version__
|
from calibre.constants import __appname__, __version__
|
||||||
from calibre.ebooks.metadata.toc import TOC
|
from calibre.ebooks.metadata.toc import TOC
|
||||||
from calibre.ebooks.metadata import MetaInformation, string_to_authors
|
from calibre.ebooks.metadata import MetaInformation, string_to_authors
|
||||||
@ -86,8 +85,8 @@ class Resource(object):
|
|||||||
if self.path == basedir:
|
if self.path == basedir:
|
||||||
return ''+frag
|
return ''+frag
|
||||||
try:
|
try:
|
||||||
rpath = relpath(self.path, basedir)
|
rpath = os.path.relpath(self.path, basedir)
|
||||||
except OSError: # On windows path and basedir could be on different drives
|
except ValueError: # On windows path and basedir could be on different drives
|
||||||
rpath = self.path
|
rpath = self.path
|
||||||
if isinstance(rpath, unicode):
|
if isinstance(rpath, unicode):
|
||||||
rpath = rpath.encode('utf-8')
|
rpath = rpath.encode('utf-8')
|
||||||
@ -560,7 +559,7 @@ class OPF(object):
|
|||||||
has_path = True
|
has_path = True
|
||||||
break
|
break
|
||||||
if not has_path:
|
if not has_path:
|
||||||
href = relpath(path, self.base_dir).replace(os.sep, '/')
|
href = os.path.relpath(path, self.base_dir).replace(os.sep, '/')
|
||||||
item = self.create_manifest_item(href, media_type)
|
item = self.create_manifest_item(href, media_type)
|
||||||
manifest = self.manifest_ppath(self.root)[0]
|
manifest = self.manifest_ppath(self.root)[0]
|
||||||
manifest.append(item)
|
manifest.append(item)
|
||||||
|
@ -53,8 +53,9 @@ class Progress(object):
|
|||||||
|
|
||||||
class ReadMetadata(Thread):
|
class ReadMetadata(Thread):
|
||||||
|
|
||||||
def __init__(self, tasks, result_queue):
|
def __init__(self, tasks, result_queue, spare_server=None):
|
||||||
self.tasks, self.result_queue = tasks, result_queue
|
self.tasks, self.result_queue = tasks, result_queue
|
||||||
|
self.spare_server = spare_server
|
||||||
self.canceled = False
|
self.canceled = False
|
||||||
Thread.__init__(self)
|
Thread.__init__(self)
|
||||||
self.daemon = True
|
self.daemon = True
|
||||||
@ -67,7 +68,7 @@ class ReadMetadata(Thread):
|
|||||||
for b in t:
|
for b in t:
|
||||||
ids.add(b[0])
|
ids.add(b[0])
|
||||||
progress = Progress(self.result_queue, self.tdir)
|
progress = Progress(self.result_queue, self.tdir)
|
||||||
server = Server()
|
server = Server() if self.spare_server is None else self.spare_server
|
||||||
for i, task in enumerate(self.tasks):
|
for i, task in enumerate(self.tasks):
|
||||||
job = ParallelJob('read_metadata',
|
job = ParallelJob('read_metadata',
|
||||||
'Read metadata (%d of %d)'%(i, len(self.tasks)),
|
'Read metadata (%d of %d)'%(i, len(self.tasks)),
|
||||||
@ -110,20 +111,20 @@ class ReadMetadata(Thread):
|
|||||||
os.remove(job.log_path)
|
os.remove(job.log_path)
|
||||||
|
|
||||||
|
|
||||||
def read_metadata(paths, result_queue, chunk=50):
|
def read_metadata(paths, result_queue, chunk=50, spare_server=None):
|
||||||
tasks = []
|
tasks = []
|
||||||
pos = 0
|
pos = 0
|
||||||
while pos < len(paths):
|
while pos < len(paths):
|
||||||
tasks.append(paths[pos:pos+chunk])
|
tasks.append(paths[pos:pos+chunk])
|
||||||
pos += chunk
|
pos += chunk
|
||||||
t = ReadMetadata(tasks, result_queue)
|
t = ReadMetadata(tasks, result_queue, spare_server=spare_server)
|
||||||
t.start()
|
t.start()
|
||||||
return t
|
return t
|
||||||
|
|
||||||
class SaveWorker(Thread):
|
class SaveWorker(Thread):
|
||||||
|
|
||||||
def __init__(self, result_queue, db, ids, path, by_author=False,
|
def __init__(self, result_queue, db, ids, path, by_author=False,
|
||||||
single_dir=False, single_format=None):
|
single_dir=False, single_format=None, spare_server=None):
|
||||||
Thread.__init__(self)
|
Thread.__init__(self)
|
||||||
self.daemon = True
|
self.daemon = True
|
||||||
self.path, self.by_author = path, by_author
|
self.path, self.by_author = path, by_author
|
||||||
@ -133,10 +134,11 @@ class SaveWorker(Thread):
|
|||||||
self.canceled = False
|
self.canceled = False
|
||||||
self.result_queue = result_queue
|
self.result_queue = result_queue
|
||||||
self.error = None
|
self.error = None
|
||||||
|
self.spare_server = spare_server
|
||||||
self.start()
|
self.start()
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
server = Server()
|
server = Server() if self.spare_server is None else self.spare_server
|
||||||
ids = set(self.ids)
|
ids = set(self.ids)
|
||||||
tasks = server.split(list(ids))
|
tasks = server.split(list(ids))
|
||||||
jobs = set([])
|
jobs = set([])
|
||||||
|
@ -29,6 +29,8 @@ from calibre.ebooks.oeb.base import prefixname
|
|||||||
from calibre.ebooks.oeb.base import urlnormalize
|
from calibre.ebooks.oeb.base import urlnormalize
|
||||||
from calibre.ebooks.compression.palmdoc import compress_doc
|
from calibre.ebooks.compression.palmdoc import compress_doc
|
||||||
|
|
||||||
|
INDEXING = True
|
||||||
|
|
||||||
# TODO:
|
# TODO:
|
||||||
# - Optionally rasterize tables
|
# - Optionally rasterize tables
|
||||||
|
|
||||||
@ -65,7 +67,9 @@ TAGX = {
|
|||||||
'subchapter' :
|
'subchapter' :
|
||||||
'\x00\x00\x00\x01\x01\x01\x01\x00\x02\x01\x02\x00\x03\x01\x04\x00\x04\x01\x08\x00\x05\x01\x10\x00\x15\x01\x10\x00\x16\x01\x20\x00\x17\x01\x40\x00\x00\x00\x00\x01',
|
'\x00\x00\x00\x01\x01\x01\x01\x00\x02\x01\x02\x00\x03\x01\x04\x00\x04\x01\x08\x00\x05\x01\x10\x00\x15\x01\x10\x00\x16\x01\x20\x00\x17\x01\x40\x00\x00\x00\x00\x01',
|
||||||
'periodical' :
|
'periodical' :
|
||||||
'\x00\x00\x00\x02\x01\x01\x01\x00\x02\x01\x02\x00\x03\x01\x04\x00\x04\x01\x08\x00\x05\x01\x10\x00\x15\x01\x20\x00\x16\x01\x40\x00\x17\x01\x80\x00\x00\x00\x00\x01\x45\x01\x01\x00\x46\x01\x02\x00\x47\x01\x04\x00\x00\x00\x00\x01'
|
'\x00\x00\x00\x02\x01\x01\x01\x00\x02\x01\x02\x00\x03\x01\x04\x00\x04\x01\x08\x00\x05\x01\x10\x00\x15\x01\x20\x00\x16\x01\x40\x00\x17\x01\x80\x00\x00\x00\x00\x01\x45\x01\x01\x00\x46\x01\x02\x00\x47\x01\x04\x00\x00\x00\x00\x01',
|
||||||
|
'secondary_book':'\x00\x00\x00\x01\x01\x01\x01\x00\x00\x00\x00\x01',
|
||||||
|
'secondary_periodical':'\x00\x00\x00\x01\x01\x01\x01\x00\x0b\x03\x02\x00\x00\x00\x00\x01'
|
||||||
}
|
}
|
||||||
|
|
||||||
INDXT = {
|
INDXT = {
|
||||||
@ -99,8 +103,7 @@ def decint(value, direction):
|
|||||||
|
|
||||||
|
|
||||||
def align_block(raw, multiple=4, pad='\0'):
|
def align_block(raw, multiple=4, pad='\0'):
|
||||||
l = len(raw)
|
extra = len(raw) % multiple
|
||||||
extra = l % multiple
|
|
||||||
if extra == 0: return raw
|
if extra == 0: return raw
|
||||||
return raw + pad*(multiple - extra)
|
return raw + pad*(multiple - extra)
|
||||||
|
|
||||||
@ -355,8 +358,11 @@ class MobiWriter(object):
|
|||||||
def _generate_content(self):
|
def _generate_content(self):
|
||||||
self._map_image_names()
|
self._map_image_names()
|
||||||
self._generate_text()
|
self._generate_text()
|
||||||
if not self.opts.no_mobi_index:
|
if INDEXING and not self.opts.no_mobi_index:
|
||||||
|
try:
|
||||||
self._generate_index()
|
self._generate_index()
|
||||||
|
except:
|
||||||
|
self._oeb.log.exception('Failed to generate index')
|
||||||
self._generate_images()
|
self._generate_images()
|
||||||
|
|
||||||
def _map_image_names(self):
|
def _map_image_names(self):
|
||||||
@ -406,6 +412,7 @@ class MobiWriter(object):
|
|||||||
self._content_length = len(text)
|
self._content_length = len(text)
|
||||||
self._text_length = len(text)
|
self._text_length = len(text)
|
||||||
text = StringIO(text)
|
text = StringIO(text)
|
||||||
|
buf = []
|
||||||
nrecords = 0
|
nrecords = 0
|
||||||
offset = 0
|
offset = 0
|
||||||
if self._compression != UNCOMPRESSED:
|
if self._compression != UNCOMPRESSED:
|
||||||
@ -435,9 +442,16 @@ class MobiWriter(object):
|
|||||||
lsize += 1
|
lsize += 1
|
||||||
record.write(size)
|
record.write(size)
|
||||||
self._records.append(record.getvalue())
|
self._records.append(record.getvalue())
|
||||||
|
buf.append(self._records[-1])
|
||||||
nrecords += 1
|
nrecords += 1
|
||||||
offset += RECORD_SIZE
|
offset += RECORD_SIZE
|
||||||
data, overlap = self._read_text_record(text)
|
data, overlap = self._read_text_record(text)
|
||||||
|
if INDEXING:
|
||||||
|
extra = sum(map(len, buf))%4
|
||||||
|
if extra == 0:
|
||||||
|
extra = 4
|
||||||
|
self._records.append('\0'*(4-extra))
|
||||||
|
nrecords += 1
|
||||||
self._text_nrecords = nrecords
|
self._text_nrecords = nrecords
|
||||||
|
|
||||||
def _generate_indxt(self, ctoc):
|
def _generate_indxt(self, ctoc):
|
||||||
@ -448,7 +462,7 @@ class MobiWriter(object):
|
|||||||
|
|
||||||
indices.write('IDXT')
|
indices.write('IDXT')
|
||||||
c = 0
|
c = 0
|
||||||
last_index = last_name = None
|
last_name = None
|
||||||
|
|
||||||
def add_node(node, offset, length, count):
|
def add_node(node, offset, length, count):
|
||||||
if self.opts.verbose > 2:
|
if self.opts.verbose > 2:
|
||||||
@ -487,21 +501,23 @@ class MobiWriter(object):
|
|||||||
length = self._content_length - offset
|
length = self._content_length - offset
|
||||||
|
|
||||||
add_node(child, offset, length, c)
|
add_node(child, offset, length, c)
|
||||||
last_index = c
|
|
||||||
ctoc_offset = self._ctoc_map[child]
|
ctoc_offset = self._ctoc_map[child]
|
||||||
last_name = "%4d"%c
|
last_name = "%4d"%c
|
||||||
c += 1
|
c += 1
|
||||||
|
|
||||||
return align_block(indxt.getvalue()), c, \
|
return align_block(indxt.getvalue()), c, \
|
||||||
align_block(indices.getvalue()), last_index, last_name
|
align_block(indices.getvalue()), last_name
|
||||||
|
|
||||||
|
|
||||||
def _generate_index(self):
|
def _generate_index(self):
|
||||||
self._oeb.log('Generating index...')
|
self._oeb.log('Generating index...')
|
||||||
self._primary_index_record = None
|
self._primary_index_record = None
|
||||||
ctoc = self._generate_ctoc()
|
ctoc = self._generate_ctoc()
|
||||||
indxt, indxt_count, indices, last_index, last_name = \
|
indxt, indxt_count, indices, last_name = \
|
||||||
self._generate_indxt(ctoc)
|
self._generate_indxt(ctoc)
|
||||||
|
if last_name is None:
|
||||||
|
self._oeb.log.warn('Input document has no TOC. No index generated.')
|
||||||
|
return
|
||||||
|
|
||||||
indx1 = StringIO()
|
indx1 = StringIO()
|
||||||
indx1.write('INDX'+pack('>I', 0xc0)) # header length
|
indx1.write('INDX'+pack('>I', 0xc0)) # header length
|
||||||
@ -529,7 +545,7 @@ class MobiWriter(object):
|
|||||||
indx1.write(indices)
|
indx1.write(indices)
|
||||||
indx1 = indx1.getvalue()
|
indx1 = indx1.getvalue()
|
||||||
|
|
||||||
idxt0 = chr(len(last_name)) + last_name + pack('>H', last_index)
|
idxt0 = chr(len(last_name)) + last_name + pack('>H', indxt_count)
|
||||||
idxt0 = align_block(idxt0)
|
idxt0 = align_block(idxt0)
|
||||||
indx0 = StringIO()
|
indx0 = StringIO()
|
||||||
|
|
||||||
@ -597,16 +613,61 @@ class MobiWriter(object):
|
|||||||
indx0 = indx0.getvalue()
|
indx0 = indx0.getvalue()
|
||||||
|
|
||||||
self._primary_index_record = len(self._records)
|
self._primary_index_record = len(self._records)
|
||||||
|
self._records.extend([indx0, indx1, ctoc])
|
||||||
|
|
||||||
|
# Write secondary index records
|
||||||
|
tagx = TAGX['secondary_'+\
|
||||||
|
('periodical' if self.opts.mobi_periodical else 'book')]
|
||||||
|
tagx_len = 8 + len(tagx)
|
||||||
|
|
||||||
|
indx0 = StringIO()
|
||||||
|
indx0.write('INDX'+pack('>I', 0xc0)+'\0'*8)
|
||||||
|
indx0.write(pack('>I', 0x02))
|
||||||
|
indx0.write(pack('>I', 0xc0+tagx_len+4))
|
||||||
|
indx0.write(pack('>I', 1))
|
||||||
|
indx0.write(pack('>I', 65001))
|
||||||
|
indx0.write('\xff'*4)
|
||||||
|
indx0.write(pack('>I', 1))
|
||||||
|
indx0.write('\0'*4)
|
||||||
|
indx0.write('\0'*136)
|
||||||
|
indx0.write(pack('>I', 0xc0))
|
||||||
|
indx0.write('\0'*8)
|
||||||
|
indx0.write('TAGX'+pack('>I', tagx_len)+tagx)
|
||||||
|
if self.opts.mobi_periodical:
|
||||||
|
raise NotImplementedError
|
||||||
|
else:
|
||||||
|
indx0.write('\0'*3 + '\x01' + 'IDXT' + '\0\xd4\0\0')
|
||||||
|
indx1 = StringIO()
|
||||||
|
indx1.write('INDX' + pack('>I', 0xc0) + '\0'*4)
|
||||||
|
indx1.write(pack('>I', 1))
|
||||||
|
extra = 0xf0 if self.opts.mobi_periodical else 4
|
||||||
|
indx1.write('\0'*4 + pack('>I', 0xc0+extra))
|
||||||
|
num = 4 if self.opts.mobi_periodical else 1
|
||||||
|
indx1.write(pack('>I', num))
|
||||||
|
indx1.write('\xff'*8)
|
||||||
|
indx1.write('\0'*(0xc0-indx1.tell()))
|
||||||
|
if self.opts.mobi_periodical:
|
||||||
|
raise NotImplementedError
|
||||||
|
else:
|
||||||
|
indx1.write('\0\x01\x80\0')
|
||||||
|
indx1.write('IDXT')
|
||||||
|
if self.opts.mobi_periodical:
|
||||||
|
raise NotImplementedError
|
||||||
|
else:
|
||||||
|
indx1.write('\0\xc0\0\0')
|
||||||
|
|
||||||
|
indx0, indx1 = indx0.getvalue(), indx1.getvalue()
|
||||||
|
self._records.extend((indx0, indx1))
|
||||||
if self.opts.verbose > 3:
|
if self.opts.verbose > 3:
|
||||||
from tempfile import mkdtemp
|
from tempfile import mkdtemp
|
||||||
import os
|
import os
|
||||||
t = mkdtemp()
|
t = mkdtemp()
|
||||||
open(os.path.join(t, 'indx0.bin'), 'wb').write(indx0)
|
for i, n in enumerate(['sindx1', 'sindx0', 'ctoc', 'indx0', 'indx1']):
|
||||||
open(os.path.join(t, 'indx1.bin'), 'wb').write(indx1)
|
open(os.path.join(t, n+'.bin'), 'wb').write(self._records[-(i+1)])
|
||||||
open(os.path.join(t, 'ctoc.bin'), 'wb').write(ctoc)
|
|
||||||
self._oeb.log.debug('Index records dumped to', t)
|
self._oeb.log.debug('Index records dumped to', t)
|
||||||
|
|
||||||
self._records.extend([indx0, indx1, ctoc])
|
|
||||||
|
|
||||||
|
|
||||||
def _generate_ctoc(self):
|
def _generate_ctoc(self):
|
||||||
if self.opts.mobi_periodical:
|
if self.opts.mobi_periodical:
|
||||||
@ -617,8 +678,8 @@ class MobiWriter(object):
|
|||||||
self._last_toc_entry = None
|
self._last_toc_entry = None
|
||||||
ctoc = StringIO()
|
ctoc = StringIO()
|
||||||
|
|
||||||
def add_node(node, cls):
|
def add_node(node, cls, title=None):
|
||||||
t = node.title
|
t = node.title if title is None else title
|
||||||
if t and t.strip():
|
if t and t.strip():
|
||||||
t = t.strip()
|
t = t.strip()
|
||||||
if not isinstance(t, unicode):
|
if not isinstance(t, unicode):
|
||||||
@ -629,8 +690,10 @@ class MobiWriter(object):
|
|||||||
self._ctoc_name_map[node] = t
|
self._ctoc_name_map[node] = t
|
||||||
ctoc.write(decint(len(t), DECINT_FORWARD)+t)
|
ctoc.write(decint(len(t), DECINT_FORWARD)+t)
|
||||||
|
|
||||||
|
first = True
|
||||||
for child in toc.iter():
|
for child in toc.iter():
|
||||||
add_node(child, 'chapter')
|
add_node(child, 'chapter')#, title='Title Page' if first else None)
|
||||||
|
first = False
|
||||||
|
|
||||||
return align_block(ctoc.getvalue())
|
return align_block(ctoc.getvalue())
|
||||||
|
|
||||||
@ -666,12 +729,13 @@ class MobiWriter(object):
|
|||||||
metadata = self._oeb.metadata
|
metadata = self._oeb.metadata
|
||||||
exth = self._build_exth()
|
exth = self._build_exth()
|
||||||
last_content_record = len(self._records) - 1
|
last_content_record = len(self._records) - 1
|
||||||
|
if INDEXING:
|
||||||
self._generate_end_records()
|
self._generate_end_records()
|
||||||
record0 = StringIO()
|
record0 = StringIO()
|
||||||
# The PalmDOC Header
|
# The PalmDOC Header
|
||||||
record0.write(pack('>HHIHHHH', self._compression, 0,
|
record0.write(pack('>HHIHHHH', self._compression, 0,
|
||||||
self._text_length,
|
self._text_length,
|
||||||
self._text_nrecords, RECORD_SIZE, 0, 0)) # 0 - 15 (0x0 - 0xf)
|
self._text_nrecords-1, RECORD_SIZE, 0, 0)) # 0 - 15 (0x0 - 0xf)
|
||||||
uid = random.randint(0, 0xffffffff)
|
uid = random.randint(0, 0xffffffff)
|
||||||
title = str(metadata.title[0])
|
title = str(metadata.title[0])
|
||||||
# The MOBI Header
|
# The MOBI Header
|
||||||
@ -697,8 +761,8 @@ class MobiWriter(object):
|
|||||||
record0.write('\xff' * 8)
|
record0.write('\xff' * 8)
|
||||||
|
|
||||||
# 0x20 - 0x23 : Secondary index record
|
# 0x20 - 0x23 : Secondary index record
|
||||||
# TODO: implement
|
record0.write(pack('>I', 0xffffffff if self._primary_index_record is
|
||||||
record0.write('\xff' * 4)
|
None else self._primary_index_record+3))
|
||||||
|
|
||||||
# 0x24 - 0x3f : Unknown
|
# 0x24 - 0x3f : Unknown
|
||||||
record0.write('\xff' * 28)
|
record0.write('\xff' * 28)
|
||||||
@ -827,6 +891,11 @@ class MobiWriter(object):
|
|||||||
if index is not None:
|
if index is not None:
|
||||||
exth.write(pack('>III', 0xca, 0x0c, index - 1))
|
exth.write(pack('>III', 0xca, 0x0c, index - 1))
|
||||||
nrecs += 1
|
nrecs += 1
|
||||||
|
if INDEXING:
|
||||||
|
# Write unknown EXTH records as 0s
|
||||||
|
for code, size in [(204,4), (205,4), (206,4), (207,4), (300,40)]:
|
||||||
|
exth.write(pack('>II', code, 8+size)+'\0'*size)
|
||||||
|
nrecs += 1
|
||||||
exth = exth.getvalue()
|
exth = exth.getvalue()
|
||||||
trail = len(exth) % 4
|
trail = len(exth) % 4
|
||||||
pad = '\0' * (4 - trail) # Always pad w/ at least 1 byte
|
pad = '\0' * (4 - trail) # Always pad w/ at least 1 byte
|
||||||
@ -849,7 +918,7 @@ class MobiWriter(object):
|
|||||||
|
|
||||||
def _write_header(self):
|
def _write_header(self):
|
||||||
title = str(self._oeb.metadata.title[0])
|
title = str(self._oeb.metadata.title[0])
|
||||||
title = re.sub('[^-A-Za-z0-9]+', '_', title)[:32]
|
title = re.sub('[^-A-Za-z0-9]+', '_', title)[:31]
|
||||||
title = title + ('\0' * (32 - len(title)))
|
title = title + ('\0' * (32 - len(title)))
|
||||||
now = int(time.time())
|
now = int(time.time())
|
||||||
nrecords = len(self._records)
|
nrecords = len(self._records)
|
||||||
@ -866,4 +935,3 @@ class MobiWriter(object):
|
|||||||
self._write(record)
|
self._write(record)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,7 +11,12 @@ __docformat__ = 'restructuredtext en'
|
|||||||
import struct
|
import struct
|
||||||
import zlib
|
import zlib
|
||||||
|
|
||||||
|
try:
|
||||||
|
from PIL import Image
|
||||||
|
Image
|
||||||
|
except ImportError:
|
||||||
import Image
|
import Image
|
||||||
|
|
||||||
import cStringIO
|
import cStringIO
|
||||||
|
|
||||||
from calibre.ebooks.pdb.formatwriter import FormatWriter
|
from calibre.ebooks.pdb.formatwriter import FormatWriter
|
||||||
|
@ -6,7 +6,12 @@ __docformat__ = 'restructuredtext en'
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
try:
|
||||||
|
from PIL import Image
|
||||||
|
Image
|
||||||
|
except ImportError:
|
||||||
import Image
|
import Image
|
||||||
|
|
||||||
import cStringIO
|
import cStringIO
|
||||||
|
|
||||||
from calibre.customize.conversion import OutputFormatPlugin
|
from calibre.customize.conversion import OutputFormatPlugin
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import os.path
|
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
__license__ = 'GPL 3'
|
__license__ = 'GPL 3'
|
||||||
@ -9,7 +8,12 @@ import os
|
|||||||
import struct
|
import struct
|
||||||
import zlib
|
import zlib
|
||||||
|
|
||||||
|
try:
|
||||||
|
from PIL import Image
|
||||||
|
Image
|
||||||
|
except ImportError:
|
||||||
import Image
|
import Image
|
||||||
|
|
||||||
import cStringIO
|
import cStringIO
|
||||||
|
|
||||||
from calibre.ebooks.rb.rbml import RBMLizer
|
from calibre.ebooks.rb.rbml import RBMLizer
|
||||||
|
@ -11,7 +11,12 @@ Transform OEB content into RTF markup
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
try:
|
||||||
|
from PIL import Image
|
||||||
|
Image
|
||||||
|
except ImportError:
|
||||||
import Image
|
import Image
|
||||||
|
|
||||||
import cStringIO
|
import cStringIO
|
||||||
|
|
||||||
from calibre.ebooks.oeb.base import XHTML, XHTML_NS, barename, namespace, \
|
from calibre.ebooks.oeb.base import XHTML, XHTML_NS, barename, namespace, \
|
||||||
|
@ -23,7 +23,11 @@ class TXTInput(InputFormatPlugin):
|
|||||||
ienc = options.input_encoding
|
ienc = options.input_encoding
|
||||||
txt = stream.read().decode(ienc)
|
txt = stream.read().decode(ienc)
|
||||||
|
|
||||||
|
try:
|
||||||
html = txt_to_markdown(txt)
|
html = txt_to_markdown(txt)
|
||||||
|
except RuntimeError:
|
||||||
|
raise ValueError('This txt file has malformed markup, it cannot be'
|
||||||
|
'converted by calibre. See http://daringfireball.net/projects/markdown/syntax')
|
||||||
with open('index.html', 'wb') as index:
|
with open('index.html', 'wb') as index:
|
||||||
index.write(html.encode('utf-8'))
|
index.write(html.encode('utf-8'))
|
||||||
|
|
||||||
|
@ -39,9 +39,10 @@ class RecursiveFind(QThread):
|
|||||||
|
|
||||||
class Adder(QObject):
|
class Adder(QObject):
|
||||||
|
|
||||||
def __init__(self, parent, db, callback):
|
def __init__(self, parent, db, callback, spare_server=None):
|
||||||
QObject.__init__(self, parent)
|
QObject.__init__(self, parent)
|
||||||
self.pd = ProgressDialog(_('Adding...'), parent=parent)
|
self.pd = ProgressDialog(_('Adding...'), parent=parent)
|
||||||
|
self.spare_server = spare_server
|
||||||
self.db = db
|
self.db = db
|
||||||
self.pd.setModal(True)
|
self.pd.setModal(True)
|
||||||
self.pd.show()
|
self.pd.show()
|
||||||
@ -79,7 +80,8 @@ class Adder(QObject):
|
|||||||
tasks.append((i, b))
|
tasks.append((i, b))
|
||||||
self.ids[i] = b
|
self.ids[i] = b
|
||||||
self.nmap[i] = os.path.basename(b[0])
|
self.nmap[i] = os.path.basename(b[0])
|
||||||
self.worker = read_metadata(tasks, self.rq)
|
self.worker = read_metadata(tasks, self.rq,
|
||||||
|
spare_server=self.spare_server)
|
||||||
self.pd.set_min(0)
|
self.pd.set_min(0)
|
||||||
self.pd.set_max(len(self.ids))
|
self.pd.set_max(len(self.ids))
|
||||||
self.pd.value = 0
|
self.pd.value = 0
|
||||||
@ -165,9 +167,11 @@ class Adder(QObject):
|
|||||||
class Saver(QObject):
|
class Saver(QObject):
|
||||||
|
|
||||||
def __init__(self, parent, db, callback, rows, path,
|
def __init__(self, parent, db, callback, rows, path,
|
||||||
by_author=False, single_dir=False, single_format=None):
|
by_author=False, single_dir=False, single_format=None,
|
||||||
|
spare_server=None):
|
||||||
QObject.__init__(self, parent)
|
QObject.__init__(self, parent)
|
||||||
self.pd = ProgressDialog(_('Saving...'), parent=parent)
|
self.pd = ProgressDialog(_('Saving...'), parent=parent)
|
||||||
|
self.spare_server = spare_server
|
||||||
self.db = db
|
self.db = db
|
||||||
self.pd.setModal(True)
|
self.pd.setModal(True)
|
||||||
self.pd.show()
|
self.pd.show()
|
||||||
@ -183,7 +187,7 @@ class Saver(QObject):
|
|||||||
|
|
||||||
from calibre.ebooks.metadata.worker import SaveWorker
|
from calibre.ebooks.metadata.worker import SaveWorker
|
||||||
self.worker = SaveWorker(self.rq, db, self.ids, path, by_author,
|
self.worker = SaveWorker(self.rq, db, self.ids, path, by_author,
|
||||||
single_dir, single_format)
|
single_dir, single_format, spare_server=self.spare_server)
|
||||||
self.connect(self.pd, SIGNAL('canceled()'), self.canceled)
|
self.connect(self.pd, SIGNAL('canceled()'), self.canceled)
|
||||||
self.timer = QTimer(self)
|
self.timer = QTimer(self)
|
||||||
self.connect(self.timer, SIGNAL('timeout()'), self.update)
|
self.connect(self.timer, SIGNAL('timeout()'), self.update)
|
||||||
|
@ -13,6 +13,7 @@ from calibre.gui2.convert import Widget
|
|||||||
class PluginWidget(Widget, Ui_Form):
|
class PluginWidget(Widget, Ui_Form):
|
||||||
|
|
||||||
TITLE = _('Comic Input')
|
TITLE = _('Comic Input')
|
||||||
|
HELP = _('Options specific to')+' comic '+_('input')
|
||||||
|
|
||||||
def __init__(self, parent, get_option, get_help, db=None, book_id=None):
|
def __init__(self, parent, get_option, get_help, db=None, book_id=None):
|
||||||
Widget.__init__(self, parent, 'comic_input',
|
Widget.__init__(self, parent, 'comic_input',
|
||||||
|
@ -13,6 +13,7 @@ from calibre.gui2.convert import Widget
|
|||||||
class PluginWidget(Widget, Ui_Form):
|
class PluginWidget(Widget, Ui_Form):
|
||||||
|
|
||||||
TITLE = _('EPUB Output')
|
TITLE = _('EPUB Output')
|
||||||
|
HELP = _('Options specific to')+' EPUB '+_('output')
|
||||||
|
|
||||||
def __init__(self, parent, get_option, get_help, db=None, book_id=None):
|
def __init__(self, parent, get_option, get_help, db=None, book_id=None):
|
||||||
Widget.__init__(self, parent, 'epub_output',
|
Widget.__init__(self, parent, 'epub_output',
|
||||||
|
@ -16,6 +16,7 @@ font_family_model = None
|
|||||||
class PluginWidget(Widget, Ui_Form):
|
class PluginWidget(Widget, Ui_Form):
|
||||||
|
|
||||||
TITLE = _('LRF Output')
|
TITLE = _('LRF Output')
|
||||||
|
HELP = _('Options specific to')+' LRF '+_('output')
|
||||||
|
|
||||||
def __init__(self, parent, get_option, get_help, db=None, book_id=None):
|
def __init__(self, parent, get_option, get_help, db=None, book_id=None):
|
||||||
Widget.__init__(self, parent, 'lrf_output',
|
Widget.__init__(self, parent, 'lrf_output',
|
||||||
|
@ -13,6 +13,8 @@ from calibre.gui2.convert import Widget
|
|||||||
class PluginWidget(Widget, Ui_Form):
|
class PluginWidget(Widget, Ui_Form):
|
||||||
|
|
||||||
TITLE = _('MOBI Output')
|
TITLE = _('MOBI Output')
|
||||||
|
HELP = _('Options specific to')+' MOBI '+_('output')
|
||||||
|
|
||||||
|
|
||||||
def __init__(self, parent, get_option, get_help, db=None, book_id=None):
|
def __init__(self, parent, get_option, get_help, db=None, book_id=None):
|
||||||
Widget.__init__(self, parent, 'mobi_output',
|
Widget.__init__(self, parent, 'mobi_output',
|
||||||
|
@ -49,6 +49,12 @@ class PageSetupWidget(Widget, Ui_Form):
|
|||||||
x.setMouseTracking(True)
|
x.setMouseTracking(True)
|
||||||
self.connect(x, SIGNAL('entered(QModelIndex)'), self.show_desc)
|
self.connect(x, SIGNAL('entered(QModelIndex)'), self.show_desc)
|
||||||
self.initialize_options(get_option, get_help, db, book_id)
|
self.initialize_options(get_option, get_help, db, book_id)
|
||||||
|
it = unicode(self.opt_input_profile.toolTip())
|
||||||
|
self.opt_input_profile.setToolTip('<p>'+it.replace('t.','t.\n<br>'))
|
||||||
|
it = unicode(self.opt_output_profile.toolTip())
|
||||||
|
self.opt_output_profile.setToolTip('<p>'+it.replace('t.','ce.\n<br>'))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def show_desc(self, index):
|
def show_desc(self, index):
|
||||||
desc = index.model().data(index, Qt.StatusTipRole).toString()
|
desc = index.model().data(index, Qt.StatusTipRole).toString()
|
||||||
|
@ -14,6 +14,7 @@ format_model = None
|
|||||||
class PluginWidget(Widget, Ui_Form):
|
class PluginWidget(Widget, Ui_Form):
|
||||||
|
|
||||||
TITLE = _('PDB Output')
|
TITLE = _('PDB Output')
|
||||||
|
HELP = _('Options specific to')+' PDB '+_('output')
|
||||||
|
|
||||||
def __init__(self, parent, get_option, get_help, db=None, book_id=None):
|
def __init__(self, parent, get_option, get_help, db=None, book_id=None):
|
||||||
Widget.__init__(self, parent, 'pdb_output', ['format'])
|
Widget.__init__(self, parent, 'pdb_output', ['format'])
|
||||||
|
@ -15,6 +15,7 @@ orientation_model = None
|
|||||||
class PluginWidget(Widget, Ui_Form):
|
class PluginWidget(Widget, Ui_Form):
|
||||||
|
|
||||||
TITLE = _('PDF Output')
|
TITLE = _('PDF Output')
|
||||||
|
HELP = _('Options specific to')+' PDF '+_('output')
|
||||||
|
|
||||||
def __init__(self, parent, get_option, get_help, db=None, book_id=None):
|
def __init__(self, parent, get_option, get_help, db=None, book_id=None):
|
||||||
Widget.__init__(self, parent, 'pdf_output', ['paper_size', 'orientation'])
|
Widget.__init__(self, parent, 'pdf_output', ['paper_size', 'orientation'])
|
||||||
|
@ -14,6 +14,7 @@ newline_model = None
|
|||||||
class PluginWidget(Widget, Ui_Form):
|
class PluginWidget(Widget, Ui_Form):
|
||||||
|
|
||||||
TITLE = _('TXT Output')
|
TITLE = _('TXT Output')
|
||||||
|
HELP = _('Options specific to')+' TXT '+_('output')
|
||||||
|
|
||||||
def __init__(self, parent, get_option, get_help, db=None, book_id=None):
|
def __init__(self, parent, get_option, get_help, db=None, book_id=None):
|
||||||
Widget.__init__(self, parent, 'txt_output', ['newline'])
|
Widget.__init__(self, parent, 'txt_output', ['newline'])
|
||||||
|
@ -38,7 +38,7 @@ class Wizard(QDialog):
|
|||||||
|
|
||||||
def __init__(self, parent=None):
|
def __init__(self, parent=None):
|
||||||
QDialog.__init__(self, parent)
|
QDialog.__init__(self, parent)
|
||||||
self.resize(400, 300)
|
self.resize(440, 480)
|
||||||
self.verticalLayout = QVBoxLayout(self)
|
self.verticalLayout = QVBoxLayout(self)
|
||||||
self.widget = WizardWidget(self)
|
self.widget = WizardWidget(self)
|
||||||
self.verticalLayout.addWidget(self.widget)
|
self.verticalLayout.addWidget(self.widget)
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<ui version="4.0">
|
<ui version="4.0">
|
||||||
<class>Form</class>
|
<class>Form</class>
|
||||||
<widget class="QWidget" name="Form">
|
<widget class="QWidget" name="Form">
|
||||||
@ -12,8 +13,8 @@
|
|||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Form</string>
|
<string>Form</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout" >
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item row="0" column="0" colspan="2" >
|
<item>
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Match HTML &tags with tag name:</string>
|
<string>Match HTML &tags with tag name:</string>
|
||||||
@ -23,7 +24,7 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="1" column="0" >
|
<item>
|
||||||
<widget class="QComboBox" name="tag">
|
<widget class="QComboBox" name="tag">
|
||||||
<property name="editable">
|
<property name="editable">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
@ -90,7 +91,7 @@
|
|||||||
</item>
|
</item>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0" colspan="2" >
|
<item>
|
||||||
<widget class="QLabel" name="label_2">
|
<widget class="QLabel" name="label_2">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Having the &attribute:</string>
|
<string>Having the &attribute:</string>
|
||||||
@ -100,10 +101,10 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="3" column="0" colspan="2" >
|
<item>
|
||||||
<widget class="QLineEdit" name="attribute"/>
|
<widget class="QLineEdit" name="attribute"/>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="0" >
|
<item>
|
||||||
<widget class="QLabel" name="label_3">
|
<widget class="QLabel" name="label_3">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>With &value:</string>
|
<string>With &value:</string>
|
||||||
@ -113,20 +114,20 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="0" >
|
<item>
|
||||||
<widget class="QLineEdit" name="value" />
|
|
||||||
</item>
|
|
||||||
<item row="5" column="1" >
|
|
||||||
<widget class="QLabel" name="label_4">
|
<widget class="QLabel" name="label_4">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>(A regular expression)</string>
|
<string>(A regular expression)</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="6" column="0" colspan="2" >
|
<item>
|
||||||
|
<widget class="QLineEdit" name="value"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
<widget class="QLabel" name="label_5">
|
<widget class="QLabel" name="label_5">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string><p>For example, to match all h2 tags that have class="chapter", set tag to <i>h2</i>, attribute to <i>class</i> and value to <i>chapter</i>.</p><p>Leaving attribute blank will match any attribute and leaving value blank will match any value. Setting tag to * will match any tag.</p><p>To learn more advanced usage of XPath see the <a href="http://calibre.kovidgoyal.net/user_manual/xpath.html">XPath Tutorial</a>.</string>
|
<string><p>For example, to match all h2 tags that have class="chapter", set tag to <i>h2</i>, attribute to <i>class</i> and value to <i>chapter</i>.</p><p>Leaving attribute blank will match any attribute and leaving value blank will match any value. Setting tag to * will match any tag.</p><p>To learn more advanced usage of XPath see the <a href="http://calibre.kovidgoyal.net/user_manual/xpath.html">XPath Tutorial</a>.</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="wordWrap">
|
<property name="wordWrap">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
@ -136,6 +137,19 @@
|
|||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources/>
|
||||||
|
@ -59,7 +59,6 @@ class ConfigTabs(QTabWidget):
|
|||||||
fromlist=[1])
|
fromlist=[1])
|
||||||
pw = input_widget.PluginWidget
|
pw = input_widget.PluginWidget
|
||||||
pw.ICON = ':/images/forward.svg'
|
pw.ICON = ':/images/forward.svg'
|
||||||
pw.HELP = _('Options specific to the input format.')
|
|
||||||
self.widgets.append(widget_factory(pw))
|
self.widgets.append(widget_factory(pw))
|
||||||
except ImportError:
|
except ImportError:
|
||||||
continue
|
continue
|
||||||
@ -71,14 +70,15 @@ class ConfigTabs(QTabWidget):
|
|||||||
fromlist=[1])
|
fromlist=[1])
|
||||||
pw = output_widget.PluginWidget
|
pw = output_widget.PluginWidget
|
||||||
pw.ICON = ':/images/forward.svg'
|
pw.ICON = ':/images/forward.svg'
|
||||||
pw.HELP = _('Options specific to the input format.')
|
|
||||||
self.widgets.append(widget_factory(pw))
|
self.widgets.append(widget_factory(pw))
|
||||||
except ImportError:
|
except ImportError:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
for widget in self.widgets:
|
for i, widget in enumerate(self.widgets):
|
||||||
self.addTab(widget, widget.TITLE.replace('\n', ' ').replace('&',
|
self.addTab(widget, widget.TITLE.replace('\n', ' ').replace('&',
|
||||||
'&&'))
|
'&&'))
|
||||||
|
self.setTabToolTip(i, widget.HELP if widget.HELP else widget.TITLE)
|
||||||
|
self.setUsesScrollButtons(True)
|
||||||
|
|
||||||
def commit(self):
|
def commit(self):
|
||||||
for widget in self.widgets:
|
for widget in self.widgets:
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>738</width>
|
<width>767</width>
|
||||||
<height>575</height>
|
<height>575</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -9,8 +9,8 @@
|
|||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
width="250"
|
width="150"
|
||||||
height="525"
|
height="350"
|
||||||
id="svg2347"
|
id="svg2347"
|
||||||
sodipodi:version="0.32"
|
sodipodi:version="0.32"
|
||||||
inkscape:version="0.46"
|
inkscape:version="0.46"
|
||||||
@ -1149,7 +1149,7 @@
|
|||||||
<g
|
<g
|
||||||
inkscape:label="Layer 1"
|
inkscape:label="Layer 1"
|
||||||
id="g3155"
|
id="g3155"
|
||||||
transform="matrix(1.9160726,0,0,4.0935085,4.833863,-12.457556)">
|
transform="matrix(1.2103698,0,0,2.7823904,-2.5000367,-12.695448)">
|
||||||
<path
|
<path
|
||||||
sodipodi:nodetypes="ccssssssscsssssssc"
|
sodipodi:nodetypes="ccssssssscsssssssc"
|
||||||
id="path1931"
|
id="path1931"
|
||||||
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 108 KiB |
@ -18,6 +18,7 @@ from calibre import __version__, __appname__, sanitize_file_name, \
|
|||||||
iswindows, isosx, prints, patheq
|
iswindows, isosx, prints, patheq
|
||||||
from calibre.ptempfile import PersistentTemporaryFile
|
from calibre.ptempfile import PersistentTemporaryFile
|
||||||
from calibre.utils.config import prefs, dynamic
|
from calibre.utils.config import prefs, dynamic
|
||||||
|
from calibre.utils.ipc.server import Server
|
||||||
from calibre.gui2 import APP_UID, warning_dialog, choose_files, error_dialog, \
|
from calibre.gui2 import APP_UID, warning_dialog, choose_files, error_dialog, \
|
||||||
initialize_file_icon_provider, question_dialog,\
|
initialize_file_icon_provider, question_dialog,\
|
||||||
pixmap_to_data, choose_dir, ORG_NAME, \
|
pixmap_to_data, choose_dir, ORG_NAME, \
|
||||||
@ -104,10 +105,12 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
|
|
||||||
def __init__(self, listener, opts, actions, parent=None):
|
def __init__(self, listener, opts, actions, parent=None):
|
||||||
self.preferences_action, self.quit_action = actions
|
self.preferences_action, self.quit_action = actions
|
||||||
|
self.spare_servers = []
|
||||||
MainWindow.__init__(self, opts, parent)
|
MainWindow.__init__(self, opts, parent)
|
||||||
# Initialize fontconfig in a separate thread as this can be a lengthy
|
# Initialize fontconfig in a separate thread as this can be a lengthy
|
||||||
# process if run for the first time on this machine
|
# process if run for the first time on this machine
|
||||||
self.fc = __import__('calibre.utils.fontconfig', fromlist=1)
|
from calibre.utils.fonts import fontconfig
|
||||||
|
self.fc = fontconfig
|
||||||
self.listener = Listener(listener)
|
self.listener = Listener(listener)
|
||||||
self.check_messages_timer = QTimer()
|
self.check_messages_timer = QTimer()
|
||||||
self.connect(self.check_messages_timer, SIGNAL('timeout()'),
|
self.connect(self.check_messages_timer, SIGNAL('timeout()'),
|
||||||
@ -459,6 +462,8 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
|
|
||||||
|
|
||||||
self.setMaximumHeight(max_available_height())
|
self.setMaximumHeight(max_available_height())
|
||||||
|
####################### Start spare job server ########################
|
||||||
|
QTimer.singleShot(1000, self.add_spare_server)
|
||||||
|
|
||||||
####################### Setup device detection ########################
|
####################### Setup device detection ########################
|
||||||
self.device_manager = DeviceManager(Dispatcher(self.device_detected),
|
self.device_manager = DeviceManager(Dispatcher(self.device_detected),
|
||||||
@ -489,7 +494,16 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
self.connect(self.action_sync, SIGNAL('triggered(bool)'),
|
self.connect(self.action_sync, SIGNAL('triggered(bool)'),
|
||||||
self._sync_menu.trigger_default)
|
self._sync_menu.trigger_default)
|
||||||
|
|
||||||
|
def add_spare_server(self, *args):
|
||||||
|
self.spare_servers.append(Server())
|
||||||
|
|
||||||
|
@property
|
||||||
|
def spare_server(self):
|
||||||
|
try:
|
||||||
|
QTimer.singleShot(1000, self.add_spare_server)
|
||||||
|
return self.spare_servers.pop()
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
def no_op(self, *args):
|
def no_op(self, *args):
|
||||||
pass
|
pass
|
||||||
@ -729,7 +743,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
from calibre.gui2.add import Adder
|
from calibre.gui2.add import Adder
|
||||||
self._adder = Adder(self,
|
self._adder = Adder(self,
|
||||||
self.library_view.model().db,
|
self.library_view.model().db,
|
||||||
Dispatcher(self._files_added))
|
Dispatcher(self._files_added), spare_server=self.spare_server)
|
||||||
self._adder.add_recursive(root, single)
|
self._adder.add_recursive(root, single)
|
||||||
|
|
||||||
def add_recursive_single(self, checked):
|
def add_recursive_single(self, checked):
|
||||||
@ -792,7 +806,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
self.__adder_func = partial(self._files_added, on_card=on_card)
|
self.__adder_func = partial(self._files_added, on_card=on_card)
|
||||||
self._adder = Adder(self,
|
self._adder = Adder(self,
|
||||||
None if to_device else self.library_view.model().db,
|
None if to_device else self.library_view.model().db,
|
||||||
Dispatcher(self.__adder_func))
|
Dispatcher(self.__adder_func), spare_server=self.spare_server)
|
||||||
self._adder.add(paths)
|
self._adder.add(paths)
|
||||||
|
|
||||||
def _files_added(self, paths=[], names=[], infos=[], on_card=None):
|
def _files_added(self, paths=[], names=[], infos=[], on_card=None):
|
||||||
@ -985,7 +999,8 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
Dispatcher(self._books_saved), rows, path,
|
Dispatcher(self._books_saved), rows, path,
|
||||||
by_author=self.library_view.model().by_author,
|
by_author=self.library_view.model().by_author,
|
||||||
single_dir=single_dir,
|
single_dir=single_dir,
|
||||||
single_format=single_format)
|
single_format=single_format,
|
||||||
|
spare_server=self.spare_server)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
paths = self.current_view().model().paths(rows)
|
paths = self.current_view().model().paths(rows)
|
||||||
@ -1617,6 +1632,8 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
self.check_messages_timer.stop()
|
self.check_messages_timer.stop()
|
||||||
self.listener.close()
|
self.listener.close()
|
||||||
self.job_manager.server.close()
|
self.job_manager.server.close()
|
||||||
|
while self.spare_servers:
|
||||||
|
self.spare_servers.pop().close()
|
||||||
self.device_manager.keep_going = False
|
self.device_manager.keep_going = False
|
||||||
self.cover_cache.stop()
|
self.cover_cache.stop()
|
||||||
self.hide()
|
self.hide()
|
||||||
@ -1735,6 +1752,11 @@ def run_gui(opts, args, actions, listener, app):
|
|||||||
if getattr(main, 'restart_after_quit', False):
|
if getattr(main, 'restart_after_quit', False):
|
||||||
e = sys.executable if getattr(sys, 'froze', False) else sys.argv[0]
|
e = sys.executable if getattr(sys, 'froze', False) else sys.argv[0]
|
||||||
print 'Restarting with:', e, sys.argv
|
print 'Restarting with:', e, sys.argv
|
||||||
|
if hasattr(sys, 'frameworks_dir'):
|
||||||
|
app = os.path.dirname(os.path.dirname(sys.frameworks_dir))
|
||||||
|
import subprocess
|
||||||
|
subprocess.Popen('sleep 3s; open '+app, shell=True)
|
||||||
|
else:
|
||||||
os.execvp(e, sys.argv)
|
os.execvp(e, sys.argv)
|
||||||
else:
|
else:
|
||||||
if iswindows:
|
if iswindows:
|
||||||
@ -1829,7 +1851,9 @@ if __name__ == '__main__':
|
|||||||
logfile = os.path.join(os.path.expanduser('~'), 'calibre.log')
|
logfile = os.path.join(os.path.expanduser('~'), 'calibre.log')
|
||||||
if os.path.exists(logfile):
|
if os.path.exists(logfile):
|
||||||
log = open(logfile).read().decode('utf-8', 'ignore')
|
log = open(logfile).read().decode('utf-8', 'ignore')
|
||||||
d = QErrorMessage(('<b>Error:</b>%s<br><b>Traceback:</b><br>'
|
d = QErrorMessage()
|
||||||
'%s<b>Log:</b><br>%s')%(unicode(err), unicode(tb), log))
|
d.showMessage(('<b>Error:</b>%s<br><b>Traceback:</b><br>'
|
||||||
d.exec_()
|
'%s<b>Log:</b><br>%s')%(unicode(err),
|
||||||
|
unicode(tb).replace('\n', '<br>'),
|
||||||
|
log.replace('\n', '<br>')))
|
||||||
|
|
||||||
|
@ -543,8 +543,9 @@ class EbookViewer(MainWindow, Ui_EbookViewer):
|
|||||||
if isinstance(worker.exception, DRMError):
|
if isinstance(worker.exception, DRMError):
|
||||||
error_dialog(self, _('DRM Error'), _('<p>This book is protected by <a href="%s">DRM</a>')%'http://wiki.mobileread.com/wiki/DRM').exec_()
|
error_dialog(self, _('DRM Error'), _('<p>This book is protected by <a href="%s">DRM</a>')%'http://wiki.mobileread.com/wiki/DRM').exec_()
|
||||||
else:
|
else:
|
||||||
|
r = getattr(worker.exception, 'reason', worker.exception)
|
||||||
error_dialog(self, _('Could not open ebook'),
|
error_dialog(self, _('Could not open ebook'),
|
||||||
unicode(worker.exception.reason), det_msg=worker.traceback, show=True)
|
unicode(r), det_msg=worker.traceback, show=True)
|
||||||
self.close_progress_indicator()
|
self.close_progress_indicator()
|
||||||
else:
|
else:
|
||||||
self.metadata.show_opf(self.iterator.opf)
|
self.metadata.show_opf(self.iterator.opf)
|
||||||
|
@ -16,7 +16,7 @@ from calibre.gui2 import human_readable, NONE, TableView, \
|
|||||||
from calibre.gui2.dialogs.job_view_ui import Ui_Dialog
|
from calibre.gui2.dialogs.job_view_ui import Ui_Dialog
|
||||||
from calibre.gui2.filename_pattern_ui import Ui_Form
|
from calibre.gui2.filename_pattern_ui import Ui_Form
|
||||||
from calibre import fit_image
|
from calibre import fit_image
|
||||||
from calibre.utils.fontconfig import find_font_families
|
from calibre.utils.fonts import fontconfig
|
||||||
from calibre.ebooks.metadata.meta import metadata_from_filename
|
from calibre.ebooks.metadata.meta import metadata_from_filename
|
||||||
from calibre.utils.config import prefs
|
from calibre.utils.config import prefs
|
||||||
|
|
||||||
@ -293,7 +293,7 @@ class FontFamilyModel(QAbstractListModel):
|
|||||||
def __init__(self, *args):
|
def __init__(self, *args):
|
||||||
QAbstractListModel.__init__(self, *args)
|
QAbstractListModel.__init__(self, *args)
|
||||||
try:
|
try:
|
||||||
self.families = find_font_families()
|
self.families = fontconfig.find_font_families()
|
||||||
except:
|
except:
|
||||||
self.families = []
|
self.families = []
|
||||||
print 'WARNING: Could not load fonts'
|
print 'WARNING: Could not load fonts'
|
||||||
|
@ -23,6 +23,7 @@ from calibre.gui2.wizard.library_ui import Ui_WizardPage as LibraryUI
|
|||||||
from calibre.gui2.wizard.finish_ui import Ui_WizardPage as FinishUI
|
from calibre.gui2.wizard.finish_ui import Ui_WizardPage as FinishUI
|
||||||
from calibre.gui2.wizard.kindle_ui import Ui_WizardPage as KindleUI
|
from calibre.gui2.wizard.kindle_ui import Ui_WizardPage as KindleUI
|
||||||
from calibre.gui2.wizard.stanza_ui import Ui_WizardPage as StanzaUI
|
from calibre.gui2.wizard.stanza_ui import Ui_WizardPage as StanzaUI
|
||||||
|
from calibre.gui2 import min_available_height, available_width
|
||||||
|
|
||||||
from calibre.utils.config import dynamic, prefs
|
from calibre.utils.config import dynamic, prefs
|
||||||
from calibre.gui2 import NONE, choose_dir, error_dialog
|
from calibre.gui2 import NONE, choose_dir, error_dialog
|
||||||
@ -62,6 +63,13 @@ class Kindle(Device):
|
|||||||
manufacturer = 'Amazon'
|
manufacturer = 'Amazon'
|
||||||
id = 'kindle'
|
id = 'kindle'
|
||||||
|
|
||||||
|
class KindleDX(Kindle):
|
||||||
|
|
||||||
|
output_profile = 'kindle_dx'
|
||||||
|
output_format = 'MOBI'
|
||||||
|
name = 'Kindle DX'
|
||||||
|
id = 'kindledx'
|
||||||
|
|
||||||
class Sony500(Device):
|
class Sony500(Device):
|
||||||
|
|
||||||
output_profile = 'sony'
|
output_profile = 'sony'
|
||||||
@ -306,7 +314,7 @@ class DevicePage(QWizardPage, DeviceUI):
|
|||||||
def nextId(self):
|
def nextId(self):
|
||||||
idx = list(self.device_view.selectionModel().selectedIndexes())[0]
|
idx = list(self.device_view.selectionModel().selectedIndexes())[0]
|
||||||
dev = self.dev_model.data(idx, Qt.UserRole)
|
dev = self.dev_model.data(idx, Qt.UserRole)
|
||||||
if dev is Kindle:
|
if dev in (Kindle, KindleDX):
|
||||||
return KindlePage.ID
|
return KindlePage.ID
|
||||||
if dev is iPhone:
|
if dev is iPhone:
|
||||||
return StanzaPage.ID
|
return StanzaPage.ID
|
||||||
@ -483,6 +491,15 @@ class Wizard(QWizard):
|
|||||||
self.setPage(self.stanza_page.ID, self.stanza_page)
|
self.setPage(self.stanza_page.ID, self.stanza_page)
|
||||||
|
|
||||||
self.device_extra_page = None
|
self.device_extra_page = None
|
||||||
|
nh, nw = min_available_height()-75, available_width()-30
|
||||||
|
if nh < 0:
|
||||||
|
nh = 580
|
||||||
|
if nw < 0:
|
||||||
|
nw = 400
|
||||||
|
nh = min(400, nh)
|
||||||
|
nw = min(580, nw)
|
||||||
|
self.resize(nw, nh)
|
||||||
|
|
||||||
|
|
||||||
def accept(self):
|
def accept(self):
|
||||||
self.device_page.commit()
|
self.device_page.commit()
|
||||||
|
@ -27,7 +27,6 @@ entry_points = {
|
|||||||
'librarything = calibre.ebooks.metadata.library_thing:main',
|
'librarything = calibre.ebooks.metadata.library_thing:main',
|
||||||
'calibre-debug = calibre.debug:main',
|
'calibre-debug = calibre.debug:main',
|
||||||
'calibredb = calibre.library.cli:main',
|
'calibredb = calibre.library.cli:main',
|
||||||
'calibre-fontconfig = calibre.utils.fontconfig:main',
|
|
||||||
'calibre-parallel = calibre.utils.ipc.worker:main',
|
'calibre-parallel = calibre.utils.ipc.worker:main',
|
||||||
'calibre-customize = calibre.customize.ui:main',
|
'calibre-customize = calibre.customize.ui:main',
|
||||||
'calibre-complete = calibre.utils.complete:main',
|
'calibre-complete = calibre.utils.complete:main',
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: calibre 0.5.14\n"
|
"Project-Id-Version: calibre 0.6.0b1\n"
|
||||||
"POT-Creation-Date: 2009-05-31 09:36+PDT\n"
|
"POT-Creation-Date: 2009-06-02 08:53+PDT\n"
|
||||||
"PO-Revision-Date: 2009-05-31 09:36+PDT\n"
|
"PO-Revision-Date: 2009-06-02 08:53+PDT\n"
|
||||||
"Last-Translator: Automatically generated\n"
|
"Last-Translator: Automatically generated\n"
|
||||||
"Language-Team: LANGUAGE\n"
|
"Language-Team: LANGUAGE\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -48,7 +48,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/mobi.py:153
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/mobi.py:153
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:333
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:333
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:448
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:448
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:866
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:865
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdb.py:39
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdb.py:39
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:58
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:58
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/topaz.py:29
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/topaz.py:29
|
||||||
@ -57,8 +57,8 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:69
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:69
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:78
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:78
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:149
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:149
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:520
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:531
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:704
|
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:715
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:44
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:44
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:46
|
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:46
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:791
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:791
|
||||||
@ -66,8 +66,8 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:162
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:162
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:165
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:165
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:82
|
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:82
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:96
|
#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:101
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:97
|
#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:102
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/input.py:26
|
#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/input.py:26
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/palmdoc/writer.py:28
|
#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/palmdoc/writer.py:28
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ztxt/writer.py:26
|
#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ztxt/writer.py:26
|
||||||
@ -261,31 +261,35 @@ msgstr ""
|
|||||||
msgid "This profile is intended for the SONY PRS line. The 500/505/700 etc, in landscape mode. Mainly useful for comics."
|
msgid "This profile is intended for the SONY PRS line. The 500/505/700 etc, in landscape mode. Mainly useful for comics."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:30
|
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:242
|
||||||
|
msgid "This profile is intended for the Amazon Kindle DX."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:29
|
||||||
msgid "Installed plugins"
|
msgid "Installed plugins"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:31
|
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:30
|
||||||
msgid "Mapping for filetype plugins"
|
msgid "Mapping for filetype plugins"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:32
|
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:31
|
||||||
msgid "Local plugin customization"
|
msgid "Local plugin customization"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:33
|
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:32
|
||||||
msgid "Disabled plugins"
|
msgid "Disabled plugins"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:75
|
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:74
|
||||||
msgid "No valid plugin found in "
|
msgid "No valid plugin found in "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:215
|
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:214
|
||||||
msgid "Initialization of plugin %s failed with traceback:"
|
msgid "Initialization of plugin %s failed with traceback:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:333
|
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:332
|
||||||
msgid ""
|
msgid ""
|
||||||
" %prog options\n"
|
" %prog options\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -293,27 +297,27 @@ msgid ""
|
|||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:339
|
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:338
|
||||||
msgid "Add a plugin by specifying the path to the zip file containing it."
|
msgid "Add a plugin by specifying the path to the zip file containing it."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:341
|
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:340
|
||||||
msgid "Remove a custom plugin by name. Has no effect on builtin plugins"
|
msgid "Remove a custom plugin by name. Has no effect on builtin plugins"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:343
|
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:342
|
||||||
msgid "Customize plugin. Specify name of plugin and customization string separated by a comma."
|
msgid "Customize plugin. Specify name of plugin and customization string separated by a comma."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:345
|
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:344
|
||||||
msgid "List all installed plugins"
|
msgid "List all installed plugins"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:347
|
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:346
|
||||||
msgid "Enable the named plugin"
|
msgid "Enable the named plugin"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:349
|
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:348
|
||||||
msgid "Disable the named plugin"
|
msgid "Disable the named plugin"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -446,7 +450,6 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:110
|
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:110
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:84
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:84
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:86
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:86
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:88
|
|
||||||
msgid "The reader has no storage card in this slot."
|
msgid "The reader has no storage card in this slot."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -489,6 +492,10 @@ msgstr ""
|
|||||||
msgid "Communicate with an eBook reader."
|
msgid "Communicate with an eBook reader."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:88
|
||||||
|
msgid "Selected slot: %s is not supported."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:173
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:173
|
||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:181
|
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:181
|
||||||
msgid "Adding books to device metadata listing..."
|
msgid "Adding books to device metadata listing..."
|
||||||
@ -563,7 +570,7 @@ msgstr ""
|
|||||||
msgid "Page"
|
msgid "Page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:10
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:19
|
||||||
msgid ""
|
msgid ""
|
||||||
"input_file output_file [options]\n"
|
"input_file output_file [options]\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -578,43 +585,43 @@ msgid ""
|
|||||||
"For full documentation of the conversion system see\n"
|
"For full documentation of the conversion system see\n"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:86
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:87
|
||||||
msgid "INPUT OPTIONS"
|
msgid "INPUT OPTIONS"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:87
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:88
|
||||||
msgid "Options to control the processing of the input %s file"
|
msgid "Options to control the processing of the input %s file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:93
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:94
|
||||||
msgid "OUTPUT OPTIONS"
|
msgid "OUTPUT OPTIONS"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:94
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:95
|
||||||
msgid "Options to control the processing of the output %s"
|
msgid "Options to control the processing of the output %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:108
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:109
|
||||||
msgid "Options to control the look and feel of the output"
|
msgid "Options to control the look and feel of the output"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:122
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:123
|
||||||
msgid "Control auto-detection of document structure."
|
msgid "Control auto-detection of document structure."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:132
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:133
|
||||||
msgid "Control the automatic generation of a Table of Contents. By default, if the source file has a Table of Contents, it will be used in preference to the automatically generated one."
|
msgid "Control the automatic generation of a Table of Contents. By default, if the source file has a Table of Contents, it will be used in preference to the automatically generated one."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:142
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:143
|
||||||
msgid "Options to set metadata in the output"
|
msgid "Options to set metadata in the output"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:145
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:146
|
||||||
msgid "Options to help with debugging the conversion"
|
msgid "Options to help with debugging the conversion"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:219
|
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:220
|
||||||
msgid "Output saved to"
|
msgid "Output saved to"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1805,6 +1812,20 @@ msgstr ""
|
|||||||
msgid "Comic Input"
|
msgid "Comic Input"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
|
||||||
|
msgid "input"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:19
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:16
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output.py:17
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output.py:18
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output.py:17
|
||||||
|
msgid "Options specific to"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:76
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:76
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:38
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:38
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:85
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:85
|
||||||
@ -1818,7 +1839,7 @@ msgstr ""
|
|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:61
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:61
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:31
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:31
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_edit_ui.py:41
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_edit_ui.py:41
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:65
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:67
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:53
|
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:53
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:35
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:35
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:96
|
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:96
|
||||||
@ -1884,6 +1905,15 @@ msgstr ""
|
|||||||
msgid "EPUB Output"
|
msgid "EPUB Output"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:19
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:16
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output.py:17
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output.py:18
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output.py:17
|
||||||
|
msgid "output"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:39
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:39
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:513
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:513
|
||||||
msgid "Do not &split on page breaks"
|
msgid "Do not &split on page breaks"
|
||||||
@ -2295,8 +2325,6 @@ msgid "Convert"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:162
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:162
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:62
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:74
|
|
||||||
msgid "Options specific to the input format."
|
msgid "Options specific to the input format."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -2455,71 +2483,71 @@ msgstr ""
|
|||||||
msgid "Use a wizard to help construct the XPath expression"
|
msgid "Use a wizard to help construct the XPath expression"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:66
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:68
|
||||||
msgid "Match HTML &tags with tag name:"
|
msgid "Match HTML &tags with tag name:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:67
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:69
|
||||||
msgid "*"
|
msgid "*"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:68
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:70
|
||||||
msgid "a"
|
msgid "a"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:69
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:71
|
||||||
msgid "br"
|
msgid "br"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:70
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:72
|
||||||
msgid "div"
|
msgid "div"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:71
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:73
|
||||||
msgid "h1"
|
msgid "h1"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:72
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:74
|
||||||
msgid "h2"
|
msgid "h2"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:73
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:75
|
||||||
msgid "h3"
|
msgid "h3"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:74
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:76
|
||||||
msgid "h4"
|
msgid "h4"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:75
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:77
|
||||||
msgid "h5"
|
msgid "h5"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:76
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:78
|
||||||
msgid "h6"
|
msgid "h6"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:77
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:79
|
||||||
msgid "hr"
|
msgid "hr"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:78
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:80
|
||||||
msgid "span"
|
msgid "span"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:79
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:81
|
||||||
msgid "Having the &attribute:"
|
msgid "Having the &attribute:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:80
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:82
|
||||||
msgid "With &value:"
|
msgid "With &value:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:81
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:83
|
||||||
msgid "(A regular expression)"
|
msgid "(A regular expression)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:82
|
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:84
|
||||||
msgid "<p>For example, to match all h2 tags that have class=\"chapter\", set tag to <i>h2</i>, attribute to <i>class</i> and value to <i>chapter</i>.</p><p>Leaving attribute blank will match any attribute and leaving value blank will match any value. Setting tag to * will match any tag.</p><p>To learn more advanced usage of XPath see the <a href=\"http://calibre.kovidgoyal.net/user_manual/xpath.html\">XPath Tutorial</a>."
|
msgid "<p>For example, to match all h2 tags that have class=\"chapter\", set tag to <i>h2</i>, attribute to <i>class</i> and value to <i>chapter</i>.</p><p>Leaving attribute blank will match any attribute and leaving value blank will match any value. Setting tag to * will match any tag.</p><p>To learn more advanced usage of XPath see the <a href=\"http://calibre.kovidgoyal.net/user_manual/xpath.html\">XPath Tutorial</a>."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -2882,12 +2910,12 @@ msgid "Access log:"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:607
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:607
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:513
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:514
|
||||||
msgid "Failed to start content server"
|
msgid "Failed to start content server"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:631
|
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:631
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:423
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:431
|
||||||
msgid "Select location for books"
|
msgid "Select location for books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -4379,137 +4407,137 @@ msgstr ""
|
|||||||
msgid "Save single format to disk..."
|
msgid "Save single format to disk..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:134
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:911
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:912
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:49
|
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:49
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:136
|
||||||
msgid "Error communicating with device"
|
msgid "Error communicating with device"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:149
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:150
|
||||||
msgid "&Restore"
|
msgid "&Restore"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:151
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152
|
||||||
msgid "&Donate to support calibre"
|
msgid "&Donate to support calibre"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:156
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:157
|
||||||
msgid "&Restart"
|
msgid "&Restart"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:182
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:183
|
||||||
msgid "<p>For help visit <a href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>"
|
msgid "<p>For help visit <a href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:185
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:186
|
||||||
msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>"
|
msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:205
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:206
|
||||||
msgid "Edit metadata individually"
|
msgid "Edit metadata individually"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:207
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:208
|
||||||
msgid "Edit metadata in bulk"
|
msgid "Edit metadata in bulk"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:209
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:210
|
||||||
msgid "Download metadata and covers"
|
msgid "Download metadata and covers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:210
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:211
|
||||||
msgid "Download only metadata"
|
msgid "Download only metadata"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:211
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:212
|
||||||
msgid "Download only covers"
|
msgid "Download only covers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:214
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:215
|
||||||
msgid "Add books from a single directory"
|
msgid "Add books from a single directory"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:215
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:216
|
||||||
msgid "Add books from directories, including sub-directories (One book per directory, assumes every ebook file is the same book in a different format)"
|
msgid "Add books from directories, including sub-directories (One book per directory, assumes every ebook file is the same book in a different format)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:218
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:219
|
||||||
msgid "Add books from directories, including sub directories (Multiple books per directory, assumes every ebook file is a different book)"
|
msgid "Add books from directories, including sub directories (Multiple books per directory, assumes every ebook file is a different book)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:254
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:255
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:357
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:357
|
||||||
msgid "Save to disk"
|
msgid "Save to disk"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:255
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:256
|
||||||
msgid "Save to disk in a single directory"
|
msgid "Save to disk in a single directory"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:256
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:257
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1388
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1389
|
||||||
msgid "Save only %s format to disk"
|
msgid "Save only %s format to disk"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:264
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:265
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:363
|
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:363
|
||||||
msgid "View"
|
msgid "View"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:265
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:266
|
||||||
msgid "View specific format"
|
msgid "View specific format"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:291
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:292
|
||||||
msgid "Convert individually"
|
msgid "Convert individually"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:292
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:293
|
||||||
msgid "Bulk convert"
|
msgid "Bulk convert"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:303
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:304
|
||||||
msgid "Run welcome wizard"
|
msgid "Run welcome wizard"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:335
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:336
|
||||||
msgid "Similar books..."
|
msgid "Similar books..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:392
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:393
|
||||||
msgid "Bad database location"
|
msgid "Bad database location"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:395
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:396
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1516
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1517
|
||||||
msgid "Choose a location for your ebook library."
|
msgid "Choose a location for your ebook library."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:557
|
||||||
msgid "Browse by covers"
|
msgid "Browse by covers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:657
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:658
|
||||||
msgid "Device: "
|
msgid "Device: "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:659
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:660
|
||||||
msgid " detected."
|
msgid " detected."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:681
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:682
|
||||||
msgid "Connected "
|
msgid "Connected "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:693
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694
|
||||||
msgid "Device database corrupted"
|
msgid "Device database corrupted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:695
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
" <p>The database of books on the reader is corrupted. Try the following:\n"
|
" <p>The database of books on the reader is corrupted. Try the following:\n"
|
||||||
@ -4520,286 +4548,286 @@ msgid ""
|
|||||||
" "
|
" "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:761
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:804
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:805
|
||||||
msgid "Uploading books to device."
|
msgid "Uploading books to device."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:769
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:770
|
||||||
msgid "Books"
|
msgid "Books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:770
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:771
|
||||||
msgid "EPUB Books"
|
msgid "EPUB Books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:771
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:772
|
||||||
msgid "LRF Books"
|
msgid "LRF Books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:772
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773
|
||||||
msgid "HTML Books"
|
msgid "HTML Books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:774
|
||||||
msgid "LIT Books"
|
msgid "LIT Books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:774
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:775
|
||||||
msgid "MOBI Books"
|
msgid "MOBI Books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:775
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:776
|
||||||
msgid "Text books"
|
msgid "Text books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:776
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:777
|
||||||
msgid "PDF Books"
|
msgid "PDF Books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:777
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:778
|
||||||
msgid "Comics"
|
msgid "Comics"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:778
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:779
|
||||||
msgid "Archives"
|
msgid "Archives"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:825
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:826
|
||||||
msgid "The selected books will be <b>permanently deleted</b> and the files removed from your computer. Are you sure?"
|
msgid "The selected books will be <b>permanently deleted</b> and the files removed from your computer. Are you sure?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:842
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:843
|
||||||
msgid "Deleting books from device."
|
msgid "Deleting books from device."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:873
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:874
|
||||||
msgid "Cannot download metadata"
|
msgid "Cannot download metadata"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:874
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:875
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:924
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:925
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:951
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:952
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:977
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1106
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1107
|
||||||
msgid "No books selected"
|
msgid "No books selected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:883
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:884
|
||||||
msgid "covers"
|
msgid "covers"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:883
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:884
|
||||||
msgid "metadata"
|
msgid "metadata"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:885
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:886
|
||||||
msgid "Downloading %s for %d book(s)"
|
msgid "Downloading %s for %d book(s)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:906
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:907
|
||||||
msgid "Failed to download some metadata"
|
msgid "Failed to download some metadata"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:907
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908
|
||||||
msgid "Failed to download metadata for the following:"
|
msgid "Failed to download metadata for the following:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:911
|
||||||
msgid "Failed to download metadata:"
|
msgid "Failed to download metadata:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:924
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:950
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:951
|
||||||
msgid "Cannot edit metadata"
|
msgid "Cannot edit metadata"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:975
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976
|
||||||
msgid "Cannot save to disk"
|
msgid "Cannot save to disk"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:978
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:979
|
||||||
msgid "Choose destination directory"
|
msgid "Choose destination directory"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1000
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1001
|
||||||
msgid "Error while saving"
|
msgid "Error while saving"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1001
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1002
|
||||||
msgid "There was an error while saving."
|
msgid "There was an error while saving."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1005
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1006
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1006
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1007
|
||||||
msgid "Could not save some books"
|
msgid "Could not save some books"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1007
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1008
|
||||||
msgid "as the %s format is not available for them."
|
msgid "as the %s format is not available for them."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1008
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1009
|
||||||
msgid "Click the show details button to see which ones."
|
msgid "Click the show details button to see which ones."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1027
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1028
|
||||||
msgid "Fetching news from "
|
msgid "Fetching news from "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1040
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1041
|
||||||
msgid " fetched."
|
msgid " fetched."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1105
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1106
|
||||||
msgid "Cannot convert"
|
msgid "Cannot convert"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1282
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1283
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1301
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1302
|
||||||
msgid "No book selected"
|
msgid "No book selected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1282
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1283
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1331
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1332
|
||||||
msgid "Cannot view"
|
msgid "Cannot view"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1288
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1289
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1336
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1337
|
||||||
msgid "Choose the format to view"
|
msgid "Choose the format to view"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1300
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1301
|
||||||
msgid "Cannot open folder"
|
msgid "Cannot open folder"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1332
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1333
|
||||||
msgid "%s has no available formats."
|
msgid "%s has no available formats."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1373
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1374
|
||||||
msgid "Cannot configure"
|
msgid "Cannot configure"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1374
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1375
|
||||||
msgid "Cannot configure while there are running jobs."
|
msgid "Cannot configure while there are running jobs."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1417
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1418
|
||||||
msgid "No detailed info available"
|
msgid "No detailed info available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1418
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1419
|
||||||
msgid "No detailed information is available for books on the device."
|
msgid "No detailed information is available for books on the device."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1466
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1467
|
||||||
msgid "Error talking to device"
|
msgid "Error talking to device"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1467
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1468
|
||||||
msgid "There was a temporary error talking to the device. Please unplug and reconnect the device and or reboot."
|
msgid "There was a temporary error talking to the device. Please unplug and reconnect the device and or reboot."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1484
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1485
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1499
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1500
|
||||||
msgid "Conversion Error"
|
msgid "Conversion Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1485
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1486
|
||||||
msgid "<p>Could not convert: %s<p>It is a <a href=\"%s\">DRM</a>ed book. You must first remove the DRM using 3rd party tools."
|
msgid "<p>Could not convert: %s<p>It is a <a href=\"%s\">DRM</a>ed book. You must first remove the DRM using 3rd party tools."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1500
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1501
|
||||||
msgid "<b>Failed</b>"
|
msgid "<b>Failed</b>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1525
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1526
|
||||||
msgid "Invalid library location"
|
msgid "Invalid library location"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1526
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1527
|
||||||
msgid "Could not access %s. Using %s as the library."
|
msgid "Could not access %s. Using %s as the library."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1574
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1575
|
||||||
msgid "is the result of the efforts of many volunteers from all over the world. If you find it useful, please consider donating to support its development."
|
msgid "is the result of the efforts of many volunteers from all over the world. If you find it useful, please consider donating to support its development."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1598
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1599
|
||||||
msgid "There are active jobs. Are you sure you want to quit?"
|
msgid "There are active jobs. Are you sure you want to quit?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1601
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1602
|
||||||
msgid ""
|
msgid ""
|
||||||
" is communicating with the device!<br>\n"
|
" is communicating with the device!<br>\n"
|
||||||
" Quitting may cause corruption on the device.<br>\n"
|
" Quitting may cause corruption on the device.<br>\n"
|
||||||
" Are you sure you want to quit?"
|
" Are you sure you want to quit?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1605
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1606
|
||||||
msgid "WARNING: Active jobs"
|
msgid "WARNING: Active jobs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1654
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1655
|
||||||
msgid "will keep running in the system tray. To close it, choose <b>Quit</b> in the context menu of the system tray."
|
msgid "will keep running in the system tray. To close it, choose <b>Quit</b> in the context menu of the system tray."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1673
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1674
|
||||||
msgid "<span style=\"color:red; font-weight:bold\">Latest version: <a href=\"%s\">%s</a></span>"
|
msgid "<span style=\"color:red; font-weight:bold\">Latest version: <a href=\"%s\">%s</a></span>"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1681
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1682
|
||||||
msgid "Update available"
|
msgid "Update available"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1682
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1683
|
||||||
msgid "%s has been updated to version %s. See the <a href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. Visit the download page?"
|
msgid "%s has been updated to version %s. See the <a href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. Visit the download page?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1700
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1701
|
||||||
msgid "Use the library located at the specified path."
|
msgid "Use the library located at the specified path."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1702
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1703
|
||||||
msgid "Start minimized to system tray."
|
msgid "Start minimized to system tray."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1704
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1705
|
||||||
msgid "Log debugging information to console"
|
msgid "Log debugging information to console"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1747
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1753
|
||||||
msgid "If you are sure it is not running"
|
msgid "If you are sure it is not running"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1749
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1755
|
||||||
msgid "Cannot Start "
|
msgid "Cannot Start "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1750
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1756
|
||||||
msgid "%s is already running."
|
msgid "%s is already running."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1753
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1759
|
||||||
msgid "may be running in the system tray, in the"
|
msgid "may be running in the system tray, in the"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1755
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1761
|
||||||
msgid "upper right region of the screen."
|
msgid "upper right region of the screen."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1757
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1763
|
||||||
msgid "lower right region of the screen."
|
msgid "lower right region of the screen."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1760
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1766
|
||||||
msgid "try rebooting your computer."
|
msgid "try rebooting your computer."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1762
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1768
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1782
|
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1788
|
||||||
msgid "try deleting the file"
|
msgid "try deleting the file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -5122,7 +5150,7 @@ msgid "Options to customize the ebook viewer"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:57
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:57
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:629
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:630
|
||||||
msgid "Remember last used window size"
|
msgid "Remember last used window size"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -5227,19 +5255,19 @@ msgstr ""
|
|||||||
msgid "DRM Error"
|
msgid "DRM Error"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:546
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:547
|
||||||
msgid "Could not open ebook"
|
msgid "Could not open ebook"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:619
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:620
|
||||||
msgid "Options to control the ebook viewer"
|
msgid "Options to control the ebook viewer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:626
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:627
|
||||||
msgid "If specified, viewer window will try to come to the front when started."
|
msgid "If specified, viewer window will try to come to the front when started."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:635
|
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:636
|
||||||
msgid ""
|
msgid ""
|
||||||
"%prog [options] file\n"
|
"%prog [options] file\n"
|
||||||
"\n"
|
"\n"
|
||||||
@ -5350,39 +5378,39 @@ msgstr ""
|
|||||||
msgid "Click to see the list of books on storage card B in your reader"
|
msgid "Click to see the list of books on storage card B in your reader"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:35
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:36
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:36
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:119
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:37
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:120
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:127
|
||||||
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:128
|
||||||
msgid "Default"
|
msgid "Default"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:325
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:333
|
||||||
msgid "Moving library..."
|
msgid "Moving library..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:341
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:349
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:342
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:350
|
||||||
msgid "Failed to move library"
|
msgid "Failed to move library"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:351
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:359
|
||||||
msgid "Copied"
|
msgid "Copied"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:395
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:403
|
||||||
msgid "Invalid database"
|
msgid "Invalid database"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:396
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:404
|
||||||
msgid "<p>An invalid library already exists at %s, delete it before trying to move the existing library.<br>Error: %s"
|
msgid "<p>An invalid library already exists at %s, delete it before trying to move the existing library.<br>Error: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:407
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:415
|
||||||
msgid "Could not move library"
|
msgid "Could not move library"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:466
|
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:474
|
||||||
msgid "welcome wizard"
|
msgid "welcome wizard"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -5863,10 +5891,6 @@ msgstr ""
|
|||||||
msgid "The priority of worker processes"
|
msgid "The priority of worker processes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/fontconfig.py:180
|
|
||||||
msgid "Could not initialize the fontconfig library"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:39
|
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:39
|
||||||
msgid "Waiting..."
|
msgid "Waiting..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -1,400 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
__license__ = 'GPL v3'
|
|
||||||
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
|
|
||||||
__docformat__ = 'restructuredtext en'
|
|
||||||
|
|
||||||
'''
|
|
||||||
:mod:`fontconfig` -- Query system fonts
|
|
||||||
=============================================
|
|
||||||
.. module:: fontconfig
|
|
||||||
:platform: Unix, Windows, OS X
|
|
||||||
:synopsis: Query system fonts
|
|
||||||
.. moduleauthor:: Kovid Goyal <kovid@kovidgoyal.net>
|
|
||||||
|
|
||||||
A ctypes based wrapper around the `fontconfig <http://fontconfig.org>`_ library.
|
|
||||||
It can be used to find all fonts available on the system as well as the closest
|
|
||||||
match to a given font specification. The main functions in this module are:
|
|
||||||
|
|
||||||
.. autofunction:: find_font_families
|
|
||||||
|
|
||||||
.. autofunction:: files_for_family
|
|
||||||
|
|
||||||
.. autofunction:: match
|
|
||||||
'''
|
|
||||||
|
|
||||||
import sys, os, locale, codecs, subprocess, re
|
|
||||||
from ctypes import cdll, c_void_p, Structure, c_int, POINTER, c_ubyte, c_char, util, \
|
|
||||||
pointer, byref, create_string_buffer, Union, c_char_p, c_double
|
|
||||||
|
|
||||||
try:
|
|
||||||
preferred_encoding = locale.getpreferredencoding()
|
|
||||||
codecs.lookup(preferred_encoding)
|
|
||||||
except:
|
|
||||||
preferred_encoding = 'utf-8'
|
|
||||||
|
|
||||||
iswindows = 'win32' in sys.platform or 'win64' in sys.platform
|
|
||||||
isosx = 'darwin' in sys.platform
|
|
||||||
isbsd = 'bsd' in sys.platform
|
|
||||||
DISABLED = False
|
|
||||||
#if isosx:
|
|
||||||
# libc = ctypes.cdll.LoadLibrary(ctypes.util.find_library('c'))
|
|
||||||
# size = ctypes.c_uint(0)
|
|
||||||
# ok = libc.sysctlbyname("hw.cpu64bit_capable", None, byref(size), None, 0)
|
|
||||||
# if ok != 0:
|
|
||||||
# is64bit = False
|
|
||||||
# else:
|
|
||||||
# buf = ctypes.c_char_p("\0" * size.value)
|
|
||||||
# ok = libc.sysctlbyname("hw.cpu64bit_capable", buf, byref(size), None, 0)
|
|
||||||
# if ok != 0:
|
|
||||||
# is64bit = False
|
|
||||||
# else:
|
|
||||||
# is64bit = '1' in buf.value
|
|
||||||
# DISABLED = is64bit
|
|
||||||
|
|
||||||
def load_library():
|
|
||||||
if isosx:
|
|
||||||
lib = os.path.join(getattr(sys, 'frameworks_dir'), 'libfontconfig.1.dylib') \
|
|
||||||
if hasattr(sys, 'frameworks_dir') else util.find_library('fontconfig')
|
|
||||||
return cdll.LoadLibrary(lib)
|
|
||||||
elif iswindows:
|
|
||||||
return cdll.LoadLibrary('libfontconfig-1')
|
|
||||||
elif isbsd:
|
|
||||||
raw = subprocess.Popen('pkg-config --libs-only-L fontconfig'.split(),
|
|
||||||
stdout=subprocess.PIPE).stdout.read().strip()
|
|
||||||
match = re.search(r'-L([^\s,]+)', raw)
|
|
||||||
if not match:
|
|
||||||
return cdll.LoadLibrary('libfontconfig.so')
|
|
||||||
return cdll.LoadLibrary(match.group(1)+'/libfontconfig.so')
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
return cdll.LoadLibrary(util.find_library('fontconfig'))
|
|
||||||
except:
|
|
||||||
try:
|
|
||||||
return cdll.LoadLibrary('libfontconfig.so')
|
|
||||||
except:
|
|
||||||
return cdll.LoadLibrary('libfontconfig.so.1')
|
|
||||||
|
|
||||||
class FcPattern(Structure):
|
|
||||||
_fields_ = [
|
|
||||||
('num', c_int),
|
|
||||||
('size', c_int),
|
|
||||||
('elts_offset', c_void_p),
|
|
||||||
('ref', c_int)
|
|
||||||
]
|
|
||||||
class FcFontSet(Structure):
|
|
||||||
_fields_ = [
|
|
||||||
('nfont', c_int),
|
|
||||||
('sfont', c_int),
|
|
||||||
('fonts', POINTER(POINTER(FcPattern)))
|
|
||||||
]
|
|
||||||
(
|
|
||||||
FcTypeVoid,
|
|
||||||
FcTypeInteger,
|
|
||||||
FcTypeDouble,
|
|
||||||
FcTypeString,
|
|
||||||
FcTypeBool,
|
|
||||||
FcTypeMatrix,
|
|
||||||
FcTypeCharSet,
|
|
||||||
FcTypeFTFace,
|
|
||||||
FcTypeLangSet
|
|
||||||
) = map(c_int, range(9))
|
|
||||||
(FcMatchPattern, FcMatchFont, FcMatchScan) = map(c_int, range(3))
|
|
||||||
(
|
|
||||||
FcResultMatch, FcResultNoMatch, FcResultTypeMismatch, FcResultNoId,
|
|
||||||
FcResultOutOfMemory
|
|
||||||
) = map(c_int, range(5))
|
|
||||||
FcFalse, FcTrue = c_int(0), c_int(1)
|
|
||||||
|
|
||||||
class _FcValue(Union):
|
|
||||||
_fields_ = [
|
|
||||||
('s', c_char_p),
|
|
||||||
('i', c_int),
|
|
||||||
('b', c_int),
|
|
||||||
('d', c_double),
|
|
||||||
]
|
|
||||||
|
|
||||||
class FcValue(Structure):
|
|
||||||
_fields_ = [
|
|
||||||
('type', c_int),
|
|
||||||
('u', _FcValue)
|
|
||||||
]
|
|
||||||
|
|
||||||
class FcObjectSet(Structure): pass
|
|
||||||
|
|
||||||
lib = load_library()
|
|
||||||
lib.FcPatternBuild.restype = POINTER(FcPattern)
|
|
||||||
lib.FcPatternCreate.restype = c_void_p
|
|
||||||
lib.FcObjectSetCreate.restype = POINTER(FcObjectSet)
|
|
||||||
lib.FcFontSetDestroy.argtypes = [POINTER(FcFontSet)]
|
|
||||||
lib.FcFontList.restype = POINTER(FcFontSet)
|
|
||||||
lib.FcNameUnparse.argtypes = [POINTER(FcPattern)]
|
|
||||||
lib.FcNameUnparse.restype = POINTER(c_ubyte)
|
|
||||||
lib.FcPatternGetString.argtypes = [POINTER(FcPattern), POINTER(c_char), c_int, c_void_p]
|
|
||||||
lib.FcPatternGetString.restype = c_int
|
|
||||||
lib.FcPatternAdd.argtypes = [c_void_p, POINTER(c_char), FcValue, c_int]
|
|
||||||
lib.FcPatternGetInteger.argtypes = [POINTER(FcPattern), POINTER(c_char), c_int, POINTER(c_int)]
|
|
||||||
lib.FcPatternGetInteger.restype = c_int
|
|
||||||
lib.FcNameParse.argtypes = [c_char_p]
|
|
||||||
lib.FcNameParse.restype = POINTER(FcPattern)
|
|
||||||
lib.FcDefaultSubstitute.argtypes = [POINTER(FcPattern)]
|
|
||||||
lib.FcConfigSubstitute.argtypes = [c_void_p, POINTER(FcPattern), c_int]
|
|
||||||
lib.FcFontSetCreate.restype = POINTER(FcFontSet)
|
|
||||||
lib.FcFontMatch.argtypes = [c_void_p, POINTER(FcPattern), POINTER(c_int)]
|
|
||||||
lib.FcFontMatch.restype = POINTER(FcPattern)
|
|
||||||
lib.FcFontSetAdd.argtypes = [POINTER(FcFontSet), POINTER(FcPattern)]
|
|
||||||
lib.FcFontSort.argtypes = [c_void_p, POINTER(FcPattern), c_int, c_void_p, POINTER(c_int)]
|
|
||||||
lib.FcFontSort.restype = POINTER(FcFontSet)
|
|
||||||
lib.FcFontRenderPrepare.argtypes = [c_void_p, POINTER(FcPattern), POINTER(FcPattern)]
|
|
||||||
lib.FcFontRenderPrepare.restype = POINTER(FcPattern)
|
|
||||||
lib.FcConfigCreate.restype = c_void_p
|
|
||||||
lib.FcConfigSetCurrent.argtypes = [c_void_p]
|
|
||||||
lib.FcConfigSetCurrent.restype = c_int
|
|
||||||
lib.FcConfigParseAndLoad.argtypes = [c_void_p, POINTER(c_char), c_int]
|
|
||||||
lib.FcConfigParseAndLoad.restype = c_int
|
|
||||||
lib.FcConfigBuildFonts.argtypes = [c_void_p]
|
|
||||||
lib.FcConfigBuildFonts.restype = c_int
|
|
||||||
|
|
||||||
_init_error = None
|
|
||||||
_initialized = False
|
|
||||||
from threading import Thread
|
|
||||||
|
|
||||||
class FontScanner(Thread):
|
|
||||||
def run(self):
|
|
||||||
# Initialize the fontconfig library. This has to be done manually
|
|
||||||
# for the OS X bundle as it may have its own private fontconfig.
|
|
||||||
if getattr(sys, 'frameworks_dir', False):# and not os.path.exists('/usr/X11/lib/libfontconfig.1.dylib'):
|
|
||||||
config_dir = os.path.join(os.path.dirname(getattr(sys, 'frameworks_dir')), 'Resources', 'fonts')
|
|
||||||
if isinstance(config_dir, unicode):
|
|
||||||
config_dir = config_dir.encode(sys.getfilesystemencoding())
|
|
||||||
config = lib.FcConfigCreate()
|
|
||||||
if not lib.FcConfigParseAndLoad(config, os.path.join(config_dir, 'fonts.conf'), 1):
|
|
||||||
_init_error = 'Could not parse the fontconfig configuration'
|
|
||||||
return
|
|
||||||
if not lib.FcConfigBuildFonts(config):
|
|
||||||
_init_error = 'Could not build fonts'
|
|
||||||
return
|
|
||||||
if not lib.FcConfigSetCurrent(config):
|
|
||||||
_init_error = 'Could not set font config'
|
|
||||||
return
|
|
||||||
elif not lib.FcInit():
|
|
||||||
_init_error = _('Could not initialize the fontconfig library')
|
|
||||||
return
|
|
||||||
global _initialized
|
|
||||||
_initialized = True
|
|
||||||
|
|
||||||
if not DISABLED:
|
|
||||||
_scanner = FontScanner()
|
|
||||||
_scanner.start()
|
|
||||||
|
|
||||||
def join():
|
|
||||||
_scanner.join(120)
|
|
||||||
if _scanner.isAlive():
|
|
||||||
raise RuntimeError('Scanning for system fonts seems to have hung. Try again in a little while.')
|
|
||||||
if _init_error is not None:
|
|
||||||
raise RuntimeError(_init_error)
|
|
||||||
|
|
||||||
def find_font_families(allowed_extensions=['ttf', 'otf']):
|
|
||||||
'''
|
|
||||||
Return an alphabetically sorted list of font families available on the system.
|
|
||||||
|
|
||||||
`allowed_extensions`: A list of allowed extensions for font file types. Defaults to
|
|
||||||
`['ttf', 'otf']`. If it is empty, it is ignored.
|
|
||||||
'''
|
|
||||||
if DISABLED:
|
|
||||||
return []
|
|
||||||
join()
|
|
||||||
allowed_extensions = [i.lower() for i in allowed_extensions]
|
|
||||||
|
|
||||||
empty_pattern = lib.FcPatternCreate()
|
|
||||||
oset = lib.FcObjectSetCreate()
|
|
||||||
if not lib.FcObjectSetAdd(oset, 'file'):
|
|
||||||
raise RuntimeError('Allocation failure')
|
|
||||||
if not lib.FcObjectSetAdd(oset, 'family'):
|
|
||||||
raise RuntimeError('Allocation failure')
|
|
||||||
fs = lib.FcFontList(0, empty_pattern, oset)
|
|
||||||
font_set = fs.contents
|
|
||||||
file = pointer(create_string_buffer(chr(0), 5000))
|
|
||||||
family = pointer(create_string_buffer(chr(0), 200))
|
|
||||||
font_families = []
|
|
||||||
for i in range(font_set.nfont):
|
|
||||||
pat = font_set.fonts[i]
|
|
||||||
if lib.FcPatternGetString(pat, 'file', 0, byref(file)) != FcResultMatch.value:
|
|
||||||
raise RuntimeError('Error processing pattern')
|
|
||||||
path = str(file.contents.value)
|
|
||||||
ext = os.path.splitext(path)[1]
|
|
||||||
if ext:
|
|
||||||
ext = ext[1:].lower()
|
|
||||||
if (not allowed_extensions) or (allowed_extensions and ext in allowed_extensions):
|
|
||||||
if lib.FcPatternGetString(pat, 'family', 0, byref(family)) != FcResultMatch.value:
|
|
||||||
raise RuntimeError('Error processing pattern')
|
|
||||||
font_families.append(str(family.contents.value))
|
|
||||||
|
|
||||||
lib.FcObjectSetDestroy(oset)
|
|
||||||
lib.FcPatternDestroy(empty_pattern)
|
|
||||||
lib.FcFontSetDestroy(fs)
|
|
||||||
font_families = list(set(font_families))
|
|
||||||
font_families.sort()
|
|
||||||
return font_families
|
|
||||||
|
|
||||||
def files_for_family(family, normalize=True):
|
|
||||||
'''
|
|
||||||
Find all the variants in the font family `family`.
|
|
||||||
Returns a dictionary of tuples. Each tuple is of the form (Full font name, path to font file).
|
|
||||||
The keys of the dictionary depend on `normalize`. If `normalize` is `False`,
|
|
||||||
they are a tuple (slant, weight) otherwise they are strings from the set
|
|
||||||
`('normal', 'bold', 'italic', 'bi', 'light', 'li')`
|
|
||||||
'''
|
|
||||||
if DISABLED:
|
|
||||||
return {}
|
|
||||||
join()
|
|
||||||
if isinstance(family, unicode):
|
|
||||||
family = family.encode(preferred_encoding)
|
|
||||||
family_pattern = lib.FcPatternBuild(0, 'family', FcTypeString, family, None)
|
|
||||||
if not family_pattern:
|
|
||||||
raise RuntimeError('Allocation failure')
|
|
||||||
#lib.FcPatternPrint(family_pattern)
|
|
||||||
oset = lib.FcObjectSetCreate()
|
|
||||||
if not lib.FcObjectSetAdd(oset, 'file'):
|
|
||||||
raise RuntimeError('Allocation failure')
|
|
||||||
if not lib.FcObjectSetAdd(oset, 'weight'):
|
|
||||||
raise RuntimeError('Allocation failure')
|
|
||||||
if not lib.FcObjectSetAdd(oset, 'fullname'):
|
|
||||||
raise RuntimeError('Allocation failure')
|
|
||||||
if not lib.FcObjectSetAdd(oset, 'slant'):
|
|
||||||
raise RuntimeError('Allocation failure')
|
|
||||||
if not lib.FcObjectSetAdd(oset, 'style'):
|
|
||||||
raise RuntimeError('Allocation failure')
|
|
||||||
fonts = {}
|
|
||||||
fs = lib.FcFontList(0, family_pattern, oset)
|
|
||||||
font_set = fs.contents
|
|
||||||
file = pointer(create_string_buffer(5000))
|
|
||||||
full_name = pointer(create_string_buffer(200))
|
|
||||||
weight = c_int(0)
|
|
||||||
slant = c_int(0)
|
|
||||||
fname = ''
|
|
||||||
for i in range(font_set.nfont):
|
|
||||||
pat = font_set.fonts[i]
|
|
||||||
#lib.FcPatternPrint(pat)
|
|
||||||
pat = font_set.fonts[i]
|
|
||||||
if lib.FcPatternGetString(pat, 'file', 0, byref(file)) != FcResultMatch.value:
|
|
||||||
raise RuntimeError('Error processing pattern')
|
|
||||||
if lib.FcPatternGetInteger(pat, 'weight', 0, byref(weight)) != FcResultMatch.value:
|
|
||||||
raise RuntimeError('Error processing pattern')
|
|
||||||
if lib.FcPatternGetString(pat, 'fullname', 0, byref(full_name)) != FcResultMatch.value:
|
|
||||||
if lib.FcPatternGetString(pat, 'fullname', 0, byref(full_name)) == FcResultNoMatch.value:
|
|
||||||
if lib.FcPatternGetString(pat, 'style', 0, byref(full_name)) != FcResultMatch.value:
|
|
||||||
raise RuntimeError('Error processing pattern')
|
|
||||||
fname = family + ' ' + full_name.contents.value
|
|
||||||
else:
|
|
||||||
raise RuntimeError('Error processing pattern')
|
|
||||||
else:
|
|
||||||
fname = full_name.contents.value
|
|
||||||
if lib.FcPatternGetInteger(pat, 'slant', 0, byref(slant)) != FcResultMatch.value:
|
|
||||||
raise RuntimeError('Error processing pattern')
|
|
||||||
style = (slant.value, weight.value)
|
|
||||||
if normalize:
|
|
||||||
italic = slant.value > 0
|
|
||||||
normal = weight.value == 80
|
|
||||||
bold = weight.value > 80
|
|
||||||
if italic:
|
|
||||||
style = 'italic' if normal else 'bi' if bold else 'li'
|
|
||||||
else:
|
|
||||||
style = 'normal' if normal else 'bold' if bold else 'light'
|
|
||||||
fonts[style] = (file.contents.value, fname)
|
|
||||||
lib.FcObjectSetDestroy(oset)
|
|
||||||
lib.FcPatternDestroy(family_pattern)
|
|
||||||
if not iswindows:
|
|
||||||
lib.FcFontSetDestroy(fs)
|
|
||||||
|
|
||||||
return fonts
|
|
||||||
|
|
||||||
def match(name, sort=False, verbose=False):
|
|
||||||
'''
|
|
||||||
Find the system font that most closely matches `name`, where `name` is a specification
|
|
||||||
of the form::
|
|
||||||
familyname-<pointsize>:<property1=value1>:<property2=value2>...
|
|
||||||
|
|
||||||
For example, `verdana:weight=bold:slant=italic`
|
|
||||||
|
|
||||||
Returns a list of dictionaries. Each dictionary has the keys: 'weight', 'slant', 'family', 'file'
|
|
||||||
|
|
||||||
`sort`: If `True` return a sorted list of matching fonts, where the sort id in order of
|
|
||||||
decreasing closeness of matching.
|
|
||||||
`verbose`: If `True` print debugging information to stdout
|
|
||||||
'''
|
|
||||||
if DISABLED:
|
|
||||||
return []
|
|
||||||
join()
|
|
||||||
if isinstance(name, unicode):
|
|
||||||
name = name.encode(preferred_encoding)
|
|
||||||
pat = lib.FcNameParse(name)
|
|
||||||
if not pat:
|
|
||||||
raise ValueError('Could not parse font name')
|
|
||||||
if verbose:
|
|
||||||
print 'Searching for pattern'
|
|
||||||
lib.FcPatternPrint(pat)
|
|
||||||
if not lib.FcConfigSubstitute(0, pat, FcMatchPattern):
|
|
||||||
raise RuntimeError('Allocation failure')
|
|
||||||
lib.FcDefaultSubstitute(pat)
|
|
||||||
fs = lib.FcFontSetCreate()
|
|
||||||
result = c_int(0)
|
|
||||||
matches = []
|
|
||||||
if sort:
|
|
||||||
font_patterns = lib.FcFontSort(0, pat, FcFalse, 0, byref(result))
|
|
||||||
if not font_patterns:
|
|
||||||
raise RuntimeError('Allocation failed')
|
|
||||||
fps = font_patterns.contents
|
|
||||||
for j in range(fps.nfont):
|
|
||||||
fpat = fps.fonts[j]
|
|
||||||
fp = lib.FcFontRenderPrepare(0, pat, fpat)
|
|
||||||
if fp:
|
|
||||||
lib.FcFontSetAdd(fs, fp)
|
|
||||||
lib.FcFontSetDestroy(font_patterns)
|
|
||||||
else:
|
|
||||||
match_pat = lib.FcFontMatch(0, pat, byref(result))
|
|
||||||
if pat:
|
|
||||||
lib.FcFontSetAdd(fs, match_pat)
|
|
||||||
if result.value != FcResultMatch.value:
|
|
||||||
lib.FcPatternDestroy(pat)
|
|
||||||
return matches
|
|
||||||
font_set = fs.contents
|
|
||||||
|
|
||||||
file = pointer(create_string_buffer(chr(0), 5000))
|
|
||||||
family = pointer(create_string_buffer(chr(0), 200))
|
|
||||||
weight = c_int(0)
|
|
||||||
slant = c_int(0)
|
|
||||||
for j in range(font_set.nfont):
|
|
||||||
fpat = font_set.fonts[j]
|
|
||||||
#lib.FcPatternPrint(fpat)
|
|
||||||
if lib.FcPatternGetString(fpat, 'file', 0, byref(file)) != FcResultMatch.value:
|
|
||||||
raise RuntimeError('Error processing pattern')
|
|
||||||
if lib.FcPatternGetString(fpat, 'family', 0, byref(family)) != FcResultMatch.value:
|
|
||||||
raise RuntimeError('Error processing pattern')
|
|
||||||
if lib.FcPatternGetInteger(fpat, 'weight', 0, byref(weight)) != FcResultMatch.value:
|
|
||||||
raise RuntimeError('Error processing pattern')
|
|
||||||
if lib.FcPatternGetInteger(fpat, 'slant', 0, byref(slant)) != FcResultMatch.value:
|
|
||||||
raise RuntimeError('Error processing pattern')
|
|
||||||
|
|
||||||
matches.append({
|
|
||||||
'file' : file.contents.value,
|
|
||||||
'family' : family.contents.value,
|
|
||||||
'weight' : weight.value,
|
|
||||||
'slant' : slant.value,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
lib.FcPatternDestroy(pat)
|
|
||||||
lib.FcFontSetDestroy(fs)
|
|
||||||
return matches
|
|
||||||
|
|
||||||
def main(args=sys.argv):
|
|
||||||
print find_font_families()
|
|
||||||
if len(args) > 1:
|
|
||||||
print
|
|
||||||
print files_for_family(args[1])
|
|
||||||
print
|
|
||||||
print match(args[1], verbose=True)
|
|
||||||
return 0
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.exit(main())
|
|
150
src/calibre/utils/fonts/__init__.py
Normal file
150
src/calibre/utils/fonts/__init__.py
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
|
||||||
|
from __future__ import with_statement
|
||||||
|
|
||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
||||||
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
|
import os, sys
|
||||||
|
from threading import Thread
|
||||||
|
|
||||||
|
from calibre.constants import plugins
|
||||||
|
|
||||||
|
_fc, _fc_err = plugins['fontconfig']
|
||||||
|
|
||||||
|
if _fc is None:
|
||||||
|
raise RuntimeError('Failed to load fontconfig with error:'+_fc_err)
|
||||||
|
|
||||||
|
class FontConfig(Thread):
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
Thread.__init__(self)
|
||||||
|
self.daemon = True
|
||||||
|
self.failed = False
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
config = None
|
||||||
|
if getattr(sys, 'frameworks_dir', False):
|
||||||
|
config_dir = os.path.join(os.path.dirname(
|
||||||
|
getattr(sys, 'frameworks_dir')), 'Resources', 'fonts')
|
||||||
|
if isinstance(config_dir, unicode):
|
||||||
|
config_dir = config_dir.encode(sys.getfilesystemencoding())
|
||||||
|
config = os.path.join(config_dir, 'fonts.conf')
|
||||||
|
try:
|
||||||
|
_fc.initialize(config)
|
||||||
|
except:
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
self.failed = True
|
||||||
|
|
||||||
|
def wait(self):
|
||||||
|
self.join()
|
||||||
|
if self.failed:
|
||||||
|
raise RuntimeError('Failed to initialize fontconfig')
|
||||||
|
|
||||||
|
def find_font_families(self, allowed_extensions=['ttf', 'otf']):
|
||||||
|
'''
|
||||||
|
Return an alphabetically sorted list of font families available on the system.
|
||||||
|
|
||||||
|
`allowed_extensions`: A list of allowed extensions for font file types. Defaults to
|
||||||
|
`['ttf', 'otf']`. If it is empty, it is ignored.
|
||||||
|
'''
|
||||||
|
self.wait()
|
||||||
|
ans = _fc.find_font_families([bytes('.'+x) for x in allowed_extensions])
|
||||||
|
ans = sorted(set(ans), cmp=lambda x,y:cmp(x.lower(), y.lower()))
|
||||||
|
ans2 = []
|
||||||
|
for x in ans:
|
||||||
|
try:
|
||||||
|
ans2.append(x.decode('utf-8'))
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
continue
|
||||||
|
return ans2
|
||||||
|
|
||||||
|
def files_for_family(self, family, normalize=True):
|
||||||
|
'''
|
||||||
|
Find all the variants in the font family `family`.
|
||||||
|
Returns a dictionary of tuples. Each tuple is of the form (Full font name, path to font file).
|
||||||
|
The keys of the dictionary depend on `normalize`. If `normalize` is `False`,
|
||||||
|
they are a tuple (slant, weight) otherwise they are strings from the set
|
||||||
|
`('normal', 'bold', 'italic', 'bi', 'light', 'li')`
|
||||||
|
'''
|
||||||
|
self.wait()
|
||||||
|
if isinstance(family, unicode):
|
||||||
|
family = family.encode('utf-8')
|
||||||
|
fonts = {}
|
||||||
|
ofamily = str(family).decode('utf-8')
|
||||||
|
for fullname, path, style, nfamily, weight, slant in \
|
||||||
|
_fc.files_for_family(str(family)):
|
||||||
|
style = (slant, weight)
|
||||||
|
if normalize:
|
||||||
|
italic = slant > 0
|
||||||
|
normal = weight == 80
|
||||||
|
bold = weight > 80
|
||||||
|
if italic:
|
||||||
|
style = 'italic' if normal else 'bi' if bold else 'li'
|
||||||
|
else:
|
||||||
|
style = 'normal' if normal else 'bold' if bold else 'light'
|
||||||
|
try:
|
||||||
|
fullname, path = fullname.decode('utf-8'), path.decode('utf-8')
|
||||||
|
nfamily = nfamily.decode('utf-8')
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
continue
|
||||||
|
if style in fonts:
|
||||||
|
if nfamily.lower().strip() == ofamily.lower().strip() \
|
||||||
|
and 'Condensed' not in fullname and 'ExtraLight' not in fullname:
|
||||||
|
fonts[style] = (path, fullname)
|
||||||
|
else:
|
||||||
|
fonts[style] = (path, fullname)
|
||||||
|
|
||||||
|
return fonts
|
||||||
|
|
||||||
|
def match(self, name, all=False, verbose=False):
|
||||||
|
'''
|
||||||
|
Find the system font that most closely matches `name`, where `name` is a specification
|
||||||
|
of the form::
|
||||||
|
familyname-<pointsize>:<property1=value1>:<property2=value2>...
|
||||||
|
|
||||||
|
For example, `verdana:weight=bold:slant=italic`
|
||||||
|
|
||||||
|
Returns a list of dictionaries, or a single dictionary.
|
||||||
|
Each dictionary has the keys:
|
||||||
|
'weight', 'slant', 'family', 'file', 'fullname', 'style'
|
||||||
|
|
||||||
|
`all`: If `True` return a sorted list of matching fonts, where the sort
|
||||||
|
is in order of decreasing closeness of matching. If `False` only the
|
||||||
|
best match is returned. '''
|
||||||
|
self.wait()
|
||||||
|
if isinstance(name, unicode):
|
||||||
|
name = name.encode('utf-8')
|
||||||
|
fonts = []
|
||||||
|
for fullname, path, style, family, weight, slant in \
|
||||||
|
_fc.match(str(name), bool(all), bool(verbose)):
|
||||||
|
try:
|
||||||
|
fullname = fullname.decode('utf-8')
|
||||||
|
path = path.decode('utf-8')
|
||||||
|
style = style.decode('utf-8')
|
||||||
|
family = family.decode('utf-8')
|
||||||
|
fonts.append({
|
||||||
|
'fullname' : fullname,
|
||||||
|
'path' : path,
|
||||||
|
'style' : style,
|
||||||
|
'family' : family,
|
||||||
|
'weight' : weight,
|
||||||
|
'slant' : slant
|
||||||
|
})
|
||||||
|
except UnicodeDecodeError:
|
||||||
|
continue
|
||||||
|
return fonts if all else (fonts[0] if fonts else None)
|
||||||
|
|
||||||
|
fontconfig = FontConfig()
|
||||||
|
fontconfig.start()
|
||||||
|
|
||||||
|
def test():
|
||||||
|
from pprint import pprint;
|
||||||
|
pprint(fontconfig.find_font_families());
|
||||||
|
pprint(fontconfig.files_for_family('liberation serif'));
|
||||||
|
pprint(fontconfig.match('liberation serif:slant=italic:weight=bold', verbose=True))
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
test()
|
331
src/calibre/utils/fonts/fontconfig.c
Normal file
331
src/calibre/utils/fonts/fontconfig.c
Normal file
@ -0,0 +1,331 @@
|
|||||||
|
/*
|
||||||
|
:mod:`fontconfig` -- Pythonic interface to fontconfig
|
||||||
|
=====================================================
|
||||||
|
|
||||||
|
.. module:: fontconfig
|
||||||
|
:platform: All
|
||||||
|
:synopsis: Pythonic interface to the fontconfig library
|
||||||
|
|
||||||
|
.. moduleauthor:: Kovid Goyal <kovid@kovidgoyal.net> Copyright 2009
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define PY_SSIZE_T_CLEAN
|
||||||
|
#include <Python.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <fontconfig.h>
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
fontconfig_initialize(PyObject *self, PyObject *args) {
|
||||||
|
char *path;
|
||||||
|
FcBool ok;
|
||||||
|
FcConfig *config;
|
||||||
|
PyThreadState *_save;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, "z", &path))
|
||||||
|
return NULL;
|
||||||
|
if (path == NULL) {
|
||||||
|
_save = PyEval_SaveThread();
|
||||||
|
ok = FcInit();
|
||||||
|
PyEval_RestoreThread(_save);
|
||||||
|
} else {
|
||||||
|
config = FcConfigCreate();
|
||||||
|
if (config == NULL) return PyErr_NoMemory();
|
||||||
|
_save = PyEval_SaveThread();
|
||||||
|
ok = FcConfigParseAndLoad(config, path, FcTrue);
|
||||||
|
if (ok) ok = FcConfigBuildFonts(config);
|
||||||
|
if (ok) ok = FcConfigSetCurrent(config);
|
||||||
|
PyEval_RestoreThread(_save);
|
||||||
|
if (!ok) return PyErr_NoMemory();
|
||||||
|
ok = 1;
|
||||||
|
}
|
||||||
|
if (ok) Py_RETURN_TRUE;
|
||||||
|
Py_RETURN_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
fontconfig_cleanup_find(FcPattern *p, FcObjectSet *oset, FcFontSet *fs) {
|
||||||
|
if (p != NULL) FcPatternDestroy(p);
|
||||||
|
if (oset != NULL) FcObjectSetDestroy(oset);
|
||||||
|
if (fs != NULL) FcFontSetDestroy(fs);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
fontconfig_find_font_families(PyObject *self, PyObject *args) {
|
||||||
|
int i;
|
||||||
|
size_t flen;
|
||||||
|
char *ext;
|
||||||
|
Py_ssize_t l, j, extlen;
|
||||||
|
FcBool ok;
|
||||||
|
FcPattern *pat, *temp;
|
||||||
|
FcObjectSet *oset;
|
||||||
|
FcFontSet *fs;
|
||||||
|
FcValue v, w;
|
||||||
|
PyObject *ans, *exts, *t;
|
||||||
|
|
||||||
|
ans = PyList_New(0);
|
||||||
|
fs = NULL; oset = NULL; pat = NULL;
|
||||||
|
|
||||||
|
if (ans == NULL) return PyErr_NoMemory();
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, "O", &exts))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
if (!PySequence_Check(exts)) {
|
||||||
|
PyErr_SetString(PyExc_ValueError, "Must pass sequence of extensions");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
l = PySequence_Size(exts);
|
||||||
|
|
||||||
|
|
||||||
|
pat = FcPatternCreate();
|
||||||
|
if (pat == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
|
||||||
|
oset = FcObjectSetCreate();
|
||||||
|
if (oset == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
if (!FcObjectSetAdd(oset, FC_FILE)) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
if (!FcObjectSetAdd(oset, FC_FAMILY)) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
|
||||||
|
fs = FcFontList(FcConfigGetCurrent(), pat, oset);
|
||||||
|
if (fs == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
|
||||||
|
for (i = 0; i < fs->nfont; i++) {
|
||||||
|
temp = fs->fonts[i];
|
||||||
|
|
||||||
|
if (temp == NULL) continue;
|
||||||
|
if (FcPatternGet(temp, FC_FILE, 0, &v) != FcResultMatch) continue;
|
||||||
|
|
||||||
|
if (v.type == FcTypeString) {
|
||||||
|
flen = strlen((char *)v.u.s);
|
||||||
|
ok = FcFalse;
|
||||||
|
if (l == 0) ok = FcTrue;
|
||||||
|
for ( j = 0; j < l && !ok; j++) {
|
||||||
|
ext = PyBytes_AS_STRING(PySequence_ITEM(exts, j));
|
||||||
|
extlen = PyBytes_GET_SIZE(PySequence_ITEM(exts, j));
|
||||||
|
ok = flen > extlen && extlen > 0 &&
|
||||||
|
PyOS_strnicmp(ext, v.u.s + (flen - extlen), extlen) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ok) {
|
||||||
|
if (FcPatternGet(temp, FC_FAMILY, 0, &w) != FcResultMatch) continue;
|
||||||
|
if (w.type != FcTypeString) continue;
|
||||||
|
t = PyString_FromString(w.u.s);
|
||||||
|
if (t == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
if (PyList_Append(ans, t) != 0)
|
||||||
|
{ fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
fontconfig_cleanup_find(pat, oset, fs);
|
||||||
|
Py_INCREF(ans);
|
||||||
|
return ans;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
fontconfig_files_for_family(PyObject *self, PyObject *args) {
|
||||||
|
char *family; int i;
|
||||||
|
FcPattern *pat, *tp;
|
||||||
|
FcObjectSet *oset;
|
||||||
|
FcFontSet *fs;
|
||||||
|
FcValue file, weight, fullname, style, slant, family2;
|
||||||
|
PyObject *ans, *temp, *t;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, "s", &family))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
ans = PyList_New(0);
|
||||||
|
if (ans == NULL) return PyErr_NoMemory();
|
||||||
|
|
||||||
|
fs = NULL; oset = NULL; pat = NULL;
|
||||||
|
|
||||||
|
pat = FcPatternBuild(0, FC_FAMILY, FcTypeString, family, (char *) 0);
|
||||||
|
if (pat == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
|
||||||
|
oset = FcObjectSetCreate();
|
||||||
|
if (oset == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
if (!FcObjectSetAdd(oset, FC_FILE)) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
if (!FcObjectSetAdd(oset, FC_STYLE)) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
if (!FcObjectSetAdd(oset, FC_SLANT)) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
if (!FcObjectSetAdd(oset, FC_WEIGHT)) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
if (!FcObjectSetAdd(oset, FC_FAMILY)) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
if (!FcObjectSetAdd(oset, "fullname")) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
|
||||||
|
fs = FcFontList(FcConfigGetCurrent(), pat, oset);
|
||||||
|
if (fs == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
|
||||||
|
for (i = 0; i < fs->nfont; i++) {
|
||||||
|
tp = fs->fonts[i];
|
||||||
|
|
||||||
|
if (tp == NULL) continue;
|
||||||
|
if (FcPatternGet(tp, FC_FILE, 0, &file) != FcResultMatch) continue;
|
||||||
|
if (FcPatternGet(tp, FC_STYLE, 0, &style) != FcResultMatch) continue;
|
||||||
|
if (FcPatternGet(tp, FC_WEIGHT, 0, &weight) != FcResultMatch) continue;
|
||||||
|
if (FcPatternGet(tp, FC_SLANT, 0, &slant) != FcResultMatch) continue;
|
||||||
|
if (FcPatternGet(tp, FC_FAMILY, 0, &family2) != FcResultMatch) continue;
|
||||||
|
if (FcPatternGet(tp, "fullname", 0, &fullname) != FcResultMatch) continue;
|
||||||
|
|
||||||
|
temp = PyTuple_New(6);
|
||||||
|
if(temp == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
t = PyBytes_FromString(fullname.u.s);
|
||||||
|
if(t == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
PyTuple_SET_ITEM(temp, 0, t);
|
||||||
|
t = PyBytes_FromString(file.u.s);
|
||||||
|
if(t == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
PyTuple_SET_ITEM(temp, 1, t);
|
||||||
|
t = PyBytes_FromString(style.u.s);
|
||||||
|
if(t == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
PyTuple_SET_ITEM(temp, 2, t);
|
||||||
|
t = PyBytes_FromString(family2.u.s);
|
||||||
|
if(t == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
PyTuple_SET_ITEM(temp, 3, t);
|
||||||
|
t = PyInt_FromLong((long)weight.u.i);
|
||||||
|
if(t == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
PyTuple_SET_ITEM(temp, 4, t);
|
||||||
|
t = PyInt_FromLong((long)slant.u.i);
|
||||||
|
if(t == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
PyTuple_SET_ITEM(temp, 5, t);
|
||||||
|
if (PyList_Append(ans, temp) != 0)
|
||||||
|
{ fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
}
|
||||||
|
fontconfig_cleanup_find(pat, oset, fs);
|
||||||
|
Py_INCREF(ans);
|
||||||
|
return ans;
|
||||||
|
}
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
fontconfig_match(PyObject *self, PyObject *args) {
|
||||||
|
char *namespec; int i;
|
||||||
|
FcPattern *pat, *tp;
|
||||||
|
FcObjectSet *oset;
|
||||||
|
FcFontSet *fs, *fs2;
|
||||||
|
FcValue file, weight, fullname, style, slant, family;
|
||||||
|
FcResult res;
|
||||||
|
PyObject *ans, *temp, *t, *all, *verbose;
|
||||||
|
|
||||||
|
if (!PyArg_ParseTuple(args, "sOO", &namespec, &all, &verbose))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
ans = PyList_New(0);
|
||||||
|
if (ans == NULL) return PyErr_NoMemory();
|
||||||
|
|
||||||
|
fs = NULL; oset = NULL; pat = NULL; fs2 = NULL;
|
||||||
|
|
||||||
|
pat = FcNameParse(namespec);
|
||||||
|
if (pat == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
if (PyObject_IsTrue(verbose)) FcPatternPrint(pat);
|
||||||
|
|
||||||
|
if (!FcConfigSubstitute(FcConfigGetCurrent(), pat, FcMatchPattern))
|
||||||
|
{ fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
FcDefaultSubstitute(pat);
|
||||||
|
|
||||||
|
fs = FcFontSetCreate();
|
||||||
|
if (fs == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
if (PyObject_IsTrue(all)) {
|
||||||
|
fs2 = FcFontSort(FcConfigGetCurrent(), pat, FcTrue, NULL, &res);
|
||||||
|
if (fs2 == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
|
||||||
|
for (i = 0; i < fs2->nfont; i++) {
|
||||||
|
tp = fs2->fonts[i];
|
||||||
|
if (tp == NULL) continue;
|
||||||
|
tp = FcFontRenderPrepare(FcConfigGetCurrent(), pat, tp);
|
||||||
|
if (tp == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
if (!FcFontSetAdd(fs, tp))
|
||||||
|
{ fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
}
|
||||||
|
if (fs2 != NULL) FcFontSetDestroy(fs2);
|
||||||
|
} else {
|
||||||
|
tp = FcFontMatch(FcConfigGetCurrent(), pat, &res);
|
||||||
|
if (tp == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
if (!FcFontSetAdd(fs, tp))
|
||||||
|
{ fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < fs->nfont; i++) {
|
||||||
|
tp = fs->fonts[i];
|
||||||
|
if (tp == NULL) continue;
|
||||||
|
if (FcPatternGet(tp, FC_FILE, 0, &file) != FcResultMatch) continue;
|
||||||
|
if (FcPatternGet(tp, FC_STYLE, 0, &style) != FcResultMatch) continue;
|
||||||
|
if (FcPatternGet(tp, FC_WEIGHT, 0, &weight) != FcResultMatch) continue;
|
||||||
|
if (FcPatternGet(tp, FC_SLANT, 0, &slant) != FcResultMatch) continue;
|
||||||
|
if (FcPatternGet(tp, FC_FAMILY, 0, &family) != FcResultMatch) continue;
|
||||||
|
if (FcPatternGet(tp, "fullname", 0, &fullname) != FcResultMatch) continue;
|
||||||
|
|
||||||
|
temp = PyTuple_New(6);
|
||||||
|
if(temp == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
t = PyBytes_FromString(fullname.u.s);
|
||||||
|
if(t == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
PyTuple_SET_ITEM(temp, 0, t);
|
||||||
|
t = PyBytes_FromString(file.u.s);
|
||||||
|
if(t == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
PyTuple_SET_ITEM(temp, 1, t);
|
||||||
|
t = PyBytes_FromString(style.u.s);
|
||||||
|
if(t == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
PyTuple_SET_ITEM(temp, 2, t);
|
||||||
|
t = PyBytes_FromString(family.u.s);
|
||||||
|
if(t == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
PyTuple_SET_ITEM(temp, 3, t);
|
||||||
|
t = PyInt_FromLong((long)weight.u.i);
|
||||||
|
if(t == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
PyTuple_SET_ITEM(temp, 4, t);
|
||||||
|
t = PyInt_FromLong((long)slant.u.i);
|
||||||
|
if(t == NULL) { fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
PyTuple_SET_ITEM(temp, 5, t);
|
||||||
|
if (PyList_Append(ans, temp) != 0)
|
||||||
|
{ fontconfig_cleanup_find(pat, oset, fs); return PyErr_NoMemory(); }
|
||||||
|
|
||||||
|
}
|
||||||
|
fontconfig_cleanup_find(pat, oset, fs);
|
||||||
|
Py_INCREF(ans);
|
||||||
|
return ans;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
PyMethodDef fontconfig_methods[] = {
|
||||||
|
{"initialize", fontconfig_initialize, METH_VARARGS,
|
||||||
|
"initialize(path_to_config_file)\n\n"
|
||||||
|
"Initialize the library. If path to config file is specified it is used instead of the "
|
||||||
|
"default configuration. Returns True iff the initialization succeeded."
|
||||||
|
},
|
||||||
|
|
||||||
|
{"find_font_families", fontconfig_find_font_families, METH_VARARGS,
|
||||||
|
"find_font_families(allowed_extensions)\n\n"
|
||||||
|
"Find all font families on the system for fonts of the specified types. If no "
|
||||||
|
"types are specified all font families are returned."
|
||||||
|
},
|
||||||
|
|
||||||
|
{"files_for_family", fontconfig_files_for_family, METH_VARARGS,
|
||||||
|
"files_for_family(family, normalize)\n\n"
|
||||||
|
"Find all the variants in the font family `family`. "
|
||||||
|
"Returns a list of tuples. Each tuple is of the form "
|
||||||
|
"(fullname, path, style, family, weight, slant). "
|
||||||
|
},
|
||||||
|
|
||||||
|
{"match", fontconfig_match, METH_VARARGS,
|
||||||
|
"match(namespec,all,verbose)\n\n"
|
||||||
|
"Find all system fonts that match namespec, in decreasing order "
|
||||||
|
"of closeness. "
|
||||||
|
"Returns a list of tuples. Each tuple is of the form "
|
||||||
|
"(fullname, path, style, family, weight, slant). "
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
{NULL, NULL, 0, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
PyMODINIT_FUNC
|
||||||
|
initfontconfig(void) {
|
||||||
|
PyObject *m;
|
||||||
|
m = Py_InitModule3(
|
||||||
|
"fontconfig", fontconfig_methods,
|
||||||
|
"Find fonts."
|
||||||
|
);
|
||||||
|
if (m == NULL) return;
|
||||||
|
}
|
||||||
|
|
@ -101,6 +101,10 @@ class Worker(object):
|
|||||||
contents = os.path.join(self.osx_contents_dir, 'console.app', 'Contents')
|
contents = os.path.join(self.osx_contents_dir, 'console.app', 'Contents')
|
||||||
resources = os.path.join(contents, 'Resources')
|
resources = os.path.join(contents, 'Resources')
|
||||||
fd = os.path.join(contents, 'Frameworks')
|
fd = os.path.join(contents, 'Frameworks')
|
||||||
|
sp = os.path.join(resources, 'lib', 'python'+sys.version[:3], 'site-packages.zip')
|
||||||
|
self.osx_prefix = 'import sys; sys.frameworks_dir = "%s"; sys.frozen = "macosx_app"; '%fd
|
||||||
|
self.osx_prefix += 'sys.path.insert(0, %s); '%repr(sp)
|
||||||
|
|
||||||
self._env['PYTHONHOME'] = resources
|
self._env['PYTHONHOME'] = resources
|
||||||
self._env['MAGICK_HOME'] = os.path.join(fd, 'ImageMagick')
|
self._env['MAGICK_HOME'] = os.path.join(fd, 'ImageMagick')
|
||||||
self._env['DYLD_LIBRARY_PATH'] = os.path.join(fd, 'ImageMagick', 'lib')
|
self._env['DYLD_LIBRARY_PATH'] = os.path.join(fd, 'ImageMagick', 'lib')
|
||||||
@ -124,7 +128,7 @@ class Worker(object):
|
|||||||
priority = prefs['worker_process_priority']
|
priority = prefs['worker_process_priority']
|
||||||
cmd = [exe]
|
cmd = [exe]
|
||||||
if isosx:
|
if isosx:
|
||||||
cmd += ['-c', 'from calibre.utils.worker import main; main()']
|
cmd += ['-c', self.osx_prefix + 'from calibre.utils.ipc.worker import main; main()']
|
||||||
args = {
|
args = {
|
||||||
'env' : env,
|
'env' : env,
|
||||||
'cwd' : _cwd,
|
'cwd' : _cwd,
|
||||||
|
@ -32,8 +32,6 @@ class ClimateProgress(BasicNewsRecipe):
|
|||||||
|
|
||||||
html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"'
|
html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"'
|
||||||
|
|
||||||
remove_tags = [dict(name='a', attrs={'rel':'bookmark'})]
|
|
||||||
|
|
||||||
feeds = [(u'Posts', u'http://feeds.feedburner.com/climateprogress/lCrX')]
|
feeds = [(u'Posts', u'http://feeds.feedburner.com/climateprogress/lCrX')]
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def preprocess_html(self, soup):
|
||||||
|
@ -8,46 +8,37 @@ globeandmail.com
|
|||||||
'''
|
'''
|
||||||
|
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
from calibre.ebooks.BeautifulSoup import BeautifulSoup
|
|
||||||
|
|
||||||
class GlobeAndMail(BasicNewsRecipe):
|
class GlobeAndMail(BasicNewsRecipe):
|
||||||
|
|
||||||
title = 'Globe and Mail'
|
title = 'Globe and Mail'
|
||||||
__author__ = 'Kovid Goyal'
|
__author__ = 'Kovid Goyal'
|
||||||
language = _('English')
|
language = _('English')
|
||||||
|
oldest_article = 2.0
|
||||||
|
no_stylesheets = True
|
||||||
description = 'Canada\'s national newspaper'
|
description = 'Canada\'s national newspaper'
|
||||||
keep_only_tags = [dict(id='content')]
|
remove_tags_before = dict(id="article-top")
|
||||||
remove_tags = [dict(attrs={'class':'nav'}), dict(id=['related', 'TPphoto', 'secondaryNav', 'articleBottomToolsHolder'])]
|
remove_tags = [
|
||||||
|
{'id':['util', 'article-tabs', 'comments', 'article-relations',
|
||||||
|
'gallery-controls', 'video', 'galleryLoading']},
|
||||||
|
]
|
||||||
|
remove_tags_after = dict(id='article-content')
|
||||||
|
|
||||||
def parse_index(self):
|
feeds = [
|
||||||
src = self.browser.open('http://www.theglobeandmail.com/frontpage/').read()
|
('Latest headlines', 'http://www.theglobeandmail.com/?service=rss'),
|
||||||
soup = BeautifulSoup(src)
|
('Top stories', 'http://www.theglobeandmail.com/?service=rss&feed=topstories'),
|
||||||
|
('National', 'http://www.theglobeandmail.com/news/national/?service=rss'),
|
||||||
feeds = []
|
('Politics', 'http://www.theglobeandmail.com/news/politics/?service=rss'),
|
||||||
articles = []
|
('World', 'http://www.theglobeandmail.com/news/world/?service=rss'),
|
||||||
feed = 'Front Page'
|
('Business', 'http://www.theglobeandmail.com/report-on-business/?service=rss'),
|
||||||
for tag in soup.findAll(['h3', 'h4']):
|
('Opinions', 'http://www.theglobeandmail.com/news/opinions/?service=rss'),
|
||||||
if tag.name == 'h3':
|
('Columnists', 'http://www.theglobeandmail.com/news/opinions/columnists/?service=rss'),
|
||||||
a = tag.find('a', href=True)
|
('Globe Investor', 'http://www.theglobeandmail.com/globe-investor/?service=rss'),
|
||||||
if a is not None:
|
('Sports', 'http://www.theglobeandmail.com/sports/?service=rss'),
|
||||||
href = 'http://www.theglobeandmail.com' + a['href'].strip()
|
('Technology', 'http://www.theglobeandmail.com/news/technology/?service=rss'),
|
||||||
text = a.find(text=True)
|
('Arts', 'http://www.theglobeandmail.com/news/arts/?service=rss'),
|
||||||
if text:
|
('Life', 'http://www.theglobeandmail.com/life/?service=rss'),
|
||||||
text = text.strip()
|
('Blogs', 'http://www.theglobeandmail.com/blogs/?service=rss'),
|
||||||
desc = ''
|
('Real Estate', 'http://www.theglobeandmail.com/real-estate/?service=rss'),
|
||||||
summary = tag.findNextSiblings('p', attrs={'class':'summary'}, limit=1)
|
('Auto', 'http://www.theglobeandmail.com/auto/?service=rss'),
|
||||||
if summary:
|
]
|
||||||
desc = self.tag_to_string(summary[0], False)
|
|
||||||
articles.append({
|
|
||||||
'title': text,
|
|
||||||
'url' : href,
|
|
||||||
'desc' : desc,
|
|
||||||
'date' : '',
|
|
||||||
})
|
|
||||||
elif tag.name == 'h4':
|
|
||||||
if articles:
|
|
||||||
feeds.append((feed, articles))
|
|
||||||
articles = []
|
|
||||||
feed = self.tag_to_string(tag, False)
|
|
||||||
|
|
||||||
return feeds
|
|
||||||
|
@ -18,7 +18,7 @@ class SanFranciscoChronicle(BasicNewsRecipe):
|
|||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
|
|
||||||
keep_only_tags = [dict(name='td' , attrs={'class':'column1 w627'})]
|
remove_tags_before = {'class':'articleheadings'}
|
||||||
remove_tags_after = dict(name='div', attrs={'id':'articlecontent' })
|
remove_tags_after = dict(name='div', attrs={'id':'articlecontent' })
|
||||||
remove_tags = [
|
remove_tags = [
|
||||||
dict(name='div', attrs={'class':'tools tools_top'})
|
dict(name='div', attrs={'class':'tools tools_top'})
|
||||||
|
3
todo
3
todo
@ -1,9 +1,6 @@
|
|||||||
|
|
||||||
* Refactor web.fetch.simple to use per connection timeouts via the timeout kwarg for mechanize.open
|
* Refactor web.fetch.simple to use per connection timeouts via the timeout kwarg for mechanize.open
|
||||||
|
|
||||||
* Rationalize books table. Add a pubdate column, remove the uri column (and associated support in add_books) and convert series_index to a float.
|
|
||||||
- test adding/recusrsize adding and adding of duplicates
|
|
||||||
|
|
||||||
* Testing framework
|
* Testing framework
|
||||||
|
|
||||||
* MOBI navigation indexing support
|
* MOBI navigation indexing support
|
||||||
|
@ -707,6 +707,15 @@ class stage1(OptionlessCommand):
|
|||||||
('upload_demo', None),
|
('upload_demo', None),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
class betas(OptionlessCommand):
|
||||||
|
description = 'Build an upload beta builds to the servers'
|
||||||
|
|
||||||
|
sub_commands = [ ('update', None), ('stage2', None) ]
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
OptionlessCommand.run(self)
|
||||||
|
check_call('scp dist/* divok:'+BETAS, shell=True)
|
||||||
|
|
||||||
class upload(OptionlessCommand):
|
class upload(OptionlessCommand):
|
||||||
description = 'Build and upload calibre to the servers'
|
description = 'Build and upload calibre to the servers'
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user