summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog81
-rw-r--r--config.h.in6
-rw-r--r--configure.in38
-rw-r--r--configure.in.in45
-rw-r--r--po/README20
-rw-r--r--po/de.po17
-rw-r--r--po/it.po1851
-rw-r--r--po/pt_BR.po2948
-rw-r--r--po/ru.po207
-rw-r--r--src/borrower.h2
-rw-r--r--src/borroweritem.cpp2
-rw-r--r--src/borroweritem.h2
-rw-r--r--src/collection.cpp4
-rw-r--r--src/collectionfieldsdialog.cpp6
-rw-r--r--src/collections/filecatalog.cpp17
-rw-r--r--src/collections/filecatalog.h3
-rw-r--r--src/controller.cpp2
-rw-r--r--src/core/Makefile.am2
-rw-r--r--src/core/dcopinterface_skel.cpp48
-rw-r--r--src/core/drophandler.cpp37
-rw-r--r--src/document.cpp8
-rw-r--r--src/document.h5
-rw-r--r--src/entry.cpp17
-rw-r--r--src/entry.h11
-rw-r--r--src/entrygroupitem.cpp2
-rw-r--r--src/entrygroupitem.h2
-rw-r--r--src/entryview.cpp15
-rw-r--r--src/entryview.h11
-rw-r--r--src/fetch/Makefile.am4
-rw-r--r--src/fetch/amazonfetcher.cpp117
-rw-r--r--src/fetch/amazonfetcher.h3
-rw-r--r--src/fetch/amazonrequest.cpp72
-rw-r--r--src/fetch/amazonrequest.h52
-rw-r--r--src/fetch/arxivfetcher.cpp7
-rw-r--r--src/fetch/citebasefetcher.cpp10
-rw-r--r--src/fetch/entrezfetcher.cpp2
-rw-r--r--src/fetch/entrezfetcher.h4
-rw-r--r--src/fetch/googlescholarfetcher.cpp4
-rw-r--r--src/fetch/googlescholarfetcher.h6
-rw-r--r--src/fetch/hmac_sha2.c544
-rw-r--r--src/fetch/hmac_sha2.h140
-rw-r--r--src/fetch/ibsfetcher.cpp3
-rw-r--r--src/fetch/imdbfetcher.cpp4
-rw-r--r--src/fetch/sha2.c950
-rw-r--r--src/fetch/sha2.h108
-rw-r--r--src/fetch/z3950-servers.cfg4
-rw-r--r--src/fetch/z3950fetcher.cpp6
-rw-r--r--src/fetchdialog.cpp4
-rw-r--r--src/field.cpp24
-rw-r--r--src/field.h1
-rw-r--r--src/gui/counteditem.h4
-rw-r--r--src/gui/listview.h2
-rw-r--r--src/gui/tabcontrol.cpp3
-rw-r--r--src/image.cpp3
-rw-r--r--src/imagefactory.cpp80
-rw-r--r--src/isbnvalidator.cpp8
-rw-r--r--src/lccnvalidator.cpp2
-rw-r--r--src/listviewcomparison.cpp10
-rw-r--r--src/listviewcomparison.h11
-rw-r--r--src/mainwindow.cpp32
-rw-r--r--src/mainwindow.h2
-rw-r--r--src/reportdialog.cpp2
-rw-r--r--src/tellico_debug.h2
-rw-r--r--src/tests/Makefile.am2
-rw-r--r--src/translators/Makefile.am12
-rw-r--r--src/translators/alexandriaexporter.cpp2
-rw-r--r--src/translators/bibteximporter.cpp42
-rw-r--r--src/translators/bibteximporter.h2
-rw-r--r--src/translators/csvimporter.cpp28
-rw-r--r--src/translators/deliciousimporter.cpp17
-rw-r--r--src/translators/freedb_util.cpp2
-rw-r--r--src/translators/htmlexporter.cpp4
-rw-r--r--src/translators/risimporter.cpp23
-rw-r--r--src/translators/risimporter.h2
-rw-r--r--src/translators/tellico_xml.cpp6
-rw-r--r--src/translators/tellico_xml.h2
-rw-r--r--src/translators/tellicoimporter.cpp14
-rw-r--r--src/translators/tellicoimporter.h2
-rw-r--r--src/translators/tellicosaximporter.cpp293
-rw-r--r--src/translators/tellicosaximporter.h87
-rw-r--r--src/translators/tellicoxmlhandler.cpp74
-rw-r--r--src/translators/tellicoxmlhandler.h49
-rw-r--r--src/translators/xmlstatehandler.cpp772
-rw-r--r--src/translators/xmlstatehandler.h345
-rw-r--r--src/translators/xsltexporter.cpp24
-rw-r--r--src/translators/xsltexporter.h4
-rw-r--r--src/upcvalidator.cpp15
-rw-r--r--src/upcvalidator.h7
-rw-r--r--xslt/amazon2tellico.xsl43
-rw-r--r--xslt/crossref2tellico.xsl4
-rw-r--r--xslt/delicious2tellico.xsl283
-rw-r--r--xslt/gcstar2tellico.xsl47
-rw-r--r--xslt/report-templates/Column_View.xsl5
-rw-r--r--xslt/report-templates/Group_Summary.xsl74
-rw-r--r--xslt/report-templates/Group_View.xsl5
-rw-r--r--xslt/report-templates/Image_List.xsl12
-rw-r--r--xslt/report-templates/Tri-Column.xsl5
-rw-r--r--xslt/tellico-printing.xsl5
-rw-r--r--xslt/tellico2gcstar.xsl12
-rw-r--r--xslt/tellico2html.js10
-rw-r--r--xslt/tellico2html.xsl8
-rw-r--r--xslt/unixref2tellico.xsl9
102 files changed, 6637 insertions, 3354 deletions
diff --git a/ChangeLog b/ChangeLog
index 63b55de..d51e8f7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,84 @@
+2009-09-26 Robby Stephenson <[email protected]>
+
+ * Updated Amazon fetcher to use authentication.
+ * Released Tellico 1.3.6
+
+2009-02-14 Robby Stephenson <[email protected]>
+
+ * Released Tellico 1.3.5.
+
+2009-02-04 Robby Stephenson <[email protected]>
+
+ * Reverted change from 2007 that merged entries by combining all values in multiple-value fields.
+
+2009-02-02 Robby Stephenson <[email protected]>
+
+ * Fixed the CueCat decoder to work for ISBN searches, as well as UPC.
+
+2009-01-30 Robby Stephenson <[email protected]>
+
+ * Updated Deliciour Library 1 importer to handle movies and games.
+ * Fixed Ubuntu bug#317822, don't mark collection modified when image is found in local data directory.
+ * Fixed query bug with z39.50 ISBN search.
+
+2008-12-07 Robby Stephenson <[email protected]>
+
+ * Updated it.po, thanks to Valerio Ricci.
+
+2008-10-23 Robby Stephenson <[email protected]>
+
+ * Added date, time, and username as available params for the XSLT export.
+
+2008-09-13 Robby Stephenson <[email protected]>
+
+ * Released Tellico 1.3.4.
+
+2008-09-04 Robby Stephenson <[email protected]>
+
+ * Fixed error with consecutive tabs in CSV import.
+
+2008-08-26 Robby Stephenson <[email protected]>
+
+ * Fixed bug with image links in reports not being linked correctly.
+
+2008-08-20 Robby Stephenson <[email protected]>
+
+ * Added minimal searching for board games from Amazon.
+
+2008-08-07 Robby Stephenson <[email protected]>
+
+ * Changed Choice fields to sort by position in list.
+
+2008-07-25 Robby Stephenson <[email protected]>
+
+ * Added ESC key for clearing quick filter.
+ * Improved drag/drop to match on file extension after checking mimetype.
+
+2008-07-22 Robby Stephenson <[email protected]>
+
+ * Updated IMDb plot regexp.
+
+2008-07-09 Robby Stephenson <[email protected]>
+
+ * Fixed EntryView to honor copy() command properly, for clipboard.
+ * Released Tellico 1.3.3.
+
+2008-06-24 Robby Stephenson <[email protected]>
+
+ * Updated Porbase URL in z39.50 server list.
+
+2008-06-13 Robby Stephenson <[email protected]>
+
+ * Updated drag-and-drop to allow HTTP urls.
+
+2008-06-12 Robby Stephenson <[email protected]>
+
+ * Changed Arxiv fetcher to remove ID version number for results.
+
+2008-06-07 Robby Stephenson <[email protected]>
+
+ * Fixed bug with merging file catalogs, to properly match on URL.
+
2008-05-24 Robby Stephenson <[email protected]>
* Released Tellico 1.3.2.1.
diff --git a/config.h.in b/config.h.in
index 73c4c11..d76161c 100644
--- a/config.h.in
+++ b/config.h.in
@@ -66,6 +66,9 @@
/* Define if you have libz */
#undef HAVE_LIBZ
+/* Define to 1 if you have the <linux/videodev.h> header file. */
+#undef HAVE_LINUX_VIDEODEV_H
+
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
@@ -174,6 +177,9 @@
/* Define to the version of this package. */
#undef PACKAGE_VERSION
+/* Define to 1 if the XML loader should use SAX */
+#undef SAX_SUPPORT
+
/* The size of `char', as computed by sizeof. */
#undef SIZEOF_CHAR
diff --git a/configure.in b/configure.in
index 8b6a1bf..388fbfa 100644
--- a/configure.in
+++ b/configure.in
@@ -40,7 +40,7 @@ dnl Perform program name transformation
AC_ARG_PROGRAM
dnl Automake doc recommends to do this only here. (Janos)
-AM_INIT_AUTOMAKE(tellico, 1.3.2.1) dnl searches for some needed programs
+AM_INIT_AUTOMAKE(tellico, 1.3.6) dnl searches for some needed programs
KDE_SET_PREFIX
@@ -491,7 +491,8 @@ AC_ARG_WITH([ooo-dir],
AC_HELP_STRING([--with-ooo-dir=DIR],
[where the OpenOffice.org program files are installed]),
[ac_ooo_libdir="${withval}/program"
- ac_ooo_datadir="${withval}/program"])
+ ac_ooo_datadir="${withval}/program"
+ ac_ooo_basisdir="${withval}/basis3.0"])
AC_ARG_WITH([ooo-libdir],
AC_HELP_STRING([--with-ooo-libdir=DIR],
[where the OpenOffice.org program libraries are installed (<ooo-dir>/program)]),
@@ -542,6 +543,13 @@ AC_CHECK_FILE([$ac_ooo_datadir/types.rdb],
[OFFICE_registry="$ac_ooo_datadir"/types.rdb],
AC_MSG_ERROR([[types.rdb not found, try '--with-ooo-dir=OpenOffice.org_installation_path']]))
+AC_FIND_FILE([offapi.rdb],
+ [$ac_ooo_basisdir/program $ac_ooo_libdir $ac_ooo_datadir],
+ offapi_dir)
+if test "$offapi_dir" != "NO"; then
+ OFFICE_registry="$OFFICE_registry $offapi_dir/offapi.rdb"
+fi
+
dnl Substitute the values
AC_SUBST(OFFICE_SDK_includes)
AC_SUBST(OFFICE_libadd)
@@ -562,7 +570,7 @@ AC_ARG_ENABLE(exempi,
)
if test x$enable_libexempi = xyes; then
- KDE_PKG_CHECK_MODULES(EXEMPI,
+ KDE_PKG_CHECK_MODULES(EXEMPI,
[exempi-2.0 >= 1.99.0],
[have_exempi=yes],
[have_exempi=no])
@@ -586,8 +594,8 @@ AC_ARG_ENABLE(poppler,
)
if test x$enable_libpoppler = xyes; then
- KDE_PKG_CHECK_MODULES(POPPLER,
- [poppler-qt >= 0.5],
+ KDE_PKG_CHECK_MODULES(POPPLER,
+ [poppler-tqt >= 0.5],
[have_poppler=yes],
[have_poppler=no])
AC_SUBST(POPPLER_LIBS)
@@ -609,12 +617,32 @@ AC_ARG_ENABLE(webcam,
[enable_webcam=no]
)
+if test x$enable_webcam = xyes; then
+ KDE_CHECK_HEADERS([linux/videodev.h],
+ [],
+ [enable_webcam="no"])
+fi
+
AM_CONDITIONAL(ENABLE_WEBCAM, test $enable_webcam = yes)
if test x$enable_webcam = xyes; then
AC_DEFINE(ENABLE_WEBCAM, 1, [Define to 1 if webcam support is enabled])
fi
dnl ---------- END WEBCAM CHECK ----------
+
+dnl ---------- SAX CHECK ----------
+
+AC_ARG_ENABLE(sax,
+ AC_HELP_STRING([--enable-sax], [enable SAX document loading (experimental), default=disable]),
+ [enable_sax=$enableval],
+ [enable_sax=no]
+)
+
+if test x$enable_sax = xyes; then
+ AC_DEFINE(SAX_SUPPORT, 1, [Define to 1 if the XML loader should use SAX])
+fi
+
+dnl ---------- END SAX CHECK ----------
KDE_CREATE_SUBDIRSLIST
AC_CONFIG_FILES([ Makefile ])
AC_CONFIG_FILES([ doc/Makefile ])
diff --git a/configure.in.in b/configure.in.in
index 8283d0d..c9fa660 100644
--- a/configure.in.in
+++ b/configure.in.in
@@ -2,7 +2,7 @@
KDE_ENABLE_HIDDEN_VISIBILITY
-AM_INIT_AUTOMAKE(tellico,1.3.2.1)
+AM_INIT_AUTOMAKE(tellico,1.3.6)
dnl AM_KDE_MIN_VERSION(MIN-VERSION-MAJOR, MIN-VERSION-MINOR, MIN-VERSION-MICRO)
dnl (taken from KMyMoney2)
@@ -428,7 +428,8 @@ AC_ARG_WITH([ooo-dir],
AC_HELP_STRING([--with-ooo-dir=DIR],
[where the OpenOffice.org program files are installed]),
[ac_ooo_libdir="${withval}/program"
- ac_ooo_datadir="${withval}/program"])
+ ac_ooo_datadir="${withval}/program"
+ ac_ooo_basisdir="${withval}/basis3.0"])
AC_ARG_WITH([ooo-libdir],
AC_HELP_STRING([--with-ooo-libdir=DIR],
[where the OpenOffice.org program libraries are installed (<ooo-dir>/program)]),
@@ -479,6 +480,13 @@ AC_CHECK_FILE([$ac_ooo_datadir/types.rdb],
[OFFICE_registry="$ac_ooo_datadir"/types.rdb],
AC_MSG_ERROR([[types.rdb not found, try '--with-ooo-dir=OpenOffice.org_installation_path']]))
+AC_FIND_FILE([offapi.rdb],
+ [$ac_ooo_basisdir/program $ac_ooo_libdir $ac_ooo_datadir],
+ offapi_dir)
+if test "$offapi_dir" != "NO"; then
+ OFFICE_registry="$OFFICE_registry $offapi_dir/offapi.rdb"
+fi
+
dnl Substitute the values
AC_SUBST(OFFICE_SDK_includes)
AC_SUBST(OFFICE_libadd)
@@ -499,7 +507,7 @@ AC_ARG_ENABLE(exempi,
)
if test x$enable_libexempi = xyes; then
- KDE_PKG_CHECK_MODULES(EXEMPI,
+ KDE_PKG_CHECK_MODULES(EXEMPI,
[exempi-2.0 >= 1.99.0],
[have_exempi=yes],
[have_exempi=no])
@@ -523,8 +531,8 @@ AC_ARG_ENABLE(poppler,
)
if test x$enable_libpoppler = xyes; then
- KDE_PKG_CHECK_MODULES(POPPLER,
- [poppler-qt >= 0.5],
+ KDE_PKG_CHECK_MODULES(POPPLER,
+ [poppler-tqt >= 0.5],
[have_poppler=yes],
[have_poppler=no])
AC_SUBST(POPPLER_LIBS)
@@ -546,9 +554,36 @@ AC_ARG_ENABLE(webcam,
[enable_webcam=no]
)
+if test x$enable_webcam = xyes; then
+ KDE_CHECK_HEADERS([linux/videodev.h],
+ [],
+ [enable_webcam="no"])
+fi
+
AM_CONDITIONAL(ENABLE_WEBCAM, test $enable_webcam = yes)
if test x$enable_webcam = xyes; then
AC_DEFINE(ENABLE_WEBCAM, 1, [Define to 1 if webcam support is enabled])
fi
dnl ---------- END WEBCAM CHECK ----------
+
+dnl ---------- SAX CHECK ----------
+
+AC_ARG_ENABLE(sax,
+ AC_HELP_STRING([--enable-sax], [enable SAX document loading (experimental), default=disable]),
+ [enable_sax=$enableval],
+ [enable_sax=no]
+)
+
+if test x$enable_sax = xyes; then
+ AC_DEFINE(SAX_SUPPORT, 1, [Define to 1 if the XML loader should use SAX])
+fi
+
+dnl ---------- END SAX CHECK ----------
+
+dnl -------- fix TQTDCOPIDLNG ---------
+if test "$kde_cv_tqt" = "no"; then
+ if test -z "$TQTDCOPIDLNG"; then
+ KDE_FIND_PATH(dcopidlng, TQTDCOPIDLNG, [$kde_default_bindirs], [KDE_MISSING_PROG_ERROR(dcopidlng)])
+ fi
+fi
diff --git a/po/README b/po/README
index 29c6eff..f277363 100644
--- a/po/README
+++ b/po/README
@@ -2,4 +2,22 @@ To regenerate the message strings, type
make package-messages
-from the top-level directory
+from the top-level directory.
+
+Please note that you need a special for KDE patched version of xgettext. You
+can obtain it from http://packages.ubuntu.com/de/edgy/gettext-kde. Don't forget
+to make this binary available as xgettext (instead of kde-xgettext) by e.g.
+creating a link in your search path.
+
+If you don't do this, code such as i18n("Comic Book Illustrator", "Artist")
+would correspond to two separate strings "Comic Book Illustrator" and
+"Artist" instead of a combined entry from which only the second one has to be
+translated:
+
+msgid ""
+"_: Comic Book Illustrator\n"
+"Artist"
+msgstr "Künstler"
+
+You also need the tool extractrc. In Debian it is available in the package
+tdesdk-scripts.
diff --git a/po/de.po b/po/de.po
index e7264ef..e90efc5 100644
--- a/po/de.po
+++ b/po/de.po
@@ -16,7 +16,7 @@ msgid ""
msgstr ""
"Project-Id-Version: de\n"
"POT-Creation-Date: 2008-01-26 10:52-0800\n"
-"PO-Revision-Date: 2008-01-25 10:34+0100\n"
+"PO-Revision-Date: 2008-05-24 22:47+0200\n"
"Last-Translator: Jens Seidel <[email protected]>\n"
"Language-Team: german <[email protected]>\n"
"MIME-Version: 1.0\n"
@@ -1094,7 +1094,7 @@ msgstr "Mechanismus"
#: collections/boardgamecollection.cpp:66
msgid "Designer"
-msgstr ""
+msgstr "Designer"
#: collections/boardgamecollection.cpp:72
msgid "Number of Players"
@@ -1792,7 +1792,7 @@ msgstr ""
#: fetch/discogsfetcher.cpp:718
msgid "Discogs Link"
-msgstr ""
+msgstr "Discogs-Link"
#: newstuff/dialog.cpp:94
msgid "Get Hot New Stuff"
@@ -1986,9 +1986,8 @@ msgid "Scanning audio files..."
msgstr "Taste Audio-Dateien ab ..."
#: translators/audiofileimporter.cpp:129
-#, fuzzy
msgid "Bitrate"
-msgstr "Bibtex"
+msgstr "Bitrate"
#: translators/audiofileimporter.cpp:160 translators/audiofileimporter.cpp:170
msgid "Tracks (Disc %1)"
@@ -2023,14 +2022,12 @@ msgstr ""
#: translators/audiofileimporter.cpp:352
msgid "Include &bitrate"
-msgstr ""
+msgstr "&Bitrate inkludieren"
#: translators/audiofileimporter.cpp:353
-#, fuzzy
msgid "If checked, the bitrate for each track is added to the entries."
msgstr ""
-"Wenn markiert, werden die Datei-Namen für jede Spur zu den Einträgen "
-"hinzugefügt."
+"Wenn markiert, wird die Bitrate für jede Spur zu den Einträgen hinzugefügt."
#: translators/csvexporter.cpp:40
msgid "CSV"
@@ -5369,7 +5366,7 @@ msgstr "Copac (Großbritannien und Irland)"
#: scripts.cpp:2
msgid "BoardGameGeek"
-msgstr ""
+msgstr "BoardGameGeek"
#: scripts.cpp:4
msgid "Dark Horse Comics"
diff --git a/po/it.po b/po/it.po
index 98d695d..5543d35 100644
--- a/po/it.po
+++ b/po/it.po
@@ -1,33 +1,35 @@
-# translation of it.po to Italiano
+# translation of v0.9_edited_it.po to Italiano
# Copyright (C) 2001-2002, Robby Stephenson
# This file is distributed under the same license as the Tellico package.
+#
# First translation by FaUsT <[email protected]>, 2002, 2003, 2004.
# Lorenzo Novaro <[email protected]>, 2004, 2005.
-#
+# Pompa <[email protected]>, 2008.
msgid ""
msgstr ""
-"Project-Id-Version: it\n"
+"Project-Id-Version: v0.9_edited_it\n"
"POT-Creation-Date: 2008-01-26 10:52-0800\n"
-"PO-Revision-Date: 2005-10-12 18:20+0200\n"
-"Last-Translator: Lorenzo Novaro <[email protected]>\n"
-"Language-Team: Italiano <[email protected]>\n"
+"PO-Revision-Date: 2008-12-08 18:06+0900\n"
+"Last-Translator: Pompa <[email protected]>\n"
+"Language-Team: Italiano <[email protected]>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Report-Msgid-Bugs-To: \n"
-"X-Generator: KBabel 1.10.2\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: cite/lyxpipe.cpp:50
msgid "<qt>Tellico is unable to write to the server pipe at <b>%1</b>.</qt>"
-msgstr "<qt>Tellico non riesce a scrivere sulla server pipe in <b>%1</b>.</qt>"
+msgstr "<qt>Tellico non è riuscito a scrivere sulla server pipe in <b>%1</b>.</qt>"
#: cite/openoffice.cpp:82
msgid "Connecting to OpenOffice.org..."
-msgstr ""
+msgstr "Connessione a OpenOffice.org..."
#: cite/openoffice.cpp:165 cite/openoffice.cpp:186
msgid "OpenOffice.org Connection"
-msgstr ""
+msgstr "Connessione a OpenOffice.org"
#: cite/openoffice.cpp:179
msgid ""
@@ -35,72 +37,72 @@ msgid ""
"connection settings below, and that OpenOffice.org Writer is currently "
"running."
msgstr ""
+"Tellico non è stato in grado di connettersi ad OpenOffice.org. Per favore "
+"verifica i parametri di connessione sottostanti, e che OpenOffice.org Word "
+"Processor sia in esecuzione."
#: cite/openoffice.cpp:191
-#, fuzzy
msgid "Pipe"
-msgstr "Gente"
+msgstr "Pipe"
#: cite/openoffice.cpp:193
msgid "TCP/IP"
-msgstr ""
+msgstr "TCP/IP"
#: gui/tablefieldwidget.cpp:181
#, fuzzy
msgid "Rename Column"
-msgstr "Rinomina Collezione"
+msgstr "Rinomina Colonna"
#: gui/tablefieldwidget.cpp:181
#, fuzzy
msgid "New column name:"
-msgstr "Nuovo nome della collezione:"
+msgstr "Nome della nuova colonna:"
#: gui/tablefieldwidget.cpp:206
-#, fuzzy, c-format
+#, c-format
msgid "Column %1"
-msgstr "Colonna:"
+msgstr "Colonna %1"
#: gui/tablefieldwidget.cpp:241 gui/tablefieldwidget.cpp:289
#, fuzzy
msgid "Rename Column..."
-msgstr "&Rinomina Collezione ..."
+msgstr "Rinomina Colonna..."
#: gui/tablefieldwidget.cpp:274
msgid "Insert Row"
-msgstr ""
+msgstr "Inserisci Riga"
#: gui/tablefieldwidget.cpp:276
#, fuzzy
msgid "Remove Row"
-msgstr "Rimuo&vi"
+msgstr "Rimuovi Riga"
#: gui/tablefieldwidget.cpp:278
msgid "Move Row Up"
-msgstr ""
+msgstr "Sposta Riga in alto"
#: gui/tablefieldwidget.cpp:283
msgid "Move Row Down"
-msgstr ""
+msgstr "Sposta Riga in basso"
#: gui/tablefieldwidget.cpp:295
-#, fuzzy
msgid "Clear Table"
-msgstr "Cancella filtro"
+msgstr "Pulisci tabella"
#: gui/previewdialog.cpp:27
-#, fuzzy
msgid "Template Preview"
-msgstr "Template"
+msgstr "Anteprima template"
#: gui/stringmapdialog.cpp:57
msgid "&Set"
-msgstr "&Set"
+msgstr "&Configura"
#: gui/fieldwidget.cpp:101 gui/fieldwidget.cpp:195
msgid ""
"_: Edit Label\n"
"%1:"
-msgstr ""
+msgstr "%1:"
#: gui/kwidgetlister.cpp:58
msgid ""
@@ -118,38 +120,38 @@ msgstr "Meno"
msgid ""
"_: clear widgets\n"
"Clear"
-msgstr "Cancella"
+msgstr "Pulisci"
#: gui/imagewidget.cpp:57
msgid "Select Image..."
-msgstr "Seleziona immagine ..."
+msgstr "Seleziona immagine..."
#: gui/imagewidget.cpp:63
msgid "Save link only"
-msgstr ""
+msgstr "Salva solo collegamento"
#: gui/imagewidget.cpp:162
msgid "Saving a link is only possible for newly added images."
-msgstr ""
+msgstr "Salvare il collegamento è possibile soltanto per le immagini aggiunte successivamente"
#: commands/modifyentries.cpp:73 commands/updateentries.cpp:50
-#, fuzzy, c-format
+#, c-format
msgid ""
"_: Modify (Entry Title)\n"
"Modify %1"
-msgstr "Salva %1"
+msgstr "Modifica %1"
#: commands/collectioncommand.cpp:110
msgid "Append Collection"
-msgstr "Collega Collezione"
+msgstr "Collega collezione"
#: commands/collectioncommand.cpp:112
msgid "Merge Collection"
-msgstr "Incorpora Collezione"
+msgstr "Incorpora collezione"
#: commands/collectioncommand.cpp:114
msgid "Replace Collection"
-msgstr "Rimpiazza Collezione"
+msgstr "Rimpiazza collezione"
#: commands/modifyentries.cpp:72 entryeditdialog.cpp:365
#, fuzzy
@@ -158,27 +160,26 @@ msgstr "Modifica elementi"
#: commands/fieldcommand.cpp:104
msgid "Add %1 Field"
-msgstr "Aggiungi %1 campo"
+msgstr "Aggiungi il campo %1"
#: commands/fieldcommand.cpp:106
msgid "Modify %1 Field"
-msgstr "Modifica %1 campo"
+msgstr "Modifica il campo %1"
#: commands/fieldcommand.cpp:108
msgid "Delete %1 Field"
-msgstr "Cancella %1 campo"
+msgstr "Cancella il campo %1"
#: commands/addentries.cpp:50
-#, fuzzy
msgid "Add Entries"
-msgstr "Modifica elementi"
+msgstr "Aggiungi elementi"
#: commands/addentries.cpp:51
-#, fuzzy, c-format
+#, c-format
msgid ""
"_: Add (Entry Title)\n"
"Add %1"
-msgstr "Salva %1"
+msgstr "Aggiungi %1"
#: commands/renamecollection.cpp:45 tellico_kernel.cpp:323
msgid "Rename Collection"
@@ -198,18 +199,18 @@ msgstr "Modifica filtro"
#: commands/filtercommand.cpp:102 filterview.cpp:70
msgid "Delete Filter"
-msgstr "Cancella campo"
+msgstr "Cancella filtro"
#: commands/addloans.cpp:108
msgid "Check-out Items"
-msgstr "Verifica oggetti"
+msgstr "Presta oggetti"
#: commands/addloans.cpp:109
#, c-format
msgid ""
"_: Check-out (Entry Title)\n"
"Check-out %1"
-msgstr "Verifica %1"
+msgstr "Presta %1"
#: commands/removeentries.cpp:48
msgid "Delete Entries"
@@ -228,14 +229,14 @@ msgstr "Riordina campi"
#: commands/removeloans.cpp:79
msgid "Check-in Entries"
-msgstr "Registra elementi"
+msgstr "Riconsegnato"
#: commands/removeloans.cpp:80
#, c-format
msgid ""
"_: Check-in (Entry Title)\n"
"Check-in %1"
-msgstr "Registra %1"
+msgstr "Riconsegna di %1"
#: collectionfactory.cpp:83 collections/bibtexcollection.cpp:24
#: collections/bibtexcollection.cpp:58 collections/bibtexcollection.cpp:88
@@ -302,7 +303,7 @@ msgstr "Anno di emissione"
#: collections/stampcollection.cpp:66 collections/videocollection.cpp:172
msgid "Color"
-msgstr "A colori"
+msgstr "Colore"
#: collections/stampcollection.cpp:71
msgid "Scott#"
@@ -312,22 +313,20 @@ msgstr "Scott#"
msgid ""
"_: Stamp grade levels - Superb,Extremely Fine,Very Fine,Fine,Average,Poor\n"
"Superb,Extremely Fine,Very Fine,Fine,Average,Poor"
-msgstr ""
-"Mint,Near Mint,Molto soddisfacente,Soddisfacente,Molto "
-"buono,Buono,Insomma,Cattivo"
+msgstr "Superbo,Eccellente,Molto buono,Buono,Medio,Cattivo"
#: collections/coincollection.cpp:88 collections/stampcollection.cpp:80
msgid "Grade"
-msgstr "Grado"
+msgstr "Stato"
#: collections/stampcollection.cpp:85
msgid "Cancelled"
-msgstr "Cancellato"
+msgstr "Annullato"
#. TRANSLATORS: See http://en.wikipedia.org/wiki/Stamp_hinge
#: collections/stampcollection.cpp:90
msgid "Hinged"
-msgstr "Incollato (Hinged)"
+msgstr "Linguellato"
#: collections/stampcollection.cpp:95
msgid "Centering"
@@ -335,7 +334,7 @@ msgstr "Centratura"
#: collections/stampcollection.cpp:100
msgid "Gummed"
-msgstr "Adesivo"
+msgstr "Gommato"
#: collections/boardgamecollection.cpp:85 collections/bookcollection.cpp:64
#: collections/cardcollection.cpp:82 collections/coincollection.cpp:103
@@ -351,12 +350,12 @@ msgstr "Data di acquisto"
#: collections/musiccollection.cpp:95 collections/stampcollection.cpp:110
#: collections/videocollection.cpp:199 collections/winecollection.cpp:84
msgid "Purchase Price"
-msgstr "Prezzo"
+msgstr "Prezzo d'acquisto"
#: collections/cardcollection.cpp:91 collections/coincollection.cpp:112
#: collections/stampcollection.cpp:114 collections/winecollection.cpp:88
msgid "Location"
-msgstr "Provenienza"
+msgstr "Collocazione"
#: collections/boardgamecollection.cpp:90 collections/bookcollection.cpp:155
#: collections/cardcollection.cpp:96 collections/coincollection.cpp:118
@@ -406,7 +405,7 @@ msgstr "Sceneggiatore"
msgid ""
"_: Comic Book Illustrator\n"
"Artist"
-msgstr ""
+msgstr "Disegnatore"
#: collections/bibtexcollection.cpp:200 collections/bookcollection.cpp:132
#: collections/cardcollection.cpp:71 collections/comicbookcollection.cpp:62
@@ -415,7 +414,7 @@ msgstr "Collana"
#: collections/comicbookcollection.cpp:68
msgid "Issue"
-msgstr "Serie"
+msgstr "Numero"
#: collections/bibtexcollection.cpp:120 collections/boardgamecollection.cpp:60
#: collections/bookcollection.cpp:73 collections/comicbookcollection.cpp:73
@@ -459,9 +458,7 @@ msgid ""
"_: Comic book grade levels - Mint,Near Mint,Very Fine,Fine,Very "
"Good,Good,Fair,Poor\n"
"Mint,Near Mint,Very Fine,Fine,Very Good,Good,Fair,Poor"
-msgstr ""
-"Mint,Near Mint,Molto soddisfacente,Soddisfacente,Molto "
-"buono,Buono,Insomma,Cattivo"
+msgstr "Perfetto,Edicola,Ottimo,Buono/Ottimo,Buono,Discreto"
#: collections/bookcollection.cpp:147 collections/comicbookcollection.cpp:135
msgid "Signed"
@@ -495,11 +492,11 @@ msgstr "Anno"
#: collections/coincollection.cpp:61
msgid "Mint Mark"
-msgstr "Mint"
+msgstr "Segno di zecca"
#: collections/coincollection.cpp:73
msgid "Coin Set"
-msgstr "Set di monete"
+msgstr "Serie"
#: collections/coincollection.cpp:83
msgid ""
@@ -509,10 +506,7 @@ msgid ""
"Proof-65,Proof-60,Mint State-65,Mint State-60,Almost Uncirculated-55,Almost "
"Uncirculated-50,Extremely Fine-40,Very Fine-30,Very Fine-20,Fine-12,Very "
"Good-8,Good-4,Fair"
-msgstr ""
-"Fior di conio-65,Fior di conio-60,Fior di "
-"conio-65,Splendida-60,Splendida-55,Splendida-50,Bellissima-40,Bellissima-30,M"
-"olto bella-20,Molto bella-12,Bella-8,Bella-4,Fair"
+msgstr "Fondo specchio (FS),Fior di conio (FDC),Splendido (SPL),Bellissimo (BB),Molto bello (MB),Bello (B),Discreto (D)"
#: collections/coincollection.cpp:96
msgid ""
@@ -522,15 +516,15 @@ msgstr "PCGS,NGC,ANACS,ICG,ASA,PCI"
#: collections/coincollection.cpp:98
msgid "Grading Service"
-msgstr "SeErvizi di valutazione"
+msgstr "Servizi di valutazione"
#: collections/coincollection.cpp:122
msgid "Obverse"
-msgstr "Osserva"
+msgstr "Dritto (Recto)"
#: collections/coincollection.cpp:125
msgid "Reverse"
-msgstr "Seconda faccia"
+msgstr "Rovescio (Verso)"
#: collections/bookcollection.cpp:28
msgid "My Books"
@@ -558,11 +552,11 @@ msgstr "E-Book"
#: collections/bookcollection.cpp:58
msgid "Magazine"
-msgstr "Rivista"
+msgstr "Periodico"
#: collections/bibtexcollection.cpp:157 collections/bookcollection.cpp:58
msgid "Journal"
-msgstr "Giornale"
+msgstr "Rivista"
#: collections/bookcollection.cpp:59
msgid "Binding"
@@ -575,24 +569,24 @@ msgstr "Copyright (anno)"
#: collections/bibtexcollection.cpp:151 collections/bookcollection.cpp:95
#: translators/grs1importer.cpp:57 translators/risimporter.cpp:278
msgid "ISBN#"
-msgstr "num. ISBN"
+msgstr "Num. ISBN"
#: collections/bibtexcollection.cpp:154 collections/bookcollection.cpp:97
#: translators/grs1importer.cpp:59 translators/risimporter.cpp:282
msgid "International Standard Book Number"
-msgstr "Numero Standard Internazionale per i libri"
+msgstr "Numero Standard Internazionale per i libri (International Standard Book Number)"
#: collections/bookcollection.cpp:100
msgid "LCCN#"
-msgstr "num. LCCN"
+msgstr "Num. LCCN"
#: collections/bookcollection.cpp:102
msgid "Library of Congress Control Number"
-msgstr "Numero di Controllo della Biblioteca del Congresso"
+msgstr "Numero di Controllo della Biblioteca del Congresso (Library of Congress Control Number)"
#: collections/bookcollection.cpp:109
msgid "Translator"
-msgstr ""
+msgstr "Traduttore"
#: collections/bookcollection.cpp:137
msgid "Series Number"
@@ -619,7 +613,7 @@ msgstr "Voto"
#: collections/filecatalog.cpp:25
#, fuzzy
msgid "My Files"
-msgstr "I miei vini"
+msgstr "I miei File"
#: borrowerdialog.cpp:49 collections/filecatalog.cpp:36
#: newstuff/dialog.cpp:113
@@ -639,45 +633,42 @@ msgstr "Volume"
#: collections/filecatalog.cpp:55
#, fuzzy
msgid "Folder"
-msgstr "Filtro"
+msgstr "Cartella"
#: collections/filecatalog.cpp:60
msgid "Mimetype"
-msgstr ""
+msgstr "Tipo MIME"
#: collections/filecatalog.cpp:65
#, fuzzy
msgid "Size"
-msgstr "Autografato"
+msgstr "Dimensioni"
#: collections/filecatalog.cpp:69
#, fuzzy
msgid "Permissions"
-msgstr "Persona"
+msgstr "Permessi"
#: collections/filecatalog.cpp:74
#, fuzzy
msgid "Owner"
-msgstr "Altro"
+msgstr "Proprietario"
#: collections/filecatalog.cpp:79
-#, fuzzy
msgid "Group"
-msgstr "Raggruppa per:"
+msgstr "Gruppo"
#: collections/filecatalog.cpp:85
-#, fuzzy
msgid "Created"
-msgstr "Finito"
+msgstr "Data creazione"
#: collections/filecatalog.cpp:89
-#, fuzzy
msgid "Modified"
-msgstr "Modifica campi"
+msgstr "Ultima modifica"
#: collections/filecatalog.cpp:93
msgid "Meta Info"
-msgstr ""
+msgstr "Meta informazioni"
#: collectionfieldsdialog.cpp:873 collections/filecatalog.cpp:95
msgid "Property"
@@ -688,9 +679,8 @@ msgid "Value"
msgstr "Valore"
#: collections/filecatalog.cpp:99
-#, fuzzy
msgid "Icon"
-msgstr "Icone"
+msgstr "Icona"
#: collections/winecollection.cpp:26
msgid "My Wines"
@@ -702,7 +692,7 @@ msgstr "Produttore"
#: collections/winecollection.cpp:49
msgid "Appellation"
-msgstr "Denominazione "
+msgstr "Denominazione"
#: collections/winecollection.cpp:55
msgid "Varietal"
@@ -730,7 +720,7 @@ msgstr "Quantità"
#: collections/winecollection.cpp:97
msgid "Drink By"
-msgstr "Da bere"
+msgstr "Da bere per"
#: collections/winecollection.cpp:111
msgid "Label Image"
@@ -742,7 +732,7 @@ msgstr "Altre persone"
#: collections/videocollection.cpp:21 fetch/animenfofetcher.cpp:271
msgid "Features"
-msgstr "Features"
+msgstr "Caratteristiche"
#: collections/videocollection.cpp:28
msgid "My Videos"
@@ -766,12 +756,12 @@ msgstr "DivX"
#: collections/videocollection.cpp:46 fetch/amazonfetcher.cpp:823
msgid "Blu-ray"
-msgstr ""
+msgstr "Blu-ray"
#: collections/videocollection.cpp:46 fetch/amazonfetcher.cpp:826
#, fuzzy
msgid "HD DVD"
-msgstr "DVD"
+msgstr "HD DVD"
#: collections/musiccollection.cpp:45 collections/videocollection.cpp:47
msgid "Medium"
@@ -785,13 +775,11 @@ msgstr "Anno di produzione"
msgid ""
"_: Movie ratings - G (USA),PG (USA),PG-13 (USA),R (USA), U (USA)\n"
"G (USA),PG (USA),PG-13 (USA),R (USA), U (USA)"
-msgstr ""
-"Per tutti -G (USA),Da vedere con un adulto -PG (USA),Vietato ai minori di 13 "
-"anni -PG-13 (USA),Vietato ai minori di 17 anni -R (USA)"
+msgstr "T,V.M. 14,V.M. 16,V.M. 18"
#: collections/videocollection.cpp:62
msgid "Certification"
-msgstr "Certificazione"
+msgstr "Visto censura"
#: collections/videocollection.cpp:74
msgid "Region 1"
@@ -855,16 +843,16 @@ msgstr "Cast"
#: collections/videocollection.cpp:102 translators/tellicoimporter.cpp:443
msgid "Actor/Actress"
-msgstr ""
+msgstr "Attore/Attrice"
#: collections/videocollection.cpp:103 translators/tellicoimporter.cpp:444
#, fuzzy
msgid "Role"
-msgstr "Volume"
+msgstr "Ruolo"
#: collections/videocollection.cpp:106
msgid "A table for the cast members, along with the roles they play"
-msgstr "Una tabella comprendente gli attori del cast con i ruoli interpretati"
+msgstr "Una tabella per gli attori che compongono il cast con i ruoli che interpretano"
#: collections/videocollection.cpp:109
msgid "Director"
@@ -880,7 +868,7 @@ msgstr "Studio"
#: collections/videocollection.cpp:139
msgid "Language Tracks"
-msgstr "Lingue del sonoro"
+msgstr "Lingue audio"
#: collections/videocollection.cpp:145
msgid "Subtitle Languages"
@@ -896,7 +884,7 @@ msgstr "Durata"
#: collections/videocollection.cpp:159
msgid "The running time of the video (in minutes)"
-msgstr "La durata del video in minuti"
+msgstr "La durata del video (in minuti)"
#: collections/videocollection.cpp:162
msgid "Aspect Ratio"
@@ -905,7 +893,7 @@ msgstr "Tipo di visualizzazione"
#: collections/videocollection.cpp:167 fetch/amazonfetcher.cpp:815
#: translators/tellicoimporter.cpp:958
msgid "Widescreen"
-msgstr "Grande schermo"
+msgstr "Widescreen"
#: collections/videocollection.cpp:172
msgid "Black & White"
@@ -913,7 +901,7 @@ msgstr "Bianco e nero"
#: collections/videocollection.cpp:173
msgid "Color Mode"
-msgstr "Modalità a colori"
+msgstr "Colori"
#: collections/videocollection.cpp:178 fetch/amazonfetcher.cpp:830
msgid "Director's Cut"
@@ -939,7 +927,7 @@ msgstr "I miei giochi"
#: collections/gamecollection.cpp:44
#, fuzzy
msgid "Xbox 360"
-msgstr "Xbox"
+msgstr "Xbox 360"
#: collections/gamecollection.cpp:44
msgid "Xbox"
@@ -948,7 +936,7 @@ msgstr "Xbox"
#: collections/gamecollection.cpp:45
#, fuzzy
msgid "PlayStation3"
-msgstr "PlayStation"
+msgstr "PlayStation3"
#: collections/gamecollection.cpp:45
msgid "PlayStation2"
@@ -967,7 +955,7 @@ msgstr "PSP"
#: collections/gamecollection.cpp:46
#, fuzzy
msgid "Nintendo Wii"
-msgstr "Regione"
+msgstr "Nintendo Wii"
#: collections/gamecollection.cpp:46
msgid "Nintendo DS"
@@ -1005,7 +993,7 @@ msgstr "Mac OS"
#: collections/gamecollection.cpp:48
msgid "Linux"
-msgstr ""
+msgstr "Linux"
#: collections/gamecollection.cpp:49
msgid "Platform"
@@ -1013,13 +1001,13 @@ msgstr "Piattaforma"
#: collections/boardgamecollection.cpp:55 collections/gamecollection.cpp:60
msgid "Release Year"
-msgstr "Anno di pubblicazione"
+msgstr "Anno"
#: collections/gamecollection.cpp:65
msgid ""
"_: Games - Publisher\n"
"Publisher"
-msgstr "Casa editrice"
+msgstr "Produttore"
#: collections/gamecollection.cpp:71
msgid "Developer"
@@ -1031,12 +1019,12 @@ msgid ""
"Childhood, Pending\n"
"Unrated, Adults Only, Mature, Teen, Everyone, Early Childhood, Pending"
msgstr ""
-"Non classificato, Pubblico Adulto, Teenager, Per tutti, Per bambini, "
+"Non classificato,Pubblico Adulto,Adolescenti,Per tutti,Per bambini,"
"Classificazione in corso"
#: collections/gamecollection.cpp:82
msgid "ESRB Rating"
-msgstr "ESRB Rating"
+msgstr "Classificazione ESRB"
#: collections/gamecollection.cpp:95
msgid "Completed"
@@ -1064,7 +1052,7 @@ msgstr "Numero della carta"
#: collections/cardcollection.cpp:77
msgid "Card Type"
-msgstr "Tipo della carta"
+msgstr "Tipo di carta"
#: collections/cardcollection.cpp:109
msgid "Front Image"
@@ -1077,20 +1065,20 @@ msgstr "Immagine posteriore"
#: collections/boardgamecollection.cpp:26
#, fuzzy
msgid "My Board Games"
-msgstr "I miei giochi"
+msgstr "I miei giochi da tavolo"
#: collections/boardgamecollection.cpp:49
msgid "Mechanism"
-msgstr ""
+msgstr "Meccanismo"
#: collections/boardgamecollection.cpp:66
msgid "Designer"
-msgstr ""
+msgstr "Ideatore"
#: collections/boardgamecollection.cpp:72
#, fuzzy
msgid "Number of Players"
-msgstr "Elementi totali: %1"
+msgstr "Numero di giocatori"
#: collectionfactory.cpp:125 collections/bibtexcollection.cpp:30
msgid "Bibliography"
@@ -1129,11 +1117,11 @@ msgstr "Indirizzo"
#: collections/bibtexcollection.cpp:164 fetch/fetchmanager.cpp:73
msgid "DOI"
-msgstr ""
+msgstr "DOI"
#: collections/bibtexcollection.cpp:167
msgid "Digital Object Identifier"
-msgstr ""
+msgstr "Digital Object Identifier"
#: collections/bibtexcollection.cpp:172
msgid "Month"
@@ -1202,13 +1190,13 @@ msgstr "Tracce"
#: collections/musiccollection.cpp:78 translators/audiofileimporter.cpp:166
#: translators/tellicoimporter.cpp:441
msgid "Length"
-msgstr ""
+msgstr "Durata"
#: core/tellico_config.cpp:134
msgid ""
"a,an,and,as,at,but,by,for,from,in,into,nor,of,off,on,onto,or,out,over,the,to,"
"up,with"
-msgstr "uno,un,una,un',in,di,del,della,il,la,lo,a"
+msgstr "uno,un,una,un',in,di,del,della,il,la,lo,a,i,gli,le"
#: core/tellico_config.cpp:137
msgid "the"
@@ -1224,7 +1212,7 @@ msgstr "de,De,di,Di,van,der,van der,von,mc"
#: fetch/isbndbfetcher.cpp:54
msgid "ISBNdb.com"
-msgstr ""
+msgstr "ISBNdb.com"
#: fetch/amazonfetcher.cpp:192 fetch/animenfofetcher.cpp:75
#: fetch/arxivfetcher.cpp:83 fetch/bibsonomyfetcher.cpp:66
@@ -1250,9 +1238,8 @@ msgid "Entrez Database"
msgstr "Database Entrez"
#: fetch/entrezfetcher.cpp:485
-#, fuzzy
msgid "Institution"
-msgstr "Condizioni"
+msgstr "Istituzione"
#: fetch/z3950connection.cpp:132
msgid "Query error!"
@@ -1260,7 +1247,7 @@ msgstr "Errore nella query!"
#: fetch/z3950connection.cpp:173
msgid "Connection search error %1: %2"
-msgstr "Connection search error %1: %2"
+msgstr "Errore di connessione %1: %2"
#: fetch/z3950connection.cpp:250
msgid "Record syntax error"
@@ -1268,12 +1255,11 @@ msgstr "Errore nella sintassi dell'elemento"
#: fetch/z3950connection.cpp:345
msgid "Connection error %1: %2"
-msgstr "Errore nella connessione %1: %2"
+msgstr "Errore di connessione %1: %2"
#: fetch/srufetcher.cpp:72
-#, fuzzy
msgid "SRU Server"
-msgstr "Ripristinare"
+msgstr "Server SRU"
#: fetch/srufetcher.cpp:405 z3950.cpp:2
msgid "Library of Congress (US)"
@@ -1295,20 +1281,17 @@ msgid "&Port: "
msgstr "&Porta: "
#: fetch/srufetcher.cpp:445 fetch/z3950fetcher.cpp:520
-#, fuzzy, c-format
+#, c-format
msgid "Enter the port number of the server. The default is %1."
-msgstr ""
-"Inserisci il numero della porta del server z39.50. La porta di default è %1."
+msgstr "Inserisci il numero della porta del server. La porta di default è %1."
#: fetch/srufetcher.cpp:450
-#, fuzzy
msgid "Path: "
-msgstr "&Porta: "
+msgstr "Path:"
#: fetch/srufetcher.cpp:455
-#, fuzzy
msgid "Enter the path to the database used by the server."
-msgstr "Inserisci il nome del database usato dal server z39.50."
+msgstr "Inserisci il nome del database usato dal server"
#: fetch/srufetcher.cpp:460
#, fuzzy
@@ -1316,23 +1299,21 @@ msgid "Format: "
msgstr "Formato"
#: fetch/srufetcher.cpp:468
-#, fuzzy
msgid "Enter the result format used by the server."
-msgstr "Inserisci il nome del database usato dal server z39.50."
+msgstr "Scegli il formato usato dal server."
#: fetch/yahoofetcher.cpp:54
msgid "Yahoo! Audio Search"
-msgstr ""
+msgstr "Yahoo! Audio Search"
#: fetch/amazonfetcher.cpp:730 fetch/discogsfetcher.cpp:539
#: fetch/yahoofetcher.cpp:242
msgid "The cover image could not be loaded."
-msgstr "Immagine di copertina non caricata."
+msgstr "L'immagine di copertina non è stata caricata."
#: fetch/amazonfetcher.cpp:53
-#, fuzzy
msgid "Amazon Link"
-msgstr "Amazon (Giappone)"
+msgstr "Link Amazon"
#: fetch/amazonfetcher.cpp:62
msgid "Amazon (US)"
@@ -1424,38 +1405,36 @@ msgid ""
"The cover image may be downloaded as well. However, too many large images in "
"the collection may degrade performance."
msgstr ""
-"L'immagine di copertina può essere scaricata. Inserire troppe immagini "
-"grandi nella collezione può però peggiorare le performance."
+"L'immagine di copertina può essere scaricata comunque. Inserire troppe immagini "
+"grandi nella collezione può però peggiorare le prestazioni."
#: fetch/amazonfetcher.cpp:881
msgid "&Associate's ID: "
-msgstr "ID del &socio: "
+msgstr "ID &utente: "
#: fetch/amazonfetcher.cpp:886
msgid ""
"The associate's id identifies the person accessing the Amazon.com Web "
"Services, and is included in any links to the Amazon.com site."
msgstr ""
-"L'ID del socio identifica la persona che accede ai servizi di Amazon.com ed "
-"incluso in tutti i link al sito Amazon.com."
+"L'ID utente identifica la persona che accede ai servizi di Amazon.com ed "
+"incluso in tutti i link al sito."
#: fetch/z3950fetcher.cpp:79 fetch/z3950fetcher.cpp:755
-#, fuzzy
msgid "z39.50 Server"
-msgstr "z39.50"
+msgstr "Server z39.50"
#: fetch/z3950fetcher.cpp:494
msgid "Use preset &server:"
-msgstr ""
+msgstr "Usa &server predefinito:"
#: fetch/z3950fetcher.cpp:525
msgid "&Database: "
msgstr "&Database: "
#: fetch/z3950fetcher.cpp:530
-#, fuzzy
msgid "Enter the database name used by the server."
-msgstr "Inserisci il nome del database usato dal server z39.50."
+msgstr "Inserisci il nome del database usato dal server."
#: fetch/z3950fetcher.cpp:535
msgid "Ch&aracter set: "
@@ -1465,9 +1444,7 @@ msgstr "Set di c&aratteri: "
msgid ""
"Enter the character set encoding used by the z39.50 server. The most likely "
"choice is MARC-8, although ISO-8859-1 is common as well."
-msgstr ""
-"Inserisci il set di caratteri utilizzato dal server z39.50. La scelta più "
-"probabile è MARC-8, anche se ISO-8859-1 è altrettanto comune."
+msgstr "Inserisci il set di caratteri utilizzato dal server z39.50. Generalmente i server utilizzano MARC-8. Anche ISO-8859-1 è piuttosto comune."
#: fetch/z3950fetcher.cpp:550
#, fuzzy
@@ -1476,13 +1453,16 @@ msgstr "Formato"
#: fetch/z3950fetcher.cpp:553
msgid "Auto-detect"
-msgstr ""
+msgstr "Rileva automaticamente"
#: fetch/z3950fetcher.cpp:561
msgid ""
"Enter the data format used by the z39.50 server. Tellico will attempt to "
"automatically detect the best setting if <i>auto-detect</i> is selected."
msgstr ""
+"Inserisci il formato dati del server z39.50. Se è stato selezionato <i>"
+"rileva automaticamente</i> Tellico cercherà automaticamente di rilevare le "
+"migliori impostazioni."
#: fetch/z3950fetcher.cpp:567
msgid "&User: "
@@ -1497,7 +1477,7 @@ msgid ""
"Enter the authentication user name used by the z39.50 database. Most servers "
"do not need one."
msgstr ""
-"Inserisci lo username per l'autenticazione nel database z39.50. Per molti "
+"Inserisci il nome utente per l'autenticazione nel database z39.50. Per molti "
"server non è necessario."
#: fetch/z3950fetcher.cpp:579
@@ -1512,11 +1492,12 @@ msgid ""
"configuration file."
msgstr ""
"Inserisci la password di autenticazione utilizzata dal database z39.50. Per "
-"molti server non è necessario."
+"molti server non è necessario. La password verrà salvata in chiaro nel file "
+"di configurazione di Tellico."
#: fetch/z3950fetcher.cpp:670
msgid "Illustrator"
-msgstr ""
+msgstr "Illustrator"
#: fetch/execexternalfetcher.cpp:82
msgid "External Application"
@@ -1528,24 +1509,20 @@ msgid "Collection &type:"
msgstr "&Tipo di collezione:"
#: fetch/execexternalfetcher.cpp:351
-msgid ""
-"Set the collection type of the data returned from the external application."
-msgstr ""
-"Seleziona il tipo di collezione per i dati forniti dal programma esterno."
+msgid "Set the collection type of the data returned from the external application."
+msgstr "Seleziona il tipo di collezione per i dati forniti dal programma esterno."
#: fetch/execexternalfetcher.cpp:356
msgid "&Result type: "
-msgstr ""
+msgstr "Tipo di &risultato:"
#: fetch/execexternalfetcher.cpp:365
-#, fuzzy
msgid "Set the result type of the data returned from the external application."
-msgstr ""
-"Seleziona il tipo di collezione per i dati forniti dal programma esterno."
+msgstr "Seleziona il tipo di risultato per i dati forniti dal programma esterno."
#: fetch/execexternalfetcher.cpp:370
msgid "Application &path: "
-msgstr "&path del programma: "
+msgstr "&Path del programma: "
#: fetch/execexternalfetcher.cpp:375
msgid ""
@@ -1557,7 +1534,7 @@ msgstr ""
#: fetch/execexternalfetcher.cpp:380
msgid "Select the search keys supported by the data source."
-msgstr ""
+msgstr "Seleziona le chiavi di ricerca supportate dalla fonte dei dati."
#: fetch/execexternalfetcher.cpp:381
msgid ""
@@ -1568,14 +1545,12 @@ msgstr ""
"ricercate."
#: fetch/execexternalfetcher.cpp:382
-#, fuzzy
msgid "Arguments"
-msgstr "&Argomenti: "
+msgstr "&Argomenti"
#: fetch/execexternalfetcher.cpp:415 newstuff/dialog.cpp:152
-#, fuzzy
msgid "Update"
-msgstr "&Cita elemento"
+msgstr "&Aggiorna"
#. TRANSLATORS: Do not translate %{author}.
#: fetch/execexternalfetcher.cpp:423
@@ -1585,6 +1560,10 @@ msgid ""
"where field values are contained inside braces, such as <i>%{author}</i>. "
"See the documentation for details.</p>"
msgstr ""
+"<p>Inserisci gli argomenti da usare per ricercare gli aggiornamenti disponibili per "
+"un elemento.</p><p>Il formato è lo stesso dei campi <i>Dipendenti</i>, in cui "
+"il valore di un campo è racchiuso fra parentesi, come ad esempio <i>%{author}</i>. "
+"Leggi la documentazione per ulteriori dettagli.</p>"
#: fetch/configwidget.cpp:29
msgid "Source Options"
@@ -1604,8 +1583,7 @@ msgid "Select IMDB Result"
msgstr "Seleziona il risultato IMDB"
#: fetch/imdbfetcher.cpp:581
-msgid ""
-"<qt>Your search returned multiple matches. Please select one below.</qt>"
+msgid "<qt>Your search returned multiple matches. Please select one below.</qt>"
msgstr ""
"<qt>La tua ricerca ha dato più di un risultato. Seleziona uno dei "
"seguenti.</qt>"
@@ -1616,7 +1594,7 @@ msgstr "<qt>Seleziona un risultato.</qt>"
#: fetch/imdbfetcher.cpp:688 fetch/imdbfetcher.cpp:1185
msgid "IMDB Link"
-msgstr ""
+msgstr "Link IMDB"
#: fetch/animenfofetcher.cpp:260 fetch/imdbfetcher.cpp:746
#: fetch/imdbfetcher.cpp:1187
@@ -1624,9 +1602,8 @@ msgid "Alternative Titles"
msgstr "Titoli alternativi"
#: fetch/imdbfetcher.cpp:947 fetch/imdbfetcher.cpp:1186
-#, fuzzy
msgid "IMDB Rating"
-msgstr "ESRB Rating"
+msgstr "Valutazione IMDB"
#: fetch/imdbfetcher.cpp:1065 fetch/imdbfetcher.cpp:1188
msgid "Certifications"
@@ -1641,24 +1618,24 @@ msgstr ""
"usare."
#: fetch/imdbfetcher.cpp:1132
-#, fuzzy
msgid "&Maximum cast: "
-msgstr "Larghezza massima delle immagini:"
+msgstr "Numero &massimo attori:"
#: fetch/imdbfetcher.cpp:1137
msgid ""
"The list of cast members may include many people. Set the maximum number "
"returned from the search."
msgstr ""
+"La lista dei componenti del cast potrebbe includere molte persone. Scegli "
+"un numero massimo per i risultati della ricerca."
#: fetch/discogsfetcher.cpp:679 fetch/imdbfetcher.cpp:1142
-#, fuzzy
msgid "Download cover &image"
-msgstr "Scarica l'immagine di copertina"
+msgstr "Scarica l'&immagine di copertina"
#: fetch/ibsfetcher.cpp:47
msgid "Internet Bookshop (ibs.it)"
-msgstr ""
+msgstr "Internet Bookshop (ibs.it)"
#: fetch/fetchmanager.cpp:69
msgid "Person"
@@ -1670,7 +1647,7 @@ msgstr "ISBN"
#: fetch/fetchmanager.cpp:71
msgid "UPC/EAN"
-msgstr ""
+msgstr "UPC/EAN"
#: fetch/fetchmanager.cpp:72
msgid "Keyword"
@@ -1678,11 +1655,11 @@ msgstr "Parola chiave"
#: fetch/fetchmanager.cpp:74 translators/pdfimporter.cpp:173
msgid "arXiv ID"
-msgstr ""
+msgstr "arXiv ID"
#: fetch/fetchmanager.cpp:75
msgid "Pubmed ID"
-msgstr ""
+msgstr "Pubmed ID"
#: fetch/fetchmanager.cpp:76
msgid "Raw Query"
@@ -1690,24 +1667,24 @@ msgstr "Query in modalità Raw"
#: fetch/animenfofetcher.cpp:257
msgid "Original Title"
-msgstr ""
+msgstr "Titolo originale"
#: fetch/animenfofetcher.cpp:264
#, fuzzy
msgid "Distributor"
-msgstr "Regista"
+msgstr "Distributore"
#: fetch/animenfofetcher.cpp:270
msgid "Episodes"
-msgstr ""
+msgstr "Episodi"
#: fetch/arxivfetcher.cpp:53
msgid "arXiv.org"
-msgstr ""
+msgstr "arXiv.org"
#: fetch/crossreffetcher.cpp:83
msgid "%1 requires a username and password."
-msgstr ""
+msgstr "%1 richiede un username e password."
#: fetch/crossreffetcher.cpp:332
msgid ""
@@ -1715,11 +1692,13 @@ msgid ""
"conditions and <a href='http://www.crossref.org/requestaccount/'>request an "
"account</a>. Enter your OpenURL account information below."
msgstr ""
+"CrossRef richiede un account per accedere. Per favore leggi termini e condizioni "
+"e <a href='http://www.crossref.org/requestaccount/'>richiedi un "
+"account</a>. Inserisci i tuoi dati OpenURL qui sotto."
#: fetch/crossreffetcher.cpp:343
-#, fuzzy
msgid "&Username: "
-msgstr "&Utente: "
+msgstr "Nome &Utente: "
#: fetch/crossreffetcher.cpp:348
#, fuzzy
@@ -1727,8 +1706,8 @@ msgid ""
"A username and password is required to access the CrossRef service. The "
"password is stored as plain text in the Tellico configuration file."
msgstr ""
-"Inserisci la password di autenticazione utilizzata dal database z39.50. Per "
-"molti server non è necessario."
+"Nome utente e password sono necessari per accedere ai servizi CrossRef. "
+"La password verrà salvata in chiaro nel file di configurazione di Tellico."
#: fetch/crossreffetcher.cpp:354
#, fuzzy
@@ -1736,59 +1715,57 @@ msgid "&Password: "
msgstr "Pass&word: "
#: fetch/gcstarpluginfetcher.cpp:190
-#, fuzzy
msgid "GCstar Plugin"
-msgstr "GCstar"
+msgstr "Plugin GCstar"
#: fetch/gcstarpluginfetcher.cpp:404
-#, fuzzy
msgid "Set the collection type of the data returned from the plugin."
-msgstr ""
-"Seleziona il tipo di collezione per i dati forniti dal programma esterno."
+msgstr "Seleziona il tipo di collezione per i dati forniti dal plugin."
#: fetch/gcstarpluginfetcher.cpp:409
msgid "&Plugin: "
-msgstr ""
+msgstr "&Plugin: "
#: fetch/gcstarpluginfetcher.cpp:415
msgid "Select the GCstar plugin used for the data source."
-msgstr ""
+msgstr "Seleziona il plugin GCstar da usare per questa fonte"
#: fetch/gcstarpluginfetcher.cpp:420
-#, fuzzy
msgid "Author: "
-msgstr "Autore"
+msgstr "Autore: "
#: fetch/discogsfetcher.cpp:58
msgid "Discogs Audio Search"
-msgstr ""
+msgstr "Ricerca Audio Discogs"
#: fetch/discogsfetcher.cpp:668
msgid "API &key: "
-msgstr ""
+msgstr "API &key: "
#: fetch/discogsfetcher.cpp:674
msgid ""
"With your discogs.com account you receive an API key for the usage of their "
"XML-based interface (See http://www.discogs.com/help/api)."
msgstr ""
+"Con il tuo account discogs.com riceverai un 'API key' da usare per l'interfaccia "
+"XML (Vedi http://www.discogs.com/help/api)."
#: fetch/discogsfetcher.cpp:718
msgid "Discogs Link"
-msgstr ""
+msgstr "Link Discogs"
#: newstuff/dialog.cpp:94
msgid "Get Hot New Stuff"
-msgstr ""
+msgstr "Scarica le ultime novità"
#: newstuff/dialog.cpp:114
#, fuzzy
msgid "Version"
-msgstr "Persona"
+msgstr "Versione"
#: newstuff/dialog.cpp:116
msgid "Downloads"
-msgstr ""
+msgstr "Download"
#: newstuff/dialog.cpp:117
#, fuzzy
@@ -1801,40 +1778,41 @@ msgid ""
"items have a checkmark icon, while items with new version available have an "
"update icon"
msgstr ""
+"Questa è una lista di tutti gli oggetti disponibili per il download. Quelli "
+"già istallati hanno il segno di spunta, mentre quelli per cui è disponibile una "
+"nuova versione hanno l'icona di aggiornamento"
#: newstuff/dialog.cpp:137
#, fuzzy
msgid "The name and license of the selected item"
-msgstr "Registra gli elementi selezionati"
+msgstr "Nome e licenza degli elementi selezionati"
#: newstuff/dialog.cpp:140
#, fuzzy
msgid "The author of the selected item"
-msgstr "Controlla gli elementi selezionati"
+msgstr "Autore degli elementi selezionati"
#: newstuff/dialog.cpp:142 newstuff/dialog.cpp:396
msgid "Install"
-msgstr ""
+msgstr "Installa"
#: newstuff/dialog.cpp:161
msgid "Download and install the selected template."
-msgstr ""
+msgstr "Scarica e installa il template selezionato."
#: newstuff/dialog.cpp:164
msgid ""
"Download and install the selected script. Some scripts may need to be "
"configured after being installed."
-msgstr ""
+msgstr "Scarica e installa lo script selezionato. Alcuni script potrebbero necessitare di una configurazione successiva."
#: newstuff/dialog.cpp:194
-#, fuzzy
msgid "A description of the selected item is shown here."
-msgstr "Registra gli elementi selezionati"
+msgstr "Una descrizione degli elementi selezionati viene mostrata qui."
#: newstuff/dialog.cpp:224
-#, fuzzy
msgid "Downloading information..."
-msgstr "Importa le informazioni CDAudio da FreeDB"
+msgstr "Dowload delle informazioni..."
#: controller.cpp:135 fetchdialog.cpp:226 fetchdialog.cpp:333
#: fetchdialog.cpp:451 fetchdialog.cpp:506 newstuff/dialog.cpp:297
@@ -1846,17 +1824,15 @@ msgstr "Pronto."
msgid ""
"_: Update Stuff\n"
"Update"
-msgstr ""
+msgstr "Aggiorna"
#: newstuff/dialog.cpp:413
-#, fuzzy
msgid "Installing item..."
-msgstr "Sto salvando il file ..."
+msgstr "Installazione oggetto..."
#: translators/bibteximporter.cpp:79
-#, fuzzy
msgid "No valid bibtex entries were found"
-msgstr "Non è stato trovato alcun elemento Bibtex valido nel file - %1"
+msgstr "Non è stato trovato alcun elemento Bibtex valido."
#: translators/bibteximporter.cpp:96
#, c-format
@@ -1883,9 +1859,8 @@ msgid "Use user locale (%1) encoding"
msgstr "Codifica secondo le impostazioni dell'utente (%1)"
#: translators/bibteximporter.cpp:293
-#, fuzzy
msgid "Read the imported file in the local encoding."
-msgstr "Codifica il file esportato secondo l'impostazione locale."
+msgstr "Leggi il file importato usando la codifica locale."
#: translators/tellicozipexporter.cpp:35
msgid "Tellico Zip File"
@@ -1926,11 +1901,11 @@ msgstr "C'è un errore di parsing HTML nella linea %1, colonna %2."
#: filehandler.cpp:143 translators/tellicoimporter.cpp:115
#: translators/xmlimporter.cpp:45 translators/xmlimporter.cpp:62
msgid "The error message from Qt is:"
-msgstr "Il messaggio di errore Qt è:"
+msgstr "Il messaggio di errore di Qt è:"
#: translators/tellicoimporter.cpp:152
msgid "It is from a future version of Tellico."
-msgstr "Il file sembra appartenere ad una versione futura di Tellico."
+msgstr "Il file sembra appartenere ad una versione successiva di Tellico."
#: translators/tellicoimporter.cpp:162
msgid ""
@@ -1973,16 +1948,15 @@ msgstr "Preferiti"
#: translators/audiofileimporter.cpp:69
msgid "Scanning audio files..."
-msgstr "Scansione dei file audio ..."
+msgstr "Scansione dei file audio..."
#: translators/audiofileimporter.cpp:129
-#, fuzzy
msgid "Bitrate"
-msgstr "Bibtex"
+msgstr "Bitrate"
#: translators/audiofileimporter.cpp:160 translators/audiofileimporter.cpp:170
msgid "Tracks (Disc %1)"
-msgstr ""
+msgstr "Tracce (Disco %1)"
#: translators/audiofileimporter.cpp:189 xslt.cpp:4
msgid "(Various)"
@@ -1994,33 +1968,29 @@ msgstr "Opzioni file audio"
#: translators/audiofileimporter.cpp:342
msgid "Recursive &folder search"
-msgstr "Ricerca ricorsiva"
+msgstr "Ricerca &ricorsiva"
#: translators/audiofileimporter.cpp:343
msgid "If checked, folders are recursively searched for audio files."
msgstr ""
-"Se selezionato, i file audio verranno ricercati ricorsivamente all'interno "
+"Se selezionato, i file verranno ricercati ricorsivamente all'interno "
"delle cartelle."
#: translators/audiofileimporter.cpp:347
msgid "Include file &location"
-msgstr ""
+msgstr "Includi &percorso file"
#: translators/audiofileimporter.cpp:348
-#, fuzzy
msgid "If checked, the file names for each track are added to the entries."
-msgstr ""
-"Se selezionato, i nomi di campo saranno stampati come headers della tabella."
+msgstr "Se selezionato, i nomi di campo saranno stampati come intestazioni della tabella."
#: translators/audiofileimporter.cpp:352
msgid "Include &bitrate"
-msgstr ""
+msgstr "Includi &bitrate"
#: translators/audiofileimporter.cpp:353
-#, fuzzy
msgid "If checked, the bitrate for each track is added to the entries."
-msgstr ""
-"Se selezionato, i nomi di campo saranno stampati come headers della tabella."
+msgstr "Se selezionato,il bitrate dei brani verrà aggiunto agli elementi."
#: translators/csvexporter.cpp:40
msgid "CSV"
@@ -2036,7 +2006,7 @@ msgstr "Opzioni CSV"
#: translators/csvexporter.cpp:112
msgid "Include field titles as column headers"
-msgstr "Includi i titoli degli elementi com header della colonna"
+msgstr "Includi i titoli degli elementi come intestazione della colonna"
#: translators/csvexporter.cpp:114
msgid "If checked, a header row will be added with the field titles."
@@ -2095,12 +2065,11 @@ msgstr ""
#: translators/filelistingimporter.cpp:63
#, fuzzy
msgid "Scanning files..."
-msgstr "Scansione dei file audio ..."
+msgstr "Scansione dei file..."
#: translators/filelistingimporter.cpp:191
-#, fuzzy
msgid "File Listing Options"
-msgstr "Opzioni di stampa"
+msgstr "Opzioni di indicizzazione dei file"
#: translators/filelistingimporter.cpp:193
#, fuzzy
@@ -2108,22 +2077,22 @@ msgid "Recursive folder search"
msgstr "Ricerca ricorsiva"
#: translators/filelistingimporter.cpp:194
-#, fuzzy
msgid "If checked, folders are recursively searched for all files."
msgstr ""
-"Se selezionato, i file audio verranno ricercati ricorsivamente all'interno "
+"Se selezionato, i file verranno ricercati ricorsivamente all'interno "
"delle cartelle."
#: translators/filelistingimporter.cpp:198
-#, fuzzy
msgid "Generate file previews"
-msgstr "&Genera resoconti ..."
+msgstr "&Genera anteprime dei file"
#: translators/filelistingimporter.cpp:199
msgid ""
"If checked, previews of the file contents are generated, which can slow down "
"the folder listing."
msgstr ""
+"Se selezionato verranno generate anteprime del contenuto dei file. Questo "
+"può rallentare il processo."
#: translators/onixexporter.cpp:63
msgid "ONIX Archive"
@@ -2156,28 +2125,24 @@ msgstr ""
"<i>%1</i>.</qt>"
#: translators/freedbimporter.cpp:196
-#, fuzzy
msgid "Select CDDB Entry"
-msgstr "Cancella Elemento"
+msgstr "Seleziona elemento CDDB"
#: translators/freedbimporter.cpp:197
-#, fuzzy
msgid "Select a CDDB entry:"
-msgstr "Seleziona il risultato IMDB"
+msgstr "Selezionare un elemento IMDB"
#: translators/freedbimporter.cpp:220
-#, fuzzy
msgid "<qt>No records were found to match the CD.</qt>"
-msgstr "<qt>No ho trovato elementi da confrontare con il CD.</qt>"
+msgstr "<qt>No sono stati trovati elementi corrispondenti al CD.</qt>"
#: translators/freedbimporter.cpp:238
msgid "<qt>Tellico was unable to complete the CD lookup.</qt>"
-msgstr "<qt>Tellico mnon ha potuto completare il controllo del CD.</qt>"
+msgstr "<qt>Tellico non ha potuto completare il controllo del CD.</qt>"
#: translators/freedbimporter.cpp:470
-#, fuzzy
msgid "Various"
-msgstr "(Varie)"
+msgstr "Varie"
#: translators/freedbimporter.cpp:489
msgid "Audio CD Options"
@@ -2205,17 +2170,15 @@ msgstr ""
#: translators/gcfilmsexporter.cpp:37
msgid "GCfilms"
-msgstr ""
+msgstr "GCfilms"
#: importdialog.cpp:273 translators/gcfilmsexporter.cpp:41
-#, fuzzy
msgid "*.gcf|GCfilms Data Files (*.gcf)"
-msgstr "*.csv|file CSV (*.csv)"
+msgstr "*.gcf|File dati GCfilms(*.gcf)"
#: importdialog.cpp:272 translators/gcfilmsexporter.cpp:43
-#, fuzzy
msgid "*.gcs|GCstar Data Files (*.gcs)"
-msgstr "*.csv|file CSV (*.csv)"
+msgstr "*.gcs|File dati GCstar(*.gcs)"
#: translators/xsltexporter.cpp:37
msgid "XSLT"
@@ -2238,9 +2201,8 @@ msgid "Alexandria Options"
msgstr "Opzioni di Alexandria"
#: translators/alexandriaimporter.cpp:195
-#, fuzzy
msgid "&Library:"
-msgstr "Biblioteca:"
+msgstr "&Biblioteca:"
#: translators/bibtexmlexporter.cpp:36
msgid "Bibtexml"
@@ -2276,14 +2238,12 @@ msgstr ""
"flusso XML come elementi codificati in base64."
#: translators/importer.h:100
-#, fuzzy
msgid "Loading data..."
-msgstr "Sto importando i dati ..."
+msgstr "Sto importando i dati..."
#: translators/importer.h:100
-#, fuzzy
msgid "Loading %1..."
-msgstr "Passo in rassegna %1 ..."
+msgstr "Caricamento di %1..."
#: translators/bibtexexporter.cpp:48
msgid "Bibtex"
@@ -2311,8 +2271,7 @@ msgstr "Usa il pacchetto URL"
#: translators/bibtexexporter.cpp:210
msgid "If checked, any URL fields will be wrapped in a \\url declaration."
-msgstr ""
-"Se selezionato, qualsiasi campo URL verrà tradotto in un indirizzo \\url."
+msgstr "Se selezionato, qualsiasi campo URL verrà tradotto in un indirizzo \\url."
#: translators/bibtexexporter.cpp:213
msgid "Skip entries with empty citation keys"
@@ -2329,11 +2288,11 @@ msgstr "Stile per le citazioni Bibtex:"
#: translators/bibtexexporter.cpp:221 translators/bibtexexporter.cpp:228
#: translators/bibtexexporter.cpp:259
msgid "Braces"
-msgstr "Sostegni"
+msgstr "Parentesi"
#: translators/bibtexexporter.cpp:222 translators/bibtexexporter.cpp:230
msgid "Quotes"
-msgstr "Citazioni"
+msgstr "Virgolette"
#: translators/bibtexexporter.cpp:223
msgid ""
@@ -2354,29 +2313,23 @@ msgstr "La prima riga contiene i titoli dei campi"
#: translators/csvimporter.cpp:236
msgid "If checked, the first row is used as field titles."
-msgstr ""
-"Se selezionato, la prima riga verrà utilizzata per contenere i titoli dei "
-"campi."
+msgstr "Se selezionato, la prima riga verrà utilizzata come titolo dei campi"
#: translators/csvimporter.cpp:248
-#, fuzzy
msgid "&Comma"
-msgstr "Virgola"
+msgstr "&Virgola"
#: translators/csvimporter.cpp:254
-#, fuzzy
msgid "&Semicolon"
-msgstr "Punto e virgola"
+msgstr "Pun&to e virgola"
#: translators/csvimporter.cpp:259
-#, fuzzy
msgid "Ta&b"
-msgstr "Tab"
+msgstr "Ta&b"
#: translators/csvimporter.cpp:264
-#, fuzzy
msgid "Ot&her:"
-msgstr "Altro:"
+msgstr "&Altro:"
#: translators/csvimporter.cpp:289
msgid "The table shows up to the first five lines of the CSV file."
@@ -2393,25 +2346,24 @@ msgstr ""
"selezionando una colonna e un campo e premendo il pulsante <i>Set</i>.</qt>"
#: translators/csvimporter.cpp:298
-#, fuzzy
msgid "Co&lumn:"
-msgstr "Colonna:"
+msgstr "Co&lonna:"
#: translators/csvimporter.cpp:307
-#, fuzzy
msgid "&Data field in this column:"
-msgstr "Campo di dati in questa colonna:"
+msgstr "&Campo di dati in questa colonna:"
#: translators/csvimporter.cpp:315
-#, fuzzy
msgid "&Assign Field"
-msgstr "Assegna campo"
+msgstr "&Assegna campo"
#: translators/csvimporter.cpp:347
msgid ""
"At least one column must be assigned to a field. Only assigned columns will "
"be imported."
msgstr ""
+"Almeno una colonna deve essere assegnata ad un campo. Solo le colonne assegnate "
+"verranno importate."
#: collectionfieldsdialog.cpp:409 collectionfieldsdialog.cpp:412
#: translators/csvimporter.cpp:396 translators/csvimporter.cpp:510
@@ -2444,9 +2396,8 @@ msgid "Set PDA backup flag for database"
msgstr "Imposta la flag di backup del palmare per il database"
#: translators/gcfilmsimporter.cpp:110 translators/gcfilmsimporter.cpp:255
-#, fuzzy
msgid "<qt>The file is not a valid GCstar data file.</qt>"
-msgstr "<qt>Importa la lista dei numeri ISBN da un file di testo.</qt>"
+msgstr "<qt>Il file selezionato non è un file GCstar valido.</qt>"
#: mainwindow.cpp:1738 translators/gcfilmsimporter.cpp:248
#: translators/xsltimporter.cpp:76
@@ -2472,7 +2423,7 @@ msgstr "*.html|file HTML (*.html)"
#: groupview.cpp:479 mainwindow.cpp:1591 mainwindow.cpp:1631
#: translators/htmlexporter.cpp:316
msgid "People"
-msgstr "Gente"
+msgstr "Persone"
#: translators/htmlexporter.cpp:320
msgid "(grouped by %1)"
@@ -2484,12 +2435,11 @@ msgstr "Opzioni HTML"
#: translators/htmlexporter.cpp:468
msgid "Print field headers"
-msgstr "Stampa i field headers"
+msgstr "Stampa le intestazioni dei campi"
#: configdialog.cpp:307 translators/htmlexporter.cpp:469
msgid "If checked, the field names will be printed as table headers."
-msgstr ""
-"Se selezionato, i nomi di campo saranno stampati come headers della tabella."
+msgstr "Se selezionato, i nomi di campo saranno stampati come intestazioni della tabella."
#: translators/htmlexporter.cpp:473
msgid "Group the entries"
@@ -2510,9 +2460,8 @@ msgid "If checked, individual files will be created for each entry."
msgstr "Se selezionato, verranno creati singoli file per ogni elemento."
#: translators/pdfimporter.cpp:92 translators/pdfimporter.cpp:100
-#, fuzzy
msgid "Tellico was unable to read any metadata from the PDF file."
-msgstr "Impossibile caricare immagini dal file - %1."
+msgstr "Tellico non è riuscito a leggere i metadati del file PDF."
#: translators/pdfimporter.cpp:231
msgid ""
@@ -2520,40 +2469,39 @@ msgid ""
"CrossRef.org. However, you must create an CrossRef account and add a new "
"data source with your account information."
msgstr ""
+"Tellico è in grado di scaricare le informazioni di elementi con un DOI da "
+"CrossRef.org. Tuttavia per fare ciò è necessario creare un acocunt CrossRef "
+"e aggiungerlo come fonte di dati."
#: fetcherconfigdialog.cpp:39 fetcherconfigdialog.cpp:49
msgid "Data Source Properties"
-msgstr "Proprietà della fonte dei fati"
+msgstr "Proprietà della fonte dei dati"
#: fetcherconfigdialog.cpp:77
msgid "&Source name: "
msgstr "Nome della &fonte: "
#: fetcherconfigdialog.cpp:79
-msgid ""
-"The name identifies the data source and should be unique and informative."
+msgid "The name identifies the data source and should be unique and informative."
msgstr ""
-"Il nome identifica òa fonte dei dati e dovrebbe essere univoco e "
+"Il nome identifica la fonte dei dati e dovrebbe essere univoco e "
"permetterne la facile identificazione."
#: fetcherconfigdialog.cpp:90 fetcherconfigdialog.cpp:94
msgid "Source &type: "
-msgstr "Tipo della fon&te: "
+msgstr "&Tipo della fonte: "
#: fetcherconfigdialog.cpp:97
msgid "Tellico supports several different data sources."
-msgstr ""
+msgstr "Tellico supporta molti tipi di fonti di dati."
#: fetcherconfigdialog.cpp:111
msgid "Updating from source should overwrite user data"
-msgstr ""
+msgstr "Aggiornare dalla fonte scelta potrebbe sovrascrivere i dati attuali"
#: fetcherconfigdialog.cpp:114
-#, fuzzy
msgid "If checked, updating entries will overwrite any existing information."
-msgstr ""
-"Se selezionato, gli elementi verranno raggruppati secondo il campo "
-"selezionato."
+msgstr "Se selezionato, l'aggiornamento sovrascriverà i dati attuali."
#: filterdialog.cpp:60
msgid "Any Field"
@@ -2569,11 +2517,11 @@ msgstr "non contiene"
#: filterdialog.cpp:70
msgid "equals"
-msgstr "equivale"
+msgstr "uguale a"
#: filterdialog.cpp:71
msgid "does not equal"
-msgstr "non è uguale"
+msgstr "diverso da"
#: filterdialog.cpp:72
msgid "matches regexp"
@@ -2585,7 +2533,7 @@ msgstr "non corrisponde alla espressione regolare"
#: filterdialog.cpp:90
msgid "Edit..."
-msgstr "Modifica ..."
+msgstr "Modifica..."
#: filterdialog.cpp:282
msgid "Advanced Filter"
@@ -2601,7 +2549,7 @@ msgstr "Verifica &tutti i criteri seguenti"
#: filterdialog.cpp:301
msgid "Match an&y of the following"
-msgstr "Verifica alme&no uno dei criteri seguenti"
+msgstr "Verifica almeno &uno dei criteri seguenti"
#: filterdialog.cpp:311
msgid "Filter name:"
@@ -2640,42 +2588,40 @@ msgid "Date"
msgstr "Data"
#: entryupdater.cpp:81
-#, fuzzy
msgid "Updating %1..."
-msgstr "Passo in rassegna %1 ..."
+msgstr "Aggiornamento di %1..."
#: entryupdater.cpp:83
-#, fuzzy
msgid "Updating entries..."
-msgstr "&Modifica elementi ..."
+msgstr "Aggiornamento elementi..."
#: entryupdater.cpp:85
-#, fuzzy
msgid "Update Entries"
-msgstr "Modifica elementi"
+msgstr "Aggiorna elementi"
#: entryupdater.cpp:99
msgid "Updating <b>%1</b>..."
-msgstr ""
+msgstr "Aggiornamento <b>%1</b>..."
#: entryupdater.cpp:209
-#, fuzzy
msgid "Select Match"
-msgstr "Seleziona il risultato IMDB"
+msgstr "Seleziona il risultato"
#: entryupdater.cpp:217
msgid ""
"<qt><b>%1</b> returned multiple results which could match <b>%2</b>, the "
"entry currently in the collection. Please select the correct match.</qt>"
msgstr ""
+"<qt><b>%1</b> he restituito più risultati che potrebbero corrispondere a <b>%2</b>, "
+"l'attuale elemento della collezione. Per favore seleziona il risultato corretto</qt>"
#: groupview.cpp:252
msgid "Expand All Groups"
-msgstr "Espandi elenco"
+msgstr "Espandi tutti i gruppi"
#: groupview.cpp:254
msgid "Collapse All Groups"
-msgstr "Riduci elenco"
+msgstr "Riduci tutti i gruppi"
#: groupview.cpp:256
msgid "Filter by Group"
@@ -2714,7 +2660,7 @@ msgid ""
"Append the contents of the imported file to the current collection. This is "
"only possible when the collection types match."
msgstr ""
-"Allega il contenuto del file importato alla collezione attuale. This è "
+"Allega il contenuto del file importato alla collezione attuale. Questo è "
"possibile solo se le collezioni sono dello stesso tipo."
#: importdialog.cpp:69
@@ -2730,7 +2676,7 @@ msgid ""
msgstr ""
"Unifica i contenuti del file importato a quelli della collezione attuale. "
"Questo è possibile solo quando le collezioni sono dello stesso tipo. Per "
-"poter essere unificati tutti gli elementi devono corrispondere esattamente."
+"poter essere unificati gli elementi devono corrispondere esattamente."
#: importdialog.cpp:95 mainwindow.cpp:318 rc.cpp:9
#, no-c-format
@@ -2742,19 +2688,16 @@ msgid "*.ris|RIS Files (*.ris)"
msgstr "*.ris|file RIS (*.ris)"
#: importdialog.cpp:277
-#, fuzzy
msgid "*.amc|AMC Data Files (*.amc)"
-msgstr "*.csv|file CSV (*.csv)"
+msgstr "*.amc|AMC Data Files (*.amc)"
#: importdialog.cpp:281
-#, fuzzy
msgid "*.pdf|PDF Files (*.pdf)"
-msgstr "*.pdb|File di database Pilot (*.pdb)"
+msgstr "*.pdf|File PDF (*.pdf)"
#: importdialog.cpp:285
-#, fuzzy
msgid "*.reflib|Referencer Files (*.reflib)"
-msgstr "*.ris|file RIS (*.ris)"
+msgstr "*.reflib|File Referencer (*.reflib)"
#: tellico_strings.cpp:18
#, c-format
@@ -2769,7 +2712,7 @@ msgstr "Impossibile scrivere sul file - %1."
#: tellico_strings.cpp:20
#, c-format
msgid "Tellico is unable to upload the file - %1."
-msgstr "Impossibile uploadare il file - %1."
+msgstr "Impossibile aggiornare il file - %1."
#: tellico_strings.cpp:21
msgid ""
@@ -2795,7 +2738,7 @@ msgstr "Impossibile caricare immagini dal file - %1."
#: entryiconview.cpp:287
#, fuzzy
msgid "&Sort By"
-msgstr "&Porta: "
+msgstr "&Ordina per"
#: loandialog.cpp:40
msgid "Loan Dialog"
@@ -2803,15 +2746,15 @@ msgstr "Modulo per il prestito"
#: loandialog.cpp:78
msgid "The following items are being checked out:"
-msgstr "I seguenti oggetti sono stati controllati:"
+msgstr "I seguenti oggetti sono stati dati in prestito:"
#: loandialog.cpp:84
msgid "The following item is on-loan:"
-msgstr "Il seguente oggetto è stato prestato:"
+msgstr "Il seguente oggetto è in presito:"
#: loandialog.cpp:94
msgid "&Lend to:"
-msgstr "pr&esta a:"
+msgstr "&Presta a:"
#: loandialog.cpp:107
msgid ""
@@ -2823,19 +2766,19 @@ msgstr ""
#: loandialog.cpp:117
msgid "&Loan date:"
-msgstr "Data del p&restito:"
+msgstr "&Data del prestito:"
#: loandialog.cpp:123
msgid ""
"The check-out date is the date that you lent the items. By default, today's "
"date is used."
msgstr ""
-"La dara in cui tu hai prestato gli oggetti. La data di default è quella di "
+"La data in cui hai prestato gli oggetti. La data di default è quella di "
"oggi."
#: loandialog.cpp:132
msgid "D&ue date:"
-msgstr "Data di restit&uzione:"
+msgstr "Data di &restituzione:"
#: loandialog.cpp:139
msgid ""
@@ -2856,7 +2799,7 @@ msgstr "Puoi aggiungere delle note riguardanti il prestito."
#: loandialog.cpp:154
msgid "&Add a reminder to the active calendar"
-msgstr "&Aggiungi un memorandum al calendario"
+msgstr "&Aggiungi un promemoria al calendario"
#: loandialog.cpp:157
msgid ""
@@ -2874,7 +2817,7 @@ msgstr "Crea una nuova collezione"
#: mainwindow.cpp:192
msgid "New &Book Collection"
-msgstr "Nuova Collez&ione di libri"
+msgstr "Nuova Collezione di &libri"
#: mainwindow.cpp:194
msgid "Create a new book collection"
@@ -2882,15 +2825,15 @@ msgstr "Crea una nuova collezione di libri"
#: mainwindow.cpp:200
msgid "New B&ibliography"
-msgstr "Nuova B&ibliografia"
+msgstr "Nuova &bibliografia"
#: mainwindow.cpp:202
msgid "Create a new bibtex bibliography"
-msgstr "Crea una nuova bibliografia bibtex"
+msgstr "Crea una nuova bibliografia bibte&x"
#: mainwindow.cpp:208
msgid "New &Comic Book Collection"
-msgstr "Nuova &Collezione di fumetti"
+msgstr "Nuova collezione di &fumetti"
#: mainwindow.cpp:210
msgid "Create a new comic book collection"
@@ -2898,7 +2841,7 @@ msgstr "Crea una nuova collezione di fumetti"
#: mainwindow.cpp:216
msgid "New &Video Collection"
-msgstr "Nuova collezione &Video"
+msgstr "Nuova collezione &video"
#: mainwindow.cpp:218
msgid "Create a new video collection"
@@ -2906,7 +2849,7 @@ msgstr "Crea una nuova collezione di video"
#: mainwindow.cpp:224
msgid "New &Music Collection"
-msgstr "Nuova Collezione &Musicale"
+msgstr "Nuova collezione &musicale"
#: mainwindow.cpp:226
msgid "Create a new music collection"
@@ -2938,7 +2881,7 @@ msgstr "Crea una nuova collezione di carte collezionabili"
#: mainwindow.cpp:256
msgid "New &Wine Collection"
-msgstr "Nuova collezione di &Vini"
+msgstr "Nuova collezione di vi&ni"
#: mainwindow.cpp:258
msgid "Create a new wine collection"
@@ -2953,28 +2896,26 @@ msgid "Create a new game collection"
msgstr "Crea una nuova collezione di giochi"
#: mainwindow.cpp:272
-#, fuzzy
msgid "New Boa&rd Game Collection"
-msgstr "Nuova collezione di &giochi"
+msgstr "Nuova collezione di giochi da tavolo"
#: mainwindow.cpp:274
#, fuzzy
msgid "Create a new board game collection"
-msgstr "Crea una nuova collezione di giochi"
+msgstr "Crea una nuova collezione di giochi da tavolo"
#: mainwindow.cpp:280
-#, fuzzy
msgid "New &File Catalog"
-msgstr "Nuovo campo"
+msgstr "Nuova collezione di &file"
#: mainwindow.cpp:282
#, fuzzy
msgid "Create a new file catalog"
-msgstr "Crea una nuova collezione"
+msgstr "Crea una nuova collezione di File"
#: mainwindow.cpp:288
msgid "New C&ustom Collection"
-msgstr "Nuova colle&zione personalizzata"
+msgstr "Nuova collezione &personalizzata"
#: mainwindow.cpp:290
msgid "Create a new custom collection"
@@ -2994,15 +2935,15 @@ msgstr "Salva il documento"
#: mainwindow.cpp:305
msgid "Save the document as a different file..."
-msgstr "Salva il documento su un file diverso ..."
+msgstr "Salva il documento come nuovo file..."
#: mainwindow.cpp:307
msgid "Print the contents of the document..."
-msgstr "Stampa il documento ..."
+msgstr "Stampa il documento..."
#: mainwindow.cpp:309
msgid "Quit the application"
-msgstr "Chiudi il programma"
+msgstr "Esci"
#: mainwindow.cpp:320
msgid "Import collection data from other formats"
@@ -3010,7 +2951,7 @@ msgstr "Importa i dati di una collezione da un formato diverso"
#: mainwindow.cpp:324
msgid "Import Tellico Data..."
-msgstr "Importa dati Tellico ..."
+msgstr "Importa dati Tellico..."
#: mainwindow.cpp:325
msgid "Import another Tellico data file"
@@ -3018,7 +2959,7 @@ msgstr "Importa un altro file Tellico"
#: mainwindow.cpp:331
msgid "Import CSV Data..."
-msgstr "Importa dati CSV ..."
+msgstr "Importa dati CSV..."
#: mainwindow.cpp:332
msgid "Import a CSV file"
@@ -3026,7 +2967,7 @@ msgstr "Importa un file CSV"
#: mainwindow.cpp:338
msgid "Import MODS Data..."
-msgstr "Importa dati MODS ..."
+msgstr "Importa dati MODS..."
#: mainwindow.cpp:339
msgid "Import a MODS data file"
@@ -3034,7 +2975,7 @@ msgstr "Importa un file di dati MODS"
#: mainwindow.cpp:345
msgid "Import Alexandria Data..."
-msgstr "Importa dati Alexandria ..."
+msgstr "Importa dati Alexandria..."
#: mainwindow.cpp:346
msgid "Import data from the Alexandria book collection manager"
@@ -3043,26 +2984,25 @@ msgstr "Importa dati dal gestore di collezioni Alexandria"
#: mainwindow.cpp:352
#, fuzzy
msgid "Import Delicious Library Data..."
-msgstr "Importa dati Tellico ..."
+msgstr "Importa dati Delicious Library..."
#: mainwindow.cpp:353
#, fuzzy
msgid "Import data from Delicious Library"
-msgstr "Importa metadati dai file audio"
+msgstr "Importa dati da Delicious Library"
#: mainwindow.cpp:359
-#, fuzzy
msgid "Import Referencer Data..."
-msgstr "Importa dati RIS ..."
+msgstr "Importa dati Referencer..."
#: mainwindow.cpp:360
#, fuzzy
msgid "Import data from Referencer"
-msgstr "Importa un reference file RIS"
+msgstr "Importa dati da Referencer"
#: mainwindow.cpp:366
msgid "Import Bibtex Data..."
-msgstr "Importa dati Bibtex ..."
+msgstr "Importa dati Bibtex..."
#: mainwindow.cpp:367
msgid "Import a bibtex bibliography file"
@@ -3070,7 +3010,7 @@ msgstr "Importa un file di bibliografia Bibtex"
#: mainwindow.cpp:373
msgid "Import Bibtexml Data..."
-msgstr "Importa dati Bibtexml ..."
+msgstr "Importa dati Bibtexml..."
#: mainwindow.cpp:374
msgid "Import a Bibtexml bibliography file"
@@ -3078,7 +3018,7 @@ msgstr "Importa un file di bibliografia Bibtexml"
#: mainwindow.cpp:380
msgid "Import RIS Data..."
-msgstr "Importa dati RIS ..."
+msgstr "Importa dati RIS..."
#: mainwindow.cpp:381
msgid "Import an RIS reference file"
@@ -3087,16 +3027,16 @@ msgstr "Importa un reference file RIS"
#: mainwindow.cpp:387
#, fuzzy
msgid "Import PDF File..."
-msgstr "Importa file"
+msgstr "Importa file PDF..."
#: mainwindow.cpp:388
#, fuzzy
msgid "Import a PDF file"
-msgstr "Importa un file CSV"
+msgstr "Importa un file PDF"
#: mainwindow.cpp:394
msgid "Import Audio File Metadata..."
-msgstr "Importa metadati di un file audio ..."
+msgstr "Importa metadati di un file audio..."
#: mainwindow.cpp:395
msgid "Import meta-data from audio files"
@@ -3104,55 +3044,52 @@ msgstr "Importa metadati dai file audio"
#: mainwindow.cpp:404
msgid "Import Audio CD Data..."
-msgstr "Importa dati CDAudio ..."
+msgstr "Importa dati CDAudio..."
#: mainwindow.cpp:405
-#, fuzzy
msgid "Import audio CD information"
-msgstr "Importa le informazioni CDAudio da FreeDB"
+msgstr "Importa informazioni CDAudio"
#: mainwindow.cpp:414
#, fuzzy
msgid "Import GCstar Data..."
-msgstr "Importa dati CSV ..."
+msgstr "Importa dati GCstar..."
#: mainwindow.cpp:415
#, fuzzy
msgid "Import a GCstar data file"
-msgstr "Importa un file di dati MODS"
+msgstr "Importa un file GCstar"
#: mainwindow.cpp:421
#, fuzzy
msgid "Import Griffith Data..."
-msgstr "Importa dati CSV ..."
+msgstr "Importa dati Griffith..."
#: mainwindow.cpp:422
#, fuzzy
msgid "Import a Griffith database"
-msgstr "Esporta in un database PilotDB"
+msgstr "Importa un database Griffith"
#: mainwindow.cpp:428
#, fuzzy
msgid "Import Ant Movie Catalog Data..."
-msgstr "Importa dati CDAudio ..."
+msgstr "Importa dati da un Movie Catlog Ant..."
#: mainwindow.cpp:429
-#, fuzzy
msgid "Import an Ant Movie Catalog data file"
-msgstr "Importa un altro file Tellico"
+msgstr "Importa dati da un file Movie Catlog Ant"
#: mainwindow.cpp:435
-#, fuzzy
msgid "Import File Listing..."
-msgstr "Importa file"
+msgstr "Importa lista file..."
#: mainwindow.cpp:436
msgid "Import information about files in a folder"
-msgstr ""
+msgstr "Importa le informazioni su un file in una cartella"
#: mainwindow.cpp:442
msgid "Import XSL Transform..."
-msgstr "Importa XSL Transform ..."
+msgstr "Importa XSL Transform..."
#: mainwindow.cpp:443
msgid "Import using an XSL Transform"
@@ -3170,7 +3107,7 @@ msgstr "Esporta i dati della collezione in un altro formato"
#: mainwindow.cpp:461
#, fuzzy
msgid "Export to XML..."
-msgstr "Esporta in HTML ..."
+msgstr "Esporta in XML..."
#: mainwindow.cpp:462
#, fuzzy
@@ -3179,16 +3116,16 @@ msgstr "Esporta in un file XML di Tellico"
#: mainwindow.cpp:468
msgid "Export to Zip..."
-msgstr "Esporta in Zip ..."
+msgstr "Esporta in Zip..."
#: mainwindow.cpp:469
#, fuzzy
msgid "Export to a Tellico Zip file"
-msgstr "Esporta in un file XML di Tellico"
+msgstr "Esporta in un file Zip di Tellico"
#: mainwindow.cpp:475
msgid "Export to HTML..."
-msgstr "Esporta in HTML ..."
+msgstr "Esporta in HTML..."
#: mainwindow.cpp:476
msgid "Export to an HTML file"
@@ -3196,7 +3133,7 @@ msgstr "Esporta in un file HTML"
#: mainwindow.cpp:482
msgid "Export to CSV..."
-msgstr "Esporta in CSV ..."
+msgstr "Esporta in CSV..."
#: mainwindow.cpp:483
msgid "Export to a comma-separated values file"
@@ -3204,7 +3141,7 @@ msgstr "Esporta su un file Comma-Separated Values"
#: mainwindow.cpp:489
msgid "Export to PilotDB..."
-msgstr "Esporta in PilotDB ..."
+msgstr "Esporta in PilotDB..."
#: mainwindow.cpp:490
msgid "Export to a PilotDB database"
@@ -3212,7 +3149,7 @@ msgstr "Esporta in un database PilotDB"
#: mainwindow.cpp:496
msgid "Export to Alexandria..."
-msgstr "Esporta in Alexandria ..."
+msgstr "Esporta in Alexandria..."
#: mainwindow.cpp:497
msgid "Export to an Alexandria library"
@@ -3220,7 +3157,7 @@ msgstr "Esporta in una biblioteca Alexandria"
#: mainwindow.cpp:503
msgid "Export to Bibtex..."
-msgstr "Esporta in Bibtex ..."
+msgstr "Esporta in Bibtex..."
#: mainwindow.cpp:504
msgid "Export to a bibtex file"
@@ -3228,7 +3165,7 @@ msgstr "Esporta come file Bibtex"
#: mainwindow.cpp:510
msgid "Export to Bibtexml..."
-msgstr "Esporta in Bibtexml ..."
+msgstr "Esporta in Bibtexml..."
#: mainwindow.cpp:511
msgid "Export to a Bibtexml file"
@@ -3236,7 +3173,7 @@ msgstr "Esporta come file Bibtexml"
#: mainwindow.cpp:517
msgid "Export to ONIX..."
-msgstr "Esporta in ONIX ..."
+msgstr "Esporta in ONIX..."
#: mainwindow.cpp:518
msgid "Export to an ONIX file"
@@ -3245,26 +3182,26 @@ msgstr "Esporta in un file ONIX"
#: mainwindow.cpp:524
#, fuzzy
msgid "Export to GCfilms..."
-msgstr "Esporta in CSV ..."
+msgstr "Esporta in GCfilms..."
#: mainwindow.cpp:525
#, fuzzy
msgid "Export to a GCfilms data file"
-msgstr "Esporta come file Bibtex"
+msgstr "Esporta come file GCfilms"
#: mainwindow.cpp:531
#, fuzzy
msgid "Export to GCstar..."
-msgstr "Esporta in CSV ..."
+msgstr "Esporta in GCstar..."
#: mainwindow.cpp:532
#, fuzzy
msgid "Export to a GCstar data file"
-msgstr "Esporta come file Bibtex"
+msgstr "Esporta come file GCstar"
#: mainwindow.cpp:536
msgid "Export XSL Transform..."
-msgstr "Esporta XSL Transform ..."
+msgstr "Esporta XSL Transform..."
#: mainwindow.cpp:537
msgid "Export using an XSL Transform"
@@ -3284,23 +3221,23 @@ msgstr "Incolla il contenuto degli appunti"
#: mainwindow.cpp:552
msgid "Select all the entries in the collection"
-msgstr "Seleziona tutti i campi della collezione"
+msgstr "Seleziona tutti gli elementi della collezione"
#: mainwindow.cpp:554
msgid "Deselect all the entries in the collection"
-msgstr "Deseleziona tutti i campi della collezione"
+msgstr "Deseleziona tutti gli elementi della collezione"
#: mainwindow.cpp:556
msgid "Internet Search..."
-msgstr "Ricerca su Internet ..."
+msgstr "Cerca su Internet..."
#: mainwindow.cpp:559
msgid "Search the internet..."
-msgstr "Ricerca attraverso Internet ..."
+msgstr "Ricerca attraverso Internet..."
#: mainwindow.cpp:561
msgid "Advanced &Filter..."
-msgstr "&Filtro avanzato ..."
+msgstr "&Filtro avanzato..."
#: mainwindow.cpp:564 mainwindow.cpp:719
msgid "Filter the collection"
@@ -3308,7 +3245,7 @@ msgstr "Applica filtri"
#: mainwindow.cpp:569
msgid "&New Entry..."
-msgstr "&Nuovo Elemento ..."
+msgstr "&Nuovo Elemento..."
#: mainwindow.cpp:572
msgid "Create a new entry"
@@ -3316,16 +3253,15 @@ msgstr "Crea un nuovo elemento"
#: controller.cpp:620 mainwindow.cpp:573
msgid "&Edit Entry..."
-msgstr "&Modifica elemento ..."
+msgstr "&Modifica elemento..."
#: mainwindow.cpp:576
msgid "Edit the selected entries"
msgstr "Modifica gli elementi selezionati"
#: controller.cpp:621 mainwindow.cpp:577
-#, fuzzy
msgid "D&uplicate Entry"
-msgstr "Duplica elemento"
+msgstr "D&uplica elemento"
#: mainwindow.cpp:580
msgid "Copy the selected entries"
@@ -3342,16 +3278,16 @@ msgstr "Cancella gli elementi selezionati"
#: mainwindow.cpp:585
#, fuzzy
msgid "&Merge Entries"
-msgstr "Cance&lla elementi"
+msgstr "&Fondi elementi"
#: mainwindow.cpp:588
#, fuzzy
msgid "Merge the selected entries"
-msgstr "Cancella gli elementi selezionati"
+msgstr "Fondi gli elementi selezionati"
#: mainwindow.cpp:591
msgid "&Generate Reports..."
-msgstr "&Genera resoconti ..."
+msgstr "&Genera resoconti..."
#: mainwindow.cpp:594
msgid "Generate collection reports"
@@ -3359,23 +3295,23 @@ msgstr "Genera resoconti sulla collezione"
#: mainwindow.cpp:595
msgid "Check-&out..."
-msgstr "&Verifica ..."
+msgstr "&Presta..."
#: mainwindow.cpp:598
msgid "Check-out the selected items"
-msgstr "Controlla gli elementi selezionati"
+msgstr "Presta gli elementi selezionati"
#: mainwindow.cpp:599
msgid "Check-&in"
-msgstr "Reg&istrazione"
+msgstr "Riconsegnato"
#: mainwindow.cpp:602
msgid "Check-in the selected items"
-msgstr "Registra gli elementi selezionati"
+msgstr "Segna come riconsegnati gli elementi selezionati"
#: mainwindow.cpp:604
msgid "&Rename Collection..."
-msgstr "&Rinomina Collezione ..."
+msgstr "&Rinomina Collezione..."
#: mainwindow.cpp:607
msgid "Rename the collection"
@@ -3383,11 +3319,11 @@ msgstr "Rinomina la collezione"
#: mainwindow.cpp:608
msgid "Collection &Fields..."
-msgstr "Campi della colle&zione ..."
+msgstr "Campi della colle&zione..."
#: mainwindow.cpp:611
msgid "Modify the collection fields"
-msgstr "Modifica i campi della tabella della collezione"
+msgstr "Modifica i campi della collezione"
#: mainwindow.cpp:612
msgid "Convert to &Bibliography"
@@ -3399,26 +3335,26 @@ msgstr "Trasforma una collezione di libri in una bibliografia"
#: mainwindow.cpp:616
msgid "String &Macros..."
-msgstr "String &Macros..."
+msgstr "Stringhe &Macro..."
#: mainwindow.cpp:619
msgid "Edit the bibtex string macros"
-msgstr "Edita le string macros Bibtex"
+msgstr "Edita le stringhe macro Bibtex"
#: mainwindow.cpp:626
#, fuzzy
msgid "Copy Bibtex to Cli&pboard"
-msgstr "Copia il testo selezionato negli appunti"
+msgstr "Copia dati Bibtex negli appunti"
#: mainwindow.cpp:627
#, fuzzy
msgid "Copy bibtex citations to the clipboard"
-msgstr "Copia il testo selezionato negli appunti"
+msgstr "Copia le citazioni Bibtex negli appunti"
#: mainwindow.cpp:632
#, fuzzy
msgid "Cite Entry in &LyX"
-msgstr "&Cita elemento"
+msgstr "Cita elemento in &LyX"
#: mainwindow.cpp:633
msgid "Cite the selected entries in LyX"
@@ -3427,26 +3363,25 @@ msgstr "Cita l'elemento selezionato in LyX"
#: mainwindow.cpp:638
#, fuzzy
msgid "Ci&te Entry in OpenOffice.org"
-msgstr "&Cita elemento"
+msgstr "Cita elemento in &OpenOffice.org"
#: mainwindow.cpp:639
-#, fuzzy
msgid "Cite the selected entries in OpenOffice.org"
-msgstr "Cita l'elemento selezionato in LyX"
+msgstr "Cita gli elementi selezionato in OpenOffice.org"
#: controller.cpp:622 mainwindow.cpp:647 rc.cpp:18
#, fuzzy, no-c-format
msgid "&Update Entry"
-msgstr "&Cita elemento"
+msgstr "&Aggiorna elemento"
#: mainwindow.cpp:652
#, fuzzy
msgid "All Sources"
-msgstr "Fonte"
+msgstr "Tutte le fonti"
#: mainwindow.cpp:653
msgid "Update entry data from all available sources"
-msgstr ""
+msgstr "Aggiorna l'elemento da tutte le fonti disponibili"
#: mainwindow.cpp:665
msgid "Show Grou&p View"
@@ -3494,7 +3429,7 @@ msgstr "Selezione di &gruppo"
#: mainwindow.cpp:700
msgid "Change the grouping of the collection"
-msgstr "Cambia il modo di raggruppamento"
+msgstr "Cambia il modo di raggruppamento della collezione"
#: filterview.cpp:33 filterview.cpp:85 mainwindow.cpp:702 mainwindow.cpp:717
msgid "Filter"
@@ -3506,7 +3441,7 @@ msgstr "Cancella filtro"
#: mainwindow.cpp:710
msgid "Filter here..."
-msgstr "Filtra qui ..."
+msgstr "Filtra qui..."
#: mainwindow.cpp:768
msgid "Groups"
@@ -3531,7 +3466,7 @@ msgstr ""
#: mainwindow.cpp:831
#, fuzzy
msgid "Welcome to the Tellico Collection Manager"
-msgstr "Tellico - un gestore delle collezioni personali per KDE"
+msgstr "Tellico - un gestore di collezioni personali per KDE"
#: mainwindow.cpp:833
msgid ""
@@ -3541,14 +3476,19 @@ msgid ""
"by <a href=\"tc:///edit_search_internet\">downloading data</a> from various "
"Internet sources.</h3>"
msgstr ""
+"<h3>Tellico è uno strumento di gestione di collezioni di libri, materiale video, "
+"musica, e qualsiasi altra cosa tu voglia catalogare.</h3><h3>I nuovi elementi possono "
+"essere aggiunti alla tua collezione <a href=\"tc:///coll_new_entry\">manualmente</a> "
+"o <a href=\"tc:///edit_search_internet\">recuperando i dati</a> da diverse fonti su "
+"internet.</h3>"
#: mainwindow.cpp:1066
msgid "Creating new document..."
-msgstr "Creazione nuovo documento ..."
+msgstr "Creazione nuovo documento..."
#: mainwindow.cpp:1098 mainwindow.cpp:1117 mainwindow.cpp:1135
msgid "Opening file..."
-msgstr "Sto aprendo il file ..."
+msgstr "Apertura file..."
#: mainwindow.cpp:1108
msgid "Open File"
@@ -3556,7 +3496,7 @@ msgstr "Apri file"
#: document.cpp:192 mainwindow.cpp:1215
msgid "Saving file..."
-msgstr "Sto salvando il file ..."
+msgstr "Salvataggio file..."
#: mainwindow.cpp:1226
msgid ""
@@ -3565,38 +3505,42 @@ msgid ""
"data directory to improve performance?</p><p>Your choice can always be "
"changed in the configuration dialog.</p></qt>"
msgstr ""
+"<qt><p>Stai savando un file con molte immagini, e questo può rallentare molto"
+"Tellico. Vuoi salvare le immagini separatamente nella cartella dati di Tellico "
+"per aumentare le prestazioni del programma?</p><p>Potrai sempre cambiare la tua "
+"scelta nella finestra di configurazione.</p></qt>"
#: mainwindow.cpp:1231
msgid "Save Images Separately"
-msgstr ""
+msgstr "Salva immagini separatamente"
#: mainwindow.cpp:1232
msgid "Save Images in File"
-msgstr ""
+msgstr "Salva immagini nel file"
#: mainwindow.cpp:1265
msgid "Saving file with a new filename..."
-msgstr "Sto salvando il file con un nuovo nome ..."
+msgstr "Salvataggio file con un nuovo nome..."
#: mainwindow.cpp:1303 mainwindow.cpp:1353
msgid "Printing..."
-msgstr "In stampa ..."
+msgstr "In stampa..."
#: mainwindow.cpp:1312
msgid ""
"The collection is currently being filtered to show a limited subset of the "
"entries. Only the visible entries will be printed. Continue?"
msgstr ""
-"Sto filtrando la collezione per mostrare solo un numero ridotto di elementi. "
+"La collezione è attualmente filtrata per mostrare solo un numero limitato di elementi. "
"Solo gli elementi visibili saranno stampati. Continuare?"
#: mainwindow.cpp:1337
msgid "Processing document..."
-msgstr "Sto processando il documento ..."
+msgstr "Analisi documento..."
#: mainwindow.cpp:1360
msgid "Exiting..."
-msgstr "Chiusura ..."
+msgstr "Chiusura in corso..."
#: mainwindow.cpp:1498
#, c-format
@@ -3605,15 +3549,15 @@ msgstr "Elementi totali: %1"
#: mainwindow.cpp:1505
msgid "(%1 filtered; %2 selected)"
-msgstr "(%1 filtrato, %2 selezionato)"
+msgstr "(%1 filtrati, %2 selezionati)"
#: mainwindow.cpp:1508
msgid "(%1 filtered)"
-msgstr "(%1 filtrato)"
+msgstr "(%1 filtrati)"
#: mainwindow.cpp:1511
msgid "(%1 selected)"
-msgstr "(%1 selezionato)"
+msgstr "(%1 selezionati)"
#: mainwindow.cpp:1679
#, c-format
@@ -3631,7 +3575,7 @@ msgstr "Controlla la tua installazione, grazie."
#: mainwindow.cpp:1849
msgid "Importing data..."
-msgstr "Sto importando i dati ..."
+msgstr "Sto importando i dati..."
#: mainwindow.cpp:1858
msgid "Import File"
@@ -3640,11 +3584,11 @@ msgstr "Importa file"
#: mainwindow.cpp:1864
#, fuzzy
msgid "Import Directory"
-msgstr "Importatore"
+msgstr "Importa directory"
#: mainwindow.cpp:1885
msgid "Exporting data..."
-msgstr "Sto esportando i dati ..."
+msgstr "Sto esportando i dati..."
#: mainwindow.cpp:1907
msgid "Export As"
@@ -3665,7 +3609,7 @@ msgstr "Stringa"
#: mainwindow.cpp:1999
#, fuzzy
msgid "Creating citations..."
-msgstr "Sto tagliando ..."
+msgstr "Creazione citazioni..."
#: mainwindow.cpp:2104
msgid "Filters"
@@ -3676,7 +3620,7 @@ msgid ""
"<qt>The <i>Filter View</i> shows the entries which meet certain filter "
"rules.</qt>"
msgstr ""
-"<qt>La <i>vista filtrata</i> mostra gli elementi che soddisfano certi filtri "
+"<qt>La <i>vista filtrata</i> mostra gli elementi che soddisfano i criteri del filtro "
"di ricerca.</qt>"
#: mainwindow.cpp:2121
@@ -3694,13 +3638,15 @@ msgstr ""
#: mainwindow.cpp:2255
#, c-format
msgid "Update entry data from %1"
-msgstr ""
+msgstr "Aggiorna elemento da %1"
#: mainwindow.cpp:2274
msgid ""
"Tellico can only import one file of this type at a time. Only %1 will be "
"imported."
msgstr ""
+"Tellico può importare un solo file alla volta di questo tipo. Solo "
+"%1 verrà importato."
#: filehandler.cpp:193
#, c-format
@@ -3708,8 +3654,7 @@ msgid "Tellico is unable to load the image - %1."
msgstr "Impossibile caricare l'immagine - %1."
#: filehandler.cpp:207
-msgid ""
-"A file named \"%1\" already exists. Are you sure you want to overwrite it?"
+msgid "A file named \"%1\" already exists. Are you sure you want to overwrite it?"
msgstr "Il file \"%1\" esiste già. lo vuoi sovrascrivere?"
#: filehandler.cpp:210
@@ -3738,25 +3683,24 @@ msgstr "Vuoi davvero cancellare questi elementi?"
#: controller.cpp:443
msgid "Delete Multiple Entries"
-msgstr "Cancella diversi elementi"
+msgstr "Cancella più elementi"
#: controller.cpp:626
msgid "&Edit Entries..."
-msgstr "&Modifica elementi ..."
+msgstr "&Modifica elementi..."
#: controller.cpp:627
-#, fuzzy
msgid "D&uplicate Entries"
-msgstr "Duplica elemento"
+msgstr "D&uplica elementi"
#: controller.cpp:628
#, fuzzy
msgid "&Update Entries"
-msgstr "Modifica elementi"
+msgstr "&Aggiorna elementi"
#: controller.cpp:629
msgid "&Delete Entries"
-msgstr "Cance&lla elementi"
+msgstr "&Cancella elementi"
#: controller.cpp:684
msgid ""
@@ -3770,7 +3714,7 @@ msgstr ""
#: calendarhandler.cpp:167
msgid "Default Calendar"
-msgstr "Calendario di default"
+msgstr "Calendario predefinito"
#: calendarhandler.cpp:175
msgid ""
@@ -3817,9 +3761,8 @@ msgid "File to open"
msgstr "File da aprire"
#: main.cpp:42
-#, fuzzy
msgid "Data source scripts"
-msgstr "Opzioni della fonte dei dati"
+msgstr "Script della fonte di dati"
#: main.cpp:44
msgid "Icons"
@@ -3831,17 +3774,16 @@ msgstr "Autore della libreria btparse"
#: main.cpp:48
msgid "Code examples and general inspiration"
-msgstr ""
+msgstr "Esempi di codice e ispirazioni in generale"
#: main.cpp:50
-#, fuzzy
msgid "Author of libcsv library"
-msgstr "Autore della libreria btparse"
+msgstr "Autore della libreria libcsv"
#: main.cpp:52
#, fuzzy
msgid "Author of rtf2html library"
-msgstr "Autore della libreria btparse"
+msgstr "Autore della libreria rtf2html"
#: collectionfieldsdialog.cpp:56
msgid "Collection Fields"
@@ -3865,7 +3807,7 @@ msgstr "Aggiungi un campo alla collezione"
msgid ""
"_: Delete Field\n"
"&Delete"
-msgstr "Cance&lla"
+msgstr "&Cancella"
#: collectionfieldsdialog.cpp:89
msgid "Remove a field from the collection"
@@ -3944,8 +3886,7 @@ msgid "An <i>Image</i> field holds a picture. "
msgstr "Un campo <i>Immagine</i> contiene immagini. "
#: collectionfieldsdialog.cpp:144
-msgid ""
-"A <i>Date</i> field can be used for values with a day, month, and year. "
+msgid "A <i>Date</i> field can be used for values with a day, month, and year. "
msgstr ""
"In un campo <i>Data</i> si possono inserire valori comprensivi di giorno, "
"mese e anno. "
@@ -3997,18 +3938,17 @@ msgstr ""
"sostituiti nella stringa."
#: collectionfieldsdialog.cpp:193
-#, fuzzy
msgid "&Default value:"
-msgstr "Calendario di default"
+msgstr "Predefiniti"
#: collectionfieldsdialog.cpp:198
msgid "<qt>A default value can be set for new entries.</qt>"
-msgstr ""
+msgstr "<qt>Si può inserire un valore di default per i nuovi elementi.</qt>"
#: collectionfieldsdialog.cpp:203
#, fuzzy
msgid "A&llowed values:"
-msgstr "A&mmessi:"
+msgstr "Valori a&mmessi:"
#: collectionfieldsdialog.cpp:208
#, fuzzy
@@ -4018,7 +3958,8 @@ msgid ""
"semi-colon, for example: \"dog; cat; mouse\"</qt>"
msgstr ""
"<qt>Per i campi di tipo <i>Scelta</i>, questi sono gli unici valori ammessi. "
-"Vengono inseriti in una combo box.</qt>"
+"Vengono inseriti in menù a tendina. I valori inseriti devo essere separati da "
+" un punto e vigola, ad esempio: \"gatto; cane; topo\"</qt>"
#: collectionfieldsdialog.cpp:215
msgid "Extended &properties:"
@@ -4026,7 +3967,7 @@ msgstr "Pro&prietà estese:"
#: collectionfieldsdialog.cpp:217
msgid "&Set..."
-msgstr "Impo&sta ..."
+msgstr "Impo&sta..."
#: collectionfieldsdialog.cpp:221
msgid ""
@@ -4054,11 +3995,10 @@ msgstr ""
#: collectionfieldsdialog.cpp:230
msgid "Allow auto-capitalization only"
-msgstr "Permetti il maiuscolo automatico"
+msgstr "Permetti solo il maiuscolo automatico"
#: collectionfieldsdialog.cpp:231
-msgid ""
-"This option allows the field to be capitalized, but not specially formatted."
+msgid "This option allows the field to be capitalized, but not specially formatted."
msgstr ""
"Questa opzione permette che gli elementi del campo vengano automaticamente "
"resi maiuscoli, senza però cambiare la formattazione."
@@ -4113,23 +4053,21 @@ msgid ""
"separated by a semi-colon."
msgstr ""
"Se selezionato, Tellico analizzerà i valori del campo cercando valori "
-"multipli, i valori devono essere diviso da un punto e virgola."
+"multipli, i valori devono essere divisi da un punto e virgola."
#: collectionfieldsdialog.cpp:248
msgid "Allow grouping"
msgstr "Ammetti il raggruppamento"
#: collectionfieldsdialog.cpp:249
-msgid ""
-"If checked, this field may be used to group the entries in the group view."
+msgid "If checked, this field may be used to group the entries in the group view."
msgstr ""
"Se selezionato, il campo può essere usato per ragruppare gli elementi nella "
"vista di gruppo."
#: collectionfieldsdialog.cpp:263
msgid "Revert the selected field's properties to the default values."
-msgstr ""
-"Ripristina le proprietà dei campi selezionati secondo i valori predefiniti."
+msgstr "Ripristina le proprietà dei campi selezionati secondo i valori predefiniti."
#: collectionfieldsdialog.cpp:306
msgid "Modify Fields"
@@ -4151,7 +4089,7 @@ msgstr "Usa i valori modificati"
#: collectionfieldsdialog.cpp:745
msgid "Revert Field Properties"
-msgstr "Inverti le proprietà del campo"
+msgstr "Ripristina valori predefiniti"
#: collectionfieldsdialog.cpp:746
msgid ""
@@ -4163,7 +4101,7 @@ msgstr ""
#: collectionfieldsdialog.cpp:749
msgid "Revert"
-msgstr "Ripristinare"
+msgstr "Ripristina"
#: collectionfieldsdialog.cpp:872
msgid "Extended Field Properties"
@@ -4175,7 +4113,7 @@ msgstr "Esiste già un campo con questo titolo. Inserisci un titolo diverso."
#: collectionfieldsdialog.cpp:909
msgid "<qt>The category may not be empty. Please enter a category.</qt>"
-msgstr "<qt>La categoria non può essere nulla, Inserisci una categoria. </qt>"
+msgstr "<qt>La categoria non può essere vuota. Inserisci una categoria.</qt>"
#: collectionfieldsdialog.cpp:917
msgid ""
@@ -4183,16 +4121,15 @@ msgid ""
"<em>Table</em> or <em>Image</em> field. Please enter a different "
"category.</qt>"
msgstr ""
-"<qt>Un campo potrebbe non essere nella stessa categoria del campo "
-"<em>Paragrafo</em>, <em>Tabella</em> o <em>Immagine</em>. Inserisci un'altra "
-"categoria.</qt>"
+"<qt>Alcuni tipi di campo non possono essere nella stessa categoria dei campi "
+"<em>Paragrafo</em>, <em>Tabella</em> o <em>Immagine</em>. Inseriscili in un'altra categoria.</qt>"
#: collectionfieldsdialog.cpp:925
msgid ""
"A field's title may not be the same as an existing category. Please enter a "
"different title."
msgstr ""
-"Il titolo non un campo non può essere uguale al nome di una categoria. "
+"Il titolo di un campo non può essere uguale al nome di una categoria. "
"Inserisci un altro titolo."
#: collectionfieldsdialog.cpp:937
@@ -4203,19 +4140,18 @@ msgid ""
msgstr ""
"Il valore di un campo di valutazione dev'essere compreso tra 1 e 10 e il "
"limite minimo dev'essere necessariamente inferiore a quello massimo. "
-"Inserisci proprietà alte e basse differenti."
+"Inserisci valori diversi per minimo e massimo."
#: collectionfieldsdialog.cpp:952
-#, fuzzy
msgid "Tables are limited to a maximum of ten columns."
-msgstr "Le tabelle hanno un limite massimo di cinque colonne."
+msgstr "Le tabelle hanno un limite massimo di dieci colonne."
#: document.cpp:158
msgid ""
"The current file has been modified.\n"
"Do you want to save it?"
msgstr ""
-"Il file attuale �stato modificato.\n"
+"Il file attuale è stato modificato.\n"
"Lo vuoi salvare?"
#: document.cpp:160 entryeditdialog.cpp:660
@@ -4224,7 +4160,7 @@ msgstr "Modifiche non salvate"
#: borrowerdialog.cpp:42
msgid "Select Borrower"
-msgstr "Seleziona a chi hai fatto il prestito "
+msgstr "Seleziona la persona a cui hai fatto il prestito"
#: configdialog.cpp:103
msgid "Configure Tellico"
@@ -4243,7 +4179,7 @@ msgstr "Riapri il file all'avvio"
msgid ""
"If checked, the file that was last open will be re-opened at program "
"start-up."
-msgstr "Se selezionato, l'ultimo file aperto dev'essere riaperto all'avvio."
+msgstr "Se selezionato, l'ultimo file usato verrà riaperto all'avvio."
#: configdialog.cpp:207
#, fuzzy
@@ -4259,7 +4195,7 @@ msgstr ""
#: configdialog.cpp:213
#, fuzzy
msgid "Image Storage Options"
-msgstr "Opzioni dell'immagine"
+msgstr "Opzioni di salvataggio delle immagini"
#: configdialog.cpp:214
#, fuzzy
@@ -4268,11 +4204,11 @@ msgstr "Includi immagini nell'archivio"
#: configdialog.cpp:215
msgid "Store images in common application directory"
-msgstr ""
+msgstr "Salva le immagini nella cartella dell'apllicazione"
#: configdialog.cpp:216
msgid "Store images in directory relative to data file"
-msgstr ""
+msgstr "Salva le immagini in una cartella relativa al file della collezione"
#: configdialog.cpp:217
msgid ""
@@ -4280,20 +4216,21 @@ msgid ""
"slowly, stored in the Tellico application directory, or stored in a "
"directory in the same location as the data file."
msgstr ""
+"Le immagini possono essere salvate nel file della collezione, con la possibilità "
+"di rallentare l'esecuzione del programma, oppure nella cartella di Tellico o in "
+"una cartella nello stesso percorso del file dati."
#: configdialog.cpp:224 configdialog.cpp:299
msgid "Formatting Options"
msgstr "Opzioni di formattazione"
#: configdialog.cpp:227
-#, fuzzy
msgid "Auto capitalize &titles and names"
-msgstr "Maiuscolo automatico in titoli e nomi"
+msgstr "Maiuscolo automatico per titoli e nomi"
#: configdialog.cpp:228
msgid "If checked, titles and names will be automatically capitalized."
-msgstr ""
-"Se selezionato, i titoli e gli autori diventeranno automaticamente maiuscoli."
+msgstr "Se selezionato, titoli e nomi diventeranno automaticamente maiuscoli."
#: configdialog.cpp:232
#, fuzzy
@@ -4302,7 +4239,7 @@ msgstr "Formattazione automatica di titoli e nomi"
#: configdialog.cpp:233 configdialog.cpp:303
msgid "If checked, titles and names will be automatically formatted."
-msgstr "Se selezionato, titoli e nomi verranno ordinati automaticamente."
+msgstr "Se selezionato, titoli e nomi verranno formattati automaticamente."
#: configdialog.cpp:240
#, fuzzy
@@ -4315,8 +4252,8 @@ msgid ""
"<qt>A list of words which should not be capitalized. Multiple values should "
"be separated by a semi-colon.</qt>"
msgstr ""
-"<qt>Una lista di prefissi, separati da punto e virgola, da usare nei "
-"cognomi.</qt>"
+"<qt>Una lista di prefissi, separati da punto e virgola, che non verranno resi "
+"in maiuscolo.</qt>"
#: configdialog.cpp:249
#, fuzzy
@@ -4343,7 +4280,7 @@ msgid ""
"values should be separated by a semi-colon.</qt>"
msgstr ""
"<qt>Una lista di suffissi ,separati da punto e virgola, da usare nei nomi di "
-"persona</qt>"
+"persona.</qt>"
#: configdialog.cpp:268
#, fuzzy
@@ -4372,9 +4309,8 @@ msgid "&Format titles and names"
msgstr "Formatta titoli e nomi"
#: configdialog.cpp:306
-#, fuzzy
msgid "&Print field headers"
-msgstr "Stampa i field headers"
+msgstr "Stampa le intestazioni dei campi"
#: configdialog.cpp:310
msgid "Grouping Options"
@@ -4387,7 +4323,7 @@ msgstr "Raggruppa gli elementi"
#: configdialog.cpp:317
msgid "Image Options"
-msgstr "Opzioni dell'immagine"
+msgstr "Opzioni immagini"
#: configdialog.cpp:323
#, fuzzy
@@ -4411,8 +4347,7 @@ msgstr "Altezza massima delle immagini:"
msgid ""
"The maximum height of the images in the printout. The aspect ration is "
"preserved."
-msgstr ""
-"L'altezza massima delle immagini in stampa. Le proporzioni sono rispettate."
+msgstr "L'altezza massima delle immagini in stampa. Le proporzioni sono rispettate."
#: configdialog.cpp:355
msgid "Templates"
@@ -4432,91 +4367,87 @@ msgid ""
"Select the template to use for the current type of collections. Not all "
"templates will use the font and color settings."
msgstr ""
+"Seleziona il template da usare per questo tipo di collezione. Non tutti "
+"i template hanno impostazioni per font e colori."
#: configdialog.cpp:380
-#, fuzzy
msgid "&Preview..."
-msgstr "&Nuovo ..."
+msgstr "&Anteprima..."
#: configdialog.cpp:381
msgid "Show a preview of the template"
-msgstr ""
+msgstr "Mostra anteprima template"
#: configdialog.cpp:398
-#, fuzzy
msgid "Font Options"
-msgstr "Opzioni di formattazione"
+msgstr "Opzioni carattere"
#: configdialog.cpp:405
-#, fuzzy
msgid "Font:"
-msgstr "Mese"
+msgstr "Carattere:"
#: configdialog.cpp:411
msgid "This font is passed to the template used in the Entry View."
-msgstr ""
+msgstr "Questo font sarà usato nel template per la vista degli elementi."
#: configdialog.cpp:415
#, fuzzy
msgid "Size:"
-msgstr "Autografato"
+msgstr "Dimensione:"
#: configdialog.cpp:425
#, fuzzy
msgid "Color Options"
-msgstr "Opzioni CSV"
+msgstr "Opzioni colore"
#: configdialog.cpp:432
msgid "Background color:"
-msgstr ""
+msgstr "Colore di sfondo:"
#: configdialog.cpp:438
msgid "This color is passed to the template used in the Entry View."
-msgstr ""
+msgstr "Questo colore sarà usato nel template per la vista degli elementi."
#: configdialog.cpp:442
msgid "Text color:"
-msgstr ""
+msgstr "Colore testo:"
#: configdialog.cpp:451
msgid "Highlight color:"
-msgstr ""
+msgstr "Colore evidenziatore"
#: configdialog.cpp:460
msgid "Highlighted text color:"
-msgstr ""
+msgstr "Colore del testo evidenziato"
#: configdialog.cpp:469
#, fuzzy
msgid "Manage Templates"
-msgstr "Template"
+msgstr "Gestisci Template"
#: configdialog.cpp:475
msgid "Install..."
-msgstr ""
+msgstr "Installa..."
#: configdialog.cpp:478
msgid "Click to install a new template directly."
-msgstr ""
+msgstr "Fare click per installare direttamente un nuovo template."
#: configdialog.cpp:481 configdialog.cpp:537
msgid "Download..."
-msgstr ""
+msgstr "Download..."
#: configdialog.cpp:484
-#, fuzzy
msgid "Click to download additional templates via the Internet."
-msgstr ""
-"Clicca per aprire una casella in cui inserire o modificare i valori ISBN."
+msgstr "Fare click per scaricare altri template via internet."
#: configdialog.cpp:487
-#, fuzzy
msgid "Delete..."
-msgstr "Seleziona immagine ..."
+msgstr "Rimuovi..."
#: configdialog.cpp:490
msgid "Click to select and remove installed templates."
-msgstr ""
+msgstr "Fare click per selezionare e rimuovere i template installati."
#: configdialog.cpp:501
msgid "Data Sources"
@@ -4524,7 +4455,7 @@ msgstr "Fonti dei dati"
#: configdialog.cpp:501
msgid "Data Source Options"
-msgstr "Opzioni della fonte dei dati"
+msgstr "Opzioni fonti di dati"
#: configdialog.cpp:506 fetchdialog.cpp:171
msgid "Source"
@@ -4532,72 +4463,71 @@ msgstr "Fonte"
#: configdialog.cpp:517
msgid "Move &Up"
-msgstr ""
+msgstr "Movi &su"
#: configdialog.cpp:519 configdialog.cpp:523
msgid ""
"The order of the data sources sets the order that Tellico uses when entries "
"are automatically updated."
msgstr ""
+"L'ordine delle fonti di dati sarà quello usato da Tellico quando si aggiorna "
+"automaticamente un elemento."
#: configdialog.cpp:521
#, fuzzy
msgid "Move &Down"
-msgstr "Rimuo&vi"
+msgstr "Muovi &giù"
#: configdialog.cpp:528
msgid "&New..."
-msgstr "&Nuovo ..."
+msgstr "&Nuovo..."
#: configdialog.cpp:530
msgid "Click to add a new data source."
-msgstr ""
+msgstr "Aggiunge una nuova fonte di dati."
#: configdialog.cpp:531
msgid "&Modify..."
-msgstr "&Modifica ..."
+msgstr "&Modifica..."
#: configdialog.cpp:533
-#, fuzzy
msgid "Click to modify the selected data source."
-msgstr "Controlla gli elementi selezionati"
+msgstr "Modifica la fonte selezionata."
#: configdialog.cpp:536
-#, fuzzy
msgid "Click to delete the selected data source."
-msgstr "Cancella gli elementi selezionati"
+msgstr "Cancella la fonte selezionata"
#: configdialog.cpp:539
#, fuzzy
msgid "Click to download additional data sources via the Internet."
-msgstr ""
-"Clicca per aprire una casella in cui inserire o modificare i valori ISBN."
+msgstr "Scarica ulteriori fonti da internet"
#: configdialog.cpp:1016
msgid "*.tar.gz *.tgz|Template Packages (*.tar.gz)"
-msgstr ""
+msgstr "*.tar.gz *.tgz|Pacchetti template (*.tar.gz)"
#: configdialog.cpp:1049
#, fuzzy
msgid "Delete Template"
-msgstr "Cancella campo"
+msgstr "Cancella template"
#: configdialog.cpp:1050
#, fuzzy
msgid "Select template to delete:"
-msgstr "Seleziona il database per la ricerca"
+msgstr "Seleziona il template da cancellare"
#: loanview.cpp:33 loanview.cpp:91 xslt.cpp:26
msgid "Borrower"
-msgstr "A chi hai fatto il prestito "
+msgstr "A chi hai fatto il prestito"
#: loanview.cpp:74
msgid "Check-in"
-msgstr "Registrazione"
+msgstr "Riconsegna"
#: loanview.cpp:76
msgid "Modify Loan..."
-msgstr "Modifica prestito ..."
+msgstr "Modifica prestito..."
#: loanview.cpp:93
msgid "Borrower (Sort by Count)"
@@ -4613,7 +4543,7 @@ msgstr "Collezione di libri"
#: collectionfactory.cpp:126
msgid "Comic Book Collection"
-msgstr "Collezione difumetti"
+msgstr "Collezione di fumetti"
#: collectionfactory.cpp:127
msgid "Video Collection"
@@ -4629,7 +4559,7 @@ msgstr "Collezione di monete"
#: collectionfactory.cpp:130
msgid "Stamp Collection"
-msgstr "Collezione di cartoline"
+msgstr "Collezione di francobolli"
#: collectionfactory.cpp:131
msgid "Wine Collection"
@@ -4637,7 +4567,7 @@ msgstr "Collezione di vini"
#: collectionfactory.cpp:132
msgid "Card Collection"
-msgstr "Collection di carte"
+msgstr "Collezione di carte"
#: collectionfactory.cpp:133
msgid "Game Collection"
@@ -4645,12 +4575,12 @@ msgstr "Collezione di giochi"
#: collectionfactory.cpp:134
msgid "File Catalog"
-msgstr ""
+msgstr "Catalogo di file"
#: collectionfactory.cpp:135
#, fuzzy
msgid "Board Game Collection"
-msgstr "Collezione di giochi"
+msgstr "Collezione di giochi da tavolo"
#: collectionfactory.cpp:136
msgid "Custom Collection"
@@ -4661,8 +4591,8 @@ msgid ""
"<qt>The <i>Entry View</i> shows a formatted view of the entry's "
"contents.</qt>"
msgstr ""
-"<qt>La <i>vista per elementi</i> riordina la vista secondo i contenuti degli "
-"elementi.</qt>"
+"<qt>La <i>vista per elementi</i> mostra il contenuto degli "
+"elementi formattato secondo il template scelto.</qt>"
#: viewstack.cpp:31
msgid ""
@@ -4691,7 +4621,7 @@ msgid ""
"according to their format type."
msgstr ""
"Se selezionato, i valori nei campi saranno automaticamente formattati "
-"secondo il tipo di formattazione."
+"secondo il tipo di formato."
#: exportdialog.cpp:59
msgid "Export selected entries only"
@@ -4732,18 +4662,17 @@ msgstr "&Stop"
#: fetchdialog.cpp:86
msgid "Internet Search"
-msgstr "Ricerca Internet"
+msgstr "Ricerca su Internet"
#: fetchdialog.cpp:94
-#, fuzzy
msgid "Search Query"
-msgstr "Search Query"
+msgstr "Query di ricerca"
#: fetchdialog.cpp:100
msgid ""
"_: Start the search\n"
"S&earch:"
-msgstr "Ric&erca:"
+msgstr "C&erca:"
#: fetchdialog.cpp:104
msgid "Enter a search value. An ISBN search must include the full ISBN."
@@ -4762,23 +4691,21 @@ msgstr "Clicca per cominciare o fermare la ricerca"
#: fetchdialog.cpp:134
#, fuzzy
msgid "&Multiple ISBN/UPC search"
-msgstr "Ricerca di ISBN &Multipli"
+msgstr "Ricerca di ISBN/UPC &Multipli"
#: fetchdialog.cpp:135
#, fuzzy
msgid "Check this box to search for multiple ISBN or UPC values."
-msgstr "Seleziona questa casella per ricercare diversi valori ISBN."
+msgstr "Seleziona questa casella per ricercare diversi valori ISBN o UPC."
#: fetchdialog.cpp:138
#, fuzzy
msgid "Edit List..."
-msgstr "Modifica la lista degli &ISBN ..."
+msgstr "Modifica lista..."
#: fetchdialog.cpp:140
-msgid ""
-"Click to open a text edit box for entering or editing multiple ISBN values."
-msgstr ""
-"Clicca per aprire una casella in cui inserire o modificare i valori ISBN."
+msgid "Click to open a text edit box for entering or editing multiple ISBN values."
+msgstr "Clicca per aprire una casella in cui inserire o modificare i valori ISBN."
#: fetchdialog.cpp:146
msgid "Search s&ource:"
@@ -4802,7 +4729,7 @@ msgid ""
"selecting it in the list above"
msgstr ""
"Un elemento può essere visualizzato qui prima di aggiungerlo alla "
-"colelzione attuale selezionando dalla lista sopra. "
+"collezione attuale selezionandolo dalla lista sopra."
#: fetchdialog.cpp:192
msgid "&Add Entry"
@@ -4810,16 +4737,16 @@ msgstr "&Aggiungi elemento"
#: fetchdialog.cpp:196
msgid "Add the selected entry to the current collection"
-msgstr "Aggiungi l'elemento selezionato alla collezione attuale"
+msgstr "Aggiungi l'elemento selezionato alla collezione."
#: fetchdialog.cpp:198
#, fuzzy
msgid "Get More Results"
-msgstr "Seleziona il risultato IMDB"
+msgstr "Ottieni più risultati"
#: fetchdialog.cpp:201
msgid "Fetch more results from the current data source"
-msgstr ""
+msgstr "Ottieni più risultati dalla fonte attuale"
#: fetchdialog.cpp:205
msgid "Clear all search fields and results"
@@ -4827,11 +4754,11 @@ msgstr "Pulisci tutti i campi di ricerca e i risultati"
#: fetchdialog.cpp:298
msgid "Cancelling the search..."
-msgstr "Ripulisco la ricerca ..."
+msgstr "Ripulisco la ricerca..."
#: fetchdialog.cpp:313 fetchdialog.cpp:472
msgid "Searching..."
-msgstr "Ricerca in corso ..."
+msgstr "Ricerca in corso..."
#: fetchdialog.cpp:368
msgid "The search returned no items."
@@ -4842,50 +4769,45 @@ msgstr "La ricerca non ha dato risultati."
msgid ""
"_n: The search returned 1 item.\n"
"The search returned %n items."
-msgstr ""
-"La ricerca ha trovato 1 oggetto.\n"
-"La ricerca ha trovato %n oggetti."
+msgstr "La ricerca ha trovato %n oggetti."
#: fetchdialog.cpp:412
-#, fuzzy
msgid "No results were found for the following ISBN values:"
-msgstr "<qt>Non ho trovato voci per i seguenti valori ISBN:</qt>"
+msgstr "Non ho trovato voci per i seguenti valori ISBN:"
#: fetchdialog.cpp:443 fetchdialog.cpp:495
msgid "Fetching %1..."
-msgstr "Passo in rassegna %1 ..."
+msgstr "Passo in rassegna %1..."
#: fetchdialog.cpp:528 fetchdialog.cpp:708
msgid "No Internet sources are available for your current collection type."
-msgstr ""
-"Non sono disponibili su Internet fonti adatte a questo tipo di collezione."
+msgstr "Non sono disponibili su Internet fonti adatte a questo tipo di collezione."
#: fetchdialog.cpp:594
#, fuzzy
msgid "Edit ISBN/UPC Values"
-msgstr "Modifica i valori ISBN"
+msgstr "Modifica i valori ISBN/UPC"
#: fetchdialog.cpp:598
-#, fuzzy
msgid "<qt>Enter the ISBN or UPC values, one per line.</qt>"
-msgstr "<qt>Inserisci i valori ISBN, uno per riga.</qt>"
+msgstr "<qt>Inserisci i valori ISBN. Uno per riga.</qt>"
#: fetchdialog.cpp:604
msgid "&Load From File..."
-msgstr "&Carica da file ..."
+msgstr "&Carica da file..."
#: fetchdialog.cpp:605
#, fuzzy
msgid "<qt>Load the list from a text file.</qt>"
-msgstr "<qt>Importa la lista dei numeri ISBN da un file di testo.</qt>"
+msgstr "<qt>Importa lista da un file di testo.</qt>"
#: fetchdialog.cpp:624
msgid ""
"<qt>An ISBN search can contain a maximum of 100 ISBN values. Only the first "
"100 values in your list will be used.</qt>"
msgstr ""
-"<qt>Una ricerca ISBN può contenere al massimo 100 valori ISBN.Verranno "
-"utilizzat solo i primi cento numeri della tua lista.</qt>"
+"<qt>Una ricerca ISBN può contenere al massimo 100 valori ISBN. Solo i primi "
+"cento numeri della tua lista verranno utilizzati.</qt>"
#: entryeditdialog.cpp:51 entryeditdialog.cpp:382 entryeditdialog.cpp:406
#: entryeditdialog.cpp:512
@@ -4902,14 +4824,12 @@ msgid "Sa&ve Entry"
msgstr "Sal&va elemento"
#: entryeditdialog.cpp:77
-#, fuzzy
msgid "Go to the previous entry in the collection"
-msgstr "Trova la pecedente corrispondenza nella collezione"
+msgstr "Vai al precedente elemento della collezione"
#: entryeditdialog.cpp:82
-#, fuzzy
msgid "Go to the next entry in the collection"
-msgstr "Seleziona tutti i campi della collezione"
+msgstr "Vai all'elemento successivo della collezione"
#: entryeditdialog.cpp:315
msgid "Do you really want to modify these entries?"
@@ -4917,11 +4837,11 @@ msgstr "Vuoi davvero modificare questi elementi?"
#: entryeditdialog.cpp:317
msgid "Modify Multiple Entries"
-msgstr "Modifica vari elementi"
+msgstr "Modifica più elementi"
#: entryeditdialog.cpp:359
msgid "A value is required for the following fields. Do you want to continue?"
-msgstr ""
+msgstr "È necessario inserire un valore per i seguenti campi. Vuoi continuare?"
#: entryeditdialog.cpp:456
msgid "Edit Entries"
@@ -4960,15 +4880,14 @@ msgid "Select a report template and click <em>Generate</em>."
msgstr "Seleziona un template per il resoconto e clicca su <em>Genera</em>."
#: reportdialog.cpp:108
-msgid ""
-"Some reports may take several seconds to generate for large collections."
+msgid "Some reports may take several seconds to generate for large collections."
msgstr ""
"Per generare i resoconti di grandi collezioni possono essere necessari "
"diversi secondi."
#: tellico_kernel.cpp:285
msgid "Do you really want to delete this filter?"
-msgstr "Vuoi davvero cancellare questo elemento?"
+msgstr "Vuoi davvero cancellare questo filtro?"
#: tellico_kernel.cpp:287
msgid "Delete Filter?"
@@ -4981,34 +4900,34 @@ msgstr "Nuovo nome della collezione:"
#: tellico_kernel.cpp:377
#, fuzzy
msgid "Entry 1"
-msgstr "Elemento"
+msgstr "Elemento 1"
#: tellico_kernel.cpp:378
#, fuzzy
msgid "Entry 2"
-msgstr "Elemento"
+msgstr "Elemento 2"
#: tellico_kernel.cpp:387
msgid "Conflicting values for %1 were found while merging entries."
-msgstr ""
+msgstr "I due elementi hanno valori diversi per %1 "
#: tellico_kernel.cpp:393
msgid "Please choose which value to keep."
-msgstr ""
+msgstr "Scegli quale conservare."
#: entrymerger.cpp:33 tellico_kernel.cpp:398
#, fuzzy
msgid "Merge Entries"
-msgstr "Cancella elementi"
+msgstr "Fondi elementi"
#: tellico_kernel.cpp:399 tellico_kernel.cpp:400
#, c-format
msgid "Select value from %1"
-msgstr ""
+msgstr "Seleziona valore da %1"
#: entryview.cpp:186
msgid "Tellico is unable to locate the default entry stylesheet."
-msgstr "Tellico non è in grado di trovare il foglio di stile di default."
+msgstr "Tellico non riesce a trovare il foglio di stile predefinito."
#: rc.cpp:6
#, no-c-format
@@ -5023,29 +4942,32 @@ msgstr "&Collezione"
#: rc.cpp:24
#, no-c-format
msgid "Collection Toolbar"
-msgstr "Barra degli strumenti-collezione"
+msgstr "Barra degli strumenti Collezione"
#: _translatorinfo.cpp:1
msgid ""
"_: NAME OF TRANSLATORS\n"
"Your names"
-msgstr "Lorenzo Novaro"
+msgstr ""
+"Lorenzo Novaro"
+"Valerio Ricci"
#: _translatorinfo.cpp:3
msgid ""
"_: EMAIL OF TRANSLATORS\n"
"Your emails"
+msgstr ""
#: entrymerger.cpp:35
#, fuzzy
msgid "Merging entries..."
-msgstr "&Modifica elementi ..."
+msgstr "&Fusione elementi..."
#: entrymerger.cpp:49
-#, fuzzy
msgid "Total merged/scanned entries: %1/%2"
-msgstr "Elementi totali: %1"
+msgstr "Elementi Fusi/Scansionati: %1/%2"
#: tips.cpp:3
msgid ""
@@ -5055,8 +4977,7 @@ msgid ""
"<p>Any other field which allows multiple values should be entered the\n"
"same way, with a semi-colon (;) separating each value.</p>\n"
msgstr ""
-"<p>... che se un libro ha più di un autore, dovresti separare i diversi "
-"nomi \n"
+"<p>... che se un libro ha più di un autore, dovresti separare i diversi nomi \n"
"usando un punto e virgola, cosicché Tellico possa suddividerli \n"
"ed usarli separatamente.</p>\n"
"<p>Qualsiasi campo che ammetta valori multipli riconoscerà i diversi \n"
@@ -5102,7 +5023,7 @@ msgstr ""
"il pulsante <em>Verifica tutti i criteri seguenti</em>, imposta la prima\n"
"regola così: \"Genere\" \"contiene\" \"Fantascienza\" (non usare le "
"virgolette)\n"
-"e la seconda regola così: \"Letto\" \"non contiene\" |\"vero\"\n"
+"e la seconda regola così: \"Letto\" \"non contiene\" |\"true\"\n"
"(anche qui non usare le virgolette).</p>\n"
#: tips.cpp:33
@@ -5112,7 +5033,7 @@ msgid ""
"<p>To show only books which are by Weber or Bujold, for example, then\n"
"type \"weber|bujold\" (no quotes) in the filter box.</p>\n"
msgstr ""
-"<p>.. che se nel filtro rapido inserisci un carattere diverso da una "
+"<p>... che se nel filtro rapido inserisci un carattere diverso da una "
"lettera, il testo\n"
"verrà interpretato come una espressione regolare (regexp).</p>\n"
"<p>Per mostrare solo i libri di Vidal o Weber, per esempio, digita \n"
@@ -5212,6 +5133,15 @@ msgid ""
"types by respecting proper sorting at the same time. Consider for example\n"
"a number field followed by a text subfield with entries 3b, 14a.</p>\n"
msgstr ""
+"<p>...che puoi usare i campi dipendenti per combinare più campi singoli\n"
+"in un unico campo derivato. Per fare ciò seleziona il campo dipendente e usa\n"
+"una descrizione del tipo \"%{campoa}%{campob}\" in cui tra le graffe %{ } "
+"va indicato il nome del campo nella collezione. Il risultato sarà un campo derivato "
+"che contiene i valori di entrambi i campi singoli.\n"
+"Questa operazione può tornare utile per raggruppare più valori in un unico\n"
+"campo, per un raggruppamento migliore, e per combinare campi di tipi \n"
+"diversi senza influire sull'ordinamento. Ad esempio un campo numerico \n"
+"seguito da un sottocampo testuale.</p>\n"
#: xslt.cpp:2
msgid ""
@@ -5222,7 +5152,7 @@ msgstr "Album"
#: xslt.cpp:3
#, fuzzy
msgid "This template is meant for music collections only."
-msgstr "Crea una nuova collezione di musica"
+msgstr "Questo template è solo per collezioni di musica."
#: xslt.cpp:5
#, fuzzy
@@ -5256,7 +5186,7 @@ msgstr "Video"
#: xslt.cpp:14 xslt.cpp:43
#, fuzzy
msgid "This template is meant for video collections only."
-msgstr "Crea una nuova collezione di video"
+msgstr "Questo template è solo per collezioni di video."
#: xslt.cpp:16
msgid ""
@@ -5279,7 +5209,7 @@ msgstr "Numero totale di elementi:"
#: xslt.cpp:20 xslt.cpp:32 xslt.cpp:46
#, fuzzy
msgid "Generated by Tellico"
-msgstr "Generato da"
+msgstr "Generato da Tellico"
#: xslt.cpp:21
msgid "Distinct values: "
@@ -5303,7 +5233,7 @@ msgstr "Data di prestito"
#: xslt.cpp:28 xslt.cpp:31
msgid "Note"
-msgstr "Nota"
+msgstr "Note"
#: xslt.cpp:30
msgid "Due Date"
@@ -5338,7 +5268,7 @@ msgstr "Vista a colonne"
msgid ""
"_: Tri-Column XSL Template\n"
"Tri-Column"
-msgstr "Vista a colonne"
+msgstr "Tre colonne"
#: xslt.cpp:44
#, fuzzy
@@ -5347,681 +5277,62 @@ msgstr "Cer&ca"
#: z3950.cpp:4
msgid "The British Library"
-msgstr ""
+msgstr "The British Library"
#: z3950.cpp:6
#, fuzzy
msgid "Sudoc (France)"
-msgstr "Amazon (Francia)"
+msgstr "Sudoc (Francia)"
#: z3950.cpp:8
msgid "BIBSYS (Norway)"
-msgstr ""
+msgstr "BIBSYS (Norvegia)"
#: z3950.cpp:10
msgid "Italian National Library"
-msgstr ""
+msgstr "Biblioteca Nazionale Italiana"
#: z3950.cpp:12
msgid "Portuguese National Library"
-msgstr ""
+msgstr "Biblioteca Nazionale Portoghese"
#: z3950.cpp:14
msgid "National Library of Poland"
-msgstr ""
+msgstr "Biblioteca Nazionale Polacca"
#: z3950.cpp:16
msgid "National Library of Canada"
-msgstr ""
+msgstr "Biblioteca Nazionale del Canada"
#: z3950.cpp:18
msgid "Israel Union List"
-msgstr ""
+msgstr "Israel Union List"
#: z3950.cpp:20
msgid "National Library of Australia"
-msgstr ""
+msgstr "Biblioteca Nazionale Australiana"
#: z3950.cpp:22
msgid "National Library of Lithuania"
-msgstr ""
+msgstr "Biblioteca Nazionale Lituana"
#: z3950.cpp:24
msgid "Copac (UK and Ireland)"
-msgstr ""
+msgstr "Copac (Regno Unito e Irlanda)"
#: scripts.cpp:2
msgid "BoardGameGeek"
-msgstr ""
+msgstr "BoardGameGeek"
#: scripts.cpp:4
msgid "Dark Horse Comics"
-msgstr ""
+msgstr "Dark Horse Comics"
#: scripts.cpp:6
msgid "Allocine.fr"
-msgstr ""
+msgstr "Allocine.fr"
#: scripts.cpp:8
msgid "Spanish Ministry of Culture"
-msgstr ""
-
-#, fuzzy
-#~ msgid "CrossRef"
-#~ msgstr "Riferimento incrociato"
-
-#, fuzzy
-#~ msgid "MODS"
-#~ msgstr "Mac OS"
-
-#~ msgid "GCstar"
-#~ msgstr "GCstar"
-
-#, fuzzy
-#~ msgid "Griffith"
-#~ msgstr "Regalo"
-
-#, fuzzy
-#~ msgid "Referencer"
-#~ msgstr "Riferimento incrociato"
-
-#~ msgid "Comics"
-#~ msgstr "Fumetti"
-
-#~ msgid "Stamps"
-#~ msgstr "Francobolli"
-
-#~ msgid "Coins"
-#~ msgstr "Monete"
-
-#~ msgid "Books"
-#~ msgstr "Libri"
-
-#~ msgid "Wines"
-#~ msgstr "Vini"
-
-#~ msgid "Videos"
-#~ msgstr "Video"
-
-#~ msgid "Games"
-#~ msgstr "Giochi"
-
-#~ msgid "Cards"
-#~ msgstr "Carte"
-
-#~ msgid "Entries"
-#~ msgstr "Elementi"
-
-#~ msgid "Albums"
-#~ msgstr "Album"
-
-#, fuzzy
-#~ msgid "Copac"
-#~ msgstr "Virgola"
-
-#~ msgid "Tellico"
-#~ msgstr "Tellico"
-
-#~ msgid "&Copy Entry"
-#~ msgstr "&Copia elemento"
-
-#~ msgid "&Copy Entries"
-#~ msgstr "&Copia elementi"
-
-#, fuzzy
-#~ msgid "<qt>Multiple records were found to match the CD.</qt>"
-#~ msgstr "<qt>Ho trovato diversi elementi da confrontare con il CD.</qt>"
-
-#~ msgid "Remo&ve"
-#~ msgstr "Rimuo&vi"
-
-#~ msgid "Scanning CDDB cache files..."
-#~ msgstr "Scansione dei file di cache CDDB ..."
-
-#~ msgid "Collection &type: "
-#~ msgstr "&tipo di collezione: "
-
-#~ msgid "Save Entries"
-#~ msgstr "Salva elementi"
-
-#~ msgid ""
-#~ "_: Save (Entry Title)\n"
-#~ "Save %1"
-#~ msgstr "Salva %1"
-
-#~ msgid ""
-#~ "Tellico currently supports five source types: Amazon.com, IMDB, z39.50, "
-#~ "Entrez, and external applications."
-#~ msgstr ""
-#~ "Tellico attualmente supporta cinque tipi di fonti: Amazon.com, IMDB, z39.50, "
-#~ "Entrez e l'uso di programmi esterni."
-
-#~ msgid "Enable/disable the statusbar"
-#~ msgstr "Abilita/disabilita la barra di stato"
-
-#~ msgid ""
-#~ "The password will be saved in plain text in the Tellico configuration file."
-#~ msgstr ""
-#~ "La password verrà salvata in chiaro nel file di configurazione di Tellico."
-
-#, fuzzy
-#~ msgid "Reading files..."
-#~ msgstr "Sto salvando il file ..."
-
-#~ msgid ""
-#~ "<p>...that you can rename a collection by right-clicking on\n"
-#~ "the top collection item in the left column.</p>\n"
-#~ msgstr ""
-#~ "<p>... che puoi rinominare una collezione clickando con il tasto destro sul "
-#~ "primo elemento\n"
-#~ " in alto nella colonna di sinistra.</p>\n"
-
-#, fuzzy
-#~ msgid "S&earch:"
-#~ msgstr "Cerca in:"
-
-#, fuzzy
-#~ msgid "Group by:"
-#~ msgstr "Raggruppa per:"
-
-#, fuzzy
-#~ msgid "Quick filter:"
-#~ msgstr "Filtro rapido:"
-
-#~ msgid "Filter Entry"
-#~ msgstr "Filtra elemento"
-
-#, fuzzy
-#~ msgid "Tellico: %1 is due to return %2"
-#~ msgstr "Impossibile leggere il file - %1."
-
-#~ msgid "Find Text"
-#~ msgstr "Trova testo"
-
-#~ msgid "&Find"
-#~ msgstr "&Trova"
-
-#, fuzzy
-#~ msgid "Find"
-#~ msgstr "&Trova"
-
-#~ msgid "&Text to find:"
-#~ msgstr "Testo da trovare:"
-
-#~ msgid "The search string"
-#~ msgstr "La stringa da ricercare"
-
-#~ msgid "As regular e&xpression"
-#~ msgstr "Come Espressione &Regolare"
-
-#~ msgid "If checked, the search string is used as a regular expression."
-#~ msgstr ""
-#~ "Se selezionato, la stringa inserita viene cercata come espressione regolare."
-
-#, fuzzy
-#~ msgid "&Edit Regular Expression..."
-#~ msgstr "&Edita espressione regolare ..."
-
-#, fuzzy
-#~ msgid "Field"
-#~ msgstr "Campi"
-
-#~ msgid "Search in:"
-#~ msgstr "Cerca in:"
-
-#~ msgid "Select which field should be searched."
-#~ msgstr "Seleziona in quale campo eseguire la ricerca."
-
-#~ msgid "C&ase sensitive"
-#~ msgstr "C&ase sensitive"
-
-#~ msgid "If checked, the search is case-sensitive."
-#~ msgstr "Se selezionato, la ricerca distingue tra maiuscole e minuscole."
-
-#~ msgid "Find &backwards"
-#~ msgstr "Trova &Indietro"
-
-#~ msgid "If checked, the document is searched in reverse."
-#~ msgstr ""
-#~ "Se selezionato, la ricerca procede dalla fine all'inizio del documento."
-
-#~ msgid "&Whole words only"
-#~ msgstr "S&olo parole intere"
-
-#~ msgid "If checked, the search is limited to whole words."
-#~ msgstr "Se selezionato, la ricerca si limita alle parole intere."
-
-#~ msgid "All Fields"
-#~ msgstr "Tutti i campi"
-
-#~ msgid "Invalid regular expression."
-#~ msgstr "Espressione regolare non valida."
-
-#~ msgid "5 - Best"
-#~ msgstr "5 - Bellissimo"
-
-#~ msgid "4 - Good"
-#~ msgstr "4 - Bello"
-
-#~ msgid "3 - Neutral"
-#~ msgstr "3 - Insomma..."
-
-#~ msgid "2 - Bad"
-#~ msgstr "2 - Brutto"
-
-#~ msgid "1 - Worst"
-#~ msgstr "1 - Pessimo"
-
-#~ msgid "Table (2 Columns)"
-#~ msgstr "Tabella (2 Colonne)"
-
-#, fuzzy
-#~ msgid "Delete Entry?"
-#~ msgstr "&Cancella Elemento"
-
-#~ msgid "Warning!"
-#~ msgstr "Attenzione!"
-
-#~ msgid "(grouped by %1; sorted by %2)"
-#~ msgstr "(Raggruppa per %1; ordinato per %2)"
-
-#~ msgid "(sorted by %1)"
-#~ msgstr "(ordina per %1)"
-
-#~ msgid ""
-#~ "<qt><p>Do you really want to delete the <em>%1</em> field? This action "
-#~ "occurs immediately and can not be undone!</p></qt>"
-#~ msgstr ""
-#~ "<qt><p>Vuoi davvero cancellare il campo <em>%1</em>? Questa azione non può "
-#~ "essere annullata!</p></qt>"
-
-#~ msgid "Sort by Group, Ascending"
-#~ msgstr "Ordine ascendente per gruppo, "
-
-#~ msgid "Sort by Group, Descending"
-#~ msgstr "Ordine discendente per gruppo"
-
-#~ msgid "Sort by Count, Ascending"
-#~ msgstr "Ordine ascendente per conteggio"
-
-#~ msgid "Sort by Count, Descending"
-#~ msgstr "Ordine discendente per conteggio"
-
-#~ msgid "Search the collection"
-#~ msgstr "Ricerca la collezione"
-
-#~ msgid "Find next match in the collection"
-#~ msgstr "Trova la prossima corrispondenza nella collezione"
-
-#, fuzzy
-#~ msgid "Reports"
-#~ msgstr "&Esporta"
-
-#~ msgid "Show number of items in group"
-#~ msgstr "Mostra il numero degli oggetti nel gruppo"
-
-#~ msgid ""
-#~ "If checked, the number of items in the group will be appended to the group "
-#~ "name."
-#~ msgstr ""
-#~ "Se selezionato, il numero di oggetti nel gruppo viene allegato al nome del "
-#~ "gruppo."
-
-#~ msgid "Search string '%1' not found."
-#~ msgstr "Stringa '%1' non trovata."
-
-#~ msgid "Video"
-#~ msgstr "Video"
-
-#, fuzzy
-#~ msgid "*.bc .tc|Tellico files (*.tc)"
-#~ msgstr "*.tc *.bc|File di Tellico (*.tc)"
-
-#~ msgid "&From Beginning"
-#~ msgstr "&Dall'inizio"
-
-#~ msgid "If checked, the document is searched from the beginning."
-#~ msgstr "Se selezionato, la ricerca comincia dall'inizio del documento."
-
-#~ msgid "Path to LyX server:"
-#~ msgstr "Percorso per il server LyX:"
-
-#~ msgid ""
-#~ "<qt>The location of the LyX server for citing bibliographic entries. Also "
-#~ "used by other applications such as Kile or Pybliographer. Do not include the "
-#~ "trailing .in suffix.</qt>"
-#~ msgstr ""
-#~ "<qt>L'ubicazione del server LyX per citare elementi bibliografici. È anche "
-#~ "usata da altre applicazioni come Kile o Pybliographer. Non includere il "
-#~ "suffisso .in</qt>"
-
-#, fuzzy
-#~ msgid "<qt>Tellico was unable to open the CD-ROM device - <i>%1</i>.</qt>"
-#~ msgstr ""
-#~ "<qt>Tellico non riesce a scrivere sulla server pipe in <b>%1</b>.</qt>"
-
-#~ msgid "Do you really want to modify these books?"
-#~ msgstr "Vuoi davvero modificare questi libri?"
-
-#~ msgid "*.ogg|Ogg files (*.ogg)"
-#~ msgstr "*.ogg|file Ogg (*.ogg)"
-
-#~ msgid ""
-#~ "<qt>The type of the field determines what values may be used. <i>Simple "
-#~ "Text</i> is used for most fields. <i>Paragraph</i> is for large text blocks. "
-#~ "<i>Choice</i> limits the field to certain values. <i>Checkbox</i> is for a "
-#~ "simple yes/no value. <i>Number</i> indicates that the field contains a "
-#~ "numerical value. <i>URL</i> is for fields which refer to URLs, including "
-#~ "references to other files. <i>Table</i>s may be a single or double column of "
-#~ "values, while <i>Read Only</i> is for internal values, possibly useful for "
-#~ "import and export. A <i>Dependent</i> field depends on the values of other "
-#~ "fields, and is formatted according to the field description. An <i>Image</i> "
-#~ "holds a picture.</qt>"
-#~ msgstr ""
-#~ "<qt>Il tipo di campo determina quali valori possono esservi inseriti. "
-#~ "<i>Testo semplice</i> è utilizzato per la gran parte dei campi. "
-#~ "<i>Paragrafo</i> è utilizzato per ampi blocchi di testo. <i>Scelta</i> "
-#~ "Permette di inserire nel campo solo alcuni valori. <i>Checkbox</i> permette "
-#~ "di inserire solo sì o no. <i>Numero</i> indica che il campo può contenere "
-#~ "solo un valore numerico. <i>URL</i> serve per i campi che contengono "
-#~ "riferimenti ipertestuali, inclusi riferimenti ad altri file. <i>Tabella</i> "
-#~ "può essere uina colonna o una doppia colonna di valori, mentre <i>Sola "
-#~ "lettura</i> serve per valori interni, utili per l'importazione e "
-#~ "l'esportazione di file. Un campo <i>Dipendente</i> dipende dai valori di "
-#~ "altri campi ed è creato secondo la descrizione del campo. Un campo "
-#~ "<i>Immagine</i> contiene una figura</qt>"
-
-#, fuzzy
-#~ msgid "Export images"
-#~ msgstr "Esporta immagini"
-
-#~ msgid "List"
-#~ msgstr "Lista"
-
-#~ msgid "(Requires restart)"
-#~ msgstr "(�necessario riavviare il programma)"
-
-#~ msgid ""
-#~ "A comma-separated list of suffixes which might be used in personal names."
-#~ msgstr ""
-#~ "Un elenco di parole separate da virgole da usare nei nomi di persona."
-
-#~ msgid "A comma-separated list of prefixes which might be used in surnames."
-#~ msgstr "Un elenco di parole separate da virgole da usare nei cognomi."
-
-#~ msgid "Enable/disable the toolbar"
-#~ msgstr "Abilita/disabilita la barra degli strumenti"
-
-#~ msgid "Show Co&llection ToolBar"
-#~ msgstr "Mostra la barra degli strumenti-co&llezione"
-
-#~ msgid "Enable/disable the collection toolbar"
-#~ msgstr "Abilita/disabilita la barra degli strumenti-collezione"
-
-#~ msgid "Tip of the &Day"
-#~ msgstr "Consiglio &del giorno"
-
-#~ msgid "Show the \"Tip of the Day\" dialog..."
-#~ msgstr "Mostra la finestra del \"consiglio del giorno\" ..."
-
-#~ msgid "*.bcz|Tellico files(*.bcz)"
-#~ msgstr "*.bcz|File di Tellico (*.bcz)"
-
-#, fuzzy
-#~ msgid "Good"
-#~ msgstr "4 - Bello"
-
-#~ msgid ""
-#~ "An article is from a journal or magazine. A book has an explicit publisher, "
-#~ "while a booklet does not."
-#~ msgstr ""
-#~ "Un articolo è parte di una rivista o di un giornale. Un libro riporta "
-#~ "l'indicazione di un editore, mentre un libretto no."
-
-#, fuzzy
-#~ msgid "Mint"
-#~ msgstr "Mese"
-
-#, fuzzy
-#~ msgid "Fine"
-#~ msgstr "Trova:"
-
-#, fuzzy
-#~ msgid "New Entry"
-#~ msgstr "&Nuovo Elemento"
-
-#~ msgid "Copying selection to clipboard..."
-#~ msgstr "Sto copiando ..."
-
-#~ msgid "Inserting clipboard contents..."
-#~ msgstr "Sto incollando ..."
-
-#~ msgid "Toggling toolbar..."
-#~ msgstr "Sto modificando la barra degli strumenti ..."
-
-#~ msgid "Toggling collection toolbar..."
-#~ msgstr "Sto modificando la barra degli strumenti-collezione ..."
-
-#~ msgid "Toggle the statusbar..."
-#~ msgstr "Sto modificando la barra di stato ..."
-
-#~ msgid "Tellico is unable to find a required file - %1.\n"
-#~ msgstr "Impossibile trovare un file necessario - %1.\n"
-
-#~ msgid "Editing string macros..."
-#~ msgstr "Sto editando le string macros ..."
-
-#~ msgid "&New Collection"
-#~ msgstr "&Nuova Collezione"
-
-#~ msgid "TextImporter"
-#~ msgstr "TextImporter"
-
-#~ msgid "XSLTImporter"
-#~ msgstr "XSLTImporter"
-
-#~ msgid "CSVImporter"
-#~ msgstr "CSVImporter"
-
-#~ msgid "BibtexImporter"
-#~ msgstr "BibtexImporter"
-
-#~ msgid ""
-#~ "Both the macro and the string can be edited by triple-clicking the item."
-#~ msgstr ""
-#~ "Sia la macro che la stringa possono essere modificate con tre click "
-#~ "sull'oggetto."
-
-#~ msgid ""
-#~ "The description is useful reminder of what information is contained in the "
-#~ "field."
-#~ msgstr ""
-#~ "La descrizione è utile per ricordare quale informazione è contenuta nei "
-#~ "campi."
-
-#~ msgid "Bibtex Field Name:"
-#~ msgstr "Campo Nome-Bibtex:"
-
-#~ msgid ""
-#~ "The Bibtex field name determines the entry name for exporting to "
-#~ "bibliogrgaphy files."
-#~ msgstr ""
-#~ "Il campo Nome-Bibtex determina i nomi degli lementi per l'esportazione su "
-#~ "file di bibliografia."
-
-#, fuzzy
-#~ msgid "Processing new entries..."
-#~ msgstr "Sto processando il documento ..."
-
-#, fuzzy
-#~ msgid "If checked, the first row is used as field headers."
-#~ msgstr ""
-#~ "Se selezionato, i nomi di campo saranno stampati come headers della tabella."
-
-#, fuzzy
-#~ msgid "Collection Field in this Column:"
-#~ msgstr "Opzioni per la collezione di audio"
-
-#~ msgid "Tellico is unable to find the file - %1."
-#~ msgstr "Impossibile trovare il file - %1."
-
-#~ msgid "Tellico is unable to download the file - %1."
-#~ msgstr "Impossibile scaricare il file - %1."
-
-#~ msgid "The collection is grouped by this field."
-#~ msgstr "La collezione viene ordinata secondo questo campo"
-
-#~ msgid "These are the available fields in the collection."
-#~ msgstr "Questi sono i campi disponibili per la collezione"
-
-#~ msgid "Selected Fields"
-#~ msgstr "Campi selezionati"
-
-#, fuzzy
-#~ msgid "Import..."
-#~ msgstr "In stampa ..."
-
-#, fuzzy
-#~ msgid "Read Only"
-#~ msgstr "Pronto."
-
-#, fuzzy
-#~ msgid "Text"
-#~ msgstr "Trova testo"
-
-#, fuzzy
-#~ msgid "Enoding Options"
-#~ msgstr "Raggruppamento"
-
-#, fuzzy
-#~ msgid "Edit Collection Fields..."
-#~ msgstr "Chiusura ..."
-
-#, fuzzy
-#~ msgid "&Create new collection"
-#~ msgstr "Crea un nuovo documento"
-
-#, fuzzy
-#~ msgid "*.txt|Text files (*.txt)"
-#~ msgstr "*.xsl|file XSLT (*.xsl)"
-
-#~ msgid "New Book"
-#~ msgstr "Nuovo libro"
-
-#, fuzzy
-#~ msgid "Modify Books"
-#~ msgstr "Modifica libro"
-
-#, fuzzy
-#~ msgid "Delete Books"
-#~ msgstr "Cancella libro"
-
-#~ msgid "Group Books By"
-#~ msgstr "Raggruppa libri per"
-
-#~ msgid "Configure the options for the application..."
-#~ msgstr "Configura le opzioni di Tellico ..."
-
-#~ msgid "Importing from Bibtex..."
-#~ msgstr "Sto importando da bibtex ..."
-
-#~ msgid "Import from Bibtex..."
-#~ msgstr "Sto importando da bibtex ..."
-
-#~ msgid "Importing from Bibtexml..."
-#~ msgstr "Sto importando da bibtexml ..."
-
-#~ msgid "Song"
-#~ msgstr "Canzone"
-
-#~ msgid "CD"
-#~ msgstr "CD"
-
-#~ msgid "Clear Data"
-#~ msgstr "Cancella dati"
-
-#~ msgid ""
-#~ "*.tc *.bc|Tellico files (*.tc)\n"
-#~ "*.xml|XML files (*.xml)\n"
-#~ "*|All files"
-#~ msgstr ""
-#~ "*.tc *.bc|file di Tellico (*.tc)\n"
-#~ "*.xml|file XML (*.xml)\n"
-#~ "*|tutti i file"
-
-#, fuzzy
-#~ msgid "Unable to upload file - %1."
-#~ msgstr "Impossibile scaricare il file - %1."
-
-#, fuzzy
-#~ msgid "Unable to write file - %1."
-#~ msgstr "Impossibile leggere il file - %1."
-
-#~ msgid ""
-#~ "Unable to find a file needed for printing - %1.\n"
-#~ "Please check your installation."
-#~ msgstr ""
-#~ "Impossibile trovare un file necessario per la stampa - %1.\n"
-#~ "Controlla la tua installazione, grazie."
-
-#, fuzzy
-#~ msgid "Unable to find file - %1."
-#~ msgstr "Impossibile aprire il file - %1."
-
-#~ msgid "Unable to download file - %1."
-#~ msgstr "Impossibile scaricare il file - %1."
-
-#~ msgid "Unable to open file - %1."
-#~ msgstr "Impossibile aprire il file - %1."
-
-#~ msgid "Unable to read file - %1."
-#~ msgstr "Impossibile leggere il file - %1."
-
-#~ msgid "File is not in XML format - %1."
-#~ msgstr "Il file non ha l'aspetto di un file XML -%1."
-
-#, fuzzy
-#~ msgid "Unable to load file - %1."
-#~ msgstr "Impossibile scaricare il file - %1."
-
-#, fuzzy
-#~ msgid "File has no syntax version - %1."
-#~ msgstr "Il file non ha l'aspetto di un file XML -%1."
-
-#~ msgid "8mm"
-#~ msgstr "8mm"
-
-#~ msgid "LaserDisc"
-#~ msgstr "LaserDisc"
-
-#~ msgid "Betamax"
-#~ msgstr "Beta"
-
-#~ msgid "CDs"
-#~ msgstr "CD"
-
-#~ msgid "%1 %2"
-#~ msgstr "%1 %2"
-
-#, fuzzy
-#~ msgid ""
-#~ "Unable to find a required file - %1.\n"
-#~ "Please check your installation."
-#~ msgstr ""
-#~ "Impossibile trovare un file necessario per la stampa - %1.\n"
-#~ "Controlla la tua installazione, grazie."
-
-#~ msgid "(None)"
-#~ msgstr "(Nessuno)"
-
-#~ msgid "Full Contents"
-#~ msgstr "Intero contenuto"
-
-#~ msgid "Creates a full report"
-#~ msgstr "Crea un report completo"
-
-#~ msgid "Unable to find %1 in standard KDE directories."
-#~ msgstr "Impossibile trovare %1 nelle directory standard di KDE."
+msgstr "Ministero della Cultura Spagnolo"
-#~ msgid "Show Browse Toolbar"
-#~ msgstr "Mostra la barra di navigazione"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 8d396f4..4b7878f 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -1,86 +1,86 @@
-# translation of pt_BR.po to Brazillian Portuguese
+# translation of pt_BR.po to Brazilian Portuguese
# Copyright (C) 2007 Robby Stephenson <[email protected]>.
#
# Claudio Henrique Fortes Felix <[email protected]>, 2006.
+# Doutor Zero <[email protected]>, 2008.
msgid ""
msgstr ""
"Project-Id-Version: pt_BR\n"
-"POT-Creation-Date: 2008-01-26 10:52-0800\n"
-"PO-Revision-Date: 2006-12-25 01:47-0200\n"
-"Last-Translator: Claudio Henrique Fortes Felix <[email protected]>\n"
-"Language-Team: Brazillian Portuguese\n"
+"POT-Creation-Date: 2007-06-22 17:58-0700\n"
+"PO-Revision-Date: 2008-11-01 09:36-0200\n"
+"Last-Translator: Doutor Zero <[email protected]>\n"
+"Language-Team: Brazilian Portuguese <[email protected]>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: cite/lyxpipe.cpp:50
+#: cite/lyxpipe.cpp:49
msgid "<qt>Tellico is unable to write to the server pipe at <b>%1</b>.</qt>"
msgstr ""
-"<qt>Tellico não conseguiu escrever para o 'pipe' do servidor em "
-"<b>%1</b>.</qt>"
+"<qt>Tellico não conseguiu escrever para o 'pipe' do servidor em <b>%1</b>.</"
+"qt>"
-#: cite/openoffice.cpp:82
+#: cite/openoffice.cpp:81
msgid "Connecting to OpenOffice.org..."
msgstr "Conectando ao OpenOffice.org..."
-#: cite/openoffice.cpp:165 cite/openoffice.cpp:186
+#: cite/openoffice.cpp:164 cite/openoffice.cpp:185
msgid "OpenOffice.org Connection"
msgstr "Conexão ao OpenOffice.org"
-#: cite/openoffice.cpp:179
+#: cite/openoffice.cpp:178
msgid ""
"Tellico was unable to connect to OpenOffice.org. Please verify the "
"connection settings below, and that OpenOffice.org Writer is currently "
"running."
msgstr ""
"Tellico não conseguiu se conectar ao OpenOffice.org. Por favor verifique as "
-"opções de conexão abaixo e verifique se o OpenOffice.org Writer está "
-"rodando."
+"opções de conexão abaixo e verifique se o OpenOffice.org Writer está rodando."
-#: cite/openoffice.cpp:191
+#: cite/openoffice.cpp:190
msgid "Pipe"
msgstr "Pipe"
-#: cite/openoffice.cpp:193
+#: cite/openoffice.cpp:192
msgid "TCP/IP"
msgstr "TCP/IP"
-#: gui/tablefieldwidget.cpp:181
+#: gui/tablefieldwidget.cpp:180
msgid "Rename Column"
msgstr "Renomear Coluna"
-#: gui/tablefieldwidget.cpp:181
+#: gui/tablefieldwidget.cpp:180
msgid "New column name:"
msgstr "Novo nome da coluna:"
-#: gui/tablefieldwidget.cpp:206
+#: gui/tablefieldwidget.cpp:205
#, c-format
msgid "Column %1"
msgstr "Coluna %1"
-#: gui/tablefieldwidget.cpp:241 gui/tablefieldwidget.cpp:289
+#: gui/tablefieldwidget.cpp:240 gui/tablefieldwidget.cpp:288
msgid "Rename Column..."
msgstr "Renomear Coluna..."
-#: gui/tablefieldwidget.cpp:274
+#: gui/tablefieldwidget.cpp:273
msgid "Insert Row"
msgstr "Inserir Linha "
-#: gui/tablefieldwidget.cpp:276
+#: gui/tablefieldwidget.cpp:275
msgid "Remove Row"
msgstr "Remover Linha "
-#: gui/tablefieldwidget.cpp:278
+#: gui/tablefieldwidget.cpp:277
msgid "Move Row Up"
msgstr "Mover Linha para Cima"
-#: gui/tablefieldwidget.cpp:283
+#: gui/tablefieldwidget.cpp:282
msgid "Move Row Down"
msgstr "Mover Linha para Baixo"
-#: gui/tablefieldwidget.cpp:295
+#: gui/tablefieldwidget.cpp:294
msgid "Clear Table"
msgstr "Limpar Tabela"
@@ -116,18 +116,10 @@ msgid ""
"Clear"
msgstr "Limpar"
-#: gui/imagewidget.cpp:57
+#: gui/imagewidget.cpp:53
msgid "Select Image..."
msgstr "Selecionar Imagem..."
-#: gui/imagewidget.cpp:63
-msgid "Save link only"
-msgstr ""
-
-#: gui/imagewidget.cpp:162
-msgid "Saving a link is only possible for newly added images."
-msgstr ""
-
#: commands/modifyentries.cpp:73 commands/updateentries.cpp:50
#, c-format
msgid ""
@@ -147,7 +139,7 @@ msgstr "Combinar Coleção"
msgid "Replace Collection"
msgstr "Substituir Coleção"
-#: commands/modifyentries.cpp:72 entryeditdialog.cpp:365
+#: commands/modifyentries.cpp:72
msgid "Modify Entries"
msgstr "Modificar Registros"
@@ -231,267 +223,272 @@ msgid ""
"Check-in %1"
msgstr "Registrar entrada de %1"
-#: collectionfactory.cpp:83 collections/bibtexcollection.cpp:24
-#: collections/bibtexcollection.cpp:58 collections/bibtexcollection.cpp:88
-#: collections/boardgamecollection.cpp:19 collections/bookcollection.cpp:19
-#: collections/bookcollection.cpp:40 collections/cardcollection.cpp:19
-#: collections/coincollection.cpp:19 collections/comicbookcollection.cpp:19
-#: collections/filecatalog.cpp:19 collections/gamecollection.cpp:19
-#: collections/musiccollection.cpp:19 collections/stampcollection.cpp:19
-#: collections/videocollection.cpp:19 collections/videocollection.cpp:40
-#: collections/winecollection.cpp:19 configdialog.cpp:198
-#: fetch/imdbfetcher.cpp:689 fetch/imdbfetcher.cpp:948 field.cpp:40
-#: field.cpp:72 translators/gcfilmsimporter.cpp:78
+#: collectionfactory.cpp:79 collections/bibtexcollection.cpp:24
+#: collections/bibtexcollection.cpp:59 collections/bibtexcollection.cpp:89
+#: collections/bookcollection.cpp:19 collections/bookcollection.cpp:41
+#: collections/cardcollection.cpp:19 collections/coincollection.cpp:19
+#: collections/comicbookcollection.cpp:19 collections/filecatalog.cpp:19
+#: collections/gamecollection.cpp:19 collections/musiccollection.cpp:19
+#: collections/stampcollection.cpp:19 collections/videocollection.cpp:19
+#: collections/videocollection.cpp:41 collections/winecollection.cpp:19
+#: configdialog.cpp:192 fetch/imdbfetcher.cpp:689 fetch/imdbfetcher.cpp:933
+#: field.cpp:40 field.cpp:72 translators/gcfilmsimporter.cpp:54
msgid "General"
msgstr "Geral "
-#: collections/bookcollection.cpp:143 collections/comicbookcollection.cpp:122
-#: collections/stampcollection.cpp:20
-msgid "Condition"
-msgstr "Condição"
-
-#: collections/boardgamecollection.cpp:20 collections/bookcollection.cpp:22
-#: collections/cardcollection.cpp:20 collections/coincollection.cpp:20
-#: collections/comicbookcollection.cpp:22 collections/gamecollection.cpp:20
-#: collections/musiccollection.cpp:20 collections/stampcollection.cpp:21
-#: collections/videocollection.cpp:22 collections/winecollection.cpp:20
-#: document.cpp:468
-msgid "Personal"
-msgstr "Pessoal"
-
-#: collections/stampcollection.cpp:27
-msgid "My Stamps"
-msgstr "Meus Selos"
-
-#: collectionfactory.cpp:82 collections/bibtexcollection.cpp:56
-#: collections/boardgamecollection.cpp:37 collections/bookcollection.cpp:39
-#: collections/cardcollection.cpp:37 collections/coincollection.cpp:37
-#: collections/comicbookcollection.cpp:39 collections/gamecollection.cpp:37
-#: collections/musiccollection.cpp:76 collections/stampcollection.cpp:38
-#: collections/videocollection.cpp:39 collections/winecollection.cpp:37
-#: entryupdater.cpp:229 fetch/fetchmanager.cpp:68 fetchdialog.cpp:169
-#: translators/audiofileimporter.cpp:164 translators/tellicoimporter.cpp:439
-msgid "Title"
-msgstr "Título"
-
-#: collections/boardgamecollection.cpp:77 collections/filecatalog.cpp:45
-#: collections/gamecollection.cpp:87 collections/stampcollection.cpp:44
-#: entryupdater.cpp:230 fetchdialog.cpp:170
-msgid "Description"
-msgstr "Descrição"
-
-#. TRANSLATORS: denomination refers to the monetary value.
-#: collections/coincollection.cpp:51 collections/stampcollection.cpp:50
-msgid "Denomination"
-msgstr "Denominação"
-
-#: collections/coincollection.cpp:67 collections/comicbookcollection.cpp:94
-#: collections/stampcollection.cpp:55 collections/winecollection.cpp:73
-msgid "Country"
-msgstr "País"
-
-#: collections/stampcollection.cpp:61
-msgid "Issue Year"
-msgstr "Ano de Edição"
-
-#: collections/stampcollection.cpp:66 collections/videocollection.cpp:172
-msgid "Color"
-msgstr "Cor"
-
-#: collections/stampcollection.cpp:71
-msgid "Scott#"
-msgstr "Scott#"
-
-#: collections/stampcollection.cpp:78
-msgid ""
-"_: Stamp grade levels - Superb,Extremely Fine,Very Fine,Fine,Average,Poor\n"
-"Superb,Extremely Fine,Very Fine,Fine,Average,Poor"
-msgstr "Soberbo,Excelente,Muito Bom,Bom,Regular,Ruim"
-
-#: collections/coincollection.cpp:88 collections/stampcollection.cpp:80
-msgid "Grade"
-msgstr "Classificação"
-
-#: collections/stampcollection.cpp:85
-msgid "Cancelled"
-msgstr "Cancelado"
-
-#. TRANSLATORS: See http://en.wikipedia.org/wiki/Stamp_hinge
-#: collections/stampcollection.cpp:90
-msgid "Hinged"
-msgstr "Articulado"
-
-#: collections/stampcollection.cpp:95
-msgid "Centering"
-msgstr "Centrada"
-
-#: collections/stampcollection.cpp:100
-msgid "Gummed"
-msgstr "Colado"
-
-#: collections/boardgamecollection.cpp:85 collections/bookcollection.cpp:64
-#: collections/cardcollection.cpp:82 collections/coincollection.cpp:103
-#: collections/comicbookcollection.cpp:126 collections/gamecollection.cpp:99
-#: collections/musiccollection.cpp:86 collections/stampcollection.cpp:105
-#: collections/videocollection.cpp:190 collections/winecollection.cpp:79
-msgid "Purchase Date"
-msgstr "Data de compra"
-
-#: collections/boardgamecollection.cpp:94 collections/bookcollection.cpp:69
-#: collections/cardcollection.cpp:87 collections/coincollection.cpp:108
-#: collections/comicbookcollection.cpp:131 collections/gamecollection.cpp:108
-#: collections/musiccollection.cpp:95 collections/stampcollection.cpp:110
-#: collections/videocollection.cpp:199 collections/winecollection.cpp:84
-msgid "Purchase Price"
-msgstr "Preço de compra"
-
-#: collections/cardcollection.cpp:91 collections/coincollection.cpp:112
-#: collections/stampcollection.cpp:114 collections/winecollection.cpp:88
-msgid "Location"
-msgstr "Localização"
-
-#: collections/boardgamecollection.cpp:90 collections/bookcollection.cpp:155
-#: collections/cardcollection.cpp:96 collections/coincollection.cpp:118
-#: collections/comicbookcollection.cpp:139 collections/gamecollection.cpp:104
-#: collections/musiccollection.cpp:91 collections/stampcollection.cpp:120
-#: collections/videocollection.cpp:195 collections/winecollection.cpp:107
-msgid "Gift"
-msgstr "Presente"
-
-#: collections/stampcollection.cpp:124 field.cpp:497
-msgid "Image"
-msgstr "Imagem "
-
-#: collections/boardgamecollection.cpp:105 collections/bookcollection.cpp:171
-#: collections/cardcollection.cpp:115 collections/coincollection.cpp:128
-#: collections/comicbookcollection.cpp:150 collections/gamecollection.cpp:119
-#: collections/musiccollection.cpp:111 collections/stampcollection.cpp:127
-#: collections/videocollection.cpp:210 collections/winecollection.cpp:114
-msgid "Comments"
-msgstr "Comentários"
-
#: collections/bibtexcollection.cpp:25 collections/bookcollection.cpp:20
#: collections/comicbookcollection.cpp:20 translators/grs1importer.cpp:58
-#: translators/grs1importer.cpp:68 translators/pdfimporter.cpp:174
-#: translators/risimporter.cpp:281
+#: translators/grs1importer.cpp:68 translators/risimporter.cpp:258
msgid "Publishing"
msgstr "Publicação"
#: collections/bookcollection.cpp:21 collections/comicbookcollection.cpp:21
-#: translators/grs1importer.cpp:63 translators/risimporter.cpp:275
+#: translators/grs1importer.cpp:63 translators/risimporter.cpp:252
msgid "Classification"
msgstr "Classificação"
+#: collections/bookcollection.cpp:22 collections/cardcollection.cpp:20
+#: collections/coincollection.cpp:20 collections/comicbookcollection.cpp:22
+#: collections/gamecollection.cpp:20 collections/musiccollection.cpp:20
+#: collections/stampcollection.cpp:21 collections/videocollection.cpp:22
+#: collections/winecollection.cpp:20 document.cpp:464
+msgid "Personal"
+msgstr "Pessoal"
+
#: collections/comicbookcollection.cpp:28
+msgid "Comics"
+msgstr "Revistas em Quadrinhos"
+
+#: collections/comicbookcollection.cpp:29
msgid "My Comic Books"
msgstr "Minhas Revistas em Quadrinhos"
-#: collections/bookcollection.cpp:45 collections/comicbookcollection.cpp:45
+#: collectionfactory.cpp:78 collections/bibtexcollection.cpp:57
+#: collections/bookcollection.cpp:40 collections/cardcollection.cpp:38
+#: collections/coincollection.cpp:38 collections/comicbookcollection.cpp:40
+#: collections/gamecollection.cpp:38 collections/musiccollection.cpp:77
+#: collections/stampcollection.cpp:39 collections/videocollection.cpp:40
+#: collections/winecollection.cpp:38 entryupdater.cpp:231
+#: fetch/fetchmanager.cpp:62 fetchdialog.cpp:159
+#: translators/audiofileimporter.cpp:150 translators/tellicoimporter.cpp:405
+msgid "Title"
+msgstr "Título"
+
+#: collections/bookcollection.cpp:46 collections/comicbookcollection.cpp:46
msgid "Subtitle"
msgstr "Sub-Título"
-#: collections/comicbookcollection.cpp:50 collections/videocollection.cpp:121
+#: collections/comicbookcollection.cpp:51 collections/videocollection.cpp:122
msgid "Writer"
msgstr "Escritor"
-#: collections/comicbookcollection.cpp:56
+#: collections/comicbookcollection.cpp:57
msgid ""
"_: Comic Book Illustrator\n"
"Artist"
msgstr "Artista Gráfico"
-#: collections/bibtexcollection.cpp:200 collections/bookcollection.cpp:132
-#: collections/cardcollection.cpp:71 collections/comicbookcollection.cpp:62
+#: collections/bibtexcollection.cpp:195 collections/bookcollection.cpp:127
+#: collections/cardcollection.cpp:72 collections/comicbookcollection.cpp:63
msgid "Series"
msgstr "Série"
-#: collections/comicbookcollection.cpp:68
+#: collections/comicbookcollection.cpp:69
msgid "Issue"
msgstr "Número"
-#: collections/bibtexcollection.cpp:120 collections/boardgamecollection.cpp:60
-#: collections/bookcollection.cpp:73 collections/comicbookcollection.cpp:73
+#: collections/bibtexcollection.cpp:121 collections/bookcollection.cpp:74
+#: collections/comicbookcollection.cpp:74
msgid "Publisher"
msgstr "Editora"
-#: collections/bibtexcollection.cpp:133 collections/bookcollection.cpp:79
-#: collections/comicbookcollection.cpp:79
+#: collections/bibtexcollection.cpp:134 collections/bookcollection.cpp:80
+#: collections/comicbookcollection.cpp:80
msgid "Edition"
msgstr "Edição"
-#: collections/bookcollection.cpp:90 collections/comicbookcollection.cpp:85
+#: collections/bookcollection.cpp:91 collections/comicbookcollection.cpp:86
msgid "Publication Year"
msgstr "Ano de Publicação"
-#: collections/bibtexcollection.cpp:140 collections/bookcollection.cpp:105
-#: collections/comicbookcollection.cpp:90
+#: collections/bibtexcollection.cpp:141 collections/bookcollection.cpp:106
+#: collections/comicbookcollection.cpp:91
msgid "Pages"
msgstr "Páginas"
-#: collections/bookcollection.cpp:115 collections/comicbookcollection.cpp:100
+#: collections/coincollection.cpp:68 collections/comicbookcollection.cpp:95
+#: collections/stampcollection.cpp:56 collections/winecollection.cpp:74
+msgid "Country"
+msgstr "País"
+
+#: collections/bookcollection.cpp:110 collections/comicbookcollection.cpp:101
#: translators/grs1importer.cpp:67
msgid "Language"
msgstr "Língua"
-#: collections/boardgamecollection.cpp:43 collections/bookcollection.cpp:120
-#: collections/comicbookcollection.cpp:106 collections/gamecollection.cpp:54
-#: collections/musiccollection.cpp:67 collections/videocollection.cpp:67
+#: collections/bookcollection.cpp:115 collections/comicbookcollection.cpp:107
+#: collections/gamecollection.cpp:55 collections/musiccollection.cpp:68
+#: collections/videocollection.cpp:68
msgid "Genre"
msgstr "Gênero"
-#: collections/bibtexcollection.cpp:222 collections/bookcollection.cpp:127
-#: collections/cardcollection.cpp:100 collections/comicbookcollection.cpp:112
-#: collections/musiccollection.cpp:103 fetch/amazonfetcher.cpp:933
-#: translators/grs1importer.cpp:62 translators/risimporter.cpp:273
+#: collections/bibtexcollection.cpp:217 collections/bookcollection.cpp:122
+#: collections/cardcollection.cpp:101 collections/comicbookcollection.cpp:113
+#: collections/musiccollection.cpp:104 fetch/amazonfetcher.cpp:913
+#: translators/grs1importer.cpp:62 translators/risimporter.cpp:250
msgid "Keywords"
msgstr "Palavras-chave"
-#: collections/comicbookcollection.cpp:120
+#: collections/comicbookcollection.cpp:121
msgid ""
-"_: Comic book grade levels - Mint,Near Mint,Very Fine,Fine,Very "
-"Good,Good,Fair,Poor\n"
+"_: Comic book grade levels - Mint,Near Mint,Very Fine,Fine,Very Good,Good,"
+"Fair,Poor\n"
"Mint,Near Mint,Very Fine,Fine,Very Good,Good,Fair,Poor"
msgstr "Novo,Quase novo,Excelente,Ótimo,Muito bom,Bom,Razoável,Ruim"
-#: collections/bookcollection.cpp:147 collections/comicbookcollection.cpp:135
+#: collections/bookcollection.cpp:138 collections/comicbookcollection.cpp:123
+#: collections/stampcollection.cpp:20
+msgid "Condition"
+msgstr "Condição"
+
+#: collections/bookcollection.cpp:65 collections/cardcollection.cpp:83
+#: collections/coincollection.cpp:104 collections/comicbookcollection.cpp:127
+#: collections/gamecollection.cpp:100 collections/musiccollection.cpp:87
+#: collections/stampcollection.cpp:106 collections/videocollection.cpp:191
+#: collections/winecollection.cpp:80
+msgid "Purchase Date"
+msgstr "Data de compra"
+
+#: collections/bookcollection.cpp:70 collections/cardcollection.cpp:88
+#: collections/coincollection.cpp:109 collections/comicbookcollection.cpp:132
+#: collections/gamecollection.cpp:109 collections/musiccollection.cpp:96
+#: collections/stampcollection.cpp:111 collections/videocollection.cpp:200
+#: collections/winecollection.cpp:85
+msgid "Purchase Price"
+msgstr "Preço de compra"
+
+#: collections/bookcollection.cpp:142 collections/comicbookcollection.cpp:136
msgid "Signed"
msgstr "Autografado"
-#: collections/boardgamecollection.cpp:98 collections/bookcollection.cpp:159
-#: collections/comicbookcollection.cpp:143 collections/gamecollection.cpp:112
-#: collections/musiccollection.cpp:99 collections/videocollection.cpp:203
-#: document.cpp:466
+#: collections/bookcollection.cpp:150 collections/cardcollection.cpp:97
+#: collections/coincollection.cpp:119 collections/comicbookcollection.cpp:140
+#: collections/gamecollection.cpp:105 collections/musiccollection.cpp:92
+#: collections/stampcollection.cpp:121 collections/videocollection.cpp:196
+#: collections/winecollection.cpp:108
+msgid "Gift"
+msgstr "Presente"
+
+#: collections/bookcollection.cpp:154 collections/comicbookcollection.cpp:144
+#: collections/gamecollection.cpp:113 collections/musiccollection.cpp:100
+#: collections/videocollection.cpp:204 document.cpp:462
msgid "Loaned"
msgstr "Emprestado"
-#: collections/bookcollection.cpp:168 collections/comicbookcollection.cpp:147
-#: fetch/arxivfetcher.cpp:216 fetch/crossreffetcher.cpp:206
-#: translators/pdfimporter.cpp:204 translators/referencerimporter.cpp:48
+#: collections/bookcollection.cpp:163 collections/comicbookcollection.cpp:148
msgid "Front Cover"
msgstr "Capa"
+#: collections/bookcollection.cpp:166 collections/cardcollection.cpp:116
+#: collections/coincollection.cpp:129 collections/comicbookcollection.cpp:151
+#: collections/gamecollection.cpp:120 collections/musiccollection.cpp:112
+#: collections/stampcollection.cpp:128 collections/videocollection.cpp:211
+#: collections/winecollection.cpp:115
+msgid "Comments"
+msgstr "Comentários"
+
+#: collections/stampcollection.cpp:27
+msgid "Stamps"
+msgstr "Selos"
+
+#: collections/stampcollection.cpp:28
+msgid "My Stamps"
+msgstr "Meus Selos"
+
+#: collections/filecatalog.cpp:46 collections/gamecollection.cpp:88
+#: collections/stampcollection.cpp:45 entryupdater.cpp:232 fetchdialog.cpp:160
+msgid "Description"
+msgstr "Descrição"
+
+#. TRANSLATORS: denomination refers to the monetary value.
+#: collections/coincollection.cpp:52 collections/stampcollection.cpp:51
+msgid "Denomination"
+msgstr "Denominação"
+
+#: collections/stampcollection.cpp:62
+msgid "Issue Year"
+msgstr "Ano de Edição"
+
+#: collections/stampcollection.cpp:67 collections/videocollection.cpp:173
+msgid "Color"
+msgstr "Cor"
+
+#: collections/stampcollection.cpp:72
+msgid "Scott#"
+msgstr "Scott#"
+
+#: collections/stampcollection.cpp:79
+msgid ""
+"_: Stamp grade levels - Superb,Extremely Fine,Very Fine,Fine,Average,Poor\n"
+"Superb,Extremely Fine,Very Fine,Fine,Average,Poor"
+msgstr "Soberbo,Excelente,Muito Bom,Bom,Regular,Ruim"
+
+#: collections/coincollection.cpp:89 collections/stampcollection.cpp:81
+msgid "Grade"
+msgstr "Classificação"
+
+#: collections/stampcollection.cpp:86
+msgid "Cancelled"
+msgstr "Cancelado"
+
+#. TRANSLATORS: See http://en.wikipedia.org/wiki/Stamp_hinge
+#: collections/stampcollection.cpp:91
+msgid "Hinged"
+msgstr "Articulado"
+
+#: collections/stampcollection.cpp:96
+msgid "Centering"
+msgstr "Centrada"
+
+#: collections/stampcollection.cpp:101
+msgid "Gummed"
+msgstr "Colado"
+
+#: collections/cardcollection.cpp:92 collections/coincollection.cpp:113
+#: collections/stampcollection.cpp:115 collections/winecollection.cpp:89
+msgid "Location"
+msgstr "Localização"
+
+#: collections/stampcollection.cpp:125 field.cpp:489
+msgid "Image"
+msgstr "Imagem "
+
#: collections/coincollection.cpp:26
+msgid "Coins"
+msgstr "Moedas"
+
+#: collections/coincollection.cpp:27
msgid "My Coins"
msgstr "Minhas Moedas"
-#: collections/coincollection.cpp:44 collections/winecollection.cpp:68
+#: collections/coincollection.cpp:45 collections/winecollection.cpp:69
msgid "Type"
msgstr "Tipo"
-#: collections/bibtexcollection.cpp:145 collections/cardcollection.cpp:66
-#: collections/coincollection.cpp:56 collections/musiccollection.cpp:62
+#: collections/bibtexcollection.cpp:146 collections/cardcollection.cpp:67
+#: collections/coincollection.cpp:57 collections/musiccollection.cpp:63
msgid "Year"
msgstr "Ano"
-#: collections/coincollection.cpp:61
+#: collections/coincollection.cpp:62
msgid "Mint Mark"
msgstr "Marca da Casa Emissora"
-#: collections/coincollection.cpp:73
+#: collections/coincollection.cpp:74
msgid "Coin Set"
msgstr "Conjunto de Moedas"
-#: collections/coincollection.cpp:83
+#: collections/coincollection.cpp:84
msgid ""
"_: Coin grade levels - Proof-65,Proof-60,Mint State-65,Mint State-60,Almost "
"Uncirculated-55,Almost Uncirculated-50,Extremely Fine-40,Very Fine-30,Very "
@@ -500,221 +497,224 @@ msgid ""
"Uncirculated-50,Extremely Fine-40,Very Fine-30,Very Fine-20,Fine-12,Very "
"Good-8,Good-4,Fair"
msgstr ""
-"Proof-65,Proof-60,Mint-65,Mint-60,Quase não Circulada-55,Quase não "
-"Circulada-50,Extremamente Rara-40,Muito Rara-30,Muito Rara-20,Rara-12,Muito "
-"Boa-8,Boa-4,Razoável"
+"Proof-65,Proof-60,Mint-65,Mint-60,Quase não Circulada-55,Quase não Circulada-"
+"50,Extremamente Rara-40,Muito Rara-30,Muito Rara-20,Rara-12,Muito Boa-8,Boa-"
+"4,Razoável"
-#: collections/coincollection.cpp:96
+#: collections/coincollection.cpp:97
msgid ""
"_: Coin grading services - PCGS,NGC,ANACS,ICG,ASA,PCI\n"
"PCGS,NGC,ANACS,ICG,ASA,PCI"
msgstr "PCGS,NGC,ANACS,ICG,ASA,PCI"
-#: collections/coincollection.cpp:98
+#: collections/coincollection.cpp:99
msgid "Grading Service"
msgstr "Serviços de Classificação"
-#: collections/coincollection.cpp:122
+#: collections/coincollection.cpp:123
msgid "Obverse"
msgstr "Observação"
-#: collections/coincollection.cpp:125
+#: collections/coincollection.cpp:126
msgid "Reverse"
msgstr "Verso"
#: collections/bookcollection.cpp:28
+msgid "Books"
+msgstr "Livros"
+
+#: collections/bookcollection.cpp:29
msgid "My Books"
msgstr "Meus Livros"
-#: collections/bibtexcollection.cpp:79 collections/bookcollection.cpp:50
+#: collections/bibtexcollection.cpp:80 collections/bookcollection.cpp:51
msgid "Author"
msgstr "Autor"
-#: collections/bookcollection.cpp:57 translators/alexandriaimporter.cpp:135
+#: collections/bookcollection.cpp:58 translators/alexandriaimporter.cpp:134
msgid "Hardback"
msgstr "Capa Dura"
-#: collections/bookcollection.cpp:57
+#: collections/bookcollection.cpp:58
msgid "Paperback"
msgstr "Capa Flexível Econômica"
-#: collections/bookcollection.cpp:57
+#: collections/bookcollection.cpp:58
msgid "Trade Paperback"
msgstr "Capa Flexível"
-#: collections/bookcollection.cpp:58
+#: collections/bookcollection.cpp:59
msgid "E-Book"
msgstr "Livro Eletrônico"
-#: collections/bookcollection.cpp:58
+#: collections/bookcollection.cpp:59
msgid "Magazine"
msgstr "Revista"
-#: collections/bibtexcollection.cpp:157 collections/bookcollection.cpp:58
+#: collections/bibtexcollection.cpp:158 collections/bookcollection.cpp:59
msgid "Journal"
msgstr "Jornal"
-#: collections/bookcollection.cpp:59
+#: collections/bookcollection.cpp:60
msgid "Binding"
msgstr "Formato"
-#: collections/bookcollection.cpp:85
+#: collections/bookcollection.cpp:86
msgid "Copyright Year"
msgstr "Ano do Copyright"
-#: collections/bibtexcollection.cpp:151 collections/bookcollection.cpp:95
-#: translators/grs1importer.cpp:57 translators/risimporter.cpp:278
+#: collections/bibtexcollection.cpp:152 collections/bookcollection.cpp:96
+#: translators/grs1importer.cpp:57 translators/risimporter.cpp:255
msgid "ISBN#"
msgstr "ISBN#"
-#: collections/bibtexcollection.cpp:154 collections/bookcollection.cpp:97
-#: translators/grs1importer.cpp:59 translators/risimporter.cpp:282
+#: collections/bibtexcollection.cpp:155 collections/bookcollection.cpp:98
+#: translators/grs1importer.cpp:59 translators/risimporter.cpp:259
msgid "International Standard Book Number"
msgstr "Número Internacional Normalizado do Livro"
-#: collections/bookcollection.cpp:100
+#: collections/bookcollection.cpp:101
msgid "LCCN#"
msgstr "LCCN#"
-#: collections/bookcollection.cpp:102
+#: collections/bookcollection.cpp:103
msgid "Library of Congress Control Number"
msgstr "Número de Controlo da Biblioteca do Congresso"
-#: collections/bookcollection.cpp:109
-msgid "Translator"
-msgstr ""
-
-#: collections/bookcollection.cpp:137
+#: collections/bookcollection.cpp:132
msgid "Series Number"
msgstr "Nº de série"
-#: collections/bookcollection.cpp:142 mainwindow.cpp:185
+#: collections/bookcollection.cpp:137 mainwindow.cpp:192
msgid "New"
msgstr "Novo "
-#: collections/bookcollection.cpp:142
+#: collections/bookcollection.cpp:137
msgid "Used"
msgstr "Usado"
-#: collections/bookcollection.cpp:151
+#: collections/bookcollection.cpp:146
msgid "Read"
msgstr "Lido"
-#: collections/boardgamecollection.cpp:80 collections/bookcollection.cpp:163
-#: collections/musiccollection.cpp:81 collections/winecollection.cpp:102
-#: field.cpp:501 newstuff/dialog.cpp:115
+#: collections/bookcollection.cpp:158 collections/musiccollection.cpp:82
+#: collections/winecollection.cpp:103 field.cpp:493 newstuff/dialog.cpp:114
msgid "Rating"
msgstr "Classificação "
-#: collections/filecatalog.cpp:25
+#: collections/filecatalog.cpp:26
msgid "My Files"
msgstr "Meus Arquivos"
-#: borrowerdialog.cpp:49 collections/filecatalog.cpp:36
-#: newstuff/dialog.cpp:113
+#: borrowerdialog.cpp:49 collections/filecatalog.cpp:37
+#: newstuff/dialog.cpp:112
msgid "Name"
msgstr "Nome"
-#: collections/bibtexcollection.cpp:227 collections/filecatalog.cpp:41
-#: fetch/entrezfetcher.cpp:400 fetch/entrezfetcher.cpp:487 field.cpp:495
-#: translators/gcfilmsimporter.cpp:77 translators/risimporter.cpp:284
+#: collections/filecatalog.cpp:42 fetch/entrezfetcher.cpp:396
+#: fetch/entrezfetcher.cpp:465 field.cpp:487
+#: translators/gcfilmsimporter.cpp:53 translators/risimporter.cpp:261
msgid "URL"
msgstr "URL"
-#: collections/bibtexcollection.cpp:207 collections/filecatalog.cpp:50
+#: collections/bibtexcollection.cpp:202 collections/filecatalog.cpp:51
msgid "Volume"
msgstr "Volume"
-#: collections/filecatalog.cpp:55
+#: collections/filecatalog.cpp:56
msgid "Folder"
msgstr "Pasta"
-#: collections/filecatalog.cpp:60
+#: collections/filecatalog.cpp:61
msgid "Mimetype"
msgstr "Tipo MIME"
-#: collections/filecatalog.cpp:65
+#: collections/filecatalog.cpp:66
msgid "Size"
msgstr "Tamanho"
-#: collections/filecatalog.cpp:69
+#: collections/filecatalog.cpp:70
msgid "Permissions"
msgstr "Permissões"
-#: collections/filecatalog.cpp:74
+#: collections/filecatalog.cpp:75
msgid "Owner"
msgstr "Dono"
-#: collections/filecatalog.cpp:79
+#: collections/filecatalog.cpp:80
msgid "Group"
msgstr "Grupo"
-#: collections/filecatalog.cpp:85
+#: collections/filecatalog.cpp:86
msgid "Created"
msgstr "Criado"
-#: collections/filecatalog.cpp:89
+#: collections/filecatalog.cpp:90
msgid "Modified"
msgstr "Modificado"
-#: collections/filecatalog.cpp:93
+#: collections/filecatalog.cpp:94
msgid "Meta Info"
msgstr "Meta-informação"
-#: collectionfieldsdialog.cpp:873 collections/filecatalog.cpp:95
+#: collectionfieldsdialog.cpp:869 collections/filecatalog.cpp:96
msgid "Property"
msgstr "Propriedade"
-#: collectionfieldsdialog.cpp:873 collections/filecatalog.cpp:96
+#: collectionfieldsdialog.cpp:869 collections/filecatalog.cpp:97
msgid "Value"
msgstr "Valor"
-#: collections/filecatalog.cpp:99
+#: collections/filecatalog.cpp:100
msgid "Icon"
msgstr "Ícone"
#: collections/winecollection.cpp:26
+msgid "Wines"
+msgstr "Vinhos"
+
+#: collections/winecollection.cpp:27
msgid "My Wines"
msgstr "Meus Vinhos"
-#: collections/videocollection.cpp:115 collections/winecollection.cpp:43
+#: collections/videocollection.cpp:116 collections/winecollection.cpp:44
msgid "Producer"
msgstr "Produtor"
-#: collections/winecollection.cpp:49
+#: collections/winecollection.cpp:50
msgid "Appellation"
msgstr "Apelação"
-#: collections/winecollection.cpp:55
+#: collections/winecollection.cpp:56
msgid "Varietal"
msgstr "Variedade"
# Não sei ainda qual a tradução correta
-#: collections/winecollection.cpp:61
+#: collections/winecollection.cpp:62
msgid "Vintage"
msgstr "Safra"
-#: collections/winecollection.cpp:67
+#: collections/winecollection.cpp:68
msgid "Red Wine"
msgstr "Vinho tinto"
-#: collections/winecollection.cpp:67
+#: collections/winecollection.cpp:68
msgid "White Wine"
msgstr "Vinho branco"
-#: collections/winecollection.cpp:67
+#: collections/winecollection.cpp:68
msgid "Sparkling Wine"
msgstr "Espumoso"
-#: collections/cardcollection.cpp:105 collections/winecollection.cpp:93
+#: collections/cardcollection.cpp:106 collections/winecollection.cpp:94
msgid "Quantity"
msgstr "Quantidade"
-#: collections/winecollection.cpp:97
+#: collections/winecollection.cpp:98
msgid "Drink By"
msgstr "Bebido Por"
-#: collections/winecollection.cpp:111
+#: collections/winecollection.cpp:112
msgid "Label Image"
msgstr "Etiqueta"
@@ -727,282 +727,284 @@ msgid "Features"
msgstr "Características"
#: collections/videocollection.cpp:28
+msgid "Videos"
+msgstr "Vídeos"
+
+#: collections/videocollection.cpp:29
msgid "My Videos"
msgstr "Meus Vídeos"
-#: collections/musiccollection.cpp:44 collections/videocollection.cpp:46
+#: collections/musiccollection.cpp:45 collections/videocollection.cpp:47
msgid "DVD"
msgstr "DVD"
-#: collections/videocollection.cpp:46
+#: collections/videocollection.cpp:47
msgid "VHS"
msgstr "VHS"
-#: collections/videocollection.cpp:46
+#: collections/videocollection.cpp:47
msgid "VCD"
msgstr "VCD"
-#: collections/videocollection.cpp:46
+#: collections/videocollection.cpp:47
msgid "DivX"
msgstr "DivX"
-#: collections/videocollection.cpp:46 fetch/amazonfetcher.cpp:823
+#: collections/videocollection.cpp:47 fetch/amazonfetcher.cpp:801
msgid "Blu-ray"
-msgstr ""
+msgstr "Blu-ray"
-#: collections/videocollection.cpp:46 fetch/amazonfetcher.cpp:826
-#, fuzzy
+#: collections/videocollection.cpp:47 fetch/amazonfetcher.cpp:804
msgid "HD DVD"
-msgstr "DVD"
+msgstr "HD DVD"
-#: collections/musiccollection.cpp:45 collections/videocollection.cpp:47
+#: collections/musiccollection.cpp:46 collections/videocollection.cpp:48
msgid "Medium"
msgstr "Mídia"
-#: collections/videocollection.cpp:52
+#: collections/videocollection.cpp:53
msgid "Production Year"
msgstr "Ano de Produção"
-#: collections/videocollection.cpp:60
+#: collections/videocollection.cpp:61
msgid ""
"_: Movie ratings - G (USA),PG (USA),PG-13 (USA),R (USA), U (USA)\n"
"G (USA),PG (USA),PG-13 (USA),R (USA), U (USA)"
msgstr "G (USA),PG (USA),PG-13 (USA),R (USA), U (USA)"
-#: collections/videocollection.cpp:62
+#: collections/videocollection.cpp:63
msgid "Certification"
msgstr "Certificação"
-#: collections/videocollection.cpp:74
+#: collections/videocollection.cpp:75
msgid "Region 1"
msgstr "Região 1"
-#: collections/videocollection.cpp:75
+#: collections/videocollection.cpp:76
msgid "Region 2"
msgstr "Região 2"
-#: collections/videocollection.cpp:76
+#: collections/videocollection.cpp:77
msgid "Region 3"
msgstr "Região 3"
-#: collections/videocollection.cpp:77
+#: collections/videocollection.cpp:78
msgid "Region 4"
msgstr "Região 4"
-#: collections/videocollection.cpp:78
+#: collections/videocollection.cpp:79
msgid "Region 5"
msgstr "Região 5"
-#: collections/videocollection.cpp:79
+#: collections/videocollection.cpp:80
msgid "Region 6"
msgstr "Região 6"
-#: collections/videocollection.cpp:80
+#: collections/videocollection.cpp:81
msgid "Region 7"
msgstr "Região 7"
-#: collections/videocollection.cpp:81
+#: collections/videocollection.cpp:82
msgid "Region 8"
msgstr "Região 8"
-#: collections/videocollection.cpp:82
+#: collections/videocollection.cpp:83
msgid "Region"
msgstr "Região"
-#: collections/videocollection.cpp:87
+#: collections/videocollection.cpp:88
msgid "Nationality"
msgstr "Nacionalidade"
-#: collections/videocollection.cpp:94
+#: collections/videocollection.cpp:95
msgid "NTSC"
msgstr "NTSC"
-#: collections/videocollection.cpp:94
+#: collections/videocollection.cpp:95
msgid "PAL"
msgstr "PAL"
-#: collections/videocollection.cpp:94
+#: collections/videocollection.cpp:95
msgid "SECAM"
msgstr "SECAM"
-#: collections/videocollection.cpp:95
+#: collections/videocollection.cpp:96
msgid "Format"
msgstr "Formato"
-#: collections/videocollection.cpp:100
+#: collections/videocollection.cpp:101
msgid "Cast"
msgstr "Elenco"
-#: collections/videocollection.cpp:102 translators/tellicoimporter.cpp:443
+#: collections/videocollection.cpp:103 translators/tellicoimporter.cpp:409
msgid "Actor/Actress"
msgstr "Ator/Atriz"
-#: collections/videocollection.cpp:103 translators/tellicoimporter.cpp:444
+#: collections/videocollection.cpp:104 translators/tellicoimporter.cpp:410
msgid "Role"
msgstr "Personagem"
-#: collections/videocollection.cpp:106
+#: collections/videocollection.cpp:107
msgid "A table for the cast members, along with the roles they play"
-msgstr ""
-"Uma tabela para o elenco do filme, com o papel representado por cada um"
+msgstr "Uma tabela para o elenco do filme, com o papel representado por cada um"
-#: collections/videocollection.cpp:109
+#: collections/videocollection.cpp:110
msgid "Director"
msgstr "Diretor"
-#: collections/videocollection.cpp:127
+#: collections/videocollection.cpp:128
msgid "Composer"
msgstr "Compositor"
-#: collections/videocollection.cpp:133
+#: collections/videocollection.cpp:134
msgid "Studio"
msgstr "Estúdio"
-#: collections/videocollection.cpp:139
+#: collections/videocollection.cpp:140
msgid "Language Tracks"
msgstr "Línguas disponíveis"
-#: collections/videocollection.cpp:145
+#: collections/videocollection.cpp:146
msgid "Subtitle Languages"
msgstr "Língua das Legendas"
-#: collections/videocollection.cpp:151
+#: collections/videocollection.cpp:152
msgid "Audio Tracks"
msgstr "Áudios Disponíveis"
-#: collections/videocollection.cpp:157
+#: collections/videocollection.cpp:158
msgid "Running Time"
msgstr "Duração"
-#: collections/videocollection.cpp:159
+#: collections/videocollection.cpp:160
msgid "The running time of the video (in minutes)"
msgstr "Duração do vídeo (em minutos)"
-#: collections/videocollection.cpp:162
+#: collections/videocollection.cpp:163
msgid "Aspect Ratio"
msgstr "Formato da Imagem"
-#: collections/videocollection.cpp:167 fetch/amazonfetcher.cpp:815
-#: translators/tellicoimporter.cpp:958
+#: collections/videocollection.cpp:168 fetch/amazonfetcher.cpp:793
+#: translators/tellicoimporter.cpp:903
msgid "Widescreen"
msgstr "Tela Larga"
-#: collections/videocollection.cpp:172
+#: collections/videocollection.cpp:173
msgid "Black & White"
msgstr "Preto & Branco"
-#: collections/videocollection.cpp:173
+#: collections/videocollection.cpp:174
msgid "Color Mode"
msgstr "Formato de Cor"
-#: collections/videocollection.cpp:178 fetch/amazonfetcher.cpp:830
+#: collections/videocollection.cpp:179 fetch/amazonfetcher.cpp:808
msgid "Director's Cut"
msgstr "Cortes do Diretor"
-#: collections/videocollection.cpp:182 fetch/ibsfetcher.cpp:358
+#: collections/videocollection.cpp:183 fetch/ibsfetcher.cpp:358
msgid "Plot Summary"
msgstr "Resumo da Ação"
-#: collections/gamecollection.cpp:90 collections/videocollection.cpp:185
+#: collections/gamecollection.cpp:91 collections/videocollection.cpp:186
msgid "Personal Rating"
msgstr "Nota Pessoal"
-#: collections/boardgamecollection.cpp:102 collections/gamecollection.cpp:116
-#: collections/musiccollection.cpp:108 collections/videocollection.cpp:207
+#: collections/gamecollection.cpp:117 collections/musiccollection.cpp:109
+#: collections/videocollection.cpp:208
msgid "Cover"
msgstr "Capa"
#: collections/gamecollection.cpp:26
+msgid "Games"
+msgstr "Jogos"
+
+#: collections/gamecollection.cpp:27
msgid "My Games"
msgstr "Meus Jogos"
-#: collections/gamecollection.cpp:44
+#: collections/gamecollection.cpp:45
msgid "Xbox 360"
msgstr "Xbox 360"
-#: collections/gamecollection.cpp:44
+#: collections/gamecollection.cpp:45
msgid "Xbox"
msgstr "Xbox"
-#: collections/gamecollection.cpp:45
+#: collections/gamecollection.cpp:46
msgid "PlayStation3"
msgstr "PlayStation3"
-#: collections/gamecollection.cpp:45
+#: collections/gamecollection.cpp:46
msgid "PlayStation2"
msgstr "PlayStation2"
-#: collections/gamecollection.cpp:45
+#: collections/gamecollection.cpp:46
msgid "PlayStation"
msgstr "PlayStation"
-#: collections/gamecollection.cpp:45
+#: collections/gamecollection.cpp:46
msgid ""
"_: PlayStation Portable\n"
"PSP"
msgstr "PSP"
-#: collections/gamecollection.cpp:46
+#: collections/gamecollection.cpp:47
msgid "Nintendo Wii"
msgstr "Revolução"
-#: collections/gamecollection.cpp:46
+#: collections/gamecollection.cpp:47
msgid "Nintendo DS"
msgstr "Nintendo DS"
-#: collections/gamecollection.cpp:46
+#: collections/gamecollection.cpp:47
msgid "GameCube"
msgstr "GameCube"
-#: collections/gamecollection.cpp:46
+#: collections/gamecollection.cpp:47
msgid "Dreamcast"
msgstr "Dreamcast"
-#: collections/gamecollection.cpp:47
+#: collections/gamecollection.cpp:48
msgid "Game Boy Advance"
msgstr "Game Boy Advance"
-#: collections/gamecollection.cpp:47
+#: collections/gamecollection.cpp:48
msgid "Game Boy Color"
msgstr "Game Boy Color"
-#: collections/gamecollection.cpp:47
+#: collections/gamecollection.cpp:48
msgid "Game Boy"
msgstr "Game Boy"
-#: collections/gamecollection.cpp:48
+#: collections/gamecollection.cpp:49
msgid ""
"_: Windows Platform\n"
"Windows"
msgstr "Windows"
-#: collections/gamecollection.cpp:48
+#: collections/gamecollection.cpp:49
msgid "Mac OS"
msgstr "Mac OS"
-#: collections/gamecollection.cpp:48
-msgid "Linux"
-msgstr ""
-
-#: collections/gamecollection.cpp:49
+#: collections/gamecollection.cpp:50
msgid "Platform"
msgstr "Platforma"
-#: collections/boardgamecollection.cpp:55 collections/gamecollection.cpp:60
+#: collections/gamecollection.cpp:61
msgid "Release Year"
msgstr "Ano de Lançamento"
-#: collections/gamecollection.cpp:65
+#: collections/gamecollection.cpp:66
msgid ""
"_: Games - Publisher\n"
"Publisher"
msgstr "Editora"
-#: collections/gamecollection.cpp:71
+#: collections/gamecollection.cpp:72
msgid "Developer"
msgstr "Desenvolvedor"
-#: collections/gamecollection.cpp:80
+#: collections/gamecollection.cpp:81
msgid ""
"_: Video game ratings - Unrated, Adults Only, Mature, Teen, Everyone, Early "
"Childhood, Pending\n"
@@ -1011,381 +1013,363 @@ msgstr ""
"Não Classificado, Somente Adultos, Jovens, Adolescentes, Sem Censura, "
"Infantil, Pendente"
-#: collections/gamecollection.cpp:82
+#: collections/gamecollection.cpp:83
msgid "ESRB Rating"
msgstr "Classificação da ESRB"
-#: collections/gamecollection.cpp:95
+#: collections/gamecollection.cpp:96
msgid "Completed"
msgstr "Completado"
#: collections/cardcollection.cpp:26
+msgid "Cards"
+msgstr "Cartões"
+
+#: collections/cardcollection.cpp:27
msgid "My Cards"
msgstr "Meus Cartões"
-#: collections/cardcollection.cpp:43
+#: collections/cardcollection.cpp:44
msgid "Player"
msgstr "Jogador"
-#: collections/cardcollection.cpp:49
+#: collections/cardcollection.cpp:50
msgid "Team"
msgstr "Time"
-#: collections/cardcollection.cpp:55
+#: collections/cardcollection.cpp:56
msgid "Brand"
msgstr "Marca"
-#: collections/cardcollection.cpp:62
+#: collections/cardcollection.cpp:63
msgid "Card Number"
msgstr "Número do Cartão"
-#: collections/cardcollection.cpp:77
+#: collections/cardcollection.cpp:78
msgid "Card Type"
msgstr "Tipo do Cartão"
-#: collections/cardcollection.cpp:109
+#: collections/cardcollection.cpp:110
msgid "Front Image"
msgstr "Imagem Frontal"
-#: collections/cardcollection.cpp:112
+#: collections/cardcollection.cpp:113
msgid "Back Image"
msgstr "Imagem no Verso"
-#: collections/boardgamecollection.cpp:26
-#, fuzzy
-msgid "My Board Games"
-msgstr "Meus Jogos"
-
-#: collections/boardgamecollection.cpp:49
-msgid "Mechanism"
-msgstr ""
-
-#: collections/boardgamecollection.cpp:66
-msgid "Designer"
-msgstr ""
-
-#: collections/boardgamecollection.cpp:72
-msgid "Number of Players"
-msgstr ""
+#: collections/bibtexcollection.cpp:30
+msgid "Entries"
+msgstr "Registros"
-#: collectionfactory.cpp:125 collections/bibtexcollection.cpp:30
+#: collectionfactory.cpp:119 collections/bibtexcollection.cpp:31
msgid "Bibliography"
msgstr "Bibliografia"
-#: collections/bibtexcollection.cpp:72
+#: collections/bibtexcollection.cpp:73
msgid "Entry Type"
msgstr "Tipo de Registro"
-#: collections/bibtexcollection.cpp:76
+#: collections/bibtexcollection.cpp:77
msgid "These entry types are specific to bibtex. See the bibtex documentation."
msgstr ""
"Estes tipos de registro são específicos para o BibTeX. Consulte a "
"documentação do mesmo."
-#: collections/bibtexcollection.cpp:86
+#: collections/bibtexcollection.cpp:87
msgid "Bibtex Key"
msgstr "Chave do BibTeX"
-#: collections/bibtexcollection.cpp:92
+#: collections/bibtexcollection.cpp:93
msgid "Book Title"
msgstr "Título do livro"
-#: collections/bibtexcollection.cpp:98
+#: collections/bibtexcollection.cpp:99
msgid "Editor"
msgstr "Editor"
-#: collections/bibtexcollection.cpp:105
+#: collections/bibtexcollection.cpp:106
msgid "Organization"
msgstr "Organização"
-#: collections/bibtexcollection.cpp:127 fetch/srufetcher.cpp:412
-#: fetch/z3950fetcher.cpp:668
+#: collections/bibtexcollection.cpp:128 fetch/srufetcher.cpp:434
+#: fetch/z3950fetcher.cpp:670
msgid "Address"
msgstr "Endereço"
-#: collections/bibtexcollection.cpp:164 fetch/fetchmanager.cpp:73
-msgid "DOI"
-msgstr ""
-
#: collections/bibtexcollection.cpp:167
-msgid "Digital Object Identifier"
-msgstr ""
-
-#: collections/bibtexcollection.cpp:172
msgid "Month"
msgstr "Mês"
-#: collections/bibtexcollection.cpp:178 field.cpp:494
+#: collections/bibtexcollection.cpp:173 field.cpp:486
msgid "Number"
msgstr "Número "
-#: collections/bibtexcollection.cpp:183
+#: collections/bibtexcollection.cpp:178
msgid "How Published"
msgstr "Modo de publicação"
-#: collections/bibtexcollection.cpp:195
+#: collections/bibtexcollection.cpp:190
msgid "Chapter"
msgstr "Capítulo"
-#: collections/bibtexcollection.cpp:212
+#: collections/bibtexcollection.cpp:207
msgid "Cross-Reference"
msgstr "Referência cruzada"
-#: collections/bibtexcollection.cpp:232 fetch/entrezfetcher.cpp:486
-#: fetch/srufetcher.cpp:413 fetch/z3950fetcher.cpp:669
-#: translators/risimporter.cpp:269
+#: collections/bibtexcollection.cpp:222 fetch/entrezfetcher.cpp:464
+#: fetch/srufetcher.cpp:435 fetch/z3950fetcher.cpp:671
+#: translators/risimporter.cpp:246
msgid "Abstract"
msgstr "Resumo"
-#: collections/bibtexcollection.cpp:236
+#: collections/bibtexcollection.cpp:226
msgid "Notes"
msgstr "Notas"
#: collections/musiccollection.cpp:26
+msgid "Albums"
+msgstr "Álbuns"
+
+#: collections/musiccollection.cpp:27
msgid "My Music"
msgstr "Minhas Músicas"
-#: collections/musiccollection.cpp:37
+#: collections/musiccollection.cpp:38
msgid "Album"
msgstr "Álbum"
-#: collections/musiccollection.cpp:44 translators/freedbimporter.cpp:257
-#: translators/freedbimporter.cpp:375 translators/freedbimporter.cpp:446
+#: collections/musiccollection.cpp:45 translators/freedbimporter.cpp:257
+#: translators/freedbimporter.cpp:374 translators/freedbimporter.cpp:445
msgid "Compact Disc"
msgstr "CD"
-#: collections/musiccollection.cpp:44
+#: collections/musiccollection.cpp:45
msgid "Cassette"
msgstr "Cassete"
-#: collections/musiccollection.cpp:44
+#: collections/musiccollection.cpp:45
msgid "Vinyl"
msgstr "Vinil"
-#: collections/musiccollection.cpp:50 collections/musiccollection.cpp:77
-#: translators/audiofileimporter.cpp:165 translators/tellicoimporter.cpp:440
+#: collections/musiccollection.cpp:51 collections/musiccollection.cpp:78
+#: translators/audiofileimporter.cpp:151 translators/tellicoimporter.cpp:406
msgid "Artist"
msgstr "Artista"
-#: collections/musiccollection.cpp:56
+#: collections/musiccollection.cpp:57
msgid "Label"
msgstr "Selo"
-#: collections/musiccollection.cpp:73
+#: collections/musiccollection.cpp:74 translators/audiofileimporter.cpp:146
msgid "Tracks"
msgstr "Pistas"
-#: collections/musiccollection.cpp:78 translators/audiofileimporter.cpp:166
-#: translators/tellicoimporter.cpp:441
+#: collections/musiccollection.cpp:79 translators/audiofileimporter.cpp:152
+#: translators/tellicoimporter.cpp:407
msgid "Length"
msgstr "Duração"
-#: core/tellico_config.cpp:134
+#: core/tellico_config.cpp:118
msgid ""
"a,an,and,as,at,but,by,for,from,in,into,nor,of,off,on,onto,or,out,over,the,to,"
"up,with"
msgstr "um,uma,e,em,de,o,a "
-#: core/tellico_config.cpp:137
+#: core/tellico_config.cpp:121
msgid "the"
msgstr "o,a,os,as "
-#: core/tellico_config.cpp:140
+#: core/tellico_config.cpp:124
msgid "jr.,jr,iii,iv"
msgstr "jr.,jr,iii,iv "
-#: core/tellico_config.cpp:143
+#: core/tellico_config.cpp:127
msgid "de,van,der,van der,von"
msgstr "de,o,a "
-#: fetch/isbndbfetcher.cpp:54
+#: fetch/isbndbfetcher.cpp:51
msgid "ISBNdb.com"
msgstr "ISBNdb.com"
#: fetch/amazonfetcher.cpp:192 fetch/animenfofetcher.cpp:75
-#: fetch/arxivfetcher.cpp:83 fetch/bibsonomyfetcher.cpp:66
-#: fetch/citebasefetcher.cpp:67 fetch/crossreffetcher.cpp:89
-#: fetch/discogsfetcher.cpp:102 fetch/ibsfetcher.cpp:72
-#: fetch/isbndbfetcher.cpp:79 fetch/yahoofetcher.cpp:94
+#: fetch/ibsfetcher.cpp:72 fetch/isbndbfetcher.cpp:76
+#: fetch/yahoofetcher.cpp:94
msgid "%1 does not allow searching for this collection type."
msgstr "%1 não permite a pesquisa para este tipo de coleção."
-#: fetch/amazonfetcher.cpp:562 fetch/isbndbfetcher.cpp:247
-msgid "Results from %1: %2/%3"
-msgstr "Resultados de %1 : %2/%3"
-
-#: fetch/animenfofetcher.cpp:370 fetch/arxivfetcher.cpp:355
-#: fetch/bibsonomyfetcher.cpp:198 fetch/citebasefetcher.cpp:237
-#: fetch/entrezfetcher.cpp:466 fetch/ibsfetcher.cpp:407
-#: fetch/isbndbfetcher.cpp:342 fetch/yahoofetcher.cpp:392
+#: fetch/animenfofetcher.cpp:370 fetch/entrezfetcher.cpp:444
+#: fetch/ibsfetcher.cpp:407 fetch/isbndbfetcher.cpp:258
+#: fetch/yahoofetcher.cpp:393
msgid "This source has no options."
-msgstr "Esta fonte não tem opções"
+msgstr "Esta fonte não tem opções."
-#: fetch/entrezfetcher.cpp:56
+#: fetch/entrezfetcher.cpp:55
msgid "Entrez Database"
msgstr "Banco de Dados Entrez"
-#: fetch/entrezfetcher.cpp:485
+#: fetch/entrezfetcher.cpp:463
msgid "Institution"
msgstr "Instituição"
-#: fetch/z3950connection.cpp:132
+#: fetch/z3950connection.cpp:117
msgid "Query error!"
msgstr "Erro na pesquisa!"
-#: fetch/z3950connection.cpp:173
+#: fetch/z3950connection.cpp:158
msgid "Connection search error %1: %2"
msgstr "Erro na procura da conexão %1: %2"
-#: fetch/z3950connection.cpp:250
+#: fetch/z3950connection.cpp:235
msgid "Record syntax error"
msgstr "Erro de Sintaxe no Registro"
-#: fetch/z3950connection.cpp:345
+#: fetch/z3950connection.cpp:331
msgid "Connection error %1: %2"
msgstr "Erro de conexão %1: %2"
-#: fetch/srufetcher.cpp:72
+#: fetch/srufetcher.cpp:65
msgid "SRU Server"
msgstr "Servidor SRU"
-#: fetch/srufetcher.cpp:405 z3950.cpp:2
+#: fetch/srufetcher.cpp:334 z3950.cpp:2
msgid "Library of Congress (US)"
msgstr "Biblioteca do Congresso (Estados Unidos)"
-#: fetch/imdbfetcher.cpp:1121 fetch/srufetcher.cpp:428
-#: fetch/z3950fetcher.cpp:504
+#: fetch/imdbfetcher.cpp:1099 fetch/srufetcher.cpp:349
+#: fetch/z3950fetcher.cpp:506
msgid "Hos&t: "
-msgstr "&Servidor:"
+msgstr "&Servidor: "
-#: fetch/srufetcher.cpp:435 fetch/z3950fetcher.cpp:510
+#: fetch/srufetcher.cpp:355 fetch/z3950fetcher.cpp:512
msgid "Enter the host name of the server."
-msgstr "Insira o nome do servidor"
+msgstr "Insira o nome do servidor."
-#: fetch/srufetcher.cpp:440 fetch/z3950fetcher.cpp:515
+#: fetch/srufetcher.cpp:360 fetch/z3950fetcher.cpp:517
msgid "&Port: "
-msgstr "&Porta:"
+msgstr "&Porta: "
-#: fetch/srufetcher.cpp:445 fetch/z3950fetcher.cpp:520
+#: fetch/srufetcher.cpp:365 fetch/z3950fetcher.cpp:522
#, c-format
msgid "Enter the port number of the server. The default is %1."
msgstr "Insira o número da porta do servidor z39.50. A porta padrão é %1."
-#: fetch/srufetcher.cpp:450
+#: fetch/srufetcher.cpp:370
msgid "Path: "
-msgstr "Caminho:"
+msgstr "Caminho: "
-#: fetch/srufetcher.cpp:455
+#: fetch/srufetcher.cpp:375
msgid "Enter the path to the database used by the server."
-msgstr "Insira o caminho para o banco de dados utilizado pelo servidor"
+msgstr "Insira o caminho para o banco de dados utilizado pelo servidor."
-#: fetch/srufetcher.cpp:460
+#: fetch/srufetcher.cpp:380
msgid "Format: "
-msgstr "Formato:"
+msgstr "Formato: "
-#: fetch/srufetcher.cpp:468
+#: fetch/srufetcher.cpp:387
msgid "Enter the result format used by the server."
msgstr "Informe o formato de resultado utilizado pelo servidor."
-#: fetch/yahoofetcher.cpp:54
+#: fetch/yahoofetcher.cpp:53
msgid "Yahoo! Audio Search"
msgstr "Yahoo! Audio Search"
-#: fetch/amazonfetcher.cpp:730 fetch/discogsfetcher.cpp:539
-#: fetch/yahoofetcher.cpp:242
+#: fetch/amazonfetcher.cpp:709 fetch/yahoofetcher.cpp:243
msgid "The cover image could not be loaded."
msgstr "A imagem da capa não pôde ser carregada."
-#: fetch/amazonfetcher.cpp:53
+#: fetch/amazonfetcher.cpp:52
msgid "Amazon Link"
msgstr "Amazon Link"
-#: fetch/amazonfetcher.cpp:62
+#: fetch/amazonfetcher.cpp:61
msgid "Amazon (US)"
msgstr "Amazon (Estados Unidos)"
-#: fetch/amazonfetcher.cpp:65
+#: fetch/amazonfetcher.cpp:64
msgid "Amazon (UK)"
msgstr "Amazon (Reino Unido)"
-#: fetch/amazonfetcher.cpp:68
+#: fetch/amazonfetcher.cpp:67
msgid "Amazon (Germany)"
msgstr "Amazon (Alemanha)"
-#: fetch/amazonfetcher.cpp:71
+#: fetch/amazonfetcher.cpp:70
msgid "Amazon (Japan)"
msgstr "Amazon (Japão)"
-#: fetch/amazonfetcher.cpp:74
+#: fetch/amazonfetcher.cpp:73
msgid "Amazon (France)"
msgstr "Amazon (França)"
-#: fetch/amazonfetcher.cpp:77
+#: fetch/amazonfetcher.cpp:76
msgid "Amazon (Canada)"
msgstr "Amazon (Canadá)"
-#: fetch/amazonfetcher.cpp:99
+#: fetch/amazonfetcher.cpp:98
msgid "Amazon.com Web Services"
msgstr "Serviços Web da Amazon.com"
-#: fetch/amazonfetcher.cpp:848
+#: fetch/amazonfetcher.cpp:543
+msgid "Results from %1: %2/%3"
+msgstr "Resultados de %1 : %2/%3"
+
+#: fetch/amazonfetcher.cpp:826
msgid "Co&untry: "
msgstr "&País"
-#: fetch/amazonfetcher.cpp:851
+#: fetch/amazonfetcher.cpp:830
msgid "United States"
msgstr "Estados Unidos"
-#: fetch/amazonfetcher.cpp:852
+#: fetch/amazonfetcher.cpp:831
msgid "United Kingdom"
msgstr "Reino Unido"
-#: fetch/amazonfetcher.cpp:853
+#: fetch/amazonfetcher.cpp:832
msgid "Germany"
msgstr "Alemanha"
-#: fetch/amazonfetcher.cpp:854
+#: fetch/amazonfetcher.cpp:833
msgid "Japan"
msgstr "Japão"
-#: fetch/amazonfetcher.cpp:855
+#: fetch/amazonfetcher.cpp:834
msgid "France"
msgstr "França"
-#: fetch/amazonfetcher.cpp:856
+#: fetch/amazonfetcher.cpp:835
msgid "Canada"
msgstr "Canadá"
-#: fetch/amazonfetcher.cpp:860
+#: fetch/amazonfetcher.cpp:839
msgid ""
"Amazon.com provides data from several different localized sites. Choose the "
"one you wish to use for this data source."
msgstr ""
-"Amazon.com disponibiliza dados de vários sites em diferentes "
-"localizações. Escolha o que deseja utilizar como fonte de dados."
+"Amazon.com disponibiliza dados de vários sites em diferentes localizações. "
+"Escolha o que deseja utilizar como fonte de dados."
-#: fetch/amazonfetcher.cpp:866
+#: fetch/amazonfetcher.cpp:845
msgid "&Image size: "
msgstr "&Tamanho da Imagem"
-#: fetch/amazonfetcher.cpp:869
+#: fetch/amazonfetcher.cpp:849
msgid "Small Image"
msgstr "Imagem Pequena"
-#: fetch/amazonfetcher.cpp:870
+#: fetch/amazonfetcher.cpp:850
msgid "Medium Image"
msgstr "Imagem Média"
-#: fetch/amazonfetcher.cpp:871
+#: fetch/amazonfetcher.cpp:851
msgid "Large Image"
msgstr "Imagem Grande"
-#: fetch/amazonfetcher.cpp:872
+#: fetch/amazonfetcher.cpp:852
msgid "No Image"
msgstr "Sem Imagem"
-#: fetch/amazonfetcher.cpp:875 fetch/discogsfetcher.cpp:683
-#: fetch/imdbfetcher.cpp:1146
+#: fetch/amazonfetcher.cpp:855 fetch/imdbfetcher.cpp:1124
msgid ""
"The cover image may be downloaded as well. However, too many large images in "
"the collection may degrade performance."
@@ -1393,39 +1377,39 @@ msgstr ""
"A imagem da capa pode obtida da mesma forma. No entanto, imagens grandes na "
"coleção podem degradar o desempenho."
-#: fetch/amazonfetcher.cpp:881
+#: fetch/amazonfetcher.cpp:861
msgid "&Associate's ID: "
msgstr "Identidade &associada: "
-#: fetch/amazonfetcher.cpp:886
+#: fetch/amazonfetcher.cpp:866
msgid ""
"The associate's id identifies the person accessing the Amazon.com Web "
"Services, and is included in any links to the Amazon.com site."
msgstr ""
-"A identidade associada identifica a pessoa acessando os serviços Web "
-"Amazon.com, e será incluída em todos os links para o site Amazon.com."
+"A identidade associada identifica a pessoa acessando os serviços Web Amazon."
+"com, e será incluída em todos os links para o site Amazon.com."
-#: fetch/z3950fetcher.cpp:79 fetch/z3950fetcher.cpp:755
+#: fetch/z3950fetcher.cpp:79 fetch/z3950fetcher.cpp:757
msgid "z39.50 Server"
msgstr "Servidor z39.50"
-#: fetch/z3950fetcher.cpp:494
+#: fetch/z3950fetcher.cpp:496
msgid "Use preset &server:"
-msgstr "Usar &servidor pré-definido"
+msgstr "Usar &servidor pré-definido:"
-#: fetch/z3950fetcher.cpp:525
+#: fetch/z3950fetcher.cpp:527
msgid "&Database: "
-msgstr "Base de &dados:"
+msgstr "Base de &dados: "
-#: fetch/z3950fetcher.cpp:530
+#: fetch/z3950fetcher.cpp:532
msgid "Enter the database name used by the server."
msgstr "Insira o nome da base de dados utilizado pelo servidor."
-#: fetch/z3950fetcher.cpp:535
+#: fetch/z3950fetcher.cpp:537
msgid "Ch&aracter set: "
msgstr "Conjunto de c&aracteres: "
-#: fetch/z3950fetcher.cpp:544
+#: fetch/z3950fetcher.cpp:546
msgid ""
"Enter the character set encoding used by the z39.50 server. The most likely "
"choice is MARC-8, although ISO-8859-1 is common as well."
@@ -1433,15 +1417,15 @@ msgstr ""
"Insira o conjunto de caracteres utilizado pelo servidor z39.50. A escolha "
"mais provável é MARC-8, apesar do ISO-8859-1 ser tão comum quanto."
-#: fetch/z3950fetcher.cpp:550
+#: fetch/z3950fetcher.cpp:552
msgid "&Format: "
-msgstr "&Formato:"
+msgstr "&Formato: "
-#: fetch/z3950fetcher.cpp:553
+#: fetch/z3950fetcher.cpp:555
msgid "Auto-detect"
msgstr "Detectar automaticamente"
-#: fetch/z3950fetcher.cpp:561
+#: fetch/z3950fetcher.cpp:563
msgid ""
"Enter the data format used by the z39.50 server. Tellico will attempt to "
"automatically detect the best setting if <i>auto-detect</i> is selected."
@@ -1450,15 +1434,15 @@ msgstr ""
"tentar detectar a melhor configuração se <i>Detectar automaticamente</i> "
"estiver selecionado."
-#: fetch/z3950fetcher.cpp:567
+#: fetch/z3950fetcher.cpp:569
msgid "&User: "
-msgstr "&Usuário:"
+msgstr "&Usuário: "
-#: fetch/z3950fetcher.cpp:570 fetch/z3950fetcher.cpp:582
+#: fetch/z3950fetcher.cpp:572 fetch/z3950fetcher.cpp:584
msgid "Optional"
msgstr "Opcional"
-#: fetch/z3950fetcher.cpp:573
+#: fetch/z3950fetcher.cpp:575
msgid ""
"Enter the authentication user name used by the z39.50 database. Most servers "
"do not need one."
@@ -1466,21 +1450,21 @@ msgstr ""
"Insira o nome da base de dados utilizada pelo servidor z39.50. A maioria dos "
"servidores não precisam dele."
-#: fetch/z3950fetcher.cpp:579
+#: fetch/z3950fetcher.cpp:581
msgid "Pass&word: "
-msgstr "&Senha:"
+msgstr "&Senha: "
-#: fetch/z3950fetcher.cpp:586
+#: fetch/z3950fetcher.cpp:588
msgid ""
"Enter the authentication password used by the z39.50 database. Most servers "
"do not need one. The password will be saved in plain text in the Tellico "
"configuration file."
msgstr ""
"Insira a senha utilizada para a base de dados z39.50. A maior parte dos "
-"servidores não precisam dela. A senha será salva em formato texto no "
-"arquivo de configuração do Tellico."
+"servidores não precisam dela. A senha será salva em formato texto no arquivo "
+"de configuração do Tellico."
-#: fetch/z3950fetcher.cpp:670
+#: fetch/z3950fetcher.cpp:672
msgid "Illustrator"
msgstr "Ilustrador"
@@ -1488,31 +1472,28 @@ msgstr "Ilustrador"
msgid "External Application"
msgstr "Aplicativo Externo"
-#: configdialog.cpp:363 fetch/execexternalfetcher.cpp:346
-#: fetch/gcstarpluginfetcher.cpp:398 translators/csvimporter.cpp:226
+#: configdialog.cpp:354 fetch/execexternalfetcher.cpp:336
+#: translators/csvimporter.cpp:171
msgid "Collection &type:"
msgstr "&Tipo de coleção:"
-#: fetch/execexternalfetcher.cpp:351
-msgid ""
-"Set the collection type of the data returned from the external application."
-msgstr ""
-"Especifique o tipo de coleção dos dados retornados do aplicativo externo."
+#: fetch/execexternalfetcher.cpp:341
+msgid "Set the collection type of the data returned from the external application."
+msgstr "Especifique o tipo de coleção dos dados retornados do aplicativo externo."
-#: fetch/execexternalfetcher.cpp:356
+#: fetch/execexternalfetcher.cpp:346
msgid "&Result type: "
-msgstr "Tipo de &Resultado:"
+msgstr "Tipo de &Resultado: "
-#: fetch/execexternalfetcher.cpp:365
+#: fetch/execexternalfetcher.cpp:355
msgid "Set the result type of the data returned from the external application."
-msgstr ""
-"Especifique o tipo de resultado dos dados retornados do aplicativo externo."
+msgstr "Especifique o tipo de resultado dos dados retornados do aplicativo externo."
-#: fetch/execexternalfetcher.cpp:370
+#: fetch/execexternalfetcher.cpp:360
msgid "Application &path: "
-msgstr "&Caminho do Aplicativo:"
+msgstr "&Caminho do aplicativo: "
-#: fetch/execexternalfetcher.cpp:375
+#: fetch/execexternalfetcher.cpp:365
msgid ""
"Set the path of the application to run that should output a valid Tellico "
"data file."
@@ -1520,11 +1501,11 @@ msgstr ""
"Especifique o caminho do aplicativo a ser executado que deve gerar um "
"arquivo de dados Tellico válido."
-#: fetch/execexternalfetcher.cpp:380
+#: fetch/execexternalfetcher.cpp:370
msgid "Select the search keys supported by the data source."
msgstr "Selecione as chaves de procura suportadas pela fonte de dados."
-#: fetch/execexternalfetcher.cpp:381
+#: fetch/execexternalfetcher.cpp:371
msgid ""
"Add any arguments that may be needed. <b>%1</b> will be replaced by the "
"search term."
@@ -1532,27 +1513,26 @@ msgstr ""
"Adicione todos os argumentos necessários. <b> %1 </b> vai ser substituído "
"pelo termo a ser pesquisado."
-#: fetch/execexternalfetcher.cpp:382
+#: fetch/execexternalfetcher.cpp:372
msgid "Arguments"
msgstr "Argumentos"
-#: fetch/execexternalfetcher.cpp:415 newstuff/dialog.cpp:152
+#: fetch/execexternalfetcher.cpp:405 newstuff/dialog.cpp:151
msgid "Update"
msgstr "Atualizar"
#. TRANSLATORS: Do not translate %{author}.
-#: fetch/execexternalfetcher.cpp:423
+#: fetch/execexternalfetcher.cpp:413
msgid ""
"<p>Enter the arguments which should be used to search for available updates "
"to an entry.</p><p>The format is the same as for <i>Dependent</i> fields, "
"where field values are contained inside braces, such as <i>%{author}</i>. "
"See the documentation for details.</p>"
msgstr ""
-"<p>Forneça os argumentos que devem ser usados para procurar por "
-"atualizações disponíveis para um registro.</p><p>O formato é o mesmo dos "
-"campos <i>Dependentes</i>, onde os valores dos campos são contidos entre "
-"colchetes, como <i>%{author}</i>. Veja a documentação para maiores "
-"detalhes.</p>"
+"<p>Forneça os argumentos que devem ser usados para procurar por atualizações "
+"disponíveis para um registro.</p><p>O formato é o mesmo dos campos "
+"<i>Dependentes</i>, onde os valores dos campos são contidos entre colchetes, "
+"como <i>%{author}</i>. Veja a documentação para maiores detalhes.</p>"
#: fetch/configwidget.cpp:29
msgid "Source Options"
@@ -1562,7 +1542,7 @@ msgstr "Opções da Fonte"
msgid "Available Fields"
msgstr "Campos Disponíveis"
-#: fetch/imdbfetcher.cpp:89
+#: fetch/imdbfetcher.cpp:88
msgid "Internet Movie Database"
msgstr "Base de dados de filmes na Internet"
@@ -1571,8 +1551,7 @@ msgid "Select IMDB Result"
msgstr "Selecione o resultado IMDB"
#: fetch/imdbfetcher.cpp:581
-msgid ""
-"<qt>Your search returned multiple matches. Please select one below.</qt>"
+msgid "<qt>Your search returned multiple matches. Please select one below.</qt>"
msgstr ""
"<qt>A sua pesquisa retornou vários resultados. Por favor selecione um dos "
"seguintes.</qt>"
@@ -1581,24 +1560,24 @@ msgstr ""
msgid "<qt>Select a search result.</qt>"
msgstr "<qt>Selecione um resultado da pesquisa.</qt>"
-#: fetch/imdbfetcher.cpp:688 fetch/imdbfetcher.cpp:1185
+#: fetch/imdbfetcher.cpp:688 fetch/imdbfetcher.cpp:1163
msgid "IMDB Link"
msgstr "Link IMDB"
-#: fetch/animenfofetcher.cpp:260 fetch/imdbfetcher.cpp:746
-#: fetch/imdbfetcher.cpp:1187
+#: fetch/animenfofetcher.cpp:260 fetch/imdbfetcher.cpp:741
+#: fetch/imdbfetcher.cpp:1165
msgid "Alternative Titles"
msgstr "Títulos alternativos"
-#: fetch/imdbfetcher.cpp:947 fetch/imdbfetcher.cpp:1186
+#: fetch/imdbfetcher.cpp:932 fetch/imdbfetcher.cpp:1164
msgid "IMDB Rating"
msgstr "Classificação IMDB"
-#: fetch/imdbfetcher.cpp:1065 fetch/imdbfetcher.cpp:1188
+#: fetch/imdbfetcher.cpp:1043 fetch/imdbfetcher.cpp:1166
msgid "Certifications"
msgstr "Certificações"
-#: fetch/imdbfetcher.cpp:1126
+#: fetch/imdbfetcher.cpp:1104
msgid ""
"The Internet Movie Database uses several different servers. Choose the one "
"you wish to use."
@@ -1606,11 +1585,11 @@ msgstr ""
"A base de dados de filmes na Internet (IMDB) utiliza vários servidores "
"diferentes. Escolha o que deseja utilizar."
-#: fetch/imdbfetcher.cpp:1132
+#: fetch/imdbfetcher.cpp:1110
msgid "&Maximum cast: "
-msgstr "Elenco &máximo:"
+msgstr "Elenco &máximo: "
-#: fetch/imdbfetcher.cpp:1137
+#: fetch/imdbfetcher.cpp:1115
msgid ""
"The list of cast members may include many people. Set the maximum number "
"returned from the search."
@@ -1618,40 +1597,31 @@ msgstr ""
"A lista de membros do elenco pode incluir muitas pessoas. Especifique o "
"número máximo a ser retornado da pesquisa."
-#: fetch/discogsfetcher.cpp:679 fetch/imdbfetcher.cpp:1142
+#: fetch/imdbfetcher.cpp:1120
msgid "Download cover &image"
msgstr "Efetuar o Download da &Imagem da Capa"
-#: fetch/ibsfetcher.cpp:47
+#: fetch/ibsfetcher.cpp:46
msgid "Internet Bookshop (ibs.it)"
msgstr "Internet Bookshop (ibs.it)"
-#: fetch/fetchmanager.cpp:69
+#: fetch/fetchmanager.cpp:63
msgid "Person"
msgstr "Pessoa"
-#: fetch/fetchmanager.cpp:70
+#: fetch/fetchmanager.cpp:64
msgid "ISBN"
msgstr "ISBN"
-#: fetch/fetchmanager.cpp:71
-#, fuzzy
-msgid "UPC/EAN"
+#: fetch/fetchmanager.cpp:65
+msgid "UPC"
msgstr "UPC"
-#: fetch/fetchmanager.cpp:72
+#: fetch/fetchmanager.cpp:66
msgid "Keyword"
msgstr "Palavra chave"
-#: fetch/fetchmanager.cpp:74 translators/pdfimporter.cpp:173
-msgid "arXiv ID"
-msgstr ""
-
-#: fetch/fetchmanager.cpp:75
-msgid "Pubmed ID"
-msgstr ""
-
-#: fetch/fetchmanager.cpp:76
+#: fetch/fetchmanager.cpp:67
msgid "Raw Query"
msgstr "Pesquisa não refinada"
@@ -1667,128 +1637,49 @@ msgstr "Distribuidor"
msgid "Episodes"
msgstr "Episódios"
-#: fetch/arxivfetcher.cpp:53
-msgid "arXiv.org"
-msgstr ""
-
-#: fetch/crossreffetcher.cpp:83
-msgid "%1 requires a username and password."
-msgstr ""
-
-#: fetch/crossreffetcher.cpp:332
-msgid ""
-"CrossRef requires an account for access. Please read the terms and "
-"conditions and <a href='http://www.crossref.org/requestaccount/'>request an "
-"account</a>. Enter your OpenURL account information below."
-msgstr ""
-
-#: fetch/crossreffetcher.cpp:343
-#, fuzzy
-msgid "&Username: "
-msgstr "&Usuário:"
-
-#: fetch/crossreffetcher.cpp:348
-#, fuzzy
-msgid ""
-"A username and password is required to access the CrossRef service. The "
-"password is stored as plain text in the Tellico configuration file."
-msgstr ""
-"Insira a senha utilizada para a base de dados z39.50. A maior parte dos "
-"servidores não precisam dela. A senha será salva em formato texto no "
-"arquivo de configuração do Tellico."
-
-#: fetch/crossreffetcher.cpp:354
-#, fuzzy
-msgid "&Password: "
-msgstr "&Senha:"
-
-#: fetch/gcstarpluginfetcher.cpp:190
-#, fuzzy
-msgid "GCstar Plugin"
-msgstr "Elenco"
-
-#: fetch/gcstarpluginfetcher.cpp:404
-#, fuzzy
-msgid "Set the collection type of the data returned from the plugin."
-msgstr ""
-"Especifique o tipo de coleção dos dados retornados do aplicativo externo."
-
-#: fetch/gcstarpluginfetcher.cpp:409
-msgid "&Plugin: "
-msgstr ""
-
-#: fetch/gcstarpluginfetcher.cpp:415
-#, fuzzy
-msgid "Select the GCstar plugin used for the data source."
-msgstr "Selecione as chaves de procura suportadas pela fonte de dados."
-
-#: fetch/gcstarpluginfetcher.cpp:420
-#, fuzzy
-msgid "Author: "
-msgstr "Autor"
-
-#: fetch/discogsfetcher.cpp:58
-#, fuzzy
-msgid "Discogs Audio Search"
-msgstr "Yahoo! Audio Search"
-
-#: fetch/discogsfetcher.cpp:668
-msgid "API &key: "
-msgstr ""
-
-#: fetch/discogsfetcher.cpp:674
-msgid ""
-"With your discogs.com account you receive an API key for the usage of their "
-"XML-based interface (See http://www.discogs.com/help/api)."
-msgstr ""
-
-#: fetch/discogsfetcher.cpp:718
-msgid "Discogs Link"
-msgstr ""
-
-#: newstuff/dialog.cpp:94
+#: newstuff/dialog.cpp:93
msgid "Get Hot New Stuff"
msgstr "Novidades Quentes"
-#: newstuff/dialog.cpp:114
+#: newstuff/dialog.cpp:113
msgid "Version"
msgstr "Versão"
-#: newstuff/dialog.cpp:116
+#: newstuff/dialog.cpp:115
msgid "Downloads"
msgstr "Downloads"
-#: newstuff/dialog.cpp:117
+#: newstuff/dialog.cpp:116
msgid "Release Date"
msgstr "Data de Lançamento"
-#: newstuff/dialog.cpp:121
+#: newstuff/dialog.cpp:120
msgid ""
"This is a list of all the items available for download. Previously installed "
"items have a checkmark icon, while items with new version available have an "
"update icon"
msgstr ""
"Essa é uma lista de todos os itens disponíveis para download. Itens "
-"previamente instalados são mostrados com um tique, enquanto itens que "
-"tenham novas versões disponíveis tem um ícone de atualização."
+"previamente instalados são mostrados com um tique, enquanto itens que tenham "
+"novas versões disponíveis tem um ícone de atualização"
-#: newstuff/dialog.cpp:137
+#: newstuff/dialog.cpp:136
msgid "The name and license of the selected item"
msgstr "O nome e a licença do item selecionado"
-#: newstuff/dialog.cpp:140
+#: newstuff/dialog.cpp:139
msgid "The author of the selected item"
msgstr "O autor do item selecionado"
-#: newstuff/dialog.cpp:142 newstuff/dialog.cpp:396
+#: newstuff/dialog.cpp:141 newstuff/dialog.cpp:395
msgid "Install"
msgstr "Instalar"
-#: newstuff/dialog.cpp:161
+#: newstuff/dialog.cpp:160
msgid "Download and install the selected template."
msgstr "Baixa e instala o modelo selecionado."
-#: newstuff/dialog.cpp:164
+#: newstuff/dialog.cpp:163
msgid ""
"Download and install the selected script. Some scripts may need to be "
"configured after being installed."
@@ -1796,83 +1687,35 @@ msgstr ""
"Baixa e instala o script selecionado. Alguns scripts podem precisar ser "
"configurados após a instalação."
-#: newstuff/dialog.cpp:194
+#: newstuff/dialog.cpp:193
msgid "A description of the selected item is shown here."
msgstr "Uma descrição do item selecionado é mostrada aqui."
-#: newstuff/dialog.cpp:224
+#: newstuff/dialog.cpp:223
msgid "Downloading information..."
msgstr "Baixando informações..."
-#: controller.cpp:135 fetchdialog.cpp:226 fetchdialog.cpp:333
-#: fetchdialog.cpp:451 fetchdialog.cpp:506 newstuff/dialog.cpp:297
-#: newstuff/dialog.cpp:324 newstuff/dialog.cpp:434 statusbar.cpp:83
+#: controller.cpp:134 fetchdialog.cpp:215 fetchdialog.cpp:294
+#: fetchdialog.cpp:411 fetchdialog.cpp:466 newstuff/dialog.cpp:296
+#: newstuff/dialog.cpp:323 newstuff/dialog.cpp:433 statusbar.cpp:83
msgid "Ready."
msgstr "Pronto."
-#: newstuff/dialog.cpp:396
+#: newstuff/dialog.cpp:395
msgid ""
"_: Update Stuff\n"
"Update"
msgstr "Atualização"
-#: newstuff/dialog.cpp:413
+#: newstuff/dialog.cpp:412
msgid "Installing item..."
msgstr "Instalando item..."
-#: translators/bibteximporter.cpp:79
-#, fuzzy
-msgid "No valid bibtex entries were found"
-msgstr "Nenhum registro válido do BibTeX encontrado no arquivo - %1"
-
-#: translators/bibteximporter.cpp:96
+#: translators/bibteximporter.cpp:58
#, c-format
msgid "No valid bibtex entries were found in file - %1"
msgstr "Nenhum registro válido do BibTeX encontrado no arquivo - %1"
-#: translators/bibtexexporter.cpp:200 translators/bibteximporter.cpp:286
-msgid "Bibtex Options"
-msgstr "Opções do BibTeX"
-
-#: translators/bibteximporter.cpp:287
-#, fuzzy
-msgid "Use Unicode (UTF-8) encoding"
-msgstr "Codificar em Unicode (UTF-8)"
-
-#: translators/bibteximporter.cpp:288
-#, fuzzy
-msgid "Read the imported file in Unicode (UTF-8)."
-msgstr "Codificar o arquivo exportado em Unicode (UTF-8)."
-
-#: translators/bibteximporter.cpp:289
-#, fuzzy
-msgid "Use user locale (%1) encoding"
-msgstr "Codificar na localização do usuário (%1)"
-
-#: translators/bibteximporter.cpp:293
-#, fuzzy
-msgid "Read the imported file in the local encoding."
-msgstr "Codifica o arquivo exportado no formato local."
-
-#: translators/tellicozipexporter.cpp:35
-msgid "Tellico Zip File"
-msgstr "Arquivo Zip Tellico"
-
-#: importdialog.cpp:245 mainwindow.cpp:1101 mainwindow.cpp:1267
-#: translators/tellicozipexporter.cpp:39
-msgid "*.tc *.bc|Tellico Files (*.tc)"
-msgstr "*.tc *.bc|Arquivos Tellico (*.tc)"
-
-#: configdialog.cpp:1017 importdialog.cpp:297 mainwindow.cpp:1105
-#: mainwindow.cpp:1269 reportdialog.cpp:195 translators/bibtexexporter.cpp:52
-#: translators/bibtexmlexporter.cpp:40 translators/csvexporter.cpp:44
-#: translators/gcfilmsexporter.cpp:41 translators/htmlexporter.cpp:89
-#: translators/onixexporter.cpp:67 translators/pilotdbexporter.cpp:47
-#: translators/tellicoxmlexporter.cpp:60 translators/tellicozipexporter.cpp:39
-#: translators/xsltexporter.cpp:41 translators/xsltimporter.cpp:105
-msgid "*|All Files"
-msgstr "*|Todos os Arquivos"
-
#: translators/alexandriaexporter.cpp:43
msgid "Alexandria"
msgstr "Alexandria"
@@ -1885,21 +1728,21 @@ msgstr ""
"<qt>Uma biblioteca do Alexandria chamada <i>%1</i> já existe. Quaisquer "
"livros existentes nesta biblioteca podem ser sobrescritos.</qt>"
-#: filehandler.cpp:141 translators/tellicoimporter.cpp:113
-#: translators/xmlimporter.cpp:43 translators/xmlimporter.cpp:60
+#: filehandler.cpp:138 translators/tellicoimporter.cpp:108
+#: translators/xmlimporter.cpp:42 translators/xmlimporter.cpp:56
msgid "There is an XML parsing error in line %1, column %2."
msgstr "Há um erro de análise XML na linha %1, coluna %2."
-#: filehandler.cpp:143 translators/tellicoimporter.cpp:115
-#: translators/xmlimporter.cpp:45 translators/xmlimporter.cpp:62
+#: filehandler.cpp:140 translators/tellicoimporter.cpp:110
+#: translators/xmlimporter.cpp:44 translators/xmlimporter.cpp:58
msgid "The error message from Qt is:"
msgstr "A mensagem de erro do Qt é:"
-#: translators/tellicoimporter.cpp:152
+#: translators/tellicoimporter.cpp:147
msgid "It is from a future version of Tellico."
msgstr "Isto é para uma futura versão do Tellico."
-#: translators/tellicoimporter.cpp:162
+#: translators/tellicoimporter.cpp:156
msgid ""
"Tellico is converting the file to a more recent document format. Information "
"loss may occur if an older version of Tellico is used to read this file in "
@@ -1909,32 +1752,32 @@ msgstr ""
"perda de informações se este arquivo for lido no futuro por uma versão "
"antiga do Tellico."
-#: translators/bibtexhandler.cpp:245 translators/risimporter.cpp:286
-#: translators/risimporter.cpp:290 translators/tellicoimporter.cpp:367
+#: translators/bibtexhandler.cpp:245 translators/risimporter.cpp:263
+#: translators/risimporter.cpp:267 translators/tellicoimporter.cpp:333
msgid "Unknown"
msgstr "Desconhecido"
-#: translators/tellicoimporter.cpp:777
+#: translators/tellicoimporter.cpp:723
msgid "The file is empty."
msgstr "O arquivo está vazio."
-#: translators/tellicoimporter.cpp:795
+#: translators/tellicoimporter.cpp:741
msgid "The file contains no collection data."
msgstr "O arquivo não contém dados de coleção."
-#: translators/tellicoimporter.cpp:940
+#: translators/tellicoimporter.cpp:885
msgid "Unread Books"
msgstr "Livros Não Lidos"
-#: translators/tellicoimporter.cpp:950
+#: translators/tellicoimporter.cpp:895
msgid "Old Movies"
msgstr "Filmes Antigos"
-#: translators/tellicoimporter.cpp:968
+#: translators/tellicoimporter.cpp:913
msgid "80's Music"
msgstr "Música dos anos 80"
-#: translators/tellicoimporter.cpp:980
+#: translators/tellicoimporter.cpp:925
msgid "Favorites"
msgstr "Favoritos"
@@ -1942,63 +1785,53 @@ msgstr "Favoritos"
msgid "Scanning audio files..."
msgstr "Procurando arquivos de áudio..."
-#: translators/audiofileimporter.cpp:129
-#, fuzzy
-msgid "Bitrate"
-msgstr "BibTeX"
-
-#: translators/audiofileimporter.cpp:160 translators/audiofileimporter.cpp:170
-msgid "Tracks (Disc %1)"
-msgstr ""
-
-#: translators/audiofileimporter.cpp:189 xslt.cpp:4
+#: translators/audiofileimporter.cpp:169 xslt.cpp:4
msgid "(Various)"
msgstr "(Vários)"
-#: translators/audiofileimporter.cpp:340
+#: translators/audiofileimporter.cpp:317
msgid "Audio File Options"
msgstr "Opções de Arquivo de Áudio"
-#: translators/audiofileimporter.cpp:342
+#: translators/audiofileimporter.cpp:319
msgid "Recursive &folder search"
msgstr "Pesquisa recursiva de &pastas"
-#: translators/audiofileimporter.cpp:343
+#: translators/audiofileimporter.cpp:320
msgid "If checked, folders are recursively searched for audio files."
msgstr ""
-"Se selecionado, as pastas são varridas recursivamente para procurar "
-"arquivos de áudio."
+"Se selecionado, as pastas são varridas recursivamente para procurar arquivos "
+"de áudio."
-#: translators/audiofileimporter.cpp:347
-msgid "Include file &location"
+#: translators/audiofileimporter.cpp:324
+msgid "&Include file location"
msgstr "&Incluir localização do arquivo"
-#: translators/audiofileimporter.cpp:348
+#: translators/audiofileimporter.cpp:325
msgid "If checked, the file names for each track are added to the entries."
msgstr ""
"Se selecionado, os nomes dos arquivos de cada faixa serão adicionados aos "
"registros."
-#: translators/audiofileimporter.cpp:352
-msgid "Include &bitrate"
-msgstr ""
-
-#: translators/audiofileimporter.cpp:353
-#, fuzzy
-msgid "If checked, the bitrate for each track is added to the entries."
-msgstr ""
-"Se selecionado, os nomes dos arquivos de cada faixa serão adicionados aos "
-"registros."
-
#: translators/csvexporter.cpp:40
msgid "CSV"
msgstr "CSV"
-#: importdialog.cpp:254 translators/csvexporter.cpp:44
+#: importdialog.cpp:213 translators/csvexporter.cpp:44
msgid "*.csv|CSV Files (*.csv)"
msgstr "*.csv|Arquivos CSV (*.csv)"
-#: translators/csvexporter.cpp:109 translators/csvimporter.cpp:221
+#: configdialog.cpp:992 importdialog.cpp:245 mainwindow.cpp:1060
+#: mainwindow.cpp:1217 reportdialog.cpp:195 translators/bibtexexporter.cpp:52
+#: translators/bibtexmlexporter.cpp:40 translators/csvexporter.cpp:44
+#: translators/gcfilmsexporter.cpp:41 translators/htmlexporter.cpp:88
+#: translators/onixexporter.cpp:67 translators/pilotdbexporter.cpp:47
+#: translators/tellicoxmlexporter.cpp:60 translators/tellicozipexporter.cpp:39
+#: translators/xsltexporter.cpp:41 translators/xsltimporter.cpp:86
+msgid "*|All Files"
+msgstr "*|Todos os Arquivos"
+
+#: translators/csvexporter.cpp:109 translators/csvimporter.cpp:166
msgid "CSV Options"
msgstr "Opções CSV"
@@ -2008,27 +1841,25 @@ msgstr "Incluir os nomes dos campos como cabeçalho das colunas"
#: translators/csvexporter.cpp:114
msgid "If checked, a header row will be added with the field titles."
-msgstr ""
-"Se selecionada, uma linha de cabeçalho será adicionada com o nome dos "
-"campos."
+msgstr "Se selecionada, uma linha de cabeçalho será adicionada com o nome dos campos."
-#: translators/csvexporter.cpp:117 translators/csvimporter.cpp:240
+#: translators/csvexporter.cpp:117 translators/csvimporter.cpp:185
msgid "Delimiter"
msgstr "Separador"
-#: translators/csvexporter.cpp:120 translators/csvimporter.cpp:243
+#: translators/csvexporter.cpp:120 translators/csvimporter.cpp:188
msgid ""
"In addition to a comma, other characters may be used as a delimiter, "
"separating each value in the file."
msgstr ""
-"Além da vírgula, outros caracteres podem ser utilizados para delimitar "
-"cada valor no arquivo."
+"Além da vírgula, outros caracteres podem ser utilizados para delimitar cada "
+"valor no arquivo."
#: translators/csvexporter.cpp:124
msgid "Comma"
msgstr "Vírgula"
-#: translators/csvexporter.cpp:126 translators/csvimporter.cpp:250
+#: translators/csvexporter.cpp:126 translators/csvimporter.cpp:195
msgid "Use a comma as the delimiter."
msgstr "Utilizar a vírgula como separador."
@@ -2036,7 +1867,7 @@ msgstr "Utilizar a vírgula como separador."
msgid "Semicolon"
msgstr "Ponto e vírgula"
-#: translators/csvexporter.cpp:131 translators/csvimporter.cpp:255
+#: translators/csvexporter.cpp:131 translators/csvimporter.cpp:200
msgid "Use a semi-colon as the delimiter."
msgstr "Utilizar o ponto e vírgula como separador."
@@ -2044,7 +1875,7 @@ msgstr "Utilizar o ponto e vírgula como separador."
msgid "Tab"
msgstr "Aba"
-#: translators/csvexporter.cpp:136 translators/csvimporter.cpp:260
+#: translators/csvexporter.cpp:136 translators/csvimporter.cpp:205
msgid "Use a tab as the delimiter."
msgstr "Utilizar a tabulação como separador."
@@ -2052,45 +1883,45 @@ msgstr "Utilizar a tabulação como separador."
msgid "Other"
msgstr "Outro"
-#: translators/csvexporter.cpp:141 translators/csvimporter.cpp:265
+#: translators/csvexporter.cpp:141 translators/csvimporter.cpp:210
msgid "Use a custom string as the delimiter."
msgstr "Utilizar um outro caractere como separador."
-#: translators/csvexporter.cpp:146 translators/csvimporter.cpp:272
+#: translators/csvexporter.cpp:146 translators/csvimporter.cpp:216
msgid "A custom string, such as a colon, may be used as a delimiter."
msgstr ""
"Um caractere qualquer, como os dois pontos, pode ser utilizado como "
"separador."
-#: translators/filelistingimporter.cpp:63
+#: translators/filelistingimporter.cpp:62
msgid "Scanning files..."
msgstr "Varrendo arquivos..."
-#: translators/filelistingimporter.cpp:191
+#: translators/filelistingimporter.cpp:196
msgid "File Listing Options"
msgstr "Opções de Listagem de Arquivo"
-#: translators/filelistingimporter.cpp:193
+#: translators/filelistingimporter.cpp:198
msgid "Recursive folder search"
msgstr "Procura recursiva de pastas"
-#: translators/filelistingimporter.cpp:194
+#: translators/filelistingimporter.cpp:199
msgid "If checked, folders are recursively searched for all files."
msgstr ""
-"Se selecionado, as pastas são varridas recursivamente para procurar todos "
-"os arquivos."
+"Se selecionado, as pastas são varridas recursivamente para procurar todos os "
+"arquivos."
-#: translators/filelistingimporter.cpp:198
+#: translators/filelistingimporter.cpp:203
msgid "Generate file previews"
msgstr "Gerar pré-visualizações dos arquivos"
-#: translators/filelistingimporter.cpp:199
+#: translators/filelistingimporter.cpp:204
msgid ""
"If checked, previews of the file contents are generated, which can slow down "
"the folder listing."
msgstr ""
-"Se selecionado, serão geradas pré-visualizações do conteúdo dos "
-"arquivos, o que pode causar lentidão na listagem das pastas."
+"Se selecionado, serão geradas pré-visualizações do conteúdo dos arquivos, o "
+"que pode causar lentidão na listagem das pastas."
#: translators/onixexporter.cpp:63
msgid "ONIX Archive"
@@ -2118,8 +1949,7 @@ msgstr ""
#: translators/freedbimporter.cpp:84 translators/freedbimporter.cpp:170
msgid "<qt>Tellico was unable to access the CD-ROM device - <i>%1</i>.</qt>"
-msgstr ""
-"<qt>Tellico não pôde acessar o dispositivo de CD-ROM - <b>%1</b>.</qt>"
+msgstr "<qt>Tellico não pôde acessar o dispositivo de CD-ROM - <b>%1</b>.</qt>"
#: translators/freedbimporter.cpp:196
msgid "Select CDDB Entry"
@@ -2135,30 +1965,29 @@ msgstr "<qt>Nenhum registro correspondente ao CD foi encontrado.</qt>"
#: translators/freedbimporter.cpp:238
msgid "<qt>Tellico was unable to complete the CD lookup.</qt>"
-msgstr ""
-"<qt>Tellico não pôde completar a pesquisa das informações do CD.</qt>"
+msgstr "<qt>Tellico não pôde completar a pesquisa das informações do CD.</qt>"
-#: translators/freedbimporter.cpp:470
+#: translators/freedbimporter.cpp:469
msgid "Various"
msgstr "Vários"
-#: translators/freedbimporter.cpp:489
+#: translators/freedbimporter.cpp:488
msgid "Audio CD Options"
msgstr "Opções de CD de Áudio"
-#: translators/freedbimporter.cpp:493
+#: translators/freedbimporter.cpp:492
msgid "Read data from CD-ROM device"
msgstr "Ler dados do dispositivo de CD-ROM"
-#: translators/freedbimporter.cpp:496
+#: translators/freedbimporter.cpp:495
msgid "Select or input the CD-ROM device location."
msgstr "Selecione ou informe a localização do dispositivo de CD-ROM."
-#: translators/freedbimporter.cpp:502
+#: translators/freedbimporter.cpp:501
msgid "Read all CDDB cache files only"
msgstr "Ler apenas os arquivos de cache do CDDB"
-#: translators/freedbimporter.cpp:503
+#: translators/freedbimporter.cpp:502
msgid ""
"Read data recursively from all the CDDB cache files contained in the default "
"cache folders."
@@ -2166,27 +1995,23 @@ msgstr ""
"Ler recursivamente os dados de todos os arquivos de cache do CDDB contidos "
"nas pastas de cache padrão."
-#: translators/gcfilmsexporter.cpp:37
+#: importdialog.cpp:272 translators/gcfilmsexporter.cpp:37
msgid "GCfilms"
msgstr "GCfilms "
-#: importdialog.cpp:273 translators/gcfilmsexporter.cpp:41
+#: importdialog.cpp:230 translators/gcfilmsexporter.cpp:41
msgid "*.gcf|GCfilms Data Files (*.gcf)"
msgstr "*.gcf|Arquivos de Dados GCfilms (*.gcf) "
-#: importdialog.cpp:272 translators/gcfilmsexporter.cpp:43
-msgid "*.gcs|GCstar Data Files (*.gcs)"
-msgstr "*.gcs|Arquivos de Dados GCstar (*.gcs) "
-
#: translators/xsltexporter.cpp:37
msgid "XSLT"
msgstr "XSLT"
-#: translators/xsltexporter.cpp:69 translators/xsltimporter.cpp:98
+#: translators/xsltexporter.cpp:69 translators/xsltimporter.cpp:79
msgid "XSLT Options"
msgstr "Opções de XSLT"
-#: translators/xsltexporter.cpp:74 translators/xsltimporter.cpp:101
+#: translators/xsltexporter.cpp:74 translators/xsltimporter.cpp:82
msgid "XSLT file:"
msgstr "Arquivo XSLT:"
@@ -2194,15 +2019,15 @@ msgstr "Arquivo XSLT:"
msgid "Choose the XSLT file used to transform the Tellico XML data."
msgstr "Escolher o arquivo XSLT para transformar os dados XML do Tellico."
-#: translators/alexandriaimporter.cpp:194
+#: translators/alexandriaimporter.cpp:193
msgid "Alexandria Options"
msgstr "Opções do Alexandria"
-#: translators/alexandriaimporter.cpp:195
+#: translators/alexandriaimporter.cpp:194
msgid "&Library:"
msgstr "&Biblioteca:"
-#: translators/bibtexmlexporter.cpp:36
+#: importdialog.cpp:268 translators/bibtexmlexporter.cpp:36
msgid "Bibtexml"
msgstr "BibTeXML "
@@ -2214,20 +2039,20 @@ msgstr "*.xml|Arquivos BibTeXML (*.xml)"
msgid "XML"
msgstr "XML"
-#: importdialog.cpp:246 importdialog.cpp:259 importdialog.cpp:264
-#: mainwindow.cpp:1103 translators/tellicoxmlexporter.cpp:60
+#: importdialog.cpp:205 importdialog.cpp:218 importdialog.cpp:222
+#: mainwindow.cpp:1058 translators/tellicoxmlexporter.cpp:60
msgid "*.xml|XML Files (*.xml)"
msgstr "*.xml|Arquivos XML (*.xml)"
-#: translators/tellicoxmlexporter.cpp:480
+#: translators/tellicoxmlexporter.cpp:464
msgid "Tellico XML Options"
msgstr "Opções XML do Tellico"
-#: translators/tellicoxmlexporter.cpp:483
+#: translators/tellicoxmlexporter.cpp:467
msgid "Include images in XML document"
msgstr "Incluir as imagens no documento XML"
-#: translators/tellicoxmlexporter.cpp:485
+#: translators/tellicoxmlexporter.cpp:469
msgid ""
"If checked, the images in the document will be included in the XML stream as "
"base64 encoded elements."
@@ -2235,27 +2060,31 @@ msgstr ""
"Se selecionado, as imagens do documento serão integradas aos dados em XML "
"como elementos codificados em base64."
-#: translators/importer.h:100
+#: translators/importer.h:90
msgid "Loading data..."
msgstr "Carregando dados..."
-#: translators/importer.h:100
+#: translators/importer.h:90
msgid "Loading %1..."
msgstr "Carregando %1..."
-#: translators/bibtexexporter.cpp:48
+#: importdialog.cpp:267 translators/bibtexexporter.cpp:48
msgid "Bibtex"
msgstr "BibTeX"
-#: importdialog.cpp:250 translators/bibtexexporter.cpp:52
+#: importdialog.cpp:209 translators/bibtexexporter.cpp:52
msgid "*.bib|Bibtex Files (*.bib)"
msgstr "*.bib|Arquivos BibTeX (*.bib)"
-#: translators/bibtexexporter.cpp:203
+#: translators/bibtexexporter.cpp:201
+msgid "Bibtex Options"
+msgstr "Opções do BibTeX"
+
+#: translators/bibtexexporter.cpp:204
msgid "Expand string macros"
msgstr "Expandir as macros de string"
-#: translators/bibtexexporter.cpp:205
+#: translators/bibtexexporter.cpp:206
msgid ""
"If checked, the string macros will be expanded and no @string{} entries will "
"be written."
@@ -2263,113 +2092,113 @@ msgstr ""
"Se selecionado, as macros de string vão ser expandidas e nenhum registro "
"@string{} será escrito."
-#: translators/bibtexexporter.cpp:208
+#: translators/bibtexexporter.cpp:209
msgid "Use URL package"
msgstr "Utilizar o pacote URL"
-#: translators/bibtexexporter.cpp:210
+#: translators/bibtexexporter.cpp:211
msgid "If checked, any URL fields will be wrapped in a \\url declaration."
-msgstr ""
-"Se selecionado, qualquer campo URL será transformado em uma declaração "
-"\\url."
+msgstr "Se selecionado, qualquer campo URL será transformado em uma declaração \\url."
-#: translators/bibtexexporter.cpp:213
+#: translators/bibtexexporter.cpp:214
msgid "Skip entries with empty citation keys"
msgstr "Ignorar os registros com chaves de citação vazias"
-#: translators/bibtexexporter.cpp:215
+#: translators/bibtexexporter.cpp:216
msgid "If checked, any entries without a bibtex citation key will be skipped."
msgstr ""
"Se selecionado, qualquer registro sem uma chave de citação do BibTeX será "
"ignorado."
-#: translators/bibtexexporter.cpp:219
+#: translators/bibtexexporter.cpp:220
msgid "Bibtex quotation style:"
msgstr "Estilo das citações do BibTeX:"
-#: translators/bibtexexporter.cpp:221 translators/bibtexexporter.cpp:228
-#: translators/bibtexexporter.cpp:259
+#: translators/bibtexexporter.cpp:222 translators/bibtexexporter.cpp:229
+#: translators/bibtexexporter.cpp:260
msgid "Braces"
msgstr "Colchetes"
-#: translators/bibtexexporter.cpp:222 translators/bibtexexporter.cpp:230
+#: translators/bibtexexporter.cpp:223 translators/bibtexexporter.cpp:231
msgid "Quotes"
msgstr "Aspas"
-#: translators/bibtexexporter.cpp:223
+#: translators/bibtexexporter.cpp:224
msgid ""
"<qt>The quotation style used when exporting bibtex. All field values will "
"be escaped with either braces or quotation marks.</qt>"
msgstr ""
-"<qt>Estilo de citação utilizado para arquivos no formato BibTeX. Os "
-"valores de todos os campos serão envolvidos por colchetes ou aspas.</qt>"
+"<qt>Estilo de citação utilizado para arquivos no formato BibTeX. Os valores "
+"de todos os campos serão envolvidos por colchetes ou aspas.</qt>"
-#: translators/csvimporter.cpp:229
+#: translators/tellicozipexporter.cpp:35
+msgid "Tellico Zip File"
+msgstr "Arquivo Zip Tellico"
+
+#: importdialog.cpp:204 mainwindow.cpp:1056 mainwindow.cpp:1215
+#: translators/tellicozipexporter.cpp:39
+msgid "*.tc *.bc|Tellico Files (*.tc)"
+msgstr "*.tc *.bc|Arquivos Tellico (*.tc)"
+
+#: translators/csvimporter.cpp:174
msgid "Select the type of collection being imported."
msgstr "Selecionar o tipo de coleção a importar."
-#: translators/csvimporter.cpp:235
+#: translators/csvimporter.cpp:180
msgid "&First row contains field titles"
msgstr "A &primeira linha contém os títulos dos campos"
-#: translators/csvimporter.cpp:236
+#: translators/csvimporter.cpp:181
msgid "If checked, the first row is used as field titles."
-msgstr ""
-"Se selecionado, a primeira linha será utilizada para o nome dos campos."
+msgstr "Se selecionado, a primeira linha será utilizada para o nome dos campos."
-#: translators/csvimporter.cpp:248
+#: translators/csvimporter.cpp:193
msgid "&Comma"
msgstr "&Vírgula"
-#: translators/csvimporter.cpp:254
+#: translators/csvimporter.cpp:199
msgid "&Semicolon"
msgstr "&Ponto e vírgula"
-#: translators/csvimporter.cpp:259
+#: translators/csvimporter.cpp:204
msgid "Ta&b"
msgstr "Ta&bulação"
-#: translators/csvimporter.cpp:264
+#: translators/csvimporter.cpp:209
msgid "Ot&her:"
-msgstr "Out&ro"
+msgstr "Out&ro:"
-#: translators/csvimporter.cpp:289
+#: translators/csvimporter.cpp:233
msgid "The table shows up to the first five lines of the CSV file."
msgstr "A tabela mostra as cinco primeiras linhas do arquivo CSV."
-#: translators/csvimporter.cpp:296
+#: translators/csvimporter.cpp:240
msgid ""
"<qt>Set each column to correspond to a field in the collection by choosing a "
-"column, selecting the field, then clicking the <i>Assign Field</i> "
-"button.</qt>"
+"column, selecting the field, then clicking the <i>Assign Field</i> button.</"
+"qt>"
msgstr ""
"<qt> Marque cada coluna para corresponder a um campo na coleção escolhendo "
-"uma coluna, selecionando o campo e clicando no botão <i> Associar Campo </i>"
+"uma coluna, selecionando o campo e clicando no botão <i> Associar Campo </i>.</qt>"
-#: translators/csvimporter.cpp:298
+#: translators/csvimporter.cpp:242
msgid "Co&lumn:"
msgstr "Co&luna:"
-#: translators/csvimporter.cpp:307
+#: translators/csvimporter.cpp:251
msgid "&Data field in this column:"
msgstr "Campo de &dados nesta coluna:"
-#: translators/csvimporter.cpp:315
+#: translators/csvimporter.cpp:259
msgid "&Assign Field"
msgstr "&Associar Campo"
-#: translators/csvimporter.cpp:347
-msgid ""
-"At least one column must be assigned to a field. Only assigned columns will "
-"be imported."
-msgstr ""
-
-#: collectionfieldsdialog.cpp:409 collectionfieldsdialog.cpp:412
-#: translators/csvimporter.cpp:396 translators/csvimporter.cpp:510
+#: collectionfieldsdialog.cpp:405 collectionfieldsdialog.cpp:408
+#: translators/csvimporter.cpp:410 translators/csvimporter.cpp:513
msgid "New Field"
msgstr "Novo campo"
-#: translators/risimporter.cpp:288
+#: translators/risimporter.cpp:265
msgid "PDF"
msgstr "PDF"
@@ -2378,10 +2207,10 @@ msgid "PilotDB"
msgstr "PilotDB"
#: translators/pilotdbexporter.cpp:47
-msgid "*.pdb|Pilot Database Files (*.pdb)"
-msgstr "*.pdb|Arquivos Pilot Database (*.pdb)"
+msgid "*.pdb|Pilot Database Files(*.pdb)"
+msgstr "*.pdb|Arquivos de Banco de Dados (*.pdb)"
-#: detailedlistview.cpp:67 detailedlistview.cpp:297
+#: detailedlistview.cpp:67 detailedlistview.cpp:299
#: translators/pilotdbexporter.cpp:143
msgid "View Columns"
msgstr "Ver Colunas"
@@ -2394,83 +2223,66 @@ msgstr "Opções do PilotDB"
msgid "Set PDA backup flag for database"
msgstr "Marcar a opção PDA backup para a base de dados"
-#: translators/gcfilmsimporter.cpp:110 translators/gcfilmsimporter.cpp:255
-msgid "<qt>The file is not a valid GCstar data file.</qt>"
-msgstr "<qt>O arquivo não é um arquivo de dados GCstar válido</qt>"
+#: translators/gcfilmsimporter.cpp:85
+msgid "<qt>The file is not a valid GCfilms data file.</qt>"
+msgstr "<qt>O arquivo não é um arquivo de dados GCfilms válido.</qt>"
-#: mainwindow.cpp:1738 translators/gcfilmsimporter.cpp:248
-#: translators/xsltimporter.cpp:76
-msgid "Tellico encountered an error in XSLT processing."
-msgstr "Tellico encontrou um erro no processamento do XSLT."
-
-#: translators/xsltimporter.cpp:64 translators/xsltimporter.cpp:70
+#: translators/xsltimporter.cpp:45 translators/xsltimporter.cpp:51
msgid "A valid XSLT file is needed to import the file."
msgstr "Um arquivo XSLT válido é necessário para importar o arquivo."
-#: configdialog.cpp:1015 translators/xsltimporter.cpp:104
+#: mainwindow.cpp:1699 translators/xsltimporter.cpp:57
+msgid "Tellico encountered an error in XSLT processing."
+msgstr "Tellico encontrou um erro no processamento do XSLT."
+
+#: configdialog.cpp:990 translators/xsltimporter.cpp:85
msgid "*.xsl|XSL Files (*.xsl)"
msgstr "*.xsl|Arquivos XSL (*.xsl)"
-#: translators/htmlexporter.cpp:85
+#: translators/htmlexporter.cpp:84
msgid "HTML"
msgstr "HTML"
-#: reportdialog.cpp:195 translators/htmlexporter.cpp:89
+#: reportdialog.cpp:195 translators/htmlexporter.cpp:88
msgid "*.html|HTML Files (*.html)"
msgstr "*.html|Arquivos HTML (*.html)"
-#: groupview.cpp:479 mainwindow.cpp:1591 mainwindow.cpp:1631
-#: translators/htmlexporter.cpp:316
+#: groupview.cpp:479 mainwindow.cpp:1552 mainwindow.cpp:1592
+#: translators/htmlexporter.cpp:315
msgid "People"
msgstr "Pessoas"
-#: translators/htmlexporter.cpp:320
+#: translators/htmlexporter.cpp:319
msgid "(grouped by %1)"
msgstr "(Agrupados por %1)"
-#: translators/htmlexporter.cpp:465
+#: translators/htmlexporter.cpp:464
msgid "HTML Options"
msgstr "Opções HTML"
-#: translators/htmlexporter.cpp:468
+#: translators/htmlexporter.cpp:467
msgid "Print field headers"
msgstr "Imprimir os cabeçalhos dos campos"
-#: configdialog.cpp:307 translators/htmlexporter.cpp:469
+#: configdialog.cpp:298 translators/htmlexporter.cpp:468
msgid "If checked, the field names will be printed as table headers."
-msgstr ""
-"Se selecionado, o nome dos campos será impresso como títulos de uma tabela."
+msgstr "Se selecionado, o nome dos campos será impresso como títulos de uma tabela."
-#: translators/htmlexporter.cpp:473
+#: translators/htmlexporter.cpp:472
msgid "Group the entries"
msgstr "Agrupar os registros"
-#: configdialog.cpp:314 translators/htmlexporter.cpp:474
+#: configdialog.cpp:305 translators/htmlexporter.cpp:473
msgid "If checked, the entries will be grouped by the selected field."
-msgstr ""
-"Se selecionado, os registros serão agrupados em função do campo "
-"selecionado."
+msgstr "Se selecionado, os registros serão agrupados em função do campo selecionado."
-#: translators/htmlexporter.cpp:478
+#: translators/htmlexporter.cpp:477
msgid "Export individual entry files"
msgstr "Exporta arquivos de registros isolados"
-#: translators/htmlexporter.cpp:479
+#: translators/htmlexporter.cpp:478
msgid "If checked, individual files will be created for each entry."
-msgstr ""
-"Se selecionado, serão criados arquivos individuais para cada registro."
-
-#: translators/pdfimporter.cpp:92 translators/pdfimporter.cpp:100
-#, fuzzy
-msgid "Tellico was unable to read any metadata from the PDF file."
-msgstr "Tellico não pôde carregar o arquivo - %1."
-
-#: translators/pdfimporter.cpp:231
-msgid ""
-"Tellico is able to download information about entries with a DOI from "
-"CrossRef.org. However, you must create an CrossRef account and add a new "
-"data source with your account information."
-msgstr ""
+msgstr "Se selecionado, serão criados arquivos individuais para cada registro."
#: fetcherconfigdialog.cpp:39 fetcherconfigdialog.cpp:49
msgid "Data Source Properties"
@@ -2481,8 +2293,7 @@ msgid "&Source name: "
msgstr "Nome da &fonte: "
#: fetcherconfigdialog.cpp:79
-msgid ""
-"The name identifies the data source and should be unique and informative."
+msgid "The name identifies the data source and should be unique and informative."
msgstr "O nome identifica a fonte de dados, devendo ser único e informativo."
#: fetcherconfigdialog.cpp:90 fetcherconfigdialog.cpp:94
@@ -2502,8 +2313,8 @@ msgstr ""
#: fetcherconfigdialog.cpp:114
msgid "If checked, updating entries will overwrite any existing information."
msgstr ""
-"Se selecionado, a atualização dos registros sobrescreverá toda "
-"informação existente."
+"Se selecionado, a atualização dos registros sobrescreverá toda informação "
+"existente."
#: filterdialog.cpp:60
msgid "Any Field"
@@ -2561,62 +2372,62 @@ msgstr "Nome do filtro:"
msgid "&Save Filter"
msgstr "&Salvar Filtro "
-#: field.cpp:490
+#: field.cpp:482
msgid "Simple Text"
msgstr "Texto Simples "
-#: field.cpp:491
+#: field.cpp:483
msgid "Paragraph"
msgstr "Parágrafo "
-#: field.cpp:492
+#: field.cpp:484
msgid "Choice"
msgstr "Escolha "
-#: field.cpp:493
+#: field.cpp:485
msgid "Checkbox"
msgstr "Marcador "
-#: field.cpp:496
+#: field.cpp:488
msgid "Table"
msgstr "Tabela"
-#: field.cpp:498
+#: field.cpp:490
msgid "Dependent"
msgstr "Dependente "
-#: field.cpp:500
+#: field.cpp:492
msgid "Date"
msgstr "Data "
-#: entryupdater.cpp:81
+#: entryupdater.cpp:83
msgid "Updating %1..."
msgstr "Carregando %1..."
-#: entryupdater.cpp:83
+#: entryupdater.cpp:85
msgid "Updating entries..."
msgstr "Atualizando registros..."
-#: entryupdater.cpp:85
+#: entryupdater.cpp:87
msgid "Update Entries"
msgstr "Atualizar Registros"
-#: entryupdater.cpp:99
+#: entryupdater.cpp:101
msgid "Updating <b>%1</b>..."
msgstr "Atualizando <b>%1</b>..."
-#: entryupdater.cpp:209
+#: entryupdater.cpp:211
msgid "Select Match"
msgstr "Selecionar Correspondência"
-#: entryupdater.cpp:217
+#: entryupdater.cpp:219
msgid ""
"<qt><b>%1</b> returned multiple results which could match <b>%2</b>, the "
"entry currently in the collection. Please select the correct match.</qt>"
msgstr ""
-"<qt><b>%1</b> foram retornados múltiplos resultados que correspondem a "
-"<b>%2</b>, que é o registro corrente na coleção. Por favor selecione o "
-"resultado desejado.</qt>"
+"<qt><b>%1</b> foram retornados múltiplos resultados que correspondem a <b>%"
+"2</b>, que é o registro corrente na coleção. Por favor selecione o resultado "
+"desejado.</qt>"
#: groupview.cpp:252
msgid "Expand All Groups"
@@ -2640,35 +2451,35 @@ msgid ""
"Group"
msgstr "Grupo"
-#: importdialog.cpp:54 importdialog.cpp:60
+#: importdialog.cpp:50 importdialog.cpp:56
msgid "Import Options"
msgstr "Opções de Importação"
-#: importdialog.cpp:62
+#: importdialog.cpp:58
msgid "&Replace current collection"
msgstr "&Substituir a coleção atual"
-#: importdialog.cpp:63
+#: importdialog.cpp:59
msgid "Replace the current collection with the contents of the imported file."
msgstr "Substitui a coleção atual pelo conteúdo do arquivo importado."
-#: importdialog.cpp:65
+#: importdialog.cpp:61
msgid "A&ppend to current collection"
msgstr "A&dicionar à coleção"
-#: importdialog.cpp:66
+#: importdialog.cpp:62
msgid ""
"Append the contents of the imported file to the current collection. This is "
"only possible when the collection types match."
msgstr ""
-"Adiciona os dados do arquivo importado à coleção atual. Isso só é "
-"possível se as coleções forem do mesmo tipo."
+"Adiciona os dados do arquivo importado à coleção atual. Isso só é possível "
+"se as coleções forem do mesmo tipo."
-#: importdialog.cpp:69
+#: importdialog.cpp:65
msgid "&Merge with current collection"
msgstr "&Combinar com a coleção atual"
-#: importdialog.cpp:70
+#: importdialog.cpp:66
msgid ""
"Merge the contents of the imported file to the current collection. This is "
"only possible when the collection types match. Entries must match exactly in "
@@ -2678,28 +2489,25 @@ msgstr ""
"possível se as coleções forem do mesmo tipo. Os registros devem ser "
"exatamente do mesmo tipo para que possam ser combinados."
-#: importdialog.cpp:95 mainwindow.cpp:318 rc.cpp:9
-#, no-c-format
-msgid "&Import"
-msgstr "&Importar "
-
-#: importdialog.cpp:268
+#: importdialog.cpp:226
msgid "*.ris|RIS Files (*.ris)"
msgstr "*.ris|Arquivos RIS (*.ris)"
-#: importdialog.cpp:277
+#: importdialog.cpp:234
msgid "*.amc|AMC Data Files (*.amc)"
msgstr "*.amc|Arquivos de Dados AMC (*.amc) "
-#: importdialog.cpp:281
-#, fuzzy
-msgid "*.pdf|PDF Files (*.pdf)"
-msgstr "*.pdb|Arquivos Pilot Database (*.pdb)"
+#: importdialog.cpp:270
+msgid "MODS"
+msgstr "MODS"
-#: importdialog.cpp:285
-#, fuzzy
-msgid "*.reflib|Referencer Files (*.reflib)"
-msgstr "*.ris|Arquivos RIS (*.ris)"
+#: importdialog.cpp:271
+msgid "RIS"
+msgstr "RIS "
+
+#: importdialog.cpp:273
+msgid "AMC"
+msgstr "AMC"
#: tellico_strings.cpp:18
#, c-format
@@ -2721,27 +2529,22 @@ msgid ""
"Only collections with the same type of entries as the current one can be "
"appended. No changes are being made to the current collection."
msgstr ""
-"Somente coleções com os mesmos tipos de registros do da coleção atual "
-"podem ser adicionadas. Nenhuma mudança foi feita à coleção atual."
+"Somente coleções com os mesmos tipos de registros do da coleção atual podem "
+"ser adicionadas. Nenhuma mudança foi feita à coleção atual."
#: tellico_strings.cpp:24
msgid ""
"Only collections with the same type of entries as the current one can be "
"merged. No changes are being made to the current collection."
msgstr ""
-"Somente coleções com os mesmos tipos de registro da coleção atual podem "
-"ser combinadas. Nenhuma mudança será feita à coleção atual."
+"Somente coleções com os mesmos tipos de registro da coleção atual podem ser "
+"combinadas. Nenhuma mudança será feita à coleção atual."
#: tellico_strings.cpp:27
#, c-format
msgid "Tellico is unable to load an image from the file - %1."
msgstr "Tellico não pôde carregar o arquivo - %1."
-#: entryiconview.cpp:287
-#, fuzzy
-msgid "&Sort By"
-msgstr "&Porta:"
-
#: loandialog.cpp:40
msgid "Loan Dialog"
msgstr "Diálogo de Empréstimo"
@@ -2763,47 +2566,47 @@ msgid ""
"Enter the name of the person borrowing the items from you. Clicking the "
"button allows you to select from your address book."
msgstr ""
-"Entre com o nome da pessoa para quem você está emprestando esses itens. "
-"Você pode selecioná-lo do seu livro de endereços clicando neste botão."
+"Entre com o nome da pessoa para quem você está emprestando esses itens. Você "
+"pode selecioná-lo do seu livro de endereços clicando neste botão."
-#: loandialog.cpp:117
+#: loandialog.cpp:116
msgid "&Loan date:"
msgstr "Data do &Empréstimo:"
-#: loandialog.cpp:123
+#: loandialog.cpp:122
msgid ""
"The check-out date is the date that you lent the items. By default, today's "
"date is used."
msgstr ""
-"A data de saída é a data em que você emprestou os itens. Por padrão, a "
-"data de hoje é usada."
+"A data de saída é a data em que você emprestou os itens. Por padrão, a data "
+"de hoje é usada."
-#: loandialog.cpp:132
+#: loandialog.cpp:131
msgid "D&ue date:"
msgstr "Data para &Devolução:"
-#: loandialog.cpp:139
+#: loandialog.cpp:138
msgid ""
"The due date is when the items are due to be returned. The due date is not "
"required, unless you want to add the loan to your active calendar."
msgstr ""
-"A data para devolução é o dia previsto para que os itens sejam "
-"devolvidos. Ela não é requerida, a menos que você queira adicionar o "
-"empréstimo ao seu calendário ativo."
+"A data para devolução é o dia previsto para que os itens sejam devolvidos. "
+"Ela não é requerida, a menos que você queira adicionar o empréstimo ao seu "
+"calendário ativo."
-#: loandialog.cpp:144
+#: loandialog.cpp:143
msgid "&Note:"
msgstr "&Observação:"
-#: loandialog.cpp:150
+#: loandialog.cpp:149
msgid "You can add notes about the loan, as well."
msgstr "Você também pode adicionar observações sobre o empréstimo."
-#: loandialog.cpp:154
+#: loandialog.cpp:153
msgid "&Add a reminder to the active calendar"
msgstr "&Adiciona um lembrete ao calendário ativo. "
-#: loandialog.cpp:157
+#: loandialog.cpp:156
msgid ""
"<qt>Checking this box will add a <em>To-do</em> item to your active "
"calendar, which can be viewed using KOrganizer. The box is only active if "
@@ -2813,631 +2616,566 @@ msgstr ""
"calendário ativo, podendo ser acessado pelo KOrganizer. Este marcador será "
"habilitado somente se você especificar uma data para devolução."
-#: mainwindow.cpp:188
+#: mainwindow.cpp:195
msgid "Create a new collection"
msgstr "Cria uma nova coleção "
-#: mainwindow.cpp:192
+#: mainwindow.cpp:199
msgid "New &Book Collection"
msgstr "Nova Coleção de &Livros "
-#: mainwindow.cpp:194
+#: mainwindow.cpp:201
msgid "Create a new book collection"
msgstr "Cria uma nova coleção de livros "
-#: mainwindow.cpp:200
+#: mainwindow.cpp:207
msgid "New B&ibliography"
msgstr "Nova &Bibliografia"
-#: mainwindow.cpp:202
+#: mainwindow.cpp:209
msgid "Create a new bibtex bibliography"
msgstr "Cria uma nova bibliografia do BibTeX"
-#: mainwindow.cpp:208
+#: mainwindow.cpp:215
msgid "New &Comic Book Collection"
msgstr "Nova Coleção de &Revistas em Quadrinhos"
-#: mainwindow.cpp:210
+#: mainwindow.cpp:217
msgid "Create a new comic book collection"
msgstr "Cria uma nova coleção de revistas em quadrinhos"
-#: mainwindow.cpp:216
+#: mainwindow.cpp:223
msgid "New &Video Collection"
msgstr "Nova Coleção de &Vídeos"
-#: mainwindow.cpp:218
+#: mainwindow.cpp:225
msgid "Create a new video collection"
msgstr "Cria uma nova coleção de vídeos "
-#: mainwindow.cpp:224
+#: mainwindow.cpp:231
msgid "New &Music Collection"
msgstr "Nova Coleção de &Músicas"
-#: mainwindow.cpp:226
+#: mainwindow.cpp:233
msgid "Create a new music collection"
msgstr "Cria uma nova coleção de músicas"
-#: mainwindow.cpp:232
+#: mainwindow.cpp:239
msgid "New C&oin Collection"
msgstr "Nova Coleção de M&oedas"
-#: mainwindow.cpp:234
+#: mainwindow.cpp:241
msgid "Create a new coin collection"
msgstr "Cria uma nova coleção de moedas"
-#: mainwindow.cpp:240
+#: mainwindow.cpp:247
msgid "New &Stamp Collection"
msgstr "Nova Coleção de &Selos "
-#: mainwindow.cpp:242
+#: mainwindow.cpp:249
msgid "Create a new stamp collection"
msgstr "Cria uma nova coleção de selos "
-#: mainwindow.cpp:248
+#: mainwindow.cpp:255
msgid "New C&ard Collection"
msgstr "Nova Coleção de &Cartões"
-#: mainwindow.cpp:250
+#: mainwindow.cpp:257
msgid "Create a new trading card collection"
msgstr "Cria uma nova coleção de cartões"
-#: mainwindow.cpp:256
+#: mainwindow.cpp:263
msgid "New &Wine Collection"
msgstr "Nova Coleção de &Vinhos"
-#: mainwindow.cpp:258
+#: mainwindow.cpp:265
msgid "Create a new wine collection"
msgstr "Cria uma nova coleção de vinhos "
-#: mainwindow.cpp:264
+#: mainwindow.cpp:271
msgid "New &Game Collection"
msgstr "Nova Coleção de &Jogos"
-#: mainwindow.cpp:266
+#: mainwindow.cpp:273
msgid "Create a new game collection"
msgstr "Cria uma nova coleção de jogos "
-#: mainwindow.cpp:272
-#, fuzzy
-msgid "New Boa&rd Game Collection"
-msgstr "Nova Coleção de &Jogos"
-
-#: mainwindow.cpp:274
-#, fuzzy
-msgid "Create a new board game collection"
-msgstr "Cria uma nova coleção de jogos "
-
-#: mainwindow.cpp:280
+#: mainwindow.cpp:279
msgid "New &File Catalog"
msgstr "Novo Catálogo de &Arquivos"
-#: mainwindow.cpp:282
+#: mainwindow.cpp:281
msgid "Create a new file catalog"
msgstr "Cria um novo catálogo de arquivos "
-#: mainwindow.cpp:288
+#: mainwindow.cpp:287
msgid "New C&ustom Collection"
msgstr "Nova Coleção &Personalizada"
-#: mainwindow.cpp:290
+#: mainwindow.cpp:289
msgid "Create a new custom collection"
msgstr "Cria uma nova coleção personalizada "
-#: mainwindow.cpp:299
+#: mainwindow.cpp:298
msgid "Open an existing document"
msgstr "Abre um documento existente"
-#: mainwindow.cpp:301
+#: mainwindow.cpp:300
msgid "Open a recently used file"
msgstr "Abre um arquivo usado recentemente"
-#: mainwindow.cpp:303
+#: mainwindow.cpp:302
msgid "Save the document"
msgstr "Salva o documento"
-#: mainwindow.cpp:305
+#: mainwindow.cpp:304
msgid "Save the document as a different file..."
-msgstr "Salva o documento como um novo arquivo"
+msgstr "Salva o documento como um novo arquivo..."
-#: mainwindow.cpp:307
+#: mainwindow.cpp:306
msgid "Print the contents of the document..."
-msgstr "Imprime os dados do documento"
+msgstr "Imprime os dados do documento..."
-#: mainwindow.cpp:309
+#: mainwindow.cpp:308
msgid "Quit the application"
msgstr "Sai do aplicativo"
-#: mainwindow.cpp:320
+#: mainwindow.cpp:317 rc.cpp:9
+#, no-c-format
+msgid "&Import"
+msgstr "&Importar "
+
+#: mainwindow.cpp:319
msgid "Import collection data from other formats"
msgstr "Importa dados a partir de outros formatos"
-#: mainwindow.cpp:324
+#: mainwindow.cpp:323
msgid "Import Tellico Data..."
msgstr "Importar Dados do Tellico..."
-#: mainwindow.cpp:325
+#: mainwindow.cpp:324
msgid "Import another Tellico data file"
msgstr "Importa outro arquivo de dados do Tellico "
-#: mainwindow.cpp:331
+#: mainwindow.cpp:330
msgid "Import CSV Data..."
-msgstr "Importar Dados CSV... "
+msgstr "Importar Dados CSV..."
-#: mainwindow.cpp:332
+#: mainwindow.cpp:331
msgid "Import a CSV file"
msgstr "Importa um arquivo de valores separados por vírgula"
-#: mainwindow.cpp:338
+#: mainwindow.cpp:337
msgid "Import MODS Data..."
msgstr "Importar Dados do MODS..."
-#: mainwindow.cpp:339
+#: mainwindow.cpp:338
msgid "Import a MODS data file"
msgstr "Importa um arquivo do MODS"
-#: mainwindow.cpp:345
+#: mainwindow.cpp:344
msgid "Import Alexandria Data..."
msgstr "Importar Dados do Alexandria..."
-#: mainwindow.cpp:346
+#: mainwindow.cpp:345
msgid "Import data from the Alexandria book collection manager"
msgstr "Importa um arquivo do gerenciador de coleção de livros Alexandria"
-#: mainwindow.cpp:352
-#, fuzzy
-msgid "Import Delicious Library Data..."
-msgstr "Importar Dados do Tellico..."
-
-#: mainwindow.cpp:353
-#, fuzzy
-msgid "Import data from Delicious Library"
-msgstr "Importa meta-dados de arquivos de áudio"
-
-#: mainwindow.cpp:359
-#, fuzzy
-msgid "Import Referencer Data..."
-msgstr "Importar Dados do RIS..."
-
-#: mainwindow.cpp:360
-#, fuzzy
-msgid "Import data from Referencer"
-msgstr "Importa um arquivo de referência do RIS"
-
-#: mainwindow.cpp:366
+#: mainwindow.cpp:351
msgid "Import Bibtex Data..."
msgstr "Importar Dados do BibTeX..."
-#: mainwindow.cpp:367
+#: mainwindow.cpp:352
msgid "Import a bibtex bibliography file"
msgstr "Importa um arquivo de bibliografia do BibTeX"
-#: mainwindow.cpp:373
+#: mainwindow.cpp:358
msgid "Import Bibtexml Data..."
msgstr "Importar Dados do BibTeXML..."
-#: mainwindow.cpp:374
+#: mainwindow.cpp:359
msgid "Import a Bibtexml bibliography file"
msgstr "Importa um arquivo de bibliografia do BibTeXML"
-#: mainwindow.cpp:380
+#: mainwindow.cpp:365
msgid "Import RIS Data..."
msgstr "Importar Dados do RIS..."
-#: mainwindow.cpp:381
+#: mainwindow.cpp:366
msgid "Import an RIS reference file"
msgstr "Importa um arquivo de referência do RIS"
-#: mainwindow.cpp:387
-#, fuzzy
-msgid "Import PDF File..."
-msgstr "Importar Arquivo"
-
-#: mainwindow.cpp:388
-#, fuzzy
-msgid "Import a PDF file"
-msgstr "Importa um arquivo de valores separados por vírgula"
-
-#: mainwindow.cpp:394
+#: mainwindow.cpp:372
msgid "Import Audio File Metadata..."
msgstr "Importar Meta-dados de um Arquivo de Áudio..."
-#: mainwindow.cpp:395
+#: mainwindow.cpp:373
msgid "Import meta-data from audio files"
msgstr "Importa meta-dados de arquivos de áudio"
-#: mainwindow.cpp:404
+#: mainwindow.cpp:382
msgid "Import Audio CD Data..."
msgstr "Importar Dados de CD de Áudio..."
-#: mainwindow.cpp:405
+#: mainwindow.cpp:383
msgid "Import audio CD information"
msgstr "Importa informações de um CD de áudio "
-#: mainwindow.cpp:414
-msgid "Import GCstar Data..."
-msgstr "Importar Dados do GCstar..."
-
-#: mainwindow.cpp:415
-msgid "Import a GCstar data file"
-msgstr "Importa um arquivo de dados do GCstar"
+#: mainwindow.cpp:392
+msgid "Import GCfilms Data..."
+msgstr "Importar Dados do GCfilms..."
-#: mainwindow.cpp:421
-#, fuzzy
-msgid "Import Griffith Data..."
-msgstr "Importar Dados do GCstar..."
-
-#: mainwindow.cpp:422
-#, fuzzy
-msgid "Import a Griffith database"
-msgstr "Exporta para um banco de dados PilotDB"
+#: mainwindow.cpp:393
+msgid "Import a GCfilms data file"
+msgstr "Importa um arquivo de dados do GCfilms"
-#: mainwindow.cpp:428
+#: mainwindow.cpp:399
msgid "Import Ant Movie Catalog Data..."
msgstr "Importar Dados do Ant Movie Catalog..."
-#: mainwindow.cpp:429
+#: mainwindow.cpp:400
msgid "Import an Ant Movie Catalog data file"
msgstr "Importa um arquivo de dados do Ant Movie Catalog"
-#: mainwindow.cpp:435
+#: mainwindow.cpp:406
msgid "Import File Listing..."
msgstr "Importar Listagem de Arquivos..."
-#: mainwindow.cpp:436
+#: mainwindow.cpp:407
msgid "Import information about files in a folder"
msgstr "Importa informações sobre os arquivos de uma pasta "
-#: mainwindow.cpp:442
+#: mainwindow.cpp:413
msgid "Import XSL Transform..."
msgstr "Importar Transformação XSL..."
-#: mainwindow.cpp:443
+#: mainwindow.cpp:414
msgid "Import using an XSL Transform"
msgstr "Importa dados utilizando uma transformação XSL "
-#: mainwindow.cpp:455 rc.cpp:12
+#: mainwindow.cpp:426 rc.cpp:12
#, no-c-format
msgid "&Export"
msgstr "&Exportar "
-#: mainwindow.cpp:457
+#: mainwindow.cpp:428
msgid "Export the collection data to other formats"
msgstr "Exporta os dados da coleção para outros formatos "
-#: mainwindow.cpp:461
+#: mainwindow.cpp:432
msgid "Export to XML..."
-msgstr "Exportar para XML... "
+msgstr "Exportar para XML..."
-#: mainwindow.cpp:462
+#: mainwindow.cpp:433
msgid "Export to a Tellico XML file"
msgstr "Exporta para um arquivo XML do Tellico "
-#: mainwindow.cpp:468
+#: mainwindow.cpp:439
msgid "Export to Zip..."
-msgstr "Exportar para Zip... "
+msgstr "Exportar para Zip..."
-#: mainwindow.cpp:469
+#: mainwindow.cpp:440
msgid "Export to a Tellico Zip file"
msgstr "Exporta para um arquivo Zip do Tellico "
-#: mainwindow.cpp:475
+#: mainwindow.cpp:446
msgid "Export to HTML..."
-msgstr "Exportar para HTML... "
+msgstr "Exportar para HTML..."
-#: mainwindow.cpp:476
+#: mainwindow.cpp:447
msgid "Export to an HTML file"
msgstr "Exporta para um arquivo HTML "
-#: mainwindow.cpp:482
+#: mainwindow.cpp:453
msgid "Export to CSV..."
-msgstr "Exportar para CSV... "
+msgstr "Exportar para CSV..."
-#: mainwindow.cpp:483
+#: mainwindow.cpp:454
msgid "Export to a comma-separated values file"
msgstr "Exporta para um arquivo de valores separados por vírgula "
-#: mainwindow.cpp:489
+#: mainwindow.cpp:460
msgid "Export to PilotDB..."
-msgstr "Exportar para &PilotDB... "
+msgstr "Exportar para PilotDB..."
-#: mainwindow.cpp:490
+#: mainwindow.cpp:461
msgid "Export to a PilotDB database"
msgstr "Exporta para um banco de dados PilotDB"
-#: mainwindow.cpp:496
+#: mainwindow.cpp:467
msgid "Export to Alexandria..."
-msgstr "Exportar para o Alexandria... "
+msgstr "Exportar para o Alexandria..."
-#: mainwindow.cpp:497
+#: mainwindow.cpp:468
msgid "Export to an Alexandria library"
msgstr "Exporta para uma biblioteca do Alexandria "
-#: mainwindow.cpp:503
+#: mainwindow.cpp:474
msgid "Export to Bibtex..."
-msgstr "Exportar para o BibTeX... "
+msgstr "Exportar para o BibTeX..."
-#: mainwindow.cpp:504
+#: mainwindow.cpp:475
msgid "Export to a bibtex file"
msgstr "Exporta para um arquivo do BibTeX "
-#: mainwindow.cpp:510
+#: mainwindow.cpp:481
msgid "Export to Bibtexml..."
msgstr "Exportar para o BibTeXML..."
-#: mainwindow.cpp:511
+#: mainwindow.cpp:482
msgid "Export to a Bibtexml file"
msgstr "Exporta para um arquivo BibTeXML"
-#: mainwindow.cpp:517
+#: mainwindow.cpp:488
msgid "Export to ONIX..."
-msgstr "Exportar para o ONIX... "
+msgstr "Exportar para o ONIX..."
-#: mainwindow.cpp:518
+#: mainwindow.cpp:489
msgid "Export to an ONIX file"
msgstr "Exporta para um arquivo ONIX"
-#: mainwindow.cpp:524
+#: mainwindow.cpp:495
msgid "Export to GCfilms..."
-msgstr "Exportar para o GCfilms... "
+msgstr "Exportar para o GCfilms..."
-#: mainwindow.cpp:525
+#: mainwindow.cpp:496
msgid "Export to a GCfilms data file"
msgstr "Exporta para um arquivo de dados do GCfilms"
-#: mainwindow.cpp:531
-#, fuzzy
-msgid "Export to GCstar..."
-msgstr "Exportar para o GCfilms... "
-
-#: mainwindow.cpp:532
-#, fuzzy
-msgid "Export to a GCstar data file"
-msgstr "Exporta para um arquivo de dados do GCfilms"
-
-#: mainwindow.cpp:536
+#: mainwindow.cpp:502
msgid "Export XSL Transform..."
msgstr "Exportar Transformação XSL..."
-#: mainwindow.cpp:537
+#: mainwindow.cpp:503
msgid "Export using an XSL Transform"
msgstr "Exporta utilizando uma transformação XSL"
-#: mainwindow.cpp:546
+#: mainwindow.cpp:512
msgid "Cut the selected text and puts it in the clipboard"
msgstr "Corta o texto selecionado e coloca-o na área de transferência"
-#: mainwindow.cpp:548
+#: mainwindow.cpp:514
msgid "Copy the selected text to the clipboard"
msgstr "Copia o texto selecionado para a área de transferência"
-#: mainwindow.cpp:550
+#: mainwindow.cpp:516
msgid "Paste the clipboard contents"
msgstr "Cola o conteúdo da área de transferência"
-#: mainwindow.cpp:552
+#: mainwindow.cpp:518
msgid "Select all the entries in the collection"
msgstr "Seleciona todos os registros da coleção"
-#: mainwindow.cpp:554
+#: mainwindow.cpp:520
msgid "Deselect all the entries in the collection"
msgstr "De-seleciona todos os registros da coleção"
-#: mainwindow.cpp:556
+#: mainwindow.cpp:522
msgid "Internet Search..."
msgstr "Pesquisa na Internet..."
-#: mainwindow.cpp:559
+#: mainwindow.cpp:525
msgid "Search the internet..."
-msgstr "Pesquisa registros em fontes da Internet"
-
-#: mainwindow.cpp:561
-msgid "Advanced &Filter..."
-msgstr "&Filtro Avançado..."
-
-#: mainwindow.cpp:564 mainwindow.cpp:719
-msgid "Filter the collection"
-msgstr "Filtrar a coleção "
+msgstr "Pesquisa registros em fontes da Internet..."
-#: mainwindow.cpp:569
+#: mainwindow.cpp:530
msgid "&New Entry..."
msgstr "&Novo registro..."
-#: mainwindow.cpp:572
+#: mainwindow.cpp:533
msgid "Create a new entry"
msgstr "Cria um novo registro"
-#: controller.cpp:620 mainwindow.cpp:573
+#: controller.cpp:606 mainwindow.cpp:534
msgid "&Edit Entry..."
msgstr "&Editar Registro..."
-#: mainwindow.cpp:576
+#: mainwindow.cpp:537
msgid "Edit the selected entries"
msgstr "Edita os registros selecionados"
-#: controller.cpp:621 mainwindow.cpp:577
+#: controller.cpp:607 mainwindow.cpp:538
msgid "D&uplicate Entry"
msgstr "D&uplicar Registro"
-#: mainwindow.cpp:580
+#: mainwindow.cpp:541
msgid "Copy the selected entries"
msgstr "Copia os registros selecionados"
-#: controller.cpp:623 mainwindow.cpp:581
+#: controller.cpp:609 mainwindow.cpp:542
msgid "&Delete Entry"
msgstr "&Apagar Registro"
-#: mainwindow.cpp:584
+#: mainwindow.cpp:545
msgid "Delete the selected entries"
msgstr "Apaga os registros selecionados "
-#: mainwindow.cpp:585
-#, fuzzy
-msgid "&Merge Entries"
-msgstr "&Apagar Registros"
-
-#: mainwindow.cpp:588
-#, fuzzy
-msgid "Merge the selected entries"
-msgstr "Apaga os registros selecionados "
-
-#: mainwindow.cpp:591
+#: mainwindow.cpp:547
msgid "&Generate Reports..."
-msgstr "&Gerar Relatórios... "
+msgstr "&Gerar Relatórios..."
-#: mainwindow.cpp:594
+#: mainwindow.cpp:550
msgid "Generate collection reports"
msgstr "Gera relatórios da coleção "
-#: mainwindow.cpp:595
+#: mainwindow.cpp:551
msgid "Check-&out..."
msgstr "&Registrar saída..."
-#: mainwindow.cpp:598
+#: mainwindow.cpp:554
msgid "Check-out the selected items"
msgstr "Registra saída dos itens selecionados "
-#: mainwindow.cpp:599
+#: mainwindow.cpp:555
msgid "Check-&in"
-msgstr "Registrar &entrada..."
+msgstr "Registrar &entrada"
-#: mainwindow.cpp:602
+#: mainwindow.cpp:558
msgid "Check-in the selected items"
msgstr "Registra entrada dos itens selecionados"
-#: mainwindow.cpp:604
+#: mainwindow.cpp:560
msgid "&Rename Collection..."
msgstr "&Renomear Coleção..."
-#: mainwindow.cpp:607
+#: mainwindow.cpp:563
msgid "Rename the collection"
msgstr "Renomeia a coleção"
-#: mainwindow.cpp:608
+#: mainwindow.cpp:564
msgid "Collection &Fields..."
msgstr "&Campos da Coleção..."
-#: mainwindow.cpp:611
+#: mainwindow.cpp:567
msgid "Modify the collection fields"
msgstr "Modifica os campos da coleção"
-#: mainwindow.cpp:612
+#: mainwindow.cpp:568
msgid "Convert to &Bibliography"
msgstr "Converter para &Bibliografia"
-#: mainwindow.cpp:615
+#: mainwindow.cpp:571
msgid "Convert a book collection to a bibliography"
msgstr "Converter uma coleção de livros para uma bibliografia"
-#: mainwindow.cpp:616
+#: mainwindow.cpp:572
msgid "String &Macros..."
msgstr "&Macros de String..."
-#: mainwindow.cpp:619
+#: mainwindow.cpp:575
msgid "Edit the bibtex string macros"
msgstr "Editar linhas de macros do BibTeX "
-#: mainwindow.cpp:626
+#: mainwindow.cpp:582
msgid "Copy Bibtex to Cli&pboard"
msgstr "Copia BibTeX para a &Área de Transferência"
-#: mainwindow.cpp:627
+#: mainwindow.cpp:583
msgid "Copy bibtex citations to the clipboard"
msgstr "Copia citações do BibTeX para a área de transferência"
-#: mainwindow.cpp:632
+#: mainwindow.cpp:588
msgid "Cite Entry in &LyX"
msgstr "Citar Registro no &LyX"
-#: mainwindow.cpp:633
+#: mainwindow.cpp:589
msgid "Cite the selected entries in LyX"
msgstr "Citar os registros selecionados no LyX"
-#: mainwindow.cpp:638
+#: mainwindow.cpp:594
msgid "Ci&te Entry in OpenOffice.org"
msgstr "Ci&tar Registro no OpenOffice.org"
-#: mainwindow.cpp:639
+#: mainwindow.cpp:595
msgid "Cite the selected entries in OpenOffice.org"
msgstr "Citar os registros selecionados no OpenOffice.org"
-#: controller.cpp:622 mainwindow.cpp:647 rc.cpp:18
+#: controller.cpp:608 mainwindow.cpp:603 rc.cpp:18
#, no-c-format
msgid "&Update Entry"
msgstr "&Atualizar o Registro"
-#: mainwindow.cpp:652
+#: mainwindow.cpp:608
msgid "All Sources"
msgstr "Todas as Fontes"
-#: mainwindow.cpp:653
+#: mainwindow.cpp:609
msgid "Update entry data from all available sources"
msgstr "Atualizar o registro a partir de todas as fontes disponíveis "
-#: mainwindow.cpp:665
+#: mainwindow.cpp:621
msgid "Show Grou&p View"
msgstr "Mostrar Visão de &Grupo"
-#: mainwindow.cpp:668
+#: mainwindow.cpp:624
msgid "Enable/disable the group view"
msgstr "Ativar/desativar a visão de grupo"
-#: mainwindow.cpp:669
+#: mainwindow.cpp:625
msgid "Hide Grou&p View"
msgstr "Ocultar Visão de Gru&po "
-#: mainwindow.cpp:671
+#: mainwindow.cpp:627
msgid "Show Entry &Editor"
msgstr "Mostrar &Editor de Registros"
-#: mainwindow.cpp:674
+#: mainwindow.cpp:630
msgid "Enable/disable the editor"
msgstr "Habilitar/desabilitar o editor"
-#: mainwindow.cpp:675
+#: mainwindow.cpp:631
msgid "Hide Entry &Editor"
msgstr "Ocultar &Editor de Registros"
-#: mainwindow.cpp:677
+#: mainwindow.cpp:633
msgid "Show Entry &View"
msgstr "Mostrar &Visão de Registros"
-#: mainwindow.cpp:680
+#: mainwindow.cpp:636
msgid "Enable/disable the entry view"
msgstr "Habilitar/desabilitar visão de registros"
-#: mainwindow.cpp:681
+#: mainwindow.cpp:637
msgid "Hide Entry &View"
msgstr "Ocultar &Visão de Registros"
-#: mainwindow.cpp:693
+#: mainwindow.cpp:639
+msgid "Advanced &Filter..."
+msgstr "&Filtro Avançado..."
+
+#: mainwindow.cpp:642 mainwindow.cpp:680
+msgid "Filter the collection"
+msgstr "Filtrar a coleção "
+
+#: mainwindow.cpp:654
msgid "Change Grouping"
msgstr "Alterar o Agrupamento"
-#: mainwindow.cpp:697
+#: mainwindow.cpp:658
msgid "&Group Selection"
msgstr "Seleção de &Grupo"
-#: mainwindow.cpp:700
+#: mainwindow.cpp:661
msgid "Change the grouping of the collection"
msgstr "Alterar o agrupamento da coleção"
-#: filterview.cpp:33 filterview.cpp:85 mainwindow.cpp:702 mainwindow.cpp:717
+#: filterview.cpp:33 filterview.cpp:85 mainwindow.cpp:663 mainwindow.cpp:678
msgid "Filter"
msgstr "Filtrar"
-#: mainwindow.cpp:705
+#: mainwindow.cpp:666
msgid "Clear Filter"
msgstr "Limpar Filtro"
-#: mainwindow.cpp:710
+#: mainwindow.cpp:671
msgid "Filter here..."
msgstr "Filtrar Aqui..."
-#: mainwindow.cpp:768
+#: mainwindow.cpp:727
msgid "Groups"
msgstr "Grupos"
-#: mainwindow.cpp:769
+#: mainwindow.cpp:728
msgid ""
"<qt>The <i>Group View</i> sorts the entries into groupings based on a "
"selected field.</qt>"
@@ -3445,74 +3183,60 @@ msgstr ""
"<qt>A <i>Visão de Grupos</i> classifica os registros em grupos com base em "
"um campo selecionado.</qt>"
-#: mainwindow.cpp:776
+#: mainwindow.cpp:735
msgid ""
-"<qt>The <i>Column View</i> shows the value of multiple fields for each "
-"entry.</qt>"
+"<qt>The <i>Column View</i> shows the value of multiple fields for each entry."
+"</qt>"
msgstr ""
"<qt>A <i>Visão de Colunas</i> mostra os valores de vários campos para cada "
"registro</qt>"
-#: mainwindow.cpp:831
-#, fuzzy
-msgid "Welcome to the Tellico Collection Manager"
-msgstr "Tellico - um gerenciador de coleções para o KDE"
-
-#: mainwindow.cpp:833
-msgid ""
-"<h3>Tellico is a tool for managing collections of books, videos, music, and "
-"whatever else you want to catalog.</h3><h3>New entries can be added to your "
-"collection by <a href=\"tc:///coll_new_entry\">entering data manually</a> or "
-"by <a href=\"tc:///edit_search_internet\">downloading data</a> from various "
-"Internet sources.</h3>"
-msgstr ""
-
-#: mainwindow.cpp:1066
+#: mainwindow.cpp:1021
msgid "Creating new document..."
-msgstr "Criação de um novo documento... "
+msgstr "Criação de um novo documento..."
-#: mainwindow.cpp:1098 mainwindow.cpp:1117 mainwindow.cpp:1135
+#: mainwindow.cpp:1053 mainwindow.cpp:1073 mainwindow.cpp:1091
msgid "Opening file..."
msgstr "Abrindo arquivo..."
-#: mainwindow.cpp:1108
+#: mainwindow.cpp:1063
msgid "Open File"
msgstr "Abrir Arquivo"
-#: document.cpp:192 mainwindow.cpp:1215
+#: document.cpp:189 mainwindow.cpp:1165
msgid "Saving file..."
msgstr "Salvando Arquivo..."
-#: mainwindow.cpp:1226
+#: mainwindow.cpp:1175
msgid ""
"<qt><p>You are saving a file with many images, which causes Tellico to slow "
"down significantly. Do you want to save the images separately in Tellico's "
"data directory to improve performance?</p><p>Your choice can always be "
"changed in the configuration dialog.</p></qt>"
msgstr ""
-"<qt><p>Você está salvando um arquivo com muitas imagens, levando o Tellico "
-"a ficar significativamente lento. Você gostaria de salvar as imagens "
-"separadamente no diretório de dados do Tellico para melhorar a "
-"performance?</p><p>Sua escolha pode sempre ser alterada na caixa de diálogo "
-"de configuração.</p></qt>"
+"<qt><p>Você está salvando um arquivo com muitas imagens, levando o Tellico a "
+"ficar significativamente lento. Você gostaria de salvar as imagens "
+"separadamente no diretório de dados do Tellico para melhorar a performance?</"
+"p><p>Sua escolha pode sempre ser alterada na caixa de diálogo de "
+"configuração.</p></qt>"
-#: mainwindow.cpp:1231
+#: mainwindow.cpp:1180
msgid "Save Images Separately"
msgstr "Salvar Imagens Separadamente"
-#: mainwindow.cpp:1232
+#: mainwindow.cpp:1181
msgid "Save Images in File"
msgstr "Salvar Imagens no Arquivo"
-#: mainwindow.cpp:1265
+#: mainwindow.cpp:1213
msgid "Saving file with a new filename..."
msgstr "Salvando arquivo com um novo nome..."
-#: mainwindow.cpp:1303 mainwindow.cpp:1353
+#: mainwindow.cpp:1253 mainwindow.cpp:1305
msgid "Printing..."
msgstr "Impressão..."
-#: mainwindow.cpp:1312
+#: mainwindow.cpp:1262
msgid ""
"The collection is currently being filtered to show a limited subset of the "
"entries. Only the visible entries will be printed. Continue?"
@@ -3520,139 +3244,126 @@ msgstr ""
"A coleção esta sendo filtrada para mostrar um subconjunto limitado de seus "
"registros. Apenas os registros visíveis serão impressos. Continuar?"
-#: mainwindow.cpp:1337
+#: mainwindow.cpp:1288
msgid "Processing document..."
msgstr "Processamento do documento..."
-#: mainwindow.cpp:1360
+#: mainwindow.cpp:1313
msgid "Exiting..."
msgstr "Saindo..."
-#: mainwindow.cpp:1498
+#: mainwindow.cpp:1453
#, c-format
msgid "Total entries: %1"
msgstr "Total de registros: %1"
-#: mainwindow.cpp:1505
+#: mainwindow.cpp:1460
msgid "(%1 filtered; %2 selected)"
-msgstr ""
-"(%1 filtrado, %2 selecionado)\n"
-"(%1 filtrados, %2 selecionados)"
+msgstr "(%1 filtrados, %2 selecionados)"
-#: mainwindow.cpp:1508
+#: mainwindow.cpp:1463
msgid "(%1 filtered)"
-msgstr ""
-"(%1 filtrado)\n"
-"(%1 filtrados)"
+msgstr "(%1 filtrados)"
-#: mainwindow.cpp:1511
+#: mainwindow.cpp:1466
msgid "(%1 selected)"
-msgstr ""
-"(%1 selecionado)\n"
-"(%1 selecionados)"
+msgstr "(%1 selecionados)"
-#: mainwindow.cpp:1679
+#: mainwindow.cpp:1640
#, c-format
msgid "Print %1"
msgstr "Impressão %1"
-#: mainwindow.cpp:1712
+#: mainwindow.cpp:1673
#, c-format
msgid "Page %1"
msgstr "Página %1"
-#: entryview.cpp:188 mainwindow.cpp:1739
+#: entryview.cpp:171 mainwindow.cpp:1700
msgid "Please check your installation."
msgstr "Por favor, confira sua instalação."
-#: mainwindow.cpp:1849
+#: mainwindow.cpp:1789
msgid "Importing data..."
msgstr "Importação de dados..."
-#: mainwindow.cpp:1858
+#: mainwindow.cpp:1798
msgid "Import File"
msgstr "Importar Arquivo"
-#: mainwindow.cpp:1864
+#: mainwindow.cpp:1804
msgid "Import Directory"
msgstr "Importar Diretório"
-#: mainwindow.cpp:1885
+#: mainwindow.cpp:1892
msgid "Exporting data..."
msgstr "Exportação de dados..."
-#: mainwindow.cpp:1907
+#: mainwindow.cpp:1914
msgid "Export As"
msgstr "Exportar Como"
-#: mainwindow.cpp:1935
+#: mainwindow.cpp:1943
msgid "String Macros"
msgstr "Macros de String"
-#: mainwindow.cpp:1936
+#: mainwindow.cpp:1944
msgid "Macro"
msgstr "Macro"
-#: mainwindow.cpp:1936
+#: mainwindow.cpp:1944
msgid "String"
msgstr "String"
-#: mainwindow.cpp:1999
+#: mainwindow.cpp:2007
msgid "Creating citations..."
msgstr "Criando citações..."
-#: mainwindow.cpp:2104
+#: mainwindow.cpp:2157
msgid "Filters"
msgstr "Filtros"
-#: mainwindow.cpp:2105
+#: mainwindow.cpp:2158
msgid ""
-"<qt>The <i>Filter View</i> shows the entries which meet certain filter "
-"rules.</qt>"
+"<qt>The <i>Filter View</i> shows the entries which meet certain filter rules."
+"</qt>"
msgstr ""
"<qt>A <i>Visão de Filtros</i> mostra os registros que atendem determinadas "
"regras de filtros.</qt>"
-#: mainwindow.cpp:2121
+#: mainwindow.cpp:2174
msgid "Loans"
msgstr "Empréstimos"
-#: mainwindow.cpp:2122
+#: mainwindow.cpp:2175
msgid ""
"<qt>The <i>Loan View</i> shows a list of all the people who have borrowed "
"items from your collection.</qt>"
msgstr ""
-"<qt>A <i>Visão de Empréstimos</i> mostra uma lista com todas as pessoas "
-"que pegaram itens emprestados de sua coleção.</qt>"
+"<qt>A <i>Visão de Empréstimos</i> mostra uma lista com todas as pessoas que "
+"pegaram itens emprestados de sua coleção.</qt>"
-#: mainwindow.cpp:2255
+#: mainwindow.cpp:2308
#, c-format
msgid "Update entry data from %1"
msgstr "Atualiza os dados do registro %1"
-#: mainwindow.cpp:2274
-msgid ""
-"Tellico can only import one file of this type at a time. Only %1 will be "
-"imported."
-msgstr ""
-
-#: filehandler.cpp:193
+#: filehandler.cpp:190
#, c-format
msgid "Tellico is unable to load the image - %1."
msgstr "Tellico não pôde carregar a imagem - %1."
-#: filehandler.cpp:207
-msgid ""
-"A file named \"%1\" already exists. Are you sure you want to overwrite it?"
+#: filehandler.cpp:204
+msgid "A file named \"%1\" already exists. Are you sure you want to overwrite it?"
msgstr ""
"Um arquivo chamado \"%1\" já existe. Tem certeza que deseja mesmo "
"sobrescrevê-lo?"
-#: filehandler.cpp:210
+#: filehandler.cpp:207
msgid "Overwrite File?"
msgstr "Sobrescrever o Arquivo?"
-#: filehandler.cpp:211
+#: filehandler.cpp:208
msgid "Overwrite"
msgstr "Sobrescrever"
@@ -3660,70 +3371,70 @@ msgstr "Sobrescrever"
msgid "Filter (Sort by Count)"
msgstr "Filtro (Classificar por Contagem)"
-#: controller.cpp:427
+#: controller.cpp:423
msgid "Do you really want to delete this entry?"
msgstr "Quer mesmo apagar este registro?"
-#: controller.cpp:429
+#: controller.cpp:425
msgid "Delete Entry"
-msgstr "Apagar a entrada?"
+msgstr "Apagar Entrada"
-#: controller.cpp:439
+#: controller.cpp:435
msgid "Do you really want to delete these entries?"
msgstr "Quer mesmo apagar estes registros?"
-#: controller.cpp:443
+#: controller.cpp:439
msgid "Delete Multiple Entries"
msgstr "Apagar Múltiplos Registros"
-#: controller.cpp:626
+#: controller.cpp:611
msgid "&Edit Entries..."
msgstr "&Editar Registros..."
-#: controller.cpp:627
+#: controller.cpp:612
msgid "D&uplicate Entries"
msgstr "D&uplicar Registros"
-#: controller.cpp:628
+#: controller.cpp:613
msgid "&Update Entries"
msgstr "&Editar Registros"
-#: controller.cpp:629
+#: controller.cpp:614
msgid "&Delete Entries"
msgstr "&Apagar Registros"
-#: controller.cpp:684
+#: controller.cpp:668
msgid ""
"The following items are already loaned, but Tellico does not currently "
"support lending an item multiple times. They will be removed from the list "
"of items to lend."
msgstr ""
-"Os seguintes itens já estão emprestados. Como Tellico não suporta "
-"emprestar itens múltiplas vezes, eles serão removidos da lista de itens a "
-"serem emprestados."
+"Os seguintes itens já estão emprestados. Como Tellico não suporta emprestar "
+"itens múltiplas vezes, eles serão removidos da lista de itens a serem "
+"emprestados."
-#: calendarhandler.cpp:167
+#: calendarhandler.cpp:166
msgid "Default Calendar"
msgstr "Calendário Padrão"
-#: calendarhandler.cpp:175
+#: calendarhandler.cpp:174
msgid ""
"At the moment, Tellico only supports local calendar resources. The active "
"calendar is remotely located, so your loans will not be added."
msgstr ""
"Presentemente, Tellico suporta apenas recursos de calendário locais. O "
-"calendário ativo está localizado remotamente, então seus empréstimos "
-"não serão adicionados."
+"calendário ativo está localizado remotamente, então seus empréstimos não "
+"serão adicionados."
-#: calendarhandler.cpp:180
+#: calendarhandler.cpp:179
msgid "Active Calendar"
msgstr "Calendário Ativo"
-#: calendarhandler.cpp:203
+#: calendarhandler.cpp:202
msgid "Tellico: %1 is due to return \"%2\""
msgstr "Tellico: %1 está previsto para ser devolvido para \"%2\""
-#: collection.cpp:32
+#: collection.cpp:31
msgid "(Empty)"
msgstr "(Vazio)"
@@ -3767,16 +3478,6 @@ msgstr "Autor da biblioteca btparse"
msgid "Code examples and general inspiration"
msgstr "Exemplos de código e inspiração em geral"
-#: main.cpp:50
-#, fuzzy
-msgid "Author of libcsv library"
-msgstr "Autor da biblioteca btparse"
-
-#: main.cpp:52
-#, fuzzy
-msgid "Author of rtf2html library"
-msgstr "Autor da biblioteca btparse"
-
#: collectionfieldsdialog.cpp:56
msgid "Collection Fields"
msgstr "Campos da Coleção"
@@ -3843,7 +3544,7 @@ msgstr "O tipo do campo determina que valores podem ser utilizados. "
#: collectionfieldsdialog.cpp:136
msgid "<i>Simple Text</i> is used for most fields. "
-msgstr "<i>Texto Simples</i> é utilizado para a maioria dos campos."
+msgstr "<i>Texto Simples</i> é utilizado para a maioria dos campos. "
#: collectionfieldsdialog.cpp:137
msgid "<i>Paragraph</i> is for large text blocks. "
@@ -3855,11 +3556,11 @@ msgstr "<i>Escolha</i> limita o campo a certos valores. "
#: collectionfieldsdialog.cpp:139
msgid "<i>Checkbox</i> is for a simple yes/no value. "
-msgstr "<i>Marcador</i> é usado para descrever valores do tipo sim/não."
+msgstr "<i>Marcador</i> é usado para descrever valores do tipo sim/não. "
#: collectionfieldsdialog.cpp:140
msgid "<i>Number</i> indicates that the field contains a numerical value. "
-msgstr "<i>Número</i> indica que o campo contém um valor numérico."
+msgstr "<i>Número</i> indica que o campo contém um valor numérico. "
#: collectionfieldsdialog.cpp:141
msgid ""
@@ -3867,25 +3568,23 @@ msgid ""
"files. "
msgstr ""
"<i>URL</i> é para os campos que fazem referência a uma URL, contendo "
-"referências a outros arquivos."
+"referências a outros arquivos. "
#: collectionfieldsdialog.cpp:142
msgid "A <i>Table</i> may hold one or more columns of values. "
-msgstr "Uma <i>Tabela</i> pode conter uma ou duas colunas de valores."
+msgstr "Uma <i>Tabela</i> pode conter uma ou duas colunas de valores. "
#: collectionfieldsdialog.cpp:143
msgid "An <i>Image</i> field holds a picture. "
-msgstr "Um campo <i>Imagem</i> serve para armazenar uma foto ou figura."
+msgstr "Um campo <i>Imagem</i> serve para armazenar uma foto ou figura. "
#: collectionfieldsdialog.cpp:144
-msgid ""
-"A <i>Date</i> field can be used for values with a day, month, and year. "
-msgstr ""
-"Um campo <i>Data</i> pode ser utilizado para valores com dia, mês e ano."
+msgid "A <i>Date</i> field can be used for values with a day, month, and year. "
+msgstr "Um campo <i>Data</i> pode ser utilizado para valores com dia, mês e ano. "
#: collectionfieldsdialog.cpp:145
msgid "A <i>Rating</i> field uses stars to show a rating number. "
-msgstr "Campos <i> Classificação</i> usam estrelas para indicar uma nota."
+msgstr "Campos <i> Classificação</i> usam estrelas para indicar uma nota. "
#: collectionfieldsdialog.cpp:146
msgid ""
@@ -3893,7 +3592,7 @@ msgid ""
"formatted according to the field description. "
msgstr ""
"Um campo <i>Dependente</i> depende dos valores de outros campos, sendo "
-"formatado conforme a descrição do campo."
+"formatado conforme a descrição do campo. "
#: collectionfieldsdialog.cpp:148
msgid ""
@@ -3901,7 +3600,7 @@ msgid ""
"export. "
msgstr ""
"Um campo <i>Read Only</i> é utilizado para valores internos, que podem ser "
-"úteis para importação e exportação de dados."
+"úteis para importação e exportação de dados. "
#: collectionfieldsdialog.cpp:157
msgid "Cate&gory:"
@@ -3922,10 +3621,9 @@ msgid ""
"field. For <i>Dependent</i> fields, the description is a format string such "
"as \"%{year} %{title}\" where the named fields get substituted in the string."
msgstr ""
-"A descrição serve como lembrete de que informação o campo deve conter. "
-"Para campos <i>Dependentes</i>, a descrição é uma string de formatação "
-"do tipo \"%{year} %{title}\" onde os campos nomeados são substituídos por "
-"seus valores."
+"A descrição serve como lembrete de que informação o campo deve conter. Para "
+"campos <i>Dependentes</i>, a descrição é uma string de formatação do tipo \"%"
+"{year} %{title}\" onde os campos nomeados são substituídos por seus valores."
#: collectionfieldsdialog.cpp:193
msgid "&Default value:"
@@ -3942,13 +3640,12 @@ msgstr "Va&lores permitidos:"
#: collectionfieldsdialog.cpp:208
msgid ""
"<qt>For <i>Choice</i>-type fields, these are the only values allowed. They "
-"are placed in a combo box. The possible values have to be separated by a "
-"semi-colon, for example: \"dog; cat; mouse\"</qt>"
+"are placed in a combo box. The possible value have to be seperated by a semi-"
+"colon, for example: \"dog; cat; mouse\"</qt>"
msgstr ""
"<qt>Para os campos do tipo <i>Escolha</i>, estes são os únicos valores "
-"permitidos. Eles são colocados numa lista de opções. Os possíveis "
-"valores tem de ser separados por ponto e vírgula, por exemplo: \"cachorro, "
-"gato, rato\"</qt>"
+"permitidos. Eles são colocados numa lista de opções. O valores possíveis têm de ser separados por ponto e vírgula, por exemplo: \"cachorro; gato; rato"
+"\"</qt>"
#: collectionfieldsdialog.cpp:215
msgid "Extended &properties:"
@@ -3987,11 +3684,8 @@ msgid "Allow auto-capitalization only"
msgstr "Permitir apenas a formatação automática em letras maiúsculas"
#: collectionfieldsdialog.cpp:231
-msgid ""
-"This option allows the field to be capitalized, but not specially formatted."
-msgstr ""
-"Esta opção permite pôr o campo em maiúsculas, mas sem formatações "
-"especiais."
+msgid "This option allows the field to be capitalized, but not specially formatted."
+msgstr "Esta opção permite pôr o campo em maiúsculas, mas sem formatações especiais."
#: collectionfieldsdialog.cpp:233
msgid "Format as a title"
@@ -4002,8 +3696,8 @@ msgid ""
"This option capitalizes and formats the field as a title, but only if those "
"options are globally set."
msgstr ""
-"Esta opção põe em maiúsculas e formata o campo como um título,mas "
-"apenas se estas opções forem definidas globalmente."
+"Esta opção põe em maiúsculas e formata o campo como um título,mas apenas se "
+"estas opções forem definidas globalmente."
#: collectionfieldsdialog.cpp:236
msgid "Format as a name"
@@ -4014,8 +3708,8 @@ msgid ""
"This option capitalizes and formats the field as a name, but only if those "
"options are globally set."
msgstr ""
-"Esta opção põe em maiúsculas e formata o campo como um nome,mas apenas "
-"se estas opções forem definidas globalmente."
+"Esta opção põe em maiúsculas e formata o campo como um nome,mas apenas se "
+"estas opções forem definidas globalmente."
#: collectionfieldsdialog.cpp:241
msgid "Field Options"
@@ -4042,48 +3736,46 @@ msgid ""
"If checked, Tellico will parse the values in the field for multiple values, "
"separated by a semi-colon."
msgstr ""
-"Se selecionado, Tellico separará os valores separados por ponto e vírgula "
-"no campo de múltiplos valores."
+"Se selecionado, Tellico separará os valores separados por ponto e vírgula no "
+"campo de múltiplos valores."
#: collectionfieldsdialog.cpp:248
msgid "Allow grouping"
msgstr "Permitir agrupamento"
#: collectionfieldsdialog.cpp:249
-msgid ""
-"If checked, this field may be used to group the entries in the group view."
+msgid "If checked, this field may be used to group the entries in the group view."
msgstr ""
"Se selecionado, este campo será utilizado para reagrupar os registros na "
"visão de grupos."
#: collectionfieldsdialog.cpp:263
msgid "Revert the selected field's properties to the default values."
-msgstr ""
-"Reverter as propriedades dos campos selecionados para seus valores padrão."
+msgstr "Reverter as propriedades dos campos selecionados para seus valores padrão."
-#: collectionfieldsdialog.cpp:306
+#: collectionfieldsdialog.cpp:302
msgid "Modify Fields"
msgstr "Modificar Campos"
-#: collectionfieldsdialog.cpp:320
+#: collectionfieldsdialog.cpp:316
msgid ""
"<qt>Removing allowed values from the <i>%1</i> field which currently exist "
"in the collection may cause data corruption. Do you want to keep your "
"modified values or cancel and revert to the current ones?</qt>"
msgstr ""
"<qt>Apagar os valores possíveis do campo <i>%1</i> que existem na coleção "
-"pode causar corrupção de dados. Você deseja manter seus valores "
-"modificados ou cancelar e reverter aos valores anteriores?</qt>"
+"pode causar corrupção de dados. Você deseja manter seus valores modificados "
+"ou cancelar e reverter aos valores anteriores?</qt>"
-#: collectionfieldsdialog.cpp:325
+#: collectionfieldsdialog.cpp:321
msgid "Keep modified values"
msgstr "Manter os valores modificados"
-#: collectionfieldsdialog.cpp:745
+#: collectionfieldsdialog.cpp:741
msgid "Revert Field Properties"
msgstr "Reverter Propriedades do Campo"
-#: collectionfieldsdialog.cpp:746
+#: collectionfieldsdialog.cpp:742
msgid ""
"<qt><p>Do you really want to revert the properties for the <em>%1</em> field "
"back to their default values?</p></qt>"
@@ -4091,35 +3783,35 @@ msgstr ""
"<qt><p>Deseja realmente reverter as propriedades do campo <em>%1</em> para "
"seus valores padrão?</p></qt>"
-#: collectionfieldsdialog.cpp:749
+#: collectionfieldsdialog.cpp:745
msgid "Revert"
msgstr "Reverter"
-#: collectionfieldsdialog.cpp:872
+#: collectionfieldsdialog.cpp:868
msgid "Extended Field Properties"
msgstr "Propriedades Estendidas dos Campos"
-#: collectionfieldsdialog.cpp:902
+#: collectionfieldsdialog.cpp:898
msgid "A field with this title already exists. Please enter a different title."
msgstr "Já existe um campo com este nome. Favor escolher um nome diferente."
-#: collectionfieldsdialog.cpp:909
+#: collectionfieldsdialog.cpp:905
msgid "<qt>The category may not be empty. Please enter a category.</qt>"
msgstr ""
"<qt>A categoria não pode ser deixada em branco. Por favor,informe uma "
"categoria.</qt>"
-#: collectionfieldsdialog.cpp:917
+#: collectionfieldsdialog.cpp:913
msgid ""
"<qt>A field may not be in the same category as a <em>Paragraph</em>, "
-"<em>Table</em> or <em>Image</em> field. Please enter a different "
-"category.</qt>"
+"<em>Table</em> or <em>Image</em> field. Please enter a different category.</"
+"qt>"
msgstr ""
"<qt>Um campo não pode estar na mesma categoria que um <em>Parágrafo</em>, "
"uma <em>Tabela</em> ou uma <em>Imagem</em>. Favor escolher uma outra "
"categoria.</qt>"
-#: collectionfieldsdialog.cpp:925
+#: collectionfieldsdialog.cpp:921
msgid ""
"A field's title may not be the same as an existing category. Please enter a "
"different title."
@@ -4127,21 +3819,20 @@ msgstr ""
"O nome de um campo não deve ser o mesmo que o de uma categoria existente. "
"Por favor insera um outro nome."
-#: collectionfieldsdialog.cpp:937
+#: collectionfieldsdialog.cpp:933
msgid ""
"The range for a rating field must be between 1 and 10, and the lower bound "
"must be less than the higher bound. Please enter different low and high "
"properties."
msgstr ""
-"A faixa para uma classificação tem que ser de 1 até 10, e o limite "
-"inferior deve ser menor que o limite superior. Por favor entre com novos "
-"limites."
+"A faixa para uma classificação tem que ser de 1 até 10, e o limite inferior "
+"deve ser menor que o limite superior. Por favor entre com novos limites."
-#: collectionfieldsdialog.cpp:952
+#: collectionfieldsdialog.cpp:948
msgid "Tables are limited to a maximum of ten columns."
msgstr "Tabelas são limitadas a um máximo de dez colunas."
-#: document.cpp:158
+#: document.cpp:155
msgid ""
"The current file has been modified.\n"
"Do you want to save it?"
@@ -4149,7 +3840,7 @@ msgstr ""
"O arquivo atual foi modificado.\n"
"Deseja salvá-lo?"
-#: document.cpp:160 entryeditdialog.cpp:660
+#: document.cpp:157 entryeditdialog.cpp:634
msgid "Unsaved Changes"
msgstr "Alterações não salvas"
@@ -4157,114 +3848,101 @@ msgstr "Alterações não salvas"
msgid "Select Borrower"
msgstr "Selecione a pessoa que pegou o item emprestado"
-#: configdialog.cpp:103
+#: configdialog.cpp:100
msgid "Configure Tellico"
msgstr "Configurar Tellico"
-#: configdialog.cpp:198
+#: configdialog.cpp:192
msgid "General Options"
msgstr "Opções Gerais"
-#: configdialog.cpp:201
+#: configdialog.cpp:195
+msgid "&Include images in data file"
+msgstr "&Incluir imagens no arquivo de dados"
+
+#: configdialog.cpp:196
+msgid ""
+"If checked, all images will be included in the data file, rather than saved "
+"separately in the Tellico data directory. Saving a lot of images in the data "
+"file cause Tellico to run more slowly."
+msgstr ""
+"Se marcado, todas as imagens vão ser incluídas no arquivo de dados, ao invés "
+"de salvas separadamente no diretório de dados do Tellico. Salvar muitas "
+"imagens no arquivo de dados pode levar o Tellico a ficar mais lento."
+
+#: configdialog.cpp:203
msgid "&Reopen file at startup"
msgstr "&Reabrir o arquivo ao iniciar"
-#: configdialog.cpp:202
+#: configdialog.cpp:204
msgid ""
-"If checked, the file that was last open will be re-opened at program "
-"start-up."
+"If checked, the file that was last open will be re-opened at program start-"
+"up."
msgstr ""
"Se selecionado, o último arquivo aberto será reaberto na próxima "
"inicialização do programa."
-#: configdialog.cpp:207
+#: configdialog.cpp:209
msgid "&Show \"Tip of the Day\" at startup"
msgstr "&Mostrar \"Dicas do Dia\" ao iniciar"
-#: configdialog.cpp:208
+#: configdialog.cpp:210
msgid "If checked, the \"Tip of the Day\" will be shown at program start-up."
-msgstr ""
-"Se selecionado, as '\"Dicas do Dia\" serão mostradas ao iniciar o programa."
+msgstr "Se selecionado, as '\"Dicas do Dia\" serão mostradas ao iniciar o programa."
-#: configdialog.cpp:213
-#, fuzzy
-msgid "Image Storage Options"
-msgstr "Opções das Imagens"
-
-#: configdialog.cpp:214
-#, fuzzy
-msgid "Store images in data file"
-msgstr "&Incluir imagens no arquivo de dados"
-
-#: configdialog.cpp:215
-msgid "Store images in common application directory"
-msgstr ""
-
-#: configdialog.cpp:216
-msgid "Store images in directory relative to data file"
-msgstr ""
-
-#: configdialog.cpp:217
-msgid ""
-"Images may be saved in the data file itself, which can cause Tellico to run "
-"slowly, stored in the Tellico application directory, or stored in a "
-"directory in the same location as the data file."
-msgstr ""
-
-#: configdialog.cpp:224 configdialog.cpp:299
+#: configdialog.cpp:215 configdialog.cpp:290
msgid "Formatting Options"
msgstr "Opções de formatação"
-#: configdialog.cpp:227
+#: configdialog.cpp:218
msgid "Auto capitalize &titles and names"
msgstr "Auto capitalizar &títulos e nomes"
-#: configdialog.cpp:228
+#: configdialog.cpp:219
msgid "If checked, titles and names will be automatically capitalized."
msgstr ""
"Se selecionado, os títulos e os nomes serão automaticamente postos em "
"maiúsculas."
-#: configdialog.cpp:232
+#: configdialog.cpp:223
msgid "Auto &format titles and names"
msgstr "&Formatação automática dos títulos e nomes"
-#: configdialog.cpp:233 configdialog.cpp:303
+#: configdialog.cpp:224 configdialog.cpp:294
msgid "If checked, titles and names will be automatically formatted."
-msgstr ""
-"Se selecionado, os títulos e os nomes serão automaticamente formatados."
+msgstr "Se selecionado, os títulos e os nomes serão automaticamente formatados."
-#: configdialog.cpp:240
+#: configdialog.cpp:231
msgid "No capitali&zation:"
-msgstr "Não capitali&zar"
+msgstr "Não capitali&zar:"
-#: configdialog.cpp:243
+#: configdialog.cpp:234
msgid ""
"<qt>A list of words which should not be capitalized. Multiple values should "
"be separated by a semi-colon.</qt>"
msgstr ""
-"<qt>Uma lista de palavras que não devem ser capitalizadas. As palavras "
-"devem ser separadas por ponto e vírgula.</qt>"
+"<qt>Uma lista de palavras que não devem ser capitalizadas. As palavras devem "
+"ser separadas por ponto e vírgula.</qt>"
-#: configdialog.cpp:249
+#: configdialog.cpp:240
msgid "Artic&les:"
msgstr "Arti&gos:"
-#: configdialog.cpp:252
+#: configdialog.cpp:243
msgid ""
"<qt>A list of words which should be considered as articles if they are the "
-"first word in a title. Multiple values should be separated by a "
-"semi-colon.</qt>"
+"first word in a title. Multiple values should be separated by a semi-colon.</"
+"qt>"
msgstr ""
"<qt>Uma lista de palavras que devem ser consideradas como artigos se forem a "
"primeira palavra em um título. As palavras devem ser separadas por ponto e "
"vírgula.</qt>"
-#: configdialog.cpp:259
+#: configdialog.cpp:250
msgid "Personal suffi&xes:"
msgstr "Sufi&xos pessoais:"
-#: configdialog.cpp:262
+#: configdialog.cpp:253
msgid ""
"<qt>A list of suffixes which might be used in personal names. Multiple "
"values should be separated by a semi-colon.</qt>"
@@ -4272,11 +3950,11 @@ msgstr ""
"<qt>Uma lista de sufixos que podem ser utilizados nos nomes de pessoas. Os "
"sufixos devem ser separados por um ponto e vírgula.</qt>"
-#: configdialog.cpp:268
+#: configdialog.cpp:259
msgid "Surname &prefixes:"
msgstr "&Prefixos de sobrenomes:"
-#: configdialog.cpp:271
+#: configdialog.cpp:262
msgid ""
"<qt>A list of prefixes which might be used in surnames. Multiple values "
"should be separated by a semi-colon.</qt>"
@@ -4284,69 +3962,67 @@ msgstr ""
"<qt>Uma lista de prefixos que podem ser utilizados em sobrenomes. Os "
"prefixos devem ser separados por um ponto e vírgula.</qt>"
-#: configdialog.cpp:296
+#: configdialog.cpp:287
msgid "Printing"
msgstr "Impressão"
-#: configdialog.cpp:296
+#: configdialog.cpp:287
msgid "Printing Options"
msgstr "Opções de Impressão"
-#: configdialog.cpp:302
+#: configdialog.cpp:293
msgid "&Format titles and names"
msgstr "&Formatação dos títulos e nomes"
-#: configdialog.cpp:306
+#: configdialog.cpp:297
msgid "&Print field headers"
msgstr "Im&primir cabeçalhos dos campos"
-#: configdialog.cpp:310
+#: configdialog.cpp:301
msgid "Grouping Options"
msgstr "Opções de agrupamento"
-#: configdialog.cpp:313
+#: configdialog.cpp:304
msgid "&Group the entries"
msgstr "A&grupar os registros"
-#: configdialog.cpp:317
+#: configdialog.cpp:308
msgid "Image Options"
msgstr "Opções das Imagens"
-#: configdialog.cpp:323
+#: configdialog.cpp:314
msgid "Maximum image &width:"
msgstr "&Largura máxima da imagem:"
-#: configdialog.cpp:328
+#: configdialog.cpp:319
msgid ""
"The maximum width of the images in the printout. The aspect ration is "
"preserved."
-msgstr ""
-"Largura máxima das imagens na impressão. As proporções são conservadas."
+msgstr "Largura máxima das imagens na impressão. As proporções são conservadas."
-#: configdialog.cpp:336
+#: configdialog.cpp:327
msgid "&Maximum image height:"
msgstr "Altura &máxima da imagem:"
-#: configdialog.cpp:341
+#: configdialog.cpp:332
msgid ""
"The maximum height of the images in the printout. The aspect ration is "
"preserved."
-msgstr ""
-"Altura máxima da imagem na impressão. As proporções são conservadas."
+msgstr "Altura máxima da imagem na impressão. As proporções são conservadas."
-#: configdialog.cpp:355
+#: configdialog.cpp:346
msgid "Templates"
msgstr "Modelos"
-#: configdialog.cpp:355
+#: configdialog.cpp:346
msgid "Template Options"
msgstr "Opções do Modelo"
-#: configdialog.cpp:369
+#: configdialog.cpp:360
msgid "Template:"
msgstr "Modelo:"
-#: configdialog.cpp:373
+#: configdialog.cpp:364
msgid ""
"Select the template to use for the current type of collections. Not all "
"templates will use the font and color settings."
@@ -4354,99 +4030,99 @@ msgstr ""
"Selecione o modelo a ser utilizado para o tipo de coleção selecionado. Nem "
"todos os modelos permitem a alteração do tipo e cor da fonte."
-#: configdialog.cpp:380
+#: configdialog.cpp:371
msgid "&Preview..."
msgstr "&Pré-visualização..."
-#: configdialog.cpp:381
+#: configdialog.cpp:372
msgid "Show a preview of the template"
msgstr "Apresenta uma amostra do modelo"
-#: configdialog.cpp:398
+#: configdialog.cpp:389
msgid "Font Options"
msgstr "Opções de Fonte"
-#: configdialog.cpp:405
+#: configdialog.cpp:396
msgid "Font:"
msgstr "Fonte:"
-#: configdialog.cpp:411
+#: configdialog.cpp:402
msgid "This font is passed to the template used in the Entry View."
-msgstr "Esta fonte é utilizada no modelo usado na Visão de Registros"
+msgstr "Esta fonte é utilizada no modelo usado na Visão de Registros."
-#: configdialog.cpp:415
+#: configdialog.cpp:406
msgid "Size:"
msgstr "Tamanho:"
-#: configdialog.cpp:425
+#: configdialog.cpp:416
msgid "Color Options"
msgstr "Opções de Cor"
-#: configdialog.cpp:432
+#: configdialog.cpp:423
msgid "Background color:"
msgstr "Cor de fundo:"
-#: configdialog.cpp:438
+#: configdialog.cpp:429
msgid "This color is passed to the template used in the Entry View."
-msgstr "Esta cor é utilizada no modelo usado na Visão de Registro"
+msgstr "Esta cor é utilizada no modelo usado na Visão de Registro."
-#: configdialog.cpp:442
+#: configdialog.cpp:433
msgid "Text color:"
msgstr "Cor do texto:"
-#: configdialog.cpp:451
+#: configdialog.cpp:442
msgid "Highlight color:"
msgstr "Cor do destaque:"
-#: configdialog.cpp:460
+#: configdialog.cpp:451
msgid "Highlighted text color:"
msgstr "Cor do texto em destaque:"
-#: configdialog.cpp:469
+#: configdialog.cpp:460
msgid "Manage Templates"
msgstr "Gerenciamento de Modelos"
-#: configdialog.cpp:475
+#: configdialog.cpp:466
msgid "Install..."
msgstr "Instalar..."
-#: configdialog.cpp:478
+#: configdialog.cpp:469
msgid "Click to install a new template directly."
-msgstr "Clique para instalar um modelo diretamente"
+msgstr "Clique para instalar um modelo diretamente."
-#: configdialog.cpp:481 configdialog.cpp:537
+#: configdialog.cpp:472 configdialog.cpp:528
msgid "Download..."
msgstr "Baixar..."
-#: configdialog.cpp:484
+#: configdialog.cpp:475
msgid "Click to download additional templates via the Internet."
-msgstr "Clique para baixar modelos adicionais da internet"
+msgstr "Clique para baixar modelos adicionais da internet."
-#: configdialog.cpp:487
+#: configdialog.cpp:478
msgid "Delete..."
msgstr "Deletar..."
-#: configdialog.cpp:490
+#: configdialog.cpp:481
msgid "Click to select and remove installed templates."
-msgstr "Clique para selecionar e remover modelos instalados"
+msgstr "Clique para selecionar e remover modelos instalados."
-#: configdialog.cpp:501
+#: configdialog.cpp:492
msgid "Data Sources"
msgstr "Fontes de Dados"
-#: configdialog.cpp:501
+#: configdialog.cpp:492
msgid "Data Source Options"
msgstr "Opções da Fonte de Dados"
-#: configdialog.cpp:506 fetchdialog.cpp:171
+#: configdialog.cpp:497 fetchdialog.cpp:161
msgid "Source"
msgstr "Fonte"
-#: configdialog.cpp:517
+#: configdialog.cpp:508
msgid "Move &Up"
msgstr "Mover para &Cima"
-#: configdialog.cpp:519 configdialog.cpp:523
+#: configdialog.cpp:510 configdialog.cpp:514
msgid ""
"The order of the data sources sets the order that Tellico uses when entries "
"are automatically updated."
@@ -4454,45 +4130,45 @@ msgstr ""
"A ordem das fontes de dados define a ordem que o Tellico usa quando as "
"entradas são automaticamente atualizadas."
-#: configdialog.cpp:521
+#: configdialog.cpp:512
msgid "Move &Down"
msgstr "Mover para &Baixo"
-#: configdialog.cpp:528
+#: configdialog.cpp:519
msgid "&New..."
msgstr "&Novo..."
-#: configdialog.cpp:530
+#: configdialog.cpp:521
msgid "Click to add a new data source."
-msgstr "Clique para adicionar uma nova fonte de dados"
+msgstr "Clique para adicionar uma nova fonte de dados."
-#: configdialog.cpp:531
+#: configdialog.cpp:522
msgid "&Modify..."
msgstr "&Modificar..."
-#: configdialog.cpp:533
+#: configdialog.cpp:524
msgid "Click to modify the selected data source."
-msgstr "Clique para modificar a fonte de dados selecionada"
+msgstr "Clique para modificar a fonte de dados selecionada."
-#: configdialog.cpp:536
+#: configdialog.cpp:527
msgid "Click to delete the selected data source."
-msgstr "Clique para apagar a fonte de dados selecionada"
+msgstr "Clique para apagar a fonte de dados selecionada."
-#: configdialog.cpp:539
+#: configdialog.cpp:530
msgid "Click to download additional data sources via the Internet."
msgstr "Clique para baixar fontes de dados adicionais da internet."
-#: configdialog.cpp:1016
+#: configdialog.cpp:991
msgid "*.tar.gz *.tgz|Template Packages (*.tar.gz)"
msgstr "*.tar.gz *.tgz|Pacotes de Modelos (*.tar.gz)"
-#: configdialog.cpp:1049
+#: configdialog.cpp:1024
msgid "Delete Template"
msgstr "Apaga Modelo"
-#: configdialog.cpp:1050
+#: configdialog.cpp:1025
msgid "Select template to delete:"
-msgstr "Seleciona modelo a ser apagado"
+msgstr "Selecione o modelo a ser apagado:"
#: loanview.cpp:33 loanview.cpp:91 xslt.cpp:26
msgid "Borrower"
@@ -4504,69 +4180,64 @@ msgstr "Registro de entrada"
#: loanview.cpp:76
msgid "Modify Loan..."
-msgstr "&Modificar empréstimo..."
+msgstr "Modificar Empréstimo..."
#: loanview.cpp:93
msgid "Borrower (Sort by Count)"
msgstr "Pessoa que pegou emprestado (Classificar por Contagem)"
-#: collectionfactory.cpp:81
+#: collectionfactory.cpp:77
msgid "My Collection"
msgstr "Minha Coleção"
-#: collectionfactory.cpp:124
+#: collectionfactory.cpp:118
msgid "Book Collection"
msgstr "Coleção de Livros"
-#: collectionfactory.cpp:126
+#: collectionfactory.cpp:120
msgid "Comic Book Collection"
msgstr "Coleção de Revistas em Quadrinhos"
-#: collectionfactory.cpp:127
+#: collectionfactory.cpp:121
msgid "Video Collection"
msgstr "Coleção de Vídeos"
-#: collectionfactory.cpp:128
+#: collectionfactory.cpp:122
msgid "Music Collection"
msgstr "Coleção de Músicas"
-#: collectionfactory.cpp:129
+#: collectionfactory.cpp:123
msgid "Coin Collection"
msgstr "Coleção de Moedas"
-#: collectionfactory.cpp:130
+#: collectionfactory.cpp:124
msgid "Stamp Collection"
msgstr "Coleção de Selos"
-#: collectionfactory.cpp:131
+#: collectionfactory.cpp:125
msgid "Wine Collection"
msgstr "Coleção de Vinhos"
-#: collectionfactory.cpp:132
+#: collectionfactory.cpp:126
msgid "Card Collection"
msgstr "Coleção de Cartões"
-#: collectionfactory.cpp:133
+#: collectionfactory.cpp:127
msgid "Game Collection"
msgstr "Coleção de Jogos"
-#: collectionfactory.cpp:134
+#: collectionfactory.cpp:128
msgid "File Catalog"
msgstr "Catálogo de Arquivos"
-#: collectionfactory.cpp:135
-#, fuzzy
-msgid "Board Game Collection"
-msgstr "Coleção de Jogos"
-
-#: collectionfactory.cpp:136
+#: collectionfactory.cpp:129
msgid "Custom Collection"
msgstr "Coleção Personalizada"
#: viewstack.cpp:29
msgid ""
-"<qt>The <i>Entry View</i> shows a formatted view of the entry's "
-"contents.</qt>"
+"<qt>The <i>Entry View</i> shows a formatted view of the entry's contents.</"
+"qt>"
msgstr ""
"<qt>A <i>Visão de Registros</i> mostra uma visão formatada do conteúdo do "
"registro.</qt>"
@@ -4624,81 +4295,79 @@ msgid "Encode in user locale (%1)"
msgstr "Codificar na localização do usuário (%1)"
#: exportdialog.cpp:72
-#, fuzzy
-msgid "Encode the exported file in the local encoding."
+msgid "Encode the exported file in the local format."
msgstr "Codifica o arquivo exportado no formato local."
-#: fetchdialog.cpp:65
+#: fetchdialog.cpp:59
msgid "&Search"
msgstr "&Procurar"
-#: fetchdialog.cpp:66
+#: fetchdialog.cpp:60
msgid "&Stop"
msgstr "&Interromper"
-#: fetchdialog.cpp:86
+#: fetchdialog.cpp:78
msgid "Internet Search"
msgstr "Pesquisa na Internet"
-#: fetchdialog.cpp:94
+#: fetchdialog.cpp:84
msgid "Search Query"
msgstr "Parâmetros da Pesquisa"
-#: fetchdialog.cpp:100
+#: fetchdialog.cpp:90
msgid ""
"_: Start the search\n"
"S&earch:"
msgstr "P&esquisa:"
-#: fetchdialog.cpp:104
+#: fetchdialog.cpp:94
msgid "Enter a search value. An ISBN search must include the full ISBN."
msgstr ""
"Forneça um valor de procura. Uma pesquisa por ISBN deve incluir o número "
"ISBN completo."
-#: fetchdialog.cpp:111
+#: fetchdialog.cpp:101
msgid "Choose the type of search"
msgstr "Escolha o tipo de pesquisa"
-#: fetchdialog.cpp:117
+#: fetchdialog.cpp:107
msgid "Click to start or stop the search"
msgstr "Clique para iniciar ou interromper a pesquisa"
-#: fetchdialog.cpp:134
+#: fetchdialog.cpp:124
msgid "&Multiple ISBN/UPC search"
msgstr "Pesquisa &múltiplos ISBN/UPC"
-#: fetchdialog.cpp:135
+#: fetchdialog.cpp:125
msgid "Check this box to search for multiple ISBN or UPC values."
msgstr "Assinale este marcador para pesquisar vários valores ISBN ou UPC."
-#: fetchdialog.cpp:138
+#: fetchdialog.cpp:128
msgid "Edit List..."
msgstr "Editar Lista..."
-#: fetchdialog.cpp:140
-msgid ""
-"Click to open a text edit box for entering or editing multiple ISBN values."
+#: fetchdialog.cpp:130
+msgid "Click to open a text edit box for entering or editing multiple ISBN values."
msgstr "Clique para inserir ou editar os múltiplos ISBN a serem pesquisados."
-#: fetchdialog.cpp:146
+#: fetchdialog.cpp:136
msgid "Search s&ource:"
msgstr "Procurar f&onte:"
-#: fetchdialog.cpp:154
+#: fetchdialog.cpp:144
msgid "Select the database to search"
msgstr "Escolha a base de dados a pesquisar"
-#: fetchdialog.cpp:177
+#: fetchdialog.cpp:166
msgid ""
"As results are found, they are added to this list. Selecting one will fetch "
"the complete entry and show it in the view below."
msgstr ""
-"À medida em que os resultados são encontrados, eles são adicionados a "
-"esta lista. Ao selecionar um deles a informação completa do registro será "
+"À medida em que os resultados são encontrados, eles são adicionados a esta "
+"lista. Ao selecionar um deles a informação completa do registro será "
"descarregada e mostrada na lista abaixo."
-#: fetchdialog.cpp:185
+#: fetchdialog.cpp:174
msgid ""
"An entry may be shown here before adding it to the current collection by "
"selecting it in the list above"
@@ -4706,39 +4375,39 @@ msgstr ""
"Um registro pode ser mostrado aqui antes de ser adicionado à coleção, "
"bastando selecioná-lo na lista abaixo"
-#: fetchdialog.cpp:192
+#: fetchdialog.cpp:181
msgid "&Add Entry"
msgstr "&Adicionar registro"
-#: fetchdialog.cpp:196
+#: fetchdialog.cpp:185
msgid "Add the selected entry to the current collection"
msgstr "Adicionar o registro selecionado à coleção atual"
-#: fetchdialog.cpp:198
+#: fetchdialog.cpp:187
msgid "Get More Results"
msgstr "Obter mais resultados"
-#: fetchdialog.cpp:201
+#: fetchdialog.cpp:190
msgid "Fetch more results from the current data source"
msgstr "Obter mais resultados da fonte de dados atual"
-#: fetchdialog.cpp:205
+#: fetchdialog.cpp:194
msgid "Clear all search fields and results"
msgstr "Apagar todos os campos e valores"
-#: fetchdialog.cpp:298
+#: fetchdialog.cpp:259
msgid "Cancelling the search..."
msgstr "Cancelando a pesquisa..."
-#: fetchdialog.cpp:313 fetchdialog.cpp:472
+#: fetchdialog.cpp:274 fetchdialog.cpp:432
msgid "Searching..."
msgstr "Pesquisando..."
-#: fetchdialog.cpp:368
+#: fetchdialog.cpp:329
msgid "The search returned no items."
msgstr "A pesquisa não retornou resultados."
-#: fetchdialog.cpp:372
+#: fetchdialog.cpp:333
#, c-format
msgid ""
"_n: The search returned 1 item.\n"
@@ -4747,36 +4416,35 @@ msgstr ""
"A pesquisa retornou 1 item.\n"
"A pesquisa retornou %n items."
-#: fetchdialog.cpp:412
-#, fuzzy
-msgid "No results were found for the following ISBN values:"
-msgstr "<qt>Nenhuma entrada encontrada para os ISBN seguintes:</qt>"
+#: fetchdialog.cpp:370
+msgid "<qt>No entries were found for the following ISBN values:</qt>"
+msgstr "<qt>Nenhuma entrada encontrada para os seguintes valores ISBN:</qt>"
-#: fetchdialog.cpp:443 fetchdialog.cpp:495
+#: fetchdialog.cpp:403 fetchdialog.cpp:455
msgid "Fetching %1..."
msgstr "Carregando %1..."
-#: fetchdialog.cpp:528 fetchdialog.cpp:708
+#: fetchdialog.cpp:488
msgid "No Internet sources are available for your current collection type."
msgstr "Não há fontes na Internet disponíveis para este tipo de coleção."
-#: fetchdialog.cpp:594
+#: fetchdialog.cpp:554
msgid "Edit ISBN/UPC Values"
msgstr "Editar os valores ISBN/UPC"
-#: fetchdialog.cpp:598
+#: fetchdialog.cpp:558
msgid "<qt>Enter the ISBN or UPC values, one per line.</qt>"
msgstr "<qt>Insira os valores ISBN ou UPC, um por linha.</qt>"
-#: fetchdialog.cpp:604
+#: fetchdialog.cpp:564
msgid "&Load From File..."
msgstr "&Carregar de um arquivo..."
-#: fetchdialog.cpp:605
+#: fetchdialog.cpp:565
msgid "<qt>Load the list from a text file.</qt>"
msgstr "<qt>Carrega a lista de um arquivo texto.</qt>"
-#: fetchdialog.cpp:624
+#: fetchdialog.cpp:584
msgid ""
"<qt>An ISBN search can contain a maximum of 100 ISBN values. Only the first "
"100 values in your list will be used.</qt>"
@@ -4784,49 +4452,45 @@ msgstr ""
"<qt>Uma pesquisa ISBN pode conter um máximo de 100 valores ISBN. Apenas os "
"100 primeiros serão utilizados.</qt>"
-#: entryeditdialog.cpp:51 entryeditdialog.cpp:382 entryeditdialog.cpp:406
-#: entryeditdialog.cpp:512
+#: entryeditdialog.cpp:50 entryeditdialog.cpp:357 entryeditdialog.cpp:381
+#: entryeditdialog.cpp:485
msgid "Edit Entry"
msgstr "Editar Registro"
-#: entryeditdialog.cpp:52
+#: entryeditdialog.cpp:51
msgid "&New Entry"
msgstr "&Novo Registro"
-#: entryeditdialog.cpp:66 entryeditdialog.cpp:117 entryeditdialog.cpp:416
-#: entryeditdialog.cpp:540
+#: entryeditdialog.cpp:64 entryeditdialog.cpp:115 entryeditdialog.cpp:391
+#: entryeditdialog.cpp:514
msgid "Sa&ve Entry"
msgstr "Sal&var Registro"
-#: entryeditdialog.cpp:77
+#: entryeditdialog.cpp:75
msgid "Go to the previous entry in the collection"
msgstr "Retorna ao registro anterior na coleção"
-#: entryeditdialog.cpp:82
+#: entryeditdialog.cpp:80
msgid "Go to the next entry in the collection"
msgstr "Avança ao próximo registro na coleção"
-#: entryeditdialog.cpp:315
+#: entryeditdialog.cpp:313
msgid "Do you really want to modify these entries?"
msgstr "Deseja realmente modificar estes registros?"
-#: entryeditdialog.cpp:317
+#: entryeditdialog.cpp:315
msgid "Modify Multiple Entries"
msgstr "Modificar Múltiplos Registros"
-#: entryeditdialog.cpp:359
-msgid "A value is required for the following fields. Do you want to continue?"
-msgstr ""
-
-#: entryeditdialog.cpp:456
+#: entryeditdialog.cpp:430
msgid "Edit Entries"
-msgstr "&Editar Registros"
+msgstr "Editar Registros"
-#: entryeditdialog.cpp:488
+#: entryeditdialog.cpp:462
msgid "Sa&ve Entries"
msgstr "Sal&var Registros"
-#: entryeditdialog.cpp:656
+#: entryeditdialog.cpp:630
msgid ""
"The current entry has been modified.\n"
"Do you want to enter the changes?"
@@ -4834,7 +4498,7 @@ msgstr ""
"A entrada corrente foi modificada.\n"
"Deseja salvar as modificações?"
-#: entryeditdialog.cpp:659
+#: entryeditdialog.cpp:633
msgid "Save Entry"
msgstr "Salvar Registro"
@@ -4855,11 +4519,10 @@ msgid "Select a report template and click <em>Generate</em>."
msgstr "Selecione um modelo de relatório e clique em <em>Gerar</em>."
#: reportdialog.cpp:108
-msgid ""
-"Some reports may take several seconds to generate for large collections."
+msgid "Some reports may take several seconds to generate for large collections."
msgstr ""
-"Alguns relatórios de grandes coleções podem levar vários segundos para "
-"serem gerados."
+"Alguns relatórios de grandes coleções podem levar vários segundos para serem "
+"gerados."
#: tellico_kernel.cpp:285
msgid "Do you really want to delete this filter?"
@@ -4873,38 +4536,9 @@ msgstr "Apagar o Filtro?"
msgid "New collection name:"
msgstr "Novo nome da coleção:"
-#: tellico_kernel.cpp:377
-#, fuzzy
-msgid "Entry 1"
-msgstr "Tipo de Registro"
-
-#: tellico_kernel.cpp:378
-#, fuzzy
-msgid "Entry 2"
-msgstr "Tipo de Registro"
-
-#: tellico_kernel.cpp:387
-msgid "Conflicting values for %1 were found while merging entries."
-msgstr ""
-
-#: tellico_kernel.cpp:393
-msgid "Please choose which value to keep."
-msgstr ""
-
-#: entrymerger.cpp:33 tellico_kernel.cpp:398
-#, fuzzy
-msgid "Merge Entries"
-msgstr "Apagar Registros"
-
-#: tellico_kernel.cpp:399 tellico_kernel.cpp:400
-#, c-format
-msgid "Select value from %1"
-msgstr ""
-
-#: entryview.cpp:186
+#: entryview.cpp:169
msgid "Tellico is unable to locate the default entry stylesheet."
-msgstr ""
-"Tellico não pôde encontrar a folha de estilo padrão para os registros."
+msgstr "Tellico não pôde encontrar a folha de estilo padrão para os registros."
#: rc.cpp:6
#, no-c-format
@@ -4933,16 +4567,6 @@ msgid ""
"Your emails"
-#: entrymerger.cpp:35
-#, fuzzy
-msgid "Merging entries..."
-msgstr "Atualizando registros..."
-
-#: entrymerger.cpp:49
-#, fuzzy
-msgid "Total merged/scanned entries: %1/%2"
-msgstr "Total de registros: %1"
-
#: tips.cpp:3
msgid ""
"<p>...that if a book has more than one author, you should separate\n"
@@ -4977,8 +4601,8 @@ msgstr ""
"usando\n"
"o Editor de Campos. Os botões com setas sob a lista de campos permitem "
"modificar\n"
-"a posição do campo na lista, o que afetará sua posição no editor de "
-"registro.</p>\n"
+"a posição do campo na lista, o que afetará sua posição no editor de registro."
+"</p>\n"
#: tips.cpp:23
msgid ""
@@ -4992,8 +4616,7 @@ msgid ""
msgstr ""
"<p>...que se você quiser filtrar a partir de um campo do tipo Marcador,\n"
"um valor \"verdadeiro\" deve ser usado. Se quiser, por exemplo, mostrar\n"
-"apenas os livros de ficção científica que ainda não leu, marque o "
-"botão\n"
+"apenas os livros de ficção científica que ainda não leu, marque o botão\n"
"<em>Verificar todas as regras seguintes</em>, ajuste a primeira regra\n"
"para \"Género\" contém\" \"Ficção científica\" (sem aspas) e a segunda "
"regra\n"
@@ -5006,8 +4629,7 @@ msgid ""
"<p>To show only books which are by Weber or Bujold, for example, then\n"
"type \"weber|bujold\" (no quotes) in the filter box.</p>\n"
msgstr ""
-"<p>...que se um caractere não alfabético for utilizado no Filtro Rápido, "
-"o\n"
+"<p>...que se um caractere não alfabético for utilizado no Filtro Rápido, o\n"
"o texto é interpretado como uma expressão regular.</p>\n"
"<p>Para mostrar somente os livros de Weber ou Bujold, por exemplo,\n"
"escreva \"weber|bujold\" (sem aspas) no campo do filtro.</p>\n"
@@ -5030,8 +4652,8 @@ msgstr ""
#: tips.cpp:50
msgid ""
-"<p>...that you can add, edit, and delete string macros for "
-"bibliographies.</p>\n"
+"<p>...that you can add, edit, and delete string macros for bibliographies.</"
+"p>\n"
msgstr ""
"<p>...que você pode adicionar, editar e apagar linhas de macros\n"
"para bibliografias.</p>\n"
@@ -5045,8 +4667,8 @@ msgid ""
"to be sorted or printed together, for example.</p>\n"
msgstr ""
"<p>...que se mais de um campo for formatado como nome, então um grupo\n"
-"adicional chamado \"Pessoas\" é adicionado à coleção, permitindo que "
-"autores e editores\n"
+"adicional chamado \"Pessoas\" é adicionado à coleção, permitindo que autores "
+"e editores\n"
"sejam classificados ou impressos juntos, por exemplo.</p>\n"
#: tips.cpp:60
@@ -5092,8 +4714,8 @@ msgid ""
"<p>...that in the Detailed View, you can press a letter on the\n"
"keyboard to skip to the next entry that starts with that letter.</p>\n"
msgstr ""
-"<p>...que na Visão Detalhada, você pode pressionar uma letra do teclado "
-"para ir diretamente ao próximo registro que começa por esta letra.</p>\n"
+"<p>...que na Visão Detalhada, você pode pressionar uma letra do teclado para "
+"ir diretamente ao próximo registro que começa por esta letra.</p>\n"
#: tips.cpp:85
msgid ""
@@ -5107,6 +4729,12 @@ msgid ""
"types by respecting proper sorting at the same time. Consider for example\n"
"a number field followed by a text subfield with entries 3b, 14a.</p>\n"
msgstr ""
+"<p>...que você pode usar Campos Dependentes para combinar múltiplos campos separados\n"
+"em um único campo. Apenas selecione o tipo Dependente e use uma descrição\n"
+"parecida com \"Valor: %{campoa}%{campob}\" onde %{...} é substituído pelo\n"
+"valor do campo apropriado. Isto é útil para coletar vários valores em um único campo, p.ex. para um melhor agrupamento, e para combinar campos de diferentes\n"
+"tipos, respeitando a correta organização ao mesmo tempo. Considere, por exemplo,\n"
+"um campo de número seguido por um sub-campo de texto com entradas 3b, 14a.</p>\n"
#: xslt.cpp:2
msgid ""
@@ -5116,7 +4744,7 @@ msgstr "Álbum"
#: xslt.cpp:3
msgid "This template is meant for music collections only."
-msgstr "Este modelo é apenas para coleções de música"
+msgstr "Este modelo é apenas para coleções de música."
#: xslt.cpp:5
msgid "Total:"
@@ -5148,7 +4776,7 @@ msgstr "Vídeo"
#: xslt.cpp:14 xslt.cpp:43
msgid "This template is meant for video collections only."
-msgstr "Este modelo é apenas para coleções de vídeo"
+msgstr "Este modelo é apenas para coleções de vídeo."
#: xslt.cpp:16
msgid ""
@@ -5174,7 +4802,7 @@ msgstr "Gerado por Tellico"
#: xslt.cpp:21
msgid "Distinct values: "
-msgstr "Valores Distintos:"
+msgstr "Valores distintos: "
#: xslt.cpp:23
msgid ""
@@ -5270,95 +4898,15 @@ msgstr "Lista Unida de Israel"
msgid "National Library of Australia"
msgstr "Biblioteca Nacional da Austrália"
-#: z3950.cpp:22
-#, fuzzy
-msgid "National Library of Lithuania"
-msgstr "Biblioteca Nacional do Canadá"
-
-#: z3950.cpp:24
-msgid "Copac (UK and Ireland)"
-msgstr ""
-
#: scripts.cpp:2
-msgid "BoardGameGeek"
-msgstr ""
-
-#: scripts.cpp:4
msgid "Dark Horse Comics"
msgstr "Quadrinhos Dark Horse"
-#: scripts.cpp:6
+#: scripts.cpp:4
msgid "Allocine.fr"
msgstr "Allocine.fr"
-#: scripts.cpp:8
+#: scripts.cpp:6
msgid "Spanish Ministry of Culture"
msgstr "Ministério da Cultura da Espanha"
-#, fuzzy
-#~ msgid "CrossRef"
-#~ msgstr "Referência cruzada"
-
-#~ msgid "MODS"
-#~ msgstr "MODS"
-
-#~ msgid "RIS"
-#~ msgstr "RIS "
-
-#, fuzzy
-#~ msgid "GCstar"
-#~ msgstr "Elenco"
-
-#~ msgid "AMC"
-#~ msgstr "AMC"
-
-#, fuzzy
-#~ msgid "Griffith"
-#~ msgstr "Presente"
-
-#, fuzzy
-#~ msgid "Referencer"
-#~ msgstr "Referência cruzada"
-
-#~ msgid "Comics"
-#~ msgstr "Revistas em Quadrinhos"
-
-#~ msgid "Stamps"
-#~ msgstr "Selos"
-
-#~ msgid "Coins"
-#~ msgstr "Moedas"
-
-#~ msgid "Books"
-#~ msgstr "Livros"
-
-#~ msgid "Wines"
-#~ msgstr "Vinhos"
-
-#~ msgid "Videos"
-#~ msgstr "Vídeos"
-
-#~ msgid "Games"
-#~ msgstr "Jogos"
-
-#~ msgid "Cards"
-#~ msgstr "Cartões"
-
-#~ msgid "Entries"
-#~ msgstr "Registros"
-
-#~ msgid "Albums"
-#~ msgstr "Álbuns"
-
-#~ msgid ""
-#~ "If checked, all images will be included in the data file, rather than saved "
-#~ "separately in the Tellico data directory. Saving a lot of images in the data "
-#~ "file cause Tellico to run more slowly."
-#~ msgstr ""
-#~ "Se marcado, todas as imagens vão ser incluídas no arquivo de dados, ao "
-#~ "invés de salvas separadamente no diretório de dados do Tellico. Salvar "
-#~ "muitas imagens no arquivo de dados pode levar o Tellico a ficar mais lento."
-
-#, fuzzy
-#~ msgid "Copac"
-#~ msgstr "Vírgula"
diff --git a/po/ru.po b/po/ru.po
index fcbe9e6..4965cee 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -1,19 +1,22 @@
# translation of ru.po to Russian
+# Copyright (C) 2007 Robby Stephenson <[email protected]>.
# Калимуллин Артур <[email protected]>, 2006.
# Kalimullin Artur <[email protected]>, 2006.
# Pesotsky Denis <[email protected]>, 2008.
-# Copyright (C) 2007 Robby Stephenson <[email protected]>.
+# Denis Pesotsky <[email protected]>, 2008.
+# Denis Pesotsky <[email protected]>, 2008.
msgid ""
msgstr ""
"Project-Id-Version: ru\n"
"POT-Creation-Date: 2008-01-26 10:52-0800\n"
-"PO-Revision-Date: 2008-03-21 00:44+0300\n"
-"Last-Translator: Pesotsky Denis <[email protected]>\n"
+"PO-Revision-Date: 2008-10-22 21:27+0400\n"
+"Last-Translator: Denis Pesotsky <[email protected]>\n"
"Language-Team: Russian <[email protected]>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: KBabel 1.11.4\n"
+"X-Generator: Lokalize 0.2\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: cite/lyxpipe.cpp:50
msgid "<qt>Tellico is unable to write to the server pipe at <b>%1</b>.</qt>"
@@ -21,7 +24,7 @@ msgstr "<qt>Ошибка записи на канал сервера <b>%1</b>.<
#: cite/openoffice.cpp:82
msgid "Connecting to OpenOffice.org..."
-msgstr "Подсоединение к OpenOffice.org..."
+msgstr "Подсоединение к OpenOffice.org…"
#: cite/openoffice.cpp:165 cite/openoffice.cpp:186
msgid "OpenOffice.org Connection"
@@ -115,7 +118,7 @@ msgstr "Очистить"
#: gui/imagewidget.cpp:57
msgid "Select Image..."
-msgstr "Выбрать изображение..."
+msgstr "Выбрать изображение…"
#: gui/imagewidget.cpp:63
msgid "Save link only"
@@ -652,7 +655,7 @@ msgstr "Создан"
#: collections/filecatalog.cpp:89
msgid "Modified"
-msgstr "Модифицирован"
+msgstr "Изменён"
#: collections/filecatalog.cpp:93
msgid "Meta Info"
@@ -1780,7 +1783,7 @@ msgstr "Описание выделенного отображается зде�
#: newstuff/dialog.cpp:224
msgid "Downloading information..."
-msgstr "Загрузка информации..."
+msgstr "Загрузка информации…"
#: controller.cpp:135 fetchdialog.cpp:226 fetchdialog.cpp:333
#: fetchdialog.cpp:451 fetchdialog.cpp:506 newstuff/dialog.cpp:297
@@ -1796,7 +1799,7 @@ msgstr "Обновить"
#: newstuff/dialog.cpp:413
msgid "Installing item..."
-msgstr "Установка...."
+msgstr "Установка…"
#: translators/bibteximporter.cpp:79
msgid "No valid bibtex entries were found"
@@ -1913,7 +1916,7 @@ msgstr "Избранное"
#: translators/audiofileimporter.cpp:69
msgid "Scanning audio files..."
-msgstr "Сканируются аудио-файлы..."
+msgstr "Сканируются аудио-файлы…"
#: translators/audiofileimporter.cpp:129
msgid "Bitrate"
@@ -2025,7 +2028,7 @@ msgstr "Может быть использован любой другой ра�
#: translators/filelistingimporter.cpp:63
msgid "Scanning files..."
-msgstr "Сканируются файлы..."
+msgstr "Сканируются файлы…"
#: translators/filelistingimporter.cpp:191
msgid "File Listing Options"
@@ -2192,11 +2195,11 @@ msgstr ""
#: translators/importer.h:100
msgid "Loading data..."
-msgstr "Загружаются данные..."
+msgstr "Загружаются данные…"
#: translators/importer.h:100
msgid "Loading %1..."
-msgstr "Загружается %1..."
+msgstr "Загружается %1…"
#: translators/bibtexexporter.cpp:48
msgid "Bibtex"
@@ -2484,7 +2487,7 @@ msgstr "не соответствует выражению"
#: filterdialog.cpp:90
msgid "Edit..."
-msgstr "Редактировать..."
+msgstr "Редактировать…"
#: filterdialog.cpp:282
msgid "Advanced Filter"
@@ -2540,11 +2543,11 @@ msgstr "Дата"
#: entryupdater.cpp:81
msgid "Updating %1..."
-msgstr "Обновление %1..."
+msgstr "Обновление %1…"
#: entryupdater.cpp:83
msgid "Updating entries..."
-msgstr "Обновление записей..."
+msgstr "Обновление записей…"
#: entryupdater.cpp:85
msgid "Update Entries"
@@ -2552,7 +2555,7 @@ msgstr "Обновить записи"
#: entryupdater.cpp:99
msgid "Updating <b>%1</b>..."
-msgstr "Обновление <b>%1</b>..."
+msgstr "Обновление <b>%1</b>…"
#: entryupdater.cpp:209
msgid "Select Match"
@@ -2875,11 +2878,11 @@ msgstr "Сохранить документ"
#: mainwindow.cpp:305
msgid "Save the document as a different file..."
-msgstr "Сохранить документ в другой файл..."
+msgstr "Сохранить документ в другой файл…"
#: mainwindow.cpp:307
msgid "Print the contents of the document..."
-msgstr "Напечатать содержимое этого документа..."
+msgstr "Напечатать содержимое этого документа…"
#: mainwindow.cpp:309
msgid "Quit the application"
@@ -2891,7 +2894,7 @@ msgstr "Импортировать коллекцию из других форм
#: mainwindow.cpp:324
msgid "Import Tellico Data..."
-msgstr "Импорт из файла Tellico..."
+msgstr "Импорт из файла Tellico…"
#: mainwindow.cpp:325
msgid "Import another Tellico data file"
@@ -2899,7 +2902,7 @@ msgstr "Импортировать из другой коллекции Tellico"
#: mainwindow.cpp:331
msgid "Import CSV Data..."
-msgstr "Импорт из CSV..."
+msgstr "Импорт из CSV…"
#: mainwindow.cpp:332
msgid "Import a CSV file"
@@ -2907,7 +2910,7 @@ msgstr "Импорт из файла CSV"
#: mainwindow.cpp:338
msgid "Import MODS Data..."
-msgstr "Импорт из MODS..."
+msgstr "Импорт из MODS…"
#: mainwindow.cpp:339
msgid "Import a MODS data file"
@@ -2915,7 +2918,7 @@ msgstr "Импорт из файла MODS"
#: mainwindow.cpp:345
msgid "Import Alexandria Data..."
-msgstr "Импорт из файла Alexandria..."
+msgstr "Импорт из файла Alexandria…"
#: mainwindow.cpp:346
msgid "Import data from the Alexandria book collection manager"
@@ -2923,7 +2926,7 @@ msgstr "Импорт из менеджера коллекций книг Alexand
#: mainwindow.cpp:352
msgid "Import Delicious Library Data..."
-msgstr "Импорт из файла Delicious..."
+msgstr "Импорт из файла Delicious…"
#: mainwindow.cpp:353
msgid "Import data from Delicious Library"
@@ -2931,7 +2934,7 @@ msgstr "Импорт данных из файла Delicious"
#: mainwindow.cpp:359
msgid "Import Referencer Data..."
-msgstr "Импорт из файла Referencer..."
+msgstr "Импорт из файла Referencer…"
#: mainwindow.cpp:360
msgid "Import data from Referencer"
@@ -2939,7 +2942,7 @@ msgstr "Импортировать данные из Referencer"
#: mainwindow.cpp:366
msgid "Import Bibtex Data..."
-msgstr "Импорт из Bibtex..."
+msgstr "Импорт из Bibtex…"
#: mainwindow.cpp:367
msgid "Import a bibtex bibliography file"
@@ -2947,7 +2950,7 @@ msgstr "Импортировать из файла библиографии bibt
#: mainwindow.cpp:373
msgid "Import Bibtexml Data..."
-msgstr "Импорт из Bibtexml..."
+msgstr "Импорт из Bibtexml…"
#: mainwindow.cpp:374
msgid "Import a Bibtexml bibliography file"
@@ -2955,7 +2958,7 @@ msgstr "Импортировать из файла библиографии Bibt
#: mainwindow.cpp:380
msgid "Import RIS Data..."
-msgstr "Импорт из RIS..."
+msgstr "Импорт из RIS…"
#: mainwindow.cpp:381
msgid "Import an RIS reference file"
@@ -2963,7 +2966,7 @@ msgstr "Импортировать из файла RIS"
#: mainwindow.cpp:387
msgid "Import PDF File..."
-msgstr "Импорт из PDF..."
+msgstr "Импорт из PDF…"
#: mainwindow.cpp:388
msgid "Import a PDF file"
@@ -2971,7 +2974,7 @@ msgstr "Импортировать из файла PDF"
#: mainwindow.cpp:394
msgid "Import Audio File Metadata..."
-msgstr "Импорт из данных аудио файла..."
+msgstr "Импорт из данных аудио файла…"
#: mainwindow.cpp:395
msgid "Import meta-data from audio files"
@@ -2979,7 +2982,7 @@ msgstr "Импорт из данных тегов аудио файлов"
#: mainwindow.cpp:404
msgid "Import Audio CD Data..."
-msgstr "Импорт из Audio CD..."
+msgstr "Импорт из Audio CD…"
#: mainwindow.cpp:405
msgid "Import audio CD information"
@@ -2987,7 +2990,7 @@ msgstr "Импорт информации об Audio CD"
#: mainwindow.cpp:414
msgid "Import GCstar Data..."
-msgstr "Импорт из файла GCstar..."
+msgstr "Импорт из файла GCstar…"
#: mainwindow.cpp:415
msgid "Import a GCstar data file"
@@ -2995,7 +2998,7 @@ msgstr "Импорт данных из файла GCstar"
#: mainwindow.cpp:421
msgid "Import Griffith Data..."
-msgstr "Импорт из файла Griffith..."
+msgstr "Импорт из файла Griffith…"
#: mainwindow.cpp:422
msgid "Import a Griffith database"
@@ -3003,7 +3006,7 @@ msgstr "Импортировать из файла Griffith"
#: mainwindow.cpp:428
msgid "Import Ant Movie Catalog Data..."
-msgstr "Импорт из файла Ant..."
+msgstr "Импорт из файла Ant…"
#: mainwindow.cpp:429
msgid "Import an Ant Movie Catalog data file"
@@ -3011,7 +3014,7 @@ msgstr "Импортировать из файла менеджера колле
#: mainwindow.cpp:435
msgid "Import File Listing..."
-msgstr "Импорт списка фалов..."
+msgstr "Импорт списка фалов…"
#: mainwindow.cpp:436
msgid "Import information about files in a folder"
@@ -3019,7 +3022,7 @@ msgstr "Импортировать информацию о файлах в па�
#: mainwindow.cpp:442
msgid "Import XSL Transform..."
-msgstr "Импорт из XSLT..."
+msgstr "Импорт из XSLT…"
#: mainwindow.cpp:443
msgid "Import using an XSL Transform"
@@ -3036,7 +3039,7 @@ msgstr "Экспортировать данные коллекции в друг
#: mainwindow.cpp:461
msgid "Export to XML..."
-msgstr "Экспорт в XML..."
+msgstr "Экспорт в XML…"
#: mainwindow.cpp:462
msgid "Export to a Tellico XML file"
@@ -3044,7 +3047,7 @@ msgstr "Экспорт в XML-файл Tellico"
#: mainwindow.cpp:468
msgid "Export to Zip..."
-msgstr "Экспорт в ZIP..."
+msgstr "Экспорт в ZIP…"
#: mainwindow.cpp:469
msgid "Export to a Tellico Zip file"
@@ -3052,7 +3055,7 @@ msgstr "Экспорт в сжатый ZIP файл Tellico"
#: mainwindow.cpp:475
msgid "Export to HTML..."
-msgstr "Экспорт в HTML..."
+msgstr "Экспорт в HTML…"
#: mainwindow.cpp:476
msgid "Export to an HTML file"
@@ -3060,7 +3063,7 @@ msgstr "Экспорт в файл HTML"
#: mainwindow.cpp:482
msgid "Export to CSV..."
-msgstr "Экспорт в CSV..."
+msgstr "Экспорт в CSV…"
#: mainwindow.cpp:483
msgid "Export to a comma-separated values file"
@@ -3068,7 +3071,7 @@ msgstr "Экспорт в текстовый файл с разделённым�
#: mainwindow.cpp:489
msgid "Export to PilotDB..."
-msgstr "Экспорт в PilotDB..."
+msgstr "Экспорт в PilotDB…"
#: mainwindow.cpp:490
msgid "Export to a PilotDB database"
@@ -3076,7 +3079,7 @@ msgstr "Экспортировать в базу данных PilotDB"
#: mainwindow.cpp:496
msgid "Export to Alexandria..."
-msgstr "Экспорт в Alexandria..."
+msgstr "Экспорт в Alexandria…"
#: mainwindow.cpp:497
msgid "Export to an Alexandria library"
@@ -3084,7 +3087,7 @@ msgstr "Экспорт в библиотеку Alexandria"
#: mainwindow.cpp:503
msgid "Export to Bibtex..."
-msgstr "Экспорт в Bibtex..."
+msgstr "Экспорт в Bibtex…"
#: mainwindow.cpp:504
msgid "Export to a bibtex file"
@@ -3092,7 +3095,7 @@ msgstr "Экспорт в файл Bibtex"
#: mainwindow.cpp:510
msgid "Export to Bibtexml..."
-msgstr "Экспорт в Bibtexml..."
+msgstr "Экспорт в Bibtexml…"
#: mainwindow.cpp:511
msgid "Export to a Bibtexml file"
@@ -3100,7 +3103,7 @@ msgstr "Экспорт в файл Bibtexml"
#: mainwindow.cpp:517
msgid "Export to ONIX..."
-msgstr "Экспорт в ONIX..."
+msgstr "Экспорт в ONIX…"
#: mainwindow.cpp:518
msgid "Export to an ONIX file"
@@ -3108,7 +3111,7 @@ msgstr "Экспорт в файл ONIX"
#: mainwindow.cpp:524
msgid "Export to GCfilms..."
-msgstr "Экспорт в GCfilms..."
+msgstr "Экспорт в GCfilms…"
#: mainwindow.cpp:525
msgid "Export to a GCfilms data file"
@@ -3116,7 +3119,7 @@ msgstr "Экспорт в файл GCfilms"
#: mainwindow.cpp:531
msgid "Export to GCstar..."
-msgstr "Экспорт в GCStar..."
+msgstr "Экспорт в GCStar…"
#: mainwindow.cpp:532
msgid "Export to a GCstar data file"
@@ -3124,7 +3127,7 @@ msgstr "Экспорт в файл GCfilms"
#: mainwindow.cpp:536
msgid "Export XSL Transform..."
-msgstr "Экспорт в XSLT..."
+msgstr "Экспорт в XSLT…"
#: mainwindow.cpp:537
msgid "Export using an XSL Transform"
@@ -3152,15 +3155,15 @@ msgstr "Отменить выделение записей в коллекции
#: mainwindow.cpp:556
msgid "Internet Search..."
-msgstr "Поиск в интернете..."
+msgstr "Поиск в интернете…"
#: mainwindow.cpp:559
msgid "Search the internet..."
-msgstr "Повести поиск в интернете для создания новой записи в коллекции..."
+msgstr "Повести поиск в интернете для создания новой записи в коллекции…"
#: mainwindow.cpp:561
msgid "Advanced &Filter..."
-msgstr "Продвинутый &фильтр..."
+msgstr "Продвинутый &фильтр…"
#: mainwindow.cpp:564 mainwindow.cpp:719
msgid "Filter the collection"
@@ -3168,7 +3171,7 @@ msgstr "Фильтр коллекции"
#: mainwindow.cpp:569
msgid "&New Entry..."
-msgstr "&Новая запись..."
+msgstr "&Новая запись…"
#: mainwindow.cpp:572
msgid "Create a new entry"
@@ -3176,7 +3179,7 @@ msgstr "Создать новую запись"
#: controller.cpp:620 mainwindow.cpp:573
msgid "&Edit Entry..."
-msgstr "&Редактировать запись..."
+msgstr "&Редактировать запись…"
#: mainwindow.cpp:576
msgid "Edit the selected entries"
@@ -3208,7 +3211,7 @@ msgstr "Объединить выделенные записи"
#: mainwindow.cpp:591
msgid "&Generate Reports..."
-msgstr "Создать от&чет..."
+msgstr "Создать от&чет…"
#: mainwindow.cpp:594
msgid "Generate collection reports"
@@ -3216,7 +3219,7 @@ msgstr "Создать отчет о коллекции"
#: mainwindow.cpp:595
msgid "Check-&out..."
-msgstr "&Отдать в долг..."
+msgstr "&Отдать в долг…"
#: mainwindow.cpp:598
msgid "Check-out the selected items"
@@ -3232,7 +3235,7 @@ msgstr "Вернуть из долга выделенные записи"
#: mainwindow.cpp:604
msgid "&Rename Collection..."
-msgstr "&Переименовать коллекцию..."
+msgstr "&Переименовать коллекцию…"
#: mainwindow.cpp:607
msgid "Rename the collection"
@@ -3256,7 +3259,7 @@ msgstr "Конвертировать коллекцию книг в библио
#: mainwindow.cpp:616
msgid "String &Macros..."
-msgstr "Строчный &макрос..."
+msgstr "Строчный &макрос…"
#: mainwindow.cpp:619
msgid "Edit the bibtex string macros"
@@ -3357,7 +3360,7 @@ msgstr "Очистить фильтр"
#: mainwindow.cpp:710
msgid "Filter here..."
-msgstr "Фильтр..."
+msgstr "Фильтр…"
#: mainwindow.cpp:768
msgid "Groups"
@@ -3399,11 +3402,11 @@ msgstr ""
#: mainwindow.cpp:1066
msgid "Creating new document..."
-msgstr "Создание нового документа..."
+msgstr "Создание нового документа…"
#: mainwindow.cpp:1098 mainwindow.cpp:1117 mainwindow.cpp:1135
msgid "Opening file..."
-msgstr "Открытие файла..."
+msgstr "Открытие файла…"
#: mainwindow.cpp:1108
msgid "Open File"
@@ -3411,7 +3414,7 @@ msgstr "Открыть файл"
#: document.cpp:192 mainwindow.cpp:1215
msgid "Saving file..."
-msgstr "Сохранение файла...."
+msgstr "Сохранение файла…."
#: mainwindow.cpp:1226
msgid ""
@@ -3435,11 +3438,11 @@ msgstr "Сохранять изображения вместе с файлом"
#: mainwindow.cpp:1265
msgid "Saving file with a new filename..."
-msgstr "Сохранение файла под другим именем..."
+msgstr "Сохранение файла под другим именем…"
#: mainwindow.cpp:1303 mainwindow.cpp:1353
msgid "Printing..."
-msgstr "Идёт печать..."
+msgstr "Идёт печать…"
#: mainwindow.cpp:1312
msgid ""
@@ -3451,11 +3454,11 @@ msgstr ""
#: mainwindow.cpp:1337
msgid "Processing document..."
-msgstr "Подождите..."
+msgstr "Подождите…"
#: mainwindow.cpp:1360
msgid "Exiting..."
-msgstr "Выход..."
+msgstr "Выход…"
#: mainwindow.cpp:1498
#, c-format
@@ -3490,7 +3493,7 @@ msgstr "Пожалуйста, проверьте свою инсталляцию
#: mainwindow.cpp:1849
msgid "Importing data..."
-msgstr "Импорт данных..."
+msgstr "Импорт данных…"
#: mainwindow.cpp:1858
msgid "Import File"
@@ -3502,7 +3505,7 @@ msgstr "Импорт каталога"
#: mainwindow.cpp:1885
msgid "Exporting data..."
-msgstr "Экспортирование данных..."
+msgstr "Экспортирование данных…"
#: mainwindow.cpp:1907
msgid "Export As"
@@ -3522,7 +3525,7 @@ msgstr "Строка"
#: mainwindow.cpp:1999
msgid "Creating citations..."
-msgstr "Идет создание цитат..."
+msgstr "Идет создание цитат…"
#: mainwindow.cpp:2104
msgid "Filters"
@@ -3598,7 +3601,7 @@ msgstr "Удалить несколько записей"
#: controller.cpp:626
msgid "&Edit Entries..."
-msgstr "&Редактировать записи..."
+msgstr "&Редактировать записи…"
#: controller.cpp:627
msgid "D&uplicate Entries"
@@ -3862,7 +3865,7 @@ msgstr "Дополнительные &параметры:"
#: collectionfieldsdialog.cpp:217
msgid "&Set..."
-msgstr "&Установить..."
+msgstr "&Установить…"
#: collectionfieldsdialog.cpp:221
msgid ""
@@ -4242,11 +4245,11 @@ msgstr ""
#: configdialog.cpp:380
msgid "&Preview..."
-msgstr "&Пред-просмотр..."
+msgstr "&Предпросмотр…"
#: configdialog.cpp:381
msgid "Show a preview of the template"
-msgstr "Показать пред-просмотр шаблона"
+msgstr "Показать предпросмотр шаблона"
#: configdialog.cpp:398
msgid "Font Options"
@@ -4294,7 +4297,7 @@ msgstr "Управление шаблонами"
#: configdialog.cpp:475
msgid "Install..."
-msgstr "Установить..."
+msgstr "Установить…"
#: configdialog.cpp:478
msgid "Click to install a new template directly."
@@ -4302,7 +4305,7 @@ msgstr "Нажмите для установки шаблона."
#: configdialog.cpp:481 configdialog.cpp:537
msgid "Download..."
-msgstr "Загрузить..."
+msgstr "Загрузить…"
#: configdialog.cpp:484
msgid "Click to download additional templates via the Internet."
@@ -4310,7 +4313,7 @@ msgstr "Нажмите для загрузки дополнительных ша
#: configdialog.cpp:487
msgid "Delete..."
-msgstr "Удалить..."
+msgstr "Удалить…"
#: configdialog.cpp:490
msgid "Click to select and remove installed templates."
@@ -4346,7 +4349,7 @@ msgstr "&Ниже"
#: configdialog.cpp:528
msgid "&New..."
-msgstr "&Новый..."
+msgstr "&Новый…"
#: configdialog.cpp:530
msgid "Click to add a new data source."
@@ -4354,7 +4357,7 @@ msgstr "Нажмите для создания нового источника �
#: configdialog.cpp:531
msgid "&Modify..."
-msgstr "&Редактировать..."
+msgstr "&Редактировать…"
#: configdialog.cpp:533
msgid "Click to modify the selected data source."
@@ -4390,7 +4393,7 @@ msgstr "Вернуть из долга"
#: loanview.cpp:76
msgid "Modify Loan..."
-msgstr "Редактировать долг..."
+msgstr "Редактировать долг…"
#: loanview.cpp:93
msgid "Borrower (Sort by Count)"
@@ -4556,7 +4559,7 @@ msgstr "Если отмечено, будет проведен многокра�
#: fetchdialog.cpp:138
msgid "Edit List..."
-msgstr "Редактировать список..."
+msgstr "Редактировать список…"
#: fetchdialog.cpp:140
msgid "Click to open a text edit box for entering or editing multiple ISBN values."
@@ -4606,11 +4609,11 @@ msgstr "Очистить все поля поиска и результаты"
#: fetchdialog.cpp:298
msgid "Cancelling the search..."
-msgstr "Отмена поиска..."
+msgstr "Отмена поиска…"
#: fetchdialog.cpp:313 fetchdialog.cpp:472
msgid "Searching..."
-msgstr "Поиск..."
+msgstr "Поиск…"
#: fetchdialog.cpp:368
msgid "The search returned no items."
@@ -4631,7 +4634,7 @@ msgstr "Никаких записей не было найдено по след
#: fetchdialog.cpp:443 fetchdialog.cpp:495
msgid "Fetching %1..."
-msgstr "Загрузка %1..."
+msgstr "Загрузка %1…"
#: fetchdialog.cpp:528 fetchdialog.cpp:708
msgid "No Internet sources are available for your current collection type."
@@ -4647,7 +4650,7 @@ msgstr "<qt>Введите значения ISBN/UPC, по одному в ст�
#: fetchdialog.cpp:604
msgid "&Load From File..."
-msgstr "&Загрузить из файла..."
+msgstr "&Загрузить из файла…"
#: fetchdialog.cpp:605
msgid "<qt>Load the list from a text file.</qt>"
@@ -4805,15 +4808,15 @@ msgstr "Калимуллин Артур, Песоцкий Денис"
msgid ""
"_: EMAIL OF TRANSLATORS\n"
"Your emails"
#: entrymerger.cpp:35
msgid "Merging entries..."
-msgstr "Объединение записей..."
+msgstr "Объединение записей…"
#: entrymerger.cpp:49
msgid "Total merged/scanned entries: %1/%2"
-msgstr "Всего записей объединено/просканировано: %1"
+msgstr "Всего записей объединено/просканировано: %1/%2"
#: tips.cpp:3
msgid ""
@@ -4823,7 +4826,7 @@ msgid ""
"<p>Any other field which allows multiple values should be entered the\n"
"same way, with a semi-colon (;) separating each value.</p>\n"
msgstr ""
-"<p>...что если книга имеет больше, чем одного автора, то вам следует "
+"<p>…что если книга имеет больше, чем одного автора, то вам следует "
"разделять\n"
"точкой с запятой (;). Таким образом, Tellico будет разделять их имена.</p>\n"
"<p>Любое другое поле также поддерживает эту функцию. Для этого вам следует\n"
@@ -4835,7 +4838,7 @@ msgid ""
"<p>...that you can change which fields are shown in the list view by\n"
"right-clicking on the column header.\n"
msgstr ""
-"<p>...что вы можете выбрать какие поля следует показывать в списке записей,\n"
+"<p>…что вы можете выбрать какие поля следует показывать в списке записей,\n"
"кликнув правой кнопкой мыши на заголовке \"таблицы\".\n"
#: tips.cpp:16
@@ -4846,7 +4849,7 @@ msgid ""
"position of the field in the list, which affects the placement in the entry\n"
"editor.</p>\n"
msgstr ""
-"<p>...что вы можете добавлять, редактировать или удалять поля в коллекции,\n"
+"<p>…что вы можете добавлять, редактировать или удалять поля в коллекции,\n"
"используя Редактор полей. Кнопки стрелок позволяют вам менять позицию полей "
"в списке,\n"
"которая влияет на расстановку в Редакторе записей.</p>\n"
@@ -4861,7 +4864,7 @@ msgid ""
"\"contains\" \"Science Fiction\" (no quotes) and the second rule to\n"
"have \"Read\" \"does not contain\" \"true\" (no quotes).</p>\n"
msgstr ""
-"<p>...что если вы хотите отфильтровать записи по полю \"Выбор да/нет\",\n"
+"<p>…что если вы хотите отфильтровать записи по полю \"Выбор да/нет\",\n"
"то должно использоваться значение \"да\". Например, если вы хотите "
"посмотреть, какие детективы вы ещё не читали,\n"
"нажмите кнопку \"Соответствует всему следующему\",\n"
@@ -4876,7 +4879,7 @@ msgid ""
"<p>To show only books which are by Weber or Bujold, for example, then\n"
"type \"weber|bujold\" (no quotes) in the filter box.</p>\n"
msgstr ""
-"<p>...что если в быстром фильтре используется символ, не входящий в слова "
+"<p>…что если в быстром фильтре используется символ, не входящий в слова "
"(напр., ^)\n"
"текст интерпретируется как регулярное выражение.</p>\n"
"<p>Например, чтобы посмотреть только книги, которые написали Пушкин и "
@@ -4888,7 +4891,7 @@ msgid ""
"<p>...that you can edit more than one entry at a time, by holding down\n"
"the Shift or Ctrl key and selecting multiple entries.</p>\n"
msgstr ""
-"<p>...что за один раз вы можете отредактировать больше, чем одно поле.\n"
+"<p>…что за один раз вы можете отредактировать больше, чем одно поле.\n"
"Для этого выделите несколько полей, зажимая клавиши Shift или Ctrl.</p>\n"
#: tips.cpp:45
@@ -4896,7 +4899,7 @@ msgid ""
"<p>...that you can convert an existing book collection to a bibliography,\n"
"which can then be exported to bibtex or Bibtexml format.</p>\n"
msgstr ""
-"<p>...что вы можете конвертировать текущую коллекцию книг в библиографию,\n"
+"<p>…что вы можете конвертировать текущую коллекцию книг в библиографию,\n"
"которая может быть экспортирована в формат Bibtex или Bibtexml.</p>\n"
#: tips.cpp:50
@@ -4904,7 +4907,7 @@ msgid ""
"<p>...that you can add, edit, and delete string macros for bibliographies.</"
"p>\n"
msgstr ""
-"<p>...что вы можете добавлять, редактировать и удалять строковые макросы для "
+"<p>…что вы можете добавлять, редактировать и удалять строковые макросы для "
"библиографий.</p>\n"
#: tips.cpp:54
@@ -4915,7 +4918,7 @@ msgid ""
"editors\n"
"to be sorted or printed together, for example.</p>\n"
msgstr ""
-"<p>...что если более чем одно поле форматируется как \"имя\", то в "
+"<p>…что если более чем одно поле форматируется как \"имя\", то в "
"коллекцию\n"
"добавляется дополнительная группа \"Люди\", например, для сортировки и "
"печати вместе.</p>\n"
@@ -4927,7 +4930,7 @@ msgid ""
"CSS\n"
"within the stylesheet governs things like the font, the margins, etc.</p>\n"
msgstr ""
-"<p>...что вы можете менять внешний вид, печатаемых отчетов, редактируя\n"
+"<p>…что вы можете менять внешний вид, печатаемых отчетов, редактируя\n"
"файл <tt>tellico-printing.xsl</tt>. Этот файл создает HTML и CSS\n"
"с такими элементами как шрифт, размер и т.д. </p>\n"
@@ -4936,12 +4939,12 @@ msgid ""
"<p>...that you can import using any generic XSL stylesheet which\n"
"outputs a valid Tellico XML file.</p>\n"
msgstr ""
-"<p>...что вы можете импортировать, используя стандартный\n"
+"<p>…что вы можете импортировать, используя стандартный\n"
"лист стилей XSL, на выходе получая правильный файл Tellico XML.</p>\n"
#: tips.cpp:71
msgid "<p>...that double-clicking an entry item opens the Entry Editor.</p>\n"
-msgstr "<p>...что двойной щелчок на записи открывает редактор записей.</p>\n"
+msgstr "<p>…что двойной щелчок на записи открывает редактор записей.</p>\n"
#: tips.cpp:75
msgid ""
@@ -4949,7 +4952,7 @@ msgid ""
"as\n"
"&lt;b&gt;bold&lt;/b&gt; or &lt;i&gt;italic&lt;/i&gt;.</p>\n"
msgstr ""
-"<p>...что в любое поле типа \"Большой текст\" вы можете добавлять теги HTML, "
+"<p>…что в любое поле типа \"Большой текст\" вы можете добавлять теги HTML, "
"такие как \n"
"&lt;b&gt;жирный шрифт&lt;/b&gt; или &lt;i&gt;курсивный&lt;/i&gt;.</p>\n"
@@ -4958,7 +4961,7 @@ msgid ""
"<p>...that in the Detailed View, you can press a letter on the\n"
"keyboard to skip to the next entry that starts with that letter.</p>\n"
msgstr ""
-"<p>...что в подробном виде вы можете нажать кнопку буквы на клавиатуре для\n"
+"<p>…что в подробном виде вы можете нажать кнопку буквы на клавиатуре для\n"
"перехода к записи, начинающейся с этой буквы.</p>\n"
#: tips.cpp:85
@@ -4973,9 +4976,9 @@ msgid ""
"types by respecting proper sorting at the same time. Consider for example\n"
"a number field followed by a text subfield with entries 3b, 14a.</p>\n"
msgstr ""
-"<p>...что вы можете использовать \"зависимые\" поля для комбинации\n"
+"<p>…что вы можете использовать \"зависимые\" поля для комбинации\n"
"нескольких раздельных полей в одно. Просто выберите тип \"зависимый\" \n"
-"и используйте описание вроде \"Значение: %{поле1}%{поле2}\", где %{...}\n"
+"и используйте описание вроде \"Значение: %{поле1}%{поле2}\", где %{…}\n"
"заменяется на значение поля. Это полезно для использование различных\n"
"полей в одном поле, т.е. для лучшей группировки и для комбинации полей\n"
"различных типов с приоритетом правильной сортировки. Пример -\n"
diff --git a/src/borrower.h b/src/borrower.h
index 81a5dc2..261ab4d 100644
--- a/src/borrower.h
+++ b/src/borrower.h
@@ -78,7 +78,7 @@ public:
const TQString& name() const { return m_name; }
const LoanVec& loans() const { return m_loans; }
bool isEmpty() const { return m_loans.isEmpty(); }
- int count() const { return m_loans.count(); }
+ size_t count() const { return m_loans.count(); }
Data::LoanPtr loan(Data::ConstEntryPtr entry);
void addLoan(Data::LoanPtr loan);
diff --git a/src/borroweritem.cpp b/src/borroweritem.cpp
index f43e502..80a305f 100644
--- a/src/borroweritem.cpp
+++ b/src/borroweritem.cpp
@@ -25,7 +25,7 @@ BorrowerItem::BorrowerItem(GUI::ListView* parent_, Data::BorrowerPtr borrower_)
setPixmap(0, SmallIcon(TQString::fromLatin1("kaddressbook")));
}
-int BorrowerItem::count() const {
+size_t BorrowerItem::count() const {
return m_borrower ? m_borrower->count() : GUI::CountedItem::count();
}
diff --git a/src/borroweritem.h b/src/borroweritem.h
index ad0b7d6..9d15f3f 100644
--- a/src/borroweritem.h
+++ b/src/borroweritem.h
@@ -29,7 +29,7 @@ public:
virtual bool isBorrowerItem() const { return true; }
Data::BorrowerPtr borrower() { return m_borrower; }
- virtual int count() const;
+ virtual size_t count() const;
virtual Data::EntryVec entries() const;
private:
diff --git a/src/collection.cpp b/src/collection.cpp
index 7d121e0..59cbef6 100644
--- a/src/collection.cpp
+++ b/src/collection.cpp
@@ -878,6 +878,9 @@ bool Collection::mergeEntry(EntryPtr e1, EntryPtr e2, bool overwrite_, bool askU
if(ret) {
e1->setField(field, vals1.join(TQString::fromLatin1("; ")));
}
+// remove the merging due to use comments
+// maybe in the future have a more intelligent way
+#if 0
} else if(field->flags() & Data::Field::AllowMultiple) {
// if field F allows multiple values and not a Table (see above case),
// e1's F values = (e1's F values) U (e2's F values) (union)
@@ -894,6 +897,7 @@ bool Collection::mergeEntry(EntryPtr e1, EntryPtr e2, bool overwrite_, bool askU
// items1.sort();
e1->setField(field, items1.join(TQString::fromLatin1("; ")));
ret = true;
+#endif
} else if(askUser_ && e1->field(field) != e2->field(field)) {
int ret = Kernel::self()->askAndMerge(e1, e2, field);
if(ret == 0) {
diff --git a/src/collectionfieldsdialog.cpp b/src/collectionfieldsdialog.cpp
index ef3583f..7d1fc46 100644
--- a/src/collectionfieldsdialog.cpp
+++ b/src/collectionfieldsdialog.cpp
@@ -254,7 +254,6 @@ CollectionFieldsDialog::CollectionFieldsDialog(Data::CollPtr coll_, TQWidget* pa
// need to stretch at bottom
vbox->setStretchFactor(new TQWidget(vbox), 1);
- TDEAcceleratorManager::manage(vbox);
// keep a default collection
m_defaultCollection = CollectionFactory::collection(m_coll->type(), true);
@@ -279,6 +278,9 @@ CollectionFieldsDialog::~CollectionFieldsDialog() {
}
void CollectionFieldsDialog::slotSelectInitial() {
+ // the accel management is here so that it doesn't cause conflicts with the
+ // ones explicitly set in the constructor
+ TDEAcceleratorManager::manage(mainWidget());
m_fieldsBox->setSelected(0, true);
}
@@ -405,7 +407,7 @@ void CollectionFieldsDialog::slotNew() {
}
TQString name = TQString::fromLatin1("custom") + TQString::number(m_newFields.count()+1);
- int count = m_newFields.count() + 1;
+ size_t count = m_newFields.count() + 1;
TQString title = i18n("New Field") + TQString::fromLatin1(" %1").arg(count);
while(m_fieldsBox->findItem(title)) {
++count;
diff --git a/src/collections/filecatalog.cpp b/src/collections/filecatalog.cpp
index 92d088f..afba7fc 100644
--- a/src/collections/filecatalog.cpp
+++ b/src/collections/filecatalog.cpp
@@ -102,4 +102,21 @@ Tellico::Data::FieldVec FileCatalog::defaultFields() {
return list;
}
+int FileCatalog::sameEntry(Data::EntryPtr entry1_, Data::EntryPtr entry2_) const {
+ // equal urls are always equal, even if modification time or something is different
+ if(Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("url"), this) > 0) {
+ return 100; // good match
+ }
+ // if volume or created time is different, it can't be same entry
+ if(Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("volume"), this) == 0 ||
+ Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("created"), this) == 0 ||
+ Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("size"), this) == 0) {
+ return 0;
+ }
+ int res = Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("title"), this);
+ res += Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("description"), this);
+ res += Entry::compareValues(entry1_, entry2_, TQString::fromLatin1("mimetype"), this);
+ return res;
+}
+
#include "filecatalog.moc"
diff --git a/src/collections/filecatalog.h b/src/collections/filecatalog.h
index f2ede29..6a08dc9 100644
--- a/src/collections/filecatalog.h
+++ b/src/collections/filecatalog.h
@@ -1,5 +1,5 @@
/***************************************************************************
- copyright : (C) 2005-2006 by Robby Stephenson
+ copyright : (C) 2005-2008 by Robby Stephenson
***************************************************************************/
@@ -30,6 +30,7 @@ public:
FileCatalog(bool addFields, const TQString& title = TQString());
virtual Type type() const { return File; }
+ virtual int sameEntry(Data::EntryPtr entry1, Data::EntryPtr entry2) const;
static FieldVec defaultFields();
};
diff --git a/src/controller.cpp b/src/controller.cpp
index f3afb2a..d4a1599 100644
--- a/src/controller.cpp
+++ b/src/controller.cpp
@@ -434,6 +434,7 @@ void Controller::slotDeleteSelectedEntries() {
int ret = KMessageBox::warningContinueCancel(Kernel::self()->widget(), str, i18n("Delete Entry"),
KGuiItem(i18n("&Delete"), TQString::fromLatin1("editdelete")), dontAsk);
if(ret != KMessageBox::Continue) {
+ m_working = false;
return;
}
} else {
@@ -448,6 +449,7 @@ void Controller::slotDeleteSelectedEntries() {
i18n("Delete Multiple Entries"),
KGuiItem(i18n("&Delete"), TQString::fromLatin1("editdelete")), dontAsk);
if(ret != KMessageBox::Continue) {
+ m_working = false;
return;
}
}
diff --git a/src/core/Makefile.am b/src/core/Makefile.am
index 15fc0df..01bf5a8 100644
--- a/src/core/Makefile.am
+++ b/src/core/Makefile.am
@@ -17,6 +17,8 @@ drophandler.h drophandler.cpp \
tellico-rename.upd tellico.upd \
tellico-1-3-update.pl
+dcopinterface_DCOPIDLNG = ALL
+
kde_kcfg_DATA = tellico_config.kcfg
updatedir = $(kde_datadir)/tdeconf_update
diff --git a/src/core/dcopinterface_skel.cpp b/src/core/dcopinterface_skel.cpp
index 8de56bf..4e819ed 100644
--- a/src/core/dcopinterface_skel.cpp
+++ b/src/core/dcopinterface_skel.cpp
@@ -25,11 +25,11 @@ static const char* const ApplicationInterface_ftable[16][3] = {
{ "bool", "exportHTML(TQString)", "exportHTML(TQString file)" },
{ "bool", "exportCSV(TQString)", "exportCSV(TQString file)" },
{ "bool", "exportPilotDB(TQString)", "exportPilotDB(TQString file)" },
- { "TQValueList<long int>", "selectedEntries()", "selectedEntries()" },
- { "TQValueList<long int>", "filteredEntries()", "filteredEntries()" },
+ { "TQValueList<long>", "selectedEntries()", "selectedEntries()" },
+ { "TQValueList<long>", "filteredEntries()", "filteredEntries()" },
{ "void", "openFile(TQString)", "openFile(TQString file)" },
{ "void", "setFilter(TQString)", "setFilter(TQString text)" },
- { "bool", "showEntry(long int)", "showEntry(long int id)" },
+ { "bool", "showEntry(long)", "showEntry(long id)" },
{ 0, 0, 0 }
};
static const int ApplicationInterface_ftable_hiddens[15] = {
@@ -162,12 +162,12 @@ bool ApplicationInterface::process(const TQCString &fun, const TQByteArray &data
TQDataStream _replyStream( replyData, IO_WriteOnly );
_replyStream << exportPilotDB(arg0 );
} break;
- case 10: { // TQValueList<long int> selectedEntries()
+ case 10: { // TQValueList<long> selectedEntries()
replyType = ApplicationInterface_ftable[10][0];
TQDataStream _replyStream( replyData, IO_WriteOnly );
_replyStream << selectedEntries( );
} break;
- case 11: { // TQValueList<long int> filteredEntries()
+ case 11: { // TQValueList<long> filteredEntries()
replyType = ApplicationInterface_ftable[11][0];
TQDataStream _replyStream( replyData, IO_WriteOnly );
_replyStream << filteredEntries( );
@@ -188,8 +188,8 @@ bool ApplicationInterface::process(const TQCString &fun, const TQByteArray &data
replyType = ApplicationInterface_ftable[13][0];
setFilter(arg0 );
} break;
- case 14: { // bool showEntry(long int)
- long int arg0;
+ case 14: { // bool showEntry(long)
+ long arg0;
TQDataStream arg( data, IO_ReadOnly );
if (arg.atEnd()) return false;
arg >> arg0;
@@ -233,14 +233,14 @@ namespace Tellico {
static const int CollectionInterface_fhash = 11;
static const char* const CollectionInterface_ftable[9][3] = {
- { "long int", "addEntry()", "addEntry()" },
- { "bool", "removeEntry(long int)", "removeEntry(long int entryID)" },
+ { "long", "addEntry()", "addEntry()" },
+ { "bool", "removeEntry(long)", "removeEntry(long entryID)" },
{ TQSTRINGLIST_OBJECT_NAME_STRING, "values(TQString)", "values(TQString fieldName)" },
- { TQSTRINGLIST_OBJECT_NAME_STRING, "values(long int,TQString)", "values(long int entryID,TQString fieldName)" },
+ { TQSTRINGLIST_OBJECT_NAME_STRING, "values(long,TQString)", "values(long entryID,TQString fieldName)" },
{ TQSTRINGLIST_OBJECT_NAME_STRING, "bibtexKeys()", "bibtexKeys()" },
- { TQSTRING_OBJECT_NAME_STRING, "bibtexKey(long int)", "bibtexKey(long int entryID)" },
- { "bool", "setFieldValue(long int,TQString,TQString)", "setFieldValue(long int entryID,TQString fieldName,TQString value)" },
- { "bool", "addFieldValue(long int,TQString,TQString)", "addFieldValue(long int entryID,TQString fieldName,TQString value)" },
+ { TQSTRING_OBJECT_NAME_STRING, "bibtexKey(long)", "bibtexKey(long entryID)" },
+ { "bool", "setFieldValue(long,TQString,TQString)", "setFieldValue(long entryID,TQString fieldName,TQString value)" },
+ { "bool", "addFieldValue(long,TQString,TQString)", "addFieldValue(long entryID,TQString fieldName,TQString value)" },
{ 0, 0, 0 }
};
static const int CollectionInterface_ftable_hiddens[8] = {
@@ -264,13 +264,13 @@ bool CollectionInterface::process(const TQCString &fun, const TQByteArray &data,
}
int* fp = fdict->find( fun );
switch ( fp?*fp:-1) {
- case 0: { // long int addEntry()
+ case 0: { // long addEntry()
replyType = CollectionInterface_ftable[0][0];
TQDataStream _replyStream( replyData, IO_WriteOnly );
_replyStream << addEntry( );
} break;
- case 1: { // bool removeEntry(long int)
- long int arg0;
+ case 1: { // bool removeEntry(long)
+ long arg0;
TQDataStream arg( data, IO_ReadOnly );
if (arg.atEnd()) return false;
arg >> arg0;
@@ -287,8 +287,8 @@ bool CollectionInterface::process(const TQCString &fun, const TQByteArray &data,
TQDataStream _replyStream( replyData, IO_WriteOnly );
_replyStream << values(arg0 );
} break;
- case 3: { // TQStringList values(long int,TQString)
- long int arg0;
+ case 3: { // TQStringList values(long,TQString)
+ long arg0;
TQString arg1;
TQDataStream arg( data, IO_ReadOnly );
if (arg.atEnd()) return false;
@@ -304,8 +304,8 @@ bool CollectionInterface::process(const TQCString &fun, const TQByteArray &data,
TQDataStream _replyStream( replyData, IO_WriteOnly );
_replyStream << bibtexKeys( );
} break;
- case 5: { // TQString bibtexKey(long int)
- long int arg0;
+ case 5: { // TQString bibtexKey(long)
+ long arg0;
TQDataStream arg( data, IO_ReadOnly );
if (arg.atEnd()) return false;
arg >> arg0;
@@ -313,8 +313,8 @@ bool CollectionInterface::process(const TQCString &fun, const TQByteArray &data,
TQDataStream _replyStream( replyData, IO_WriteOnly );
_replyStream << bibtexKey(arg0 );
} break;
- case 6: { // bool setFieldValue(long int,TQString,TQString)
- long int arg0;
+ case 6: { // bool setFieldValue(long,TQString,TQString)
+ long arg0;
TQString arg1;
TQString arg2;
TQDataStream arg( data, IO_ReadOnly );
@@ -328,8 +328,8 @@ bool CollectionInterface::process(const TQCString &fun, const TQByteArray &data,
TQDataStream _replyStream( replyData, IO_WriteOnly );
_replyStream << setFieldValue(arg0, arg1, arg2 );
} break;
- case 7: { // bool addFieldValue(long int,TQString,TQString)
- long int arg0;
+ case 7: { // bool addFieldValue(long,TQString,TQString)
+ long arg0;
TQString arg1;
TQString arg2;
TQDataStream arg( data, IO_ReadOnly );
diff --git a/src/core/drophandler.cpp b/src/core/drophandler.cpp
index e609e7b..8d4875d 100644
--- a/src/core/drophandler.cpp
+++ b/src/core/drophandler.cpp
@@ -15,9 +15,13 @@
#include "../mainwindow.h"
#include "../tellico_kernel.h"
#include "../tellico_debug.h"
+#include "../translators/bibteximporter.h"
+#include "../translators/risimporter.h"
#include <kurldrag.h>
#include <kmimetype.h>
+#include <tdeio/netaccess.h>
+#include <tdeio/job.h>
using Tellico::DropHandler;
@@ -62,18 +66,37 @@ bool DropHandler::handleURL(const KURL::List& urls_) {
bool hasUnknown = false;
KURL::List tc, pdf, bib, ris;
for(KURL::List::ConstIterator it = urls_.begin(); it != urls_.end(); ++it) {
- KMimeType::Ptr ptr = KMimeType::findByURL(*it);
+ const KURL& url = *it;
+ KMimeType::Ptr ptr;
+ // findByURL doesn't work for http, so actually query
+ // the url itself
+ if(url.protocol() != TQString::fromLatin1("http")) {
+ ptr = KMimeType::findByURL(url);
+ } else {
+ TDEIO::MimetypeJob* job = TDEIO::mimetype(url, false /*progress*/);
+ TDEIO::NetAccess::synchronousRun(job, Kernel::self()->widget());
+ ptr = KMimeType::mimeType(job->mimetype());
+ }
if(ptr->is(TQString::fromLatin1("application/x-tellico"))) {
- tc << *it;
+ tc << url;
} else if(ptr->is(TQString::fromLatin1("application/pdf"))) {
- pdf << *it;
+ pdf << url;
} else if(ptr->is(TQString::fromLatin1("text/x-bibtex")) ||
- ptr->is(TQString::fromLatin1("application/x-bibtex"))) {
- bib << *it;
+ ptr->is(TQString::fromLatin1("application/x-bibtex")) ||
+ ptr->is(TQString::fromLatin1("application/bibtex"))) {
+ bib << url;
} else if(ptr->is(TQString::fromLatin1("application/x-research-info-systems"))) {
- ris << *it;
+ ris << url;
+ } else if(url.fileName().endsWith(TQString::fromLatin1(".bib"))) {
+ bib << url;
+ } else if(url.fileName().endsWith(TQString::fromLatin1(".ris"))) {
+ ris << url;
+ } else if(ptr->is(TQString::fromLatin1("text/plain")) && Import::BibtexImporter::maybeBibtex(url)) {
+ bib << url;
+ } else if(ptr->is(TQString::fromLatin1("text/plain")) && Import::RISImporter::maybeRIS(url)) {
+ ris << url;
} else {
- myDebug() << "DropHandler::handleURL() - unrecognized type: " << ptr->name() << " (" << *it << ")" << endl;
+ myDebug() << "DropHandler::handleURL() - unrecognized type: " << ptr->name() << " (" << url << ")" << endl;
hasUnknown = true;
}
}
diff --git a/src/document.cpp b/src/document.cpp
index 40a38dd..97a5c5a 100644
--- a/src/document.cpp
+++ b/src/document.cpp
@@ -15,6 +15,7 @@
#include "mainwindow.h" // needed for calling fileSave()
#include "collectionfactory.h"
#include "translators/tellicoimporter.h"
+#include "translators/tellicosaximporter.h"
#include "translators/tellicozipexporter.h"
#include "translators/tellicoxmlexporter.h"
#include "collection.h"
@@ -109,7 +110,12 @@ bool Document::openDocument(const KURL& url_) {
}
delete m_importer;
+#ifdef SAX_SUPPORT
+ myLog() << "Document::openDocument() - using SAX loader" << endl;
+ m_importer = new Import::TellicoSaxImporter(url_, m_loadAllImages);
+#else
m_importer = new Import::TellicoImporter(url_, m_loadAllImages);
+#endif
CollPtr coll = m_importer->collection();
// delayed image loading only works for zip files
@@ -146,6 +152,8 @@ bool Document::openDocument(const KURL& url_) {
TQTimer::singleShot(500, this, TQT_SLOT(slotLoadAllImages()));
} else {
emit signalCollectionImagesLoaded(m_coll);
+ m_importer->deleteLater();
+ m_importer = 0;
}
return true;
}
diff --git a/src/document.h b/src/document.h
index b270be6..6d3e99e 100644
--- a/src/document.h
+++ b/src/document.h
@@ -27,6 +27,7 @@
namespace Tellico {
namespace Import {
class TellicoImporter;
+ class TellicoSaxImporter;
}
namespace Data {
@@ -227,7 +228,11 @@ private:
bool m_loadAllImages : 1;
KURL m_url;
bool m_validFile : 1;
+#ifdef SAX_SUPPORT
+ TQGuardedPtr<Import::TellicoSaxImporter> m_importer;
+#else
TQGuardedPtr<Import::TellicoImporter> m_importer;
+#endif
bool m_cancelImageWriting : 1;
int m_fileFormat;
bool m_allImagesOnDisk : 1;
diff --git a/src/entry.cpp b/src/entry.cpp
index fc97354..a1274db 100644
--- a/src/entry.cpp
+++ b/src/entry.cpp
@@ -252,8 +252,13 @@ bool Entry::setField(const TQString& name_, const TQString& value_) {
}
// the string store is probable only useful for fields with auto-completion or choice/number/bool
+ bool shareType = f->type() == Field::Choice ||
+ f->type() == Field::Bool ||
+ f->type() == Field::Image ||
+ f->type() == Field::Rating ||
+ f->type() == Field::Number;
if(!(f->flags() & Field::AllowMultiple) &&
- ((f->type() == Field::Choice || f->type() == Field::Bool || f->type() == Field::Number) ||
+ (shareType ||
(f->type() == Field::Line && (f->flags() & Field::AllowCompletion)))) {
m_fields.insert(Tellico::shareString(name_), Tellico::shareString(value_));
} else {
@@ -415,6 +420,16 @@ int Entry::compareValues(EntryPtr e1, EntryPtr e2, FieldPtr f) {
if(f->name() == Latin1Literal("lccn") && LCCNValidator::formalize(s1) == LCCNValidator::formalize(s2)) {
return 5;
}
+ if(f->name() == Latin1Literal("arxiv")) {
+ // normalize and unVersion arxiv ID
+ s1.remove(TQRegExp(TQString::fromLatin1("^arxiv:"), false));
+ s1.remove(TQRegExp(TQString::fromLatin1("v\\d+$")));
+ s2.remove(TQRegExp(TQString::fromLatin1("^arxiv:"), false));
+ s2.remove(TQRegExp(TQString::fromLatin1("v\\d+$")));
+ if(s1 == s2) {
+ return 5;
+ }
+ }
if(f->formatFlag() == Field::FormatName) {
s1 = e1->field(f, true).lower();
s2 = e2->field(f, true).lower();
diff --git a/src/entry.h b/src/entry.h
index 92bda7c..de1ba66 100644
--- a/src/entry.h
+++ b/src/entry.h
@@ -84,11 +84,6 @@ public:
* The assignment operator is overloaded, since the id must be different.
*/
Entry& operator=(const Entry& other);
- /**
- * two entries are equal if all their field values are equal, except for
- * file catalogs which match on the url only
- */
- bool operator==(const Entry& other);
~Entry();
@@ -231,6 +226,12 @@ public:
static TQString dependentValue(ConstEntryPtr e, const TQString& formatString, bool formatted);
private:
+ /**
+ * two entries are equal if all their field values are equal, except for
+ * file catalogs which match on the url only
+ */
+ bool operator==(const Entry& other);
+
CollPtr m_coll;
long m_id;
StringMap m_fields;
diff --git a/src/entrygroupitem.cpp b/src/entrygroupitem.cpp
index 3d08169..3ddf6c1 100644
--- a/src/entrygroupitem.cpp
+++ b/src/entrygroupitem.cpp
@@ -131,7 +131,7 @@ TQString EntryGroupItem::key(int col_, bool) const {
return m_key;
}
-int EntryGroupItem::count() const {
+size_t EntryGroupItem::count() const {
return m_group ? m_group->count() : GUI::CountedItem::count();
}
diff --git a/src/entrygroupitem.h b/src/entrygroupitem.h
index 68e9fd5..4531e95 100644
--- a/src/entrygroupitem.h
+++ b/src/entrygroupitem.h
@@ -51,7 +51,7 @@ public:
*/
virtual TQString key(int col, bool) const;
- virtual int count() const;
+ virtual size_t count() const;
virtual Data::EntryVec entries() const;
private:
diff --git a/src/entryview.cpp b/src/entryview.cpp
index ab61616..66ad116 100644
--- a/src/entryview.cpp
+++ b/src/entryview.cpp
@@ -26,6 +26,7 @@
#include "document.h"
#include "latin1literal.h"
#include "../core/drophandler.h"
+#include "../tellico_debug.h"
#include <kstandarddirs.h>
#include <krun.h>
@@ -37,10 +38,22 @@
#include <tdelocale.h>
#include <tqfile.h>
+#include <tqclipboard.h>
using Tellico::EntryView;
+using Tellico::EntryViewWidget;
-EntryView::EntryView(TQWidget* parent_, const char* name_) : TDEHTMLPart(parent_, name_),
+EntryViewWidget::EntryViewWidget(TDEHTMLPart* part, TQWidget* parent)
+ : TDEHTMLView(part, parent) {}
+
+// for the life of me, I could not figure out how to call the actual
+// TDEHTMLPartBrowserExtension::copy() slot, so this will have to do
+void EntryViewWidget::copy() {
+ TQString text = part()->selectedText();
+ TQApplication::clipboard()->setText(text, TQClipboard::Clipboard);
+}
+
+EntryView::EntryView(TQWidget* parent_, const char* name_) : TDEHTMLPart(new EntryViewWidget(this, parent_), parent_, name_),
m_entry(0), m_handler(0), m_run(0), m_tempFile(0), m_useGradientImages(true), m_checkCommonFile(true) {
setJScriptEnabled(false);
setJavaEnabled(false);
diff --git a/src/entryview.h b/src/entryview.h
index 2ddc7e7..b5dc3a3 100644
--- a/src/entryview.h
+++ b/src/entryview.h
@@ -20,6 +20,7 @@ class KTempFile;
#include "datavectors.h"
#include <tdehtml_part.h>
+#include <tdehtmlview.h>
#include <tqguardedptr.h>
@@ -103,5 +104,15 @@ private:
bool m_checkCommonFile : 1;
};
+// stupid naming on my part, I need to subclass the view to
+// add a slot. EntryView is really a part though
+class EntryViewWidget : public TDEHTMLView {
+Q_OBJECT
+public:
+ EntryViewWidget(TDEHTMLPart* part, TQWidget* parent);
+public slots:
+ void copy();
+};
+
} //end namespace
#endif
diff --git a/src/fetch/Makefile.am b/src/fetch/Makefile.am
index 017ef60..2f56fa5 100644
--- a/src/fetch/Makefile.am
+++ b/src/fetch/Makefile.am
@@ -10,7 +10,7 @@ libfetch_a_SOURCES = amazonfetcher.cpp animenfofetcher.cpp arxivfetcher.cpp \
discogsfetcher.cpp entrezfetcher.cpp execexternalfetcher.cpp fetcher.cpp fetchmanager.cpp \
gcstarpluginfetcher.cpp googlescholarfetcher.cpp ibsfetcher.cpp imdbfetcher.cpp \
isbndbfetcher.cpp messagehandler.cpp srufetcher.cpp yahoofetcher.cpp z3950connection.cpp \
- z3950fetcher.cpp
+ z3950fetcher.cpp amazonrequest.cpp hmac_sha2.c sha2.c
####### tdevelop will overwrite this part!!! (end)############
@@ -40,6 +40,8 @@ citebasefetcher.h citebasefetcher.cpp \
bibsonomyfetcher.h bibsonomyfetcher.cpp \
googlescholarfetcher.h googlescholarfetcher.cpp \
discogsfetcher.h discogsfetcher.cpp \
+amazonrequest.h amazonrequest.cpp \
+hmac_sha2.h hmac_sha2.c sha2.h sha2.c \
z3950-servers.cfg
appdir = $(kde_datadir)/tellico
diff --git a/src/fetch/amazonfetcher.cpp b/src/fetch/amazonfetcher.cpp
index 9088643..1cb6b0c 100644
--- a/src/fetch/amazonfetcher.cpp
+++ b/src/fetch/amazonfetcher.cpp
@@ -12,6 +12,7 @@
***************************************************************************/
#include "amazonfetcher.h"
+#include "amazonrequest.h"
#include "messagehandler.h"
#include "../translators/xslthandler.h"
#include "../translators/tellicoimporter.h"
@@ -47,7 +48,6 @@
namespace {
static const int AMAZON_RETURNS_PER_REQUEST = 10;
static const int AMAZON_MAX_RETURNS_TOTAL = 20;
- static const char* AMAZON_ACCESS_KEY = "0834VQ4S71KYPVSYQD02";
static const char* AMAZON_ASSOC_TOKEN = "tellico-20";
// need to have these in the translation file
static const char* linkText = I18N_NOOP("Amazon Link");
@@ -84,7 +84,6 @@ const AmazonFetcher::SiteData& AmazonFetcher::siteData(int site_) {
AmazonFetcher::AmazonFetcher(Site site_, TQObject* parent_, const char* name_)
: Fetcher(parent_, name_), m_xsltHandler(0), m_site(site_), m_imageSize(MediumImage),
- m_access(TQString::fromLatin1(AMAZON_ACCESS_KEY)),
m_assoc(TQString::fromLatin1(AMAZON_ASSOC_TOKEN)), m_addLinkField(true), m_limit(AMAZON_MAX_RETURNS_TOTAL),
m_countOffset(0), m_page(1), m_total(-1), m_numResults(0), m_job(0), m_started(false) {
m_name = siteData(site_).title;
@@ -109,7 +108,8 @@ bool AmazonFetcher::canFetch(int type) const {
|| type == Data::Collection::Bibtex
|| type == Data::Collection::Album
|| type == Data::Collection::Video
- || type == Data::Collection::Game;
+ || type == Data::Collection::Game
+ || type == Data::Collection::BoardGame;
}
void AmazonFetcher::readConfigHook(const TDEConfigGroup& config_) {
@@ -117,6 +117,10 @@ void AmazonFetcher::readConfigHook(const TDEConfigGroup& config_) {
if(!s.isEmpty()) {
m_access = s;
}
+ s = config_.readEntry("SecretKey");
+ if(!s.isEmpty()) {
+ m_amazonKey = s;
+ }
s = config_.readEntry("AssocToken");
if(!s.isEmpty()) {
m_assoc = s;
@@ -152,35 +156,41 @@ void AmazonFetcher::doSearch() {
// myDebug() << "AmazonFetcher::doSearch() - getting page " << m_page << endl;
const SiteData& data = siteData(m_site);
- KURL u = data.url;
- u.addQueryItem(TQString::fromLatin1("Service"), TQString::fromLatin1("AWSECommerceService"));
- u.addQueryItem(TQString::fromLatin1("AssociateTag"), m_assoc);
- u.addQueryItem(TQString::fromLatin1("AWSAccessKeyId"), m_access);
- u.addQueryItem(TQString::fromLatin1("Operation"), TQString::fromLatin1("ItemSearch"));
- u.addQueryItem(TQString::fromLatin1("ResponseGroup"), TQString::fromLatin1("Large"));
- u.addQueryItem(TQString::fromLatin1("ItemPage"), TQString::number(m_page));
- u.addQueryItem(TQString::fromLatin1("Version"), TQString::fromLatin1("2007-10-29"));
+
+ TQMap<TQString, TQString> params;
+ params.insert(TQString::fromLatin1("Service"), TQString::fromLatin1("AWSECommerceService"));
+ params.insert(TQString::fromLatin1("AssociateTag"), m_assoc);
+ params.insert(TQString::fromLatin1("AWSAccessKeyId"), m_access);
+ params.insert(TQString::fromLatin1("Operation"), TQString::fromLatin1("ItemSearch"));
+ params.insert(TQString::fromLatin1("ResponseGroup"), TQString::fromLatin1("Large"));
+ params.insert(TQString::fromLatin1("ItemPage"), TQString::number(m_page));
+ params.insert(TQString::fromLatin1("Version"), TQString::fromLatin1("2007-10-29"));
const int type = Kernel::self()->collectionType();
switch(type) {
case Data::Collection::Book:
case Data::Collection::ComicBook:
case Data::Collection::Bibtex:
- u.addQueryItem(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Books"));
- u.addQueryItem(TQString::fromLatin1("SortIndex"), TQString::fromLatin1("relevancerank"));
+ params.insert(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Books"));
+ params.insert(TQString::fromLatin1("SortIndex"), TQString::fromLatin1("relevancerank"));
break;
case Data::Collection::Album:
- u.addQueryItem(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Music"));
+ params.insert(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Music"));
break;
case Data::Collection::Video:
- u.addQueryItem(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Video"));
- u.addQueryItem(TQString::fromLatin1("SortIndex"), TQString::fromLatin1("relevancerank"));
+ params.insert(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Video"));
+ params.insert(TQString::fromLatin1("SortIndex"), TQString::fromLatin1("relevancerank"));
break;
case Data::Collection::Game:
- u.addQueryItem(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("VideoGames"));
+ params.insert(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("VideoGames"));
+ break;
+
+ case Data::Collection::BoardGame:
+ params.insert(TQString::fromLatin1("SearchIndex"), TQString::fromLatin1("Toys"));
+ params.insert(TQString::fromLatin1("SortIndex"), TQString::fromLatin1("relevancerank"));
break;
case Data::Collection::Coin:
@@ -188,7 +198,6 @@ void AmazonFetcher::doSearch() {
case Data::Collection::Wine:
case Data::Collection::Base:
case Data::Collection::Card:
- default:
message(i18n("%1 does not allow searching for this collection type.").arg(source()), MessageHandler::Warning);
stop();
return;
@@ -207,29 +216,28 @@ void AmazonFetcher::doSearch() {
switch(m_key) {
case Title:
- u.addQueryItem(TQString::fromLatin1("Title"), value, mib);
+ params.insert(TQString::fromLatin1("Title"), value);
break;
case Person:
if(type == Data::Collection::Video) {
- u.addQueryItem(TQString::fromLatin1("Actor"), value, mib);
- u.addQueryItem(TQString::fromLatin1("Director"), value, mib);
+ params.insert(TQString::fromLatin1("Actor"), value);
+ params.insert(TQString::fromLatin1("Director"), value);
} else if(type == Data::Collection::Album) {
- u.addQueryItem(TQString::fromLatin1("Artist"), value, mib);
+ params.insert(TQString::fromLatin1("Artist"), value);
} else if(type == Data::Collection::Game) {
- u.addQueryItem(TQString::fromLatin1("Manufacturer"), value, mib);
+ params.insert(TQString::fromLatin1("Manufacturer"), value);
} else { // books and bibtex
TQString s = TQString::fromLatin1("author:%1 or publisher:%2").arg(value, value);
-// u.addQueryItem(TQString::fromLatin1("Author"), value, mib);
-// u.addQueryItem(TQString::fromLatin1("Publisher"), value, mib);
- u.addQueryItem(TQString::fromLatin1("Power"), s, mib);
+// params.insert(TQString::fromLatin1("Author"), value, mib);
+// params.insert(TQString::fromLatin1("Publisher"), value, mib);
+ params.insert(TQString::fromLatin1("Power"), s);
}
break;
case ISBN:
{
- u.removeQueryItem(TQString::fromLatin1("Operation"));
- u.addQueryItem(TQString::fromLatin1("Operation"), TQString::fromLatin1("ItemLookup"));
+ params.insert(TQString::fromLatin1("Operation"), TQString::fromLatin1("ItemLookup"));
TQString s = m_value; // not encValue!!!
s.remove('-');
@@ -260,47 +268,46 @@ void AmazonFetcher::doSearch() {
}
}
// the default search is by ASIN, which prohibits SearchIndex
- u.removeQueryItem(TQString::fromLatin1("SearchIndex"));
+ params.remove(TQString::fromLatin1("SearchIndex"));
}
// limit to first 10
while(isbns.size() > 10) {
isbns.pop_back();
}
- u.addQueryItem(TQString::fromLatin1("ItemId"), isbns.join(TQString::fromLatin1(",")));
+ params.insert(TQString::fromLatin1("ItemId"), isbns.join(TQString::fromLatin1(",")));
if(isbn13) {
- u.addQueryItem(TQString::fromLatin1("IdType"), TQString::fromLatin1("EAN"));
+ params.insert(TQString::fromLatin1("IdType"), TQString::fromLatin1("EAN"));
}
}
break;
case UPC:
{
- u.removeQueryItem(TQString::fromLatin1("Operation"));
- u.addQueryItem(TQString::fromLatin1("Operation"), TQString::fromLatin1("ItemLookup"));
+ params.insert(TQString::fromLatin1("Operation"), TQString::fromLatin1("ItemLookup"));
// US allows UPC, all others are EAN
if(m_site == US) {
- u.addQueryItem(TQString::fromLatin1("IdType"), TQString::fromLatin1("UPC"));
+ params.insert(TQString::fromLatin1("IdType"), TQString::fromLatin1("UPC"));
} else {
- u.addQueryItem(TQString::fromLatin1("IdType"), TQString::fromLatin1("EAN"));
+ params.insert(TQString::fromLatin1("IdType"), TQString::fromLatin1("EAN"));
}
TQString s = m_value; // not encValue!!!
s.remove('-');
// limit to first 10
s.replace(TQString::fromLatin1("; "), TQString::fromLatin1(","));
s = s.section(',', 0, 9);
- u.addQueryItem(TQString::fromLatin1("ItemId"), s);
+ params.insert(TQString::fromLatin1("ItemId"), s);
}
break;
case Keyword:
- u.addQueryItem(TQString::fromLatin1("Keywords"), m_value, mib);
+ params.insert(TQString::fromLatin1("Keywords"), value);
break;
case Raw:
{
TQString key = value.section('=', 0, 0).stripWhiteSpace();
TQString str = value.section('=', 1).stripWhiteSpace();
- u.addQueryItem(key, str, mib);
+ params.insert(key, str);
}
break;
@@ -309,9 +316,11 @@ void AmazonFetcher::doSearch() {
stop();
return;
}
-// myDebug() << "AmazonFetcher::search() - url: " << u.url() << endl;
+ AmazonRequest request(siteData(m_site).url, m_amazonKey);
+ KURL newUrl = request.signedRequest(params);
+// myDebug() << "AmazonFetcher::search() - url: " << newUrl.url() << endl;
- m_job = TDEIO::get(u, false, false);
+ m_job = TDEIO::get(newUrl, false, false);
connect(m_job, TQT_SIGNAL(data(TDEIO::Job*, const TQByteArray&)),
TQT_SLOT(slotData(TDEIO::Job*, const TQByteArray&)));
connect(m_job, TQT_SIGNAL(result(TDEIO::Job*)),
@@ -520,6 +529,12 @@ void AmazonFetcher::slotComplete(TDEIO::Job* job_) {
+ entry->field(TQString::fromLatin1("year"));
break;
+ case Data::Collection::BoardGame:
+ desc = entry->field(TQString::fromLatin1("publisher"))
+ + TQChar('/')
+ + entry->field(TQString::fromLatin1("year"));
+ break;
+
default:
break;
}
@@ -889,11 +904,25 @@ AmazonFetcher::ConfigWidget::ConfigWidget(TQWidget* parent_, const AmazonFetcher
TQWhatsThis::add(m_assocEdit, w);
label->setBuddy(m_assocEdit);
+ label = new TQLabel(i18n("Access key: "), optionsWidget());
+ l->addWidget(label, ++row, 0);
+ m_accessEdit = new KLineEdit(optionsWidget());
+ connect(m_accessEdit, SIGNAL(textChanged(const TQString&)), SLOT(slotSetModified()));
+ l->addWidget(m_accessEdit, row, 1);
+
+ label = new TQLabel(i18n("Secret Key: "), optionsWidget());
+ l->addWidget(label, ++row, 0);
+ m_secretKeyEdit = new KLineEdit(optionsWidget());
+ connect(m_secretKeyEdit, SIGNAL(textChanged(const TQString&)), SLOT(slotSetModified()));
+ l->addWidget(m_secretKeyEdit, row, 1);
+
l->setRowStretch(++row, 10);
if(fetcher_) {
m_siteCombo->setCurrentData(fetcher_->m_site);
m_assocEdit->setText(fetcher_->m_assoc);
+ m_accessEdit->setText(fetcher_->m_access);
+ m_secretKeyEdit->setText(fetcher_->m_amazonKey);
m_imageCombo->setCurrentData(fetcher_->m_imageSize);
} else { // defaults
m_assocEdit->setText(TQString::fromLatin1(AMAZON_ASSOC_TOKEN));
@@ -912,6 +941,14 @@ void AmazonFetcher::ConfigWidget::saveConfig(TDEConfigGroup& config_) {
if(!s.isEmpty()) {
config_.writeEntry("AssocToken", s);
}
+ s = m_accessEdit->text().stripWhiteSpace();
+ if(!s.isEmpty()) {
+ config_.writeEntry("AccessKey", s);
+ }
+ s = m_secretKeyEdit->text().stripWhiteSpace();
+ if(!s.isEmpty()) {
+ config_.writeEntry("SecretKey", s);
+ }
n = m_imageCombo->currentData().toInt();
config_.writeEntry("Image Size", n);
diff --git a/src/fetch/amazonfetcher.h b/src/fetch/amazonfetcher.h
index 03aed7d..8628b2c 100644
--- a/src/fetch/amazonfetcher.h
+++ b/src/fetch/amazonfetcher.h
@@ -118,6 +118,7 @@ private:
ImageSize m_imageSize;
TQString m_access;
+ TQString m_amazonKey;
TQString m_assoc;
bool m_addLinkField;
int m_limit;
@@ -151,6 +152,8 @@ private slots:
private:
KLineEdit* m_assocEdit;
+ KLineEdit* m_accessEdit;
+ KLineEdit* m_secretKeyEdit;
GUI::ComboBox* m_siteCombo;
GUI::ComboBox* m_imageCombo;
};
diff --git a/src/fetch/amazonrequest.cpp b/src/fetch/amazonrequest.cpp
new file mode 100644
index 0000000..bb8d729
--- /dev/null
+++ b/src/fetch/amazonrequest.cpp
@@ -0,0 +1,72 @@
+/***************************************************************************
+ Copyright (C) 2007-2009 Robby Stephenson <[email protected]>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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) version 3 or any later version *
+ * accepted by the membership of KDE e.V. (or its successor approved *
+ * by the membership of KDE e.V.), which shall act as a proxy *
+ * defined in Section 14 of version 3 of the license. *
+ * *
+ * 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, see <http://www.gnu.org/licenses/>. *
+ * *
+ ***************************************************************************/
+
+#include "amazonrequest.h"
+#include "hmac_sha2.h"
+#include "../tellico_debug.h"
+
+#include <kmdcodec.h>
+
+#include <tqdatetime.h>
+
+using Tellico::Fetch::AmazonRequest;
+
+AmazonRequest::AmazonRequest(const KURL& site_, const TQString& key_) : m_siteUrl(site_), m_key(key_) {
+}
+
+KURL AmazonRequest::signedRequest(const TQMap<TQString, TQString>& params_) const {
+ TQMap<TQString, TQString> allParams = params_;
+ allParams.insert(TQString::fromLatin1("Timestamp"),
+ TQDateTime::currentDateTime(TQt::UTC).toString(TQt::ISODate));
+
+ TQString query;
+ // has to be a map so that the query elements are sorted
+ TQMap<TQString, TQString>::Iterator it;
+ for ( it = allParams.begin(); it != allParams.end(); ++it ) {
+ query += KURL::encode_string(it.key());
+ query += '=';
+ query += KURL::encode_string(it.data());
+ query += '&';
+ }
+ // remove last '&'
+ query.truncate(query.length()-1);
+
+ const TQCString toSign = "GET\n"
+ + m_siteUrl.host().utf8() + '\n'
+ + m_siteUrl.path().utf8() + '\n'
+ + query.latin1();
+
+ TQByteArray hmac_buffer;
+ hmac_buffer.fill('\0', SHA256_DIGEST_SIZE);
+ // subtract one from string size for toSign, not exactly sure why
+ hmac_sha256(reinterpret_cast<unsigned char*>(const_cast<char*>(m_key.latin1())), m_key.length(),
+ reinterpret_cast<unsigned char*>(toSign.data()), toSign.size()-1,
+ reinterpret_cast<unsigned char*>(hmac_buffer.data()), hmac_buffer.size());
+ const TQString sig = KURL::encode_string(KCodecs::base64Encode(hmac_buffer));
+// myDebug() << sig << endl;
+
+ KURL url = m_siteUrl;
+ url.setQuery(query + "&Signature=" + sig);
+ return url;
+}
diff --git a/src/fetch/amazonrequest.h b/src/fetch/amazonrequest.h
new file mode 100644
index 0000000..d1d9017
--- /dev/null
+++ b/src/fetch/amazonrequest.h
@@ -0,0 +1,52 @@
+/***************************************************************************
+ Copyright (C) 2007-2009 Robby Stephenson <[email protected]>
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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) version 3 or any later version *
+ * accepted by the membership of KDE e.V. (or its successor approved *
+ * by the membership of KDE e.V.), which shall act as a proxy *
+ * defined in Section 14 of version 3 of the license. *
+ * *
+ * 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, see <http://www.gnu.org/licenses/>. *
+ * *
+ ***************************************************************************/
+
+#ifndef TELLICO_FETCH_AMAZONREQUEST_H
+#define TELLICO_FETCH_AMAZONREQUEST_H
+
+#include <kurl.h>
+
+#include <tqmap.h>
+
+namespace Tellico {
+ namespace Fetch {
+
+/**
+ * @author Robby Stephenson
+ */
+class AmazonRequest {
+public:
+ AmazonRequest(const KURL& site, const TQString& key);
+
+ KURL signedRequest(const TQMap<TQString, TQString>& params) const;
+
+private:
+ KURL m_siteUrl;
+ TQString m_key;
+};
+
+ } // end Fetch namespace
+} // end Tellico namespace
+
+#endif
diff --git a/src/fetch/arxivfetcher.cpp b/src/fetch/arxivfetcher.cpp
index f59d246..ec3f8fb 100644
--- a/src/fetch/arxivfetcher.cpp
+++ b/src/fetch/arxivfetcher.cpp
@@ -226,6 +226,13 @@ Tellico::Data::EntryPtr ArxivFetcher::fetchEntry(uint uid_) {
}
}
}
+ TQRegExp versionRx(TQString::fromLatin1("v\\d+$"));
+ // if the original search was not for a versioned ID, remove it
+ if(m_key != ArxivID || !m_value.contains(versionRx)) {
+ TQString arxiv = entry->field(TQString::fromLatin1("arxiv"));
+ arxiv.remove(versionRx);
+ entry->setField(TQString::fromLatin1("arxiv"), arxiv);
+ }
return entry;
}
diff --git a/src/fetch/citebasefetcher.cpp b/src/fetch/citebasefetcher.cpp
index f5e8cd6..2b5a8db 100644
--- a/src/fetch/citebasefetcher.cpp
+++ b/src/fetch/citebasefetcher.cpp
@@ -163,7 +163,15 @@ void CitebaseFetcher::slotComplete(TDEIO::Job* job_) {
}
Tellico::Data::EntryPtr CitebaseFetcher::fetchEntry(uint uid_) {
- return m_entries[uid_];
+ Data::EntryPtr entry = m_entries[uid_];
+ TQRegExp versionRx(TQString::fromLatin1("v\\d+$"));
+ // if the original search was not for a versioned ID, remove it
+ if(m_key != ArxivID || !m_value.contains(versionRx)) {
+ TQString arxiv = entry->field(TQString::fromLatin1("arxiv"));
+ arxiv.remove(versionRx);
+ entry->setField(TQString::fromLatin1("arxiv"), arxiv);
+ }
+ return entry;
}
KURL CitebaseFetcher::searchURL(FetchKey key_, const TQString& value_) const {
diff --git a/src/fetch/entrezfetcher.cpp b/src/fetch/entrezfetcher.cpp
index 07066b8..b1d2789 100644
--- a/src/fetch/entrezfetcher.cpp
+++ b/src/fetch/entrezfetcher.cpp
@@ -34,7 +34,7 @@
//#define ENTREZ_TEST
namespace {
- static const int ENTREZ_MAX_RETURNS_TOTAL = 25;
+ static const size_t ENTREZ_MAX_RETURNS_TOTAL = 25;
static const char* ENTREZ_BASE_URL = "http://eutils.ncbi.nlm.nih.gov/entrez/eutils/";
static const char* ENTREZ_SEARCH_CGI = "esearch.fcgi";
static const char* ENTREZ_SUMMARY_CGI = "esummary.fcgi";
diff --git a/src/fetch/entrezfetcher.h b/src/fetch/entrezfetcher.h
index 87e13ae..7a9a0a1 100644
--- a/src/fetch/entrezfetcher.h
+++ b/src/fetch/entrezfetcher.h
@@ -92,8 +92,8 @@ private:
XSLTHandler* m_xsltHandler;
TQString m_dbname;
- int m_start;
- int m_total;
+ size_t m_start;
+ size_t m_total;
TQByteArray m_data;
TQMap<int, Data::EntryPtr> m_entries; // map from search result id to entry
diff --git a/src/fetch/googlescholarfetcher.cpp b/src/fetch/googlescholarfetcher.cpp
index 19e69c6..8ac7d4d 100644
--- a/src/fetch/googlescholarfetcher.cpp
+++ b/src/fetch/googlescholarfetcher.cpp
@@ -28,7 +28,7 @@
#include <tqlayout.h>
namespace {
- static const int GOOGLE_MAX_RETURNS_TOTAL = 20;
+ static const size_t GOOGLE_MAX_RETURNS_TOTAL = 20;
static const char* SCHOLAR_BASE_URL = "http://scholar.google.com/scholar";
}
@@ -157,7 +157,7 @@ void GoogleScholarFetcher::slotComplete(TDEIO::Job* job_) {
TQString text = TQString::fromUtf8(m_data, m_data.size());
TQString bibtex;
- int count = 0;
+ size_t count = 0;
for(int pos = text.find(m_bibtexRx); count < m_limit && pos > -1; pos = text.find(m_bibtexRx, pos+m_bibtexRx.matchedLength()), ++count) {
KURL bibtexUrl(TQString::fromLatin1(SCHOLAR_BASE_URL), m_bibtexRx.cap(1));
// myDebug() << bibtexUrl << endl;
diff --git a/src/fetch/googlescholarfetcher.h b/src/fetch/googlescholarfetcher.h
index 8ef91da..5c0b8a1 100644
--- a/src/fetch/googlescholarfetcher.h
+++ b/src/fetch/googlescholarfetcher.h
@@ -83,9 +83,9 @@ private slots:
private:
void doSearch();
- int m_limit;
- int m_start;
- int m_total;
+ size_t m_limit;
+ size_t m_start;
+ size_t m_total;
TQByteArray m_data;
TQMap<int, Data::EntryPtr> m_entries;
diff --git a/src/fetch/hmac_sha2.c b/src/fetch/hmac_sha2.c
new file mode 100644
index 0000000..dd7c24a
--- /dev/null
+++ b/src/fetch/hmac_sha2.c
@@ -0,0 +1,544 @@
+/*-
+ * HMAC-SHA-224/256/384/512 implementation
+ * Last update: 06/15/2005
+ * Issue date: 06/15/2005
+ *
+ * Copyright (C) 2005 Olivier Gay <[email protected]>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <string.h>
+
+#include "hmac_sha2.h"
+
+/* HMAC-SHA-224 functions */
+
+void hmac_sha224_init(hmac_sha224_ctx *ctx, unsigned char *key,
+ unsigned int key_size)
+{
+ unsigned int fill;
+ unsigned int num;
+
+ unsigned char *key_used;
+ unsigned char key_temp[SHA224_DIGEST_SIZE];
+ int i;
+
+ if (key_size == SHA224_BLOCK_SIZE) {
+ key_used = key;
+ num = SHA224_BLOCK_SIZE;
+ } else {
+ if (key_size > SHA224_BLOCK_SIZE){
+ key_used = key_temp;
+ num = SHA224_DIGEST_SIZE;
+ sha224(key, key_size, key_used);
+ } else { /* key_size > SHA224_BLOCK_SIZE */
+ key_used = key;
+ num = key_size;
+ }
+ fill = SHA224_BLOCK_SIZE - num;
+
+ memset(ctx->block_ipad + num, 0x36, fill);
+ memset(ctx->block_opad + num, 0x5c, fill);
+ }
+
+ for (i = 0; i < num; i++) {
+ ctx->block_ipad[i] = key_used[i] ^ 0x36;
+ ctx->block_opad[i] = key_used[i] ^ 0x5c;
+ }
+
+ sha224_init(&ctx->ctx_inside);
+ sha224_update(&ctx->ctx_inside, ctx->block_ipad, SHA224_BLOCK_SIZE);
+
+ sha224_init(&ctx->ctx_outside);
+ sha224_update(&ctx->ctx_outside, ctx->block_opad,
+ SHA224_BLOCK_SIZE);
+
+ /* for hmac_reinit */
+ memcpy(&ctx->ctx_inside_reinit, &ctx->ctx_inside,
+ sizeof(sha224_ctx));
+ memcpy(&ctx->ctx_outside_reinit, &ctx->ctx_outside,
+ sizeof(sha224_ctx));
+}
+
+void hmac_sha224_reinit(hmac_sha224_ctx *ctx)
+{
+ memcpy(&ctx->ctx_inside, &ctx->ctx_inside_reinit,
+ sizeof(sha224_ctx));
+ memcpy(&ctx->ctx_outside, &ctx->ctx_outside_reinit,
+ sizeof(sha224_ctx));
+}
+
+void hmac_sha224_update(hmac_sha224_ctx *ctx, unsigned char *message,
+ unsigned int message_len)
+{
+ sha224_update(&ctx->ctx_inside, message, message_len);
+}
+
+void hmac_sha224_final(hmac_sha224_ctx *ctx, unsigned char *mac,
+ unsigned int mac_size)
+{
+ unsigned char digest_inside[SHA224_DIGEST_SIZE];
+ unsigned char mac_temp[SHA224_DIGEST_SIZE];
+
+ sha224_final(&ctx->ctx_inside, digest_inside);
+ sha224_update(&ctx->ctx_outside, digest_inside, SHA224_DIGEST_SIZE);
+ sha224_final(&ctx->ctx_outside, mac_temp);
+ memcpy(mac, mac_temp, mac_size);
+}
+
+void hmac_sha224(unsigned char *key, unsigned int key_size,
+ unsigned char *message, unsigned int message_len,
+ unsigned char *mac, unsigned mac_size)
+{
+ hmac_sha224_ctx ctx;
+
+ hmac_sha224_init(&ctx, key, key_size);
+ hmac_sha224_update(&ctx, message, message_len);
+ hmac_sha224_final(&ctx, mac, mac_size);
+}
+
+/* HMAC-SHA-256 functions */
+
+void hmac_sha256_init(hmac_sha256_ctx *ctx, unsigned char *key,
+ unsigned int key_size)
+{
+ unsigned int fill;
+ unsigned int num;
+
+ unsigned char *key_used;
+ unsigned char key_temp[SHA256_DIGEST_SIZE];
+ int i;
+
+ if (key_size == SHA256_BLOCK_SIZE) {
+ key_used = key;
+ num = SHA256_BLOCK_SIZE;
+ } else {
+ if (key_size > SHA256_BLOCK_SIZE){
+ key_used = key_temp;
+ num = SHA256_DIGEST_SIZE;
+ sha256(key, key_size, key_used);
+ } else { /* key_size > SHA256_BLOCK_SIZE */
+ key_used = key;
+ num = key_size;
+ }
+ fill = SHA256_BLOCK_SIZE - num;
+
+ memset(ctx->block_ipad + num, 0x36, fill);
+ memset(ctx->block_opad + num, 0x5c, fill);
+ }
+
+ for (i = 0; i < num; i++) {
+ ctx->block_ipad[i] = key_used[i] ^ 0x36;
+ ctx->block_opad[i] = key_used[i] ^ 0x5c;
+ }
+
+ sha256_init(&ctx->ctx_inside);
+ sha256_update(&ctx->ctx_inside, ctx->block_ipad, SHA256_BLOCK_SIZE);
+
+ sha256_init(&ctx->ctx_outside);
+ sha256_update(&ctx->ctx_outside, ctx->block_opad,
+ SHA256_BLOCK_SIZE);
+
+ /* for hmac_reinit */
+ memcpy(&ctx->ctx_inside_reinit, &ctx->ctx_inside,
+ sizeof(sha256_ctx));
+ memcpy(&ctx->ctx_outside_reinit, &ctx->ctx_outside,
+ sizeof(sha256_ctx));
+}
+
+void hmac_sha256_reinit(hmac_sha256_ctx *ctx)
+{
+ memcpy(&ctx->ctx_inside, &ctx->ctx_inside_reinit,
+ sizeof(sha256_ctx));
+ memcpy(&ctx->ctx_outside, &ctx->ctx_outside_reinit,
+ sizeof(sha256_ctx));
+}
+
+void hmac_sha256_update(hmac_sha256_ctx *ctx, unsigned char *message,
+ unsigned int message_len)
+{
+ sha256_update(&ctx->ctx_inside, message, message_len);
+}
+
+void hmac_sha256_final(hmac_sha256_ctx *ctx, unsigned char *mac,
+ unsigned int mac_size)
+{
+ unsigned char digest_inside[SHA256_DIGEST_SIZE];
+ unsigned char mac_temp[SHA256_DIGEST_SIZE];
+
+ sha256_final(&ctx->ctx_inside, digest_inside);
+ sha256_update(&ctx->ctx_outside, digest_inside, SHA256_DIGEST_SIZE);
+ sha256_final(&ctx->ctx_outside, mac_temp);
+ memcpy(mac, mac_temp, mac_size);
+}
+
+void hmac_sha256(unsigned char *key, unsigned int key_size,
+ unsigned char *message, unsigned int message_len,
+ unsigned char *mac, unsigned mac_size)
+{
+ hmac_sha256_ctx ctx;
+
+ hmac_sha256_init(&ctx, key, key_size);
+ hmac_sha256_update(&ctx, message, message_len);
+ hmac_sha256_final(&ctx, mac, mac_size);
+}
+
+/* HMAC-SHA-384 functions */
+
+void hmac_sha384_init(hmac_sha384_ctx *ctx, unsigned char *key,
+ unsigned int key_size)
+{
+ unsigned int fill;
+ unsigned int num;
+
+ unsigned char *key_used;
+ unsigned char key_temp[SHA384_DIGEST_SIZE];
+ int i;
+
+ if (key_size == SHA384_BLOCK_SIZE) {
+ key_used = key;
+ num = SHA384_BLOCK_SIZE;
+ } else {
+ if (key_size > SHA384_BLOCK_SIZE){
+ key_used = key_temp;
+ num = SHA384_DIGEST_SIZE;
+ sha384(key, key_size, key_used);
+ } else { /* key_size > SHA384_BLOCK_SIZE */
+ key_used = key;
+ num = key_size;
+ }
+ fill = SHA384_BLOCK_SIZE - num;
+
+ memset(ctx->block_ipad + num, 0x36, fill);
+ memset(ctx->block_opad + num, 0x5c, fill);
+ }
+
+ for (i = 0; i < num; i++) {
+ ctx->block_ipad[i] = key_used[i] ^ 0x36;
+ ctx->block_opad[i] = key_used[i] ^ 0x5c;
+ }
+
+ sha384_init(&ctx->ctx_inside);
+ sha384_update(&ctx->ctx_inside, ctx->block_ipad, SHA384_BLOCK_SIZE);
+
+ sha384_init(&ctx->ctx_outside);
+ sha384_update(&ctx->ctx_outside, ctx->block_opad,
+ SHA384_BLOCK_SIZE);
+
+ /* for hmac_reinit */
+ memcpy(&ctx->ctx_inside_reinit, &ctx->ctx_inside,
+ sizeof(sha384_ctx));
+ memcpy(&ctx->ctx_outside_reinit, &ctx->ctx_outside,
+ sizeof(sha384_ctx));
+}
+
+void hmac_sha384_reinit(hmac_sha384_ctx *ctx)
+{
+ memcpy(&ctx->ctx_inside, &ctx->ctx_inside_reinit,
+ sizeof(sha384_ctx));
+ memcpy(&ctx->ctx_outside, &ctx->ctx_outside_reinit,
+ sizeof(sha384_ctx));
+}
+
+void hmac_sha384_update(hmac_sha384_ctx *ctx, unsigned char *message,
+ unsigned int message_len)
+{
+ sha384_update(&ctx->ctx_inside, message, message_len);
+}
+
+void hmac_sha384_final(hmac_sha384_ctx *ctx, unsigned char *mac,
+ unsigned int mac_size)
+{
+ unsigned char digest_inside[SHA384_DIGEST_SIZE];
+ unsigned char mac_temp[SHA384_DIGEST_SIZE];
+
+ sha384_final(&ctx->ctx_inside, digest_inside);
+ sha384_update(&ctx->ctx_outside, digest_inside, SHA384_DIGEST_SIZE);
+ sha384_final(&ctx->ctx_outside, mac_temp);
+ memcpy(mac, mac_temp, mac_size);
+}
+
+void hmac_sha384(unsigned char *key, unsigned int key_size,
+ unsigned char *message, unsigned int message_len,
+ unsigned char *mac, unsigned mac_size)
+{
+ hmac_sha384_ctx ctx;
+
+ hmac_sha384_init(&ctx, key, key_size);
+ hmac_sha384_update(&ctx, message, message_len);
+ hmac_sha384_final(&ctx, mac, mac_size);
+}
+
+/* HMAC-SHA-512 functions */
+
+void hmac_sha512_init(hmac_sha512_ctx *ctx, unsigned char *key,
+ unsigned int key_size)
+{
+ unsigned int fill;
+ unsigned int num;
+
+ unsigned char *key_used;
+ unsigned char key_temp[SHA512_DIGEST_SIZE];
+ int i;
+
+ if (key_size == SHA512_BLOCK_SIZE) {
+ key_used = key;
+ num = SHA512_BLOCK_SIZE;
+ } else {
+ if (key_size > SHA512_BLOCK_SIZE){
+ key_used = key_temp;
+ num = SHA512_DIGEST_SIZE;
+ sha512(key, key_size, key_used);
+ } else { /* key_size > SHA512_BLOCK_SIZE */
+ key_used = key;
+ num = key_size;
+ }
+ fill = SHA512_BLOCK_SIZE - num;
+
+ memset(ctx->block_ipad + num, 0x36, fill);
+ memset(ctx->block_opad + num, 0x5c, fill);
+ }
+
+ for (i = 0; i < num; i++) {
+ ctx->block_ipad[i] = key_used[i] ^ 0x36;
+ ctx->block_opad[i] = key_used[i] ^ 0x5c;
+ }
+
+ sha512_init(&ctx->ctx_inside);
+ sha512_update(&ctx->ctx_inside, ctx->block_ipad, SHA512_BLOCK_SIZE);
+
+ sha512_init(&ctx->ctx_outside);
+ sha512_update(&ctx->ctx_outside, ctx->block_opad,
+ SHA512_BLOCK_SIZE);
+
+ /* for hmac_reinit */
+ memcpy(&ctx->ctx_inside_reinit, &ctx->ctx_inside,
+ sizeof(sha512_ctx));
+ memcpy(&ctx->ctx_outside_reinit, &ctx->ctx_outside,
+ sizeof(sha512_ctx));
+}
+
+void hmac_sha512_reinit(hmac_sha512_ctx *ctx)
+{
+ memcpy(&ctx->ctx_inside, &ctx->ctx_inside_reinit,
+ sizeof(sha512_ctx));
+ memcpy(&ctx->ctx_outside, &ctx->ctx_outside_reinit,
+ sizeof(sha512_ctx));
+}
+
+void hmac_sha512_update(hmac_sha512_ctx *ctx, unsigned char *message,
+ unsigned int message_len)
+{
+ sha512_update(&ctx->ctx_inside, message, message_len);
+}
+
+void hmac_sha512_final(hmac_sha512_ctx *ctx, unsigned char *mac,
+ unsigned int mac_size)
+{
+ unsigned char digest_inside[SHA512_DIGEST_SIZE];
+ unsigned char mac_temp[SHA512_DIGEST_SIZE];
+
+ sha512_final(&ctx->ctx_inside, digest_inside);
+ sha512_update(&ctx->ctx_outside, digest_inside, SHA512_DIGEST_SIZE);
+ sha512_final(&ctx->ctx_outside, mac_temp);
+ memcpy(mac, mac_temp, mac_size);
+}
+
+void hmac_sha512(unsigned char *key, unsigned int key_size,
+ unsigned char *message, unsigned int message_len,
+ unsigned char *mac, unsigned mac_size)
+{
+ hmac_sha512_ctx ctx;
+
+ hmac_sha512_init(&ctx, key, key_size);
+ hmac_sha512_update(&ctx, message, message_len);
+ hmac_sha512_final(&ctx, mac, mac_size);
+}
+
+#ifdef TEST_VECTORS
+
+/* IETF Validation tests */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+void test(unsigned char *vector, unsigned char *digest,
+ unsigned int digest_size)
+{
+ unsigned char output[2 * SHA512_DIGEST_SIZE + 1];
+ int i;
+
+ output[2 * digest_size] = '\0';
+
+ for (i = 0; i < digest_size ; i++) {
+ sprintf((char *) output + 2*i, "%02x", digest[i]);
+ }
+
+ printf("H: %s\n", output);
+ if (strcmp((char *) vector, (char *) output)) {
+ fprintf(stderr, "Test failed.\n");
+ exit(1);
+ }
+}
+
+int main()
+{
+ static unsigned char *vectors[] =
+ {
+ /* HMAC-SHA-224 */
+ "896fb1128abbdf196832107cd49df33f47b4b1169912ba4f53684b22",
+ "a30e01098bc6dbbf45690f3a7e9e6d0f8bbea2a39e6148008fd05e44",
+ "7fb3cb3588c6c1f6ffa9694d7d6ad2649365b0c1f65d69d1ec8333ea",
+ "6c11506874013cac6a2abc1bb382627cec6a90d86efc012de7afec5a",
+ "0e2aea68a90c8d37c988bcdb9fca6fa8",
+ "95e9a0db962095adaebe9b2d6f0dbce2d499f112f2d2b7273fa6870e",
+ "3a854166ac5d9f023f54d517d0b39dbd946770db9c2b95c9f6f565d1",
+ /* HMAC-SHA-256 */
+ "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7",
+ "5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843",
+ "773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe",
+ "82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b",
+ "a3b6167473100ee06e0c796c2955552b",
+ "60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54",
+ "9b09ffa71b942fcb27635fbcd5b0e944bfdc63644f0713938a7f51535c3a35e2",
+ /* HMAC-SHA-384 */
+ "afd03944d84895626b0825f4ab46907f15f9dadbe4101ec682aa034c7cebc59c"
+ "faea9ea9076ede7f4af152e8b2fa9cb6",
+ "af45d2e376484031617f78d2b58a6b1b9c7ef464f5a01b47e42ec3736322445e"
+ "8e2240ca5e69e2c78b3239ecfab21649",
+ "88062608d3e6ad8a0aa2ace014c8a86f0aa635d947ac9febe83ef4e55966144b"
+ "2a5ab39dc13814b94e3ab6e101a34f27",
+ "3e8a69b7783c25851933ab6290af6ca77a9981480850009cc5577c6e1f573b4e"
+ "6801dd23c4a7d679ccf8a386c674cffb",
+ "3abf34c3503b2a23a46efc619baef897",
+ "4ece084485813e9088d2c63a041bc5b44f9ef1012a2b588f3cd11f05033ac4c6"
+ "0c2ef6ab4030fe8296248df163f44952",
+ "6617178e941f020d351e2f254e8fd32c602420feb0b8fb9adccebb82461e99c5"
+ "a678cc31e799176d3860e6110c46523e",
+ /* HMAC-SHA-512 */
+ "87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cde"
+ "daa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854",
+ "164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea250554"
+ "9758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737",
+ "fa73b0089d56a284efb0f0756c890be9b1b5dbdd8ee81a3655f83e33b2279d39"
+ "bf3e848279a722c806b485a47e67c807b946a337bee8942674278859e13292fb",
+ "b0ba465637458c6990e5a8c5f61d4af7e576d97ff94b872de76f8050361ee3db"
+ "a91ca5c11aa25eb4d679275cc5788063a5f19741120c4f2de2adebeb10a298dd",
+ "415fad6271580a531d4179bc891d87a6",
+ "80b24263c7c1a3ebb71493c1dd7be8b49b46d1f41b4aeec1121b013783f8f352"
+ "6b56d037e05f2598bd0fd2215d6a1e5295e64f73f63f0aec8b915a985d786598",
+ "e37b6a775dc87dbaa4dfa9f96e5e3ffddebd71f8867289865df5a32d20cdc944"
+ "b6022cac3c4982b10d5eeb55c3e4de15134676fb6de0446065c97440fa8c6a58"
+ };
+
+ static unsigned char *messages[] =
+ {
+ "Hi There",
+ "what do ya want for nothing?",
+ NULL,
+ NULL,
+ "Test With Truncation",
+ "Test Using Larger Than Block-Size Key - Hash Key First",
+ "This is a test using a larger than block-size key "
+ "and a larger than block-size data. The key needs"
+ " to be hashed before being used by the HMAC algorithm."
+ };
+
+ unsigned char mac[SHA512_DIGEST_SIZE];
+ unsigned char *keys[7];
+ unsigned int keys_len[7] = {20, 4, 20, 25, 20, 131, 131};
+ unsigned int messages2and3_len = 50;
+ unsigned int mac_224_size, mac_256_size, mac_384_size, mac_512_size;
+ int i;
+
+ for (i = 0; i < 7; i++) {
+ keys[i] = malloc(keys_len[i]);
+ if (keys[i] == NULL) {
+ fprintf(stderr, "Can't allocate memory\n");
+ return 1;
+ }
+ }
+
+ memset(keys[0], 0x0b, keys_len[0]);
+ strcpy(keys[1], "Jefe");
+ memset(keys[2], 0xaa, keys_len[2]);
+ for (i = 0; i < keys_len[3]; i++)
+ keys[3][i] = (unsigned char) i + 1;
+ memset(keys[4], 0x0c, keys_len[4]);
+ memset(keys[5], 0xaa, keys_len[5]);
+ memset(keys[6], 0xaa, keys_len[6]);
+
+ messages[2] = malloc(messages2and3_len + 1);
+ messages[3] = malloc(messages2and3_len + 1);
+
+ if (messages[2] == NULL || messages[3] == NULL) {
+ fprintf(stderr, "Can't allocate memory\n");
+ return 1;
+ }
+
+ messages[2][messages2and3_len] = '\0';
+ messages[3][messages2and3_len] = '\0';
+
+ memset(messages[2], 0xdd, messages2and3_len);
+ memset(messages[3], 0xcd, messages2and3_len);
+
+ printf("HMAC-SHA-2 IETF Validation tests\n\n");
+
+ for (i = 0; i < 7; i++) {
+ if (i != 4) {
+ mac_224_size = SHA224_DIGEST_SIZE;
+ mac_256_size = SHA256_DIGEST_SIZE;
+ mac_384_size = SHA384_DIGEST_SIZE;
+ mac_512_size = SHA512_DIGEST_SIZE;
+ } else {
+ mac_224_size = 128 / 8; mac_256_size = 128 / 8;
+ mac_384_size = 128 / 8; mac_512_size = 128 / 8;
+ }
+
+ printf("Test %d:\n", i + 1);
+
+ hmac_sha224(keys[i], keys_len[i], messages[i], strlen(messages[i]),
+ mac, mac_224_size);
+ test(vectors[i], mac, mac_224_size );
+ hmac_sha256(keys[i], keys_len[i], messages[i], strlen(messages[i]),
+ mac, mac_256_size);
+ test(vectors[7 + i], mac, mac_256_size);
+ hmac_sha384(keys[i], keys_len[i], messages[i], strlen(messages[i]),
+ mac, mac_384_size);
+ test(vectors[14 + i], mac, mac_384_size);
+ hmac_sha512(keys[i], keys_len[i], messages[i], strlen(messages[i]),
+ mac, mac_512_size);
+ test(vectors[21 + i], mac, mac_512_size);
+ }
+
+ printf("All tests passed.\n");
+
+ return 0;
+}
+
+#endif /* TEST_VECTORS */
+
diff --git a/src/fetch/hmac_sha2.h b/src/fetch/hmac_sha2.h
new file mode 100644
index 0000000..f10fb49
--- /dev/null
+++ b/src/fetch/hmac_sha2.h
@@ -0,0 +1,140 @@
+/*-
+ * HMAC-SHA-224/256/384/512 implementation
+ * Last update: 06/15/2005
+ * Issue date: 06/15/2005
+ *
+ * Copyright (C) 2005 Olivier Gay <[email protected]>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef _HMAC_SHA2_H
+#define _HMAC_SHA2_H
+
+#include "sha2.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+ sha224_ctx ctx_inside;
+ sha224_ctx ctx_outside;
+
+ /* for hmac_reinit */
+ sha224_ctx ctx_inside_reinit;
+ sha224_ctx ctx_outside_reinit;
+
+ unsigned char block_ipad[SHA224_BLOCK_SIZE];
+ unsigned char block_opad[SHA224_BLOCK_SIZE];
+} hmac_sha224_ctx;
+
+typedef struct {
+ sha256_ctx ctx_inside;
+ sha256_ctx ctx_outside;
+
+ /* for hmac_reinit */
+ sha256_ctx ctx_inside_reinit;
+ sha256_ctx ctx_outside_reinit;
+
+ unsigned char block_ipad[SHA256_BLOCK_SIZE];
+ unsigned char block_opad[SHA256_BLOCK_SIZE];
+} hmac_sha256_ctx;
+
+typedef struct {
+ sha384_ctx ctx_inside;
+ sha384_ctx ctx_outside;
+
+ /* for hmac_reinit */
+ sha384_ctx ctx_inside_reinit;
+ sha384_ctx ctx_outside_reinit;
+
+ unsigned char block_ipad[SHA384_BLOCK_SIZE];
+ unsigned char block_opad[SHA384_BLOCK_SIZE];
+} hmac_sha384_ctx;
+
+typedef struct {
+ sha512_ctx ctx_inside;
+ sha512_ctx ctx_outside;
+
+ /* for hmac_reinit */
+ sha512_ctx ctx_inside_reinit;
+ sha512_ctx ctx_outside_reinit;
+
+ unsigned char block_ipad[SHA512_BLOCK_SIZE];
+ unsigned char block_opad[SHA512_BLOCK_SIZE];
+} hmac_sha512_ctx;
+
+void hmac_sha224_init(hmac_sha224_ctx *ctx, unsigned char *key,
+ unsigned int key_size);
+void hmac_sha224_reinit(hmac_sha224_ctx *ctx);
+void hmac_sha224_update(hmac_sha224_ctx *ctx, unsigned char *message,
+ unsigned int message_len);
+void hmac_sha224_final(hmac_sha224_ctx *ctx, unsigned char *mac,
+ unsigned int mac_size);
+void hmac_sha224(unsigned char *key, unsigned int key_size,
+ unsigned char *message, unsigned int message_len,
+ unsigned char *mac, unsigned mac_size);
+
+void hmac_sha256_init(hmac_sha256_ctx *ctx, unsigned char *key,
+ unsigned int key_size);
+void hmac_sha256_reinit(hmac_sha256_ctx *ctx);
+void hmac_sha256_update(hmac_sha256_ctx *ctx, unsigned char *message,
+ unsigned int message_len);
+void hmac_sha256_final(hmac_sha256_ctx *ctx, unsigned char *mac,
+ unsigned int mac_size);
+void hmac_sha256(unsigned char *key, unsigned int key_size,
+ unsigned char *message, unsigned int message_len,
+ unsigned char *mac, unsigned mac_size);
+
+void hmac_sha384_init(hmac_sha384_ctx *ctx, unsigned char *key,
+ unsigned int key_size);
+void hmac_sha384_reinit(hmac_sha384_ctx *ctx);
+void hmac_sha384_update(hmac_sha384_ctx *ctx, unsigned char *message,
+ unsigned int message_len);
+void hmac_sha384_final(hmac_sha384_ctx *ctx, unsigned char *mac,
+ unsigned int mac_size);
+void hmac_sha384(unsigned char *key, unsigned int key_size,
+ unsigned char *message, unsigned int message_len,
+ unsigned char *mac, unsigned mac_size);
+
+void hmac_sha512_init(hmac_sha512_ctx *ctx, unsigned char *key,
+ unsigned int key_size);
+void hmac_sha512_reinit(hmac_sha512_ctx *ctx);
+void hmac_sha512_update(hmac_sha512_ctx *ctx, unsigned char *message,
+ unsigned int message_len);
+void hmac_sha512_final(hmac_sha512_ctx *ctx, unsigned char *mac,
+ unsigned int mac_size);
+void hmac_sha512(unsigned char *key, unsigned int key_size,
+ unsigned char *message, unsigned int message_len,
+ unsigned char *mac, unsigned mac_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ! _HMAC_SHA2_H */
+
diff --git a/src/fetch/ibsfetcher.cpp b/src/fetch/ibsfetcher.cpp
index e715e5b..404bc1c 100644
--- a/src/fetch/ibsfetcher.cpp
+++ b/src/fetch/ibsfetcher.cpp
@@ -156,7 +156,8 @@ void IBSFetcher::slotComplete(TDEIO::Job* job_) {
TQString s = Tellico::decodeHTML(TQString(m_data));
// really specific regexp
- TQString pat = TQString::fromLatin1("http://www.internetbookshop.it/code/");
+ //TQString pat = TQString::fromLatin1("http://www.internetbookshop.it/code/");
+ TQString pat = TQString::fromLatin1("http://www.ibs.it/code/");
TQRegExp anchorRx(TQString::fromLatin1("<a\\s+[^>]*href\\s*=\\s*[\"'](") +
TQRegExp::escape(pat) +
TQString::fromLatin1("[^\"]*)\"[^>]*><b>([^<]+)<"), false);
diff --git a/src/fetch/imdbfetcher.cpp b/src/fetch/imdbfetcher.cpp
index a9c0dd0..36b19a1 100644
--- a/src/fetch/imdbfetcher.cpp
+++ b/src/fetch/imdbfetcher.cpp
@@ -799,7 +799,7 @@ void IMDBFetcher::doPlot(const TQString& str_, Data::EntryPtr entry_, const KURL
TQString thisPlot;
// match until next opening tag
- TQRegExp plotRx(TQString::fromLatin1("plot (?:outline|summary):(.*)<[^/].*</"), false);
+ TQRegExp plotRx(TQString::fromLatin1("plot\\s*(?:outline|summary)?:(.*)<[^/].*</"), false);
plotRx.setMinimal(true);
TQRegExp plotURLRx(TQString::fromLatin1("<a\\s+.*href\\s*=\\s*\".*/title/.*/plotsummary\""), false);
plotURLRx.setMinimal(true);
@@ -828,6 +828,8 @@ void IMDBFetcher::doPlot(const TQString& str_, Data::EntryPtr entry_, const KURL
if(plotRx.search(plotPage) > -1) {
TQString userPlot = plotRx.cap(1);
userPlot.remove(*s_tagRx); // remove HTML tags
+ // remove last little "written by", if there
+ userPlot.remove(TQRegExp(TQString::fromLatin1("\\s*written by.*$"), false));
entry_->setField(TQString::fromLatin1("plot"), Tellico::decodeHTML(userPlot));
}
}
diff --git a/src/fetch/sha2.c b/src/fetch/sha2.c
new file mode 100644
index 0000000..a32427e
--- /dev/null
+++ b/src/fetch/sha2.c
@@ -0,0 +1,950 @@
+/*
+ * FIPS 180-2 SHA-224/256/384/512 implementation
+ * Last update: 02/02/2007
+ * Issue date: 04/30/2005
+ *
+ * Copyright (C) 2005, 2007 Olivier Gay <[email protected]>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#if 0
+#define UNROLL_LOOPS /* Enable loops unrolling */
+#endif
+
+#include <string.h>
+
+#include "sha2.h"
+
+#define SHFR(x, n) (x >> n)
+#define ROTR(x, n) ((x >> n) | (x << ((sizeof(x) << 3) - n)))
+#define ROTL(x, n) ((x << n) | (x >> ((sizeof(x) << 3) - n)))
+#define CH(x, y, z) ((x & y) ^ (~x & z))
+#define MAJ(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
+
+#define SHA256_F1(x) (ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22))
+#define SHA256_F2(x) (ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25))
+#define SHA256_F3(x) (ROTR(x, 7) ^ ROTR(x, 18) ^ SHFR(x, 3))
+#define SHA256_F4(x) (ROTR(x, 17) ^ ROTR(x, 19) ^ SHFR(x, 10))
+
+#define SHA512_F1(x) (ROTR(x, 28) ^ ROTR(x, 34) ^ ROTR(x, 39))
+#define SHA512_F2(x) (ROTR(x, 14) ^ ROTR(x, 18) ^ ROTR(x, 41))
+#define SHA512_F3(x) (ROTR(x, 1) ^ ROTR(x, 8) ^ SHFR(x, 7))
+#define SHA512_F4(x) (ROTR(x, 19) ^ ROTR(x, 61) ^ SHFR(x, 6))
+
+#define UNPACK32(x, str) \
+{ \
+ *((str) + 3) = (uint8) ((x) ); \
+ *((str) + 2) = (uint8) ((x) >> 8); \
+ *((str) + 1) = (uint8) ((x) >> 16); \
+ *((str) + 0) = (uint8) ((x) >> 24); \
+}
+
+#define PACK32(str, x) \
+{ \
+ *(x) = ((uint32) *((str) + 3) ) \
+ | ((uint32) *((str) + 2) << 8) \
+ | ((uint32) *((str) + 1) << 16) \
+ | ((uint32) *((str) + 0) << 24); \
+}
+
+#define UNPACK64(x, str) \
+{ \
+ *((str) + 7) = (uint8) ((x) ); \
+ *((str) + 6) = (uint8) ((x) >> 8); \
+ *((str) + 5) = (uint8) ((x) >> 16); \
+ *((str) + 4) = (uint8) ((x) >> 24); \
+ *((str) + 3) = (uint8) ((x) >> 32); \
+ *((str) + 2) = (uint8) ((x) >> 40); \
+ *((str) + 1) = (uint8) ((x) >> 48); \
+ *((str) + 0) = (uint8) ((x) >> 56); \
+}
+
+#define PACK64(str, x) \
+{ \
+ *(x) = ((uint64) *((str) + 7) ) \
+ | ((uint64) *((str) + 6) << 8) \
+ | ((uint64) *((str) + 5) << 16) \
+ | ((uint64) *((str) + 4) << 24) \
+ | ((uint64) *((str) + 3) << 32) \
+ | ((uint64) *((str) + 2) << 40) \
+ | ((uint64) *((str) + 1) << 48) \
+ | ((uint64) *((str) + 0) << 56); \
+}
+
+/* Macros used for loops unrolling */
+
+#define SHA256_SCR(i) \
+{ \
+ w[i] = SHA256_F4(w[i - 2]) + w[i - 7] \
+ + SHA256_F3(w[i - 15]) + w[i - 16]; \
+}
+
+#define SHA512_SCR(i) \
+{ \
+ w[i] = SHA512_F4(w[i - 2]) + w[i - 7] \
+ + SHA512_F3(w[i - 15]) + w[i - 16]; \
+}
+
+#define SHA256_EXP(a, b, c, d, e, f, g, h, j) \
+{ \
+ t1 = wv[h] + SHA256_F2(wv[e]) + CH(wv[e], wv[f], wv[g]) \
+ + sha256_k[j] + w[j]; \
+ t2 = SHA256_F1(wv[a]) + MAJ(wv[a], wv[b], wv[c]); \
+ wv[d] += t1; \
+ wv[h] = t1 + t2; \
+}
+
+#define SHA512_EXP(a, b, c, d, e, f, g ,h, j) \
+{ \
+ t1 = wv[h] + SHA512_F2(wv[e]) + CH(wv[e], wv[f], wv[g]) \
+ + sha512_k[j] + w[j]; \
+ t2 = SHA512_F1(wv[a]) + MAJ(wv[a], wv[b], wv[c]); \
+ wv[d] += t1; \
+ wv[h] = t1 + t2; \
+}
+
+uint32 sha224_h0[8] =
+ {0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
+ 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4};
+
+uint32 sha256_h0[8] =
+ {0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
+ 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19};
+
+uint64 sha384_h0[8] =
+ {0xcbbb9d5dc1059ed8ULL, 0x629a292a367cd507ULL,
+ 0x9159015a3070dd17ULL, 0x152fecd8f70e5939ULL,
+ 0x67332667ffc00b31ULL, 0x8eb44a8768581511ULL,
+ 0xdb0c2e0d64f98fa7ULL, 0x47b5481dbefa4fa4ULL};
+
+uint64 sha512_h0[8] =
+ {0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL,
+ 0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL,
+ 0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL,
+ 0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL};
+
+uint32 sha256_k[64] =
+ {0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
+ 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
+ 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
+ 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
+ 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
+ 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
+ 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
+ 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
+ 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2};
+
+uint64 sha512_k[80] =
+ {0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL,
+ 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL,
+ 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
+ 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL,
+ 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL,
+ 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
+ 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL,
+ 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL,
+ 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
+ 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL,
+ 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL,
+ 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
+ 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL,
+ 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL,
+ 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
+ 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL,
+ 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL,
+ 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
+ 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL,
+ 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL,
+ 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
+ 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL,
+ 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL,
+ 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
+ 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL,
+ 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL,
+ 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
+ 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL,
+ 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL,
+ 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
+ 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL,
+ 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL,
+ 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
+ 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL,
+ 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL,
+ 0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
+ 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL,
+ 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL,
+ 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
+ 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL};
+
+/* SHA-256 functions */
+
+void sha256_transf(sha256_ctx *ctx, const unsigned char *message,
+ unsigned int block_nb)
+{
+ uint32 w[64];
+ uint32 wv[8];
+ uint32 t1, t2;
+ const unsigned char *sub_block;
+ int i;
+
+#ifndef UNROLL_LOOPS
+ int j;
+#endif
+
+ for (i = 0; i < (int) block_nb; i++) {
+ sub_block = message + (i << 6);
+
+#ifndef UNROLL_LOOPS
+ for (j = 0; j < 16; j++) {
+ PACK32(&sub_block[j << 2], &w[j]);
+ }
+
+ for (j = 16; j < 64; j++) {
+ SHA256_SCR(j);
+ }
+
+ for (j = 0; j < 8; j++) {
+ wv[j] = ctx->h[j];
+ }
+
+ for (j = 0; j < 64; j++) {
+ t1 = wv[7] + SHA256_F2(wv[4]) + CH(wv[4], wv[5], wv[6])
+ + sha256_k[j] + w[j];
+ t2 = SHA256_F1(wv[0]) + MAJ(wv[0], wv[1], wv[2]);
+ wv[7] = wv[6];
+ wv[6] = wv[5];
+ wv[5] = wv[4];
+ wv[4] = wv[3] + t1;
+ wv[3] = wv[2];
+ wv[2] = wv[1];
+ wv[1] = wv[0];
+ wv[0] = t1 + t2;
+ }
+
+ for (j = 0; j < 8; j++) {
+ ctx->h[j] += wv[j];
+ }
+#else
+ PACK32(&sub_block[ 0], &w[ 0]); PACK32(&sub_block[ 4], &w[ 1]);
+ PACK32(&sub_block[ 8], &w[ 2]); PACK32(&sub_block[12], &w[ 3]);
+ PACK32(&sub_block[16], &w[ 4]); PACK32(&sub_block[20], &w[ 5]);
+ PACK32(&sub_block[24], &w[ 6]); PACK32(&sub_block[28], &w[ 7]);
+ PACK32(&sub_block[32], &w[ 8]); PACK32(&sub_block[36], &w[ 9]);
+ PACK32(&sub_block[40], &w[10]); PACK32(&sub_block[44], &w[11]);
+ PACK32(&sub_block[48], &w[12]); PACK32(&sub_block[52], &w[13]);
+ PACK32(&sub_block[56], &w[14]); PACK32(&sub_block[60], &w[15]);
+
+ SHA256_SCR(16); SHA256_SCR(17); SHA256_SCR(18); SHA256_SCR(19);
+ SHA256_SCR(20); SHA256_SCR(21); SHA256_SCR(22); SHA256_SCR(23);
+ SHA256_SCR(24); SHA256_SCR(25); SHA256_SCR(26); SHA256_SCR(27);
+ SHA256_SCR(28); SHA256_SCR(29); SHA256_SCR(30); SHA256_SCR(31);
+ SHA256_SCR(32); SHA256_SCR(33); SHA256_SCR(34); SHA256_SCR(35);
+ SHA256_SCR(36); SHA256_SCR(37); SHA256_SCR(38); SHA256_SCR(39);
+ SHA256_SCR(40); SHA256_SCR(41); SHA256_SCR(42); SHA256_SCR(43);
+ SHA256_SCR(44); SHA256_SCR(45); SHA256_SCR(46); SHA256_SCR(47);
+ SHA256_SCR(48); SHA256_SCR(49); SHA256_SCR(50); SHA256_SCR(51);
+ SHA256_SCR(52); SHA256_SCR(53); SHA256_SCR(54); SHA256_SCR(55);
+ SHA256_SCR(56); SHA256_SCR(57); SHA256_SCR(58); SHA256_SCR(59);
+ SHA256_SCR(60); SHA256_SCR(61); SHA256_SCR(62); SHA256_SCR(63);
+
+ wv[0] = ctx->h[0]; wv[1] = ctx->h[1];
+ wv[2] = ctx->h[2]; wv[3] = ctx->h[3];
+ wv[4] = ctx->h[4]; wv[5] = ctx->h[5];
+ wv[6] = ctx->h[6]; wv[7] = ctx->h[7];
+
+ SHA256_EXP(0,1,2,3,4,5,6,7, 0); SHA256_EXP(7,0,1,2,3,4,5,6, 1);
+ SHA256_EXP(6,7,0,1,2,3,4,5, 2); SHA256_EXP(5,6,7,0,1,2,3,4, 3);
+ SHA256_EXP(4,5,6,7,0,1,2,3, 4); SHA256_EXP(3,4,5,6,7,0,1,2, 5);
+ SHA256_EXP(2,3,4,5,6,7,0,1, 6); SHA256_EXP(1,2,3,4,5,6,7,0, 7);
+ SHA256_EXP(0,1,2,3,4,5,6,7, 8); SHA256_EXP(7,0,1,2,3,4,5,6, 9);
+ SHA256_EXP(6,7,0,1,2,3,4,5,10); SHA256_EXP(5,6,7,0,1,2,3,4,11);
+ SHA256_EXP(4,5,6,7,0,1,2,3,12); SHA256_EXP(3,4,5,6,7,0,1,2,13);
+ SHA256_EXP(2,3,4,5,6,7,0,1,14); SHA256_EXP(1,2,3,4,5,6,7,0,15);
+ SHA256_EXP(0,1,2,3,4,5,6,7,16); SHA256_EXP(7,0,1,2,3,4,5,6,17);
+ SHA256_EXP(6,7,0,1,2,3,4,5,18); SHA256_EXP(5,6,7,0,1,2,3,4,19);
+ SHA256_EXP(4,5,6,7,0,1,2,3,20); SHA256_EXP(3,4,5,6,7,0,1,2,21);
+ SHA256_EXP(2,3,4,5,6,7,0,1,22); SHA256_EXP(1,2,3,4,5,6,7,0,23);
+ SHA256_EXP(0,1,2,3,4,5,6,7,24); SHA256_EXP(7,0,1,2,3,4,5,6,25);
+ SHA256_EXP(6,7,0,1,2,3,4,5,26); SHA256_EXP(5,6,7,0,1,2,3,4,27);
+ SHA256_EXP(4,5,6,7,0,1,2,3,28); SHA256_EXP(3,4,5,6,7,0,1,2,29);
+ SHA256_EXP(2,3,4,5,6,7,0,1,30); SHA256_EXP(1,2,3,4,5,6,7,0,31);
+ SHA256_EXP(0,1,2,3,4,5,6,7,32); SHA256_EXP(7,0,1,2,3,4,5,6,33);
+ SHA256_EXP(6,7,0,1,2,3,4,5,34); SHA256_EXP(5,6,7,0,1,2,3,4,35);
+ SHA256_EXP(4,5,6,7,0,1,2,3,36); SHA256_EXP(3,4,5,6,7,0,1,2,37);
+ SHA256_EXP(2,3,4,5,6,7,0,1,38); SHA256_EXP(1,2,3,4,5,6,7,0,39);
+ SHA256_EXP(0,1,2,3,4,5,6,7,40); SHA256_EXP(7,0,1,2,3,4,5,6,41);
+ SHA256_EXP(6,7,0,1,2,3,4,5,42); SHA256_EXP(5,6,7,0,1,2,3,4,43);
+ SHA256_EXP(4,5,6,7,0,1,2,3,44); SHA256_EXP(3,4,5,6,7,0,1,2,45);
+ SHA256_EXP(2,3,4,5,6,7,0,1,46); SHA256_EXP(1,2,3,4,5,6,7,0,47);
+ SHA256_EXP(0,1,2,3,4,5,6,7,48); SHA256_EXP(7,0,1,2,3,4,5,6,49);
+ SHA256_EXP(6,7,0,1,2,3,4,5,50); SHA256_EXP(5,6,7,0,1,2,3,4,51);
+ SHA256_EXP(4,5,6,7,0,1,2,3,52); SHA256_EXP(3,4,5,6,7,0,1,2,53);
+ SHA256_EXP(2,3,4,5,6,7,0,1,54); SHA256_EXP(1,2,3,4,5,6,7,0,55);
+ SHA256_EXP(0,1,2,3,4,5,6,7,56); SHA256_EXP(7,0,1,2,3,4,5,6,57);
+ SHA256_EXP(6,7,0,1,2,3,4,5,58); SHA256_EXP(5,6,7,0,1,2,3,4,59);
+ SHA256_EXP(4,5,6,7,0,1,2,3,60); SHA256_EXP(3,4,5,6,7,0,1,2,61);
+ SHA256_EXP(2,3,4,5,6,7,0,1,62); SHA256_EXP(1,2,3,4,5,6,7,0,63);
+
+ ctx->h[0] += wv[0]; ctx->h[1] += wv[1];
+ ctx->h[2] += wv[2]; ctx->h[3] += wv[3];
+ ctx->h[4] += wv[4]; ctx->h[5] += wv[5];
+ ctx->h[6] += wv[6]; ctx->h[7] += wv[7];
+#endif /* !UNROLL_LOOPS */
+ }
+}
+
+void sha256(const unsigned char *message, unsigned int len, unsigned char *digest)
+{
+ sha256_ctx ctx;
+
+ sha256_init(&ctx);
+ sha256_update(&ctx, message, len);
+ sha256_final(&ctx, digest);
+}
+
+void sha256_init(sha256_ctx *ctx)
+{
+#ifndef UNROLL_LOOPS
+ int i;
+ for (i = 0; i < 8; i++) {
+ ctx->h[i] = sha256_h0[i];
+ }
+#else
+ ctx->h[0] = sha256_h0[0]; ctx->h[1] = sha256_h0[1];
+ ctx->h[2] = sha256_h0[2]; ctx->h[3] = sha256_h0[3];
+ ctx->h[4] = sha256_h0[4]; ctx->h[5] = sha256_h0[5];
+ ctx->h[6] = sha256_h0[6]; ctx->h[7] = sha256_h0[7];
+#endif /* !UNROLL_LOOPS */
+
+ ctx->len = 0;
+ ctx->tot_len = 0;
+}
+
+void sha256_update(sha256_ctx *ctx, const unsigned char *message,
+ unsigned int len)
+{
+ unsigned int block_nb;
+ unsigned int new_len, rem_len, tmp_len;
+ const unsigned char *shifted_message;
+
+ tmp_len = SHA256_BLOCK_SIZE - ctx->len;
+ rem_len = len < tmp_len ? len : tmp_len;
+
+ memcpy(&ctx->block[ctx->len], message, rem_len);
+
+ if (ctx->len + len < SHA256_BLOCK_SIZE) {
+ ctx->len += len;
+ return;
+ }
+
+ new_len = len - rem_len;
+ block_nb = new_len / SHA256_BLOCK_SIZE;
+
+ shifted_message = message + rem_len;
+
+ sha256_transf(ctx, ctx->block, 1);
+ sha256_transf(ctx, shifted_message, block_nb);
+
+ rem_len = new_len % SHA256_BLOCK_SIZE;
+
+ memcpy(ctx->block, &shifted_message[block_nb << 6],
+ rem_len);
+
+ ctx->len = rem_len;
+ ctx->tot_len += (block_nb + 1) << 6;
+}
+
+void sha256_final(sha256_ctx *ctx, unsigned char *digest)
+{
+ unsigned int block_nb;
+ unsigned int pm_len;
+ unsigned int len_b;
+
+#ifndef UNROLL_LOOPS
+ int i;
+#endif
+
+ block_nb = (1 + ((SHA256_BLOCK_SIZE - 9)
+ < (ctx->len % SHA256_BLOCK_SIZE)));
+
+ len_b = (ctx->tot_len + ctx->len) << 3;
+ pm_len = block_nb << 6;
+
+ memset(ctx->block + ctx->len, 0, pm_len - ctx->len);
+ ctx->block[ctx->len] = 0x80;
+ UNPACK32(len_b, ctx->block + pm_len - 4);
+
+ sha256_transf(ctx, ctx->block, block_nb);
+
+#ifndef UNROLL_LOOPS
+ for (i = 0 ; i < 8; i++) {
+ UNPACK32(ctx->h[i], &digest[i << 2]);
+ }
+#else
+ UNPACK32(ctx->h[0], &digest[ 0]);
+ UNPACK32(ctx->h[1], &digest[ 4]);
+ UNPACK32(ctx->h[2], &digest[ 8]);
+ UNPACK32(ctx->h[3], &digest[12]);
+ UNPACK32(ctx->h[4], &digest[16]);
+ UNPACK32(ctx->h[5], &digest[20]);
+ UNPACK32(ctx->h[6], &digest[24]);
+ UNPACK32(ctx->h[7], &digest[28]);
+#endif /* !UNROLL_LOOPS */
+}
+
+/* SHA-512 functions */
+
+void sha512_transf(sha512_ctx *ctx, const unsigned char *message,
+ unsigned int block_nb)
+{
+ uint64 w[80];
+ uint64 wv[8];
+ uint64 t1, t2;
+ const unsigned char *sub_block;
+ int i, j;
+
+ for (i = 0; i < (int) block_nb; i++) {
+ sub_block = message + (i << 7);
+
+#ifndef UNROLL_LOOPS
+ for (j = 0; j < 16; j++) {
+ PACK64(&sub_block[j << 3], &w[j]);
+ }
+
+ for (j = 16; j < 80; j++) {
+ SHA512_SCR(j);
+ }
+
+ for (j = 0; j < 8; j++) {
+ wv[j] = ctx->h[j];
+ }
+
+ for (j = 0; j < 80; j++) {
+ t1 = wv[7] + SHA512_F2(wv[4]) + CH(wv[4], wv[5], wv[6])
+ + sha512_k[j] + w[j];
+ t2 = SHA512_F1(wv[0]) + MAJ(wv[0], wv[1], wv[2]);
+ wv[7] = wv[6];
+ wv[6] = wv[5];
+ wv[5] = wv[4];
+ wv[4] = wv[3] + t1;
+ wv[3] = wv[2];
+ wv[2] = wv[1];
+ wv[1] = wv[0];
+ wv[0] = t1 + t2;
+ }
+
+ for (j = 0; j < 8; j++) {
+ ctx->h[j] += wv[j];
+ }
+#else
+ PACK64(&sub_block[ 0], &w[ 0]); PACK64(&sub_block[ 8], &w[ 1]);
+ PACK64(&sub_block[ 16], &w[ 2]); PACK64(&sub_block[ 24], &w[ 3]);
+ PACK64(&sub_block[ 32], &w[ 4]); PACK64(&sub_block[ 40], &w[ 5]);
+ PACK64(&sub_block[ 48], &w[ 6]); PACK64(&sub_block[ 56], &w[ 7]);
+ PACK64(&sub_block[ 64], &w[ 8]); PACK64(&sub_block[ 72], &w[ 9]);
+ PACK64(&sub_block[ 80], &w[10]); PACK64(&sub_block[ 88], &w[11]);
+ PACK64(&sub_block[ 96], &w[12]); PACK64(&sub_block[104], &w[13]);
+ PACK64(&sub_block[112], &w[14]); PACK64(&sub_block[120], &w[15]);
+
+ SHA512_SCR(16); SHA512_SCR(17); SHA512_SCR(18); SHA512_SCR(19);
+ SHA512_SCR(20); SHA512_SCR(21); SHA512_SCR(22); SHA512_SCR(23);
+ SHA512_SCR(24); SHA512_SCR(25); SHA512_SCR(26); SHA512_SCR(27);
+ SHA512_SCR(28); SHA512_SCR(29); SHA512_SCR(30); SHA512_SCR(31);
+ SHA512_SCR(32); SHA512_SCR(33); SHA512_SCR(34); SHA512_SCR(35);
+ SHA512_SCR(36); SHA512_SCR(37); SHA512_SCR(38); SHA512_SCR(39);
+ SHA512_SCR(40); SHA512_SCR(41); SHA512_SCR(42); SHA512_SCR(43);
+ SHA512_SCR(44); SHA512_SCR(45); SHA512_SCR(46); SHA512_SCR(47);
+ SHA512_SCR(48); SHA512_SCR(49); SHA512_SCR(50); SHA512_SCR(51);
+ SHA512_SCR(52); SHA512_SCR(53); SHA512_SCR(54); SHA512_SCR(55);
+ SHA512_SCR(56); SHA512_SCR(57); SHA512_SCR(58); SHA512_SCR(59);
+ SHA512_SCR(60); SHA512_SCR(61); SHA512_SCR(62); SHA512_SCR(63);
+ SHA512_SCR(64); SHA512_SCR(65); SHA512_SCR(66); SHA512_SCR(67);
+ SHA512_SCR(68); SHA512_SCR(69); SHA512_SCR(70); SHA512_SCR(71);
+ SHA512_SCR(72); SHA512_SCR(73); SHA512_SCR(74); SHA512_SCR(75);
+ SHA512_SCR(76); SHA512_SCR(77); SHA512_SCR(78); SHA512_SCR(79);
+
+ wv[0] = ctx->h[0]; wv[1] = ctx->h[1];
+ wv[2] = ctx->h[2]; wv[3] = ctx->h[3];
+ wv[4] = ctx->h[4]; wv[5] = ctx->h[5];
+ wv[6] = ctx->h[6]; wv[7] = ctx->h[7];
+
+ j = 0;
+
+ do {
+ SHA512_EXP(0,1,2,3,4,5,6,7,j); j++;
+ SHA512_EXP(7,0,1,2,3,4,5,6,j); j++;
+ SHA512_EXP(6,7,0,1,2,3,4,5,j); j++;
+ SHA512_EXP(5,6,7,0,1,2,3,4,j); j++;
+ SHA512_EXP(4,5,6,7,0,1,2,3,j); j++;
+ SHA512_EXP(3,4,5,6,7,0,1,2,j); j++;
+ SHA512_EXP(2,3,4,5,6,7,0,1,j); j++;
+ SHA512_EXP(1,2,3,4,5,6,7,0,j); j++;
+ } while (j < 80);
+
+ ctx->h[0] += wv[0]; ctx->h[1] += wv[1];
+ ctx->h[2] += wv[2]; ctx->h[3] += wv[3];
+ ctx->h[4] += wv[4]; ctx->h[5] += wv[5];
+ ctx->h[6] += wv[6]; ctx->h[7] += wv[7];
+#endif /* !UNROLL_LOOPS */
+ }
+}
+
+void sha512(const unsigned char *message, unsigned int len,
+ unsigned char *digest)
+{
+ sha512_ctx ctx;
+
+ sha512_init(&ctx);
+ sha512_update(&ctx, message, len);
+ sha512_final(&ctx, digest);
+}
+
+void sha512_init(sha512_ctx *ctx)
+{
+#ifndef UNROLL_LOOPS
+ int i;
+ for (i = 0; i < 8; i++) {
+ ctx->h[i] = sha512_h0[i];
+ }
+#else
+ ctx->h[0] = sha512_h0[0]; ctx->h[1] = sha512_h0[1];
+ ctx->h[2] = sha512_h0[2]; ctx->h[3] = sha512_h0[3];
+ ctx->h[4] = sha512_h0[4]; ctx->h[5] = sha512_h0[5];
+ ctx->h[6] = sha512_h0[6]; ctx->h[7] = sha512_h0[7];
+#endif /* !UNROLL_LOOPS */
+
+ ctx->len = 0;
+ ctx->tot_len = 0;
+}
+
+void sha512_update(sha512_ctx *ctx, const unsigned char *message,
+ unsigned int len)
+{
+ unsigned int block_nb;
+ unsigned int new_len, rem_len, tmp_len;
+ const unsigned char *shifted_message;
+
+ tmp_len = SHA512_BLOCK_SIZE - ctx->len;
+ rem_len = len < tmp_len ? len : tmp_len;
+
+ memcpy(&ctx->block[ctx->len], message, rem_len);
+
+ if (ctx->len + len < SHA512_BLOCK_SIZE) {
+ ctx->len += len;
+ return;
+ }
+
+ new_len = len - rem_len;
+ block_nb = new_len / SHA512_BLOCK_SIZE;
+
+ shifted_message = message + rem_len;
+
+ sha512_transf(ctx, ctx->block, 1);
+ sha512_transf(ctx, shifted_message, block_nb);
+
+ rem_len = new_len % SHA512_BLOCK_SIZE;
+
+ memcpy(ctx->block, &shifted_message[block_nb << 7],
+ rem_len);
+
+ ctx->len = rem_len;
+ ctx->tot_len += (block_nb + 1) << 7;
+}
+
+void sha512_final(sha512_ctx *ctx, unsigned char *digest)
+{
+ unsigned int block_nb;
+ unsigned int pm_len;
+ unsigned int len_b;
+
+#ifndef UNROLL_LOOPS
+ int i;
+#endif
+
+ block_nb = 1 + ((SHA512_BLOCK_SIZE - 17)
+ < (ctx->len % SHA512_BLOCK_SIZE));
+
+ len_b = (ctx->tot_len + ctx->len) << 3;
+ pm_len = block_nb << 7;
+
+ memset(ctx->block + ctx->len, 0, pm_len - ctx->len);
+ ctx->block[ctx->len] = 0x80;
+ UNPACK32(len_b, ctx->block + pm_len - 4);
+
+ sha512_transf(ctx, ctx->block, block_nb);
+
+#ifndef UNROLL_LOOPS
+ for (i = 0 ; i < 8; i++) {
+ UNPACK64(ctx->h[i], &digest[i << 3]);
+ }
+#else
+ UNPACK64(ctx->h[0], &digest[ 0]);
+ UNPACK64(ctx->h[1], &digest[ 8]);
+ UNPACK64(ctx->h[2], &digest[16]);
+ UNPACK64(ctx->h[3], &digest[24]);
+ UNPACK64(ctx->h[4], &digest[32]);
+ UNPACK64(ctx->h[5], &digest[40]);
+ UNPACK64(ctx->h[6], &digest[48]);
+ UNPACK64(ctx->h[7], &digest[56]);
+#endif /* !UNROLL_LOOPS */
+}
+
+/* SHA-384 functions */
+
+void sha384(const unsigned char *message, unsigned int len,
+ unsigned char *digest)
+{
+ sha384_ctx ctx;
+
+ sha384_init(&ctx);
+ sha384_update(&ctx, message, len);
+ sha384_final(&ctx, digest);
+}
+
+void sha384_init(sha384_ctx *ctx)
+{
+#ifndef UNROLL_LOOPS
+ int i;
+ for (i = 0; i < 8; i++) {
+ ctx->h[i] = sha384_h0[i];
+ }
+#else
+ ctx->h[0] = sha384_h0[0]; ctx->h[1] = sha384_h0[1];
+ ctx->h[2] = sha384_h0[2]; ctx->h[3] = sha384_h0[3];
+ ctx->h[4] = sha384_h0[4]; ctx->h[5] = sha384_h0[5];
+ ctx->h[6] = sha384_h0[6]; ctx->h[7] = sha384_h0[7];
+#endif /* !UNROLL_LOOPS */
+
+ ctx->len = 0;
+ ctx->tot_len = 0;
+}
+
+void sha384_update(sha384_ctx *ctx, const unsigned char *message,
+ unsigned int len)
+{
+ unsigned int block_nb;
+ unsigned int new_len, rem_len, tmp_len;
+ const unsigned char *shifted_message;
+
+ tmp_len = SHA384_BLOCK_SIZE - ctx->len;
+ rem_len = len < tmp_len ? len : tmp_len;
+
+ memcpy(&ctx->block[ctx->len], message, rem_len);
+
+ if (ctx->len + len < SHA384_BLOCK_SIZE) {
+ ctx->len += len;
+ return;
+ }
+
+ new_len = len - rem_len;
+ block_nb = new_len / SHA384_BLOCK_SIZE;
+
+ shifted_message = message + rem_len;
+
+ sha512_transf(ctx, ctx->block, 1);
+ sha512_transf(ctx, shifted_message, block_nb);
+
+ rem_len = new_len % SHA384_BLOCK_SIZE;
+
+ memcpy(ctx->block, &shifted_message[block_nb << 7],
+ rem_len);
+
+ ctx->len = rem_len;
+ ctx->tot_len += (block_nb + 1) << 7;
+}
+
+void sha384_final(sha384_ctx *ctx, unsigned char *digest)
+{
+ unsigned int block_nb;
+ unsigned int pm_len;
+ unsigned int len_b;
+
+#ifndef UNROLL_LOOPS
+ int i;
+#endif
+
+ block_nb = (1 + ((SHA384_BLOCK_SIZE - 17)
+ < (ctx->len % SHA384_BLOCK_SIZE)));
+
+ len_b = (ctx->tot_len + ctx->len) << 3;
+ pm_len = block_nb << 7;
+
+ memset(ctx->block + ctx->len, 0, pm_len - ctx->len);
+ ctx->block[ctx->len] = 0x80;
+ UNPACK32(len_b, ctx->block + pm_len - 4);
+
+ sha512_transf(ctx, ctx->block, block_nb);
+
+#ifndef UNROLL_LOOPS
+ for (i = 0 ; i < 6; i++) {
+ UNPACK64(ctx->h[i], &digest[i << 3]);
+ }
+#else
+ UNPACK64(ctx->h[0], &digest[ 0]);
+ UNPACK64(ctx->h[1], &digest[ 8]);
+ UNPACK64(ctx->h[2], &digest[16]);
+ UNPACK64(ctx->h[3], &digest[24]);
+ UNPACK64(ctx->h[4], &digest[32]);
+ UNPACK64(ctx->h[5], &digest[40]);
+#endif /* !UNROLL_LOOPS */
+}
+
+/* SHA-224 functions */
+
+void sha224(const unsigned char *message, unsigned int len,
+ unsigned char *digest)
+{
+ sha224_ctx ctx;
+
+ sha224_init(&ctx);
+ sha224_update(&ctx, message, len);
+ sha224_final(&ctx, digest);
+}
+
+void sha224_init(sha224_ctx *ctx)
+{
+#ifndef UNROLL_LOOPS
+ int i;
+ for (i = 0; i < 8; i++) {
+ ctx->h[i] = sha224_h0[i];
+ }
+#else
+ ctx->h[0] = sha224_h0[0]; ctx->h[1] = sha224_h0[1];
+ ctx->h[2] = sha224_h0[2]; ctx->h[3] = sha224_h0[3];
+ ctx->h[4] = sha224_h0[4]; ctx->h[5] = sha224_h0[5];
+ ctx->h[6] = sha224_h0[6]; ctx->h[7] = sha224_h0[7];
+#endif /* !UNROLL_LOOPS */
+
+ ctx->len = 0;
+ ctx->tot_len = 0;
+}
+
+void sha224_update(sha224_ctx *ctx, const unsigned char *message,
+ unsigned int len)
+{
+ unsigned int block_nb;
+ unsigned int new_len, rem_len, tmp_len;
+ const unsigned char *shifted_message;
+
+ tmp_len = SHA224_BLOCK_SIZE - ctx->len;
+ rem_len = len < tmp_len ? len : tmp_len;
+
+ memcpy(&ctx->block[ctx->len], message, rem_len);
+
+ if (ctx->len + len < SHA224_BLOCK_SIZE) {
+ ctx->len += len;
+ return;
+ }
+
+ new_len = len - rem_len;
+ block_nb = new_len / SHA224_BLOCK_SIZE;
+
+ shifted_message = message + rem_len;
+
+ sha256_transf(ctx, ctx->block, 1);
+ sha256_transf(ctx, shifted_message, block_nb);
+
+ rem_len = new_len % SHA224_BLOCK_SIZE;
+
+ memcpy(ctx->block, &shifted_message[block_nb << 6],
+ rem_len);
+
+ ctx->len = rem_len;
+ ctx->tot_len += (block_nb + 1) << 6;
+}
+
+void sha224_final(sha224_ctx *ctx, unsigned char *digest)
+{
+ unsigned int block_nb;
+ unsigned int pm_len;
+ unsigned int len_b;
+
+#ifndef UNROLL_LOOPS
+ int i;
+#endif
+
+ block_nb = (1 + ((SHA224_BLOCK_SIZE - 9)
+ < (ctx->len % SHA224_BLOCK_SIZE)));
+
+ len_b = (ctx->tot_len + ctx->len) << 3;
+ pm_len = block_nb << 6;
+
+ memset(ctx->block + ctx->len, 0, pm_len - ctx->len);
+ ctx->block[ctx->len] = 0x80;
+ UNPACK32(len_b, ctx->block + pm_len - 4);
+
+ sha256_transf(ctx, ctx->block, block_nb);
+
+#ifndef UNROLL_LOOPS
+ for (i = 0 ; i < 7; i++) {
+ UNPACK32(ctx->h[i], &digest[i << 2]);
+ }
+#else
+ UNPACK32(ctx->h[0], &digest[ 0]);
+ UNPACK32(ctx->h[1], &digest[ 4]);
+ UNPACK32(ctx->h[2], &digest[ 8]);
+ UNPACK32(ctx->h[3], &digest[12]);
+ UNPACK32(ctx->h[4], &digest[16]);
+ UNPACK32(ctx->h[5], &digest[20]);
+ UNPACK32(ctx->h[6], &digest[24]);
+#endif /* !UNROLL_LOOPS */
+}
+
+#ifdef TEST_VECTORS
+
+/* FIPS 180-2 Validation tests */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+void test(const unsigned char *vector, unsigned char *digest,
+ unsigned int digest_size)
+{
+ unsigned char output[2 * SHA512_DIGEST_SIZE + 1];
+ int i;
+
+ output[2 * digest_size] = '\0';
+
+ for (i = 0; i < (int) digest_size ; i++) {
+ sprintf((char *) output + 2 * i, "%02x", digest[i]);
+ }
+
+ printf("H: %s\n", output);
+ if (strcmp((char *) vector, (char *) output)) {
+ fprintf(stderr, "Test failed.\n");
+ exit(EXIT_FAILURE);
+ }
+}
+
+int main()
+{
+ static const unsigned char *vectors[4][3] =
+ { /* SHA-224 */
+ {
+ "23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7",
+ "75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525",
+ "20794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67",
+ },
+ /* SHA-256 */
+ {
+ "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad",
+ "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1",
+ "cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0",
+ },
+ /* SHA-384 */
+ {
+ "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed"
+ "8086072ba1e7cc2358baeca134c825a7",
+ "09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712"
+ "fcc7c71a557e2db966c3e9fa91746039",
+ "9d0e1809716474cb086e834e310a4a1ced149e9c00f248527972cec5704c2a5b"
+ "07b8b3dc38ecc4ebae97ddd87f3d8985",
+ },
+ /* SHA-512 */
+ {
+ "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a"
+ "2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f",
+ "8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018"
+ "501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909",
+ "e718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973eb"
+ "de0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09b"
+ }
+ };
+
+ static const unsigned char message1[] = "abc";
+ static const unsigned char message2a[] = "abcdbcdecdefdefgefghfghighijhi"
+ "jkijkljklmklmnlmnomnopnopq";
+ static const unsigned char message2b[] =
+ "abcdefghbcdefghicdefghijdefghijkefghij"
+ "klfghijklmghijklmnhijklmnoijklmnopjklm"
+ "nopqklmnopqrlmnopqrsmnopqrstnopqrstu";
+ unsigned char *message3;
+ unsigned int message3_len = 1000000;
+ unsigned char digest[SHA512_DIGEST_SIZE];
+
+ message3 = malloc(message3_len);
+ if (message3 == NULL) {
+ fprintf(stderr, "Can't allocate memory\n");
+ return -1;
+ }
+ memset(message3, 'a', message3_len);
+
+ printf("SHA-2 FIPS 180-2 Validation tests\n\n");
+ printf("SHA-224 Test vectors\n");
+
+ sha224(message1, strlen((char *) message1), digest);
+ test(vectors[0][0], digest, SHA224_DIGEST_SIZE);
+ sha224(message2a, strlen((char *) message2a), digest);
+ test(vectors[0][1], digest, SHA224_DIGEST_SIZE);
+ sha224(message3, message3_len, digest);
+ test(vectors[0][2], digest, SHA224_DIGEST_SIZE);
+ printf("\n");
+
+ printf("SHA-256 Test vectors\n");
+
+ sha256(message1, strlen((char *) message1), digest);
+ test(vectors[1][0], digest, SHA256_DIGEST_SIZE);
+ sha256(message2a, strlen((char *) message2a), digest);
+ test(vectors[1][1], digest, SHA256_DIGEST_SIZE);
+ sha256(message3, message3_len, digest);
+ test(vectors[1][2], digest, SHA256_DIGEST_SIZE);
+ printf("\n");
+
+ printf("SHA-384 Test vectors\n");
+
+ sha384(message1, strlen((char *) message1), digest);
+ test(vectors[2][0], digest, SHA384_DIGEST_SIZE);
+ sha384(message2b, strlen((char *) message2b), digest);
+ test(vectors[2][1], digest, SHA384_DIGEST_SIZE);
+ sha384(message3, message3_len, digest);
+ test(vectors[2][2], digest, SHA384_DIGEST_SIZE);
+ printf("\n");
+
+ printf("SHA-512 Test vectors\n");
+
+ sha512(message1, strlen((char *) message1), digest);
+ test(vectors[3][0], digest, SHA512_DIGEST_SIZE);
+ sha512(message2b, strlen((char *) message2b), digest);
+ test(vectors[3][1], digest, SHA512_DIGEST_SIZE);
+ sha512(message3, message3_len, digest);
+ test(vectors[3][2], digest, SHA512_DIGEST_SIZE);
+ printf("\n");
+
+ printf("All tests passed.\n");
+
+ return 0;
+}
+
+#endif /* TEST_VECTORS */
+
diff --git a/src/fetch/sha2.h b/src/fetch/sha2.h
new file mode 100644
index 0000000..60f52e3
--- /dev/null
+++ b/src/fetch/sha2.h
@@ -0,0 +1,108 @@
+/*
+ * FIPS 180-2 SHA-224/256/384/512 implementation
+ * Last update: 02/02/2007
+ * Issue date: 04/30/2005
+ *
+ * Copyright (C) 2005, 2007 Olivier Gay <[email protected]>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef SHA2_H
+#define SHA2_H
+
+#define SHA224_DIGEST_SIZE ( 224 / 8)
+#define SHA256_DIGEST_SIZE ( 256 / 8)
+#define SHA384_DIGEST_SIZE ( 384 / 8)
+#define SHA512_DIGEST_SIZE ( 512 / 8)
+
+#define SHA256_BLOCK_SIZE ( 512 / 8)
+#define SHA512_BLOCK_SIZE (1024 / 8)
+#define SHA384_BLOCK_SIZE SHA512_BLOCK_SIZE
+#define SHA224_BLOCK_SIZE SHA256_BLOCK_SIZE
+
+#ifndef SHA2_TYPES
+#define SHA2_TYPES
+typedef unsigned char uint8;
+typedef unsigned int uint32;
+typedef unsigned long long uint64;
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+ unsigned int tot_len;
+ unsigned int len;
+ unsigned char block[2 * SHA256_BLOCK_SIZE];
+ uint32 h[8];
+} sha256_ctx;
+
+typedef struct {
+ unsigned int tot_len;
+ unsigned int len;
+ unsigned char block[2 * SHA512_BLOCK_SIZE];
+ uint64 h[8];
+} sha512_ctx;
+
+typedef sha512_ctx sha384_ctx;
+typedef sha256_ctx sha224_ctx;
+
+void sha224_init(sha224_ctx *ctx);
+void sha224_update(sha224_ctx *ctx, const unsigned char *message,
+ unsigned int len);
+void sha224_final(sha224_ctx *ctx, unsigned char *digest);
+void sha224(const unsigned char *message, unsigned int len,
+ unsigned char *digest);
+
+void sha256_init(sha256_ctx * ctx);
+void sha256_update(sha256_ctx *ctx, const unsigned char *message,
+ unsigned int len);
+void sha256_final(sha256_ctx *ctx, unsigned char *digest);
+void sha256(const unsigned char *message, unsigned int len,
+ unsigned char *digest);
+
+void sha384_init(sha384_ctx *ctx);
+void sha384_update(sha384_ctx *ctx, const unsigned char *message,
+ unsigned int len);
+void sha384_final(sha384_ctx *ctx, unsigned char *digest);
+void sha384(const unsigned char *message, unsigned int len,
+ unsigned char *digest);
+
+void sha512_init(sha512_ctx *ctx);
+void sha512_update(sha512_ctx *ctx, const unsigned char *message,
+ unsigned int len);
+void sha512_final(sha512_ctx *ctx, unsigned char *digest);
+void sha512(const unsigned char *message, unsigned int len,
+ unsigned char *digest);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !SHA2_H */
+
diff --git a/src/fetch/z3950-servers.cfg b/src/fetch/z3950-servers.cfg
index f4f6157..b30b661 100644
--- a/src/fetch/z3950-servers.cfg
+++ b/src/fetch/z3950-servers.cfg
@@ -43,9 +43,9 @@ Locale=it
Syntax=unimarc
[porbase]
-Host=z3950.bn.pt
+Host=z3950.porbase.org
Port=210
-Database=bnd
+Database=Default
Name=Portuguese National Library
Charset=iso-8859-1
Locale=pt
diff --git a/src/fetch/z3950fetcher.cpp b/src/fetch/z3950fetcher.cpp
index 7e70aa4..bd517ae 100644
--- a/src/fetch/z3950fetcher.cpp
+++ b/src/fetch/z3950fetcher.cpp
@@ -175,13 +175,13 @@ void Z3950Fetcher::search(FetchKey key_, const TQString& value_) {
isbnList.insert(it, isbn10);
}
}
- const int count = isbnList.count();
+ const size_t count = isbnList.count();
if(count > 1) {
m_pqn = TQString::fromLatin1("@or ");
}
- for(int i = 0; i < count; ++i) {
+ for(size_t i = 0; i < count; ++i) {
m_pqn += TQString::fromLatin1(" @attr 1=7 ") + isbnList[i];
- if(i < count-2) {
+ if(count > 1 && i < count-2) {
m_pqn += TQString::fromLatin1(" @or");
}
}
diff --git a/src/fetchdialog.cpp b/src/fetchdialog.cpp
index ab9d91b..9586b13 100644
--- a/src/fetchdialog.cpp
+++ b/src/fetchdialog.cpp
@@ -591,6 +591,10 @@ void FetchDialog::slotMultipleISBN(bool toggle_) {
m_valueLineEdit->setText(val);
}
m_editISBN->setEnabled(toggle_);
+ if(toggle_) {
+ // if we're editing multiple values, it makes sense to popup the dialog now
+ slotEditMultipleISBN();
+ }
}
void FetchDialog::slotEditMultipleISBN() {
diff --git a/src/field.cpp b/src/field.cpp
index 4ad2fa7..793de90 100644
--- a/src/field.cpp
+++ b/src/field.cpp
@@ -32,6 +32,7 @@ namespace {
using Tellico::Data::Field;
//these get overwritten, but are here since they're static
+TQStringList Field::s_articles;
TQStringList Field::s_articlesApos;
TQRegExp Field::s_delimiter = TQRegExp(TQString::fromLatin1("\\s*;\\s*"));
@@ -171,7 +172,7 @@ const TQString& Field::defaultValue() const {
}
void Field::setDefaultValue(const TQString& value_) {
- if(m_type != Choice || m_allowed.findIndex(value_) > -1) {
+ if(value_.isEmpty() || m_type != Choice || m_allowed.findIndex(value_) > -1) {
setProperty(TQString::fromLatin1("default"), value_);
}
}
@@ -260,8 +261,7 @@ TQString Field::formatTitle(const TQString& title_) {
if(Config::autoFormat()) {
const TQString lower = newTitle.lower();
// TODO if the title has ",the" at the end, put it at the front
- const TQStringList& articles = Config::articleList();
- for(TQStringList::ConstIterator it = articles.begin(); it != articles.end(); ++it) {
+ for(TQStringList::ConstIterator it = s_articles.constBegin(); it != s_articles.constEnd(); ++it) {
// assume white space is already stripped
// the articles are already in lower-case
if(lower.startsWith(*it + TQChar(' '))) {
@@ -415,7 +415,7 @@ TQString Field::capitalize(TQString str_) {
TQString word = str_.mid(0, pos);
// now check to see if words starts with apostrophe list
- for(TQStringList::ConstIterator it = s_articlesApos.begin(); it != s_articlesApos.end(); ++it) {
+ for(TQStringList::ConstIterator it = s_articlesApos.constBegin(); it != s_articlesApos.constEnd(); ++it) {
if(word.lower().startsWith(*it)) {
uint l = (*it).length();
str_.replace(l, 1, str_.at(l).upper());
@@ -432,7 +432,7 @@ TQString Field::capitalize(TQString str_) {
word = str_.mid(pos+1, nextPos-pos-1);
bool aposMatch = false;
// now check to see if words starts with apostrophe list
- for(TQStringList::ConstIterator it = s_articlesApos.begin(); it != s_articlesApos.end(); ++it) {
+ for(TQStringList::ConstIterator it = s_articlesApos.constBegin(); it != s_articlesApos.constEnd(); ++it) {
if(word.lower().startsWith(*it)) {
uint l = (*it).length();
str_.replace(pos+l+1, 1, str_.at(pos+l+1).upper());
@@ -455,8 +455,7 @@ TQString Field::capitalize(TQString str_) {
TQString Field::sortKeyTitle(const TQString& title_) {
const TQString lower = title_.lower();
- const TQStringList& articles = Config::articleList();
- for(TQStringList::ConstIterator it = articles.begin(); it != articles.end(); ++it) {
+ for(TQStringList::ConstIterator it = s_articles.constBegin(); it != s_articles.constEnd(); ++it) {
// assume white space is already stripped
// the articles are already in lower-case
if(lower.startsWith(*it + TQChar(' '))) {
@@ -464,7 +463,7 @@ TQString Field::sortKeyTitle(const TQString& title_) {
}
}
// check apostrophes, too
- for(TQStringList::ConstIterator it = s_articlesApos.begin(); it != s_articlesApos.end(); ++it) {
+ for(TQStringList::ConstIterator it = s_articlesApos.constBegin(); it != s_articlesApos.constEnd(); ++it) {
if(lower.startsWith(*it)) {
return title_.mid((*it).length());
}
@@ -474,9 +473,9 @@ TQString Field::sortKeyTitle(const TQString& title_) {
// articles should all be in lower-case
void Field::articlesUpdated() {
- const TQStringList articles = Config::articleList();
+ s_articles = Config::articleList();
s_articlesApos.clear();
- for(TQStringList::ConstIterator it = articles.begin(); it != articles.end(); ++it) {
+ for(TQStringList::ConstIterator it = s_articles.constBegin(); it != s_articles.constEnd(); ++it) {
if((*it).endsWith(TQChar('\''))) {
s_articlesApos += (*it);
}
@@ -581,11 +580,10 @@ long Field::getID() {
}
void Field::stripArticles(TQString& value) {
- const TQStringList articles = Config::articleList();
- if(articles.isEmpty()) {
+ if(s_articles.isEmpty()) {
return;
}
- for(TQStringList::ConstIterator it = articles.begin(); it != articles.end(); ++it) {
+ for(TQStringList::ConstIterator it = s_articles.constBegin(); it != s_articles.constEnd(); ++it) {
TQRegExp rx(TQString::fromLatin1("\\b") + *it + TQString::fromLatin1("\\b"));
value.remove(rx);
}
diff --git a/src/field.h b/src/field.h
index f0b591a..c271705 100644
--- a/src/field.h
+++ b/src/field.h
@@ -385,6 +385,7 @@ private:
FormatFlag m_formatFlag;
StringMap m_properties;
+ static TQStringList s_articles;
// need to remember articles with apostrophes for capitalization
static TQStringList s_articlesApos;
static TQRegExp s_delimiter;
diff --git a/src/gui/counteditem.h b/src/gui/counteditem.h
index 3aff0b7..4275696 100644
--- a/src/gui/counteditem.h
+++ b/src/gui/counteditem.h
@@ -39,8 +39,8 @@ public:
int column, int width, int align);
virtual int width(const TQFontMetrics& fm, const TQListView* lv, int c) const;
- virtual int count() const { return childCount(); }
- virtual int realChildCount() const { return count(); }
+ virtual size_t count() const { return childCount(); }
+ virtual size_t realChildCount() const { return count(); }
};
} // end namespace
diff --git a/src/gui/listview.h b/src/gui/listview.h
index ccb0867..5e1137b 100644
--- a/src/gui/listview.h
+++ b/src/gui/listview.h
@@ -139,7 +139,7 @@ public:
ListViewItem(ListViewItem* parent, const TQString& text) : TDEListViewItem(parent, text), m_sortWeight(-1) {}
virtual ~ListViewItem();
- virtual int realChildCount() const { return childCount(); }
+ virtual size_t realChildCount() const { return childCount(); }
virtual void clear();
virtual bool isEntryGroupItem() const { return false; }
diff --git a/src/gui/tabcontrol.cpp b/src/gui/tabcontrol.cpp
index f3c2bf2..92afec6 100644
--- a/src/gui/tabcontrol.cpp
+++ b/src/gui/tabcontrol.cpp
@@ -29,6 +29,9 @@ TQTabBar* TabControl::tabBar() const {
void TabControl::setFocusToFirstChild() {
TQWidget* page = currentPage();
Q_ASSERT(page);
+ if(!page) {
+ return;
+ }
TQObjectList* list = page->queryList(TQWIDGET_OBJECT_NAME_STRING);
for(TQObjectListIt it(*list); it.current(); ++it) {
TQWidget* w = TQT_TQWIDGET(it.current());
diff --git a/src/image.cpp b/src/image.cpp
index 8cb6fa4..cc015ae 100644
--- a/src/image.cpp
+++ b/src/image.cpp
@@ -14,6 +14,7 @@
#include "image.h"
#include "imagefactory.h"
#include "tellico_debug.h"
+#include "tellico_utils.h"
#include <kmdcodec.h>
#include <kpixmapio.h>
@@ -105,7 +106,7 @@ TQByteArray Image::byteArray(const TQImage& img_, const TQCString& outputFormat_
TQString Image::idClean(const TQString& id_) {
static const TQRegExp rx('[' + TQRegExp::escape(TQString::fromLatin1("/@<>#\"&%?={}|^~[]'`\\:+")) + ']');
TQString clean = id_;
- return clean.remove(rx);
+ return shareString(clean.remove(rx));
}
void Image::setID(const TQString& id_) {
diff --git a/src/imagefactory.cpp b/src/imagefactory.cpp
index 574b199..0cc6acb 100644
--- a/src/imagefactory.cpp
+++ b/src/imagefactory.cpp
@@ -316,7 +316,7 @@ bool ImageFactory::writeCachedImage(const TQString& id_, CacheDir dir_, bool for
const Tellico::Data::Image& ImageFactory::imageById(const TQString& id_) {
if(id_.isEmpty()) {
- myDebug() << "ImageFactory::imageById() - empty id" << endl;
+// myDebug() << "ImageFactory::imageById() - empty id" << endl;
return s_null;
}
// myLog() << "ImageFactory::imageById() - " << id_ << endl;
@@ -348,7 +348,7 @@ const Tellico::Data::Image& ImageFactory::imageById(const TQString& id_) {
if((s_imageInfoMap.contains(id_) && s_imageInfoMap[id_].linkOnly) || !KURL::isRelativeURL(id_)) {
KURL u = id_;
if(u.isValid()) {
- return addImageImpl(u, false, KURL(), true);
+ return addImageImpl(u, true, KURL(), true);
}
}
@@ -385,43 +385,53 @@ const Tellico::Data::Image& ImageFactory::imageById(const TQString& id_) {
}
}
- // don't check Config::writeImagesInFile(), someday we might have problems
- // and the image will exist in the data dir, but the app thinks everything should
- // be in the zip file instead
- bool exists = TQFile::exists(dataDir() + id_);
- if(exists) {
- // if we're loading from the application data dir, but images are being saved in the
- // data file instead, then consider the document to be modified since it needs
- // the image saved
- if(Config::imageLocation() != Config::ImagesInAppDir) {
+ if(Config::imageLocation() == Config::ImagesInLocalDir) {
+ bool exists = TQFile::exists(localDir() + id_);
+ if(exists) {
+ const Data::Image& img2 = addCachedImageImpl(id_, LocalDir);
+ if(img2.isNull()) {
+ myDebug() << "ImageFactory::imageById() - tried to add from LocalDir, but failed: " << id_ << endl;
+ } else {
+// myLog() << "...imageById() - found in local dir" << endl;
+ return img2;
+ }
+ }
+ // not an else statement, it might be null
+ if(TQFile::exists(dataDir() + id_)) {
+ // the img is in the other location
+ // consider the document to be modified since it needs the image saved
Data::Document::self()->slotSetModified(true);
+ const Data::Image& img2 = addCachedImageImpl(id_, DataDir);
+ if(img2.isNull()) {
+ myDebug() << "ImageFactory::imageById() - tried to add from DataDir, but failed: " << id_ << endl;
+ } else {
+// myLog() << "...imageById() - found in data dir" << endl;
+ return img2;
+ }
}
- const Data::Image& img2 = addCachedImageImpl(id_, DataDir);
- if(img2.isNull()) {
- myDebug() << "ImageFactory::imageById() - tried to add from DataDir, but failed: " << id_ << endl;
- } else {
-// myLog() << "...imageById() - found in data dir" << endl;
- return img2;
+ } else if(Config::imageLocation() == Config::ImagesInAppDir) {
+ bool exists = TQFile::exists(dataDir() + id_);
+ if(exists) {
+ const Data::Image& img2 = addCachedImageImpl(id_, DataDir);
+ if(img2.isNull()) {
+ myDebug() << "ImageFactory::imageById() - tried to add from DataDir, but failed: " << id_ << endl;
+ } else {
+// myLog() << "...imageById() - found in data dir" << endl;
+ return img2;
+ }
}
- }
- // if localDir() == DataDir(), then there's nothing left to check
- if(localDir() == dataDir()) {
- return s_null;
- }
- exists = TQFile::exists(localDir() + id_);
- if(exists) {
- // if we're loading from the application data dir, but images are being saved in the
- // data file instead, then consider the document to be modified since it needs
- // the image saved
- if(Config::imageLocation() != Config::ImagesInLocalDir) {
+ // not an else statement, it might be null
+ if(TQFile::exists(localDir() + id_)) {
+ // the img is in the other location
+ // consider the document to be modified since it needs the image saved
Data::Document::self()->slotSetModified(true);
- }
- const Data::Image& img2 = addCachedImageImpl(id_, LocalDir);
- if(img2.isNull()) {
- myDebug() << "ImageFactory::imageById() - tried to add from LocalDir, but failed: " << id_ << endl;
- } else {
-// myLog() << "...imageById() - found in data dir" << endl;
- return img2;
+ const Data::Image& img2 = addCachedImageImpl(id_, LocalDir);
+ if(img2.isNull()) {
+ myDebug() << "ImageFactory::imageById() - tried to add from LocalDir, but failed: " << id_ << endl;
+ } else {
+// myLog() << "...imageById() - found in local dir" << endl;
+ return img2;
+ }
}
}
myDebug() << "***ImageFactory::imageById() - not found: " << id_ << endl;
diff --git a/src/isbnvalidator.cpp b/src/isbnvalidator.cpp
index 4832cdd..d6ae49f 100644
--- a/src/isbnvalidator.cpp
+++ b/src/isbnvalidator.cpp
@@ -12,6 +12,7 @@
***************************************************************************/
#include "isbnvalidator.h"
+#include "upcvalidator.h"
#include "tellico_debug.h"
using Tellico::ISBNValidator;
@@ -58,6 +59,13 @@ ISBNValidator::ISBNValidator(TQObject* parent_, const char* name_/*=0*/)
}
TQValidator::State ISBNValidator::validate(TQString& input_, int& pos_) const {
+ // check if it's a cuecat first
+ State catState = CueCat::decode(input_);
+ if(catState != Invalid) {
+ pos_ = input_.length();
+ return catState;
+ }
+
if(input_.startsWith(TQString::fromLatin1("978")) ||
input_.startsWith(TQString::fromLatin1("979"))) {
return validate13(input_, pos_);
diff --git a/src/lccnvalidator.cpp b/src/lccnvalidator.cpp
index cf0e850..b177d55 100644
--- a/src/lccnvalidator.cpp
+++ b/src/lccnvalidator.cpp
@@ -65,7 +65,7 @@ TQString LCCNValidator::formalize(const TQString& value_) {
// now check for non digits in the serial
pos = 0;
- for( ; pos < serial.length() && serial.at(pos).isNumber(); ++pos) { ; }
+ for( ; pos < static_cast<int>(serial.length()) && serial.at(pos).isNumber(); ++pos) { ; }
TQString suffix = serial.mid(pos);
serial = serial.left(pos);
// serial must be left-padded with zeros to 6 characters
diff --git a/src/listviewcomparison.cpp b/src/listviewcomparison.cpp
index b78de94..c03d402 100644
--- a/src/listviewcomparison.cpp
+++ b/src/listviewcomparison.cpp
@@ -48,6 +48,8 @@ Tellico::ListViewComparison* Tellico::ListViewComparison::create(Data::ConstFiel
return new DependentComparison(field_);
} else if(field_->type() == Data::Field::Date || field_->formatFlag() == Data::Field::FormatDate) {
return new ISODateComparison(field_);
+ } else if(field_->type() == Data::Field::Choice) {
+ return new ChoiceComparison(field_);
} else if(field_->formatFlag() == Data::Field::FormatTitle) {
// Dependent could be title, so put this test after
return new TitleComparison(field_);
@@ -277,3 +279,11 @@ int Tellico::ISODateComparison::compare(const TQString& str1, const TQString& st
}
return 0;
}
+
+Tellico::ChoiceComparison::ChoiceComparison(Data::ConstFieldPtr field) : ListViewComparison(field) {
+ m_values = field->allowed();
+}
+
+int Tellico::ChoiceComparison::compare(const TQString& str1, const TQString& str2) {
+ return m_values.findIndex(str1) - m_values.findIndex(str2);
+}
diff --git a/src/listviewcomparison.h b/src/listviewcomparison.h
index 28a3878..3615df4 100644
--- a/src/listviewcomparison.h
+++ b/src/listviewcomparison.h
@@ -112,5 +112,16 @@ protected:
virtual int compare(const TQString& str1, const TQString& str2);
};
+class ChoiceComparison : public ListViewComparison {
+public:
+ ChoiceComparison(Data::ConstFieldPtr field);
+
+protected:
+ virtual int compare(const TQString& str1, const TQString& str2);
+
+private:
+ TQStringList m_values;
+};
+
}
#endif
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 74451ac..54aac95 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -336,7 +336,7 @@ void MainWindow::initActions() {
action = new TDEAction(actionCollection(), "file_import_csv");
action->setText(i18n("Import CSV Data..."));
action->setToolTip(i18n("Import a CSV file"));
- action->setIcon(MIME_ICON("text/x-csv"));
+ action->setIcon(MIME_ICON("text/csv"));
importMenu->insert(action);
connect(action, TQT_SIGNAL(activated()), importMapper, TQT_SLOT(map()));
importMapper->setMapping(action, Import::CSV);
@@ -506,7 +506,7 @@ void MainWindow::initActions() {
action = new TDEAction(actionCollection(), "file_export_csv");
action->setText(i18n("Export to CSV..."));
action->setToolTip(i18n("Export to a comma-separated values file"));
- action->setIcon(MIME_ICON("text/x-csv"));
+ action->setIcon(MIME_ICON("text/csv"));
exportMenu->insert(action);
connect(action, TQT_SIGNAL(activated()), exportMapper, TQT_SLOT(map()));
exportMapper->setMapping(action, Export::CSV);
@@ -750,6 +750,7 @@ void MainWindow::initActions() {
// want to update every time the filter text changes
connect(m_quickFilter, TQT_SIGNAL(textChanged(const TQString&)),
TQT_TQOBJECT(this), TQT_SLOT(slotQueueFilter()));
+ m_quickFilter->installEventFilter(this); // intercept keyEvents
KWidgetAction* wAction = new KWidgetAction(m_quickFilter, i18n("Filter"), 0, 0, 0,
actionCollection(), "quick_filter");
@@ -907,12 +908,12 @@ void MainWindow::saveOptions() {
Config::setGroupViewSortAscending(m_groupView->ascendingSort());
if(m_loanView) {
- Config::setLoanViewSortAscending(m_loanView->sortStyle()); // ok to use SortColumn key, save semantics
+ Config::setLoanViewSortColumn(m_loanView->sortStyle()); // ok to use SortColumn key, save semantics
Config::setLoanViewSortAscending(m_loanView->ascendingSort());
}
if(m_filterView) {
- Config::setFilterViewSortAscending(m_filterView->sortStyle()); // ok to use SortColumn key, save semantics
+ Config::setFilterViewSortColumn(m_filterView->sortStyle()); // ok to use SortColumn key, save semantics
Config::setFilterViewSortAscending(m_filterView->ascendingSort());
}
@@ -991,7 +992,7 @@ void MainWindow::saveCollectionOptions(Data::CollPtr coll_) {
configIndex = i;
}
}
- uint limit = TQMIN(urls.count(), Config::maxCustomURLSettings());
+ size_t limit = TQMIN(urls.count(), Config::maxCustomURLSettings());
for(uint i = 0; i < limit; ++i) {
config.writeEntry(TQString::fromLatin1("URL_%1").arg(i), urls[i].url());
config.writeEntry(TQString::fromLatin1("Group By_%1").arg(i), groupBys[i]);
@@ -1531,11 +1532,11 @@ void MainWindow::slotEntryCount() {
return;
}
- int count = coll->entryCount();
+ size_t count = coll->entryCount();
TQString text = i18n("Total entries: %1").arg(count);
- int selectCount = Controller::self()->selectedEntries().count();
- int filterCount = m_detailedView->visibleItems();
+ size_t selectCount = Controller::self()->selectedEntries().count();
+ size_t filterCount = m_detailedView->visibleItems();
// if more than one book is selected, add the number of selected books
if(filterCount < count && selectCount > 1) {
text += TQChar(' ');
@@ -1848,6 +1849,10 @@ void MainWindow::setFilter(const TQString& text_) {
// if it isn't valid, hold off on applying the filter
TQRegExp tx(text);
if(!tx.isValid()) {
+ text = TQRegExp::escape(text);
+ tx.setPattern(text);
+ }
+ if(!tx.isValid()) {
myDebug() << "MainWindow::slotUpdateFilter() - invalid regexp: " << text << endl;
return;
}
@@ -2389,4 +2394,15 @@ void MainWindow::slotURLAction(const KURL& url_) {
}
}
+bool MainWindow::eventFilter(TQObject* obj_, TQEvent* ev_) {
+ if(ev_->type() == TQEvent::KeyPress && obj_ == m_quickFilter) {
+ switch(static_cast<TQKeyEvent*>(ev_)->key()) {
+ case TQt::Key_Escape:
+ m_quickFilter->clear();
+ return true;
+ }
+ }
+ return false;
+}
+
#include "mainwindow.moc"
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 6b790e1..535085c 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -123,6 +123,8 @@ public:
virtual void setFilter(const TQString& text);
virtual bool showEntry(long id);
+ bool eventFilter(TQObject* watched, TQEvent* event);
+
public slots:
/**
* Initializes some stuff after the object is created.
diff --git a/src/reportdialog.cpp b/src/reportdialog.cpp
index c47766e..6f6533a 100644
--- a/src/reportdialog.cpp
+++ b/src/reportdialog.cpp
@@ -197,7 +197,7 @@ void ReportDialog::slotSaveAs() {
if(!u.isEmpty() && u.isValid()) {
TDEConfigGroup config(TDEGlobal::config(), "ExportOptions");
bool encode = config.readBoolEntry("EncodeUTF8", true);
- int oldOpt = m_exporter->options();
+ long oldOpt = m_exporter->options();
// turn utf8 off
long options = oldOpt & ~Export::ExportUTF8;
diff --git a/src/tellico_debug.h b/src/tellico_debug.h
index ea65518..08a4912 100644
--- a/src/tellico_debug.h
+++ b/src/tellico_debug.h
@@ -22,7 +22,7 @@
// std::clock_t
#include <ctime>
-// linux has __GNUC_PREREQ, NetBSD has __GNUC_PREQ__
+// linux has __GNUC_PREREQ, NetBSD has __GNUC_PREREQ__
#if defined(__GNUC_PREREQ) && !defined(__GNUC_PREREQ__)
#define __GNUC_PREREQ__ __GNUC_PREREQ
#endif
diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am
index a0cdd59..3dc9d98 100644
--- a/src/tests/Makefile.am
+++ b/src/tests/Makefile.am
@@ -16,7 +16,7 @@ METASOURCES = AUTO
DISTCLEANFILES = *~ *.Po $(CLEANFILES)
isbntest_SOURCES = isbntest.cpp
-isbntest_LDADD = ../isbnvalidator.o $(LIB_QT) $(LIB_TDECORE) $(LIB_TDEUI)
+isbntest_LDADD = ../isbnvalidator.o ../upcvalidator.o $(LIB_QT) $(LIB_TDECORE) $(LIB_TDEUI)
latin1test_SOURCES = latin1test.cpp
latin1test_LDADD = $(LIB_QT) $(LIB_TDECORE)
diff --git a/src/translators/Makefile.am b/src/translators/Makefile.am
index fbbb11b..f0e8520 100644
--- a/src/translators/Makefile.am
+++ b/src/translators/Makefile.am
@@ -12,9 +12,9 @@ libtranslators_a_SOURCES = alexandriaexporter.cpp alexandriaimporter.cpp \
filelistingimporter.cpp freedb_util.cpp freedbimporter.cpp gcfilmsexporter.cpp \
gcfilmsimporter.cpp griffithimporter.cpp grs1importer.cpp htmlexporter.cpp libcsv.c \
onixexporter.cpp pdfimporter.cpp pilotdbexporter.cpp referencerimporter.cpp \
- risimporter.cpp tellico_xml.cpp tellicoimporter.cpp tellicoxmlexporter.cpp \
- tellicozipexporter.cpp textimporter.cpp xmlimporter.cpp xsltexporter.cpp xslthandler.cpp \
- xsltimporter.cpp
+ risimporter.cpp tellico_xml.cpp tellicoimporter.cpp tellicosaximporter.cpp \
+ tellicoxmlexporter.cpp tellicoxmlhandler.cpp tellicozipexporter.cpp textimporter.cpp \
+ xmlimporter.cpp xmlstatehandler.cpp xsltexporter.cpp xslthandler.cpp xsltimporter.cpp
if !USE_LIBBTPARSE
SUBDIR_LIBBTPARSE = btparse
@@ -51,7 +51,10 @@ dcimporter.h dcimporter.cpp griffithimporter.h \
griffithimporter.cpp griffith2tellico.py pdfimporter.h \
pdfimporter.cpp referencerimporter.h referencerimporter.cpp \
libcsv.h libcsv.c \
-deliciousimporter.h deliciousimporter.cpp
+deliciousimporter.h deliciousimporter.cpp \
+tellicosaximporter.h tellicosaximporter.cpp \
+tellicoxmlhandler.h tellicoxmlhandler.cpp \
+xmlstatehandler.h xmlstatehandler.cpp
####### tdevelop will overwrite this part!!! (end)############
@@ -68,3 +71,4 @@ KDE_OPTIONS = noautodist
appdir = $(kde_datadir)/tellico
app_DATA = bibtex-translation.xml
app_SCRIPTS = griffith2tellico.py
+
diff --git a/src/translators/alexandriaexporter.cpp b/src/translators/alexandriaexporter.cpp
index de64fbb..633864f 100644
--- a/src/translators/alexandriaexporter.cpp
+++ b/src/translators/alexandriaexporter.cpp
@@ -77,7 +77,7 @@ bool AlexandriaExporter::exec() {
ProgressItem& item = ProgressManager::self()->newProgressItem(this, TQString(), false);
item.setTotalSteps(entries().count());
ProgressItem::Done done(this);
- const uint stepSize = TQMIN(1, entries().count()/100);
+ const uint stepSize = TQMAX(1, entries().count()/100);
const bool showProgress = options() & ExportProgress;
GUI::CursorSaver cs;
diff --git a/src/translators/bibteximporter.cpp b/src/translators/bibteximporter.cpp
index fb52f95..d3668d4 100644
--- a/src/translators/bibteximporter.cpp
+++ b/src/translators/bibteximporter.cpp
@@ -308,5 +308,47 @@ TQWidget* BibtexImporter::widget(TQWidget* parent_, const char* name_/*=0*/) {
return m_widget;
}
+bool BibtexImporter::maybeBibtex(const KURL& url_) {
+ TQString text = FileHandler::readTextFile(url_, true /*quiet*/);
+ if(text.isEmpty()) {
+ return false;
+ }
+
+ bt_initialize();
+ TQRegExp rx(TQString::fromLatin1("[{}]"));
+
+ ushort bt_options = 0; // ushort is defined in btparse.h
+ boolean ok; // boolean is defined in btparse.h as an int
+ bool foundOne = false;
+ int brace = 0;
+ int startpos = 0;
+ int pos = text.find(rx, 0);
+ while(pos > 0) {
+ if(text[pos] == '{') {
+ ++brace;
+ } else if(text[pos] == '}' && brace > 0) {
+ --brace;
+ }
+ if(brace == 0) {
+ TQString entry = text.mid(startpos, pos-startpos+1).stripWhiteSpace();
+ // All the downstream text processing on the AST node will assume utf-8
+ AST* node = bt_parse_entry_s(const_cast<char*>(entry.utf8().data()),
+ const_cast<char*>(url_.fileName().local8Bit().data()),
+ 0, bt_options, &ok);
+ if(ok && node) {
+ foundOne = true;
+ break;
+ }
+ startpos = pos+1;
+ }
+ pos = text.find(rx, pos+1);
+ }
+ if(foundOne) {
+ // clean up some structures
+ bt_parse_entry_s(0, 0, 1, 0, 0);
+ }
+ bt_cleanup();
+ return foundOne;
+}
#include "bibteximporter.moc"
diff --git a/src/translators/bibteximporter.h b/src/translators/bibteximporter.h
index 6d1b878..09e1ec3 100644
--- a/src/translators/bibteximporter.h
+++ b/src/translators/bibteximporter.h
@@ -67,6 +67,8 @@ public:
virtual TQWidget* widget(TQWidget* parent, const char* name=0);
virtual bool canImport(int type) const;
+ static bool maybeBibtex(const KURL& url);
+
public slots:
void slotCancel();
diff --git a/src/translators/csvimporter.cpp b/src/translators/csvimporter.cpp
index 8a53ff9..d6198d0 100644
--- a/src/translators/csvimporter.cpp
+++ b/src/translators/csvimporter.cpp
@@ -50,15 +50,26 @@ extern "C" {
using Tellico::Import::CSVImporter;
+typedef int(*SpaceFunc)(char);
+
static void writeToken(char* buffer, size_t len, void* data);
static void writeRow(char buffer, void* data);
+static int isSpace(char c);
+static int isSpaceOrTab(char c);
+static int isTab(char c);
class CSVImporter::Parser {
public:
Parser(const TQString& str) : stream(new TQTextIStream(&str)) { csv_init(&parser, 0); }
~Parser() { csv_free(parser); delete stream; stream = 0; }
- void setDelimiter(const TQString& s) { Q_ASSERT(s.length() == 1); csv_set_delim(parser, s[0].latin1()); }
+ void setDelimiter(const TQString& s) {
+ Q_ASSERT(s.length() == 1);
+ csv_set_delim(parser, s[0].latin1());
+ if(s[0] == '\t') csv_set_space_func(parser, isSpace);
+ else if(s[0] == ' ') csv_set_space_func(parser, isTab);
+ else csv_set_space_func(parser, isSpaceOrTab);
+ }
void reset(const TQString& str) { delete stream; stream = new TQTextIStream(&str); };
bool hasNext() { return !stream->atEnd(); }
void skipLine() { stream->readLine(); }
@@ -95,6 +106,21 @@ static void writeRow(char c, void* data) {
p->setRowDone(true);
}
+static int isSpace(char c) {
+ if (c == CSV_SPACE) return 1;
+ return 0;
+}
+
+static int isSpaceOrTab(char c) {
+ if (c == CSV_SPACE || c == CSV_TAB) return 1;
+ return 0;
+}
+
+static int isTab(char c) {
+ if (c == CSV_TAB) return 1;
+ return 0;
+}
+
CSVImporter::CSVImporter(const KURL& url_) : Tellico::Import::TextImporter(url_),
m_coll(0),
m_existingCollection(0),
diff --git a/src/translators/deliciousimporter.cpp b/src/translators/deliciousimporter.cpp
index a82c006..be6fe3e 100644
--- a/src/translators/deliciousimporter.cpp
+++ b/src/translators/deliciousimporter.cpp
@@ -35,7 +35,9 @@ DeliciousImporter::DeliciousImporter(const KURL& url_) : XSLTImporter(url_) {
}
bool DeliciousImporter::canImport(int type) const {
- return type == Data::Collection::Book;
+ return type == Data::Collection::Book ||
+ type == Data::Collection::Video ||
+ type == Data::Collection::Game;
}
Tellico::Data::CollPtr DeliciousImporter::collection() {
@@ -51,7 +53,18 @@ Tellico::Data::CollPtr DeliciousImporter::collection() {
<< TQString::fromLatin1("Medium Covers/")
<< TQString::fromLatin1("Small Covers/")
<< TQString::fromLatin1("Plain Covers/");
- const TQString commField = TQString::fromLatin1("comments");
+ TQString commField;
+ switch(coll->type()) {
+ case Data::Collection::Book:
+ commField = TQString::fromLatin1("comments"); break;
+ case Data::Collection::Video:
+ commField = TQString::fromLatin1("plot"); break;
+ case Data::Collection::Game:
+ commField = TQString::fromLatin1("description"); break;
+ default:
+ myWarning() << "bad collection type:" << coll->type() << endl;
+ }
+
const TQString uuidField = TQString::fromLatin1("uuid");
const TQString coverField = TQString::fromLatin1("cover");
const bool isLocal = url().isLocalFile();
diff --git a/src/translators/freedb_util.cpp b/src/translators/freedb_util.cpp
index 07292af..2a2e5ed 100644
--- a/src/translators/freedb_util.cpp
+++ b/src/translators/freedb_util.cpp
@@ -365,7 +365,7 @@ FreeDBImporter::CDText FreeDBImporter::getCDText(const TQCString& drive_) {
}
}
if(cdtext.trackTitles.size() != cdtext.trackArtists.size()) {
- int size = TQMAX(cdtext.trackTitles.size(), cdtext.trackArtists.size());
+ size_t size = TQMAX(cdtext.trackTitles.size(), cdtext.trackArtists.size());
cdtext.trackTitles.resize(size);
cdtext.trackArtists.resize(size);
}
diff --git a/src/translators/htmlexporter.cpp b/src/translators/htmlexporter.cpp
index e27d6e5..e8bb95d 100644
--- a/src/translators/htmlexporter.cpp
+++ b/src/translators/htmlexporter.cpp
@@ -31,6 +31,7 @@
#include <tdeio/netaccess.h>
#include <tdeapplication.h>
#include <tdelocale.h>
+#include <kuser.h>
#include <tqdom.h>
#include <tqgroupbox.h>
@@ -192,6 +193,9 @@ bool HTMLExporter::loadXSLTFile() {
m_handler = 0;
return false;
}
+ m_handler->addStringParam("date", TQDate::currentDate().toString(TQt::ISODate).latin1());
+ m_handler->addStringParam("time", TQTime::currentTime().toString(TQt::ISODate).latin1());
+ m_handler->addStringParam("user", KUser(KUser::UseRealUserID).loginName().latin1());
if(m_exportEntryFiles) {
// export entries to same place as all the other date files
diff --git a/src/translators/risimporter.cpp b/src/translators/risimporter.cpp
index 735368c..0158708 100644
--- a/src/translators/risimporter.cpp
+++ b/src/translators/risimporter.cpp
@@ -188,7 +188,7 @@ void RISImporter::readURL(const KURL& url_, int n, const TQDict<Data::Field>& ri
// technically, the spec requires a space immediately after the hyphen
// however, at least one website (Springer) outputs RIS with no space after the final "ER -"
// so just strip the white space later
- // also be gracious and allow only any amount of space before hyphen
+ // also be gracious and allow any amount of space before hyphen
TQRegExp rx(TQString::fromLatin1("^(\\w\\w)\\s+-(.*)$"));
TQString currLine, nextLine;
for(currLine = t.readLine(); !m_cancelled && !currLine.isNull(); currLine = nextLine, j += currLine.length()) {
@@ -312,4 +312,25 @@ void RISImporter::slotCancel() {
m_cancelled = true;
}
+bool RISImporter::maybeRIS(const KURL& url_) {
+ TQString text = FileHandler::readTextFile(url_, true /*quiet*/);
+ if(text.isEmpty()) {
+ return false;
+ }
+
+ // bare bones check, strip white space at beginning
+ // and then first text line must be valid RIS
+ TQTextIStream t(&text);
+
+ TQRegExp rx(TQString::fromLatin1("^(\\w\\w)\\s+-(.*)$"));
+ TQString currLine;
+ for(currLine = t.readLine(); !currLine.isNull(); currLine = t.readLine()) {
+ if(currLine.stripWhiteSpace().isEmpty()) {
+ continue;
+ }
+ break;
+ }
+ return rx.exactMatch(currLine);
+}
+
#include "risimporter.moc"
diff --git a/src/translators/risimporter.h b/src/translators/risimporter.h
index fa581ba..a572283 100644
--- a/src/translators/risimporter.h
+++ b/src/translators/risimporter.h
@@ -50,6 +50,8 @@ public:
virtual TQWidget* widget(TQWidget*, const char*) { return 0; }
virtual bool canImport(int type) const;
+ static bool maybeRIS(const KURL& url);
+
public slots:
void slotCancel();
diff --git a/src/translators/tellico_xml.cpp b/src/translators/tellico_xml.cpp
index bcfb412..3a927d6 100644
--- a/src/translators/tellico_xml.cpp
+++ b/src/translators/tellico_xml.cpp
@@ -63,6 +63,12 @@ TQString Tellico::XML::dtdTellico(int version) {
return TQString::fromLatin1("http://periapsis.org/tellico/dtd/v%1/tellico.dtd").arg(version);
}
+// returns true if the file has to be converted
+// version 9 to 10 requires no conversion since it only added board games
+bool Tellico::XML::versionConversion(uint from, uint to) {
+ return from < to && (from != 9 || to != 10);
+}
+
bool Tellico::XML::validXMLElementName(const TQString& name_) {
return xmlValidateNameValue((xmlChar *)name_.utf8().data());
}
diff --git a/src/translators/tellico_xml.h b/src/translators/tellico_xml.h
index 6ff4c1b..6ffda10 100644
--- a/src/translators/tellico_xml.h
+++ b/src/translators/tellico_xml.h
@@ -28,6 +28,8 @@ namespace Tellico {
TQString pubTellico(int version = syntaxVersion);
TQString dtdTellico(int version = syntaxVersion);
+ bool versionConversion(uint from, uint to);
+
extern const TQString nsBookcase;
extern const TQString nsDublinCore;
extern const TQString nsZing;
diff --git a/src/translators/tellicoimporter.cpp b/src/translators/tellicoimporter.cpp
index a8dfb62..d722c0c 100644
--- a/src/translators/tellicoimporter.cpp
+++ b/src/translators/tellicoimporter.cpp
@@ -39,11 +39,6 @@
using Tellico::Import::TellicoImporter;
-bool TellicoImporter::versionConversion(uint from, uint to) {
- // version 10 only added board games to version 9
- return from < to && (from != 9 || to != 10);
-}
-
TellicoImporter::TellicoImporter(const KURL& url_, bool loadAllImages_) : DataImporter(url_),
m_coll(0), m_loadAllImages(loadAllImages_), m_format(Unknown), m_modified(false),
m_cancelled(false), m_hasImages(false), m_buffer(0), m_zip(0), m_imgDir(0) {
@@ -157,7 +152,7 @@ void TellicoImporter::loadXMLData(const TQByteArray& data_, bool loadImages_) {
}
m_format = Error;
return;
- } else if(versionConversion(syntaxVersion, XML::syntaxVersion)) {
+ } else if(XML::versionConversion(syntaxVersion, XML::syntaxVersion)) {
// going form version 9 to 10, there's no conversion needed
TQString str = i18n("Tellico is converting the file to a more recent document format. "
"Information loss may occur if an older version of Tellico is used "
@@ -374,7 +369,7 @@ void TellicoImporter::readField(uint syntaxVersion_, const TQDomElement& elem_)
Data::FieldPtr field;
if(type == Data::Field::Choice) {
- TQStringList allowed = TQStringList::split(TQString::fromLatin1(";"),
+ TQStringList allowed = TQStringList::split(TQRegExp(TQString::fromLatin1("\\s*;\\s*")),
elem_.attribute(TQString::fromLatin1("allowed")));
if(isI18n) {
for(TQStringList::Iterator it = allowed.begin(); it != allowed.end(); ++it) {
@@ -652,8 +647,9 @@ void TellicoImporter::readEntry(uint syntaxVersion_, const TQDomElement& entryEl
void TellicoImporter::readImage(const TQDomElement& elem_, bool loadImage_) {
TQString format = elem_.attribute(TQString::fromLatin1("format"));
const bool link = elem_.attribute(TQString::fromLatin1("link")) == Latin1Literal("true");
- TQString id = shareString(link ? elem_.attribute(TQString::fromLatin1("id"))
- : Data::Image::idClean(elem_.attribute(TQString::fromLatin1("id"))));
+ // idClean() already calls shareString()
+ TQString id = link ? shareString(elem_.attribute(TQString::fromLatin1("id")))
+ : Data::Image::idClean(elem_.attribute(TQString::fromLatin1("id")));
bool readInfo = true;
if(loadImage_) {
diff --git a/src/translators/tellicoimporter.h b/src/translators/tellicoimporter.h
index 93cf7da..6ea0ac5 100644
--- a/src/translators/tellicoimporter.h
+++ b/src/translators/tellicoimporter.h
@@ -70,8 +70,6 @@ public slots:
void slotCancel();
private:
- static bool versionConversion(uint from, uint to);
-
void loadXMLData(const TQByteArray& data, bool loadImages);
void loadZipData();
diff --git a/src/translators/tellicosaximporter.cpp b/src/translators/tellicosaximporter.cpp
new file mode 100644
index 0000000..de60c63
--- /dev/null
+++ b/src/translators/tellicosaximporter.cpp
@@ -0,0 +1,293 @@
+/***************************************************************************
+ copyright : (C) 2008 by Robby Stephenson
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of version 2 of the GNU General Public License as *
+ * published by the Free Software Foundation; *
+ * *
+ ***************************************************************************/
+
+// before tellicosaxmporter.h because of QT_NO_CAST_ASCII issues
+#include "tellicoxmlhandler.h"
+#include "tellicosaximporter.h"
+#include "tellico_xml.h"
+#include "../collectionfactory.h"
+#include "../collections/bibtexcollection.h"
+#include "../entry.h"
+#include "../field.h"
+#include "../imagefactory.h"
+#include "../image.h"
+#include "../isbnvalidator.h"
+#include "../latin1literal.h"
+#include "../tellico_strings.h"
+#include "../tellico_kernel.h"
+#include "../tellico_utils.h"
+#include "../tellico_debug.h"
+#include "../progressmanager.h"
+
+#include <tdelocale.h>
+#include <kmdcodec.h>
+#include <kzip.h>
+#include <tdeapplication.h>
+
+#include <tqbuffer.h>
+#include <tqfile.h>
+#include <tqtimer.h>
+
+using Tellico::Import::TellicoSaxImporter;
+
+TellicoSaxImporter::TellicoSaxImporter(const KURL& url_, bool loadAllImages_) : DataImporter(url_),
+ m_coll(0), m_loadAllImages(loadAllImages_), m_format(Unknown), m_modified(false),
+ m_cancelled(false), m_hasImages(false), m_buffer(0), m_zip(0), m_imgDir(0) {
+}
+
+TellicoSaxImporter::TellicoSaxImporter(const TQString& text_) : DataImporter(text_),
+ m_coll(0), m_loadAllImages(true), m_format(Unknown), m_modified(false),
+ m_cancelled(false), m_hasImages(false), m_buffer(0), m_zip(0), m_imgDir(0) {
+}
+
+TellicoSaxImporter::~TellicoSaxImporter() {
+ if(m_zip) {
+ m_zip->close();
+ }
+ delete m_zip;
+ m_zip = 0;
+ delete m_buffer;
+ m_buffer = 0;
+}
+
+Tellico::Data::CollPtr TellicoSaxImporter::collection() {
+ if(m_coll) {
+ return m_coll;
+ }
+
+ TQCString s; // read first 5 characters
+ if(source() == URL) {
+ if(!fileRef().open()) {
+ return 0;
+ }
+ TQIODevice* f = fileRef().file();
+ for(uint i = 0; i < 5; ++i) {
+ s += static_cast<char>(f->getch());
+ }
+ f->reset();
+ } else {
+ if(data().size() < 5) {
+ m_format = Error;
+ return 0;
+ }
+ s = TQCString(data(), 6);
+ }
+
+ // need to decide if the data is xml text, or a zip file
+ // if the first 5 characters are <?xml then treat it like text
+ if(s[0] == '<' && s[1] == '?' && s[2] == 'x' && s[3] == 'm' && s[4] == 'l') {
+ m_format = XML;
+ loadXMLData(source() == URL ? fileRef().file()->readAll() : data(), true);
+ } else {
+ m_format = Zip;
+ loadZipData();
+ }
+ return m_coll;
+}
+
+void TellicoSaxImporter::loadXMLData(const TQByteArray& data_, bool loadImages_) {
+ ProgressItem& item = ProgressManager::self()->newProgressItem(this, progressLabel(), true);
+ item.setTotalSteps(data_.size());
+ connect(&item, SIGNAL(signalCancelled(ProgressItem*)), SLOT(slotCancel()));
+ ProgressItem::Done done(this);
+
+ const bool showProgress = options() & ImportProgress;
+
+ TellicoXMLHandler handler;
+ handler.setLoadImages(loadImages_);
+
+ TQXmlSimpleReader reader;
+ reader.setContentHandler(&handler);
+
+ TQXmlInputSource source;
+ bool success = reader.parse(&source, true);
+
+ const uint blockSize = data_.size()/100 + 1;
+ uint pos = 0;
+ TQByteArray block;
+
+ while(success && !m_cancelled && pos < data_.size()) {
+ uint size = TQMIN(blockSize, data_.size() - pos);
+ block.setRawData(data_.data() + pos, size);
+ source.setData(block);
+ success = reader.parseContinue();
+ block.resetRawData(data_.data() + pos, size);
+ pos += blockSize;
+ if(showProgress) {
+ ProgressManager::self()->setProgress(this, pos);
+ kapp->processEvents();
+ }
+ }
+
+ if(!success) {
+ m_format = Error;
+ TQString error;
+ if(!url().isEmpty()) {
+ error = i18n(errorLoad).arg(url().fileName()) + TQChar('\n');
+ }
+ error += handler.errorString();
+ myDebug() << error << endl;
+ setStatusMessage(error);
+ return;
+ }
+
+ if(!m_cancelled) {
+ m_hasImages = handler.hasImages();
+ m_coll = handler.collection();
+ }
+}
+
+void TellicoSaxImporter::loadZipData() {
+ delete m_buffer;
+ delete m_zip;
+ if(source() == URL) {
+ m_buffer = 0;
+ m_zip = new KZip(fileRef().fileName());
+ } else {
+ m_buffer = new TQBuffer(data());
+ m_zip = new KZip(m_buffer);
+ }
+ if(!m_zip->open(IO_ReadOnly)) {
+ setStatusMessage(i18n(errorLoad).arg(url().fileName()));
+ m_format = Error;
+ delete m_zip;
+ m_zip = 0;
+ delete m_buffer;
+ m_buffer = 0;
+ return;
+ }
+
+ const KArchiveDirectory* dir = m_zip->directory();
+ if(!dir) {
+ TQString str = i18n(errorLoad).arg(url().fileName()) + TQChar('\n');
+ str += i18n("The file is empty.");
+ setStatusMessage(str);
+ m_format = Error;
+ m_zip->close();
+ delete m_zip;
+ m_zip = 0;
+ delete m_buffer;
+ m_buffer = 0;
+ return;
+ }
+
+ // main file was changed from bookcase.xml to tellico.xml as of version 0.13
+ const KArchiveEntry* entry = dir->entry(TQString::fromLatin1("tellico.xml"));
+ if(!entry) {
+ entry = dir->entry(TQString::fromLatin1("bookcase.xml"));
+ }
+ if(!entry || !entry->isFile()) {
+ TQString str = i18n(errorLoad).arg(url().fileName()) + TQChar('\n');
+ str += i18n("The file contains no collection data.");
+ setStatusMessage(str);
+ m_format = Error;
+ m_zip->close();
+ delete m_zip;
+ m_zip = 0;
+ delete m_buffer;
+ m_buffer = 0;
+ return;
+ }
+
+ const TQByteArray xmlData = static_cast<const KArchiveFile*>(entry)->data();
+ loadXMLData(xmlData, false);
+ if(!m_coll) {
+ m_format = Error;
+ m_zip->close();
+ delete m_zip;
+ m_zip = 0;
+ delete m_buffer;
+ m_buffer = 0;
+ return;
+ }
+
+ if(m_cancelled) {
+ m_zip->close();
+ delete m_zip;
+ m_zip = 0;
+ delete m_buffer;
+ m_buffer = 0;
+ return;
+ }
+
+ const KArchiveEntry* imgDirEntry = dir->entry(TQString::fromLatin1("images"));
+ if(!imgDirEntry || !imgDirEntry->isDirectory()) {
+ m_zip->close();
+ delete m_zip;
+ m_zip = 0;
+ delete m_buffer;
+ m_buffer = 0;
+ return;
+ }
+ m_imgDir = static_cast<const KArchiveDirectory*>(imgDirEntry);
+ m_images.clear();
+ m_images.add(m_imgDir->entries());
+ m_hasImages = !m_images.isEmpty();
+
+ // if all the images are not to be loaded, then we're done
+ if(!m_loadAllImages) {
+// myLog() << "TellicoSaxImporter::loadZipData() - delayed loading for " << m_images.count() << " images" << endl;
+ return;
+ }
+
+ const TQStringList images = static_cast<const KArchiveDirectory*>(imgDirEntry)->entries();
+ const uint stepSize = TQMAX(s_stepSize, images.count()/100);
+
+ uint j = 0;
+ for(TQStringList::ConstIterator it = images.begin(); !m_cancelled && it != images.end(); ++it, ++j) {
+ const KArchiveEntry* file = m_imgDir->entry(*it);
+ if(file && file->isFile()) {
+ ImageFactory::addImage(static_cast<const KArchiveFile*>(file)->data(),
+ (*it).section('.', -1).upper(), (*it));
+ m_images.remove(*it);
+ }
+ if(j%stepSize == 0) {
+ kapp->processEvents();
+ }
+ }
+
+ if(m_images.isEmpty()) {
+ // give it some time
+ TQTimer::singleShot(3000, this, SLOT(deleteLater()));
+ }
+}
+
+bool TellicoSaxImporter::hasImages() const {
+ return m_hasImages;
+}
+
+bool TellicoSaxImporter::loadImage(const TQString& id_) {
+// myLog() << "TellicoSaxImporter::loadImage() - id = " << id_ << endl;
+ if(m_format != Zip || !m_imgDir) {
+ return false;
+ }
+ const KArchiveEntry* file = m_imgDir->entry(id_);
+ if(!file || !file->isFile()) {
+ return false;
+ }
+ TQString newID = ImageFactory::addImage(static_cast<const KArchiveFile*>(file)->data(),
+ id_.section('.', -1).upper(), id_);
+ m_images.remove(id_);
+ if(m_images.isEmpty()) {
+ // give it some time
+ TQTimer::singleShot(3000, this, SLOT(deleteLater()));
+ }
+ return !newID.isEmpty();
+}
+
+void TellicoSaxImporter::slotCancel() {
+ m_cancelled = true;
+ m_format = Cancel;
+}
+
+#include "tellicosaximporter.moc"
diff --git a/src/translators/tellicosaximporter.h b/src/translators/tellicosaximporter.h
new file mode 100644
index 0000000..056f60f
--- /dev/null
+++ b/src/translators/tellicosaximporter.h
@@ -0,0 +1,87 @@
+/***************************************************************************
+ copyright : (C) 2008 by Robby Stephenson
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of version 2 of the GNU General Public License as *
+ * published by the Free Software Foundation; *
+ * *
+ ***************************************************************************/
+
+#ifndef TELLICO_IMPORT_TELLICOSAXIMPORTER_H
+#define TELLICO_IMPORT_TELLICOSAXIMPORTER_H
+
+#include "dataimporter.h"
+#include "../datavectors.h"
+#include "../stringset.h"
+
+class TQBuffer;
+class KZip;
+class KArchiveDirectory;
+
+namespace Tellico {
+ namespace Import {
+
+/**
+ * @author Robby Stephenson
+ */
+class TellicoSaxImporter : public DataImporter {
+Q_OBJECT
+
+public:
+ enum Format { Unknown, Error, XML, Zip, Cancel };
+
+ /**
+ * @param url The tellico data file.
+ */
+ TellicoSaxImporter(const KURL& url, bool loadAllImages=true);
+ /**
+ * Constructor used to convert arbitrary text to a @ref Collection
+ *
+ * @param text The text
+ */
+ TellicoSaxImporter(const TQString& text);
+ virtual ~TellicoSaxImporter();
+
+ /**
+ * sometimes, a new document format might add data
+ */
+ bool modifiedOriginal() const { return m_modified; }
+
+ /**
+ */
+ virtual Data::CollPtr collection();
+ Format format() const { return m_format; }
+
+ bool hasImages() const;
+ bool loadImage(const TQString& id_);
+
+ static bool loadAllImages(const KURL& url);
+
+public slots:
+ void slotCancel();
+
+private:
+ void loadXMLData(const TQByteArray& data, bool loadImages);
+ void loadZipData();
+
+ Data::CollPtr m_coll;
+ bool m_loadAllImages;
+ TQString m_namespace;
+ Format m_format;
+ bool m_modified : 1;
+ bool m_cancelled : 1;
+ bool m_hasImages : 1;
+ StringSet m_images;
+
+ TQBuffer* m_buffer;
+ KZip* m_zip;
+ const KArchiveDirectory* m_imgDir;
+};
+
+ } // end namespace
+} // end namespace
+#endif
diff --git a/src/translators/tellicoxmlhandler.cpp b/src/translators/tellicoxmlhandler.cpp
new file mode 100644
index 0000000..5b3f063
--- /dev/null
+++ b/src/translators/tellicoxmlhandler.cpp
@@ -0,0 +1,74 @@
+/***************************************************************************
+ copyright : (C) 2008 by Robby Stephenson
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of version 2 of the GNU General Public License as *
+ * published by the Free Software Foundation; *
+ * *
+ ***************************************************************************/
+
+#include "tellicoxmlhandler.h"
+#include "../collection.h"
+#include "../tellico_debug.h"
+
+using Tellico::Import::TellicoXMLHandler;
+
+TellicoXMLHandler::TellicoXMLHandler() : TQXmlDefaultHandler(), m_data(new SAX::StateData) {
+ m_handlers.setAutoDelete(true);
+ m_handlers.push(new SAX::RootHandler(m_data));
+}
+
+TellicoXMLHandler::~TellicoXMLHandler() {
+ delete m_data;
+ m_data = 0;
+}
+
+bool TellicoXMLHandler::startElement(const TQString& nsURI_, const TQString& localName_,
+ const TQString& qName_, const TQXmlAttributes& atts_) {
+ SAX::StateHandler* handler = m_handlers.top()->nextHandler(nsURI_, localName_, qName_);
+ Q_ASSERT(handler);
+ m_handlers.push(handler);
+ return handler->start(nsURI_, localName_, qName_, atts_);
+}
+
+bool TellicoXMLHandler::endElement(const TQString& nsURI_, const TQString& localName_,
+ const TQString& qName_) {
+ m_data->text = m_data->text.stripWhiteSpace();
+/*
+ if(!m_data->text.isEmpty()) {
+ myDebug() << " text: " << m_text << endl;
+ }
+*/
+
+ SAX::StateHandler* handler = m_handlers.pop();
+ bool res = handler->end(nsURI_, localName_, qName_);
+ // need to reset character data, too
+ m_data->text = TQString();
+ delete handler;
+ return res;
+}
+
+bool TellicoXMLHandler::characters(const TQString& ch_) {
+ m_data->text += ch_;
+ return true;
+}
+
+TQString TellicoXMLHandler::errorString() {
+ return m_data->error;
+}
+
+Tellico::Data::CollPtr TellicoXMLHandler::collection() const {
+ return m_data->coll;
+}
+
+bool TellicoXMLHandler::hasImages() const {
+ return m_data->hasImages;
+}
+
+void TellicoXMLHandler::setLoadImages(bool loadImages_) {
+ m_data->loadImages = loadImages_;
+}
diff --git a/src/translators/tellicoxmlhandler.h b/src/translators/tellicoxmlhandler.h
new file mode 100644
index 0000000..1edeacc
--- /dev/null
+++ b/src/translators/tellicoxmlhandler.h
@@ -0,0 +1,49 @@
+/***************************************************************************
+ copyright : (C) 2008 by Robby Stephenson
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of version 2 of the GNU General Public License as *
+ * published by the Free Software Foundation; *
+ * *
+ ***************************************************************************/
+
+#ifndef TELLICO_IMPORT_TELLICOXMLHANDLER_H
+#define TELLICO_IMPORT_TELLICOXMLHANDLER_H
+
+#include "xmlstatehandler.h"
+
+#include <tqptrstack.h>
+
+namespace Tellico {
+ namespace Import {
+
+class TellicoXMLHandler : public TQXmlDefaultHandler {
+public:
+ TellicoXMLHandler();
+ ~TellicoXMLHandler();
+
+ virtual bool startElement(const TQString& namespaceURI, const TQString& localName,
+ const TQString& qName, const TQXmlAttributes& atts);
+ virtual bool endElement(const TQString& namespaceURI, const TQString& localName,
+ const TQString& qName);
+ virtual bool characters(const TQString& ch);
+
+ virtual TQString errorString();
+
+ Data::CollPtr collection() const;
+ bool hasImages() const;
+
+ void setLoadImages(bool loadImages);
+
+private:
+ TQPtrStack<SAX::StateHandler> m_handlers;
+ SAX::StateData* m_data;
+};
+
+ }
+}
+#endif
diff --git a/src/translators/xmlstatehandler.cpp b/src/translators/xmlstatehandler.cpp
new file mode 100644
index 0000000..48d52d6
--- /dev/null
+++ b/src/translators/xmlstatehandler.cpp
@@ -0,0 +1,772 @@
+/***************************************************************************
+ copyright : (C) 2008 by Robby Stephenson
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of version 2 of the GNU General Public License as *
+ * published by the Free Software Foundation; *
+ * *
+ ***************************************************************************/
+
+#include "xmlstatehandler.h"
+#include "tellico_xml.h"
+#include "../latin1literal.h"
+#include "../collection.h"
+#include "../collectionfactory.h"
+#include "../collections/bibtexcollection.h"
+#include "../image.h"
+#include "../imagefactory.h"
+#include "../isbnvalidator.h"
+#include "../tellico_utils.h"
+#include "../tellico_debug.h"
+
+#include <tdelocale.h>
+#include <kmdcodec.h>
+
+namespace {
+
+inline
+TQString attValue(const TQXmlAttributes& atts, const char* name, const TQString& defaultValue=TQString()) {
+ int idx = atts.index(TQString::fromLatin1(name));
+ return idx < 0 ? defaultValue : atts.value(idx);
+}
+
+inline
+TQString attValue(const TQXmlAttributes& atts, const char* name, const char* defaultValue) {
+ Q_ASSERT(defaultValue);
+ return attValue(atts, name, TQString::fromLatin1(defaultValue));
+}
+
+}
+
+using Tellico::Import::SAX::StateHandler;
+using Tellico::Import::SAX::NullHandler;
+using Tellico::Import::SAX::RootHandler;
+using Tellico::Import::SAX::DocumentHandler;
+using Tellico::Import::SAX::CollectionHandler;
+using Tellico::Import::SAX::FieldsHandler;
+using Tellico::Import::SAX::FieldHandler;
+using Tellico::Import::SAX::FieldPropertyHandler;
+using Tellico::Import::SAX::BibtexPreambleHandler;
+using Tellico::Import::SAX::BibtexMacrosHandler;
+using Tellico::Import::SAX::BibtexMacroHandler;
+using Tellico::Import::SAX::EntryHandler;
+using Tellico::Import::SAX::FieldValueContainerHandler;
+using Tellico::Import::SAX::FieldValueHandler;
+using Tellico::Import::SAX::DateValueHandler;
+using Tellico::Import::SAX::TableColumnHandler;
+using Tellico::Import::SAX::ImagesHandler;
+using Tellico::Import::SAX::ImageHandler;
+using Tellico::Import::SAX::FiltersHandler;
+using Tellico::Import::SAX::FilterHandler;
+using Tellico::Import::SAX::FilterRuleHandler;
+using Tellico::Import::SAX::BorrowersHandler;
+using Tellico::Import::SAX::BorrowerHandler;
+using Tellico::Import::SAX::LoanHandler;
+
+StateHandler* StateHandler::nextHandler(const TQString& ns_, const TQString& localName_, const TQString& qName_) {
+ StateHandler* handler = nextHandlerImpl(ns_, localName_, qName_);
+ if(!handler) {
+ myWarning() << "StateHandler::nextHandler() - no handler for " << localName_ << endl;
+ }
+ return handler ? handler : new NullHandler(d);
+}
+
+StateHandler* RootHandler::nextHandlerImpl(const TQString&, const TQString& localName_, const TQString&) {
+ if(localName_ == Latin1Literal("tellico") || localName_ == Latin1Literal("bookcase")) {
+ return new DocumentHandler(d);
+ }
+ return new RootHandler(d);
+}
+
+StateHandler* DocumentHandler::nextHandlerImpl(const TQString&, const TQString& localName_, const TQString&) {
+ if(localName_ == Latin1Literal("collection")) {
+ return new CollectionHandler(d);
+ } else if(localName_ == Latin1Literal("filters")) {
+ return new FiltersHandler(d);
+ } else if(localName_ == Latin1Literal("borrowers")) {
+ return new BorrowersHandler(d);
+ }
+ return 0;
+}
+
+bool DocumentHandler::start(const TQString&, const TQString& localName_, const TQString&, const TQXmlAttributes& atts_) {
+ // the syntax version field name changed from "version" to "syntaxVersion" in version 3
+ int idx = atts_.index(TQString::fromLatin1("syntaxVersion"));
+ if(idx < 0) {
+ idx = atts_.index(TQString::fromLatin1("version"));
+ }
+ if(idx < 0) {
+ myWarning() << "RootHandler::start() - no syntax version" << endl;
+ return false;
+ }
+ d->syntaxVersion = atts_.value(idx).toUInt();
+ if(d->syntaxVersion > Tellico::XML::syntaxVersion) {
+ d->error = i18n("It is from a future version of Tellico.");
+ return false;
+ } else if(Tellico::XML::versionConversion(d->syntaxVersion, Tellico::XML::syntaxVersion)) {
+ // going from version 9 to 10, there's no conversion needed
+ TQString str = i18n("Tellico is converting the file to a more recent document format. "
+ "Information loss may occur if an older version of Tellico is used "
+ "to read this file in the future.");
+ myDebug() << str << endl;
+ }
+ if((d->syntaxVersion > 6 && localName_ != Latin1Literal("tellico")) ||
+ (d->syntaxVersion < 7 && localName_ != Latin1Literal("bookcase"))) {
+ // no error message
+ myWarning() << "RootHandler::start() - bad root element name" << endl;
+ return false;
+ }
+ d->ns = d->syntaxVersion > 6 ? Tellico::XML::nsTellico : Tellico::XML::nsBookcase;
+ return true;
+}
+
+bool DocumentHandler::end(const TQString&, const TQString&, const TQString&) {
+ return true;
+}
+
+StateHandler* CollectionHandler::nextHandlerImpl(const TQString&, const TQString& localName_, const TQString&) {
+ if((d->syntaxVersion > 3 && localName_ == Latin1Literal("fields")) ||
+ (d->syntaxVersion < 4 && localName_ == Latin1Literal("attributes"))) {
+ return new FieldsHandler(d);
+ } else if(localName_ == Latin1Literal("bibtex-preamble")) {
+ return new BibtexPreambleHandler(d);
+ } else if(localName_ == Latin1Literal("macros")) {
+ return new BibtexMacrosHandler(d);
+ } else if(localName_ == d->entryName) {
+ return new EntryHandler(d);
+ } else if(localName_ == Latin1Literal("images")) {
+ return new ImagesHandler(d);
+ }
+ return 0;
+}
+
+bool CollectionHandler::start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes& atts_) {
+ d->collTitle = attValue(atts_, "title");
+ d->collType = attValue(atts_, "type").toInt();
+ d->entryName = attValue(atts_, "unit");
+
+ Q_ASSERT(d->collType);
+ return true;
+}
+
+bool CollectionHandler::end(const TQString&, const TQString&, const TQString&) {
+ d->coll->addEntries(d->entries);
+ // a little hidden capability was to just have a local path as an image file name
+ // and on reading the xml file, Tellico would load the image file, too
+ // here, we need to scan all the image values in all the entries and check
+ // maybe this is too costly, especially since the capability wasn't advertised?
+ Data::FieldVec fields = d->coll->imageFields();
+ for(Data::EntryVecIt entry = d->entries.begin(); entry != d->entries.end(); ++entry) {
+ for(Data::FieldVecIt field = fields.begin(); field != fields.end(); ++field) {
+ TQString value = entry->field(field, false);
+ // image info should have already been loaded
+ const Data::ImageInfo& info = ImageFactory::imageInfo(value);
+ // possible that value needs to be cleaned first in which case info is null
+ if(info.isNull() || !info.linkOnly) {
+ // for local files only, allow paths here
+ KURL u = KURL::fromPathOrURL(value);
+ if(u.isValid() && u.isLocalFile()) {
+ TQString result = ImageFactory::addImage(u, false /* quiet */);
+ if(!result.isEmpty()) {
+ value = result;
+ }
+ }
+ value = Data::Image::idClean(value);
+ entry->setField(field->name(), value);
+ }
+ }
+ }
+ return true;
+}
+
+StateHandler* FieldsHandler::nextHandlerImpl(const TQString&, const TQString& localName_, const TQString&) {
+ if((d->syntaxVersion > 3 && localName_ == Latin1Literal("field")) ||
+ (d->syntaxVersion < 4 && localName_ == Latin1Literal("attribute"))) {
+ return new FieldHandler(d);
+ }
+ return 0;
+}
+
+bool FieldsHandler::start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&) {
+ d->defaultFields = false;
+ return true;
+}
+
+bool FieldsHandler::end(const TQString&, const TQString&, const TQString&) {
+ // add default fields if there was a default field name, or no names at all
+ const bool addFields = d->defaultFields || d->fields.isEmpty();
+ // in syntax 4, the element name was changed to "entry", always, rather than depending on
+ // on the entryName of the collection.
+ if(d->syntaxVersion > 3) {
+ d->entryName = TQString::fromLatin1("entry");
+ Data::Collection::Type type = static_cast<Data::Collection::Type>(d->collType);
+ d->coll = CollectionFactory::collection(type, addFields);
+ } else {
+ d->coll = CollectionFactory::collection(d->entryName, addFields);
+ }
+
+ if(!d->collTitle.isEmpty()) {
+ d->coll->setTitle(d->collTitle);
+ }
+
+ d->coll->addFields(d->fields);
+
+// as a special case, for old book collections with a bibtex-id field, convert to Bibtex
+ if(d->syntaxVersion < 4 && d->collType == Data::Collection::Book
+ && d->coll->hasField(TQString::fromLatin1("bibtex-id"))) {
+ d->coll = Data::BibtexCollection::convertBookCollection(d->coll);
+ }
+
+ return true;
+}
+
+StateHandler* FieldHandler::nextHandlerImpl(const TQString&, const TQString& localName_, const TQString&) {
+ if(localName_ == Latin1Literal("prop")) {
+ return new FieldPropertyHandler(d);
+ }
+ return 0;
+}
+
+bool FieldHandler::start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes& atts_) {
+ // special case: if the i18n attribute equals true, then translate the title, description, and category
+ const bool isI18n = attValue(atts_, "i18n") == Latin1Literal("true");
+
+ TQString name = attValue(atts_, "name", "unknown");
+ if(name == Latin1Literal("_default")) {
+ d->defaultFields = true;
+ return true;
+ }
+
+ TQString title = attValue(atts_, "title", i18n("Unknown"));
+ if(isI18n) {
+ title = i18n(title.utf8());
+ }
+
+ TQString typeStr = attValue(atts_, "type", TQString::number(Data::Field::Line));
+ Data::Field::Type type = static_cast<Data::Field::Type>(typeStr.toInt());
+
+ Data::FieldPtr field;
+ if(type == Data::Field::Choice) {
+ TQStringList allowed = TQStringList::split(TQRegExp(TQString::fromLatin1("\\s*;\\s*")),
+ attValue(atts_, "allowed"));
+ if(isI18n) {
+ for(TQStringList::Iterator word = allowed.begin(); word != allowed.end(); ++word) {
+ (*word) = i18n((*word).utf8());
+ }
+ }
+ field = new Data::Field(name, title, allowed);
+ } else {
+ field = new Data::Field(name, title, type);
+ }
+
+ int idx = atts_.index(TQString::fromLatin1("category"));
+ if(idx > -1) {
+ // at one point, the categories had keyboard accels
+ TQString cat = atts_.value(idx);
+ if(d->syntaxVersion < 9 && cat.find('&') > -1) {
+ cat.remove('&');
+ }
+ if(isI18n) {
+ cat = i18n(cat.utf8());
+ }
+ field->setCategory(cat);
+ }
+
+ idx = atts_.index(TQString::fromLatin1("flags"));
+ if(idx > -1) {
+ int flags = atts_.value(idx).toInt();
+ // I also changed the enum values for syntax 3, but the only custom field
+ // would have been bibtex-id
+ if(d->syntaxVersion < 3 && name == Latin1Literal("bibtex-id")) {
+ flags = 0;
+ }
+
+ // in syntax version 4, added a flag to disallow deleting attributes
+ // if it's a version before that and is the title, then add the flag
+ if(d->syntaxVersion < 4 && name == Latin1Literal("title")) {
+ flags |= Data::Field::NoDelete;
+ }
+ field->setFlags(flags);
+ }
+
+ TQString formatStr = attValue(atts_, "format", TQString::number(Data::Field::FormatNone));
+ Data::Field::FormatFlag format = static_cast<Data::Field::FormatFlag>(formatStr.toInt());
+ field->setFormatFlag(format);
+
+ idx = atts_.index(TQString::fromLatin1("description"));
+ if(idx > -1) {
+ TQString desc = atts_.value(idx);
+ if(isI18n) {
+ desc = i18n(desc.utf8());
+ }
+ field->setDescription(desc);
+ }
+
+ if(d->syntaxVersion < 5 && atts_.index(TQString::fromLatin1("bibtex-field")) > -1) {
+ field->setProperty(TQString::fromLatin1("bibtex"), attValue(atts_, "bibtex-field"));
+ }
+
+ // Table2 is deprecated
+ if(type == Data::Field::Table2) {
+ field->setType(Data::Field::Table);
+ field->setProperty(TQString::fromLatin1("columns"), TQChar('2'));
+ }
+
+ // for syntax 8, rating fields got their own type
+ if(d->syntaxVersion < 8) {
+ Data::Field::convertOldRating(field); // does all its own checking
+ }
+ d->fields.append(field);
+
+ return true;
+}
+
+bool FieldHandler::end(const TQString&, const TQString&, const TQString&) {
+ return true;
+}
+
+bool FieldPropertyHandler::start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes& atts_) {
+ // there should be at least one field already so we can add properties to it
+ Q_ASSERT(!d->fields.isEmpty());
+ Data::FieldPtr field = d->fields.back();
+
+ m_propertyName = attValue(atts_, "name");
+
+ // all track fields in music collections prior to version 9 get converted to three columns
+ if(d->syntaxVersion < 9) {
+ if(d->collType == Data::Collection::Album && field->name() == Latin1Literal("track")) {
+ field->setProperty(TQString::fromLatin1("columns"), TQChar('3'));
+ field->setProperty(TQString::fromLatin1("column1"), i18n("Title"));
+ field->setProperty(TQString::fromLatin1("column2"), i18n("Artist"));
+ field->setProperty(TQString::fromLatin1("column3"), i18n("Length"));
+ } else if(d->collType == Data::Collection::Video && field->name() == Latin1Literal("cast")) {
+ field->setProperty(TQString::fromLatin1("column1"), i18n("Actor/Actress"));
+ field->setProperty(TQString::fromLatin1("column2"), i18n("Role"));
+ }
+ }
+
+ return true;
+}
+
+bool FieldPropertyHandler::end(const TQString&, const TQString&, const TQString&) {
+ Q_ASSERT(!m_propertyName.isEmpty());
+ // add the previous property
+ Data::FieldPtr field = d->fields.back();
+ field->setProperty(m_propertyName, d->text);
+ return true;
+}
+
+bool BibtexPreambleHandler::start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&) {
+ return true;
+}
+
+bool BibtexPreambleHandler::end(const TQString&, const TQString&, const TQString&) {
+ Q_ASSERT(d->coll);
+ if(d->coll && d->collType == Data::Collection::Bibtex && !d->text.isEmpty()) {
+ Data::BibtexCollection* c = static_cast<Data::BibtexCollection*>(d->coll.data());
+ c->setPreamble(d->text);
+ }
+ return true;
+}
+
+StateHandler* BibtexMacrosHandler::nextHandlerImpl(const TQString&, const TQString& localName_, const TQString&) {
+ if(localName_ == Latin1Literal("macro")) {
+ return new BibtexMacroHandler(d);
+ }
+ return 0;
+}
+
+bool BibtexMacrosHandler::start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&) {
+ return true;
+}
+
+bool BibtexMacrosHandler::end(const TQString&, const TQString&, const TQString&) {
+ return true;
+}
+
+bool BibtexMacroHandler::start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes& atts_) {
+ m_macroName = attValue(atts_, "name");
+ return true;
+}
+
+bool BibtexMacroHandler::end(const TQString&, const TQString&, const TQString&) {
+ if(d->coll && d->collType == Data::Collection::Bibtex && !m_macroName.isEmpty() && !d->text.isEmpty()) {
+ Data::BibtexCollection* c = static_cast<Data::BibtexCollection*>(d->coll.data());
+ c->addMacro(m_macroName, d->text);
+ }
+ return true;
+}
+
+StateHandler* EntryHandler::nextHandlerImpl(const TQString&, const TQString& localName_, const TQString&) {
+ if(d->coll->hasField(localName_)) {
+ return new FieldValueHandler(d);
+ }
+ return new FieldValueContainerHandler(d);
+}
+
+bool EntryHandler::start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes& atts_) {
+ // the entries must come after the fields
+ if(!d->coll || d->coll->fields().isEmpty()) {
+ myWarning() << "EntryHandler::start() - entries must come after fields are defined" << endl;
+ // TODO: i18n
+ d->error = TQString::fromLatin1("File format error: entries must come after fields are defined");
+ return false;
+ }
+ int id = attValue(atts_, "id").toInt();
+ Data::EntryPtr entry;
+ if(id > 0) {
+ entry = new Data::Entry(d->coll, id);
+ } else {
+ entry = new Data::Entry(d->coll);
+ }
+ d->entries.append(entry);
+ return true;
+}
+
+bool EntryHandler::end(const TQString&, const TQString&, const TQString&) {
+ return true;
+}
+
+StateHandler* FieldValueContainerHandler::nextHandlerImpl(const TQString&, const TQString& localName_, const TQString&) {
+ if(d->coll->hasField(localName_)) {
+ return new FieldValueHandler(d);
+ }
+ return new FieldValueContainerHandler(d);
+}
+
+bool FieldValueContainerHandler::start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&) {
+ return true;
+}
+
+bool FieldValueContainerHandler::end(const TQString&, const TQString&, const TQString&) {
+ return true;
+}
+
+StateHandler* FieldValueHandler::nextHandlerImpl(const TQString&, const TQString& localName_, const TQString&) {
+ if(localName_ == Latin1Literal("year") ||
+ localName_ == Latin1Literal("month") ||
+ localName_ == Latin1Literal("day")) {
+ return new DateValueHandler(d);
+ } else if(localName_ == Latin1Literal("column")) {
+ return new TableColumnHandler(d);
+ }
+ return 0;
+}
+
+bool FieldValueHandler::start(const TQString&, const TQString&, const TQString& localName_, const TQXmlAttributes& atts_) {
+ d->currentField = d->coll->fieldByName(localName_);
+ m_i18n = attValue(atts_, "i18n") == Latin1Literal("true");
+ m_validateISBN = attValue(atts_, "validate") != Latin1Literal("no");
+ return true;
+}
+
+bool FieldValueHandler::end(const TQString&, const TQString& localName_, const TQString&) {
+ Data::FieldPtr f = d->coll->fieldByName(localName_);
+ if(!f) {
+ myWarning() << "FieldValueHandler::end() - no field named " << localName_ << endl;
+ return true;
+ }
+ // if it's a derived value, no field value is added
+ if(f->type() == Data::Field::Dependent) {
+ return true;
+ }
+
+ Data::EntryPtr entry = d->entries.back();
+ Q_ASSERT(entry);
+ TQString fieldName = localName_;
+ TQString fieldValue = d->text;
+
+ if(d->syntaxVersion < 2 && fieldName == Latin1Literal("keywords")) {
+ // in version 2, "keywords" changed to "keyword"
+ fieldName = TQString::fromLatin1("keyword");
+ } else if(d->syntaxVersion < 4 && f->type() == Data::Field::Bool) {
+ // in version 3 and prior, checkbox attributes had no text(), set it to "true"
+ fieldValue = TQString::fromLatin1("true");
+ } else if(d->syntaxVersion < 8 && f->type() == Data::Field::Rating) {
+ // in version 8, old rating fields get changed
+ bool ok;
+ uint i = Tellico::toUInt(fieldValue, &ok);
+ if(ok) {
+ fieldValue = TQString::number(i);
+ }
+ } else if(!d->textBuffer.isEmpty()) {
+ // for dates and tables, the value is built up from child elements
+#ifndef NDEBUG
+ if(!d->text.isEmpty()) {
+ myWarning() << "FieldValueHandler::end() - ignoring value for field " << localName_ << ": " << d->text << endl;
+ }
+#endif
+ fieldValue = d->textBuffer;
+ d->textBuffer = TQString();
+ }
+ // this is not an else branch, the data may be in the textBuffer
+ if(d->syntaxVersion < 9 && d->coll->type() == Data::Collection::Album && fieldName == Latin1Literal("track")) {
+ // yes, this assumes the artist has already been set
+ fieldValue += TQString::fromLatin1("::");
+ fieldValue += entry->field(TQString::fromLatin1("artist"));
+ }
+ // special case: if the i18n attribute equals true, then translate the title, description, and category
+ if(m_i18n) {
+ fieldValue = i18n(fieldValue.utf8());
+ }
+ // special case for isbn fields, go ahead and validate
+ if(m_validateISBN && fieldName == Latin1Literal("isbn")) {
+ ISBNValidator val(0);
+ val.fixup(fieldValue);
+ }
+ if(fieldValue.isEmpty()) {
+ return true;
+ }
+ // for fields with multiple values, we need to add on the new value
+ TQString oldValue = entry->field(fieldName);
+ if(!oldValue.isEmpty()) {
+ fieldValue = oldValue + TQString::fromLatin1("; ") + fieldValue;
+ }
+ entry->setField(fieldName, fieldValue);
+ return true;
+}
+
+bool DateValueHandler::start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&) {
+ return true;
+}
+
+bool DateValueHandler::end(const TQString&, const TQString& localName_, const TQString&) {
+ // the data value is y-m-d even if there are no date values
+ if(d->textBuffer.isEmpty()) {
+ d->textBuffer = TQString::fromLatin1("--");
+ }
+ TQStringList tokens = TQStringList::split('-', d->textBuffer, true /* allow empty */);
+ Q_ASSERT(tokens.size() == 3);
+ if(localName_ == Latin1Literal("year")) {
+ tokens[0] = d->text;
+ } else if(localName_ == Latin1Literal("month")) {
+ tokens[1] = d->text;
+ } else if(localName_ == Latin1Literal("day")) {
+ tokens[2] = d->text;
+ }
+ d->textBuffer = tokens.join(TQChar('-'));
+ return true;
+}
+
+bool TableColumnHandler::start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&) {
+ return true;
+}
+
+bool TableColumnHandler::end(const TQString&, const TQString&, const TQString&) {
+ // for old collections, if the second column holds the track length, bump it to next column
+ if(d->syntaxVersion < 9 &&
+ d->coll->type() == Data::Collection::Album &&
+ d->currentField->name() == Latin1Literal("track") &&
+ !d->textBuffer.isEmpty() &&
+ d->textBuffer.contains(TQString::fromLatin1("::")) == 0) {
+ TQRegExp rx(TQString::fromLatin1("\\d+:\\d\\d"));
+ if(rx.exactMatch(d->text)) {
+ d->text += TQString::fromLatin1("::");
+ d->text += d->entries.back()->field(TQString::fromLatin1("artist"));
+ }
+ }
+
+ if(!d->textBuffer.isEmpty()) {
+ d->textBuffer += TQString::fromLatin1("::");
+ }
+ d->textBuffer += d->text;
+ return true;
+}
+
+StateHandler* ImagesHandler::nextHandlerImpl(const TQString&, const TQString& localName_, const TQString&) {
+ if(localName_ == Latin1Literal("image")) {
+ return new ImageHandler(d);
+ }
+ return 0;
+}
+
+bool ImagesHandler::start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&) {
+ // reset variable that gets updated in the image handler
+ d->hasImages = false;
+ return true;
+}
+
+bool ImagesHandler::end(const TQString&, const TQString&, const TQString&) {
+ return true;
+}
+
+bool ImageHandler::start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes& atts_) {
+ m_format = attValue(atts_, "format");
+ m_link = attValue(atts_, "link") == Latin1Literal("true");
+ // idClean() already calls shareString()
+ m_imageId = m_link ? shareString(attValue(atts_, "id"))
+ : Data::Image::idClean(attValue(atts_, "id"));
+ m_width = attValue(atts_, "width").toInt();
+ m_height = attValue(atts_, "height").toInt();
+ return true;
+}
+
+bool ImageHandler::end(const TQString&, const TQString&, const TQString&) {
+ bool readInfo = true;
+ if(d->loadImages) {
+ TQByteArray ba;
+ KCodecs::base64Decode(TQCString(d->text.latin1()), ba);
+ if(!ba.isEmpty()) {
+ TQString result = ImageFactory::addImage(ba, m_format, m_imageId);
+ if(result.isEmpty()) {
+ myDebug() << "TellicoImporter::readImage(XML) - null image for " << m_imageId << endl;
+ }
+ d->hasImages = true;
+ readInfo = false;
+ }
+ }
+ if(readInfo) {
+ // a width or height of 0 is ok here
+ Data::ImageInfo info(m_imageId, m_format.latin1(), m_width, m_height, m_link);
+ ImageFactory::cacheImageInfo(info);
+ }
+ return true;
+}
+
+StateHandler* FiltersHandler::nextHandlerImpl(const TQString&, const TQString& localName_, const TQString&) {
+ if(localName_ == Latin1Literal("filter")) {
+ return new FilterHandler(d);
+ }
+ return 0;
+}
+
+bool FiltersHandler::start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&) {
+ return true;
+}
+
+bool FiltersHandler::end(const TQString&, const TQString&, const TQString&) {
+ return true;
+}
+
+StateHandler* FilterHandler::nextHandlerImpl(const TQString&, const TQString& localName_, const TQString&) {
+ if(localName_ == Latin1Literal("rule")) {
+ return new FilterRuleHandler(d);
+ }
+ return 0;
+}
+
+bool FilterHandler::start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes& atts_) {
+ d->filter = new Filter(Filter::MatchAny);
+ d->filter->setName(attValue(atts_, "name"));
+
+ if(attValue(atts_, "match") == Latin1Literal("all")) {
+ d->filter->setMatch(Filter::MatchAll);
+ }
+ return true;
+}
+
+bool FilterHandler::end(const TQString&, const TQString&, const TQString&) {
+ if(d->coll && !d->filter->isEmpty()) {
+ d->coll->addFilter(d->filter);
+ }
+ d->filter = FilterPtr();
+ return true;
+}
+
+bool FilterRuleHandler::start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes& atts_) {
+ TQString field = attValue(atts_, "field");
+ // empty field means match any of them
+ TQString pattern = attValue(atts_, "pattern");
+ // empty pattern is bad
+ if(pattern.isEmpty()) {
+ myWarning() << "FilterRuleHandler::start() - empty rule!" << endl;
+ return true;
+ }
+ TQString function = attValue(atts_, "function").lower();
+ FilterRule::Function func;
+ if(function == Latin1Literal("contains")) {
+ func = FilterRule::FuncContains;
+ } else if(function == Latin1Literal("notcontains")) {
+ func = FilterRule::FuncNotContains;
+ } else if(function == Latin1Literal("equals")) {
+ func = FilterRule::FuncEquals;
+ } else if(function == Latin1Literal("notequals")) {
+ func = FilterRule::FuncNotEquals;
+ } else if(function == Latin1Literal("regexp")) {
+ func = FilterRule::FuncRegExp;
+ } else if(function == Latin1Literal("notregexp")) {
+ func = FilterRule::FuncNotRegExp;
+ } else {
+ myWarning() << "FilterRuleHandler::start() - invalid rule function: " << function << endl;
+ return true;
+ }
+ d->filter->append(new FilterRule(field, pattern, func));
+ return true;
+}
+
+bool FilterRuleHandler::end(const TQString&, const TQString&, const TQString&) {
+ return true;
+}
+
+StateHandler* BorrowersHandler::nextHandlerImpl(const TQString&, const TQString& localName_, const TQString&) {
+ if(localName_ == Latin1Literal("borrower")) {
+ return new BorrowerHandler(d);
+ }
+ return 0;
+}
+
+bool BorrowersHandler::start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&) {
+ return true;
+}
+
+bool BorrowersHandler::end(const TQString&, const TQString&, const TQString&) {
+ return true;
+}
+
+StateHandler* BorrowerHandler::nextHandlerImpl(const TQString&, const TQString& localName_, const TQString&) {
+ if(localName_ == Latin1Literal("loan")) {
+ return new LoanHandler(d);
+ }
+ return 0;
+}
+
+bool BorrowerHandler::start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes& atts_) {
+ TQString name = attValue(atts_, "name");
+ TQString uid = attValue(atts_, "uid");
+ d->borrower = new Data::Borrower(name, uid);
+
+ return true;
+}
+
+bool BorrowerHandler::end(const TQString&, const TQString&, const TQString&) {
+ if(d->coll && !d->borrower->isEmpty()) {
+ d->coll->addBorrower(d->borrower);
+ }
+ d->borrower = Data::BorrowerPtr();
+ return true;
+}
+
+bool LoanHandler::start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes& atts_) {
+ m_id = attValue(atts_, "entryRef").toInt();
+ m_uid = attValue(atts_, "uid");
+ m_loanDate = attValue(atts_, "loanDate");
+ m_dueDate = attValue(atts_, "dueDate");
+ m_inCalendar = attValue(atts_, "calendar") == Latin1Literal("true");
+ return true;
+}
+
+bool LoanHandler::end(const TQString&, const TQString&, const TQString&) {
+ Data::EntryPtr entry = d->coll->entryById(m_id);
+ if(!entry) {
+ myWarning() << "LoanHandler::end() - no entry with id = " << m_id << endl;
+ return true;
+ }
+ TQDate loanDate, dueDate;
+ if(!m_loanDate.isEmpty()) {
+ loanDate = TQDate::fromString(m_loanDate, TQt::ISODate);
+ }
+ if(!m_dueDate.isEmpty()) {
+ dueDate = TQDate::fromString(m_dueDate, TQt::ISODate);
+ }
+
+ Data::LoanPtr loan = new Data::Loan(entry, loanDate, dueDate, d->text);
+ loan->setUID(m_uid);
+ loan->setInCalendar(m_inCalendar);
+ d->borrower->addLoan(loan);
+ return true;
+}
+
diff --git a/src/translators/xmlstatehandler.h b/src/translators/xmlstatehandler.h
new file mode 100644
index 0000000..8b5c137
--- /dev/null
+++ b/src/translators/xmlstatehandler.h
@@ -0,0 +1,345 @@
+/***************************************************************************
+ copyright : (C) 2008 by Robby Stephenson
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of version 2 of the GNU General Public License as *
+ * published by the Free Software Foundation; *
+ * *
+ ***************************************************************************/
+
+#ifndef TELLICO_IMPORT_XMLSTATEHANDLER_H
+#define TELLICO_IMPORT_XMLSTATEHANDLER_H
+
+#ifdef QT_NO_CAST_ASCII
+#define HAD_QT_NO_CAST_ASCII
+#undef QT_NO_CAST_ASCII
+#endif
+
+#include <tqxml.h>
+
+#ifdef HAD_QT_NO_CAST_ASCII
+#define QT_NO_CAST_ASCII
+#undef HAD_QT_NO_CAST_ASCII
+#endif
+
+#include "../datavectors.h"
+
+namespace Tellico {
+ namespace Import {
+ namespace SAX {
+
+class StateData {
+public:
+ TQString text;
+ TQString error;
+ TQString ns; // namespace
+ TQString textBuffer;
+ uint syntaxVersion;
+ TQString collTitle;
+ int collType;
+ TQString entryName;
+ Data::CollPtr coll;
+ Data::FieldVec fields;
+ Data::FieldPtr currentField;
+ Data::EntryVec entries;
+ FilterPtr filter;
+ Data::BorrowerPtr borrower;
+ bool defaultFields;
+ bool loadImages;
+ bool hasImages;
+};
+
+class StateHandler {
+public:
+ StateHandler(StateData* data) : d(data) {}
+ virtual ~StateHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&) = 0;
+ virtual bool end(const TQString&, const TQString&, const TQString&) = 0;
+
+ StateHandler* nextHandler(const TQString&, const TQString&, const TQString&);
+protected:
+ StateData* d;
+private:
+ virtual StateHandler* nextHandlerImpl(const TQString&, const TQString&, const TQString&) { return 0; }
+};
+
+class NullHandler : public StateHandler {
+public:
+ NullHandler(StateData* data) : StateHandler(data) {}
+ virtual ~NullHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&) { return true; }
+ virtual bool end(const TQString&, const TQString&, const TQString&) { return true; }
+};
+
+class RootHandler : public StateHandler {
+public:
+ RootHandler(StateData* data) : StateHandler(data) {}
+ virtual ~RootHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&) { return true; }
+ virtual bool end(const TQString&, const TQString&, const TQString&) { return true; }
+
+private:
+ virtual StateHandler* nextHandlerImpl(const TQString&, const TQString&, const TQString&);
+};
+
+class DocumentHandler : public StateHandler {
+public:
+ DocumentHandler(StateData* data) : StateHandler(data) {}
+ virtual ~DocumentHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+
+private:
+ virtual StateHandler* nextHandlerImpl(const TQString&, const TQString&, const TQString&);
+};
+
+class CollectionHandler : public StateHandler {
+public:
+ CollectionHandler(StateData* data) : StateHandler(data) {}
+ virtual ~CollectionHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+
+private:
+ virtual StateHandler* nextHandlerImpl(const TQString&, const TQString&, const TQString&);
+};
+
+class FieldsHandler : public StateHandler {
+public:
+ FieldsHandler(StateData* data) : StateHandler(data) {}
+ virtual ~FieldsHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+
+private:
+ virtual StateHandler* nextHandlerImpl(const TQString&, const TQString&, const TQString&);
+};
+
+class FieldHandler : public StateHandler {
+public:
+ FieldHandler(StateData* data) : StateHandler(data) {}
+ virtual ~FieldHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+
+private:
+ virtual StateHandler* nextHandlerImpl(const TQString&, const TQString&, const TQString&);
+};
+
+class FieldPropertyHandler : public StateHandler {
+public:
+ FieldPropertyHandler(StateData* data) : StateHandler(data) {}
+ virtual ~FieldPropertyHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+
+private:
+ TQString m_propertyName;
+};
+
+class BibtexPreambleHandler : public StateHandler {
+public:
+ BibtexPreambleHandler(StateData* data) : StateHandler(data) {}
+ virtual ~BibtexPreambleHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+};
+
+class BibtexMacrosHandler : public StateHandler {
+public:
+ BibtexMacrosHandler(StateData* data) : StateHandler(data) {}
+ virtual ~BibtexMacrosHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+
+private:
+ virtual StateHandler* nextHandlerImpl(const TQString&, const TQString&, const TQString&);
+};
+
+class BibtexMacroHandler : public StateHandler {
+public:
+ BibtexMacroHandler(StateData* data) : StateHandler(data) {}
+ virtual ~BibtexMacroHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+
+private:
+ TQString m_macroName;
+};
+
+class EntryHandler : public StateHandler {
+public:
+ EntryHandler(StateData* data) : StateHandler(data) {}
+ virtual ~EntryHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+
+private:
+ virtual StateHandler* nextHandlerImpl(const TQString&, const TQString&, const TQString&);
+};
+
+class FieldValueContainerHandler : public StateHandler {
+public:
+ FieldValueContainerHandler(StateData* data) : StateHandler(data) {}
+ virtual ~FieldValueContainerHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+
+private:
+ virtual StateHandler* nextHandlerImpl(const TQString&, const TQString&, const TQString&);
+};
+
+class FieldValueHandler : public StateHandler {
+public:
+ FieldValueHandler(StateData* data) : StateHandler(data) {}
+ virtual ~FieldValueHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+
+private:
+ virtual StateHandler* nextHandlerImpl(const TQString&, const TQString&, const TQString&);
+ bool m_i18n;
+ bool m_validateISBN;
+};
+
+class DateValueHandler : public StateHandler {
+public:
+ DateValueHandler(StateData* data) : StateHandler(data) {}
+ virtual ~DateValueHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+};
+
+class TableColumnHandler : public StateHandler {
+public:
+ TableColumnHandler(StateData* data) : StateHandler(data) {}
+ virtual ~TableColumnHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+};
+
+class ImagesHandler : public StateHandler {
+public:
+ ImagesHandler(StateData* data) : StateHandler(data) {}
+ virtual ~ImagesHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+
+private:
+ virtual StateHandler* nextHandlerImpl(const TQString&, const TQString&, const TQString&);
+};
+
+class ImageHandler : public StateHandler {
+public:
+ ImageHandler(StateData* data) : StateHandler(data) {}
+ virtual ~ImageHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+
+private:
+ TQString m_format;
+ bool m_link;
+ TQString m_imageId;
+ int m_width;
+ int m_height;
+};
+
+class FiltersHandler : public StateHandler {
+public:
+ FiltersHandler(StateData* data) : StateHandler(data) {}
+ virtual ~FiltersHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+
+private:
+ virtual StateHandler* nextHandlerImpl(const TQString&, const TQString&, const TQString&);
+};
+
+class FilterHandler : public StateHandler {
+public:
+ FilterHandler(StateData* data) : StateHandler(data) {}
+ virtual ~FilterHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+
+private:
+ virtual StateHandler* nextHandlerImpl(const TQString&, const TQString&, const TQString&);
+};
+
+class FilterRuleHandler : public StateHandler {
+public:
+ FilterRuleHandler(StateData* data) : StateHandler(data) {}
+ virtual ~FilterRuleHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+};
+
+class BorrowersHandler : public StateHandler {
+public:
+ BorrowersHandler(StateData* data) : StateHandler(data) {}
+ virtual ~BorrowersHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+
+private:
+ virtual StateHandler* nextHandlerImpl(const TQString&, const TQString&, const TQString&);
+};
+
+class BorrowerHandler : public StateHandler {
+public:
+ BorrowerHandler(StateData* data) : StateHandler(data) {}
+ virtual ~BorrowerHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+
+private:
+ virtual StateHandler* nextHandlerImpl(const TQString&, const TQString&, const TQString&);
+};
+
+class LoanHandler : public StateHandler {
+public:
+ LoanHandler(StateData* data) : StateHandler(data) {}
+ virtual ~LoanHandler() {}
+
+ virtual bool start(const TQString&, const TQString&, const TQString&, const TQXmlAttributes&);
+ virtual bool end(const TQString&, const TQString&, const TQString&);
+
+private:
+ int m_id;
+ TQString m_uid;
+ TQString m_loanDate;
+ TQString m_dueDate;
+ bool m_inCalendar;
+};
+
+ }
+ }
+}
+#endif
diff --git a/src/translators/xsltexporter.cpp b/src/translators/xsltexporter.cpp
index c08ee0f..b0642b3 100644
--- a/src/translators/xsltexporter.cpp
+++ b/src/translators/xsltexporter.cpp
@@ -18,6 +18,8 @@
#include <tdelocale.h>
#include <kurlrequester.h>
+#include <kuser.h>
+#include <tdeconfig.h>
#include <tqlabel.h>
#include <tqgroupbox.h>
@@ -49,6 +51,9 @@ bool XSLTExporter::exec() {
}
// XSLTHandler handler(FileHandler::readXMLFile(url));
XSLTHandler handler(u);
+ handler.addStringParam("date", TQDate::currentDate().toString(TQt::ISODate).latin1());
+ handler.addStringParam("time", TQTime::currentTime().toString(TQt::ISODate).latin1());
+ handler.addStringParam("user", KUser(KUser::UseRealUserID).loginName().latin1());
TellicoXMLExporter exporter;
exporter.setEntries(entries());
@@ -75,6 +80,25 @@ TQWidget* XSLTExporter::widget(TQWidget* parent_, const char* name_/*=0*/) {
m_URLRequester = new KURLRequester(box);
TQWhatsThis::add(m_URLRequester, i18n("Choose the XSLT file used to transform the Tellico XML data."));
+ TQString filter = i18n("*.xsl|XSL Files (*.xsl)") + TQChar('\n');
+ filter += i18n("*|All Files");
+ m_URLRequester->setFilter(filter);
+ m_URLRequester->setMode(static_cast<KFile::Mode>(KFile::File | KFile::ExistingOnly));
+ if(!m_xsltFile.isEmpty()) {
+ m_URLRequester->setURL(m_xsltFile);
+ }
+
l->addStretch(1);
return m_widget;
}
+
+void XSLTExporter::readOptions(TDEConfig* config_) {
+ TDEConfigGroup group(config_, TQString::fromLatin1("ExportOptions - %1").arg(formatString()));
+ m_xsltFile = group.readEntry("Last File", TQString());
+}
+
+void XSLTExporter::saveOptions(TDEConfig* config_) {
+ TDEConfigGroup group(config_, TQString::fromLatin1("ExportOptions - %1").arg(formatString()));
+ m_xsltFile = m_URLRequester->url();
+ group.writeEntry("Last File", m_xsltFile);
+}
diff --git a/src/translators/xsltexporter.h b/src/translators/xsltexporter.h
index b14afd3..8b808e5 100644
--- a/src/translators/xsltexporter.h
+++ b/src/translators/xsltexporter.h
@@ -34,9 +34,13 @@ public:
virtual TQWidget* widget(TQWidget* parent, const char* name=0);
+ virtual void readOptions(TDEConfig* cfg);
+ virtual void saveOptions(TDEConfig* cfg);
+
private:
TQWidget* m_widget;
KURLRequester* m_URLRequester;
+ TQString m_xsltFile;
};
} // end namespace
diff --git a/src/upcvalidator.cpp b/src/upcvalidator.cpp
index 73cc0d6..e3aca4e 100644
--- a/src/upcvalidator.cpp
+++ b/src/upcvalidator.cpp
@@ -13,6 +13,7 @@
#include "upcvalidator.h"
#include "isbnvalidator.h"
+#include "tellico_debug.h"
#include <kmdcodec.h>
@@ -24,7 +25,7 @@ UPCValidator::UPCValidator(TQObject* parent_, const char* name_/*=0*/)
TQValidator::State UPCValidator::validate(TQString& input_, int& pos_) const {
// check if it's a cuecat first
- State catState = decodeCat(input_);
+ State catState = CueCat::decode(input_);
if(catState == Acceptable) {
pos_ = input_.length();
return catState;
@@ -91,18 +92,18 @@ void UPCValidator::fixup(TQString& input_) const {
}
}
-TQValidator::State UPCValidator::decodeCat(TQString& input_) const {
+TQValidator::State Tellico::CueCat::decode(TQString& input_) {
if(input_.length() < 3) {
- return Intermediate;
+ return TQValidator::Intermediate;
}
if(!input_.startsWith(TQString::fromLatin1(".C3"))) { // all cuecat codes start with .C3
- return Invalid;
+ return TQValidator::Invalid;
}
const int periods = input_.contains('.');
if(periods < 4) {
- return Intermediate; // not enough yet
+ return TQValidator::Intermediate; // not enough yet
} else if(periods > 4) {
- return Invalid;
+ return TQValidator::Invalid;
}
// ok, let's have a go, take the third token
@@ -127,7 +128,7 @@ TQValidator::State UPCValidator::decodeCat(TQString& input_) const {
}
input_ = code;
- return Acceptable;
+ return TQValidator::Acceptable;
}
#include "upcvalidator.moc"
diff --git a/src/upcvalidator.h b/src/upcvalidator.h
index 5931c79..854dc62 100644
--- a/src/upcvalidator.h
+++ b/src/upcvalidator.h
@@ -37,11 +37,14 @@ signals:
void signalISBN();
private:
- State decodeCat(TQString& str) const;
-
bool m_checkISBN : 1;
mutable bool m_isbn : 1;
};
+class CueCat {
+public:
+ static TQValidator::State decode(TQString& str);
+};
+
} // end namespace
#endif
diff --git a/xslt/amazon2tellico.xsl b/xslt/amazon2tellico.xsl
index 065886a..717911e 100644
--- a/xslt/amazon2tellico.xsl
+++ b/xslt/amazon2tellico.xsl
@@ -53,6 +53,9 @@
<xsl:variable name="lcletters">abcdefghijklmnopqrstuvwxyz</xsl:variable>
<xsl:variable name="ucletters">ABCDEFGHIJKLMNOPQRSTUVWXYZ</xsl:variable>
+<!-- disable default behavior -->
+<xsl:template match="text()|@*"></xsl:template>
+
<xsl:template match="/">
<tellico syntaxVersion="10">
<collection title="Amazon Import">
@@ -71,6 +74,9 @@
<xsl:when test="$mode='VideoGames'">
<xsl:text>11</xsl:text>
</xsl:when>
+ <xsl:when test="$mode='Toys'">
+ <xsl:text>13</xsl:text>
+ </xsl:when>
</xsl:choose>
</xsl:attribute>
<fields>
@@ -81,9 +87,19 @@
<field flags="0" title="Medium Image" category="Images" format="4" type="7" name="medium-image"/>
<field flags="0" title="Large Image" category="Images" format="4" type="7" name="large-image"/>
</fields>
- <xsl:for-each select="//aws:Items/aws:Item">
- <xsl:apply-templates select="."/>
- </xsl:for-each>
+ <!-- results for board games need to be filtered -->
+ <xsl:if test="$mode != 'Toys'">
+ <xsl:for-each select="//aws:Items/aws:Item">
+ <xsl:apply-templates select="."/>
+ </xsl:for-each>
+ </xsl:if>
+ <xsl:if test="$mode = 'Toys'">
+ <!-- only grab items in the board games category -->
+ <xsl:for-each select="//aws:Items/aws:Item[.//aws:BrowseNode/aws:Name='Board Games' or
+ .//aws:BrowseNode/aws:BrowseNodeId='166225011']">
+ <xsl:apply-templates select="."/>
+ </xsl:for-each>
+ </xsl:if>
</collection>
</tellico>
</xsl:template>
@@ -496,6 +512,27 @@
</xsl:choose>
</certification>
</xsl:when>
+
+ <xsl:when test="$mode='Toys'">
+ <publishers>
+ <publisher>
+ <xsl:value-of select="(aws:Label|aws:Brand|aws:Publisher|aws:Manufacturer)[1]"/>
+ </publisher>
+ </publishers>
+
+ <description>
+ <xsl:value-of select="../aws:EditorialReviews/aws:EditorialReview[1]/aws:Content"/>
+ <xsl:for-each select="aws:Feature">
+ <xsl:value-of select="."/>
+ <!-- if the last character is not punctuation, add a period -->
+ <xsl:if test="not(contains('.!?,/', substring(., string-length(.))))">
+ <xsl:text>.</xsl:text>
+ </xsl:if>
+ <xsl:text> </xsl:text>
+ </xsl:for-each>
+ </description>
+ </xsl:when>
+
</xsl:choose>
</xsl:template>
diff --git a/xslt/crossref2tellico.xsl b/xslt/crossref2tellico.xsl
index 17cddd3..ab536a8 100644
--- a/xslt/crossref2tellico.xsl
+++ b/xslt/crossref2tellico.xsl
@@ -42,6 +42,10 @@
</tellico>
</xsl:template>
+<!-- ignore unresolved queries -->
+<xsl:template match="cr:query[@status='unresolved']">
+</xsl:template>
+
<xsl:template match="cr:query">
<entry>
diff --git a/xslt/delicious2tellico.xsl b/xslt/delicious2tellico.xsl
index e185d58..a272439 100644
--- a/xslt/delicious2tellico.xsl
+++ b/xslt/delicious2tellico.xsl
@@ -21,17 +21,41 @@
doctype-public="-//Robby Stephenson/DTD Tellico V10.0//EN"
doctype-system="http://periapsis.org/tellico/dtd/v10/tellico.dtd"/>
+<xsl:param name="item-type"/>
+
<xsl:template match="/">
<tc:tellico syntaxVersion="10">
- <tc:collection title="Delicious Library Import" type="2">
+ <!-- DL libraries can contain mixed types and right now, there's no way to do that in Tellico -->
+ <!-- so we're going to limit the export to whatever the type of the first item is -->
+ <xsl:variable name="item">
+ <xsl:choose>
+ <xsl:when test="string-length($item-type) &gt; 0">
+ <xsl:value-of select="$item-type"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="local-name(library/items/child::*[1])"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:comment><xsl:text>Choosing all items of type </xsl:text><xsl:value-of select="$item"/></xsl:comment>
+
+ <xsl:variable name="type">
+ <xsl:choose>
+ <xsl:when test="$item='book'">2</xsl:when>
+ <xsl:when test="$item='movie'">3</xsl:when>
+ <xsl:when test="$item='game'">11</xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <tc:collection title="Delicious Library Import">
+ <xsl:attribute name="type"><xsl:value-of select="$type"/></xsl:attribute>
<tc:fields>
<tc:field name="_default"/>
<tc:field flags="0" title="Amazon Link" category="General" format="4" type="7" name="amazon" i18n="true"/>
<tc:field flags="0" title="UUID" category="General" format="0" type="1" name="uuid"/>
</tc:fields>
- <xsl:for-each select="library/items/book">
- <xsl:apply-templates select="."/>
- </xsl:for-each>
+ <xsl:apply-templates select="library/items/child::*[local-name()=$item]"/>
</tc:collection>
</tc:tellico>
</xsl:template>
@@ -56,7 +80,7 @@
<xsl:otherwise>
<xsl:value-of select="@title"/>
</xsl:otherwise>
- </xsl:choose>
+ </xsl:choose>
</tc:title>
<tc:subtitle>
@@ -116,7 +140,7 @@
<tc:rating>
<!-- tellico automatically rounds down -->
- <xsl:value-of select="netrating"/>
+ <xsl:value-of select="@netrating"/>
</tc:rating>
<xsl:call-template name="split">
@@ -132,6 +156,219 @@
</tc:entry>
</xsl:template>
+<xsl:template match="movie">
+ <tc:entry>
+ <tc:uuid>
+ <xsl:value-of select="@uuid"/>
+ </tc:uuid>
+
+ <tc:amazon>
+ <xsl:if test="@asin">
+ <xsl:value-of select="concat('http://www.amazon.com/dp/',@asin,'/?tag=tellico-20')"/>
+ </xsl:if>
+ </tc:amazon>
+
+ <tc:title>
+ <xsl:call-template name="strip-title">
+ <xsl:with-param name="title" select="@title"/>
+ </xsl:call-template>
+ </tc:title>
+
+ <tc:medium>
+ <xsl:value-of select="@aspect"/>
+ </tc:medium>
+
+ <xsl:call-template name="split">
+ <xsl:with-param name="name" select="'tc:director'"/>
+ <xsl:with-param name="value" select="@director"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="split">
+ <xsl:with-param name="name" select="'tc:cast'"/>
+ <xsl:with-param name="value" select="@stars"/>
+ </xsl:call-template>
+
+ <xsl:if test="contains(@features, 'Widescreen')">
+ <tc:widescreen>true</tc:widescreen>
+ </xsl:if>
+
+ <xsl:if test="contains(@features, 'NTSC')">
+ <tc:format i18n="true">NTSC</tc:format>
+ </xsl:if>
+
+ <xsl:if test="contains(@features, 'PAL')">
+ <tc:format i18n="true">PAL</tc:format>
+ </xsl:if>
+
+ <xsl:if test="contains(@features, 'SECAM')">
+ <tc:format i18n="true">SECAM</tc:format>
+ </xsl:if>
+
+ <xsl:if test="contains(@features, 'Color')">
+ <tc:color i18n="true">Color</tc:color>
+ </xsl:if>
+
+ <xsl:if test="contains(@features, 'Black &amp; White')">
+ <tc:color i18n="true">Black &amp; White</tc:color>
+ </xsl:if>
+
+ <xsl:if test="contains(@features, '1.33:1')">
+ <tc:aspect-ratios>
+ <tc:aspect-ratio>1.33:1</tc:aspect-ratio>
+ </tc:aspect-ratios>
+ </xsl:if>
+
+ <xsl:if test="contains(@features, '1.85:1')">
+ <tc:aspect-ratios>
+ <tc:aspect-ratio>1.85:1</tc:aspect-ratio>
+ </tc:aspect-ratios>
+ </xsl:if>
+
+ <tc:audio-tracks>
+ <xsl:if test="contains(@features, 'Dolby')">
+ <tc:audio-track i18n="true">Dolby</tc:audio-track>
+ </xsl:if>
+ <xsl:if test="contains(@features, 'DTS')">
+ <tc:audio-track i18n="true">DTS</tc:audio-track>
+ </xsl:if>
+ </tc:audio-tracks>
+
+ <xsl:choose>
+ <xsl:when test="contains(@genre, 'Region 1')">
+ <tc:region i18n="true">Region 1</tc:region>
+ </xsl:when>
+ <xsl:when test="contains(@genre, 'Region 2')">
+ <tc:region i18n="true">Region 2</tc:region>
+ </xsl:when>
+ <xsl:when test="contains(@genre, 'Region 3')">
+ <tc:region i18n="true">Region 3</tc:region>
+ </xsl:when>
+ <xsl:when test="contains(@genre, 'Region 4')">
+ <tc:region i18n="true">Region 4</tc:region>
+ </xsl:when>
+ <xsl:when test="contains(@genre, 'Region 5')">
+ <tc:region i18n="true">Region 5</tc:region>
+ </xsl:when>
+ <xsl:when test="contains(@genre, 'Region 6')">
+ <tc:region i18n="true">Region 6</tc:region>
+ </xsl:when>
+ <xsl:when test="contains(@genre, 'Region 7')">
+ <tc:region i18n="true">Region 7</tc:region>
+ </xsl:when>
+ <xsl:when test="contains(@genre, 'Region 8')">
+ <tc:region i18n="true">Region 8</tc:region>
+ </xsl:when>
+ </xsl:choose>
+
+ <xsl:call-template name="split">
+ <xsl:with-param name="name" select="'tc:genre'"/>
+ <xsl:with-param name="value" select="@genre"/>
+ <xsl:with-param name="i18n" select="true()"/>
+ </xsl:call-template>
+
+ <xsl:call-template name="split">
+ <xsl:with-param name="name" select="'tc:studio'"/>
+ <xsl:with-param name="value" select="@publisher"/>
+ </xsl:call-template>
+
+ <tc:running-time>
+ <xsl:value-of select="@minutes"/>
+ </tc:running-time>
+
+ <tc:certification>
+ <xsl:value-of select="concat(@mpaarating, ' (US)')"/>
+ </tc:certification>
+
+ <tc:year>
+ <xsl:call-template name="year">
+ <xsl:with-param name="value" select="@theatricalDate"/>
+ </xsl:call-template>
+ </tc:year>
+
+ <tc:pur_price>
+ <xsl:value-of select="@price"/>
+ </tc:pur_price>
+
+ <tc:pur_date>
+ <xsl:value-of select="@purchaseDate"/>
+ </tc:pur_date>
+
+ <tc:rating>
+ <!-- tellico automatically rounds down -->
+ <xsl:value-of select="@netrating"/>
+ </tc:rating>
+
+ <xsl:call-template name="split">
+ <xsl:with-param name="name" select="'tc:nationality'"/>
+ <xsl:with-param name="value" select="@country"/>
+ </xsl:call-template>
+
+ <tc:plot>
+ <xsl:value-of select="description"/>
+ </tc:plot>
+ </tc:entry>
+</xsl:template>
+
+<xsl:template match="game">
+ <tc:entry>
+ <tc:uuid>
+ <xsl:value-of select="@uuid"/>
+ </tc:uuid>
+
+ <tc:amazon>
+ <xsl:if test="@asin">
+ <xsl:value-of select="concat('http://www.amazon.com/dp/',@asin,'/?tag=tellico-20')"/>
+ </xsl:if>
+ </tc:amazon>
+
+ <tc:title>
+ <xsl:value-of select="@title"/>
+ </tc:title>
+
+ <tc:platform>
+ <xsl:value-of select="@platform"/>
+ </tc:platform>
+
+ <tc:certification>
+ <xsl:value-of select="@esrbrating"/>
+ </tc:certification>
+
+ <xsl:call-template name="split">
+ <xsl:with-param name="name" select="'tc:genre'"/>
+ <xsl:with-param name="value" select="@genre"/>
+ <xsl:with-param name="i18n" select="true()"/>
+ </xsl:call-template>
+
+ <tc:pur_price>
+ <xsl:value-of select="@price"/>
+ </tc:pur_price>
+
+ <tc:pur_date>
+ <xsl:value-of select="@purchaseDate"/>
+ </tc:pur_date>
+
+ <tc:year>
+ <xsl:call-template name="year">
+ <xsl:with-param name="value" select="@published"/>
+ </xsl:call-template>
+ </tc:year>
+
+ <tc:rating>
+ <!-- tellico automatically rounds down -->
+ <xsl:value-of select="@netrating"/>
+ </tc:rating>
+
+ <tc:publisher>
+ <xsl:value-of select="@publisher"/>
+ </tc:publisher>
+
+ <tc:description>
+ <xsl:value-of select="description"/>
+ </tc:description>
+
+ </tc:entry>
+</xsl:template>
+
<xsl:template name="split">
<xsl:param name="name"/>
<xsl:param name="value"/>
@@ -161,4 +398,38 @@
<xsl:value-of select="substring($numbers, string-length($numbers)-3, 4)"/>
</xsl:template>
+<xsl:template name="strip-title">
+ <xsl:param name="title"/>
+ <xsl:param name="chars" select="'[('"/>
+ <xsl:choose>
+ <xsl:when test="string-length($chars) = 0">
+ <xsl:value-of select="normalize-space($title)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="strip-title">
+ <xsl:with-param name="title">
+ <xsl:call-template name="str-before">
+ <xsl:with-param name="value1" select="$title"/>
+ <xsl:with-param name="value2" select="substring($chars,1,1)"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ <xsl:with-param name="chars" select="substring($chars,2)"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="str-before">
+ <xsl:param name="value1"/>
+ <xsl:param name="value2"/>
+ <xsl:choose>
+ <xsl:when test="string-length($value2) &gt; 0 and contains($value1, $value2)">
+ <xsl:value-of select="substring-before($value1, $value2)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$value1"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
</xsl:stylesheet>
diff --git a/xslt/gcstar2tellico.xsl b/xslt/gcstar2tellico.xsl
index a45df87..7421a3d 100644
--- a/xslt/gcstar2tellico.xsl
+++ b/xslt/gcstar2tellico.xsl
@@ -79,6 +79,11 @@
<tc:field flags="8" title="Original Title" category="General" format="1" type="1" name="origtitle" i18n="true"/>
<tc:field flags="0" title="Seen" category="Personal" format="4" type="4" name="seen" i18n="true"/>
</xsl:when>
+ <xsl:when test="@type='GCcoins'">
+ <!-- gcstar includes way more coin grades than tellico -->
+ <tc:field flags="2" title="Grade" category="General" format="4" type="3" name="grade"
+ allowed="Proof-65;Proof-60;Mint State-70;Mint State-69;Mint State-68;Mint State-67;Mint State-66;Mint State-65;Mint State-64;Mint State-63;Mint State-62;Mint State-61;Mint State-60;Almost Uncirculated-58;Almost Uncirculated-55;Almost Uncirculated-53;Almost Uncirculated-50;Extremely Fine-45;Extremely Fine-40;Very Fine-35;Very Fine-30;Very Fine-25;Very Fine-20;Fine-15;Fine-12;Very Good-10;Very Good-8;Good-6;Good-4;Fair"/>
+ </xsl:when>
</xsl:choose>
</tc:fields>
<xsl:apply-templates select="item"/>
@@ -477,6 +482,48 @@
</tc:num-players>
</xsl:template>
+<!-- coins -->
+<xsl:template match="condition">
+<!-- by default, Tellico includes
+ "Proof-65,Proof-60,Mint State-65,Mint State-60,"
+ "Almost Uncirculated-55,Almost Uncirculated-50,"
+ "Extremely Fine-40,Very Fine-30,Very Fine-20,Fine-12,"
+ "Very Good-8,Good-4,Fair" -->
+<!-- GCStar doesn't appear to include proof grades -->
+ <tc:grade>
+ <xsl:choose>
+ <xsl:when test=".='70'">Mint State-70</xsl:when>
+ <xsl:when test=".='69'">Mint State-69</xsl:when>
+ <xsl:when test=".='68'">Mint State-68</xsl:when>
+ <xsl:when test=".='67'">Mint State-67</xsl:when>
+ <xsl:when test=".='66'">Mint State-66</xsl:when>
+ <xsl:when test=".='65'">Mint State-65</xsl:when>
+ <xsl:when test=".='64'">Mint State-64</xsl:when>
+ <xsl:when test=".='63'">Mint State-63</xsl:when>
+ <xsl:when test=".='62'">Mint State-62</xsl:when>
+ <xsl:when test=".='61'">Mint State-61</xsl:when>
+ <xsl:when test=".='60'">Mint State-60</xsl:when>
+ <xsl:when test=".='58'">Almost Uncirculated-58</xsl:when>
+ <xsl:when test=".='55'">Almost Uncirculated-55</xsl:when>
+ <xsl:when test=".='53'">Almost Uncirculated-53</xsl:when>
+ <xsl:when test=".='50'">Almost Uncirculated-50</xsl:when>
+ <xsl:when test=".='45'">Extremely Fine-45</xsl:when>
+ <xsl:when test=".='40'">Extremely Fine-40</xsl:when>
+ <xsl:when test=".='35'">Very Fine-35</xsl:when>
+ <xsl:when test=".='30'">Very Fine-30</xsl:when>
+ <xsl:when test=".='25'">Very Fine-25</xsl:when>
+ <xsl:when test=".='20'">Very Fine-20</xsl:when>
+ <xsl:when test=".='15'">Fine-15</xsl:when>
+ <xsl:when test=".='12'">Fine-12</xsl:when>
+ <xsl:when test=".='10'">Very Good-10</xsl:when>
+ <xsl:when test=".='8'">Very Good-8</xsl:when>
+ <xsl:when test=".='6'">Good-6</xsl:when>
+ <xsl:when test=".='4'">Good-4</xsl:when>
+ <xsl:when test=".&lt;4">Fair</xsl:when>
+ </xsl:choose>
+ </tc:grade>
+</xsl:template>
+
<xsl:template name="year">
<xsl:param name="value"/>
<!-- want to find a 4-digit number to treat as the year -->
diff --git a/xslt/report-templates/Column_View.xsl b/xslt/report-templates/Column_View.xsl
index 3b007fe..5436cf3 100644
--- a/xslt/report-templates/Column_View.xsl
+++ b/xslt/report-templates/Column_View.xsl
@@ -258,7 +258,10 @@
</xsl:attribute>
<img>
<xsl:attribute name="src">
- <xsl:value-of select="concat($imgdir, .)"/>
+ <xsl:call-template name="image-link">
+ <xsl:with-param name="image" select="key('imagesById', .)"/>
+ <xsl:with-param name="dir" select="$imgdir"/>
+ </xsl:call-template>
</xsl:attribute>
<xsl:call-template name="image-size">
<xsl:with-param name="limit-width" select="$image-width"/>
diff --git a/xslt/report-templates/Group_Summary.xsl b/xslt/report-templates/Group_Summary.xsl
index 9058f78..0d49284 100644
--- a/xslt/report-templates/Group_Summary.xsl
+++ b/xslt/report-templates/Group_Summary.xsl
@@ -117,6 +117,7 @@
margin: 0px 0px 0px 0px;
padding: 0px 10px 0px 4px;
float: left;
+ min-height: 1em;
}
span.bar {
width: 590px;
@@ -178,7 +179,7 @@
<xsl:for-each select="tc:fields/tc:field[boolean(floor(@flags div 2) mod 2)]">
<xsl:call-template name="output-group">
<xsl:with-param name="coll" select="$coll"/>
- <xsl:with-param name="fieldname" select="@name"/>
+ <xsl:with-param name="field" select="."/>
</xsl:call-template>
</xsl:for-each>
@@ -189,35 +190,49 @@
<xsl:template name="output-group">
<xsl:param name="coll"/>
- <xsl:param name="fieldname"/>
-
- <xsl:variable name="str">
- <xsl:choose>
- <xsl:when test="boolean(floor(key('fieldsByName', $fieldname)/@flags mod 2))">
- <xsl:choose>
- <xsl:when test="key('fieldsByName', $fieldname)/@type=8">
- <xsl:value-of select="concat('$coll/tc:entry/tc:',$fieldname,'s/tc:',$fieldname,'/tc:column[1]')"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="concat('$coll/tc:entry/tc:',$fieldname,'s/tc:',$fieldname)"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="concat('$coll/tc:entry/tc:',$fieldname)"/>
- </xsl:otherwise>
- </xsl:choose>
+ <xsl:param name="field"/>
+
+ <xsl:variable name="fieldname" select="$field/@name"/>
+ <xsl:variable name="value-expr">
+ <xsl:for-each select="$coll/tc:entry">
+ <xsl:choose>
+ <!-- tables -->
+ <xsl:when test="$field/@type=8">
+ <xsl:for-each select="./*/*[local-name() = $fieldname]">
+ <value>
+ <xsl:value-of select="tc:column[1]"/>
+ </value>
+ </xsl:for-each>
+ </xsl:when>
+ <!-- multiple values...could also use "./*/*[local-name() = $fieldname]" -->
+ <xsl:when test="boolean(floor(key('fieldsByName', $fieldname)/@flags mod 2))">
+ <xsl:for-each select="./*/*[local-name() = $fieldname]">
+ <value>
+ <xsl:value-of select="."/>
+ </value>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise>
+ <value>
+ <xsl:call-template name="simple-field-value">
+ <xsl:with-param name="entry" select="."/>
+ <xsl:with-param name="field" select="$fieldname"/>
+ </xsl:call-template>
+ </value>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
</xsl:variable>
- <xsl:variable name="values" select="dyn:evaluate($str)"/>
+ <xsl:variable name="values" select="exsl:node-set($value-expr)/value"/>
<xsl:variable name="listing">
- <xsl:for-each select="$values[not(. = preceding::*)]">
+ <xsl:for-each select="$values[not(. = preceding-sibling::*)]">
<!-- speed sorting by ignoring groups with a count of 1 -->
<xsl:variable name="c" select="count($values[. = current()])"/>
<xsl:if test="$c &gt; 1">
<group>
<xsl:attribute name="name">
- <xsl:call-template name="text-value"/>
+ <xsl:value-of select="."/>
</xsl:attribute>
<xsl:attribute name="count">
<xsl:value-of select="$c"/>
@@ -229,11 +244,11 @@
<xsl:variable name="groups" select="exsl:node-set($listing)/group"/>
<xsl:variable name="total" select="count($groups)"/>
-
+
<xsl:variable name="max">
<xsl:call-template name="max-count">
<xsl:with-param name="nodes" select="$groups"/>
- </xsl:call-template>
+ </xsl:call-template>
</xsl:variable>
<xsl:if test="$total &gt; 2">
@@ -305,17 +320,6 @@
</xsl:choose>
</xsl:template>
-<xsl:template name="text-value">
- <xsl:choose>
- <xsl:when test="text()">
- <xsl:value-of select="text()"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="..//tc:column[1]"/>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
</xsl:stylesheet>
<!-- Local Variables: -->
<!-- sgml-indent-step: 1 -->
diff --git a/xslt/report-templates/Group_View.xsl b/xslt/report-templates/Group_View.xsl
index 123559e..73cdf25 100644
--- a/xslt/report-templates/Group_View.xsl
+++ b/xslt/report-templates/Group_View.xsl
@@ -232,7 +232,10 @@
</xsl:attribute>
<img>
<xsl:attribute name="src">
- <xsl:value-of select="concat($imgdir, .)"/>
+ <xsl:call-template name="image-link">
+ <xsl:with-param name="image" select="key('imagesById', .)"/>
+ <xsl:with-param name="dir" select="$imgdir"/>
+ </xsl:call-template>
</xsl:attribute>
<xsl:call-template name="image-size">
<xsl:with-param name="limit-width" select="$image-width"/>
diff --git a/xslt/report-templates/Image_List.xsl b/xslt/report-templates/Image_List.xsl
index 78c596f..f73ca24 100644
--- a/xslt/report-templates/Image_List.xsl
+++ b/xslt/report-templates/Image_List.xsl
@@ -141,7 +141,10 @@
<xsl:if test="$id">
<img class="float">
<xsl:attribute name="src">
- <xsl:value-of select="concat($imgdir, $id)"/>
+ <xsl:call-template name="image-link">
+ <xsl:with-param name="image" select="key('imagesById', $id)"/>
+ <xsl:with-param name="dir" select="$imgdir"/>
+ </xsl:call-template>
</xsl:attribute>
<xsl:call-template name="image-size">
<xsl:with-param name="limit-width" select="$image-width"/>
@@ -150,7 +153,7 @@
</xsl:call-template>
</img>
</xsl:if>
-
+
<table>
<thead>
<tr>
@@ -163,8 +166,9 @@
<tbody>
<!-- don't repeat title -->
<xsl:for-each select="$columns[. != 'title']">
- <!-- no other images allowed -->
- <xsl:if test="$entry/../tc:fields/tc:field[@name = current()]/@type != 10">
+ <!-- no other images or paragraphs allowed -->
+ <xsl:variable name="ftype" select="$entry/../tc:fields/tc:field[@name = current()]/@type"/>
+ <xsl:if test="$ftype != 10 and $ftype != 2">
<xsl:call-template name="field-output">
<xsl:with-param name="entry" select="$entry"/>
<!-- can't use a key, the context is not the document -->
diff --git a/xslt/report-templates/Tri-Column.xsl b/xslt/report-templates/Tri-Column.xsl
index d38dd5f..3323a2c 100644
--- a/xslt/report-templates/Tri-Column.xsl
+++ b/xslt/report-templates/Tri-Column.xsl
@@ -193,7 +193,10 @@
<xsl:if test="$id">
<img class="float" alt=" ">
<xsl:attribute name="src">
- <xsl:value-of select="concat($imgdir, $id)"/>
+ <xsl:call-template name="image-link">
+ <xsl:with-param name="image" select="key('imagesById', $id)"/>
+ <xsl:with-param name="dir" select="$imgdir"/>
+ </xsl:call-template>
</xsl:attribute>
<xsl:call-template name="image-size">
<xsl:with-param name="limit-width" select="$image-width"/>
diff --git a/xslt/tellico-printing.xsl b/xslt/tellico-printing.xsl
index 9d997fd..4c31ecc 100644
--- a/xslt/tellico-printing.xsl
+++ b/xslt/tellico-printing.xsl
@@ -329,7 +329,10 @@
</xsl:attribute>
<img>
<xsl:attribute name="src">
- <xsl:value-of select="concat($imgdir, .)"/>
+ <xsl:call-template name="image-link">
+ <xsl:with-param name="image" select="key('imagesById', .)"/>
+ <xsl:with-param name="dir" select="$imgdir"/>
+ </xsl:call-template>
</xsl:attribute>
<xsl:call-template name="image-size">
<xsl:with-param name="limit-width" select="$image-width"/>
diff --git a/xslt/tellico2gcstar.xsl b/xslt/tellico2gcstar.xsl
index b4cf394..51c410a 100644
--- a/xslt/tellico2gcstar.xsl
+++ b/xslt/tellico2gcstar.xsl
@@ -65,6 +65,9 @@
<xsl:when test="tc:tellico/tc:collection/@type=4">
<xsl:text>GCmusics</xsl:text>
</xsl:when>
+ <xsl:when test="tc:tellico/tc:collection/@type=8">
+ <xsl:text>GCcoins</xsl:text>
+ </xsl:when>
</xsl:choose>
</xsl:variable>
<!-- grab all the applicable attributes once -->
@@ -80,7 +83,7 @@
<xsl:apply-templates select="tc:collection"/>
</xsl:template>
-<xsl:template match="tc:collection[@type&lt;2 or @type&gt;5]">
+<xsl:template match="tc:collection[@type&lt;2 or @type&gt;5 and not(@type=8)]">
<xsl:message terminate="yes">
<xsl:text>GCstar export is not supported for this collection type.</xsl:text>
</xsl:message>
@@ -147,6 +150,13 @@
</xsl:choose>
</xsl:attribute>
</xsl:if>
+ <!-- for coin grade, GCstar uses numbers only -->
+ <xsl:if test="tc:grade">
+ <xsl:attribute name="condition">
+ <!-- remove everything but numbers -->
+ <xsl:value-of select="translate(tc:grade,translate(tc:grade,'0123456789', ''),'')"/>
+ </xsl:attribute>
+ </xsl:if>
<!-- for books -->
<comments>
diff --git a/xslt/tellico2html.js b/xslt/tellico2html.js
index 8a3f5df..fa08d58 100644
--- a/xslt/tellico2html.js
+++ b/xslt/tellico2html.js
@@ -127,8 +127,8 @@ sorttable = {
if (!document.createElement || !document.getElementsByTagName) return;
- sorttable.DATE_RE = /^(\d\d)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/;
- sorttable.YYMMDD_RE = /^((\d\d)?\d\d)[\/\.-](\d\d?)[\/\.-](\d\d)$/;
+ sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-](\d{4}|\d\d)$/;
+ sorttable.YYMMDD_RE = /^(\d{4}|\d\d)[\/\.-](\d\d?)[\/\.-](\d\d?)$/;
forEach(document.getElementsByTagName('table'), function(table) {
if (table.className.search(/\bsortable\b/) != -1) {
@@ -371,7 +371,8 @@ sorttable = {
if (mtch) {
y = mtch[1]; m = mtch[2]; d = mtch[3];
// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
- if (parseInt(y) < 50) y = '20'+y; else y = '19'+y;
+ if (y.length == 2)
+ if (parseInt(y) < 50) y = '20'+y; else y = '19'+y;
if (m.length == 1) m = '0'+m;
if (d.length == 1) d = '0'+d;
dt1 = y+m+d;
@@ -379,7 +380,8 @@ sorttable = {
mtch = b[0].match(sorttable.YYMMDD_RE);
if (mtch) {
y = mtch[1]; m = mtch[2]; d = mtch[3];
- if (parseInt(y) < 50) y = '20'+y; else y = '19'+y;
+ if (y.length == 2)
+ if (parseInt(y) < 50) y = '20'+y; else y = '19'+y;
if (m.length == 1) m = '0'+m;
if (d.length == 1) d = '0'+d;
dt2 = y+m+d;
diff --git a/xslt/tellico2html.xsl b/xslt/tellico2html.xsl
index b87ef75..f63c36f 100644
--- a/xslt/tellico2html.xsl
+++ b/xslt/tellico2html.xsl
@@ -115,10 +115,7 @@
</xsl:if>
</xsl:variable>
-<!-- keys ends up useless since we're using exsl:node-set
-<xsl:key name="fieldsByName" match="tc:field" use="@name"/>
<xsl:key name="imagesById" match="tc:image" use="@id"/>
--->
<xsl:key name="entriesById" match="tc:entry" use="@id"/>
<!-- filename conversion is weird, need a variable for easy replacement -->
@@ -557,7 +554,10 @@
</xsl:attribute>
<img>
<xsl:attribute name="src">
- <xsl:value-of select="concat($imgdir, .)"/>
+ <xsl:call-template name="image-link">
+ <xsl:with-param name="image" select="key('imagesById', .)"/>
+ <xsl:with-param name="dir" select="$imgdir"/>
+ </xsl:call-template>
</xsl:attribute>
<xsl:attribute name="alt">
<xsl:value-of select="concat('[', $entry//tc:title[1], ']')"/>
diff --git a/xslt/unixref2tellico.xsl b/xslt/unixref2tellico.xsl
index b997cac..9b25c44 100644
--- a/xslt/unixref2tellico.xsl
+++ b/xslt/unixref2tellico.xsl
@@ -46,9 +46,12 @@
</xsl:template>
<xsl:template match="cr:crossref">
- <entry>
- <xsl:apply-templates/>
- </entry>
+ <!-- if there's an error, or none found, a crossref element still shows up, with an error element -->
+ <xsl:if test="not(cr:error)">
+ <entry>
+ <xsl:apply-templates/>
+ </entry>
+ </xsl:if>
</xsl:template>
<xsl:template match="cr:book">