From f2d43cd6d8deb8ff23b725f88923c239da6af1c6 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 24 Mar 2008 02:49:21 +0000 Subject: [PATCH] Switch the user manual to use the Sphinx documentation framework --- src/libprs500/manual/Makefile | 66 ++++ src/libprs500/manual/conf.py | 137 +++++++ src/libprs500/manual/conversion.rst | 6 + src/libprs500/manual/custom.py | 165 +++++++++ src/libprs500/manual/faq.rst | 121 +++++++ src/libprs500/manual/global.rst | 1 + src/libprs500/manual/gui.rst | 255 +++++++++++++ src/libprs500/manual/images/added_books.png | Bin 11443 -> 9667 bytes src/libprs500/manual/index.rst | 40 +++ src/libprs500/manual/make.py | 236 ------------ src/libprs500/manual/metadata.rst | 6 + src/libprs500/manual/news.rst | 6 + src/libprs500/manual/styles/common.css | 67 ---- src/libprs500/manual/templates/about.txt | 1 - src/libprs500/manual/templates/app.qhcp | 29 -- src/libprs500/manual/templates/app.qhp | 30 -- src/libprs500/manual/templates/cli-cmd.html | 47 --- src/libprs500/manual/templates/cli-index.html | 38 -- src/libprs500/manual/templates/faq.html | 153 -------- src/libprs500/manual/templates/gui.html | 338 ------------------ src/libprs500/manual/templates/index.html | 18 - src/libprs500/manual/templates/layout.html | 67 ---- src/libprs500/manual/templates/navtree.html | 59 --- src/libprs500/manual/templates/news.html | 39 -- src/libprs500/manual/templates/start.html | 65 ---- 25 files changed, 803 insertions(+), 1187 deletions(-) create mode 100644 src/libprs500/manual/Makefile create mode 100644 src/libprs500/manual/conf.py create mode 100644 src/libprs500/manual/conversion.rst create mode 100644 src/libprs500/manual/custom.py create mode 100644 src/libprs500/manual/faq.rst create mode 100644 src/libprs500/manual/global.rst create mode 100644 src/libprs500/manual/gui.rst create mode 100644 src/libprs500/manual/index.rst delete mode 100644 src/libprs500/manual/make.py create mode 100644 src/libprs500/manual/metadata.rst create mode 100644 src/libprs500/manual/news.rst delete mode 100644 src/libprs500/manual/styles/common.css delete mode 100644 src/libprs500/manual/templates/about.txt delete mode 100644 src/libprs500/manual/templates/app.qhcp delete mode 100644 src/libprs500/manual/templates/app.qhp delete mode 100644 src/libprs500/manual/templates/cli-cmd.html delete mode 100644 src/libprs500/manual/templates/cli-index.html delete mode 100644 src/libprs500/manual/templates/faq.html delete mode 100644 src/libprs500/manual/templates/gui.html delete mode 100644 src/libprs500/manual/templates/index.html delete mode 100644 src/libprs500/manual/templates/layout.html delete mode 100644 src/libprs500/manual/templates/navtree.html delete mode 100644 src/libprs500/manual/templates/news.html delete mode 100644 src/libprs500/manual/templates/start.html diff --git a/src/libprs500/manual/Makefile b/src/libprs500/manual/Makefile new file mode 100644 index 0000000000..74019f004e --- /dev/null +++ b/src/libprs500/manual/Makefile @@ -0,0 +1,66 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build.py +PAPER = + +ALLSPHINXOPTS = -d .build/doctrees -D latex_paper_size=$(PAPER) \ + $(SPHINXOPTS) . + +.PHONY: help clean html web htmlhelp latex changes linkcheck + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " web to make files usable by Sphinx.web" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " changes to make an overview over all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + +clean: + -rm -rf .build/* + +html: + mkdir -p .build/html .build/doctrees + $(SPHINXBUILD) -b custom $(ALLSPHINXOPTS) .build/html + @echo + @echo "Build finished. The HTML pages are in .build/html." + +web: + mkdir -p .build/web .build/doctrees + $(SPHINXBUILD) -b web $(ALLSPHINXOPTS) .build/web + @echo + @echo "Build finished; now you can run" + @echo " python -m sphinx.web .build/web" + @echo "to start the server." + +htmlhelp: + mkdir -p .build/htmlhelp .build/doctrees + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) .build/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in .build/htmlhelp." + +latex: + mkdir -p .build/latex .build/doctrees + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) .build/latex + @echo + @echo "Build finished; the LaTeX files are in .build/latex." + @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \ + "run these through (pdf)latex." + +changes: + mkdir -p .build/changes .build/doctrees + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) .build/changes + @echo + @echo "The overview file is in .build/changes." + +linkcheck: + mkdir -p .build/linkcheck .build/doctrees + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) .build/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in .build/linkcheck/output.txt." diff --git a/src/libprs500/manual/conf.py b/src/libprs500/manual/conf.py new file mode 100644 index 0000000000..cece3abd41 --- /dev/null +++ b/src/libprs500/manual/conf.py @@ -0,0 +1,137 @@ +# -*- coding: utf-8 -*- +# +# calibre documentation build configuration file, created by +# sphinx-quickstart.py on Sun Mar 23 01:23:55 2008. +# +# This file is execfile()d with the current directory set to its containing dir. +# +# The contents of this file are pickled, so don't put values in the namespace +# that aren't pickleable (module imports are okay, they're removed automatically). +# +# All configuration values have a default value; values that are commented out +# serve to show the default value. + +import sys, os + +# If your extensions are in another directory, add it here. +sys.path.append(os.path.abspath('../../../')) +sys.path.append(os.path.abspath('.')) +from libprs500 import __appname__, __version__ +import custom + +# General configuration +# --------------------- + +# Add any Sphinx extension module names here, as strings. They can be extensions +# coming with Sphinx (named 'sphinx.addons.*') or your custom ones. +extensions = ['custom'] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['.templates'] + +# The suffix of source filenames. +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# General substitutions. +project = __appname__ +copyright = '2008, Kovid Goyal' + +# The default replacements for |version| and |release|, also used in various +# other places throughout the built documents. +# +# The short X.Y version. +version = __version__ +# The full version, including alpha/beta/rc tags. +release = __version__ + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +today_fmt = '%B %d, %Y' + +# List of documents that shouldn't be included in the build. +unused_docs = ['global'] + +master_doc = 'index' + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + + +# Options for HTML output +# ----------------------- + +# 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' + +# 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, +# so a file named "default.css" will overwrite the builtin "default.css". +#html_static_path = ['static'] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Content template for the index page. +#html_index = '' + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +html_use_modindex = False + +# If true, the reST sources are included in the HTML build as _sources/. +html_copy_source = False + +# Output file base name for HTML help builder. +htmlhelp_basename = 'calibredoc' + + +# Options for LaTeX output +# ------------------------ + +# The paper size ('letter' or 'a4'). +latex_paper_size = 'letter' + +# The font size ('10pt', '11pt' or '12pt'). +latex_font_size = '10pt' + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, document class [howto/manual]). +#latex_documents = [] + +# Additional stuff for the LaTeX preamble. +#latex_preamble = '' + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_use_modindex = True diff --git a/src/libprs500/manual/conversion.rst b/src/libprs500/manual/conversion.rst new file mode 100644 index 0000000000..848c7477c0 --- /dev/null +++ b/src/libprs500/manual/conversion.rst @@ -0,0 +1,6 @@ +.. include:: global.rst + +.. _conversion: + +E-book Conversion +=================== diff --git a/src/libprs500/manual/custom.py b/src/libprs500/manual/custom.py new file mode 100644 index 0000000000..b6e974ed3a --- /dev/null +++ b/src/libprs500/manual/custom.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai + +## Copyright © 2008 +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License along +## with this program; if not, write to the Free Software Foundation, Inc., +## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +import shutil, sys, os +from sphinx.builder import StandaloneHTMLBuilder, bold +from genshi.template import TextTemplate +sys.path.append(os.path.abspath('../../../')) +from libprs500.linux import entry_points + +class CustomBuilder(StandaloneHTMLBuilder): + name = 'custom' + + +def substitute(app, doctree): + pass + +CLI_INDEX = '''\ +.. include:: ../global.rst +|| +.. _cli: +|| +|| +Command Line Interface +========================== +|| +.. image:: ../images/cli.png +|| +|| +Documented Commands +-------------------- +|| +.. toctree:: + :maxdepth: 1 + || +#for cmd, parser in documented_commands + $cmd +#end +|| +Undocumented Commands +------------------------- +|| +#for cmd in undocumented_commands + * ${cmd} + || +#end +|| +You can see usage for undocumented commands by executing them without arguments in a terminal +''' + +CLI_CMD=r''' +.. include:: ../global.rst +|| +.. _$cmd: +|| +.. role:: mycmdopt(literal) + :class: bold +|| +#def option(opt) +`${opt.get_opt_string() + ((', '+', '.join(opt._short_opts)) if opt._short_opts else '')}`:mycmdopt: +#end +$cmd +==================================================================== +|| +Usage:: +|| + $cmdline +|| +#for line in usage +#choose +#when len(line) > 0 +$line +#end +#otherwise +|| +#end +#end +#end +|| +[options] +------------ +|| +#for title, desc, options in groups +#if title +$title +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +|| +#end +#if desc +$desc +|| +#end +#for opt in options +${option(opt)} + ${opt.help.replace('\n', ' ').replace('%default', str(opt.default)) if opt.help else ''} +|| +#end +#end +''' + +def cli_docs(info): + info(bold('creating CLI documentation...')) + documented_cmds = [] + undocumented_cmds = [] + + for script in entry_points['console_scripts']: + module = script[script.index('=')+1:script.index(':')].strip() + cmd = script[:script.index('=')].strip() + module = __import__(module, fromlist=[module.split('.')[-1]]) + if hasattr(module, 'option_parser'): + documented_cmds.append((cmd, getattr(module, 'option_parser')())) + else: + undocumented_cmds.append(cmd) + + documented_cmds.sort(cmp=lambda x, y: cmp(x[0], y[0])) + undocumented_cmds.sort() + + templ = TextTemplate(CLI_INDEX) + raw = templ.generate(documented_commands=documented_cmds, + undocumented_commands=undocumented_cmds).render() + raw = raw.replace('||', '\n') + if not os.path.exists('cli'): + os.makedirs('cli') + open(os.path.join('cli', 'cli-index.rst'), 'wb').write(raw) + + templ = TextTemplate(CLI_CMD) + for cmd, parser in documented_cmds: + usage = [i for i in parser.usage.replace('%prog', cmd).splitlines()] + cmdline = usage[0] + usage = usage[1:] + usage = [i.replace(cmd, ':command:`%s`'%cmd) for i in usage] + groups = [(None, None, parser.option_list)] + for grp in parser.option_groups: + groups.append((grp.title, grp.description, grp.option_list)) + + raw = templ.generate(cmd=cmd, cmdline=cmdline, usage=usage, groups=groups).render() + raw = raw.replace('||', '\n').replace('<', '<').replace('>', '>') + open(os.path.join('cli', cmd+'.rst'), 'wb').write(raw) + +def generate(app): + app.builder.info(bold('copying images to the build tree...')) + shutil.rmtree('.build/html/images', True) + shutil.copytree('images', '.build/html/images') + shutil.rmtree('.build/html/images/.svn', True) + shutil.rmtree('.build/html/images/.bzr', True) + cli_docs(app.builder.info) + + +def setup(app): + app.add_builder(CustomBuilder) + app.connect('doctree-read', substitute) + app.connect('builder-inited', generate) diff --git a/src/libprs500/manual/faq.rst b/src/libprs500/manual/faq.rst new file mode 100644 index 0000000000..f299106726 --- /dev/null +++ b/src/libprs500/manual/faq.rst @@ -0,0 +1,121 @@ +.. include:: global.rst + +.. _faq: + +Frequently Asked Questions +========================== + +.. contents:: Contents + :depth: 1 + :local: + +E-book Format Conversion +------------------------- +.. contents:: Contents + :depth: 1 + :local: + +What formats does |app| support conversion to/from? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +|app| supports the conversion of the following formats to LRF: HTML, LIT, MOBI, PRC, EPUB, RTF, TXT, PDF and LRS. It also supports the conversion of LRF to LRS and HTML. Note that libprs500 does not support the conversion of DRMed ebooks. + +What are the best formats to convert to LRF? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +In order of decreasing preference: LIT, MOBI, HTML, PRC, RTF, TXT, PDF + +Why does the PDF conversion lose some images? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The PDF conversion tries to extract the text and images from the PDF file and convert them to and HTML based ebook. Some PDF files have images in a format that cannot be extracted (vector images). + +There are no images in the LRF file after conversion from HTML? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +If you use the GUI to convert an HTML file, you have to create a zip file with the HTML file and any images it references and then convert that ZIP file to LRF. + +How do I convert my file containing non-English characters? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +There are two aspects to this problem: + 1. Knowing the encoding of the source file: |app| tries to guess what character encoding your source files use, but often, this is impossible, so you need to tell it what encoding to use. This can be done in the GUI via the :guilabel:`Source encoding` field in the :guilabel:`Look & Feel` section. The command-line tools all have an :option:`--encoding` option. + 2. Embedding fonts: If you are generating an LRF file to read on your SONY Reader, you are limited by the fact that the Reader only supports a few non-English characters in the fonts it comes pre-loaded with. You can work around this problem by embedding a unicode-aware font that supports the character set your file uses into the LRF file. You should embed atleast a serif and a sans-serif font. Be aware that embedding fonts significantly slows down page-turn speed on the reader. + + +How do I use some of the advanced features of the conversion tools? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + You can get help on any individual feature of the converters by mousing over it in the GUI or running ``html2lrf --help`` at a terminal. A good place to start is to look at the following demo files that demonstrate some of the advanced features: + * `html-demo.zip `_ + * `txt-demo.zip `_ + + +Device Integration +------------------- + +.. contents:: Contents + :depth: 1 + :local: + +What devices does |app| support? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +At the moment |app| has full support for the SONY PRS500 and PRS505. However, using the :guilabel:`Save to disk` function you can use it with any ebook reader that exports itself as a USB disk. + +I used |app| to transfer some books to my reader, and now the SONY software hangs every time I connect the reader? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +You should not use both |app| and Connect to transfer books to the reader. You can fix this problem by: + * Removing any storage cards from your reader. + * Deleting the file media.xml from the reader's main memory using windows explorer (search for the file to find all locations where it is present). Note that by doing this you will lose all your collections, bookmarks, history etc. + * Unplugging the reader and waiting till the list of books shows up again + * Re-connecting the reader and starting the SONY software + +Library Management +------------------ + +.. contents:: Contents + :depth: 1 + :local: + +What formats does |app| read metadata from? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +|app| reads metadata from the following formats: LRF, PDF, LIT, RTF, OPF, MOBI, PRC, EPUB. In addition it can write metadata to: LRF, RTF, OPF + +Where are the book files stored? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +When you import books into the library, they are stored in a database. The database location can be found out by clicking the configuration button (The button with the icon of a hammer next to the search bar). + +Can I save my books to the disk? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +You can save your books to the disk by selecting the books and clicking the "Save to disk" button. Your books will be saved in nicely organized folders. + +Content From The Web +--------------------- +.. contents:: Contents + :depth: 1 + :local: + +I want |app| to download news from my favorite news website. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +If you are reasonably proficient with computers, you can teach |app| to download news from any website of your choosing. To learn how to do this see :ref:`news`. + +Otherwise, you can register a request for a particular news site by adding a comment `here `_. + +Can I use web2lrf to download an arbitrary website? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +``web2lrf --url http://mywebsite.com default`` + +Miscellaneous +-------------- + +.. contents:: Contents + :depth: 1 + :local: + +Why does |app| show only some of my fonts on OS X? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +|app| embeds fonts in ebook files it creates. E-book files support embedding only TrueType (.ttf) fonts. Most fonts on OS X systems are in .dfont format, thus they cannot be embedded. |app| shows only TrueType fonts founf on your system. You can obtain many TrueType fonts on the web. Simply download the .ttf files and add them to the Library/Fonts directory in your home directory. + +The graphical user interface of |app| is not starting on Windows? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +If you've never used the graphical user interface before, try deleting the file library1.db (it will be somewhere under :file:`C:\\Documents and Settings` on Windows XP and :file:`C:\\Users` on Windows Vista. If that doesn't fix the problem, locate the file libprs500.log (in the same places as library1.db) and post its contents in a help message on the `Forums `_. + +I want some feature added to |app|. What can I do? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +You have two choices: + 1. Create a patch by hacking on |app| and send it to me for review and inclusion. See `Development `_. + 2. `Open a ticket `_ (you have to register and login first) and hopefully I will find the time to implement your feature. diff --git a/src/libprs500/manual/global.rst b/src/libprs500/manual/global.rst new file mode 100644 index 0000000000..8d4dcd896f --- /dev/null +++ b/src/libprs500/manual/global.rst @@ -0,0 +1 @@ +.. |app| replace:: libprs500 diff --git a/src/libprs500/manual/gui.rst b/src/libprs500/manual/gui.rst new file mode 100644 index 0000000000..5079b62a5c --- /dev/null +++ b/src/libprs500/manual/gui.rst @@ -0,0 +1,255 @@ +.. include:: global.rst + +.. _gui: + +The Grahical User Interface +============================ + +The Graphical User Interface *(GUI)* provides access to all +library management and ebook format conversion features. The basic workflow +for using |app| is to first add books to the library from your hard disk. +|app| will automatically try to read metadata from the books and add them +to its internal database. Once they are in the database, you can performa various +:ref:`actions` on them that include conversion from one format to another, +transfer to the reading device, viewing on your computer, editing metadata, including covers, etc. + +The interface is divided into various sections: + +.. contents:: + :depth: 1 + :local: + +.. _actions: + +Actions +-------- + +.. image:: images/actions.png + :alt: The Actions Toolbar + +The actions toolbar provides convenient shortcuts to commonly used actions. Most of the action buttons have little arrows next to them. By clicking the arrows, you can perform variations on the default action. + +.. contents:: + :depth: 1 + :local: + +.. _add_books: + +|adbi| Add books +~~~~~~~~~~~~~~~~~~ +.. |adbi| image:: images/add_books.png + :align: middle + +The :guilabel:`Add books` action has three variations, accessed by the arrow next to the button. + + + 1. **Add books from a single directory**: Opens a file chooser dialog and allows you to specify which books in a directory should be added. This action is *context sensitive*, i.e. it depends on which :ref:`catalog ` you have selected. If you have selected the :guilabel:`Library`, books will be added to the library. If you have selected the ebook reader device, the books will be uploaded to the device, and so on. + + 2. **Add books recursively (One book per directory)**: Allows you to choose a directory. The directory and all its sub-directories are scanned recursively and any ebooks found are added to the library.The algorithm assumes that each directory contains a single book. All ebook files in a directory are assumedto be the same book in different formats. This action is the inverse of the :ref:`Save to disk ` action, i.e. you can :guilabel:`Save to disk`, delete the books and re-add them with no lost information (except date). + + 3. **Add books recursively (Multiple books per directory)**: Allows you to choose a directory. The directory and all its sub-directories are scanned recursively and any ebooks found are added to the library.The algorithm assumes that each directory contains many books. All ebook files with the same name in a directory are assumed to be the same book in different formats. This action is the inverse of the :ref:`Save to disk ` action, i.e. you can :guilabel:`Save to disk`, delete the books and re-add them with no lost information (except date). + + +The :guilabel:`Add books` action can read metadata from the following ebook formats: ``LRF, EPUB, LIT, MOBI, RTF, PDF, PRC, HTML``. In addition it tries to guess metadata from the filename. See the :ref:`config_filename_metadata` section, to learn how to configure this. + +To add a new format to an existing book, use the :ref:`edit_meta_information` action. + +.. _remove_books: + +|rbi| Remove books +~~~~~~~~~~~~~~~~~~~~~ +.. |rbi| image:: images/remove_books.png + :align: middle + +The :guilabel:`Remove books` action deletes books permanently, so use it with care. It is *context sensitive*, i.e. it depends on which :ref:`catalog ` you have selected. If you have selected the :guilabel:`Library`, books will be removed from the library. If you have selected the ebook reader device, the books will be removed from the device. To remove only a particular format for a given book use the :ref:`edit_meta_information` action. + +.. _edit_meta_information: + +|emii| Edit meta information +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. |emii| image:: images/edit_meta_information.png + :align: middle + + +The :guilabel:`Edit meta information` action has two variations, accessed by the arrow next to the button. + + 1. **Edit metadata individually**: This allows you to edit the metadata of books one-by-one, with the option of fetching metadata, including covers from the internet. It also allows you to add/remove particular ebook formats from a book. For more detail see :ref:`metadata`. + + 2. **Edit metadata in bulk**: This allows you to edit common metadata fields for large numbers of books simulataneously. It operates on all the books you have selected in the :ref:`Library view `. + +.. _send_to_device: + +|stdi| Send to device +~~~~~~~~~~~~~~~~~~~~~~~~ +.. |stdi| image:: images/send_to_device.png + :align: middle + +The :guilabel:`Send to device` action has two variations, accessed by the arrow next to the button. + + 1. **Send to main memory**: The selected books are transferred to the main memory of the ebook reader. + 2. **Send to card**: The selected books are transferred to the storage card on the ebook reader. + +.. _save_to_disk: + +|svdi| Save to disk +~~~~~~~~~~~~~~~~~~~~~~~~~ +.. |svdi| image:: images/save_to_disk.png + :align: middle + +The :guilabel:`Save to disk` action has two variations, accessed by the arrow next to the button. + +.. _save_to_disk_multiple: + + 1. **Save to disk**: This will save the selected books to disk organized in directories. The directory structure looks like:: + + Author + Title + Book Files + +.. _save_to_disk_single: + + 2. **Save to disk in a single directory**: The selected books are saved to disk in a single directory. + +All available formats as well as metadata is stored to disk for each selected book. Metadata is stored in an OPF file. + +Saved books can be re-imported to the library without any loss of information by using the :ref:`Add books ` action. + +.. _fetch_news: + +|fni| Fetch news +~~~~~~~~~~~~~~~~~ +.. |fni| image:: images/fetch_news.png + :align: middle + +The :guilabel:`Fetch news` action downloads news from various websites and converts it into an ebook that can be read on your ebook reader. Normally, the newly created ebook is added to your ebook library, but if an ebook reader is connected at the time the download finishes, the news is uploaded to the reader directly. + +The :guilabel:`Fetch news` action uses simple recipes (10-15 lines of code) for each news site. To learn how to create recipes for your own news sources, see :ref:`news`. + +.. _convert_ebooks: + +|cei| Convert e-books +~~~~~~~~~~~~~~~~~~~~~~ +.. |cei| image:: images/convert_ebooks.png + :align: middle + +Ebooks can be converted from a number of formats into the LRF format (for the SONY Reader). Note that ebooks you purchase will typically have `Digital Rights Management ` *(DRM)*. |app| will not convert these ebooks. For many DRM formats, it is easy to remove the DRM, but as this is illegal, you have to find tools to liberate your books yourself and then use |app| to convert them. + +For most people, conversion should be a simple 1-click affair. But if you want to learn more about the conversion process, see :ref:`conversion`. + +The :guilabel:`Convert E-books` action has three variations, accessed by the arrow next to the button. + + 1. **Convert individually**: This will allow you to specify conversion options to customize the conversion of each selected ebook. + + 2. **Bulk convert**: This allows you to specify options only once to convert a number of ebooks in bulk. + + 3. **Set conversion defaults**: Allows you to set the default settings for future conversions. + +.. _view: + +|vi| View +~~~~~~~~~~~ +.. |vi| image:: images/view.png + :align: middle + +The :guilabel:`View` action displays the book in an ebook viewer program. |app| has a builtin viewer for the LRF format. For other formats it uses the default operating system application. If a book has more than one format, you can view a particular format by clicking the arrow next to the :guilabel:`View` button. + +.. _catalogs: + +Catalogs +---------- +.. image:: images/catalogs.png + +A *catalog* is a collection of books. |app| can manage three different catalogs: + + 1. **Library**: This is a collection of books stored in a database file on your computers harddisk. + + 2. **Reader**: This is a collection of books stored in the main memory of your ebook reader. It will be available when you connect the reader to your computer. + + 3. **Card**: This is a collection of books stored on the storage card in your reader. Note that ${app} supports only a single storage card at a time. + +.. _search_sort: + +Search & Sort +--------------- +.. image:: images/search_sort.png + +The Search & Sort section allows you to perform several powerful actions on your book collections. + + * You can sort them by title, author, date, rating etc. by clicking on the column titles. + + * You can search for a particular book or set of books using the search bar. More on that below. + + * You can quickly and conveniently edit metadata by double-clicking the entry you want changed in the list. + + * You can perform :ref:`actions` on sets to books. To select multiple books you can either: + + - Keep the :kbd:`Ctrl` key pressed and click on the books you want selected. + + - Keep the :kbd:`Shift` key pressed and click on the starting and ending book of arange of books you want selected. + + * You can configure which fields you want displayed by using the :ref:`configuration` dialog. + +.. _search_interface: + +The Search Interface +--------------------- +You can search all the metadata by entering search terms in the search bar. Searches are case insensitive. For example:: + + Asimov Foundation format:lrf + +This will match all books in your library that have ``Asimov`` and ``Foundation`` in their metadata and are available in the LRF format. You can build advanced search queries easily using the :guilabel:`Advanced Search Dialog`, accessed by clicking the button |sbi|. + +.. |sbi| image:: images/search_button.png + :align: middle + +.. figure:: images/search.png + + :guilabel:`Advanced Search Dialog` + + You can search on individual fields as shown. The "Negate" checkbox implies that only results that do not match the search expression will be returned. You can require all the search criteria to match or any of them. + +.. _configuration: + +Configuration +--------------- +The configuration dialog allows you to set some global defaults used by all of |app|. To access it, click the |cbi|. + +.. |cbi| image:: images/configuration.png + +.. _config_filename_metadata: + +Guessing metadata from file names +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +In the :guilabel:`Advanced` section of the configuration dialog, you can specify a regularexpression that |app| will use to try and guess metadata from the names of ebook files +that you add to the library. The default regular expression is:: + + title - author + +i.e., it will assumes that all character up to the first ``-`` are the title of the book and subsequent characters are the author of the book. For example, the filename:: + + Foundation and Earth - Isaac Asimov.txt + +will be interpreted to have the title: Foundation and Earth and author: Isaac Asimov + +.. tip:: + If the filename does not contain the hyphen, the regular expression will fail. + +.. _book_details: + +Book Details +------------- +.. image:: images/book_details.png + +The Book Details display shows you extra information and the cover for the currently selected book. + +.. _jobs: + +Jobs +----- +.. image:: images/jobs.png + +The Jobs panel shows you the number of currently running jobs. Jobs are tasks that run in a separate process, they include converting ebooks and talking to your reader device. You can click on the jobs panel to access the list of jobs. Once a job has completed, by double-clicking it in the list, you can see a detailed log from that job. This is useful to debug jobs that may not have completed successfully. + + + + diff --git a/src/libprs500/manual/images/added_books.png b/src/libprs500/manual/images/added_books.png index a50de011010ad7655f31cd290ecc065342e5e9db..758123d85d61f4f0e433444ce49f42ed6e5bdc22 100644 GIT binary patch literal 9667 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 qEUemE`+&8`q97?DT2mx~L_2vrN{`Tq~T`T^bm literal 11443 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 diff --git a/src/libprs500/manual/index.rst b/src/libprs500/manual/index.rst new file mode 100644 index 0000000000..60a1c8a5f0 --- /dev/null +++ b/src/libprs500/manual/index.rst @@ -0,0 +1,40 @@ +.. include:: global.rst +=============================================== +|app| User Manual +=============================================== + +|app| is an e-book library manager. It can view, convert and catalog e-books in most of the major e-book formats. It can also talk to a few e-book reader devices. It can go out to the internet and fetch metadata for your books. It can download newspapers and convert them into e-books for convenient reading. It is cross platform, running on Linux, Windows and OS X. + +So you've just started |app|. What do you do now? Well, before |app| can do anything with your ebooks, it first has to know about them. So drag and drop a few ebook files into |app|, or click the "Add books" button and browse for the ebooks you want to work with. Once you've added the books, they will show up in the main view looking something like this: + +.. image:: images/added_books.png + +Once you've admired the list of books you just added to your heart's content, you'll probably want to actually read one. In order to do that you'll have to convert the book to a format your reader understands. For the SONY Reader that's the LRF format. Conversion is a breeze, just select the book you want to convert, and click the "Convert E-book" button. Ignore all the options for now and just click "OK". The little hourglass in the bottom right corner will start spinning. Once it's finished spinning, your converted book is ready. Click to "View" button to read the book. + +Now if you want to read the book on your reader, just connect it to the computer, wait till libprs500 detects it (10-20secs) and then click the "Send to device" button. Once the hourglass stops spinning again, disconnect your reader and read away! + +To get started with more advanced usage, you should read about the :ref:`Graphical User Interface `. For even more power and versatility, learn the :ref:`Command Line Interface `. + +You will find the list of :ref:`Frequently Asked Questions ` useful as well. + +Sections +------------ + +.. toctree:: + :maxdepth: 1 + + gui + news + conversion + metadata + cli/cli-index + faq + +:ref:`search` +------------------------ + +:ref:`genindex` +--------------------- + + + diff --git a/src/libprs500/manual/make.py b/src/libprs500/manual/make.py deleted file mode 100644 index 8a038d2e39..0000000000 --- a/src/libprs500/manual/make.py +++ /dev/null @@ -1,236 +0,0 @@ -#!/usr/bin/env python -## Copyright (C) 2008 Kovid Goyal kovid@kovidgoyal.net -## This program is free software; you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 2 of the License, or -## (at your option) any later version. -## -## This program is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -## GNU General Public License for more details. -## -## You should have received a copy of the GNU General Public License along -## with this program; if not, write to the Free Software Foundation, Inc., -## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -'''''' - -import sys, glob, mechanize, time, subprocess, os, shutil, re -from tempfile import NamedTemporaryFile -from genshi.template import TemplateLoader, MarkupTemplate - - -# Load libprs500 from source copy -sys.path.insert(1, os.path.dirname(os.path.dirname(os.getcwdu()))) - -from libprs500.ebooks.BeautifulSoup import BeautifulSoup -from libprs500.linux import entry_points -from libprs500 import __appname__, __author__, __version__ - -class Template(MarkupTemplate): - - def generate(self, *args, **kwargs): - kwdargs = dict(app=__appname__, author=__author__.partition('<')[0].strip(), - version=__version__, footer=True) - kwdargs.update(kwargs) - return MarkupTemplate.generate(self, *args, **kwdargs) - -loader = TemplateLoader(os.path.abspath('templates'), auto_reload=True, - variable_lookup='strict', default_class=Template) - -def browser(): - opener = mechanize.Browser() - opener.set_handle_refresh(True) - opener.set_handle_robots(False) - opener.addheaders = [('User-agent', 'Mozilla/5.0 (X11; U; i686 Linux; en_US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4')] - return opener - -def validate(file=None): - br = browser() - files = [file] if file is not None else glob.glob('build/*.html') - for f in files: - print 'Validating', f - raw = open(f).read() - br.open('http://validator.w3.org/#validate_by_input') - br.form = tuple(br.forms())[2] - br.form.set_value(raw, id='fragment') - res = br.submit() - soup = BeautifulSoup(res.read()) - if soup.find('div', id='result').find(id='congrats') is None: - print 'Invalid HTML in', f - t = NamedTemporaryFile() - t.write(unicode(soup).encode('utf-8')) - subprocess.call(('xdg-open', t.name)) - time.sleep(2) - return - -def clean(): - if os.path.exists('build'): - shutil.rmtree('build') - return 0 - -def compile_help(): - QTDIR = '/usr/local/Trolltech/Qt-4.4.0-beta1' - QTBIN = QTDIR + '/bin' - QTLIB = QTDIR + '/lib' - QCG = os.path.join(QTBIN, 'qcollectiongenerator') - QTA = os.path.join(QTBIN, 'assistant') - os.environ['LD_LIBRARY_PATH'] = QTLIB - for f in ('build/%s.qch'%__appname__, 'build/%s.qhc'%__appname__): - if os.path.exists(f): - os.unlink(f) - cwd = os.getcwd() - os.chdir('build') - try: - subprocess.check_call((QCG, __appname__+'.qhcp', '-o', __appname__+'.qhc')) - subprocess.call((QTA, '-collectionFile', __appname__+'.qhc')) - finally: - os.chdir(cwd) - - -def get_subsections(section, level=0, max_level=1, prefix='templates'): - src = os.path.join(prefix, section) - if not os.path.exists(src): - return [] - soup = BeautifulSoup(open(src, 'rb').read().decode('UTF-8')) - toc = soup.find(id='toc') - if toc is None: - return [] - return [dict(href=section+a['href'] if a['href'].startswith('#') else a['href'], - title=a.string.replace('&', '&'), - subsections=get_subsections(a['href'], level=1, - prefix=prefix, max_level=max_level) if level]+>', '', raw) - raw = re.sub(r'<(script|style)([^<>]+)/>', r'<\1 \2>', raw) - raw = re.sub(r'<(link|meta)([^<>]+)/>', r'<\1 \2>', raw) - open('build'+os.sep+'navtree.html', 'wb').write(raw) - - -def render(): - for d in ('images', 'styles'): - tgt = os.path.join('build', d) - if not os.path.exists(tgt): - os.mkdir(tgt) - for f in glob.glob(d+os.sep+'*'): - if os.path.isfile(f): - ftgt = os.path.join(tgt, os.path.basename(f)) - if os.path.exists(ftgt): - os.unlink(ftgt) - os.link(f, ftgt) - - sections = [i['href'] for i in get_subsections('start.html')] - sections.remove('cli-index.html') - - for f in sections + ['index.html', 'start.html']: - kwdargs = {} - if not isinstance(f, basestring): - f, kwdargs = f - dt = f.rpartition('.')[-1] - if dt == 'html': - dt = 'xhtml' - if f == 'index.html': - dt=('html', '-//W3C//DTD XHTML 1.0 Frameset//EN', 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd') - - raw = loader.load(f).generate(**kwdargs).render(doctype=dt) - open(os.path.join('build', f), 'wb').write(raw) - - -def all(opts): - clean() - os.mkdir('build') - qhp() - html() - if opts.validate: - validate() - - return 0 - -if __name__ == '__main__': - if not os.path.exists('build'): - os.mkdir('build') - - from libprs500 import OptionParser - parser = OptionParser(usage='%prog [options] target [arguments to target]') - parser.add_option('--validate', default=False, action='store_true', - help='Validate all HTML files against their DTDs.') - opts, args = parser.parse_args() - - if len(args) == 0: - clean() - sys.exit(all(opts)) - elif len(args) == 1: - func = eval(args[0]) - fargs = [] - if args[0] == 'all': - fargs = [opts] - elif len(args) > 1: - func = eval(args[0]) - fargs = args[1:] - if func is None: - print >>sys.stderr, 'Unknown target', sys.argv(1) - sys.exit(1) - else: - parser.print_help() - sys.exit(1) - sys.exit(func(*fargs)) - \ No newline at end of file diff --git a/src/libprs500/manual/metadata.rst b/src/libprs500/manual/metadata.rst new file mode 100644 index 0000000000..426e45c9ca --- /dev/null +++ b/src/libprs500/manual/metadata.rst @@ -0,0 +1,6 @@ +.. include:: global.rst + +.. _metadata: + +Editing E-book Metadata +======================== diff --git a/src/libprs500/manual/news.rst b/src/libprs500/manual/news.rst new file mode 100644 index 0000000000..21e80f9ced --- /dev/null +++ b/src/libprs500/manual/news.rst @@ -0,0 +1,6 @@ +.. include:: global.rst + +.. _news: + +Adding your favorite news website +================================== diff --git a/src/libprs500/manual/styles/common.css b/src/libprs500/manual/styles/common.css deleted file mode 100644 index 76a3b8e8c1..0000000000 --- a/src/libprs500/manual/styles/common.css +++ /dev/null @@ -1,67 +0,0 @@ -body { - font-family: sans-serif; - background-color: white; -} - -a { - text-decoration: none; - color: blue; -} - -a:hover { - color: red; -} - -a:visited { - color: blue; -} - -.documentHeading { - text-align: center; - font-family: monospace; -} - -.sectionHeading { - font-family: monospace; -} - -.subsectionHeading { -font-family: monospace; -} - -.action { - font-family: monospace; - font-weight: bold; -} - -.footer { - font-size: x-small; - color: lightgray; - text-align: right; -} - -.option { - font-family: monospace; - color: green; -} - - -.option_table td { - padding-bottom : 1em; -} - -.cmd { - font-family: monospace; - font-weight: bold; -} - -.runcmd { - background: #eeeeee; - border: inset 2px; - padding: 0.2em; -} - -.cmdlist li { - font-family: monospace; - margin-bottom: 0.2em; -} \ No newline at end of file diff --git a/src/libprs500/manual/templates/about.txt b/src/libprs500/manual/templates/about.txt deleted file mode 100644 index 3a83a1c360..0000000000 --- a/src/libprs500/manual/templates/about.txt +++ /dev/null @@ -1 +0,0 @@ -${app} is an ebook management application with support for various ebook readers. Created by ${author} © 2007. diff --git a/src/libprs500/manual/templates/app.qhcp b/src/libprs500/manual/templates/app.qhcp deleted file mode 100644 index 4d5af9d701..0000000000 --- a/src/libprs500/manual/templates/app.qhcp +++ /dev/null @@ -1,29 +0,0 @@ - - - - ${app} User Manual - qthelp://${app}/manual/start.html - ../../gui2/images/library.png - false - false - true - - About ${app} - - - about.txt - ../../gui2/images/dialog_information.svg - - - - - - ${app}.qhp - ${app}.qch - - - - ${app}.qch - - - diff --git a/src/libprs500/manual/templates/app.qhp b/src/libprs500/manual/templates/app.qhp deleted file mode 100644 index c4d91919ca..0000000000 --- a/src/libprs500/manual/templates/app.qhp +++ /dev/null @@ -1,30 +0,0 @@ - - - ${app} - manual - - - - - -
- -
- - -
- -
- - - - - ${file} - - - - - - \ No newline at end of file diff --git a/src/libprs500/manual/templates/cli-cmd.html b/src/libprs500/manual/templates/cli-cmd.html deleted file mode 100644 index 1604a04bed..0000000000 --- a/src/libprs500/manual/templates/cli-cmd.html +++ /dev/null @@ -1,47 +0,0 @@ -%s'%cmd) for i in usage] - groups = [(None, None, parser.option_list)] - for grp in parser.option_groups: - groups.append((grp.title, grp.description, grp.option_list)) -?> - - - - - - ${cmd} - - - -
${cmdline}
-

