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()
|
||||||
|
@ -76,7 +76,7 @@ def config():
|
|||||||
'be written to the OPF file.'))
|
'be written to the OPF file.'))
|
||||||
c.add_opt('from_opf', ['--from-opf'],
|
c.add_opt('from_opf', ['--from-opf'],
|
||||||
help=_('Read metadata from the specified OPF file and use it to '
|
help=_('Read metadata from the specified OPF file and use it to '
|
||||||
'set metadata in the ebook. Metadata specified on the'
|
'set metadata in the ebook. Metadata specified on the '
|
||||||
'command line will override metadata read from the OPF file'))
|
'command line will override metadata read from the OPF file'))
|
||||||
|
|
||||||
c.add_opt('lrf_bookid', ['--lrf-bookid'],
|
c.add_opt('lrf_bookid', ['--lrf-bookid'],
|
||||||
|
@ -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:
|
||||||
self._generate_index()
|
try:
|
||||||
|
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
|
||||||
self._generate_end_records()
|
if INDEXING:
|
||||||
|
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
|
||||||
|
|
||||||
import Image
|
try:
|
||||||
|
from PIL import Image
|
||||||
|
Image
|
||||||
|
except ImportError:
|
||||||
|
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
|
||||||
|
|
||||||
import Image
|
try:
|
||||||
|
from PIL import Image
|
||||||
|
Image
|
||||||
|
except ImportError:
|
||||||
|
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
|
||||||
|
|
||||||
import Image
|
try:
|
||||||
|
from PIL import Image
|
||||||
|
Image
|
||||||
|
except ImportError:
|
||||||
|
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
|
||||||
|
|
||||||
import Image
|
try:
|
||||||
|
from PIL import Image
|
||||||
|
Image
|
||||||
|
except ImportError:
|
||||||
|
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)
|
||||||
|
|
||||||
html = txt_to_markdown(txt)
|
try:
|
||||||
|
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,7 +1,8 @@
|
|||||||
<ui version="4.0" >
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
<class>Form</class>
|
<class>Form</class>
|
||||||
<widget class="QWidget" name="Form" >
|
<widget class="QWidget" name="Form">
|
||||||
<property name="geometry" >
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
@ -9,133 +10,146 @@
|
|||||||
<height>381</height>
|
<height>381</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<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>
|
||||||
</property>
|
</property>
|
||||||
<property name="buddy" >
|
<property name="buddy">
|
||||||
<cstring>tag</cstring>
|
<cstring>tag</cstring>
|
||||||
</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>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<property name="text" >
|
<property name="text">
|
||||||
<string>*</string>
|
<string>*</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text" >
|
<property name="text">
|
||||||
<string>a</string>
|
<string>a</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text" >
|
<property name="text">
|
||||||
<string>br</string>
|
<string>br</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text" >
|
<property name="text">
|
||||||
<string>div</string>
|
<string>div</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text" >
|
<property name="text">
|
||||||
<string>h1</string>
|
<string>h1</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text" >
|
<property name="text">
|
||||||
<string>h2</string>
|
<string>h2</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text" >
|
<property name="text">
|
||||||
<string>h3</string>
|
<string>h3</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text" >
|
<property name="text">
|
||||||
<string>h4</string>
|
<string>h4</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text" >
|
<property name="text">
|
||||||
<string>h5</string>
|
<string>h5</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text" >
|
<property name="text">
|
||||||
<string>h6</string>
|
<string>h6</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text" >
|
<property name="text">
|
||||||
<string>hr</string>
|
<string>hr</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text" >
|
<property name="text">
|
||||||
<string>span</string>
|
<string>span</string>
|
||||||
</property>
|
</property>
|
||||||
</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>
|
||||||
</property>
|
</property>
|
||||||
<property name="buddy" >
|
<property name="buddy">
|
||||||
<cstring>attribute</cstring>
|
<cstring>attribute</cstring>
|
||||||
</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>
|
||||||
</property>
|
</property>
|
||||||
<property name="buddy" >
|
<property name="buddy">
|
||||||
<cstring>value</cstring>
|
<cstring>value</cstring>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="5" column="0" >
|
<item>
|
||||||
<widget class="QLineEdit" name="value" />
|
<widget class="QLabel" name="label_4">
|
||||||
</item>
|
<property name="text">
|
||||||
<item row="5" column="1" >
|
|
||||||
<widget class="QLabel" name="label_4" >
|
|
||||||
<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="QLabel" name="label_5" >
|
<widget class="QLineEdit" name="value"/>
|
||||||
<property name="text" >
|
</item>
|
||||||
<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>
|
<item>
|
||||||
|
<widget class="QLabel" name="label_5">
|
||||||
|
<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>
|
||||||
</property>
|
</property>
|
||||||
<property name="wordWrap" >
|
<property name="wordWrap">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
<property name="openExternalLinks" >
|
<property name="openExternalLinks">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</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()
|
||||||
@ -1670,7 +1687,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
|||||||
def update_found(self, version):
|
def update_found(self, version):
|
||||||
os = 'windows' if iswindows else 'osx' if isosx else 'linux'
|
os = 'windows' if iswindows else 'osx' if isosx else 'linux'
|
||||||
url = 'http://%s.kovidgoyal.net/download_%s'%(__appname__, os)
|
url = 'http://%s.kovidgoyal.net/download_%s'%(__appname__, os)
|
||||||
self.latest_version = '<br>'+_('<span style="color:red; font-weight:bold">'
|
self.latest_version = '<br>' + _('<span style="color:red; font-weight:bold">'
|
||||||
'Latest version: <a href="%s">%s</a></span>')%(url, version)
|
'Latest version: <a href="%s">%s</a></span>')%(url, version)
|
||||||
self.vanity.setText(self.vanity_template%\
|
self.vanity.setText(self.vanity_template%\
|
||||||
(dict(version=self.latest_version,
|
(dict(version=self.latest_version,
|
||||||
@ -1735,7 +1752,12 @@ 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
|
||||||
os.execvp(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)
|
||||||
else:
|
else:
|
||||||
if iswindows:
|
if iswindows:
|
||||||
try:
|
try:
|
||||||
@ -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 ""
|
||||||
|
|
||||||
@ -1225,7 +1232,7 @@ msgid "Specify the name of an OPF file. The metadata will be written to the OPF
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:78
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:78
|
||||||
msgid "Read metadata from the specified OPF file and use it to set metadata in the ebook. Metadata specified on thecommand line will override metadata read from the OPF file"
|
msgid "Read metadata from the specified OPF file and use it to set metadata in the ebook. Metadata specified on the command line will override metadata read from the OPF file"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:83
|
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:83
|
||||||
@ -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
|
|
||||||
|
@ -12,13 +12,13 @@ class SanFranciscoChronicle(BasicNewsRecipe):
|
|||||||
title = u'San Francisco Chronicle'
|
title = u'San Francisco Chronicle'
|
||||||
__author__ = u'Darko Miletic'
|
__author__ = u'Darko Miletic'
|
||||||
description = u'San Francisco news'
|
description = u'San Francisco news'
|
||||||
language = _('English')
|
language = _('English')
|
||||||
oldest_article = 7
|
oldest_article = 7
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
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