gentoo-ebuilds/app-text/diffpdf/files/diffpdf-2.1.3-qt6.patch
Jaak Ristioja beb25dea6a
app-text/diffpdf: add 2.1.3-r3
Patched for Qt6 support and CMake build system, fixed some pkgcheck warnings.

Bug: https://bugs.gentoo.org/947239
Signed-off-by: Jaak Ristioja <jaak@ristioja.ee>
Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
2025-03-05 00:18:36 +01:00

407 lines
13 KiB
Diff

diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..fbaf333
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,25 @@
+cmake_minimum_required(VERSION 3.16)
+project(diffpdf CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Gui LinguistTools PrintSupport Widgets)
+find_package(PkgConfig REQUIRED)
+pkg_search_module(PopplerQt6 REQUIRED IMPORTED_TARGET poppler-qt6>=22.12.0)
+
+qt_standard_project_setup(REQUIRES 6.4.2 I18N_TRANSLATED_LANGUAGES cz de es fr)
+
+file(GLOB DiffPDF_SOURCES CONFIGURE_DEPENDS
+ "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp"
+ "${CMAKE_CURRENT_SOURCE_DIR}/*.hpp"
+)
+qt_add_executable(diffpdf ${DiffPDF_SOURCES})
+target_link_libraries(diffpdf
+ PRIVATE
+ PkgConfig::PopplerQt6
+ Qt6::Core
+ Qt6::PrintSupport
+ Qt6::Widgets
+)
+qt_add_translations(diffpdf RESOURCE_PREFIX "/")
+qt_add_binary_resources(diffpdf_resources resources.qrc)
+add_dependencies(diffpdf diffpdf_resources)
+install(TARGETS diffpdf)
diff --git a/diffpdf_cz.ts b/diffpdf_cz.ts
index 66f718c..36b313f 100644
--- a/diffpdf_cz.ts
+++ b/diffpdf_cz.ts
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="cs_CZ">
-<defaultcodec>UTF-8</defaultcodec>
<context>
<name>AboutForm</name>
<message>
diff --git a/diffpdf_de.ts b/diffpdf_de.ts
index 6b8ee47..3daf0cc 100644
--- a/diffpdf_de.ts
+++ b/diffpdf_de.ts
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="de_DE">
-<defaultcodec>UTF-8</defaultcodec>
<context>
<name>AboutForm</name>
<message>
diff --git a/diffpdf_es.ts b/diffpdf_es.ts
index a35941f..e8c9d8f 100644
--- a/diffpdf_es.ts
+++ b/diffpdf_es.ts
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="es_ES">
-<defaultcodec>UTF-8</defaultcodec>
<context>
<name>AboutForm</name>
<message>
diff --git a/diffpdf_fr.ts b/diffpdf_fr.ts
index 815e9c4..3e3d5e7 100644
--- a/diffpdf_fr.ts
+++ b/diffpdf_fr.ts
@@ -1,7 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0">
-<defaultcodec>UTF-8</defaultcodec>
<context>
<name>AboutForm</name>
<message>
diff --git a/generic.cpp b/generic.cpp
index 13603e3..ba4ea7a 100644
--- a/generic.cpp
+++ b/generic.cpp
@@ -17,6 +17,7 @@
#include <QPen>
#include <QPixmapCache>
#include <QUrl>
+#include <utility>
const QSize SwatchSize(24, 24);
@@ -149,8 +150,8 @@ QPixmap penStyleSwatch(const Qt::PenStyle style, const QColor &color)
const TextBoxList getTextBoxes(PdfPage page, const QRectF &rect)
{
TextBoxList boxes;
- foreach (Poppler::TextBox *box, page->textList()) {
- PdfTextBox box_ptr(box);
+ for (auto & box : page->textList()) {
+ PdfTextBox box_ptr(std::move(box));
if (rect.isEmpty() || rect.contains(box_ptr->boundingBox()))
boxes.append(box_ptr);
}
diff --git a/generic.hpp b/generic.hpp
index 1e9afce..fd48163 100644
--- a/generic.hpp
+++ b/generic.hpp
@@ -12,7 +12,8 @@
for more details.
*/
-#include <poppler-qt5.h>
+#include <poppler-qt6.h>
+#include <memory>
#include <QMetaType>
#include <QPair>
#include <QPixmap>
@@ -22,15 +23,9 @@ class QColor;
class QMimeData;
class QRectF;
-#if QT_VERSION >= 0x040600
-typedef QSharedPointer<Poppler::Document> PdfDocument;
-typedef QSharedPointer<Poppler::Page> PdfPage;
-typedef QSharedPointer<Poppler::TextBox> PdfTextBox;
-#else
-typedef std::tr1::shared_ptr<Poppler::Document> PdfDocument;
-typedef std::tr1::shared_ptr<Poppler::Page> PdfPage;
-typedef std::tr1::shared_ptr<Poppler::TextBox> PdfTextBox;
-#endif
+using PdfDocument = std::shared_ptr<Poppler::Document>;
+using PdfPage = std::shared_ptr<Poppler::Page>;
+using PdfTextBox = std::shared_ptr<Poppler::TextBox>;
typedef QList<PdfTextBox> TextBoxList;
enum InitialComparisonMode{CompareAppearance=0, CompareCharacters=1,
@@ -50,9 +45,9 @@ struct PagePair
bool isNull() { return left == -1 || right == -1; }
- const int left;
- const int right;
- const bool hasVisualDifference;
+ int left;
+ int right;
+ bool hasVisualDifference;
};
Q_DECLARE_METATYPE(PagePair)
diff --git a/helpform.cpp b/helpform.cpp
index 7a8269f..6354ee4 100644
--- a/helpform.cpp
+++ b/helpform.cpp
@@ -16,6 +16,7 @@
#include <QKeySequence>
#include <QSettings>
#include <QShortcut>
+#include <QStringConverter>
#include <QTextBrowser>
#include <QTextStream>
@@ -31,7 +32,7 @@ HelpForm::HelpForm(const QString &language, QWidget *parent)
QFile file(filename);
file.open(QIODevice::ReadOnly|QIODevice::Text);
QTextStream in(&file);
- in.setCodec("UTF-8");
+ in.setEncoding(QStringConverter::Utf8);
viewer->setHtml(in.readAll());
viewer->setReadOnly(true);
setCentralWidget(viewer);
diff --git a/main.cpp b/main.cpp
index 321ecc4..a6063d3 100644
--- a/main.cpp
+++ b/main.cpp
@@ -16,7 +16,6 @@
#include <QLibraryInfo>
#include <QLocale>
#include <QSettings>
-#include <QTextCodec>
#include <QTextStream>
#include <QTranslator>
@@ -101,12 +100,12 @@ int main(int argc, char *argv[])
}
QTranslator qtTranslator;
- qtTranslator.load("qt_" + language,
- QLibraryInfo::location(QLibraryInfo::TranslationsPath));
- app.installTranslator(&qtTranslator);
+ if (qtTranslator.load("qt_" + language,
+ QLibraryInfo::path(QLibraryInfo::TranslationsPath)))
+ app.installTranslator(&qtTranslator);
QTranslator appTranslator;
- appTranslator.load("diffpdf_" + language, ":/");
- app.installTranslator(&appTranslator);
+ if (appTranslator.load("diffpdf_" + language, ":/"))
+ app.installTranslator(&appTranslator);
MainWindow window(debug, comparisonMode, filename1, filename2,
language.left(2)); // We want de not de_DE etc.
diff --git a/mainwindow.cpp b/mainwindow.cpp
index c9dac53..bcdc390 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -27,18 +27,21 @@
#include <QComboBox>
#include <QDir>
#include <QDockWidget>
+#include <QElapsedTimer>
#include <QEvent>
#include <QFileDialog>
#include <QGroupBox>
#include <QLabel>
#include <QLineEdit>
#include <QMessageBox>
+#include <QPageLayout>
#include <QPainter>
#include <QPixmapCache>
#include <QPlainTextEdit>
#include <QPrinter>
#include <QPushButton>
#include <QRadioButton>
+#include <QRegularExpression>
#include <QScrollArea>
#include <QScrollBar>
#include <QSettings>
@@ -1249,11 +1252,7 @@ PdfDocument MainWindow::getPdf(const QString &filename)
else if (pdf->isLocked()) {
QMessageBox::warning(this, tr("DiffPDF — Error"),
tr("Cannot read a locked PDF ('%1').").arg(filename));
-#if QT_VERSION >= 0x040600
- pdf.clear();
-#else
- pdf.reset();
-#endif
+ return {};
}
return pdf;
}
@@ -1319,7 +1318,8 @@ QList<int> MainWindow::getPageList(int which, PdfDocument pdf)
bool error = false;
QList<int> pages;
QString page_string = pagesEdit->text();
- page_string = page_string.replace(QRegExp("\\s+"), "");
+ static QRegularExpression const spaces("\\s+");
+ page_string = page_string.replace(spaces, "");
QStringList page_list = page_string.split(",");
bool ok;
foreach (const QString &page, page_list) {
@@ -1387,7 +1387,7 @@ void MainWindow::compare()
}
comparePrepareUi();
- QTime time;
+ QElapsedTimer time;
time.start();
const QPair<int, int> pair = comparePages(filename1, pdf1, filename2,
pdf2);
@@ -1685,8 +1685,8 @@ void MainWindow::saveAsPdf(const int start, const int end,
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setColorMode(QPrinter::Color);
printer.setCreator(tr("DiffPDF"));
- printer.setOrientation(savePages == SaveBothPages
- ? QPrinter::Landscape : QPrinter::Portrait);
+ printer.setPageOrientation(savePages == SaveBothPages
+ ? QPageLayout::Landscape : QPageLayout::Portrait);
QPainter painter(&printer);
painter.setRenderHints(QPainter::Antialiasing|
QPainter::TextAntialiasing|QPainter::SmoothPixmapTransform);
@@ -1802,7 +1802,7 @@ void MainWindow::showZones()
void MainWindow::showZones(const int Width, const TextBoxList &list,
QLabel *label)
{
- if (!label || !label->pixmap() || label->pixmap()->isNull())
+ if (!label || label->pixmap().isNull())
return;
const bool ComparingWords = compareComboBox->currentIndex() ==
CompareWords;
@@ -1815,7 +1815,7 @@ void MainWindow::showZones(const int Width, const TextBoxList &list,
columnsSpinBox->value());
const int DPI = static_cast<int>(POINTS_PER_INCH *
(zoomSpinBox->value() / 100.0));
- QPixmap pixmap = label->pixmap()->copy();
+ QPixmap pixmap = label->pixmap().copy();
QPainter painter(&pixmap);
painter.setPen(Qt::green);
for (int i = 0; i < paths.count(); ++i) {
@@ -1844,11 +1844,11 @@ void MainWindow::showMargins()
void MainWindow::showMargins(QLabel *label)
{
- if (!label || !label->pixmap() || label->pixmap()->isNull())
+ if (!label || label->pixmap().isNull())
return;
const int DPI = static_cast<int>(POINTS_PER_INCH *
(zoomSpinBox->value() / 100.0));
- QPixmap pixmap = label->pixmap()->copy();
+ QPixmap pixmap = label->pixmap().copy();
QPainter painter(&pixmap);
painter.setPen(Qt::cyan);
int left = leftMarginSpinBox->value();
@@ -1880,12 +1880,11 @@ void MainWindow::showMargins(QLabel *label)
void MainWindow::setAMargin(const QPoint &pos)
{
- if (!marginsGroupBox->isChecked() || !page1Label->pixmap() ||
- page1Label->pixmap()->isNull())
+ if (!marginsGroupBox->isChecked() || page1Label->pixmap().isNull())
return;
const int DPI = static_cast<int>(POINTS_PER_INCH *
(zoomSpinBox->value() / 100.0));
- const QSize &size = page1Label->pixmap()->size();
+ const QSize &size = page1Label->pixmap().size();
int x = pos.x();
int y = pos.y();
const int HorizontalMiddle = size.width() / 2;
diff --git a/mainwindow.hpp b/mainwindow.hpp
index 448d21c..6a04179 100644
--- a/mainwindow.hpp
+++ b/mainwindow.hpp
@@ -14,12 +14,7 @@
#include "generic.hpp"
#include "saveform.hpp"
-#if QT_VERSION >= 0x040600
-#include <QSharedPointer>
-#else
-#include <tr1/memory>
-#endif
-#include <poppler-qt5.h>
+#include <poppler-qt6.h>
#include <QBrush>
#include <QList>
#include <QMainWindow>
diff --git a/resources.qrc b/resources.qrc
index 5464869..aa0f6be 100644
--- a/resources.qrc
+++ b/resources.qrc
@@ -3,9 +3,6 @@
<file alias="icon.png">images/icon.png</file>
<file alias="left.png">images/left.png</file>
<file alias="right.png">images/right.png</file>
-<file>diffpdf_cz.qm</file>
-<file>diffpdf_de.qm</file>
-<file>diffpdf_fr.qm</file>
<file>help.html</file>
<file>help_cz.html</file>
<file>help_de.html</file>
diff --git a/sequence_matcher.cpp b/sequence_matcher.cpp
index cc65425..9dc5d98 100644
--- a/sequence_matcher.cpp
+++ b/sequence_matcher.cpp
@@ -11,6 +11,7 @@
*/
#include "sequence_matcher.hpp"
+#include <algorithm>
#include <QSet>
@@ -136,7 +137,7 @@ QList<Match> SequenceMatcher::get_matching_blocks()
offsets.append(Offsets(i + k, a_high, j + k, b_high));
}
}
- qSort(matching_blocks.begin(), matching_blocks.end(), matchLessThan);
+ std::sort(matching_blocks.begin(), matching_blocks.end(), matchLessThan);
int i1 = 0;
int j1 = 0;
diff --git a/textitem.cpp b/textitem.cpp
index f7ce133..728cbb3 100644
--- a/textitem.cpp
+++ b/textitem.cpp
@@ -14,6 +14,7 @@
#include <QDir>
#include <QFile>
+#include <QStringConverter>
#include <QTextStream>
@@ -130,7 +131,7 @@ const QList<QPainterPath> TextItems::generateZones(const int Width,
const int Column = ((Columns == 1) ? 0
: (rect.width() > Span) ? Columns : rect.right() / Span);
const int y = normalizedY(static_cast<int>(rect.y()), ToleranceY);
- zonesForColumn.insertMulti(Key(Column, y, rect.x()), zone);
+ zonesForColumn.insert(Key(Column, y, rect.x()), zone);
}
return zonesForColumn.values();
}
@@ -152,7 +153,7 @@ void TextItems::debug(const int page, const int ToleranceY,
.arg(file.errorString())));
}
QTextStream out(&file);
- out.setCodec("UTF-8");
+ out.setEncoding(QStringConverter::Utf8);
out << "Page #" << page << ": "
<< (ComparingWords ? "Words" : "Characters") << " mode\n";
for (int i = 0; i < items.count(); ++i) {
@@ -202,7 +203,7 @@ const TextItems getCharacters(const TextBoxList &list)
TextItems items;
foreach (const PdfTextBox &box, list) {
const QString word = box->text();
- int limit = word.count() - 1;
+ int limit = word.size() - 1;
for (int i = limit; i >= 0; --i)
if (!word[i].isSpace())
break;