- ${HTML(line)}
-

-

[options]

- - - - - - - - - -

${title}

${desc}
 
- ${option.get_opt_string()}
${short} -
${help}
- - - - \ No newline at end of file diff --git a/src/libprs500/manual/templates/cli-index.html b/src/libprs500/manual/templates/cli-index.html deleted file mode 100644 index d50d94c867..0000000000 --- a/src/libprs500/manual/templates/cli-index.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - ${title} - - - -
CLI
-

- ${app} has a very comprehensive command line - interface to perform most operations that can be performed by the GUI. -

-

Documented commands

-
-

Undocumented commands

-
    -
  • ${item}
  • -
-

You can see usage for undocumented commands by executing them without arguments in a terminal

- - - - \ No newline at end of file diff --git a/src/libprs500/manual/templates/faq.html b/src/libprs500/manual/templates/faq.html deleted file mode 100644 index 48d98dcd13..0000000000 --- a/src/libprs500/manual/templates/faq.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - ${title} - - - - - - -

What devices does ${app} support?

-

- At the moment ${app} has full support for the SONY PRS500 and PRS505. However, using the "save to disk" function you can use it with any ebook reader that exports itself as a USB disk. -

- -

What formats does ${app} read metadata from?

-

- ${app} reads metadata from the following formats: LRF, PDF, LIT, RTF, OPF, MOBI, PRC, EPUB. - In addition it can write metadata to: LRF, RTF, OPF -

