Git commit 02081394d7f03c7da6473ef516dddea8753d5bab by Thomas Fischer. Committed on 31/03/2017 at 19:29. Pushed by thomasfischer into branch 'master'. Descendants of QObject take 'QObject *parent' as constructor argument Classes that inherit from QObject, in this commit just FileImporter and FileExporter and all of their descendants, now take a QObject* argument in their constructor as their 'parent' that will then passed down as argument to QObject's constructor. This will allow for a cleaner relationship between QObject-derived classes and, at least in some situations, proper memory management. M +23 -11 src/gui/element/elementwidgets.cpp M +2 -1 src/gui/element/elementwidgets.h M +3 -3 src/gui/field/fieldlineedit.cpp M +1 -1 src/gui/field/fieldlistedit.cpp M +2 -2 src/gui/file/clipboard.cpp M +1 -1 src/gui/preferences/settingsidsuggestionswidget.cpp M +3 -2 src/io/fileexporter.cpp M +1 -1 src/io/fileexporter.h M +3 -3 src/io/fileexporterbibtex.cpp M +1 -1 src/io/fileexporterbibtex.h M +9 -11 src/io/fileexporterbibtex2html.cpp M +1 -1 src/io/fileexporterbibtex2html.h M +9 -11 src/io/fileexporterbibtexoutput.cpp M +1 -1 src/io/fileexporterbibtexoutput.h M +13 -8 src/io/fileexporterbibutils.cpp M +1 -1 src/io/fileexporterbibutils.h M +18 -13 src/io/fileexporterpdf.cpp M +2 -1 src/io/fileexporterpdf.h M +8 -10 src/io/fileexporterps.cpp M +1 -1 src/io/fileexporterps.h M +3 -3 src/io/fileexporterris.cpp M +1 -1 src/io/fileexporterris.h M +9 -11 src/io/fileexporterrtf.cpp M +1 -1 src/io/fileexporterrtf.h M +2 -2 src/io/fileexportertoolchain.cpp M +1 -1 src/io/fileexportertoolchain.h M +2 -2 src/io/fileexporterxml.cpp M +1 -1 src/io/fileexporterxml.h M +17 -12 src/io/fileexporterxslt.cpp M +11 -2 src/io/fileexporterxslt.h M +2 -2 src/io/fileimporter.cpp M +1 -1 src/io/fileimporter.h M +7 -3 src/io/fileimporterbibtex.cpp M +6 -9 src/io/fileimporterbibtex.h M +10 -6 src/io/fileimporterbibutils.cpp M +1 -1 src/io/fileimporterbibutils.h M +4 -4 src/io/fileimporterpdf.cpp M +1 -1 src/io/fileimporterpdf.h M +2 -2 src/io/fileimporterris.cpp M +1 -1 src/io/fileimporterris.h M +1 -1 src/networking/onlinesearch/onlinesearchacmportal.cpp M +1 -1 src/networking/onlinesearch/onlinesearcharxiv.cpp M +1 -1 src/networking/onlinesearch/onlinesearchbibsonomy.cpp M +1 -1 src/networking/onlinesearch/onlinesearchbiorxiv.cpp M +1 -1 src/networking/onlinesearch/onlinesearchdoi.cpp M +8 -3 src/networking/onlinesearch/onlinesearchgooglescholar.cpp M +1 -1 src/networking/onlinesearch/onlinesearchideasrepec.cpp M +1 -1 src/networking/onlinesearch/onlinesearchieeexplore.cpp M +1 -1 src/networking/onlinesearch/onlinesearchingentaconnect.cpp M +1 -1 src/networking/onlinesearch/onlinesearchisbndb.cpp M +1 -1 src/networking/onlinesearch/onlinesearchjstor.cpp M +1 -1 src/networking/onlinesearch/onlinesearchmathscinet.cpp M +1 -1 src/networking/onlinesearch/onlinesearchmrlookup.cpp M +1 -1 src/networking/onlinesearch/onlinesearchpubmed.cpp M +1 -1 src/networking/onlinesearch/onlinesearchsciencedirect.cpp M +1 -1 src/networking/onlinesearch/onlinesearchsimplebibtexdownload= .cpp M +1 -1 src/networking/onlinesearch/onlinesearchspringerlink.cpp M +1 -1 src/networking/zotero/items.cpp M +18 -16 src/parts/part.cpp M +1 -1 src/processing/checkbibtex.cpp M +5 -7 src/program/docklets/referencepreview.cpp M +4 -3 src/test/kbibtexfilestest.cpp https://commits.kde.org/kbibtex/02081394d7f03c7da6473ef516dddea8753d5bab diff --git a/src/gui/element/elementwidgets.cpp b/src/gui/element/elementwi= dgets.cpp index d12a6ed1..a27676f9 100644 --- a/src/gui/element/elementwidgets.cpp +++ b/src/gui/element/elementwidgets.cpp @@ -1096,8 +1096,8 @@ public: = protected: void dropEvent(QDropEvent *event) override { - FileImporterBibTeX importer; - FileExporterBibTeX exporter; + FileImporterBibTeX importer(this); + FileExporterBibTeX exporter(this); const File *file =3D importer.fromString(event->mimeData()->text()= ); if (file !=3D nullptr && file->count() =3D=3D 1) document()->setPlainText(exporter.toString(file->first(), file= )); @@ -1106,8 +1106,20 @@ protected: } }; = +class SourceWidget::Private +{ +public: + QPushButton *buttonRestore; + FileImporterBibTeX *importerBibTeX; + + Private(SourceWidget *parent) + : buttonRestore(nullptr), importerBibTeX(new FileImporterBibTe= X(parent)) { + /// nothing + } +}; + SourceWidget::SourceWidget(QWidget *parent) - : ElementWidget(parent) + : ElementWidget(parent), d(new SourceWidget::Private(this)) { createGUI(); } @@ -1115,6 +1127,7 @@ SourceWidget::SourceWidget(QWidget *parent) SourceWidget::~SourceWidget() { delete sourceEdit; + delete d; } = bool SourceWidget::apply(QSharedPointer element) const @@ -1122,8 +1135,7 @@ bool SourceWidget::apply(QSharedPointer elem= ent) const if (isReadOnly) return false; ///< never save data if in read-only mode = const QString text =3D sourceEdit->document()->toPlainText(); - FileImporterBibTeX importer; - File *file =3D importer.fromString(text); + File *file =3D d->importerBibTeX->fromString(text); if (file =3D=3D nullptr) return false; = bool result =3D false; @@ -1161,7 +1173,7 @@ bool SourceWidget::reset(QSharedPointer element) /// resetting the widget's value disconnect(sourceEdit, &SourceWidget::SourceWidgetTextEdit::textChange= d, this, &SourceWidget::gotModified); = - FileExporterBibTeX exporter; + FileExporterBibTeX exporter(this); exporter.setEncoding(QStringLiteral("utf-8")); const QString exportedText =3D exporter.toString(element, m_file); if (!exportedText.isEmpty()) { @@ -1178,7 +1190,7 @@ void SourceWidget::setReadOnly(bool isReadOnly) { ElementWidget::setReadOnly(isReadOnly); = - m_buttonRestore->setEnabled(!isReadOnly); + d->buttonRestore->setEnabled(!isReadOnly); sourceEdit->setReadOnly(isReadOnly); } = @@ -1211,10 +1223,10 @@ void SourceWidget::createGUI() sourceEdit->document()->setDefaultFont(QFontDatabase::systemFont(QFont= Database::FixedFont)); sourceEdit->setTabStopWidth(QFontMetrics(sourceEdit->font()).averageCh= arWidth() * 4); = - m_buttonRestore =3D new QPushButton(QIcon::fromTheme(QStringLiteral("e= dit-undo")), i18n("Restore"), this); - layout->addWidget(m_buttonRestore, 1, 1, 1, 1); - // FIXME connect(m_buttonRestore, &QPushButton::clicked, this, &Source= Widget::reset); - connect(m_buttonRestore, SIGNAL(clicked(bool)), this, SLOT(reset())); + d->buttonRestore =3D new QPushButton(QIcon::fromTheme(QStringLiteral("= edit-undo")), i18n("Restore"), this); + layout->addWidget(d->buttonRestore, 1, 1, 1, 1); + // FIXME connect(d->buttonRestore, &QPushButton::clicked, this, &Sourc= eWidget::reset); + connect(d->buttonRestore, SIGNAL(clicked(bool)), this, SLOT(reset())); = connect(sourceEdit, &SourceWidget::SourceWidgetTextEdit::textChanged, = this, &SourceWidget::gotModified); } diff --git a/src/gui/element/elementwidgets.h b/src/gui/element/elementwidg= ets.h index 41a669b6..83b9c8ab 100644 --- a/src/gui/element/elementwidgets.h +++ b/src/gui/element/elementwidgets.h @@ -303,7 +303,8 @@ private slots: void reset(); = private: - QPushButton *m_buttonRestore; + class Private; + Private *const d; }; = #endif // KBIBTEX_GUI_ELEMENTWIDGETS_H diff --git a/src/gui/field/fieldlineedit.cpp b/src/gui/field/fieldlineedit.= cpp index f3c7f40a..6d10149f 100644 --- a/src/gui/field/fieldlineedit.cpp +++ b/src/gui/field/fieldlineedit.cpp @@ -109,7 +109,7 @@ public: if (!value.isEmpty()) { if (typeFlag =3D=3D KBibTeX::tfSource) { /// simple case: field's value is to be shown as BibTeX co= de, including surrounding curly braces - FileExporterBibTeX exporter; + FileExporterBibTeX exporter(parent); text =3D exporter.valueToBibTeX(value); result =3D true; } else { @@ -185,7 +185,7 @@ public: return true; } else if (typeFlag =3D=3D KBibTeX::tfSource) { QString key =3D typeFlags.testFlag(KBibTeX::tfPerson) ? QStrin= gLiteral("author") : QStringLiteral("title"); - FileImporterBibTeX importer; + FileImporterBibTeX importer(parent); QString fakeBibTeXFile =3D QString(QStringLiteral("@article{du= mmy, %1=3D%2}")).arg(key, encodedText); = File *file =3D importer.fromString(fakeBibTeXFile); @@ -486,7 +486,7 @@ void FieldLineEdit::dropEvent(QDropEvent *event) = const File *file =3D nullptr; if (!d->fieldKey.isEmpty() && clipboardText.startsWith(QStringLiteral(= "@"))) { - FileImporterBibTeX importer; + FileImporterBibTeX importer(this); file =3D importer.fromString(clipboardText); const QSharedPointer entry =3D (file !=3D nullptr && file->= count() =3D=3D 1) ? file->first().dynamicCast() : QSharedPointer(); if (!entry.isNull() && d->fieldKey =3D=3D Entry::ftCrossRef) { diff --git a/src/gui/field/fieldlistedit.cpp b/src/gui/field/fieldlistedit.= cpp index 5c159781..2b7b90c9 100644 --- a/src/gui/field/fieldlistedit.cpp +++ b/src/gui/field/fieldlistedit.cpp @@ -326,7 +326,7 @@ void FieldListEdit::dropEvent(QDropEvent *event) = const File *file =3D nullptr; if (!d->fieldKey.isEmpty() && clipboardText.startsWith(QStringLiteral(= "@"))) { - FileImporterBibTeX importer; + FileImporterBibTeX importer(this); file =3D importer.fromString(clipboardText); const QSharedPointer entry =3D (file !=3D nullptr && file->= count() =3D=3D 1) ? file->first().dynamicCast() : QSharedPointer(); = diff --git a/src/gui/file/clipboard.cpp b/src/gui/file/clipboard.cpp index 9057eabf..9177b288 100644 --- a/src/gui/file/clipboard.cpp +++ b/src/gui/file/clipboard.cpp @@ -60,7 +60,7 @@ public: for (const QModelIndex &index : mil) file->append(fileView->fileModel()->element(fileView->sortFilt= erProxyModel()->mapToSource(index).row())); = - FileExporterBibTeX exporter; + FileExporterBibTeX exporter(fileView); exporter.setEncoding(QStringLiteral("latex")); QBuffer buffer(fileView); buffer.open(QBuffer::WriteOnly); @@ -116,7 +116,7 @@ public: = /// Assumption: user dropped a piece of BibTeX code, /// use BibTeX importer to generate representation from plain text - FileImporterBibTeX importer; + FileImporterBibTeX importer(fileView); File *file =3D importer.fromString(text); if (file !=3D nullptr) { if (!file->isEmpty()) { diff --git a/src/gui/preferences/settingsidsuggestionswidget.cpp b/src/gui/= preferences/settingsidsuggestionswidget.cpp index f7eadc90..18a9893c 100644 --- a/src/gui/preferences/settingsidsuggestionswidget.cpp +++ b/src/gui/preferences/settingsidsuggestionswidget.cpp @@ -52,7 +52,7 @@ public: m_defaultFormatStringRow =3D -1; = if (exampleBibTeXEntry.isNull()) { - static FileImporterBibTeX fileImporterBibTeX; + static FileImporterBibTeX fileImporterBibTeX(this); File *file =3D fileImporterBibTeX.fromString(exampleBibTeXEntr= yString); if (file !=3D nullptr) { if (!file->isEmpty()) diff --git a/src/io/fileexporter.cpp b/src/io/fileexporter.cpp index 82539804..8846f016 100644 --- a/src/io/fileexporter.cpp +++ b/src/io/fileexporter.cpp @@ -1,5 +1,5 @@ /*************************************************************************= ** - * Copyright (C) 2004-2014 by Thomas Fischer = * + * Copyright (C) 2004-2017 by Thomas Fischer = * * = * * 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 = * @@ -24,7 +24,8 @@ const QString FileExporter::defaultPaperSize =3D QStringL= iteral("a4"); const QString FileExporter::keyFont =3D QStringLiteral("Font"); const QString FileExporter::defaultFont =3D QStringLiteral(""); = -FileExporter::FileExporter() : QObject() +FileExporter::FileExporter(QObject *parent) + : QObject(parent) { // nothing } diff --git a/src/io/fileexporter.h b/src/io/fileexporter.h index 674260f2..65ad8b66 100644 --- a/src/io/fileexporter.h +++ b/src/io/fileexporter.h @@ -42,7 +42,7 @@ public: static const QString keyFont; static const QString defaultFont; = - FileExporter(); + FileExporter(QObject *parent); ~FileExporter() override; = QString toString(const QSharedPointer element, const Fi= le *bibtexfile, QStringList *errorLog =3D nullptr); diff --git a/src/io/fileexporterbibtex.cpp b/src/io/fileexporterbibtex.cpp index 6275d246..617cbe51 100644 --- a/src/io/fileexporterbibtex.cpp +++ b/src/io/fileexporterbibtex.cpp @@ -340,8 +340,8 @@ public: }; = = -FileExporterBibTeX::FileExporterBibTeX() - : FileExporter(), d(new FileExporterBibTeXPrivate(this)) +FileExporterBibTeX::FileExporterBibTeX(QObject *parent) + : FileExporter(parent), d(new FileExporterBibTeXPrivate(this)) { // nothing } @@ -498,7 +498,7 @@ void FileExporterBibTeX::cancel() QString FileExporterBibTeX::valueToBibTeX(const Value &value, const QStrin= g &key, UseLaTeXEncoding useLaTeXEncoding) { if (staticFileExporterBibTeX =3D=3D nullptr) { - staticFileExporterBibTeX =3D new FileExporterBibTeX(); + staticFileExporterBibTeX =3D new FileExporterBibTeX(nullptr); staticFileExporterBibTeX->d->loadState(); } return staticFileExporterBibTeX->internalValueToBibTeX(value, key, use= LaTeXEncoding); diff --git a/src/io/fileexporterbibtex.h b/src/io/fileexporterbibtex.h index 512a8b4f..88afbb24 100644 --- a/src/io/fileexporterbibtex.h +++ b/src/io/fileexporterbibtex.h @@ -41,7 +41,7 @@ class KBIBTEXIO_EXPORT FileExporterBibTeX : public FileEx= porter public: enum UseLaTeXEncoding {leUTF8, leLaTeX, leRaw}; = - FileExporterBibTeX(); + FileExporterBibTeX(QObject *parent); ~FileExporterBibTeX() override; = void setEncoding(const QString &encoding); diff --git a/src/io/fileexporterbibtex2html.cpp b/src/io/fileexporterbibtex= 2html.cpp index cdbf73ef..74a794c3 100644 --- a/src/io/fileexporterbibtex2html.cpp +++ b/src/io/fileexporterbibtex2html.cpp @@ -1,5 +1,5 @@ /*************************************************************************= ** - * Copyright (C) 2004-2014 by Thomas Fischer = * + * Copyright (C) 2004-2017 by Thomas Fischer = * * = * * 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 = * @@ -90,8 +90,8 @@ public: } }; = -FileExporterBibTeX2HTML::FileExporterBibTeX2HTML() - : FileExporterToolchain(), d(new FileExporterBibTeX2HTMLPrivate(th= is, tempDir.path())) +FileExporterBibTeX2HTML::FileExporterBibTeX2HTML(QObject *parent) + : FileExporterToolchain(parent), d(new FileExporterBibTeX2HTMLPriv= ate(this, tempDir.path())) { // nothing } @@ -117,11 +117,10 @@ bool FileExporterBibTeX2HTML::save(QIODevice *iodevic= e, const File *bibtexfile, = QFile output(d->bibTeXFilename); if (output.open(QIODevice::WriteOnly)) { - FileExporterBibTeX *bibtexExporter =3D new FileExporterBibTeX(); - bibtexExporter->setEncoding(QStringLiteral("latex")); - result =3D bibtexExporter->save(&output, bibtexfile, errorLog); + FileExporterBibTeX bibtexExporter(this); + bibtexExporter.setEncoding(QStringLiteral("latex")); + result =3D bibtexExporter.save(&output, bibtexfile, errorLog); output.close(); - delete bibtexExporter; } = if (result) @@ -142,11 +141,10 @@ bool FileExporterBibTeX2HTML::save(QIODevice *iodevic= e, const QSharedPointerbibTeXFilename); if (output.open(QIODevice::WriteOnly)) { - FileExporterBibTeX *bibtexExporter =3D new FileExporterBibTeX(); - bibtexExporter->setEncoding(QStringLiteral("latex")); - result =3D bibtexExporter->save(&output, element, bibtexfile, erro= rLog); + FileExporterBibTeX bibtexExporter(this); + bibtexExporter.setEncoding(QStringLiteral("latex")); + result =3D bibtexExporter.save(&output, element, bibtexfile, error= Log); output.close(); - delete bibtexExporter; } = if (result) diff --git a/src/io/fileexporterbibtex2html.h b/src/io/fileexporterbibtex2h= tml.h index f6949a52..9d5cfc68 100644 --- a/src/io/fileexporterbibtex2html.h +++ b/src/io/fileexporterbibtex2html.h @@ -27,7 +27,7 @@ class KBIBTEXIO_EXPORT FileExporterBibTeX2HTML: public Fi= leExporterToolchain Q_OBJECT = public: - FileExporterBibTeX2HTML(); + FileExporterBibTeX2HTML(QObject *parent); ~FileExporterBibTeX2HTML() override; = void reloadConfig() override; diff --git a/src/io/fileexporterbibtexoutput.cpp b/src/io/fileexporterbibte= xoutput.cpp index e49ceab9..b96ecefd 100644 --- a/src/io/fileexporterbibtexoutput.cpp +++ b/src/io/fileexporterbibtexoutput.cpp @@ -1,5 +1,5 @@ /*************************************************************************= ** - * Copyright (C) 2004-2014 by Thomas Fischer = * + * Copyright (C) 2004-2017 by Thomas Fischer = * * = * * 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 = * @@ -30,8 +30,8 @@ #include "kbibtex.h" #include "logging_io.h" = -FileExporterBibTeXOutput::FileExporterBibTeXOutput(OutputType outputType) - : FileExporterToolchain(), m_outputType(outputType), m_latexLangua= ge(QStringLiteral("english")), m_latexBibStyle(QStringLiteral("plain")) +FileExporterBibTeXOutput::FileExporterBibTeXOutput(OutputType outputType, = QObject *parent) + : FileExporterToolchain(parent), m_outputType(outputType), m_latex= Language(QStringLiteral("english")), m_latexBibStyle(QStringLiteral("plain"= )) { m_fileBasename =3D QStringLiteral("bibtex-to-output"); m_fileStem =3D tempDir.path() + QDir::separator() + m_fileBasename; @@ -58,11 +58,10 @@ bool FileExporterBibTeXOutput::save(QIODevice *ioDevice= , const File *bibtexfile, = QBuffer buffer(this); if (buffer.open(QIODevice::WriteOnly)) { - FileExporterBibTeX *bibtexExporter =3D new FileExporterBibTeX(); - bibtexExporter->setEncoding(QStringLiteral("utf-8")); - result =3D bibtexExporter->save(&buffer, bibtexfile, errorLog); + FileExporterBibTeX bibtexExporter(this); + bibtexExporter.setEncoding(QStringLiteral("utf-8")); + result =3D bibtexExporter.save(&buffer, bibtexfile, errorLog); buffer.close(); - delete bibtexExporter; } = if (result) @@ -86,11 +85,10 @@ bool FileExporterBibTeXOutput::save(QIODevice *ioDevice= , const QSharedPointersetEncoding(QStringLiteral("utf-8")); - result =3D bibtexExporter->save(&buffer, element, bibtexfile, erro= rLog); + FileExporterBibTeX bibtexExporter(this); + bibtexExporter.setEncoding(QStringLiteral("utf-8")); + result =3D bibtexExporter.save(&buffer, element, bibtexfile, error= Log); buffer.close(); - delete bibtexExporter; } = if (result) diff --git a/src/io/fileexporterbibtexoutput.h b/src/io/fileexporterbibtexo= utput.h index 7e3d2098..c90d9bca 100644 --- a/src/io/fileexporterbibtexoutput.h +++ b/src/io/fileexporterbibtexoutput.h @@ -30,7 +30,7 @@ class KBIBTEXIO_EXPORT FileExporterBibTeXOutput : public = FileExporterToolchain = public: enum OutputType {BibTeXLogFile, BibTeXBlockList}; - explicit FileExporterBibTeXOutput(OutputType outputType); + explicit FileExporterBibTeXOutput(OutputType outputType, QObject *pare= nt); ~FileExporterBibTeXOutput() override; = void reloadConfig() override; diff --git a/src/io/fileexporterbibutils.cpp b/src/io/fileexporterbibutils.= cpp index bbbcf46e..4fbf3150 100644 --- a/src/io/fileexporterbibutils.cpp +++ b/src/io/fileexporterbibutils.cpp @@ -1,5 +1,5 @@ /*************************************************************************= ** - * Copyright (C) 2004-2014 by Thomas Fischer = * + * Copyright (C) 2004-2017 by Thomas Fischer = * * = * * 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 = * @@ -28,17 +28,22 @@ private: // UNUSED FileExporterBibUtils *p; = public: - FileExporterBibTeX bibtexExporter; + FileExporterBibTeX *bibtexExporter; = - Private(FileExporterBibUtils */* UNUSED parent*/) + Private(FileExporterBibUtils *parent) // UNUSED : p(parent) { - bibtexExporter.setEncoding(QStringLiteral("utf-8")); + bibtexExporter =3D new FileExporterBibTeX(parent); + bibtexExporter->setEncoding(QStringLiteral("utf-8")); + } + + ~Private() { + delete bibtexExporter; } }; = -FileExporterBibUtils::FileExporterBibUtils() - : FileExporter(), BibUtils(), d(new FileExporterBibUtils::Private(= this)) +FileExporterBibUtils::FileExporterBibUtils(QObject *parent) + : FileExporter(parent), BibUtils(), d(new FileExporterBibUtils::Pr= ivate(this)) { // TODO } @@ -56,7 +61,7 @@ bool FileExporterBibUtils::save(QIODevice *iodevice, cons= t File *bibtexfile, QSt } = QBuffer buffer; - bool result =3D d->bibtexExporter.save(&buffer, bibtexfile, errorLog); + bool result =3D d->bibtexExporter->save(&buffer, bibtexfile, errorLog); if (result) result =3D convert(buffer, BibUtils::BibTeX, *iodevice, format()); = @@ -70,7 +75,7 @@ bool FileExporterBibUtils::save(QIODevice *iodevice, cons= t QSharedPointerbibtexExporter.save(&buffer, element, bibtexfile, e= rrorLog); + bool result =3D d->bibtexExporter->save(&buffer, element, bibtexfile, = errorLog); if (result) result =3D convert(buffer, BibUtils::BibTeX, *iodevice, format()); = diff --git a/src/io/fileexporterbibutils.h b/src/io/fileexporterbibutils.h index 96fd5049..3045bf4b 100644 --- a/src/io/fileexporterbibutils.h +++ b/src/io/fileexporterbibutils.h @@ -29,7 +29,7 @@ class KBIBTEXIO_EXPORT FileExporterBibUtils : public File= Exporter, public BibUti Q_OBJECT = public: - explicit FileExporterBibUtils(); + explicit FileExporterBibUtils(QObject *parent); ~FileExporterBibUtils() override; = bool save(QIODevice *iodevice, const File *bibtexfile, QStringList *er= rorLog =3D nullptr) override; diff --git a/src/io/fileexporterpdf.cpp b/src/io/fileexporterpdf.cpp index 1ab4133c..340f2104 100644 --- a/src/io/fileexporterpdf.cpp +++ b/src/io/fileexporterpdf.cpp @@ -33,15 +33,13 @@ #include "kbibtex.h" #include "logging_io.h" = -FileExporterPDF::FileExporterPDF(FileEmbedding fileEmbedding) - : FileExporterToolchain(), m_fileEmbedding(fileEmbedding) +FileExporterPDF::FileExporterPDF(QObject *parent) + : FileExporterToolchain(parent) { m_fileBasename =3D QStringLiteral("bibtex-to-pdf"); m_fileStem =3D tempDir.path() + QDir::separator() + m_fileBasename; = - /// If there is not embedfile.sty file, disable embedding - /// irrespective of user's wishes - if (!kpsewhich(QStringLiteral("embedfile.sty"))) m_fileEmbedding =3D N= oFileEmbedding; + setFileEmbedding(FileExporterPDF::EmbedBibTeXFileAndReferences); = reloadConfig(); } @@ -79,11 +77,10 @@ bool FileExporterPDF::save(QIODevice *iodevice, const F= ile *bibtexfile, QStringL = QFile output(m_fileStem + KBibTeX::extensionBibTeX); if (output.open(QIODevice::WriteOnly)) { - FileExporterBibTeX *bibtexExporter =3D new FileExporterBibTeX(); - bibtexExporter->setEncoding(QStringLiteral("latex")); - result =3D bibtexExporter->save(&output, bibtexfile, errorLog); + FileExporterBibTeX bibtexExporter(this); + bibtexExporter.setEncoding(QStringLiteral("latex")); + result =3D bibtexExporter.save(&output, bibtexfile, errorLog); output.close(); - delete bibtexExporter; } = if (result) @@ -110,11 +107,10 @@ bool FileExporterPDF::save(QIODevice *iodevice, const= QSharedPointersetEncoding(QStringLiteral("latex")); - result =3D bibtexExporter->save(&output, element, bibtexfile, erro= rLog); + FileExporterBibTeX bibtexExporter(this); + bibtexExporter.setEncoding(QStringLiteral("latex")); + result =3D bibtexExporter.save(&output, element, bibtexfile, error= Log); output.close(); - delete bibtexExporter; } = if (result) @@ -129,6 +125,15 @@ void FileExporterPDF::setDocumentSearchPaths(const QSt= ringList &searchPaths) m_searchPaths =3D searchPaths; } = +void FileExporterPDF::setFileEmbedding(FileEmbedding fileEmbedding) { + /// If there is not embedfile.sty file, disable embedding + /// irrespective of user's wishes + if (!kpsewhich(QStringLiteral("embedfile.sty"))) + m_fileEmbedding =3D NoFileEmbedding; + else + m_fileEmbedding =3D fileEmbedding; +} + bool FileExporterPDF::generatePDF(QIODevice *iodevice, QStringList *errorL= og) { QStringList cmdLines =3D QStringList() << QStringLiteral("pdflatex -ha= lt-on-error ") + m_fileStem + KBibTeX::extensionTeX << QStringLiteral("bibt= ex ") + m_fileStem + KBibTeX::extensionAux << QStringLiteral("pdflatex -hal= t-on-error ") + m_fileStem + KBibTeX::extensionTeX << QStringLiteral("pdfla= tex -halt-on-error ") + m_fileStem + KBibTeX::extensionTeX; diff --git a/src/io/fileexporterpdf.h b/src/io/fileexporterpdf.h index e2a47d24..14922886 100644 --- a/src/io/fileexporterpdf.h +++ b/src/io/fileexporterpdf.h @@ -30,7 +30,7 @@ class KBIBTEXIO_EXPORT FileExporterPDF : public FileExpor= terToolchain = public: enum FileEmbedding { NoFileEmbedding =3D 0, EmbedBibTeXFile =3D 1, Emb= edReferences =3D 2, EmbedBibTeXFileAndReferences =3D EmbedBibTeXFile | Embe= dReferences}; - explicit FileExporterPDF(FileEmbedding fileEmbedding =3D FileExporterP= DF::EmbedBibTeXFileAndReferences); + explicit FileExporterPDF(QObject *parent); ~FileExporterPDF() override; = void reloadConfig() override; @@ -39,6 +39,7 @@ public: bool save(QIODevice *iodevice, const QSharedPointer ele= ment, const File *bibtexfile, QStringList *errorLog =3D nullptr) override; = void setDocumentSearchPaths(const QStringList &searchPaths); + void setFileEmbedding(FileEmbedding fileEmbedding); = private: QString m_fileBasename; diff --git a/src/io/fileexporterps.cpp b/src/io/fileexporterps.cpp index ca6eee6f..4a5e42df 100644 --- a/src/io/fileexporterps.cpp +++ b/src/io/fileexporterps.cpp @@ -30,8 +30,8 @@ #include "kbibtex.h" #include "logging_io.h" = -FileExporterPS::FileExporterPS() - : FileExporterToolchain() +FileExporterPS::FileExporterPS(QObject *parent) + : FileExporterToolchain(parent) { m_fileBasename =3D QStringLiteral("bibtex-to-ps"); m_fileStem =3D tempDir.path() + QDir::separator() + m_fileBasename; @@ -67,11 +67,10 @@ bool FileExporterPS::save(QIODevice *iodevice, const Fi= le *bibtexfile, QStringLi = QFile output(m_fileStem + KBibTeX::extensionBibTeX); if (output.open(QIODevice::WriteOnly)) { - FileExporterBibTeX *bibtexExporter =3D new FileExporterBibTeX(); - bibtexExporter->setEncoding(QStringLiteral("latex")); - result =3D bibtexExporter->save(&output, bibtexfile, errorLog); + FileExporterBibTeX bibtexExporter(this); + bibtexExporter.setEncoding(QStringLiteral("latex")); + result =3D bibtexExporter.save(&output, bibtexfile, errorLog); output.close(); - delete bibtexExporter; } = if (result) @@ -92,11 +91,10 @@ bool FileExporterPS::save(QIODevice *iodevice, const QS= haredPointersetEncoding(QStringLiteral("latex")); - result =3D bibtexExporter->save(&output, element, bibtexfile, erro= rLog); + FileExporterBibTeX bibtexExporter(this); + bibtexExporter.setEncoding(QStringLiteral("latex")); + result =3D bibtexExporter.save(&output, element, bibtexfile, error= Log); output.close(); - delete bibtexExporter; } = if (result) diff --git a/src/io/fileexporterps.h b/src/io/fileexporterps.h index 05822c5b..803cb800 100644 --- a/src/io/fileexporterps.h +++ b/src/io/fileexporterps.h @@ -29,7 +29,7 @@ class KBIBTEXIO_EXPORT FileExporterPS : public FileExport= erToolchain Q_OBJECT = public: - FileExporterPS(); + FileExporterPS(QObject *parent); ~FileExporterPS() override; = void reloadConfig() override; diff --git a/src/io/fileexporterris.cpp b/src/io/fileexporterris.cpp index aefa33ac..a56a5ff4 100644 --- a/src/io/fileexporterris.cpp +++ b/src/io/fileexporterris.cpp @@ -1,5 +1,5 @@ /*************************************************************************= ** - * Copyright (C) 2004-2014 by Thomas Fischer = * + * Copyright (C) 2004-2017 by Thomas Fischer = * * = * * 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 = * @@ -23,8 +23,8 @@ #include "entry.h" #include "logging_io.h" = -FileExporterRIS::FileExporterRIS() - : FileExporter(), m_cancelFlag(false) +FileExporterRIS::FileExporterRIS(QObject *parent) + : FileExporter(parent), m_cancelFlag(false) { // nothing } diff --git a/src/io/fileexporterris.h b/src/io/fileexporterris.h index 7af9a639..89501e94 100644 --- a/src/io/fileexporterris.h +++ b/src/io/fileexporterris.h @@ -30,7 +30,7 @@ class KBIBTEXIO_EXPORT FileExporterRIS : public FileExpor= ter Q_OBJECT = public: - FileExporterRIS(); + FileExporterRIS(QObject *parent); ~FileExporterRIS() override; = bool save(QIODevice *iodevice, const QSharedPointer ele= ment, const File *bibtexfile, QStringList *errorLog =3D nullptr) override; diff --git a/src/io/fileexporterrtf.cpp b/src/io/fileexporterrtf.cpp index 680d6e51..2cf0b23d 100644 --- a/src/io/fileexporterrtf.cpp +++ b/src/io/fileexporterrtf.cpp @@ -1,5 +1,5 @@ /*************************************************************************= ** - * Copyright (C) 2004-2014 by Thomas Fischer = * + * Copyright (C) 2004-2017 by Thomas Fischer = * * = * * 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 = * @@ -30,8 +30,8 @@ #include "kbibtex.h" #include "logging_io.h" = -FileExporterRTF::FileExporterRTF() - : FileExporterToolchain() +FileExporterRTF::FileExporterRTF(QObject *parent) + : FileExporterToolchain(parent) { m_fileBasename =3D QStringLiteral("bibtex-to-rtf"); m_fileStem =3D tempDir.path() + QDir::separator() + m_fileBasename; @@ -66,11 +66,10 @@ bool FileExporterRTF::save(QIODevice *iodevice, const F= ile *bibtexfile, QStringL = QFile output(m_fileStem + KBibTeX::extensionBibTeX); if (output.open(QIODevice::WriteOnly)) { - FileExporterBibTeX *bibtexExporter =3D new FileExporterBibTeX(); - bibtexExporter->setEncoding(QStringLiteral("latex")); - result =3D bibtexExporter->save(&output, bibtexfile, errorLog); + FileExporterBibTeX bibtexExporter(this); + bibtexExporter.setEncoding(QStringLiteral("latex")); + result =3D bibtexExporter.save(&output, bibtexfile, errorLog); output.close(); - delete bibtexExporter; } = if (result) @@ -91,11 +90,10 @@ bool FileExporterRTF::save(QIODevice *iodevice, const Q= SharedPointersetEncoding(QStringLiteral("latex")); - result =3D bibtexExporter->save(&output, element, bibtexfile, erro= rLog); + FileExporterBibTeX bibtexExporter(this); + bibtexExporter.setEncoding(QStringLiteral("latex")); + result =3D bibtexExporter.save(&output, element, bibtexfile, error= Log); output.close(); - delete bibtexExporter; } = if (result) diff --git a/src/io/fileexporterrtf.h b/src/io/fileexporterrtf.h index af7b291e..9a0b2396 100644 --- a/src/io/fileexporterrtf.h +++ b/src/io/fileexporterrtf.h @@ -29,7 +29,7 @@ class KBIBTEXIO_EXPORT FileExporterRTF : public FileExpor= terToolchain Q_OBJECT = public: - FileExporterRTF(); + FileExporterRTF(QObject *parent); ~FileExporterRTF() override; = void reloadConfig() override; diff --git a/src/io/fileexportertoolchain.cpp b/src/io/fileexportertoolchai= n.cpp index 43d62bdd..d919b999 100644 --- a/src/io/fileexportertoolchain.cpp +++ b/src/io/fileexportertoolchain.cpp @@ -32,8 +32,8 @@ const QString FileExporterToolchain::defaultBabelLanguage= =3D QStringLiteral("engl const QString FileExporterToolchain::keyBibliographyStyle =3D QStringLiter= al("bibliographyStyle"); const QString FileExporterToolchain::defaultBibliographyStyle =3D QStringL= iteral("plain"); = -FileExporterToolchain::FileExporterToolchain() - : FileExporter(), m_process(nullptr), m_errorLog(nullptr) +FileExporterToolchain::FileExporterToolchain(QObject *parent) + : FileExporter(parent), m_process(nullptr), m_errorLog(nullptr) { tempDir.setAutoRemove(true); } diff --git a/src/io/fileexportertoolchain.h b/src/io/fileexportertoolchain.h index e57fc43f..37a2c205 100644 --- a/src/io/fileexportertoolchain.h +++ b/src/io/fileexportertoolchain.h @@ -40,7 +40,7 @@ public: static const QString keyBibliographyStyle; static const QString defaultBibliographyStyle; = - FileExporterToolchain(); + FileExporterToolchain(QObject *parent); = virtual void reloadConfig() =3D 0; = diff --git a/src/io/fileexporterxml.cpp b/src/io/fileexporterxml.cpp index 388158da..3320130a 100644 --- a/src/io/fileexporterxml.cpp +++ b/src/io/fileexporterxml.cpp @@ -28,8 +28,8 @@ #include "encoderxml.h" #include "logging_io.h" = -FileExporterXML::FileExporterXML() - : FileExporter(), m_cancelFlag(false) +FileExporterXML::FileExporterXML(QObject *parent) + : FileExporter(parent), m_cancelFlag(false) { /// nothing } diff --git a/src/io/fileexporterxml.h b/src/io/fileexporterxml.h index b5757e36..ef54858c 100644 --- a/src/io/fileexporterxml.h +++ b/src/io/fileexporterxml.h @@ -35,7 +35,7 @@ class KBIBTEXIO_EXPORT FileExporterXML : public FileExpor= ter Q_OBJECT = public: - FileExporterXML(); + FileExporterXML(QObject *parent); ~FileExporterXML() override; = bool save(QIODevice *iodevice, const File *bibtexfile, QStringList *er= rorLog =3D nullptr) override; diff --git a/src/io/fileexporterxslt.cpp b/src/io/fileexporterxslt.cpp index 0b2b3e52..eb39540b 100644 --- a/src/io/fileexporterxslt.cpp +++ b/src/io/fileexporterxslt.cpp @@ -1,5 +1,5 @@ /*************************************************************************= ** - * Copyright (C) 2004-2014 by Thomas Fischer = * + * Copyright (C) 2004-2017 by Thomas Fischer = * * = * * 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 = * @@ -33,13 +33,11 @@ #include "xsltransform.h" #include "logging_io.h" = -FileExporterXSLT::FileExporterXSLT(const QString &xsltFilename) - : FileExporter(), m_cancelFlag(false) +FileExporterXSLT::FileExporterXSLT(const QString &xsltFilename, QObject *p= arent) + : FileExporter(parent), m_cancelFlag(false), m_xsltFilename(xsltFi= lename) { if (xsltFilename.isEmpty() || !QFile(xsltFilename).exists()) - setXSLTFilename(QStandardPaths::locate(QStandardPaths::GenericData= Location, QStringLiteral("kbibtex/standard.xsl"))); - else - setXSLTFilename(xsltFilename); + qCWarning(LOG_KBIBTEX_IO) << "Invalid XSLT filename: " << xsltFile= name; } = = @@ -53,11 +51,14 @@ bool FileExporterXSLT::save(QIODevice *iodevice, const = File *bibtexfile, QString if (!iodevice->isWritable() && !iodevice->open(QIODevice::WriteOnly)) { qCWarning(LOG_KBIBTEX_IO) << "Output device not writable"; return false; + } else if (m_xsltFilename.isEmpty() || !QFile(m_xsltFilename).exists()= ) { + qCWarning(LOG_KBIBTEX_IO) << "Invalid XSLT filename: " << m_xsltFi= lename; + return false; } = m_cancelFlag =3D false; XSLTransform xsltransformer(m_xsltFilename); - FileExporterXML xmlExporter; + FileExporterXML xmlExporter(this); = QBuffer buffer; buffer.open(QIODevice::WriteOnly); @@ -84,11 +85,14 @@ bool FileExporterXSLT::save(QIODevice *iodevice, const = QSharedPointerisWritable() && !iodevice->open(QIODevice::WriteOnly)) { qCWarning(LOG_KBIBTEX_IO) << "Output device not writable"; return false; + } else if (m_xsltFilename.isEmpty() || !QFile(m_xsltFilename).exists()= ) { + qCWarning(LOG_KBIBTEX_IO) << "Invalid XSLT filename: " << m_xsltFi= lename; + return false; } = m_cancelFlag =3D false; XSLTransform xsltransformer(m_xsltFilename); - FileExporterXML xmlExporter; + FileExporterXML xmlExporter(this); = QBuffer buffer; buffer.open(QIODevice::WriteOnly); @@ -110,12 +114,13 @@ bool FileExporterXSLT::save(QIODevice *iodevice, cons= t QSharedPointer ele= ment, const File *bibtexfile, QStringList *errorLog =3D nullptr) override; = - void setXSLTFilename(const QString &xsltFilename); = public slots: void cancel() override; @@ -51,4 +50,14 @@ private: QString m_xsltFilename; }; = + +/** + * @author Thomas Fischer + */ +class KBIBTEXIO_EXPORT FileExporterHTML : public FileExporterXSLT +{ + Q_OBJECT +public: + explicit FileExporterHTML(QObject *parent); +}; #endif diff --git a/src/io/fileimporter.cpp b/src/io/fileimporter.cpp index 60b8797e..b3fee4ca 100644 --- a/src/io/fileimporter.cpp +++ b/src/io/fileimporter.cpp @@ -25,8 +25,8 @@ #include "value.h" #include "logging_io.h" = -FileImporter::FileImporter() - : QObject() +FileImporter::FileImporter(QObject *parent) + : QObject(parent) { // nothing } diff --git a/src/io/fileimporter.h b/src/io/fileimporter.h index 45348fb7..6ed5d4ca 100644 --- a/src/io/fileimporter.h +++ b/src/io/fileimporter.h @@ -34,7 +34,7 @@ class KBIBTEXIO_EXPORT FileImporter : public QObject Q_OBJECT = public: - FileImporter(); + FileImporter(QObject *parent); ~FileImporter() override; = File *fromString(const QString &text); diff --git a/src/io/fileimporterbibtex.cpp b/src/io/fileimporterbibtex.cpp index db965542..c772a875 100644 --- a/src/io/fileimporterbibtex.cpp +++ b/src/io/fileimporterbibtex.cpp @@ -39,8 +39,8 @@ = const char *FileImporterBibTeX::defaultCodecName =3D "utf-8"; = -FileImporterBibTeX::FileImporterBibTeX(bool ignoreComments, KBibTeX::Casin= g keywordCasing) - : FileImporter(), m_cancelFlag(false), m_textStream(nullptr), m_ig= noreComments(ignoreComments), m_keywordCasing(keywordCasing), m_lineNo(1) +FileImporterBibTeX::FileImporterBibTeX(QObject *parent) + : FileImporter(parent), m_cancelFlag(false), m_textStream(nullptr)= , m_commentHandling(IgnoreComments), m_keywordCasing(KBibTeX::cLowerCase), = m_lineNo(1) { m_keysForPersonDetection.append(Entry::ftAuthor); m_keysForPersonDetection.append(Entry::ftEditor); @@ -113,7 +113,7 @@ File *FileImporterBibTeX::load(QIODevice *iodevice) Element *element =3D nextElement(); = if (element !=3D nullptr) { - if (!m_ignoreComments || !Comment::isComment(*element)) + if (m_commentHandling =3D=3D KeepComments || !Comment::isComme= nt(*element)) result->append(QSharedPointer(element)); else delete element; @@ -1164,3 +1164,7 @@ QString FileImporterBibTeX::tokenidToString(Token tok= en) default: return QString(QStringLiteral("")); } } + +void FileImporterBibTeX::setCommentHandling(CommentHandling commentHandlin= g) { + m_commentHandling =3D commentHandling; +} diff --git a/src/io/fileimporterbibtex.h b/src/io/fileimporterbibtex.h index ccd79404..66069d33 100644 --- a/src/io/fileimporterbibtex.h +++ b/src/io/fileimporterbibtex.h @@ -48,17 +48,12 @@ class KBIBTEXIO_EXPORT FileImporterBibTeX : public File= Importer public: static const char *defaultCodecName; = + enum CommentHandling {IgnoreComments =3D 0, KeepComments =3D 1}; + /** * Creates an importer class to read a BibTeX file. - * @param encoding the file's encoding. - * Supports all of iconv's encodings plus "latex", - * which performs no encoding but relies on that - * this file is pure ASCII only. - * @param ignoreComments ignore comments in file. - * Useful if you for example read from an HTML file, - * as all HTML content you be treated as comments otherwise. */ - explicit FileImporterBibTeX(bool ignoreComments =3D true, KBibTeX::Cas= ing keywordCasing =3D KBibTeX::cLowerCase); + explicit FileImporterBibTeX(QObject *parent); ~FileImporterBibTeX() override; = /** @@ -103,6 +98,8 @@ public: = static void parsePersonList(const QString &text, Value &value); = + void setCommentHandling(CommentHandling commentHandling); + public slots: void cancel() override; = @@ -122,7 +119,7 @@ private: = bool m_cancelFlag; QTextStream *m_textStream; - bool m_ignoreComments; + CommentHandling m_commentHandling; KBibTeX::Casing m_keywordCasing; QStringList m_keysForPersonDetection; QSet m_knownElementIds; diff --git a/src/io/fileimporterbibutils.cpp b/src/io/fileimporterbibutils.= cpp index 2042766b..66127839 100644 --- a/src/io/fileimporterbibutils.cpp +++ b/src/io/fileimporterbibutils.cpp @@ -28,17 +28,21 @@ private: // UNUSED FileImporterBibUtils *p; = public: - FileImporterBibTeX bibtexImporter; + FileImporterBibTeX *bibtexImporter; = - Private(FileImporterBibUtils */* UNUSED parent*/) + Private(FileImporterBibUtils *parent) // UNUSED : p(parent) { - /// nothing + bibtexImporter =3D new FileImporterBibTeX(parent); + } + + ~Private() { + delete bibtexImporter; } }; = -FileImporterBibUtils::FileImporterBibUtils() - : FileImporter(), BibUtils(), d(new FileImporterBibUtils::Private(= this)) +FileImporterBibUtils::FileImporterBibUtils(QObject *parent) + : FileImporter(parent), BibUtils(), d(new FileImporterBibUtils::Pr= ivate(this)) { /// nothing } @@ -60,7 +64,7 @@ File *FileImporterBibUtils::load(QIODevice *iodevice) iodevice->close(); = if (result) - return d->bibtexImporter.load(&buffer); + return d->bibtexImporter->load(&buffer); else return nullptr; } diff --git a/src/io/fileimporterbibutils.h b/src/io/fileimporterbibutils.h index fb414db6..e9092023 100644 --- a/src/io/fileimporterbibutils.h +++ b/src/io/fileimporterbibutils.h @@ -29,7 +29,7 @@ class KBIBTEXIO_EXPORT FileImporterBibUtils : public File= Importer, public BibUti Q_OBJECT = public: - explicit FileImporterBibUtils(); + explicit FileImporterBibUtils(QObject *parent); ~FileImporterBibUtils() override; = File *load(QIODevice *iodevice) override; diff --git a/src/io/fileimporterpdf.cpp b/src/io/fileimporterpdf.cpp index d648546f..c243c5fc 100644 --- a/src/io/fileimporterpdf.cpp +++ b/src/io/fileimporterpdf.cpp @@ -26,10 +26,10 @@ #include "fileimporterbibtex.h" #include "logging_io.h" = -FileImporterPDF::FileImporterPDF() - : FileImporter(), m_cancelFlag(false) +FileImporterPDF::FileImporterPDF(QObject *parent) + : FileImporter(parent), m_cancelFlag(false) { - m_bibTeXimporter =3D new FileImporterBibTeX(); + m_bibTeXimporter =3D new FileImporterBibTeX(this); } = FileImporterPDF::~FileImporterPDF() @@ -66,7 +66,7 @@ File *FileImporterPDF::load(QIODevice *iodevice) // Poppler::EmbeddedFile to operate on const objects? QByteArray data(file->data()); QBuffer buffer(&data); - FileImporterBibTeX bibTeXimporter; + FileImporterBibTeX bibTeXimporter(this); connect(&bibTeXimporter, &FileImporter::progress, this, &F= ileImporter::progress); buffer.open(QIODevice::ReadOnly); result =3D bibTeXimporter.load(&buffer); diff --git a/src/io/fileimporterpdf.h b/src/io/fileimporterpdf.h index 65b10f0b..44cd4d44 100644 --- a/src/io/fileimporterpdf.h +++ b/src/io/fileimporterpdf.h @@ -33,7 +33,7 @@ class KBIBTEXIO_EXPORT FileImporterPDF : public FileImpor= ter Q_OBJECT = public: - FileImporterPDF(); + FileImporterPDF(QObject *parent); ~FileImporterPDF() override; = File *load(QIODevice *iodevice) override; diff --git a/src/io/fileimporterris.cpp b/src/io/fileimporterris.cpp index 6b0206e4..8d6bac06 100644 --- a/src/io/fileimporterris.cpp +++ b/src/io/fileimporterris.cpp @@ -239,8 +239,8 @@ public: = }; = -FileImporterRIS::FileImporterRIS() - : FileImporter(), d(new FileImporterRISPrivate(this)) +FileImporterRIS::FileImporterRIS(QObject *parent) + : FileImporter(parent), d(new FileImporterRISPrivate(this)) { // nothing } diff --git a/src/io/fileimporterris.h b/src/io/fileimporterris.h index d8e14fd3..1fd869c6 100644 --- a/src/io/fileimporterris.h +++ b/src/io/fileimporterris.h @@ -28,7 +28,7 @@ class KBIBTEXIO_EXPORT FileImporterRIS : public FileImpor= ter Q_OBJECT = public: - FileImporterRIS(); + FileImporterRIS(QObject *parent); ~FileImporterRIS() override; = File *load(QIODevice *iodevice) override; diff --git a/src/networking/onlinesearch/onlinesearchacmportal.cpp b/src/ne= tworking/onlinesearch/onlinesearchacmportal.cpp index 5d2b43dc..04df4516 100644 --- a/src/networking/onlinesearch/onlinesearchacmportal.cpp +++ b/src/networking/onlinesearch/onlinesearchacmportal.cpp @@ -241,7 +241,7 @@ void OnlineSearchAcmPortal::doneFetchingBibTeX() /// ensure proper treatment of UTF-8 characters QString bibTeXcode =3D QString::fromUtf8(reply->readAll().constDat= a()); = - FileImporterBibTeX importer; + FileImporterBibTeX importer(this); d->sanitizeBibTeXCode(bibTeXcode); File *bibtexFile =3D importer.fromString(bibTeXcode); = diff --git a/src/networking/onlinesearch/onlinesearcharxiv.cpp b/src/networ= king/onlinesearch/onlinesearcharxiv.cpp index 2f0baa6e..e3a12832 100644 --- a/src/networking/onlinesearch/onlinesearcharxiv.cpp +++ b/src/networking/onlinesearch/onlinesearcharxiv.cpp @@ -676,7 +676,7 @@ void OnlineSearchArXiv::downloadDone() qCWarning(LOG_KBIBTEX_NETWORKING) << "XSL tranformation failed= for data from " << reply->url().toDisplayString(); stopSearch(resultInvalidArguments); } else { - FileImporterBibTeX importer; + FileImporterBibTeX importer(this); File *bibtexFile =3D importer.fromString(bibTeXcode); = bool hasEntries =3D false; diff --git a/src/networking/onlinesearch/onlinesearchbibsonomy.cpp b/src/ne= tworking/onlinesearch/onlinesearchbibsonomy.cpp index d08f02f9..0e81df7f 100644 --- a/src/networking/onlinesearch/onlinesearchbibsonomy.cpp +++ b/src/networking/onlinesearch/onlinesearchbibsonomy.cpp @@ -238,7 +238,7 @@ void OnlineSearchBibsonomy::downloadDone() QString bibTeXcode =3D QString::fromUtf8(reply->readAll().constDat= a()); = if (!bibTeXcode.isEmpty()) { - FileImporterBibTeX importer; + FileImporterBibTeX importer(this); const File *bibtexFile =3D importer.fromString(bibTeXcode); = bool hasEntries =3D false; diff --git a/src/networking/onlinesearch/onlinesearchbiorxiv.cpp b/src/netw= orking/onlinesearch/onlinesearchbiorxiv.cpp index 0b732843..bc01b422 100644 --- a/src/networking/onlinesearch/onlinesearchbiorxiv.cpp +++ b/src/networking/onlinesearch/onlinesearchbiorxiv.cpp @@ -151,7 +151,7 @@ void OnlineSearchBioRxiv::bibTeXDownloadDone() { const QString bibTeXcode =3D QString::fromUtf8(reply->readAll().co= nstData()); = if (!bibTeXcode.isEmpty()) { - FileImporterBibTeX importer; + FileImporterBibTeX importer(this); File *bibtexFile =3D importer.fromString(bibTeXcode); = if (bibtexFile !=3D nullptr) { diff --git a/src/networking/onlinesearch/onlinesearchdoi.cpp b/src/networki= ng/onlinesearch/onlinesearchdoi.cpp index dc9d657c..a9c2b539 100644 --- a/src/networking/onlinesearch/onlinesearchdoi.cpp +++ b/src/networking/onlinesearch/onlinesearchdoi.cpp @@ -201,7 +201,7 @@ void OnlineSearchDOI::downloadDone() const QString bibTeXcode =3D QString::fromUtf8(reply->readAll(= ).constData()); = if (!bibTeXcode.isEmpty()) { - FileImporterBibTeX importer; + FileImporterBibTeX importer(this); File *bibtexFile =3D importer.fromString(bibTeXcode); = bool hasEntries =3D false; diff --git a/src/networking/onlinesearch/onlinesearchgooglescholar.cpp b/sr= c/networking/onlinesearch/onlinesearchgooglescholar.cpp index 52929978..1ec60fa5 100644 --- a/src/networking/onlinesearch/onlinesearchgooglescholar.cpp +++ b/src/networking/onlinesearch/onlinesearchgooglescholar.cpp @@ -48,17 +48,22 @@ public: QString configPageUrl; QString setConfigPageUrl; QString queryPageUrl; - FileImporterBibTeX importer; + FileImporterBibTeX *importer; = - OnlineSearchGoogleScholarPrivate(OnlineSearchGoogleScholar */* UNUSED = parent*/) + OnlineSearchGoogleScholarPrivate(OnlineSearchGoogleScholar *parent) : /* UNUSED p(parent), */ numResults(0) { + importer =3D new FileImporterBibTeX(parent); startPageUrl =3D QStringLiteral("https://scholar.google.com/"); configPageUrl =3D QStringLiteral("https://%1/scholar_settings"); setConfigPageUrl =3D QStringLiteral("https://%1/scholar_setprefs"); queryPageUrl =3D QStringLiteral("https://%1/scholar"); } = + ~OnlineSearchGoogleScholarPrivate() { + delete importer; + } + QString documentUrlForBibTeXEntry(const QString &htmlText, int bibLink= Pos) { /// Regular expression to detect text of a link to a document static const QRegExp documentLinkIndicator(QStringLiteral("\\[(PDF= |HTML)\\]"), Qt::CaseSensitive); @@ -309,7 +314,7 @@ void OnlineSearchGoogleScholar::doneFetchingBibTeX() } else { /// ensure proper treatment of UTF-8 characters QString rawText =3D QString::fromUtf8(reply->readAll().constDa= ta()); - File *bibtexFile =3D d->importer.fromString(rawText); + File *bibtexFile =3D d->importer->fromString(rawText); = bool hasEntry =3D false; if (bibtexFile !=3D nullptr) { diff --git a/src/networking/onlinesearch/onlinesearchideasrepec.cpp b/src/n= etworking/onlinesearch/onlinesearchideasrepec.cpp index 0649ba11..3185a264 100644 --- a/src/networking/onlinesearch/onlinesearchideasrepec.cpp +++ b/src/networking/onlinesearch/onlinesearchideasrepec.cpp @@ -214,7 +214,7 @@ void OnlineSearchIDEASRePEc::downloadBibTeXDone() const QString bibTeXcode =3D QString::fromUtf8(reply->readAll().co= nstData()); = if (!bibTeXcode.isEmpty()) { - FileImporterBibTeX importer; + FileImporterBibTeX importer(this); File *bibtexFile =3D importer.fromString(bibTeXcode); = if (bibtexFile !=3D nullptr) { diff --git a/src/networking/onlinesearch/onlinesearchieeexplore.cpp b/src/n= etworking/onlinesearch/onlinesearchieeexplore.cpp index fe87cc12..9a7f22d0 100644 --- a/src/networking/onlinesearch/onlinesearchieeexplore.cpp +++ b/src/networking/onlinesearch/onlinesearchieeexplore.cpp @@ -132,7 +132,7 @@ void OnlineSearchIEEEXplore::doneFetchingXML() qCWarning(LOG_KBIBTEX_NETWORKING) << "XSL tranformation fa= iled for data from " << reply->url().toDisplayString(); stopSearch(resultInvalidArguments); } else { - FileImporterBibTeX importer; + FileImporterBibTeX importer(this); File *bibtexFile =3D importer.fromString(bibTeXcode); = bool hasEntries =3D false; diff --git a/src/networking/onlinesearch/onlinesearchingentaconnect.cpp b/s= rc/networking/onlinesearch/onlinesearchingentaconnect.cpp index 64ffd18f..7710eff2 100644 --- a/src/networking/onlinesearch/onlinesearchingentaconnect.cpp +++ b/src/networking/onlinesearch/onlinesearchingentaconnect.cpp @@ -367,7 +367,7 @@ void OnlineSearchIngentaConnect::downloadDone() QString bibTeXcode =3D QString::fromUtf8(reply->readAll().constDat= a()); = if (!bibTeXcode.isEmpty()) { - FileImporterBibTeX importer; + FileImporterBibTeX importer(this); File *bibtexFile =3D importer.fromString(bibTeXcode); = bool hasEntries =3D false; diff --git a/src/networking/onlinesearch/onlinesearchisbndb.cpp b/src/netwo= rking/onlinesearch/onlinesearchisbndb.cpp index 202cbc5e..813ff750 100644 --- a/src/networking/onlinesearch/onlinesearchisbndb.cpp +++ b/src/networking/onlinesearch/onlinesearchisbndb.cpp @@ -126,7 +126,7 @@ void OnlineSearchIsbnDB::downloadDone() qCWarning(LOG_KBIBTEX_NETWORKING) << "XSL tranformation failed= for data from " << reply->url().toDisplayString(); stopSearch(resultInvalidArguments); } else { - FileImporterBibTeX importer; + FileImporterBibTeX importer(this); File *bibtexFile =3D importer.fromString(bibTeXcode); = bool hasEntries =3D false; diff --git a/src/networking/onlinesearch/onlinesearchjstor.cpp b/src/networ= king/onlinesearch/onlinesearchjstor.cpp index ac72158c..52073287 100644 --- a/src/networking/onlinesearch/onlinesearchjstor.cpp +++ b/src/networking/onlinesearch/onlinesearchjstor.cpp @@ -204,7 +204,7 @@ void OnlineSearchJStor::doneFetchingBibTeXCode() /// ensure proper treatment of UTF-8 characters const QString bibTeXcode =3D QString::fromUtf8(reply->readAll().co= nstData()); = - FileImporterBibTeX importer; + FileImporterBibTeX importer(this); File *bibtexFile =3D importer.fromString(bibTeXcode); int numFoundResults =3D 0; if (bibtexFile !=3D nullptr) { diff --git a/src/networking/onlinesearch/onlinesearchmathscinet.cpp b/src/n= etworking/onlinesearch/onlinesearchmathscinet.cpp index 31f5fa09..c2627b88 100644 --- a/src/networking/onlinesearch/onlinesearchmathscinet.cpp +++ b/src/networking/onlinesearch/onlinesearchmathscinet.cpp @@ -221,7 +221,7 @@ void OnlineSearchMathSciNet::doneFetchingBibTeXcode() bibtexCode +=3D QLatin1Char('\n'); } = - FileImporterBibTeX importer; + FileImporterBibTeX importer(this); const File *bibtexFile =3D importer.fromString(bibtexCode); = bool hasEntry =3D false; diff --git a/src/networking/onlinesearch/onlinesearchmrlookup.cpp b/src/net= working/onlinesearch/onlinesearchmrlookup.cpp index 4c548bee..0140d609 100644 --- a/src/networking/onlinesearch/onlinesearchmrlookup.cpp +++ b/src/networking/onlinesearch/onlinesearchmrlookup.cpp @@ -98,7 +98,7 @@ void OnlineSearchMRLookup::doneFetchingResultPage() bibtexCode +=3D QLatin1Char('\n'); } = - FileImporterBibTeX importer; + FileImporterBibTeX importer(this); File *bibtexFile =3D importer.fromString(bibtexCode); = bool hasEntry =3D false; diff --git a/src/networking/onlinesearch/onlinesearchpubmed.cpp b/src/netwo= rking/onlinesearch/onlinesearchpubmed.cpp index 66c8d343..23342020 100644 --- a/src/networking/onlinesearch/onlinesearchpubmed.cpp +++ b/src/networking/onlinesearch/onlinesearchpubmed.cpp @@ -206,7 +206,7 @@ void OnlineSearchPubMed::eFetchDone() if (bibTeXcode[0] =3D=3D '<') bibTeXcode =3D bibTeXcode.mid(bibTeXcode.indexOf(QStringLi= teral(">")) + 1); = - FileImporterBibTeX importer; + FileImporterBibTeX importer(this); File *bibtexFile =3D importer.fromString(bibTeXcode); = if (bibtexFile !=3D nullptr) { diff --git a/src/networking/onlinesearch/onlinesearchsciencedirect.cpp b/sr= c/networking/onlinesearch/onlinesearchsciencedirect.cpp index b6f5adfa..c474a3c7 100644 --- a/src/networking/onlinesearch/onlinesearchsciencedirect.cpp +++ b/src/networking/onlinesearch/onlinesearchsciencedirect.cpp @@ -275,7 +275,7 @@ void OnlineSearchScienceDirect::doneFetchingBibTeX() QString bibTeXcode =3D QString::fromUtf8(reply->readAll().constDat= a()); d->sanitizeBibTeXCode(bibTeXcode); = - FileImporterBibTeX importer; + FileImporterBibTeX importer(this); File *bibtexFile =3D importer.fromString(bibTeXcode); = bool hasEntry =3D false; diff --git a/src/networking/onlinesearch/onlinesearchsimplebibtexdownload.c= pp b/src/networking/onlinesearch/onlinesearchsimplebibtexdownload.cpp index 574a5de0..3ba32300 100644 --- a/src/networking/onlinesearch/onlinesearchsimplebibtexdownload.cpp +++ b/src/networking/onlinesearch/onlinesearchsimplebibtexdownload.cpp @@ -77,7 +77,7 @@ void OnlineSearchSimpleBibTeXDownload::downloadDone() } = if (!bibTeXcode.isEmpty()) { - FileImporterBibTeX importer; + FileImporterBibTeX importer(this); File *bibtexFile =3D importer.fromString(bibTeXcode); = bool hasEntries =3D false; diff --git a/src/networking/onlinesearch/onlinesearchspringerlink.cpp b/src= /networking/onlinesearch/onlinesearchspringerlink.cpp index 350ea4b4..e8aa00de 100644 --- a/src/networking/onlinesearch/onlinesearchspringerlink.cpp +++ b/src/networking/onlinesearch/onlinesearchspringerlink.cpp @@ -299,7 +299,7 @@ void OnlineSearchSpringerLink::doneFetchingPAM() qCWarning(LOG_KBIBTEX_NETWORKING) << "XSL tranformation failed= for data from " << reply->url().toDisplayString(); stopSearch(resultInvalidArguments); } else { - FileImporterBibTeX importer; + FileImporterBibTeX importer(this); const File *bibtexFile =3D importer.fromString(bibTeXcode); = bool hasEntries =3D false; diff --git a/src/networking/zotero/items.cpp b/src/networking/zotero/items.= cpp index 8bb39004..47e9c3e8 100644 --- a/src/networking/zotero/items.cpp +++ b/src/networking/zotero/items.cpp @@ -130,7 +130,7 @@ void Items::finishedFetchingItems() const QString bibTeXcode =3D QString::fromUtf8(reply->readAll().co= nstData()); /// Non-empty result? if (!bibTeXcode.isEmpty()) { - static FileImporterBibTeX importer; + static FileImporterBibTeX importer(this); /// Parse text into bibliography object File *bibtexFile =3D importer.fromString(bibTeXcode); = diff --git a/src/parts/part.cpp b/src/parts/part.cpp index 67f2d12d..dc9bc24e 100644 --- a/src/parts/part.cpp +++ b/src/parts/part.cpp @@ -275,45 +275,47 @@ public: = FileImporter *fileImporterFactory(const QUrl &url) { QString ending =3D url.path().toLower(); - int p =3D ending.lastIndexOf(QStringLiteral(".")); - ending =3D ending.mid(p + 1); + const auto pos =3D ending.lastIndexOf(QStringLiteral(".")); + ending =3D ending.mid(pos + 1); = if (ending =3D=3D QStringLiteral("pdf")) { - return new FileImporterPDF(); + return new FileImporterPDF(p); } else if (ending =3D=3D QStringLiteral("ris")) { - return new FileImporterRIS(); + return new FileImporterRIS(p); } else if (BibUtils::available() && ending =3D=3D QStringLiteral("= isi")) { - FileImporterBibUtils *fileImporterBibUtils =3D new FileImporte= rBibUtils(); + FileImporterBibUtils *fileImporterBibUtils =3D new FileImporte= rBibUtils(p); fileImporterBibUtils->setFormat(BibUtils::ISI); return fileImporterBibUtils; } else { - return new FileImporterBibTeX(false); + FileImporterBibTeX *fileImporterBibTeX =3D new FileImporterBib= TeX(p); + fileImporterBibTeX->setCommentHandling(FileImporterBibTeX::Kee= pComments); + return fileImporterBibTeX; } } = FileExporter *fileExporterFactory(const QString &ending) { if (ending =3D=3D QStringLiteral("html")) { - return new FileExporterXSLT(); + return new FileExporterHTML(p); } else if (ending =3D=3D QStringLiteral("xml")) { - return new FileExporterXML(); + return new FileExporterXML(p); } else if (ending =3D=3D QStringLiteral("ris")) { - return new FileExporterRIS(); + return new FileExporterRIS(p); } else if (ending =3D=3D QStringLiteral("pdf")) { - return new FileExporterPDF(); + return new FileExporterPDF(p); } else if (ending =3D=3D QStringLiteral("ps")) { - return new FileExporterPS(); + return new FileExporterPS(p); } else if (BibUtils::available() && ending =3D=3D QStringLiteral("= isi")) { - FileExporterBibUtils *fileExporterBibUtils =3D new FileExporte= rBibUtils(); + FileExporterBibUtils *fileExporterBibUtils =3D new FileExporte= rBibUtils(p); fileExporterBibUtils->setFormat(BibUtils::ISI); return fileExporterBibUtils; } else if (ending =3D=3D QStringLiteral("rtf")) { - return new FileExporterRTF(); + return new FileExporterRTF(p); } else if (ending =3D=3D QStringLiteral("html") || ending =3D=3D Q= StringLiteral("htm")) { - return new FileExporterBibTeX2HTML(); + return new FileExporterBibTeX2HTML(p); } else if (ending =3D=3D QStringLiteral("bbl")) { - return new FileExporterBibTeXOutput(FileExporterBibTeXOutput::= BibTeXBlockList); + return new FileExporterBibTeXOutput(FileExporterBibTeXOutput::= BibTeXBlockList, p); } else { - return new FileExporterBibTeX(); + return new FileExporterBibTeX(p); } } = diff --git a/src/processing/checkbibtex.cpp b/src/processing/checkbibtex.cpp index d5dc5c59..60f0a88b 100644 --- a/src/processing/checkbibtex.cpp +++ b/src/processing/checkbibtex.cpp @@ -74,7 +74,7 @@ CheckBibTeX::CheckBibTeXResult CheckBibTeX::checkBibTeX(Q= SharedPointer &e QByteArray ba; QBuffer buffer(&ba); buffer.open(QIODevice::WriteOnly); - FileExporterBibTeXOutput exporter(FileExporterBibTeXOutput::BibTeXLogF= ile); + FileExporterBibTeXOutput exporter(FileExporterBibTeXOutput::BibTeXLogF= ile, parent); bool exporterResult =3D exporter.save(&buffer, &dummyFile, &bibtexOupu= t); buffer.close(); = diff --git a/src/program/docklets/referencepreview.cpp b/src/program/dockle= ts/referencepreview.cpp index d20b299c..753912e4 100644 --- a/src/program/docklets/referencepreview.cpp +++ b/src/program/docklets/referencepreview.cpp @@ -254,24 +254,22 @@ void ReferencePreview::renderHTML() = if (previewStyle.type =3D=3D QStringLiteral("exporter")) { if (previewStyle.style =3D=3D QStringLiteral("bibtex")) { - FileExporterBibTeX *exporterBibTeX =3D new FileExporterBibTeX(= ); + FileExporterBibTeX *exporterBibTeX =3D new FileExporterBibTeX(= this); exporterBibTeX->setEncoding(QStringLiteral("utf-8")); exporter =3D exporterBibTeX; } else if (previewStyle.style =3D=3D QStringLiteral("ris")) - exporter =3D new FileExporterRIS(); + exporter =3D new FileExporterRIS(this); else qCWarning(LOG_KBIBTEX_PROGRAM) << "Don't know how to handle ou= tput style " << previewStyle.style << " for type " << previewStyle.type; } else if (previewStyle.type =3D=3D QStringLiteral("bibtex2html")) { crossRefHandling =3D merge; - FileExporterBibTeX2HTML *exporterHTML =3D new FileExporterBibTeX2H= TML(); + FileExporterBibTeX2HTML *exporterHTML =3D new FileExporterBibTeX2H= TML(this); exporterHTML->setLaTeXBibliographyStyle(previewStyle.style); exporter =3D exporterHTML; } else if (previewStyle.type =3D=3D QStringLiteral("xml") || previewSt= yle.type.endsWith(QStringLiteral("_xml"))) { crossRefHandling =3D merge; - FileExporterXSLT *exporterXSLT =3D new FileExporterXSLT(); - QString filename =3D previewStyle.style + ".xsl"; - exporterXSLT->setXSLTFilename(QStandardPaths::locate(QStandardPath= s::GenericDataLocation, QStringLiteral("kbibtex/") + filename)); - exporter =3D exporterXSLT; + const QString filename =3D previewStyle.style + ".xsl"; + exporter =3D new FileExporterXSLT(QStandardPaths::locate(QStandard= Paths::GenericDataLocation, QStringLiteral("kbibtex/") + filename), this); } else qCWarning(LOG_KBIBTEX_PROGRAM) << "Don't know how to handle output= type " << previewStyle.type; = diff --git a/src/test/kbibtexfilestest.cpp b/src/test/kbibtexfilestest.cpp index 5273a176..cbf6d1ff 100644 --- a/src/test/kbibtexfilestest.cpp +++ b/src/test/kbibtexfilestest.cpp @@ -138,9 +138,10 @@ void KBibTeXFilesTest::loadFile(const QString &absolut= eFilename, const TestFile { *outFile =3D nullptr; = - FileImporter *importer =3D nullptr; + FileImporterBibTeX *importer =3D nullptr; if (currentTestFile.filename.endsWith(QStringLiteral(".bib"))) { - importer =3D new FileImporterBibTeX(false); + importer =3D new FileImporterBibTeX(this); + importer->setCommentHandling(FileImporterBibTeX::KeepComments); } else { QFAIL(qPrintable(QString::fromLatin1("Don't know format of '%1'").= arg(currentTestFile.filename))); } @@ -244,7 +245,7 @@ void KBibTeXFilesTest::saveFile(File *file, const TestF= ile ¤tTestFile, QSt = FileExporter *exporter =3D nullptr; if (currentTestFile.filename.endsWith(QStringLiteral(".bib"))) { - FileExporterBibTeX *bibTeXExporter =3D new FileExporterBibTeX(); + FileExporterBibTeX *bibTeXExporter =3D new FileExporterBibTeX(this= ); bibTeXExporter->setEncoding(QStringLiteral("utf-8")); exporter =3D bibTeXExporter; } else {