diff --git a/src/calibre/ebooks/lrf/lit/convert_from.py b/src/calibre/ebooks/lrf/lit/convert_from.py index 3d8a3f97b0..486a1e4cda 100644 --- a/src/calibre/ebooks/lrf/lit/convert_from.py +++ b/src/calibre/ebooks/lrf/lit/convert_from.py @@ -5,6 +5,7 @@ import os, sys, shutil, glob, logging from tempfile import mkdtemp from subprocess import Popen, PIPE from calibre.ebooks.lrf import option_parser as lrf_option_parser +from calibre.ebooks.lit.reader import LitReader from calibre.ebooks import ConversionError from calibre.ebooks.lrf.html.convert_from import process_file as html_process_file from calibre.ebooks.metadata.opf import OPFReader @@ -17,12 +18,24 @@ if islinux and getattr(sys, 'frozen_path', False): CLIT = os.path.join(getattr(sys, 'frozen_path'), 'clit') def option_parser(): - return lrf_option_parser( + parser = lrf_option_parser( _('''Usage: %prog [options] mybook.lit %prog converts mybook.lit to mybook.lrf''') ) + parser.add_option('--lit2oeb', default=False, dest='lit2oeb', action='store_true', + help='Use the new lit2oeb to convert lit files instead of convertlit.') + return parser + +def generate_html2(pathtolit, logger): + if not os.access(pathtolit, os.R_OK): + raise ConversionError, 'Cannot read from ' + pathtolit + tdir = mkdtemp(prefix=__appname__+'_') + lr = LitReader(pathtolit) + print 'Extracting LIT file to', tdir + lr.extract_content(tdir) + return tdir def generate_html(pathtolit, logger): if not os.access(pathtolit, os.R_OK): @@ -51,7 +64,7 @@ def process_file(path, options, logger=None): logger = logging.getLogger('lit2lrf') setup_cli_handlers(logger, level) lit = os.path.abspath(os.path.expanduser(path)) - tdir = generate_html(lit, logger) + tdir = generate_html2(lit, logger) if options.lit2oeb else generate_html(lit, logger) try: opf = glob.glob(os.path.join(tdir, '*.opf')) if opf: diff --git a/src/calibre/library/cli.py b/src/calibre/library/cli.py index 0e972cb20b..2a3e58f99b 100644 --- a/src/calibre/library/cli.py +++ b/src/calibre/library/cli.py @@ -19,7 +19,7 @@ from calibre.ebooks.metadata.meta import get_metadata from calibre.ebooks.metadata.opf import OPFCreator, OPFReader from calibre.library.database import LibraryDatabase, text_to_tokens -FIELDS = set(['title', 'authors', 'publisher', 'rating', 'timestamp', 'size', 'tags', 'comments', 'series', 'series_index', 'formats']) +FIELDS = set(['title', 'authors', 'publisher', 'rating', 'timestamp', 'size', 'tags', 'comments', 'series', 'series_index', 'formats', 'isbn']) def get_parser(usage): parser = OptionParser(usage) diff --git a/src/calibre/library/database.py b/src/calibre/library/database.py index 006438746b..0a05f48dc9 100644 --- a/src/calibre/library/database.py +++ b/src/calibre/library/database.py @@ -754,7 +754,32 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE; conn.execute('UPDATE books SET author_sort=? WHERE id=?', (aus, id)) conn.execute('pragma user_version=11') conn.commit() - + + @staticmethod + def upgrade_version11(conn): + conn.executescript( +''' +/***** Add isbn column to meta view ******/ + DROP VIEW meta; + CREATE VIEW meta AS + SELECT id, title, + (SELECT concat(name) FROM authors WHERE authors.id IN (SELECT author from books_authors_link WHERE book=books.id)) authors, + (SELECT name FROM publishers WHERE publishers.id IN (SELECT publisher from books_publishers_link WHERE book=books.id)) publisher, + (SELECT rating FROM ratings WHERE ratings.id IN (SELECT rating from books_ratings_link WHERE book=books.id)) rating, + timestamp, + (SELECT MAX(uncompressed_size) FROM data WHERE book=books.id) size, + (SELECT concat(name) FROM tags WHERE tags.id IN (SELECT tag from books_tags_link WHERE book=books.id)) tags, + (SELECT text FROM comments WHERE book=books.id) comments, + (SELECT name FROM series WHERE series.id IN (SELECT series FROM books_series_link WHERE book=books.id)) series, + series_index, + sort, + author_sort, + (SELECT concat(format) FROM data WHERE data.book=books.id) formats, + isbn + FROM books; +''') + conn.execute('pragma user_version=12') + conn.commit() def __init__(self, dbpath, row_factory=False): self.dbpath = dbpath diff --git a/src/calibre/translations/__init__.py b/src/calibre/translations/__init__.py index 01f546b42e..9aca9e9fca 100644 --- a/src/calibre/translations/__init__.py +++ b/src/calibre/translations/__init__.py @@ -70,8 +70,22 @@ def import_from_launchpad(url): open(out, 'wb').write(tf.extractfile(next).read()) next = tf.next() + check_for_critical_bugs() return 0 +def check_for_critical_bugs(): + if os.path.exists('.errors'): + shutil.rmtree('.errors') + pofilter = ('pofilter', '-i', '.', '-o', '.errors', + '-t', 'accelerators', '-t', 'escapes', '-t', 'variables', + '-t', 'xmltags') + subprocess.check_call(pofilter) + errs = os.listdir('.errors') + if errs: + print 'WARNING: Translation errors detected' + print 'See the .errors directory and http://translate.sourceforge.net/wiki/toolkit/using_pofilter' + + def main(args=sys.argv): if len(args) > 1: if args[1] == 'pot': diff --git a/src/calibre/translations/es.po b/src/calibre/translations/es.po index d5fd04e82f..bda7df14d3 100644 --- a/src/calibre/translations/es.po +++ b/src/calibre/translations/es.po @@ -426,6 +426,7 @@ msgstr "" "Expressión regular utilizada para detectar los títulos de los capítulos. " "Busca las marcas de encabezado (h1-h6). Por defecto: %default" +# (pofilter) escapes: escapes in original ('"h\d,class,chapter".') don't match escapes in translation () #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:165 msgid "" "Detect a chapter beginning at an element having the specified attribute. The " @@ -437,7 +438,7 @@ msgstr "" "especificado. El formato para ésta espresión es tagname regexp, nombre del " "atributo, valor del atributo regexp. Por ejemplo, para encontrar todas las " "etiquetas de cabecera que tienen como attribute class=\"capítulo\" podría " -"usar: \"h/d,class,capítulo\". El valor por defecto es: %default" +"usar: \"h\\d,class,capítulo\". El valor por defecto es: %default" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 msgid "" @@ -2111,6 +2112,7 @@ msgstr "&Compartir receta" msgid "&Load recipe from file" msgstr "&Cargar receta desde un archivo" +# (pofilter) xmltags: checks that XML/HTML tags have not been translated #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:215 msgid "" "\n" "

Crear una receta de " -"noticias básica, añadiendo un RSS Feed. Para la mayoría de los feeds, " -"necesitará utilizar el \"modo avanzado\" para una configuración mas " -"detallada del proceso de adquisición de los datos

" +"noticias básica, añadiendo un RSS Feed.
Para la mayoría de los feeds, " +"necesitará utilizar el \"modo avanzado\" para una configuración mas detallada " +"del proceso de adquisición de los datos

" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:219 msgid "Recipe &title:" @@ -2253,9 +2254,10 @@ msgstr "Ninguna coincidencia" msgid "Authors:" msgstr "Autores:" +# (pofilter) xmltags: checks that XML/HTML tags have not been translated #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106 msgid "Regular expression group name (?P)" -msgstr "Nombre de grupo de expresión regular (?P)" +msgstr "Nombre de grupo de expresión regular (?P)" #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:108 msgid "Series:" @@ -2348,9 +2350,10 @@ msgstr "Formatos" msgid "Book %s of %s." msgstr "Libro %s de %s." +# (pofilter) xmltags: checks that XML/HTML tags have not been translated #: /home/kovid/work/calibre/src/calibre/gui2/library.py:396 msgid "Double click to edit me

" -msgstr "Doble click para editarme" +msgstr "Doble click para editarme

" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:406 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:757 @@ -2898,14 +2901,15 @@ msgstr "ERROR: Excepción no Contemplada" msgid "Add a custom news source" msgstr "Añadir nueva fuente de noticias" +# (pofilter) xmltags: checks that XML/HTML tags have not been translated #: /home/kovid/work/calibre/src/calibre/gui2/news.py:53 msgid "" "

Please enter your username and password for %s
If you do not have one, " "please subscribe to get access to the articles.
Click OK to proceed." msgstr "" -"

Por favor, introduzca el nombre de usuario y contraseña para %s
Si " -"no tiene uno, por favor dese de alta para obtener acceso a los " -"artículos.
Haga click en OK para continuar." +"

Por favor, introduzca el nombre de usuario y contraseña para %s
Si no " +"tiene uno, por favor dese de alta para obtener acceso a los artículos.
" +"Haga click en OK para continuar." #: /home/kovid/work/calibre/src/calibre/gui2/news.py:79 msgid "Custom news sources" diff --git a/src/calibre/translations/it.po b/src/calibre/translations/it.po index d29925e5a2..1729b1a5e6 100644 --- a/src/calibre/translations/it.po +++ b/src/calibre/translations/it.po @@ -1481,6 +1481,7 @@ msgstr "Cambia l'editore di questo libro" msgid "Ta&gs: " msgstr "T&ag: " +# (pofilter) xmltags: checks that XML/HTML tags have not been translated #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:524 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:271 @@ -1489,7 +1490,7 @@ msgid "" "

They can be any words or phrases, separated by commas." msgstr "" "I tag categorizzano un libro. Questo è particolarmente utile durante le " -"ricerche.
Possono essere qualsiasi parola o frase, separati da una " +"ricerche.

Possono essere qualsiasi parola o frase, separati da una " "virgola" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:525 @@ -2143,6 +2144,7 @@ msgstr "" msgid "Recipe source code (python)" msgstr "Codice sorgente formula (python)" +# (pofilter) xmltags: checks that XML/HTML tags have not been translated #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:97 msgid "" "

Set a regular expression pattern to use when trying to guess ebook " @@ -2154,7 +2156,7 @@ msgstr "" "

Impostare un modello di espressione regolare da usare nel tentativo di " "indovinare i metadati dei libri dal nome del file.

È disponibile un riferimento sulla " -"sintassi delle espressioni regolari. Usare la funzionalità Test " +"sintassi delle espressioni regolari.

Usare la funzionalità Test " "sottostante per testare le proprie espressioni regolari su una serie di nomi " "di file di esempio." @@ -2294,9 +2296,10 @@ msgstr "Formati" msgid "Book %s of %s." msgstr "Libro %s di %s" +# (pofilter) xmltags: checks that XML/HTML tags have not been translated #: /home/kovid/work/calibre/src/calibre/gui2/library.py:396 msgid "Double click to edit me

" -msgstr "Doppio clic per modificarmi" +msgstr "Doppio clic per modificarmi

" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:406 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:757 diff --git a/src/calibre/translations/nl.po b/src/calibre/translations/nl.po index 4b5ecac7ef..f07545c35a 100644 --- a/src/calibre/translations/nl.po +++ b/src/calibre/translations/nl.po @@ -332,6 +332,7 @@ msgstr "" "De reguliere expressie die wordt gebruikt om hoofdstukken te herkennen. Deze " "wordt gezocht in 'heading tags' (h1-h6). Standaard: %default" +# (pofilter) escapes: escapes in original ('"h\d,class,chapter".') don't match escapes in translation ('"h\d\klasse,hoofdstuk".') #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:165 msgid "" "Detect a chapter beginning at an element having the specified attribute. The " @@ -342,8 +343,8 @@ msgstr "" "vind het begin van een hoofdstuk bij een element met het gespecificeerde " "attribuut. Het formaat voor deze optie is tagnaam regexp, attribuut naam, " "attribuut waarde regexp. Bijvoorbeeld, om alle kop tags te vinden met de " -"attribuut klasse \"hoofstuk\", gebruik \"h\\d\\klasse,hoofdstuk\". Standaard " -"is %default" +"attribuut klasse \"hoofstuk\", gebruik \"h\\d,klasse,hoofdstuk\". Standaard is " +"%default" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 msgid "" @@ -1307,10 +1308,11 @@ msgstr "Je hebt geen permissie om het bestand te lezen: " msgid "Error reading file" msgstr "Fout bij het lezen van bestand" +# (pofilter) xmltags: checks that XML/HTML tags have not been translated #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:183 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:53 msgid "

There was an error reading from file:
" -msgstr "

Er is een fout opgetreden bij het lezen van bestand:
" +msgstr "

Er is een fout opgetreden bij het lezen van bestand:
" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:189 msgid " is not a valid picture" @@ -1733,6 +1735,7 @@ msgid "Comma separated list of tags to remove from the books. " msgstr "" "Lijst van tags die moeten worden verwijderd, gescheiden met komma's. " +# (pofilter) xmltags: checks that XML/HTML tags have not been translated #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:235 msgid "" "

Enter your username and password for LibraryThing.com.
If you " @@ -1740,8 +1743,8 @@ msgid "" "for free!.

" msgstr "" "

Geef uw gebruikersnaam en wachtwoord voor LibraryThing.com. " -"
Als u deze niet heeft, dan kunt u er gratis een krijgen door te registreren" +"
Als u deze niet heeft, dan kunt u er gratis een krijgen door te registreren.

" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:265 msgid "Could not fetch cover.
" @@ -2181,26 +2184,29 @@ msgstr "Geen overeenkomst" msgid "Authors:" msgstr "Auteurs:" +# (pofilter) xmltags: checks that XML/HTML tags have not been translated #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106 msgid "Regular expression group name (?P)" -msgstr "Reguliere expressie groep naam (?)" +msgstr "Reguliere expressie groep naam (?P)" #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:108 msgid "Series:" msgstr "Serie:" +# (pofilter) xmltags: checks that XML/HTML tags have not been translated #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:109 msgid "Regular expression group name (?P)" -msgstr "Reguliere expressie groep naam (?)" +msgstr "Reguliere expressie groep naam (?P)" #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:111 msgid "Series index:" msgstr "Serie Index" +# (pofilter) xmltags: checks that XML/HTML tags have not been translated #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:112 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:115 msgid "Regular expression group name (?P)" -msgstr "Reguliere expressie groep naam (?)" +msgstr "Reguliere expressie groep naam (?P)" #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:114 msgid "ISBN:" @@ -2825,13 +2831,14 @@ msgstr "FOUT: Niet-verwerkte uitzondering" msgid "Add a custom news source" msgstr "Voeg een persoonlijke nieuwsbron toe" +# (pofilter) xmltags: checks that XML/HTML tags have not been translated #: /home/kovid/work/calibre/src/calibre/gui2/news.py:53 msgid "" "

Please enter your username and password for %s
If you do not have one, " "please subscribe to get access to the articles.
Click OK to proceed." msgstr "" "

Voer uw gebruikersnaam en wachtwoord voor %s in.
Als u er geen geeft, " -"registreer dan om toegang tot de artikelen te krijgen.
Klik op OK om " +"registreer dan om toegang tot de artikelen te krijgen.
Klik op OK om " "verder te gaan." #: /home/kovid/work/calibre/src/calibre/gui2/news.py:79 @@ -3447,13 +3454,14 @@ msgstr "" "Maximum aantal level om recursief te zoeken -- de diepte om links te volgen. " "Standaard %default" +# (pofilter) xmltags: checks that XML/HTML tags have not been translated #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:394 msgid "" "The maximum number of files to download. This only applies to files from tags. Default is %default" msgstr "" "Het maximum aantal bestanden te downloaden. Dit is alleen van toepassing op " -"bestanden in tags. Standaard is %default" +"bestanden in tags. Standaard is %default" #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:396 msgid "" diff --git a/src/calibre/translations/ru.po b/src/calibre/translations/ru.po index d078b1d7d5..8e788d14d2 100644 --- a/src/calibre/translations/ru.po +++ b/src/calibre/translations/ru.po @@ -307,7 +307,9 @@ msgstr "" "Устанавливать разрывы страниц после тегов, имена которых соответствуют этому " "регулярному выражению." +# (pofilter) escapes: escapes in original ('"h\d,class,chapter".') don't match escapes in translation () #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 +#, fuzzy msgid "" "Force a page break before an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value "