-

What formats does ${app} support conversion to/from?

-

- ${app} supports the conversion of the following formats to LRF: HTML, LIT, MOBI, PRC, EPUB, RTF, TXT, PDF and LRS. It also supports the conversion of LRF to LRS and HTML(upcoming). Note that ${app} does not support the conversion of DRMed ebooks. -

-

What are the best formats to convert to LRF?

-

- In order of decreasing preference: LIT, MOBI, HTML, PRC, RTF, TXT, PDF -

-

Why does the PDF conversion lose some images?

-

- The PDF conversion tries to extract the text and images from the PDF file and convert them to and HTML based ebook. Some PDF files have images in a format that cannot be extracted (vector images). -

-

Where are the book files stored?

-

- When you import books into the library, they are stored in a database. The database location can be found out by clicking the configuration button (The button with the icon of a hammer next to the search bar). -

-

Can I save my books to the disk?

-

- You can save your books to the disk by selecting the books and clicking the "Save to disk" button. Your books will be saved in nicely organized folders. -

-

I used ${app} to transfer some books to my reader, and now the SONY software hangs every time I connect the reader?

-

- You should not use both ${app} and Connect to transfer books to the reader. You can fix this problem by: -

-
  • Removing any storage cards from your reader. -
  • Deleting the file media.xml from the reader's main memory using windows explorer (search for the file to find all locations where it is present). Note that by doing this you will lose all your collections, bookmarks, history etc. -
  • Unplugging the reader and waiting till the list of books shows up again -
  • Re-connecting the reader and starting the SONY software -
