mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Add documentation of the conversion system to the User Manual
This commit is contained in:
parent
8819fe2588
commit
47eb8c1f3e
@ -361,7 +361,7 @@ from calibre.customize.profiles import input_profiles, output_profiles
|
||||
from calibre.devices.bebook.driver import BEBOOK, BEBOOK_MINI
|
||||
from calibre.devices.blackberry.driver import BLACKBERRY
|
||||
from calibre.devices.cybookg3.driver import CYBOOKG3, CYBOOK_OPUS
|
||||
from calibre.devices.eb600.driver import EB600, COOL_ER, ESHINEBOOK
|
||||
from calibre.devices.eb600.driver import EB600, COOL_ER, SHINEBOOK
|
||||
from calibre.devices.iliad.driver import ILIAD
|
||||
from calibre.devices.irexdr.driver import IREXDR1000
|
||||
from calibre.devices.jetbook.driver import JETBOOK
|
||||
@ -424,7 +424,7 @@ plugins += [
|
||||
ANDROID,
|
||||
CYBOOK_OPUS,
|
||||
COOL_ER,
|
||||
ESHINEBOOK,
|
||||
SHINEBOOK,
|
||||
ESLICK
|
||||
]
|
||||
plugins += [x for x in list(locals().values()) if isinstance(x, type) and \
|
||||
|
@ -59,6 +59,9 @@ class EB600(USBMS):
|
||||
|
||||
class COOL_ER(EB600):
|
||||
|
||||
name = 'Cool-er device interface'
|
||||
gui_name = 'Cool-er'
|
||||
|
||||
FORMATS = ['epub', 'mobi', 'prc', 'pdf', 'txt']
|
||||
|
||||
VENDOR_NAME = 'COOL-ER'
|
||||
@ -68,9 +71,13 @@ class COOL_ER(EB600):
|
||||
|
||||
EBOOK_DIR_MAIN = 'my docs'
|
||||
|
||||
class ESHINEBOOK(EB600):
|
||||
class SHINEBOOK(EB600):
|
||||
|
||||
FORMATS = ['epub', 'pdf', 'txt']
|
||||
name = 'ShineBook device Interface'
|
||||
|
||||
gui_name = 'ShineBook'
|
||||
|
||||
FORMATS = ['epub', 'prc', 'rtf', 'pdf', 'txt']
|
||||
|
||||
VENDOR_NAME = 'LONGSHIN'
|
||||
WINDOWS_MAIN_MEM = 'ESHINEBOOK'
|
||||
|
@ -95,7 +95,7 @@ def option_parser():
|
||||
writers = set([])
|
||||
for w in metadata_writers():
|
||||
writers = writers.union(set(w.file_types))
|
||||
ft, w = ', '.join(filetypes()), ', '.join(writers)
|
||||
ft, w = ', '.join(sorted(filetypes())), ', '.join(sorted(writers))
|
||||
return config().option_parser(USAGE%(ft, w))
|
||||
|
||||
def do_set_metadata(opts, mi, stream, stream_type):
|
||||
|
@ -87,6 +87,12 @@
|
||||
<iconset resource="../../../../resources/images.qrc">
|
||||
<normaloff>:/images/wizard.svg</normaloff>:/images/wizard.svg</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>32</width>
|
||||
<height>32</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
|
@ -79,7 +79,9 @@ pygments_style = 'sphinx'
|
||||
# The style sheet to use for HTML and HTML Help pages. A file of that name
|
||||
# must exist either in Sphinx' static/ path, or in one of the custom paths
|
||||
# given in html_static_path.
|
||||
html_style = 'default.css'
|
||||
html_theme = 'default'
|
||||
html_theme_options = {'stickysidebar':'true', 'relbarbgcolor':'black'}
|
||||
html_style = 'calibre.css'
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
|
@ -5,4 +5,421 @@
|
||||
E-book Conversion
|
||||
===================
|
||||
|
||||
This section is under construction. In the meantime, you can see some documentation of the command line interface to conversion at :ref:`ebook-convert`.
|
||||
|app| has a conversion system that is designed to be very easy to use. Normally, you just
|
||||
add a book to |app|, click convert and |app| will try hard to generate output that is as
|
||||
close as possible to the input. However, |app| accepts a very large number of input formats,
|
||||
not all of which are as suitable as others for conversion to e-books. In the case of
|
||||
such input formats, or if you just want greater control over the conversion system,
|
||||
|app| has a lot of options to fine tune the conversion process. Note however that |app|'s
|
||||
conversion system is not a substitute for a full blown e-book editor. To edit e-books, I
|
||||
would recommend first converting them to EPUB using |app| and then using a dedicated EPUB editor,
|
||||
like `Sigil <http://code.google.com/p/sigil/>`_ to get the book into perfect shape. You can then
|
||||
use the edited EPUB as input for conversion into other formats in |app|.
|
||||
|
||||
This document will refer mainly to the conversion settings as found in the conversion dialog,
|
||||
pictured below. All these settings are also available via command line interface to conversion,
|
||||
documented at :ref:`ebook-convert`. In |app|, you can obtain help on any individual setting by holding your
|
||||
mouse over it, a tooltip will appear describing the setting.
|
||||
|
||||
.. image:: images/conv_dialog.png
|
||||
:align: center
|
||||
:alt: E-book conversion dialog
|
||||
:scale: 50
|
||||
|
||||
.. contents:: Contents
|
||||
:depth: 1
|
||||
:local:
|
||||
|
||||
.. _conversion-introduction:
|
||||
|
||||
Introduction
|
||||
-------------
|
||||
|
||||
.. |dbgi| image:: images/debug.png
|
||||
:align: middle
|
||||
:alt: Debug icon
|
||||
|
||||
The first thing to understand about the conversion system is that it is designed as a pipeline.
|
||||
Schematically, it looks like this:
|
||||
|
||||
.. image:: images/pipeline.png
|
||||
:align: center
|
||||
:alt: The conversion pipeline
|
||||
|
||||
The input format is first converted to XHTML by the appropriate *Input Plugin*.
|
||||
This HTML is then *transformed*. In the last step, the processed XHTML is converted
|
||||
to the specified output format by the appropriate *Output Plugin*. The results
|
||||
of the conversion can vary greatly, based on the input format. Some formats
|
||||
convert much better than others. A list of the best source formats for conversion
|
||||
is available :ref:`here <best-source-formats>`.
|
||||
|
||||
The transforms that act on the XHTML output are where all the work happens. There are various
|
||||
transforms, for example, to insert book metadata as a page at the start of the book,
|
||||
to detect chapter headings and automatically create a Table of Contents, to proportionally
|
||||
adjust font sizes, et cetera. It is important to remeber that all the transforms act on the
|
||||
XHTML output by the *Input Plugin*, not on the input file itself. So, for example, if you ask |app|
|
||||
to convert an RTF file to EPUB, it will first be converted to XHTML internally,
|
||||
the various transforms will be applied to the XHTML and then the *Output Plugin* will
|
||||
create the EPUB file, automatically generating all metadata, Table of Contents, et cetera.
|
||||
|
||||
You can see this process in action by using the debug option |dbgi|. Just specify the path to
|
||||
a directory for the debug output. During conversion, |app| will place the XHTML generated by
|
||||
the various stages of the conversion pipeline in different sub-directories.
|
||||
The four sub-directories are:
|
||||
|
||||
.. table:: Stages of the conversion pipeline
|
||||
|
||||
========== =============
|
||||
Directory Description
|
||||
========== =============
|
||||
input This contains the HTML output by the Input Plugin. Use this to debug the Input Plugin.
|
||||
parsed The result of pre-processing and converting to XHTML the output from the Input Plugin. Use to debug structure detection.
|
||||
structure Post structure detection, but before CSS flattening and font size conversion. Use to debug font size conversion and CSS transforms.
|
||||
processed Just before the e-book is passed to the output plugin. Use to debug the Output Plugin.
|
||||
========== =============
|
||||
|
||||
If you want to edit the input document a little before having |app| convert it, the best thing to
|
||||
do is edit the files in the :file:`input` sub-directory, then zip it up, and use the zip file as the
|
||||
input format for subsequent conversions. To do this use the :guilabel:`Edit meta information` dialog
|
||||
to add the zip file as a format for the book and then, in the top left corner of the conversion dialog,
|
||||
select ZIP as the input format.
|
||||
|
||||
This document will deal mainly with the various transforms that operate on the intermediate XHTML
|
||||
and how to control them. At the end are some tips specific to each Input/Output format.
|
||||
|
||||
Look & Feel
|
||||
-------------
|
||||
|
||||
.. contents:: Contents
|
||||
:depth: 1
|
||||
:local:
|
||||
|
||||
This group of options controls various aspects of the look and feel of the converted e-book.
|
||||
|
||||
.. _font-size-rescaling:
|
||||
|
||||
Font size rescaling
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
One of the nicest features of the e-reading experience is the ability to easily adjust font sizes to
|
||||
suit individual needs and lighting conditions. |app| has sophisticated algorithms to ensure that
|
||||
all the books it outputs have a consistent font sizes, no matter what font sizes are specified
|
||||
in the input document.
|
||||
|
||||
The base font size of a document is the most common font size in that document,
|
||||
i.e., the size of the bulk of text in that document. When you specify a
|
||||
:guilabel:`Base font size`, |app| automatically rescales all font sizes in the document
|
||||
proportionately, so that the most common font size becomes the specified base font size and other
|
||||
font sizes are rescaled appropriately. By choosing a larger base font size, you can make the fonts
|
||||
in the document larger and vice versa. When you set the base font size, for best results, you should
|
||||
also set the font size key.
|
||||
|
||||
Normally, |app| will automatically choose a base font size appropriate to the Output Profile you
|
||||
have chosen (see :ref:`page-setup`). However, you can override this here in case the default is
|
||||
not suitable for you.
|
||||
|
||||
The :guilabel:`Font size key` option lets you control how non-base font sizes are rescaled.
|
||||
The font rescaling algorithm works using a font size key, which is simply a comma-separated
|
||||
list of font sizes. The font size key tells |app| how many "steps" bigger or smaller a given font
|
||||
size should be compared to the base font size. The idea is that there should be a limited number
|
||||
of font sizes in a document. For example, one size for the body text, a couple of sizes for
|
||||
different levels of headings and a couple of sizes for super/sub scripts and footnotes. The
|
||||
font size key allows |app| to compartmentalize the font sizes in the input documents into
|
||||
separate "bins" corresponding to the different logical font sizes.
|
||||
|
||||
Let's illustrate with an example.
|
||||
Suppose the source document we are converting was produced by someone with excellent
|
||||
eyesight and has a base font size of 8pt. That means the bulk of the text in the document is sized
|
||||
at 8pts, while headings are somewhat larger (say 10 and 12pt) and footnotes somewhat smaller at 6pt.
|
||||
Now if we use the following settings::
|
||||
|
||||
Base font size : 12pt
|
||||
Font size key : 7, 8, 10, 12, 14, 16, 18, 20
|
||||
|
||||
The output document will have a base font size of 12pt, headings of 14 and 16pt and footnotes of 8pt.
|
||||
Now suppose we want to make the largest heading size stand out more and make the footnotes a
|
||||
little larger as well. To achieve this, the font key should be changed to::
|
||||
|
||||
New font size key : 7, 9, 12, 14, 18, 20, 22
|
||||
|
||||
The largest headings will now become 18pt, while the footnotes will become 9pt. You can
|
||||
play with these settings to try and figure out what would be optimum for you by using the
|
||||
font rescaling wizard, which can be accessed by clicking the little button next to the
|
||||
:guilabel:`Font size key` setting.
|
||||
|
||||
All the font size rescaling in the conversion can also be disabled here, if you would
|
||||
like to preserve the font sizes in the input document.
|
||||
|
||||
A related setting is :guilabel:`Line height`. Line height controls the vertical height of
|
||||
lines. By default, (a line height of 0), no manipulation of line heights is performed. If
|
||||
you specify a non-default value, line heights will be set in all locations that don't specify their
|
||||
own line heights. However, this is something of a blunt weapon and should be used sparingly.
|
||||
If you want to adjust the line heights for some section of the input, it's better to use
|
||||
the :ref:`extra-css`.
|
||||
|
||||
Paragraph spacing
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Normally, paragraphs in XHTML are rendered with a blank line between them and no leading text
|
||||
indent. |app| has a couple of options to control this. :guilabel:`Remove spacing between paragraphs`
|
||||
forcefully ensure that all paragraphs have no inter paragraph spacing. It also sets the text
|
||||
indent to 1.5em to mark that start of every paragraph. :guilabel:`Insert blank line` does the
|
||||
opposite, guaranteeing that there is exactly one blank line between each pair of paragraphs.
|
||||
Both these options are very comprehensive, removing spacing, or inserting it for *all* paragraphs
|
||||
(technically <p> and <div> tags). This is so that you can just set the option and be sure that
|
||||
it performs as advertised, irrespective of how messy the input file is. The one exception is
|
||||
when the input file uses hard line breaks to implement inter-paragraph spacing.
|
||||
|
||||
If you want to remove the spacing between all paragraphs, except a select few, don't use these
|
||||
options. Instead add the following CSS code to :ref:`extra-css`::
|
||||
|
||||
p, div { margin: 0pt; border: 0pt; text-indent: 1.5em }
|
||||
.spacious { margin-bottom: 1em; text-indent: 0pt; }
|
||||
|
||||
Then, in your source document, mark the paragraphs that need spacing with `class="spacious"`.
|
||||
If your input document is not in HTML, use the Debug option, described in the Introduction to get HTML
|
||||
(use the :file:`input` sub-directory).
|
||||
|
||||
|
||||
.. _extra-css:
|
||||
|
||||
Extra CSS
|
||||
~~~~~~~~~~
|
||||
|
||||
This option allows you to specify arbitrary CSS that will be applied to all HTML files in the
|
||||
input. This CSS is applied with very high priority and so should override most CSS present in
|
||||
the input document itself. You can use this setting to fine tune the presentation/layout of your
|
||||
document. For example, if you want all paragraphs of class `endnote` to be right aligned, just
|
||||
add::
|
||||
|
||||
.endnote { text-align: right }
|
||||
|
||||
or if you want to change the indentation of all paragraphs::
|
||||
|
||||
p { text-indent: 5mm; }
|
||||
|
||||
:guilabel:`Extra CSS` is a very powerful option, but you do need an understanding of how CSS works
|
||||
to use it to its full potential.
|
||||
|
||||
Miscellaneous
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
There are a few more options in this section.
|
||||
|
||||
:guilabel:`No text justification`
|
||||
Normally, if the output format supports it, |app| will force the output e-book
|
||||
to have *justified* text (i.e., a smooth right margin). This option will turn
|
||||
off this behavior, in which case whatever justification is specified in the input document
|
||||
will be used instead.
|
||||
|
||||
:guilabel:`Linearize tables`
|
||||
Some badly designed documents use tables to control the layout of text on the page.
|
||||
When converted these documents often have text that runs off the page and other artifacts.
|
||||
This option will extract the content from the tables and present it in a linear fashion.
|
||||
Note that this option linearizes *all* tables, so only use it if you are sure the
|
||||
input document does not use tables for legitimate purposes, like presenting tabular information.
|
||||
|
||||
:guilabel:`Transliterate unicode characters`
|
||||
Transliterate unicode characters to an ASCII representation. Use with care because this will
|
||||
replace unicode characters with ASCII. For instance it will replace "Михаил Горбачёв"
|
||||
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 used
|
||||
by the largest number of people will be used (Chinese in the previous example).
|
||||
This option is mainly useful if you are going to view the e-book on a device that does not
|
||||
have support for unicode.
|
||||
|
||||
:guilabel:`Input character encoding`
|
||||
Older documents sometimes don't specify their character encoding. When converted, this can
|
||||
result in non-English characters or special characters like smart quotes being corrupted.
|
||||
|app| tries to auto-detect the character encoding of the source document, but it does not'
|
||||
always succeed. You can force it to assume a particular character encoding by using this setting.
|
||||
`cp1252` is a common encoding for documents produced using windows software. You should also read
|
||||
:ref:`char-encoding-faq` for more on encoding issues.
|
||||
|
||||
|
||||
.. _page-setup:
|
||||
|
||||
Page Setup
|
||||
-------------
|
||||
|
||||
The Page Setup options are for controlling screen layout, like margins and screen sizes. There are
|
||||
options to setup page margins, which will be used by the Output Plugin, if the selected Output Format
|
||||
supports page margins. In addition, you should choose an Input profile and an Output profile. Both sets
|
||||
of profiles basically deal with how to interpret measurements in the input/output documents, screen sizes
|
||||
and default font rescaling keys.
|
||||
|
||||
If you know that the file you are converting was intended to be used on a particular device/software platform,
|
||||
choose the corresponding input profile, otherwise just choose the default input profile. If you know the files
|
||||
you are producing are meant for a particular device type, choose the corresponding Output profile. In particular, for MOBI Output files, you should choose the Kindle, for LIT the Microsoft Reader and for EPUB the Sony Reader. In the case of EPUB, the Sony Reader profile will result in EPUB files that will work everywhere. However, it has some side effects, like inserting artificial section breaks to keep internal components below the size threshold, needed for SONY devices. In particular for the iPhone/Android phones, choose the SONY output profile. If you know your EPUB files will not be read on a SONY or similar device, use the default output profile. If you are producing MOBI files that are not intended for the Kindle, choose the Mobipocket books output profile.
|
||||
|
||||
The Output profile also controls the screen size. This will cause, for example, images to be auto-resized to be fit to the screen in some output formats. So choose a profile of a device that has a screen size similar to your device.
|
||||
|
||||
.. _structure-detection:
|
||||
|
||||
Structure Detection
|
||||
---------------------
|
||||
|
||||
Structure detection involves |app| trying its best to detect structural elements in the input document, when they are not properly specified. For example, chapters, page breaks, headers, footers, etc. As you can imagine, this process varies widely from book to book. Fortunately, |app| has very powerful options to control this. With power comes complexity, but if once you take the time to learn the complexity, you will find it well worth the effort.
|
||||
|
||||
Chapters and page breaks
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|app| has two sets of options for :guilabel:`chapter detection` and :guilabel:`inserting page breaks`. This can sometimes be slightly confusing, as by default,
|
||||
|app| will insert page breaks before detected chapters as well as the locations detected by the page breaks option.
|
||||
The reason for this is that there are often location where page breaks should be inserted that are not chapter boundaries.
|
||||
Also, detected chapters can be optionally inserted into the auto generated Table of Contents.
|
||||
|
||||
|app| uses *XPath*, a powerful language to allow the user to specify chapter boundaries/page breaks. XPath can seem a little daunting
|
||||
to use at first, fortunately, there is a :ref:`XPath tutorial <xpath-tutorial>` in the User Manual. Remember that Structure Detection
|
||||
operates on the intermediate XHTML produced by the conversion pipeline. Use the debug option described in the
|
||||
:ref:`conversion-introduction` to figure out the appropriate settings for your book. There is also a button for a XPath wizard
|
||||
to help with the generation of simple XPath expressions.
|
||||
|
||||
By default, |app| uses the following expression for chapter detection::
|
||||
|
||||
//*[((name()='h1' or name()='h2') and re:test(., 'chapter|book|section|part\s+', 'i')) or @class = 'chapter']
|
||||
|
||||
This expression is rather complex, because it tries to handle a number of common cases simulataneously. What it means
|
||||
is that |app| will assume chapters start at either `<h1>` or `<h2>` tags that have any of the words
|
||||
`(chapter, book, section or part)` in them or that have the `class="chapter"` attribute.
|
||||
|
||||
A related option is :guilabel:`Chapter mark`, which allows you to control what |app| does when it detects a chapter. By default,
|
||||
it will insert a page break before the chapter. You can have it insert a ruled line instead of, or in addition to the page break.
|
||||
You can also have it do nothing.
|
||||
|
||||
The default setting for detecting page breaks is::
|
||||
|
||||
//*[name()='h1' or name()='h2']
|
||||
|
||||
which means that |app| will insert page breaks before every `<h1>` and `<h2>` tag by default.
|
||||
|
||||
.. note::
|
||||
|
||||
The default expressions may change depending on the input format you are converting.
|
||||
|
||||
Removing headers and footers
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
These options are useful primarily for conversion of PDF documents. Often, the conversion leaves
|
||||
behing page headers and footers in the text. These options use regular expressions to try and detect
|
||||
the headers and footers and remove them. Remember that they operate on the intermediate XHTML produced
|
||||
by the conversion pipeline. There is also a wizard to help you customize the regular expressions for
|
||||
your document.
|
||||
|
||||
Miscellaneous
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
There are a few more options in this section.
|
||||
|
||||
:guilabel:`Insert metadata as page at start of book`
|
||||
One of the great things about |app| is that it allows you to maintain very complete metadata
|
||||
about all of your books, for example, a rating, tags, comments, etc. This option will create
|
||||
a single page with all this metadata and insert it into the converted e-book, typically just
|
||||
after the cover. Think of it as a way to create your own customised book jacket.
|
||||
|
||||
:guilabel:`Remove first image`
|
||||
Sometimes, the source document you are converting includes the cover as part of the book, instead
|
||||
of as a separate cover. If you also specify a cover in |app|, then the converted book will have
|
||||
two covers. This option will simply remove the first image from the source document, thereby
|
||||
ensuring that the converted book has only one cover, the one specified in |app|.
|
||||
|
||||
Table of Contents
|
||||
------------------
|
||||
|
||||
When the input document has a Table of Contents in its metadata, |app| will just use that. However,
|
||||
a number of older formats either do not support a metadata based Table of Contents, or individual
|
||||
documents do not have one. In these cases, the options in this section can help you automatically
|
||||
generate a Table of Contents in the converted e-book, based on the actual content in the input document.
|
||||
|
||||
The first option is :guilabel:`Force use of auto-generated Table of Contents`. By checking this option
|
||||
you can have |app| override any Table of Contents found in the metadata of the input document with the
|
||||
auto generated one.
|
||||
|
||||
The default way that the creation of the auto generated Table of Contents works is that, |app| will first try
|
||||
to add any detected chapters to the generated table of contents. You can learn how to customize the detection of chapters
|
||||
in the :ref:`structure-detection` section above. If you do not want to include detected chapters in the generated
|
||||
table of contents, check the :guilabel:`Do not add detected chapters` option.
|
||||
|
||||
If less than the :guilabel:`Chapter threshold` number of chapters were detected, |app| will then add any hyperlinks
|
||||
it finds in the input document to the Table of Contents. This often works well many input documents include a
|
||||
hyperlinked Table of Contents right at the start. The :guilabel:`Number fo links` option can be used to control
|
||||
this behavior. If set to zero, no links are added. If set to a number greater than zero, at most that number of links
|
||||
is added.
|
||||
|
||||
|app| will automatically filter duplicates from the generated Table of Contents. However, if there are some additional
|
||||
undesirable entries, you can filter them using the :guilabel:`TOC Filter` option. This is a regular expression that
|
||||
will match the title of entries in the generated table of contents. Whenever a match is found, it will be removed.
|
||||
For example, to remove all entries titles "Next" or "Previous" use::
|
||||
|
||||
Next|Previous
|
||||
|
||||
Finally, the :guilabel:`Level 1,2,3 TOC` options allow you to create a sophisticated multi-level Table of Contents.
|
||||
They are XPath expressions that match tags in the intermediate XHTML produced by the conversion pipeline. See the
|
||||
:ref:`conversion-introduction` for how to get access to this XHTML. Also read the :ref:`xpath-tutorial`, to learn
|
||||
how to construct XPath expressions. Next to each option is a button that launches a wizard to help with the creation
|
||||
of basic XPath expressions. The following simple example illustrates how to use these options.
|
||||
|
||||
Suppose you have an input document taht results in XHTML that look like this:
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Sample document</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Chapter 1</h1>
|
||||
...
|
||||
<h2>Section 1.1</h2>
|
||||
...
|
||||
<h2>Section 1.2</h2>
|
||||
...
|
||||
<h1>Chapter 2</h1>
|
||||
...
|
||||
<h2>Section 2.1</h2>
|
||||
...
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Then, we set the options as::
|
||||
|
||||
Level 1 TOC : //h:h1
|
||||
Level 2 TOC : //h:h2
|
||||
|
||||
This will result in an automatically generated two level Table of Contents that looks like::
|
||||
|
||||
Chapter 1
|
||||
Section 1.1
|
||||
Section 1.2
|
||||
Chapter 2
|
||||
Section 2.1
|
||||
|
||||
|
||||
.. warning::
|
||||
|
||||
Not all output formats support a multi level Table of Contents. You should first try with EPUB Output. If that
|
||||
works, then try your format of choice.
|
||||
|
||||
Format specific tips
|
||||
----------------------
|
||||
|
||||
Here you will find tips specific to the conversion of particular formats.
|
||||
|
||||
Convert Microsoft Word documents
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|app| does not directly convert .doc files from Microsoft Word. However, in Word, you can save the document
|
||||
as HTML and then convert the resulting HTML file with |app|. When saving as HTML, be sure to use the
|
||||
"Save as filtered HTML" option as this will produce clean HTML that will convert well.
|
||||
|
||||
There is a Word macro package that can automate the conversion of Word documents using |app|. It also makes
|
||||
generating the Table of Contents much simpler. It is called BookCreator and is available for free
|
||||
`here <http://www.mobileread.com/forums/showthread.php?t=36098>`_.
|
||||
|
||||
Convert TXT documents
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Convert PDF documents
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
|
@ -165,7 +165,15 @@ def generate_ebook_convert_help(preamble, info):
|
||||
def update_cli_doc(path, raw, info):
|
||||
if isinstance(raw, unicode):
|
||||
raw = raw.encode('utf-8')
|
||||
if not os.path.exists(path) or open(path, 'rb').read() != raw:
|
||||
old_raw = open(path, 'rb').read() if os.path.exists(path) else ''
|
||||
if not os.path.exists(path) or old_raw != raw:
|
||||
import difflib
|
||||
print path, 'has changed'
|
||||
if old_raw:
|
||||
lines = difflib.unified_diff(old_raw.splitlines(), raw.splitlines(),
|
||||
path, path)
|
||||
for line in lines:
|
||||
print line
|
||||
info('creating '+os.path.splitext(os.path.basename(path))[0])
|
||||
open(path, 'wb').write(raw)
|
||||
|
||||
@ -181,7 +189,8 @@ def render_options(cmd, groups, options_header=True, add_program=True):
|
||||
lines.append('')
|
||||
if desc:
|
||||
lines.extend([desc, ''])
|
||||
for opt in options:
|
||||
for opt in sorted(options, cmp=lambda x, y:cmp(x.get_opt_string(),
|
||||
y.get_opt_string())):
|
||||
help = opt.help if opt.help else ''
|
||||
help = help.replace('\n', ' ').replace('*', '\\*').replace('%default', str(opt.default))
|
||||
opt = opt.get_opt_string() + ((', '+', '.join(opt._short_opts)) if opt._short_opts else '')
|
||||
@ -298,4 +307,8 @@ def setup(app):
|
||||
app.add_directive('automember', auto_member, 1, (1, 0, 1))
|
||||
app.connect('doctree-read', substitute)
|
||||
app.connect('builder-inited', cli_docs)
|
||||
app.connect('build-finished', finished)
|
||||
|
||||
def finished(app, exception):
|
||||
pass
|
||||
|
||||
|
@ -25,10 +25,11 @@ It can convert every input format in the following list, to every output format.
|
||||
|
||||
** PRC is a generic format, |app| supports PRC files with TextRead and MOBIBook headers
|
||||
|
||||
.. _best-source-formats:
|
||||
|
||||
What are the best source formats to convert?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
In order of decreasing preference: LIT, MOBI, EPUB, HTML, PRC, RTF, TXT, PDF
|
||||
In order of decreasing preference: LIT, MOBI, EPUB, HTML, PRC, RTF, PDB, TXT, PDF
|
||||
|
||||
Why does the PDF conversion lose some images/tables?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
@ -54,6 +55,8 @@ In order to convert a collection of HTML files in a specific oder, you have to c
|
||||
|
||||
Then just add this HTML file to the GUI and use the convert button to create your ebook.
|
||||
|
||||
.. _char-encoding-faq:
|
||||
|
||||
How do I convert my file containing non-English characters, or smart quotes?
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
There are two aspects to this problem:
|
||||
|
BIN
src/calibre/manual/images/conv_dialog.png
Normal file
BIN
src/calibre/manual/images/conv_dialog.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 228 KiB |
BIN
src/calibre/manual/images/debug.png
Normal file
BIN
src/calibre/manual/images/debug.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 5.0 KiB |
29
src/calibre/manual/images/pipeline.pgf
Normal file
29
src/calibre/manual/images/pipeline.pgf
Normal file
@ -0,0 +1,29 @@
|
||||
\usetikzlibrary{positioning}
|
||||
\usetikzlibrary{shapes.geometric}
|
||||
\usetikzlibrary{shapes.arrows}
|
||||
\usetikzlibrary{shapes.misc}
|
||||
\usetikzlibrary{decorations.pathmorphing,arrows}
|
||||
|
||||
\tikzset{terminal/.style={single arrow,top color=white,bottom color=black!20,very thick,draw=black!50}}
|
||||
\tikzset{plugin/.style={rounded rectangle,top color=white,bottom color=blue!40,very thick,draw=blue!70}}
|
||||
\tikzset{transform/.style={ellipse,top color=white,bottom color=green!20,very thick,draw=green!50}}
|
||||
|
||||
\begin{tikzpicture}[text width=15mm,node distance=20mm and 20mm]
|
||||
|
||||
\node[draw,terminal] (inf) {Input\\Format};
|
||||
\node[draw,right=of inf,plugin,text centered] (inp) {Input\\Plugin};
|
||||
\node[draw,below=of inp,text width=2cm,transform,text centered] (trans) {Transform};
|
||||
\node[draw,below=of trans,plugin,text centered] (oup) {Output\\Plugin};
|
||||
\node[draw,left=of oup,terminal,shape border rotate=180] (ouf) {Output\\Format};
|
||||
|
||||
\begin{scope}[thick]
|
||||
\begin{scope}[decoration={snake,post length=1mm}]
|
||||
\draw[->,decorate] (inf.east) -- (inp.west);
|
||||
\draw[->,decorate] (oup.west) -- (ouf.east);
|
||||
\end{scope}
|
||||
|
||||
\draw[->] (inp.south) -- node[sloped,above] {XHTML} (trans.north);
|
||||
\draw[->] (trans.south) -- (oup.north);
|
||||
|
||||
\end{scope}
|
||||
\end{tikzpicture}
|
BIN
src/calibre/manual/images/pipeline.png
Normal file
BIN
src/calibre/manual/images/pipeline.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
@ -133,7 +133,7 @@ to the recipe. Finally, lets replace some of the :term:`CSS` that we disabled ea
|
||||
|
||||
With these additions, our recipe has become "production quality", indeed it is very close to the actual recipe used by |app| for the *BBC*, shown below:
|
||||
|
||||
.. literalinclude:: ../web/feeds/recipes/recipe_bbc.py
|
||||
.. literalinclude:: ../../../resources/recipes/bbc.recipe
|
||||
|
||||
This :term:`recipe` explores only the tip of the iceberg when it comes to the power of |app|. To explore more of the abilities of |app| we'll examine a more complex real life example in the next section.
|
||||
|
||||
|
5
src/calibre/manual/resources/calibre.css
Normal file
5
src/calibre/manual/resources/calibre.css
Normal file
@ -0,0 +1,5 @@
|
||||
|
||||
@import url("default.css");
|
||||
|
||||
table.docutils td, table.docutils th { padding: 1em; border-bottom: 0; }
|
||||
|
@ -24,22 +24,25 @@ The simplest form of selection is to select tags by name. For example,
|
||||
suppose you want to select all the ``<h2>`` tags in a document. The XPath
|
||||
query for this is simply::
|
||||
|
||||
//h2 (Selects all <h2> tags)
|
||||
//h:h2 (Selects all <h2> tags)
|
||||
|
||||
The prefix `//` means *search at any level of the document*. Now suppose you
|
||||
want to search for ``<span>`` tags that are inside ``<a>`` tags. That can be
|
||||
achieved with::
|
||||
|
||||
//a/span (Selects <span> tags inside <a> tags)
|
||||
//h:a/h:span (Selects <span> tags inside <a> tags)
|
||||
|
||||
If you want to search for tags at a particular level in the document, change
|
||||
the prefix::
|
||||
|
||||
/body/div/p (Selects <p> tags that are children of <div> tags that are
|
||||
/h:body/h:div/h:p (Selects <p> tags that are children of <div> tags that are
|
||||
children of the <body> tag)
|
||||
|
||||
This will match only ``<p>A very short ebook to demonstrate the use of XPath.</p>``
|
||||
in the `Sample ebook`_ but not any of the other ``<p>`` tags.
|
||||
in the `Sample ebook`_ but not any of the other ``<p>`` tags. The ``h:`` prefix
|
||||
in the above examples is needed to match XHTML tags. This is because internally,
|
||||
|app| represents all content as XHTML. In XHTML tags have a *namespace*, and
|
||||
``h:`` is the namespace prefix for HTML tags.
|
||||
|
||||
Now suppose you want to select both ``<h1>`` and ``<h2>`` tags. To do that,
|
||||
we need a XPath construct called *predicate*. A :dfn:`predicate` is simply
|
||||
@ -53,8 +56,9 @@ There are several new features in this XPath expression. The first is the use
|
||||
of the wildcard ``*``. It means *match any tag*. Now look at the test expression
|
||||
``name()='h1' or name()='h2'``. :term:`name()` is an example of a *built-in function*.
|
||||
It simply evaluates to the name of the tag. So by using it, we can select tags
|
||||
whose names are either `h1` or `h2`. XPath has several useful built-in functions.
|
||||
A few more will be introduced in this tutorial.
|
||||
whose names are either `h1` or `h2`. Note that the :term:`name()` function
|
||||
ignores namespaces so that there is no need for the ``h:`` prefix.
|
||||
XPath has several useful built-in functions. A few more will be introduced in this tutorial.
|
||||
|
||||
Selecting by attributes
|
||||
-----------------------
|
||||
@ -63,7 +67,7 @@ To select tags based on their attributes, the use of predicates is required::
|
||||
|
||||
//*[@style] (Select all tags that have a style attribute)
|
||||
//*[@class="chapter"] (Select all tags that have class="chapter")
|
||||
//h1[@class="bookTitle"] (Select all h1 tags that have class="bookTitle")
|
||||
//h:h1[@class="bookTitle"] (Select all h1 tags that have class="bookTitle")
|
||||
|
||||
Here, the ``@`` operator refers to the attributes of the tag. You can use some
|
||||
of the `XPath built-in functions`_ to perform more sophisticated
|
||||
@ -76,7 +80,7 @@ Selecting by tag content
|
||||
Using XPath, you can even select tags based on the text they contain. The best way to do this is
|
||||
to use the power of *regular expressions* via the built-in function :term:`re:test()`::
|
||||
|
||||
//h2[re:test(., 'chapter|section', 'i')] (Selects <h2> tags that contain the words chapter or
|
||||
//h:h2[re:test(., 'chapter|section', 'i')] (Selects <h2> tags that contain the words chapter or
|
||||
section)
|
||||
|
||||
Here the ``.`` operator refers to the contents of the tag, just as the ``@`` operator referred
|
||||
|
@ -5,8 +5,8 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: calibre 0.6.19\n"
|
||||
"POT-Creation-Date: 2009-10-22 17:20+MDT\n"
|
||||
"PO-Revision-Date: 2009-10-22 17:20+MDT\n"
|
||||
"POT-Creation-Date: 2009-10-25 18:54+MDT\n"
|
||||
"PO-Revision-Date: 2009-10-25 18:54+MDT\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: LANGUAGE\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -104,8 +104,8 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:126
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:543
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:552
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:769
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:772
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:771
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:774
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:106
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:139
|
||||
@ -292,31 +292,31 @@ msgstr ""
|
||||
msgid "This profile is intended for the Amazon Kindle DX."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:29
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:30
|
||||
msgid "Installed plugins"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:30
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:31
|
||||
msgid "Mapping for filetype plugins"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:31
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:32
|
||||
msgid "Local plugin customization"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:32
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:33
|
||||
msgid "Disabled plugins"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:74
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:75
|
||||
msgid "No valid plugin found in "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:232
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:233
|
||||
msgid "Initialization of plugin %s failed with traceback:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:362
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:363
|
||||
msgid ""
|
||||
" %prog options\n"
|
||||
"\n"
|
||||
@ -324,27 +324,27 @@ msgid ""
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:368
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:369
|
||||
msgid "Add a plugin by specifying the path to the zip file containing it."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:370
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:371
|
||||
msgid "Remove a custom plugin by name. Has no effect on builtin plugins"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:372
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:373
|
||||
msgid "Customize plugin. Specify name of plugin and customization string separated by a comma."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:374
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:375
|
||||
msgid "List all installed plugins"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:376
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:377
|
||||
msgid "Enable the named plugin"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:378
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/ui.py:379
|
||||
msgid "Disable the named plugin"
|
||||
msgstr ""
|
||||
|
||||
@ -951,7 +951,7 @@ msgid "Normally, if the input file has no cover and you don't specify one, a def
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/fb2ml.py:123
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/pml/pmlml.py:111
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/pml/pmlml.py:113
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/rb/rbml.py:98
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/txt/txtml.py:77
|
||||
msgid "Table of Contents:"
|
||||
@ -2071,7 +2071,7 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:41
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input_ui.py:28
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output_ui.py:28
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:88
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:99
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:115
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:165
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:44
|
||||
@ -2180,16 +2180,17 @@ msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:52
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:53
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:113
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:170
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:44
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:61
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:62
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:474
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:486
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:487
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:503
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:504
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:537
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:493
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:505
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:506
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:522
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:523
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:556
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:356
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:361
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:375
|
||||
@ -2265,20 +2266,36 @@ msgstr ""
|
||||
msgid "&Inline TOC"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:15
|
||||
msgid "Look & Feel"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:99
|
||||
msgid "Font rescaling wizard"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:17
|
||||
msgid "Control the look and feel of the output"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:100
|
||||
msgid ""
|
||||
"<p>This wizard will help you choose an appropriate font size key for your needs. Just enter the base font size of the input document and then enter an input font size. The wizard will display what font size it will be mapped to, by the font rescaling algorithm. You can adjust the algorithm by adjusting the output base font size and font key below. When you find values suitable for you, click OK.</p>\n"
|
||||
"<p>By default, if the output base font size is zero and/or no font size key is specified, calibre will use the values from the current Output Profile. </p>\n"
|
||||
"<p>See the <a href=\"http://calibre.kovidgoyal.net/user_manual/conversion.html#font-size-rescaling\">User Manual</a> for a discussion of how font size rescaling works.</p>"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:89
|
||||
msgid "Base &font size:"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:103
|
||||
msgid "&Output document"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:90
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:92
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:104
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:109
|
||||
msgid "&Base font size:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:105
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:108
|
||||
msgid "Font size &key:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:106
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:110
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:112
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:101
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:103
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:118
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:120
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:125
|
||||
@ -2289,43 +2306,75 @@ msgstr ""
|
||||
msgid " pt"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:91
|
||||
msgid "Line &height:"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:107
|
||||
msgid "Use &default values"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:93
|
||||
msgid "Remove &spacing between paragraphs"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:108
|
||||
msgid "&Input document"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:94
|
||||
msgid "No text &justification"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:111
|
||||
msgid "&Font size: "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:95
|
||||
msgid "&Linearize tables"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:113
|
||||
msgid " will map to size: "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:96
|
||||
msgid "&Transliterate unicode characters to ASCII."
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:114
|
||||
msgid "0.0 pt"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:97
|
||||
msgid "Font size &key:"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:16
|
||||
msgid "Look & Feel"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:98
|
||||
msgid "Input character &encoding"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:99
|
||||
msgid "&Disable font size rescaling"
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:18
|
||||
msgid "Control the look and feel of the output"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:100
|
||||
msgid "Base &font size:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:102
|
||||
msgid "Line &height:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:104
|
||||
msgid "Remove &spacing between paragraphs"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:105
|
||||
msgid "No text &justification"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:106
|
||||
msgid "&Linearize tables"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:107
|
||||
msgid "&Transliterate unicode characters to ASCII."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:109
|
||||
msgid "Input character &encoding:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:110
|
||||
msgid "&Disable font size rescaling"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:111
|
||||
msgid "Insert &blank line"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:101
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:112
|
||||
msgid "Wizard to help you choose an appropriate font size key"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:114
|
||||
msgid "Extra &CSS"
|
||||
msgstr ""
|
||||
|
||||
@ -3025,9 +3074,9 @@ msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:598
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:605
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:696
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:810
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:817
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:698
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:812
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:819
|
||||
msgid "No suitable formats"
|
||||
msgstr ""
|
||||
|
||||
@ -3063,28 +3112,28 @@ msgstr ""
|
||||
msgid "Sent news to"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:697
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:811
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:699
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:813
|
||||
msgid "Auto convert the following books before uploading to the device?"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:728
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:730
|
||||
msgid "Sending news to device."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:780
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:782
|
||||
msgid "Sending books to device."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:818
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:820
|
||||
msgid "Could not upload the following books to the device, as no suitable formats were found. Convert the book(s) to a format supported by your device first."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:866
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:868
|
||||
msgid "No space on device"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:867
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:869
|
||||
msgid "<p>Cannot upload books to device there is no more free space available "
|
||||
msgstr ""
|
||||
|
||||
@ -3214,126 +3263,126 @@ msgstr ""
|
||||
msgid "new email address"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:467
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:797
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:465
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:795
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:140
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:468
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:466
|
||||
msgid "Failed to install command line tools."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:471
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:469
|
||||
msgid "Command line tools installed"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:472
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:470
|
||||
msgid "Command line tools installed in"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:473
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:471
|
||||
msgid "If you move calibre.app, you have to re-install the command line tools."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:524
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:522
|
||||
msgid "No valid plugin path"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:525
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:523
|
||||
msgid "%s is not a valid plugin path"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:528
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:526
|
||||
msgid "Choose plugin"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:540
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:538
|
||||
msgid "Plugin cannot be disabled"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:541
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:539
|
||||
msgid "The plugin: %s cannot be disabled"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:550
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:548
|
||||
msgid "Plugin not customizable"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:551
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:549
|
||||
msgid "Plugin: %s does not need customization"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:575
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:573
|
||||
msgid "Customize %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:585
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:583
|
||||
msgid "Cannot remove builtin plugin"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:586
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:584
|
||||
msgid " cannot be removed. It is a builtin plugin. Try disabling it instead."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:619
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:617
|
||||
msgid "Error log:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:626
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:624
|
||||
msgid "Access log:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:654
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:652
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:589
|
||||
msgid "Failed to start content server"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:678
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:676
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:503
|
||||
msgid "Select location for books"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:686
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:684
|
||||
msgid "Invalid size"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:687
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:685
|
||||
msgid "The size %s is invalid. must be of the form widthxheight"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:738
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:743
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:736
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:741
|
||||
msgid "Invalid database location"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:739
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:737
|
||||
msgid "Invalid database location "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:740
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:738
|
||||
msgid "<br>Must be a directory."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:744
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:742
|
||||
msgid "Invalid database location.<br>Cannot write to "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:778
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:776
|
||||
msgid "Checking database integrity"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:798
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:796
|
||||
msgid "Failed to check database integrity"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:803
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:801
|
||||
msgid "Some inconsistencies found"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:804
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:802
|
||||
msgid "The following books had formats listed in the database that are not actually available. The entries for the formats have been removed. You should check them manually. This can happen if you manipulate the files in the library folder directly."
|
||||
msgstr ""
|
||||
|
||||
@ -3417,260 +3466,260 @@ msgstr ""
|
||||
msgid "&Saving books"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:471
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:490
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:368
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:173
|
||||
msgid "Preferences"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:472
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:491
|
||||
msgid "&Location of ebooks (The ebooks are stored in folders sorted by author and metadata is stored in the file metadata.db)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:473
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:492
|
||||
msgid "Browse for the new database location"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:475
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:494
|
||||
msgid "Show notification when &new version is available"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:476
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:495
|
||||
msgid "Default network &timeout:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:477
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:496
|
||||
msgid "Set the default timeout for network fetches (i.e. anytime we go out to the internet to get information)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:478
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:497
|
||||
msgid " seconds"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:479
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:498
|
||||
msgid "Choose &language (requires restart):"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:480
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:499
|
||||
msgid "Normal"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:481
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:500
|
||||
msgid "High"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:482
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:501
|
||||
msgid "Low"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:483
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:502
|
||||
msgid "Job &priority:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:484
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:503
|
||||
msgid "Preferred &output format:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:485
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:504
|
||||
msgid "Preferred &input format order:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:488
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:507
|
||||
msgid "Use &Roman numerals for series number"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:489
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:508
|
||||
msgid "Enable system &tray icon (needs restart)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:490
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:509
|
||||
msgid "Show ¬ifications in system tray"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:491
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:510
|
||||
msgid "Show cover &browser in a separate window (needs restart)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:492
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:511
|
||||
msgid "Search as you type"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:493
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:512
|
||||
msgid "Automatically send downloaded &news to ebook reader"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:494
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:513
|
||||
msgid "&Delete news from library when it is automatically sent to reader"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:495
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:514
|
||||
msgid "&Number of covers to show in browse mode (needs restart):"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:496
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:515
|
||||
msgid "Toolbar"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:497
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:516
|
||||
msgid "Large"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:498
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:517
|
||||
msgid "Medium"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:499
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:518
|
||||
msgid "Small"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:500
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:519
|
||||
msgid "&Button size in toolbar"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:501
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:520
|
||||
msgid "Show &text in toolbar buttons"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:502
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:521
|
||||
msgid "Select visible &columns in library view"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:505
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:524
|
||||
msgid "Use internal &viewer for:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:506
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:525
|
||||
msgid "Add an email address to which to send books"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:507
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:526
|
||||
msgid "&Add email"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:508
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:527
|
||||
msgid "Make &default"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:509
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:528
|
||||
msgid "&Remove email"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:510
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:529
|
||||
msgid "calibre can send your books to you (or your reader) by email"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:511
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:530
|
||||
msgid "&Maximum number of waiting worker processes (needs restart):"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:512
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:531
|
||||
msgid "&Check database integrity"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:513
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:532
|
||||
msgid "&Install command line tools"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:514
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:533
|
||||
msgid "Open calibre &configuration directory"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:515
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:534
|
||||
msgid "calibre contains a network server that allows you to access your book collection using a browser from anywhere in the world. Any changes to the settings will only take effect after a server restart."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:516
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:535
|
||||
msgid "Server &port:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:517
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:536
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:58
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:210
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:117
|
||||
msgid "&Username:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:518
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:537
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:59
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:211
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:119
|
||||
msgid "&Password:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:519
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:538
|
||||
msgid "If you leave the password blank, anyone will be able to access your book collection using the web interface."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:520
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:539
|
||||
msgid "The maximum size (widthxheight) for displayed covers. Larger covers are resized. "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:521
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:540
|
||||
msgid "Max. &cover size:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:522
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:541
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:60
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:212
|
||||
msgid "&Show password"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:523
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:542
|
||||
msgid "Max. &OPDS items per query:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:524
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:543
|
||||
msgid "&Start Server"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:525
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:544
|
||||
msgid "St&op Server"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:526
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:545
|
||||
msgid "&Test Server"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:527
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:546
|
||||
msgid "Run server &automatically on startup"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:528
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:547
|
||||
msgid "View &server logs"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:529
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:548
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:46
|
||||
msgid ""
|
||||
"<p>Remember to leave calibre running as the server only runs as long as calibre is running.\n"
|
||||
"<p>Stanza should see your calibre collection automatically. If not, try adding the URL http://myhostname:8080 as a new catalog in the Stanza reader on your iPhone. Here myhostname should be the fully qualified hostname or the IP address of the computer calibre is running on."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:531
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:550
|
||||
msgid "Here you can customize the behavior of Calibre by controlling what plugins it uses."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:532
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:551
|
||||
msgid "Enable/&Disable plugin"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:533
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:552
|
||||
msgid "&Customize plugin"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:534
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:553
|
||||
msgid "&Remove plugin"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:535
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:554
|
||||
msgid "Add new plugin"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:536
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:555
|
||||
msgid "Plugin &file:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:538
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:557
|
||||
msgid "&Add"
|
||||
msgstr ""
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user