diff --git a/src/calibre/ebooks/conversion/cli.py b/src/calibre/ebooks/conversion/cli.py index 163f24e313..c605df0de4 100644 --- a/src/calibre/ebooks/conversion/cli.py +++ b/src/calibre/ebooks/conversion/cli.py @@ -210,12 +210,13 @@ def add_pipeline_options(parser, plumber): if rec.level < rec.HIGH: option_recommendation_to_cli_option(add_option, rec) - parser.add_option('--list-recipes', default=False, action='store_true', - help=_('List builtin recipes')) - def option_parser(): - return OptionParser(usage=USAGE) - + parser = OptionParser(usage=USAGE) + parser.add_option('--list-recipes', default=False, action='store_true', + help=_('List builtin recipe names. You can create an ebook from ' + 'a builtin recipe like this: ebook-convert "Recipe Name.recipe" ' + 'output.epub')) + return parser class ProgressBar(object): diff --git a/src/calibre/ebooks/mobi/debug.py b/src/calibre/ebooks/mobi/debug.py index a4d53d2395..d5fe96c4c4 100644 --- a/src/calibre/ebooks/mobi/debug.py +++ b/src/calibre/ebooks/mobi/debug.py @@ -941,7 +941,7 @@ class TBSIndexing(object): # {{{ def interpret_periodical(self, tbs_type, byts): ans = [] - def tbs_type_6(byts, psi=None, msg=None): # {{{ + def tbs_type_6(byts, psi=None, msg=None, fmsg='Unknown'): # {{{ if psi is None: # Assume parent section is 1 psi = self.get_index(1) @@ -967,7 +967,7 @@ class TBSIndexing(object): # {{{ if flags == 5: arg, consumed = decint(byts) byts = byts[consumed:] - ans.append('Unknown ??? (vwi)): %d'%(arg)) + ans.append('%s (vwi)): %d'%(fmsg, arg)) elif flags == 0: pass else: @@ -991,7 +991,9 @@ class TBSIndexing(object): # {{{ byts = tbs_type_6(byts, psi=psi, msg=('First article of ending section, relative to its' - ' parent\'s index')) + ' parent\'s index'), + fmsg=('Offset from start of record to beginning of' + ' starting section')) if byts: # We have a transition not just an opening first section psi = self.get_index(psi.index+1) diff --git a/src/calibre/ebooks/mobi/tbs_periodicals.rst b/src/calibre/ebooks/mobi/tbs_periodicals.rst index 9b21a8f3f8..83586cd5a2 100644 --- a/src/calibre/ebooks/mobi/tbs_periodicals.rst +++ b/src/calibre/ebooks/mobi/tbs_periodicals.rst @@ -1,7 +1,7 @@ Reverse engineering the trailing byte sequences for hierarchical periodicals =============================================================================== -In the following, *vwi* means variable width integer and *fvwi* means a vwi whose lowest four bits are used as a flag. +In the following, *vwi* means variable width integer and *fvwi* means a vwi whose lowest four bits are used as a flag. All the following information/inferences are from examining the output of kindlegen on a sample periodical. Given the general level of Amazon's incompetence, there are no guarantees that this information is the *best/most complete* way to do TBS indexing. Opening record ---------------- @@ -140,8 +140,6 @@ Records with a section transition In such a record there is a transition from one section to the next. As such the record must have at least one article ending and one article starting, except in the case of the first section. -TODO: Note you have to test the cases of first section, a single transition and multiple transitions. - 1. The first section:: Record #2: Starts at: 4096 Ends at: 8191 @@ -162,6 +160,64 @@ TODO: Note you have to test the cases of first section, a single transition and If there was more than one article at the start then the last byte would be replaced by: c4 n where n is the number of articles + 2. A record with a section transition and only one article from the ending section:: + + Record #9: Starts at: 32768 Ends at: 36863 + Contains: 6 index entries (2 ends, 2 complete, 2 starts) + TBS bytes: 83 80 80 90 1 d0 1 c8 1 d4 3 + Ends: + Index Entry: 1 (Parent index: 0, Depth: 1, Offset: 7758, Size: 26279) [Ars Technica] + Index Entry: 14 (Parent index: 1, Depth: 2, Offset: 31929, Size: 2108) [Trademarked keyword sales may soon be restricted in Europe] + Complete: + Index Entry: 15 (Parent index: 2, Depth: 2, Offset: 34045, Size: 1014) [Max and the Magic Marker for iPad: Review] + Index Entry: 16 (Parent index: 2, Depth: 2, Offset: 35059, Size: 1077) [iPad 2 steers itself into home console gaming territory with Real Racing 2 HD] + Starts: + Index Entry: 2 (Parent index: 0, Depth: 1, Offset: 34037, Size: 10368) [Neowin.net] + Index Entry: 17 (Parent index: 2, Depth: 2, Offset: 36136, Size: 1082) [Microsoft's Joe Belfiore still working on upcoming Zune hardware] + TBS Type: 011 (3) + Outer Index entry: 0 + Unknown (vwi: always 0?): 0 + Unknown (vwi: always 0?): 0 + First section index (fvwi): 1 + Extra bits (flag: always 0?): 0 + First article of ending section, relative to its parent's index (fvwi): 13 [14 absolute] + Last article of ending section w.r.t. starting section offset (fvwi): 12 [14 absolute] + Flags (always 8?): 8 + Article index at start of record or first article index, relative to parent section (fvwi): 13 [15 absolute] + Number of article nodes in the record (byte): 3 + + 3. A record with a section transition and more than one article from the ending section:: + + Record #11: Starts at: 40960 Ends at: 45055 + Contains: 7 index entries (2 ends, 3 complete, 2 starts) + TBS bytes: 83 80 80 a0 2 b5 4 1a f5 2 d8 2 e0 + Ends: + Index Entry: 2 (Parent index: 0, Depth: 1, Offset: 34037, Size: 10368) [Neowin.net] + Index Entry: 21 (Parent index: 2, Depth: 2, Offset: 40251, Size: 1057) [Windows Phone 7: Why it's failing] + Complete: + Index Entry: 22 (Parent index: 2, Depth: 2, Offset: 41308, Size: 1050) [RIM announces Android app support for Blackberry Playbook] + Index Entry: 23 (Parent index: 2, Depth: 2, Offset: 42358, Size: 1087) [Microsoft buys $7.5m worth of IPv4 addresses] + Index Entry: 24 (Parent index: 2, Depth: 2, Offset: 43445, Size: 960) [TechSpot: Apple iPad 2 Review] + Starts: + Index Entry: 3 (Parent index: 0, Depth: 1, Offset: 44405, Size: 6829) [OSNews] + Index Entry: 25 (Parent index: 3, Depth: 2, Offset: 44413, Size: 760) [OSnews Asks on Interrupts: The Results] + TBS Type: 011 (3) + Outer Index entry: 0 + Unknown (vwi: always 0?): 0 + Unknown (vwi: always 0?): 0 + First section index (fvwi): 2 + Extra bits (flag: always 0?): 0 + First article of ending section, relative to its parent's index (fvwi): 19 [21 absolute] + Number of article nodes in the record (byte): 4 + Offset from start of record to beginning of starting section (vwi)): 3445 + Last article of ending section w.r.t. starting section offset (fvwi): 21 [24 absolute] + Flags (always 8?): 8 + Article index at start of record or first article index, relative to parent section (fvwi): 22 [25 absolute] + + The difference to the previous case is the extra two bytes that encode the offset of the opening section from the start of the record. + + 4. TODO: A record with multiple transitions + Ending record ---------------- diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot index 7c751a5ef9..914c0f1e37 100644 --- a/src/calibre/translations/calibre.pot +++ b/src/calibre/translations/calibre.pot @@ -4,9 +4,9 @@ # msgid "" msgstr "" -"Project-Id-Version: calibre 0.8.10\n" -"POT-Creation-Date: 2011-07-15 10:27+MDT\n" -"PO-Revision-Date: 2011-07-15 10:27+MDT\n" +"Project-Id-Version: calibre 0.8.11\n" +"POT-Creation-Date: 2011-07-22 09:50+MDT\n" +"PO-Revision-Date: 2011-07-22 09:50+MDT\n" "Last-Translator: Automatically generated\n" "Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" @@ -21,20 +21,20 @@ msgid "Does absolutely nothing" msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:59 -#: /home/kovid/work/calibre/src/calibre/db/cache.py:98 -#: /home/kovid/work/calibre/src/calibre/db/cache.py:101 -#: /home/kovid/work/calibre/src/calibre/db/cache.py:112 +#: /home/kovid/work/calibre/src/calibre/db/cache.py:103 +#: /home/kovid/work/calibre/src/calibre/db/cache.py:106 +#: /home/kovid/work/calibre/src/calibre/db/cache.py:117 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:99 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74 #: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:77 #: /home/kovid/work/calibre/src/calibre/devices/kobo/books.py:24 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:551 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:557 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:70 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71 #: /home/kovid/work/calibre/src/calibre/devices/prs500/books.py:267 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:660 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:467 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:485 #: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:106 #: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:109 #: /home/kovid/work/calibre/src/calibre/ebooks/chm/metadata.py:56 @@ -92,9 +92,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:125 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:159 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:713 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:961 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:963 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:965 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:964 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:966 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:968 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:99 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:101 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1001 @@ -157,11 +157,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1194 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1197 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1282 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:83 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:233 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:252 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download.py:120 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:362 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:364 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:161 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:165 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:166 @@ -172,14 +172,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database2.py:535 #: /home/kovid/work/calibre/src/calibre/library/database2.py:543 #: /home/kovid/work/calibre/src/calibre/library/database2.py:554 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1986 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:2133 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3147 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3149 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3282 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:2003 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:2150 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3164 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3166 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3299 #: /home/kovid/work/calibre/src/calibre/library/server/content.py:212 #: /home/kovid/work/calibre/src/calibre/library/server/content.py:213 -#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:233 +#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:243 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:156 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:159 #: /home/kovid/work/calibre/src/calibre/library/server/xml.py:79 @@ -823,7 +823,7 @@ msgstr "" msgid "Path to library too long. Must be less than %d characters." msgstr "" -#: /home/kovid/work/calibre/src/calibre/db/cache.py:126 +#: /home/kovid/work/calibre/src/calibre/db/cache.py:131 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:636 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:66 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:564 @@ -833,18 +833,18 @@ msgstr "" msgid "Yes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/db/fields.py:110 +#: /home/kovid/work/calibre/src/calibre/db/fields.py:147 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1086 msgid "Main" msgstr "" -#: /home/kovid/work/calibre/src/calibre/db/fields.py:112 +#: /home/kovid/work/calibre/src/calibre/db/fields.py:149 #: /home/kovid/work/calibre/src/calibre/gui2/layout.py:72 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1088 msgid "Card A" msgstr "" -#: /home/kovid/work/calibre/src/calibre/db/fields.py:114 +#: /home/kovid/work/calibre/src/calibre/db/fields.py:151 #: /home/kovid/work/calibre/src/calibre/gui2/layout.py:74 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1090 msgid "Card B" @@ -858,11 +858,11 @@ msgstr "" msgid "Communicate with Android phones." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:110 +#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:113 msgid "Comma separated list of directories to send e-books to on the device. The first one that exists will be used" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:162 +#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:166 msgid "Communicate with S60 phones." msgstr "" @@ -967,7 +967,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1134 #: /home/kovid/work/calibre/src/calibre/library/database2.py:330 #: /home/kovid/work/calibre/src/calibre/library/database2.py:343 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3011 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3028 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:171 msgid "News" msgstr "" @@ -975,8 +975,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2685 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65 #: /home/kovid/work/calibre/src/calibre/library/catalog.py:652 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:2971 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:2989 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:2988 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3006 msgid "Catalog" msgstr "" @@ -1016,33 +1016,33 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:218 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:234 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:68 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:71 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:74 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:281 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:122 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:125 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:128 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:196 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:203 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:226 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:73 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:76 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:79 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:287 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:140 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:143 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:146 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:214 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:221 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:244 msgid "Getting list of books on device..." msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:279 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:255 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:257 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:273 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:275 msgid "Transferring books to device..." msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:285 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:299 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:409 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:444 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:310 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:415 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:450 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:297 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:328 msgid "Adding books to device metadata listing..." msgstr "" @@ -1050,24 +1050,24 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:309 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:114 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:125 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:361 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:393 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:316 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:367 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:399 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:334 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:352 msgid "Removing books from device..." msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:329 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:397 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:404 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:341 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:346 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:403 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:410 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:359 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:364 msgid "Removing books from device metadata listing..." msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:397 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:376 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:394 msgid "Sending metadata to device..." msgstr "" @@ -1271,20 +1271,24 @@ msgstr "" msgid "Communicate with the Kindle DX eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:23 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:24 msgid "Communicate with the Kobo Reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:51 -msgid "The Kobo supports only one collection currently: the \"Im_Reading\" list. Create a tag called \"Im_Reading\" " +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:53 +msgid "The Kobo supports several collections including " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:531 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:55 +msgid "Create tags for automatic management" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:537 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:388 msgid "Not Implemented" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:532 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:538 msgid "\".kobo\" files do not exist on the device as books instead, they are rows in the sqlite database. Currently they cannot be exported or viewed." msgstr "" @@ -1570,6 +1574,16 @@ msgstr "" msgid "Get device information..." msgstr "" +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:100 +#, python-format +msgid "Failed to access files in the main memory of your device. You should contact the device manufacturer for support. Common fixes are: try a different USB cable/USB port on your computer. If you device has a \"Reset to factory defaults\" type of setting somewhere, use it. Underlying error: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:113 +#, python-format +msgid "Failed to access files on the SD card in your device. This can happen for many reasons. The SD card may be corrupted, it may be too large for your device, it may be write-protected, etc. Try a different SD card, or reformat your SD card using the FAT32 filesystem. Also make sure there are not too many files in the root of your SD card. Underlying error: %s" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/devices/user_defined/driver.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:68 msgid "USB Vendor ID (in hex)" @@ -1752,37 +1766,37 @@ msgstr "" msgid "Options to control the look and feel of the output" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:146 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:148 #, python-format msgid "Modify the document text and structure using common patterns. Disabled by default. Use %(en)s to enable. Individual actions can be disabled with the %(dis)s options." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:154 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:156 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace.py:18 msgid "Modify the document text and structure using user defined patterns." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:163 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:165 msgid "Control auto-detection of document structure." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:173 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:175 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 "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:183 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:185 msgid "Options to set metadata in the output" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:186 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:188 msgid "Options to help with debugging the conversion" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:212 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:214 msgid "List builtin recipes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:285 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:287 msgid "Output saved to" msgstr "" @@ -1913,7 +1927,7 @@ msgid "Remove spacing between paragraphs. Also sets an indent on paragraphs of 1 msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:369 -msgid "When calibre removes inter paragraph spacing, it automatically sets a paragraph indent, to ensure that paragraphs can be easily distinguished. This option controls the width of that indent." +msgid "When calibre removes blank lines between paragraphs, it automatically sets a paragraph indent, to ensure that paragraphs can be easily distinguished. This option controls the width of that indent (in em)." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:376 @@ -1925,193 +1939,197 @@ msgid "Insert a blank line between paragraphs. Will not work if the source file msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:389 +msgid "Set the height of the inserted blank lines (in em). The height of the lines between paragraphs will be twice the value set here." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:396 msgid "Remove the first image from the input ebook. Useful if the first image in the source file is a cover and you are specifying an external cover." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:397 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:404 msgid "Insert the book metadata at the start of the book. This is useful if your ebook reader does not support displaying/searching metadata directly." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:405 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:412 msgid "Convert plain quotes, dashes and ellipsis to their typographically correct equivalents. For details, see http://daringfireball.net/projects/smartypants" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:414 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:421 msgid "Read metadata from the specified OPF file. Metadata read from this file will override any metadata in the source file." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:421 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:428 #, python-format msgid "Transliterate unicode characters to an ASCII representation. Use with care because this will replace unicode characters with ASCII. For instance it will replace \"%s\" with \"Mikhail Gorbachiov\". Also, note that in cases where there are multiple representations of a character (characters shared by Chinese and Japanese for instance) the representation based on the current calibre interface language will be used." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:436 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:443 msgid "Preserve ligatures present in the input document. A ligature is a special rendering of a pair of characters like ff, fi, fl et cetera. Most readers do not have support for ligatures in their default fonts, so they are unlikely to render correctly. By default, calibre will turn a ligature into the corresponding pair of normal characters. This option will preserve them instead." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:448 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:455 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:38 msgid "Set the title." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:452 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:459 msgid "Set the authors. Multiple authors should be separated by ampersands." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:457 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:464 msgid "The version of the title to be used for sorting. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:461 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:468 msgid "String to be used when sorting by author. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:465 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:472 msgid "Set the cover to the specified file or URL" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:469 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:476 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:54 msgid "Set the ebook description." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:473 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:480 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:56 msgid "Set the ebook publisher." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:477 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:484 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:60 msgid "Set the series this ebook belongs to." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:481 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:488 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:62 msgid "Set the index of the book in this series." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:485 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:492 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:64 msgid "Set the rating. Should be a number between 1 and 5." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:489 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:496 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:66 msgid "Set the ISBN of the book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:493 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:500 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:68 msgid "Set the tags for the book. Should be a comma separated list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:497 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:504 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:70 msgid "Set the book producer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:501 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:508 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:72 msgid "Set the language." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:505 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:512 msgid "Set the publication date." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:509 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:516 msgid "Set the book timestamp (used by the date column in calibre)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:513 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:520 msgid "Enable heuristic processing. This option must be set for any heuristic processing to take place." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:518 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:525 msgid "Detect unformatted chapter headings and sub headings. Change them to h2 and h3 tags. This setting will not create a TOC, but can be used in conjunction with structure detection to create one." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:525 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:532 msgid "Look for common words and patterns that denote italics and italicize them." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:530 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:537 msgid "Turn indentation created from multiple non-breaking space entities into CSS indents." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:535 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:542 msgid "Scale used to determine the length at which a line should be unwrapped. Valid values are a decimal between 0 and 1. The default is 0.4, just below the median line length. If only a few lines in the document require unwrapping this value should be reduced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:543 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:550 msgid "Unwrap lines using punctuation and other formatting clues." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:547 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:554 msgid "Remove empty paragraphs from the document when they exist between every other paragraph" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:552 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:559 msgid "Left aligned scene break markers are center aligned. Replace soft scene breaks that use multiple blank lines withhorizontal rules." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:558 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:565 msgid "Replace scene breaks with the specified text. By default, the text from the input document is used." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:563 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:570 msgid "Analyze hyphenated words throughout the document. The document itself is used as a dictionary to determine whether hyphens should be retained or removed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:569 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:576 msgid "Looks for occurrences of sequential
When calibre removes inter paragraph spacing, it automatically sets a paragraph indent, to ensure that paragraphs can be easily distinguished. This option controls the width of that indent." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:150 -msgid " em" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:151 -msgid "Text justification:" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:152 -msgid "&Linearize tables" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:153 -msgid "Extra &CSS" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:154 -msgid "&Transliterate unicode characters to ASCII" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:155 -msgid "Insert &blank line" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:156 -msgid "Keep &ligatures" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:157 -msgid "Smarten &punctuation" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:158 msgid "Minimum &line height:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:153 msgid " %" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:154 +msgid "Line &height:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:156 +msgid "Input character &encoding:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:157 +msgid "Remove &spacing between paragraphs" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:158 +msgid "Insert &blank line between paragraphs" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:166 +msgid " em" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:160 +msgid "Text &justification:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:161 +msgid "&Linearize tables" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:162 +msgid "&Transliterate unicode characters to ASCII" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:163 +msgid "Keep &ligatures" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:164 +msgid "Extra &CSS" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:165 +msgid "
When calibre removes inter paragraph spacing, it automatically sets a paragraph indent, to ensure that paragraphs can be easily distinguished. This option controls the width of that indent." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:167 +msgid "Smarten &punctuation" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:168 +msgid "&Indent size:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:169 +msgid "&Line size:" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:19 msgid "LRF Output" msgstr "" @@ -5917,33 +5940,33 @@ msgid "Set the metadata. The output file will contain as much of this metadata a msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:180 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:824 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:884 msgid "Choose cover for " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:187 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:832 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:892 msgid "Cannot read" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:188 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:893 msgid "You do not have permission to read the file: " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:196 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:841 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:901 msgid "Error reading file" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:197 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:842 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:902 msgid "
There was an error reading from file: Migrating old database to ebook library in %s
"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:204
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:852
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:912
msgid " is not a valid picture"
msgstr ""
@@ -5968,7 +5991,7 @@ msgid "&Title: "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:165
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:73
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:74
msgid "Change the title of this book"
msgstr ""
@@ -5996,14 +6019,14 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:171
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:537
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1015
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1075
msgid "Tags categorize the book. This is particularly useful while searching.
They can be any words or phrases, separated by commas."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:172
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:544
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:214
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:432
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:433
msgid "&Series:"
msgstr ""
@@ -6011,7 +6034,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:174
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:545
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:546
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:431
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:432
msgid "List of known series. You can add new series."
msgstr ""
@@ -6028,39 +6051,43 @@ msgstr ""
msgid "Default"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:75
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:78
msgid "&Title for Table of Contents:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:76
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:79
msgid "Rescale images for &Palm devices"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:77
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:80
msgid "Use author &sort for author"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:78
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:81
msgid "Disable compression of the file contents"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:79
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:82
msgid "Do not add Table of Contents to book"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:80
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:83
msgid "Kindle options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:81
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:84
msgid "Periodical masthead font:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:82
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:85
msgid "Personal Doc tag:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:83
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:86
+msgid "Put generated Table of Contents at &start of book instead of end"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:87
msgid "Ignore &margins"
msgstr ""
@@ -6171,15 +6198,23 @@ msgstr ""
msgid "RB Output"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:133
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:134
msgid "No formats available"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:134
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:135
msgid "Cannot build regex using the GUI builder without a book."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:164
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:144
+msgid "Could not open file"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:145
+msgid "Could not open the file, do you have it open in another program?"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:175
msgid "Open book"
msgstr ""
@@ -6614,7 +6649,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:255
#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:304
#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:308
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1282
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1342
msgid "Undefined"
msgstr ""
@@ -6951,7 +6986,7 @@ msgid "My Books"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:92
-#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:321
+#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:331
msgid "Generate catalog"
msgstr ""
@@ -7234,14 +7269,14 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:97
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:211
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:74
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:75
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:209
#: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/adv_search_builder_ui.py:181
msgid "&Title:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:98
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:197
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:198
msgid "&Author(s):"
msgstr ""
@@ -7502,7 +7537,7 @@ msgid "Standard metadata"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:60
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:867
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:869
msgid "Custom metadata"
msgstr ""
@@ -7636,13 +7671,13 @@ msgid "Specify how the author(s) of this book should be sorted. For example Char
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:530
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:973
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1033
msgid "&Rating:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:531
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:532
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:974
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1034
msgid "Rating of this book. 0-5 stars"
msgstr ""
@@ -7712,7 +7747,7 @@ msgid "&Force numbers to start with:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:558
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1266
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1326
msgid "&Date:"
msgstr ""
@@ -7783,13 +7818,13 @@ msgid "Set from &ebook file(s)"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:581
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:510
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:674
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:512
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:676
msgid "&Basic metadata"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:582
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:517
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:519
msgid "&Custom metadata"
msgstr ""
@@ -8740,7 +8775,7 @@ msgid "&Author:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:215
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1014
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1074
msgid "Ta&gs:"
msgstr ""
@@ -8966,7 +9001,7 @@ msgid "Rename the item in every book where it is used."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:83
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar_ui.py:115
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar_ui.py:112
msgid "Ctrl+S"
msgstr ""
@@ -9423,7 +9458,7 @@ msgid "Regular expression (?P