- -

No images in the LRF file after conversion from HTML?

-

- If you use the GUI to convert an HTML file, you have to create a zip file with the HTML file and any images it references and then convert that ZIP file to LRF. -

-

Why does ${app} show only some of my fonts on OS X?

-

- ${app} embeds fonts in ebook files it creates. E-book files support embedding only - TrueType (.ttf) fonts. Most fonts on OS X systems are in .dfont format, thus they - cannot be embedded. ${app} shows only TrueType fonts founf on your system. You can - obtain many TrueType fonts on the web. Simply download the .ttf files and add them - to the Library/Fonts directory in your home directory. -

- -

How do I convert my file containing non-English characters?

-

- There are two aspects to this problem: -

-
    -
  1. - Knowing the encoding of the source file: ${app} tries to guess what - character encoding your source files use, but often, this is impossible, - so you need to tell it what encoding to use. This can be done in the GUI - via the "Source encoding" field in the "Look & Feel" section. - The command-line tools all have an --encoding option. -
  2. -
  3. - Embedding fonts: If you are generating an LRF file to read on your - SONY Reader, you are limited by the fact that the Reader only supports - a few non-English characters in the fonts it comes pre-loaded with. - You can work around this problem by embedding a unicode-aware font - that supports the character set your file uses into the LRF file. You - should embed atleast a serif and a sans-serif font. Be aware that - embedding fonts significantly slows down page-turn speed on the reader. -
  4. -
- -

The graphical user interface of ${app} is not starting on Windows?

-

- If you've never used the graphical user interface before, - try deleting the file library1.db (it will be somewhere under C:|Documents and Settings on - Windows XP and C:|Users on Windows Vista. If that doesn't fix the problem, locate the file - libprs500.log (in the same places as library1.db) and post its contents in a help message on - the Forums. -

- -

Can I use web2lrf to download an arbitrary website?

-
web2lrf --url http://mywebsite.com default
- -

I want some feature added to ${app}. What can I do?

-

- You have two choices: -

-
    -
  1. Create a patch by hacking on ${app} and send it to me for review and inclusion. See - Development. -
  2. -
  3. Open a ticket (you have to register and login first) and hopefully I will find the time to implement your feature. -
  4. -
- -

How do I use some of the advanced features of the conversion tools?

-

- You can get help on any individual feature of the converters by mousing over it in the GUI or running html2lrf --help at a terminal. A good place to start is to look at the following demo files that demonstrate some of the advanced features: -

- - - - diff --git a/src/libprs500/manual/templates/gui.html b/src/libprs500/manual/templates/gui.html deleted file mode 100644 index 397661aeca..0000000000 --- a/src/libprs500/manual/templates/gui.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - - - - - ${title} - - - - -

- The Graphical User Interface (GUI) provides access to all - library management and ebook format conversion features. The basic workflow - for using ${app} is to first add books to the library from your hard disk. - ${app} will automatically try to read metadata from the books and add them - to its internal database. Once they are in the database, you can performa various - actions on them that include conversion from one format to another, - transfer to the reading device, viewing on your computer, editing metadata, including covers, etc. -

-

- The interface is divided into various sections: -

- - -
-

Actions

-
The Actions toolbar
-

- The actions toolbar provides convenient shortcuts to commonly used actions. - Most of the action buttons have little arrows next to them. By clicking the arrows, - you can perform slight variations on the defult action. -

- - -

- Add books - Add books -

-

- The Add books action has three variations, accessed by the - arrow next to the button. -

-
    -
  • - Add books from a single directory: Opens a file chooser dialog and allows you to - specify which books in a directory should be added. This action is context sensitive, i.e. - it depends on which catalog you have selected. If you have selected the - library, books will be added to the library. If you have selected the ebook reader device, the books - will be uploaded to the device. -
  • -
  • - Add books recursively (One book per directory): Allows you to choose a directory. The directory and - all its sub-directories are scanned recursively and any ebooks found are added to the library. The algorithm - assumes that each directory contains a single book. All ebook files in a directory are assumed to be the same book - in different formats. This action is the inverse of the Save to disk action, - i.e. you can Save to disk, delete the books and re-add them with no lost information (except Date). -
  • -
  • - Add books recursively (Multiple books per directory): Allows you to choose a directory. The directory and - all its sub-directories are scanned recursively and any ebooks found are added to the library. The algorithm - assumes that each directory contains many books. All ebook files with the same name in a directory are assumed to be - the same book in different formats. This action is the inverse of the - Save to disk in a single directory action, - i.e. you can Save to disk, delete the books and re-add them with no lost information (except Date). -
  • -
-

- The Add books action can read metadata from the following ebook formats: - LRF, EPUB, LIT, MOBI, RTF, PDF, PRC, HTML. In addition it tries to guess metadata from the filename. - See Configuration section, to learn how to configure this. -

-

- To add a new format to an existing book, use the Edit meta information action. -

- -

Remove books - Remove books

-

- The Remove books action deletes books permanently, so use it with care. - It is context sensitive, - i.e. it depends on which catalog you have selected. If you have selected the - library, books will be removed from the library. If you have selected the ebook reader device, the books - will be removed from the device. To remove only a particular format for a given book use the - Edit meta information action. -

- -

- Edit meta information - Edit meta information -

-

- The Edit meta information action has two variations, accessed by the - arrow next to the button. -

-
    -
  • - Edit metadata individually: This allows you to edit the metadata of books one-by-one, with the option - of fetching metadata, including covers from the internet. It also allows you to add/remove particular - ebook formats from a book. For more detail see Editing metadata. -
  • -
  • - Edit metadata in bulk: This allows you to edit common metadata fields for large numbers of books simulataneously. It - operates on all the books you have selected in the Library view. -
  • -
- -

- Send to device - Send to device -

-

- The Send to device action has two variations, accessed by the - arrow next to the button. -

-
    -
  • - Send to main memory: The selected books are transferred to the main memory of the ebook reader. -
  • -
  • - Send to card: The selected books are transferred to the storage card on the ebook reader. -
  • -
- -

- Save to disk - Save to disk -

-

- The Save to disk action has two variations, accessed by the - arrow next to the button. -

-
    -
  • - Save to disk: This will save the selected books to disk organized in directories. The directory - structure looks like: -
    -Author
    -    Title
    -        Book Files
    -                
    -
  • -
  • - Save to disk in a single directory: The selected books are saved to disk in a single directory. -
  • -
-

- All available formats as well as metadata is stored to disk for each selected book. Metadata is stored in an OPF file. - Saved books can be re-imported to the library without any loss of information by using the Add books - action. -

- -

- Fetch news - Fetch news -

-

- The Fetch news action downloads news from various predefined - websites and converts it into an ebook that can be read on your ebook reader. Normally, the newly - created ebook is added to your ebook library, but if an ebook reader is connected at the time - the download finishes, the news is uploaded to the reader directly. -

-

- The Fetch news uses simple profiles (10-15 lines of code) for each news - site. To learn how to create profiles for your own news sources, see - creating custom news profiles. -

- -

- Convert E-books - Convert E-books -

-

- Ebooks can be converted from a number of formats into the LRF format (for the SONY Reader). Note that ebooks you purchase - will typically have Digital Rights Management - (DRM). ${app} will not convert these ebooks. For many DRM formats, it is easy to remove the DRM, but as this - is illegal, you have to find tools to liberate your books yourself and then use ${app} to convert them. -

-

- For most people, conversion should be a simple 1-click affair. But if you want to learn more about the - conversion process, see E-book conversion. -

-

- The Convert E-books action has three variations, accessed by the - arrow next to the button. -

-
    -
  • - Convert individually: This will allow you to specify conversion options to customize the - conversion of each selected ebook. -
  • -
  • - Bulk convert: This allows you to specify options only once to convert a number of ebooks in bulk. -
  • -
  • - Set conversion defaults: Allows you to set the default settings for future conversions. -
  • -
- - -

- View - View -

-

- The View action displays the book in an ebook viewer program. ${app} has a builtin - viewer for the LRF format. For other formats it uses the default operating system application. If a book has more than - one format, you can view a particular format by clicking the arrow next to the View button. -

- -
-

Catalogs

-
Catalogs
-

- A catalog is a collection of books. ${app} can manage three different catalogs: -

-
    -
  • - Library: This is a collection of books stored in a database file on your computers hard disk. - Reader: This is a collection of books stored in the main memory of your ebook reader. It will be available - when you connect - Card: This is a collection of books stored on the storage card in your reader. Note that ${app} supports - only a single storage card at a time. -
  • -
- -
-

Search & Sort

-
Search & Sort
-

- The Search & Sort section allows you to perform several powerful actions - on your book collections. -

-
    -
  • - You can sort them by title, author, date, rating etc. - by clicking on the column titles. -
  • -
  • - You can search for a particular book or set of books using the search bar. More on that - below. -
  • -
  • - You can quickly and conveniently edit metadata by double-clicking the entry you want changed - in the list. -
  • -
  • - You can perform actions on sets to books. To select multiple books you can either: -
      -
    • Keep the Ctrl key pressed and click on the books you want selected.
    • -
    • Keep the Shift key pressed and click on the starting and ending book of a range - of books you want selected.
    • -
    -
  • -
  • - You can configure which fields you want displayed by using the Configuration dialog. -
  • -
-

The Search Interface

-

- You can search all the metadata by entering search terms in the search bar. Searches are case insensitive. - For example: -

- -
-            Asimov Foundation format:lrf
-        
-

- This will match all books in your library that have Asimov and Foundation in their metadata - and are available in the LRF format. You can build advanced search queries easily using the "Advanced Search Dialog" - by clicking the button Search button.

-

- - - - - - -
Advanced Search Dialog - You can search on individual fields as shown. The "Negate" checkbox implies that only results that - do not match the search expression will be returned. You can require all the search criteria to match - or any of them. -
- -
-

Configuration

-

- The configuration dialog allows you to set some global defaults used by all of ${app}. To access it, click the - Configuration button. -

- -
-

Book Details

-
Book Details
-

- The Book Details display shows you extra information and the cover for the currently selected book. -

- -
-

Jobs

-
Jobs
-

- The Jobs panel shows you the number of currently running jobs. Jobs are tasks that run in a separate - process, they include converting ebooks and talking to your reader device. - You can click on the jobs panel to access the list of jobs. - Once a job has completed, by double-clicking it in the list, you can see a detailed log from that job. This is useful - to debug jobs that may not have completed successfully. -

- - - - - diff --git a/src/libprs500/manual/templates/index.html b/src/libprs500/manual/templates/index.html deleted file mode 100644 index 839e3aece4..0000000000 --- a/src/libprs500/manual/templates/index.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - ${app} User Manual - - - - - - - - \ No newline at end of file diff --git a/src/libprs500/manual/templates/layout.html b/src/libprs500/manual/templates/layout.html deleted file mode 100644 index 9840ff6a67..0000000000 --- a/src/libprs500/manual/templates/layout.html +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - ${select('*|text()')} - - - - - ${HTML(highlight(re.compile(r'^\|\|\|$', re.MULTILINE).sub('', unicode(select('*|text()'))), lexer, formatter))} - - - - - -

- ${title} -

- - ${select('*|text()')} - -
- -
- -
- \ No newline at end of file diff --git a/src/libprs500/manual/templates/navtree.html b/src/libprs500/manual/templates/navtree.html deleted file mode 100644 index f4eb41b6b8..0000000000 --- a/src/libprs500/manual/templates/navtree.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - ${title} - - - - - - - - \ No newline at end of file diff --git a/src/libprs500/manual/templates/news.html b/src/libprs500/manual/templates/news.html deleted file mode 100644 index 30095bbbe3..0000000000 --- a/src/libprs500/manual/templates/news.html +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - ${title} - - - -

- This page is awaiting the new news infrastructure in ${app}. - ${app} contains a very powerful and flexible engine to make fetching - news from the Internet and converting it to a nicely formatted ebook, - really easy. The easiest way to explain its full power and ease-of-use - is through examples, so lets get started... -

-
-from libprs500.ebooks.lrf.web.profiles.automatic import AutomaticRSSProfile -||| -class BBC(DefaultProfile): -||| - feeds = [ - 'http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/front_page/rss.xml', - 'http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/sci/tech/rss.xml', - ] -
- - - - \ No newline at end of file diff --git a/src/libprs500/manual/templates/start.html b/src/libprs500/manual/templates/start.html deleted file mode 100644 index 61c221a713..0000000000 --- a/src/libprs500/manual/templates/start.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - ${title} - - - - -

- ${app} is an e-book library manager. It can view, convert and catalog e-books - in most of the major e-book formats. It can also talk to a few e-book reader devices. It can - go out to the internet and fetch metadata for your books. It can download newspapers and convert - them into e-books for convenient reading. It is cross platform, running on Linux, Windows and OS X. -

-

- So you've just started ${app}. What do you do now? Well, before ${app} can do anything with your - ebooks, it first has to know about them. So drag and drop a few ebook files into ${app}, or click - the "Add books" button and browse for the ebooks you want to work with. Once you've added the books, - they will show up in the main view looking something like this:
- Added books
-

-

- Once you've admired the list of books you just added to your heart's content, you'll probably want to read on. - In order to do that you'll have to convert the book to a format your reader understands. For the SONY - Reader that's the LRF format. Conversion is a breeze, just select the book you want to convert, and - click the "Convert E-book" button. Ignore all the options for now and just click "OK". The little hourglass - in the bottom right corner will start spinning. Once it's finished spinning, your converted book is ready. - Click to "View" button to read the book. -

-

- Now if you want to read the book on your reader, just connect it to the computer, wait till - ${app} detects it (10-20secs) and then click the "Send to device" button. Once the hourglass stops - spinning again, disconnect your reader and read away! -

-

- To get started with more advanced usage, you should read about the - Graphical User Interface. For even more power and - versatility, learn the Command Line Interface. -

-

- You will find the list of Frequently Asked Questions useful as well. -

- -

Table of Contents

- - - - \ No newline at end of file