Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package poxml for openSUSE:Factory checked 
in at 2024-08-26 22:10:00
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/poxml (Old)
 and      /work/SRC/openSUSE:Factory/.poxml.new.2698 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "poxml"

Mon Aug 26 22:10:00 2024 rev:137 rq:1196032 version:24.08.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/poxml/poxml.changes      2024-07-05 
19:56:45.598544133 +0200
+++ /work/SRC/openSUSE:Factory/.poxml.new.2698/poxml.changes    2024-08-26 
22:13:09.761364196 +0200
@@ -1,0 +2,17 @@
+Mon Aug 19 07:14:48 UTC 2024 - Christophe Marin <[email protected]>
+
+- Update to 24.08.0
+  * New feature release
+  * For more details please see:
+  * https://kde.org/announcements/gear/24.08.0/
+- Changes since 24.05.2:
+  * Port to modern KDE_COMPILERSETTINGS_LEVEL
+  * Increase QT_MIN_VERSION and KF_MIN_VERSION to reflect truth
+  * cmake_minimum_required needs to be called before project
+  * KF5_MIN_VERSION -> KF_MIN_VERSION
+  * Port to Qt 6
+  * Port away from QRegExp
+  * Port away from QMultiMap API
+  * Enforce passing tests on all platforms
+
+-------------------------------------------------------------------

Old:
----
  poxml-24.05.2.tar.xz
  poxml-24.05.2.tar.xz.sig

New:
----
  poxml-24.08.0.tar.xz
  poxml-24.08.0.tar.xz.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ poxml.spec ++++++
--- /var/tmp/diff_new_pack.OOfsQv/_old  2024-08-26 22:13:10.237384073 +0200
+++ /var/tmp/diff_new_pack.OOfsQv/_new  2024-08-26 22:13:10.241384240 +0200
@@ -16,9 +16,12 @@
 #
 
 
+%define kf6_version 6.3.0
+%define qt6_version 6.6.0
+
 %bcond_without released
 Name:           poxml
-Version:        24.05.2
+Version:        24.08.0
 Release:        0
 Summary:        Tools for translating DocBook XML files with Gettext
 License:        GPL-2.0-only AND GFDL-1.2-only
@@ -30,11 +33,11 @@
 %endif
 BuildRequires:  antlr
 BuildRequires:  antlr-devel
-BuildRequires:  extra-cmake-modules
+BuildRequires:  kf6-extra-cmake-modules >= %{kf6_version}
 BuildRequires:  gettext-devel
-BuildRequires:  cmake(KF5DocTools)
-BuildRequires:  cmake(Qt5Core)
-BuildRequires:  cmake(Qt5Xml)
+BuildRequires:  cmake(KF6DocTools) >= %{kf6_version}
+BuildRequires:  cmake(Qt6Core) >= %{qt6_version}
+BuildRequires:  cmake(Qt6Xml) >= %{qt6_version}
 
 %description
 This is a collection of tools that facilitate translating DocBook XML
@@ -42,10 +45,10 @@
 
 %package -n kde-l10n-devel
 Summary:        Tools for translating DocBook XML files with Gettext
-Recommends:     %{name}-lang
+Recommends:     poxml-lang
 Obsoletes:      kde4-l10n-devel < %{version}
 Provides:       kde4-l10n-devel = %{version}
-Provides:       %{name} = %{version}
+Provides:       poxml = %{version}
 
 %description -n kde-l10n-devel
 This is a collection of tools that facilitate translating DocBook XML
@@ -62,11 +65,12 @@
 %endif
 export CXXFLAGS="%{optflags} -fPIC"
 export CFLAGS="%{optflags} -fPIC"
-%cmake_kf5 -d build -- -DCMAKE_CXXFLAGS="%{optflags}" 
-DCMAKE_CFLAGS="%{optflags}"
-%cmake_build
+%cmake_kf6 -DCMAKE_CXXFLAGS="%{optflags}" -DCMAKE_CFLAGS="%{optflags}"
+
+%kf6_build
 
 %install
-%kf5_makeinstall -C build
+%kf6_install
 
 %find_lang %{name} --with-man --all-name
 
@@ -74,11 +78,11 @@
 
 %files -n kde-l10n-devel
 %license COPYING*
-%{_kf5_bindir}/po2xml
-%{_kf5_bindir}/split2po
-%{_kf5_bindir}/swappo
-%{_kf5_bindir}/xml2pot
-%{_kf5_mandir}/man1/*.*%{ext_man}
+%{_kf6_bindir}/po2xml
+%{_kf6_bindir}/split2po
+%{_kf6_bindir}/swappo
+%{_kf6_bindir}/xml2pot
+%{_kf6_mandir}/man1/*.*%{ext_man}
 
 %files lang -f %{name}.lang
 


++++++ poxml-24.05.2.tar.xz -> poxml-24.08.0.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/poxml-24.05.2/.gitlab-ci.yml 
new/poxml-24.08.0/.gitlab-ci.yml
--- old/poxml-24.05.2/.gitlab-ci.yml    2024-06-19 05:38:20.000000000 +0200
+++ new/poxml-24.08.0/.gitlab-ci.yml    2024-05-04 16:22:36.000000000 +0200
@@ -4,5 +4,5 @@
 include:
   - project: sysadmin/ci-utilities
     file:
-      - /gitlab-templates/linux.yml
-      - /gitlab-templates/freebsd.yml
+      - /gitlab-templates/linux-qt6.yml
+      - /gitlab-templates/freebsd-qt6.yml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/poxml-24.05.2/.kde-ci.yml 
new/poxml-24.08.0/.kde-ci.yml
--- old/poxml-24.05.2/.kde-ci.yml       2024-06-19 05:38:20.000000000 +0200
+++ new/poxml-24.08.0/.kde-ci.yml       2024-05-04 16:22:36.000000000 +0200
@@ -4,5 +4,8 @@
 Dependencies:
 - 'on': ['@all']
   'require':
-    'frameworks/extra-cmake-modules': '@stable'
-    'frameworks/kdoctools': '@stable'
+    'frameworks/extra-cmake-modules': '@stable-kf6'
+    'frameworks/kdoctools': '@stable-kf6'
+
+Options:
+  require-passing-tests-on: ['Linux', 'FreeBSD', 'Windows']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/poxml-24.05.2/CMakeLists.txt 
new/poxml-24.08.0/CMakeLists.txt
--- old/poxml-24.05.2/CMakeLists.txt    2024-06-19 05:38:20.000000000 +0200
+++ new/poxml-24.08.0/CMakeLists.txt    2024-05-04 16:22:36.000000000 +0200
@@ -1,11 +1,11 @@
-project(poxml)
-
 cmake_minimum_required (VERSION 3.16 FATAL_ERROR)
 
-set (QT_MIN_VERSION "5.12.0")
-set (KF5_MIN_VERSION "5.68.0")
+project(poxml)
+
+set (QT_MIN_VERSION "6.5.0")
+set (KF_MIN_VERSION "6.0.0")
 
-find_package(ECM ${KF5_MIN_VERSION} REQUIRED NO_MODULE)
+find_package(ECM ${KF_MIN_VERSION} REQUIRED NO_MODULE)
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} 
${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules)
 
 include(FeatureSummary)
@@ -23,8 +23,8 @@
         PURPOSE "Required to build the poxml tools.")
 
 find_package(Gettext)
-find_package(Qt5 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Core Xml)
-find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS DocTools)
+find_package(Qt6 ${QT_MIN_VERSION} REQUIRED NO_MODULE COMPONENTS Core Xml)
+find_package(KF6 ${KF_MIN_VERSION} REQUIRED COMPONENTS DocTools)
 
 
 add_subdirectory( doc )
@@ -39,7 +39,7 @@
 
 add_executable(split2po ${split2po_SRCS})
 
-target_link_libraries(split2po ${GETTEXTPO_LIBRARY} Qt5::Xml Qt5::Core)
+target_link_libraries(split2po ${GETTEXTPO_LIBRARY} Qt6::Xml Qt6::Core)
 
 install(TARGETS split2po  ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
 
@@ -51,7 +51,7 @@
 
 add_executable(xml2pot ${xml2pot_SRCS})
 
-target_link_libraries(xml2pot ${GETTEXTPO_LIBRARY} Qt5::Xml Qt5::Core)
+target_link_libraries(xml2pot ${GETTEXTPO_LIBRARY} Qt6::Xml Qt6::Core)
 
 install(TARGETS xml2pot  ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
 
@@ -66,7 +66,7 @@
 
 add_executable(po2xml ${po2xml_SRCS})
 
-target_link_libraries(po2xml ${GETTEXTPO_LIBRARY} Qt5::Xml Qt5::Core)
+target_link_libraries(po2xml ${GETTEXTPO_LIBRARY} Qt6::Xml Qt6::Core)
 
 install(TARGETS po2xml  ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/poxml-24.05.2/doc/CMakeLists.txt 
new/poxml-24.08.0/doc/CMakeLists.txt
--- old/poxml-24.05.2/doc/CMakeLists.txt        2024-06-19 05:38:20.000000000 
+0200
+++ new/poxml-24.08.0/doc/CMakeLists.txt        2024-05-04 16:22:36.000000000 
+0200
@@ -1,4 +1,4 @@
-kdoctools_create_manpage(man-po2xml.1.docbook 1 INSTALL_DESTINATION 
${MAN_INSTALL_DIR})
-kdoctools_create_manpage(man-split2po.1.docbook 1 INSTALL_DESTINATION 
${MAN_INSTALL_DIR})
-kdoctools_create_manpage(man-swappo.1.docbook 1 INSTALL_DESTINATION 
${MAN_INSTALL_DIR})
-kdoctools_create_manpage(man-xml2pot.1.docbook 1 INSTALL_DESTINATION 
${MAN_INSTALL_DIR})
+kdoctools_create_manpage(man-po2xml.1.docbook 1 INSTALL_DESTINATION 
${KDE_INSTALL_MANDIR})
+kdoctools_create_manpage(man-split2po.1.docbook 1 INSTALL_DESTINATION 
${KDE_INSTALL_MANDIR})
+kdoctools_create_manpage(man-swappo.1.docbook 1 INSTALL_DESTINATION 
${KDE_INSTALL_MANDIR})
+kdoctools_create_manpage(man-xml2pot.1.docbook 1 INSTALL_DESTINATION 
${KDE_INSTALL_MANDIR})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/poxml-24.05.2/parser.cpp new/poxml-24.08.0/parser.cpp
--- old/poxml-24.05.2/parser.cpp        2024-06-19 05:38:20.000000000 +0200
+++ new/poxml-24.08.0/parser.cpp        2024-05-04 16:22:36.000000000 +0200
@@ -4,7 +4,6 @@
 #include <iostream>
 #include <stdlib.h>
 #include <assert.h>
-#include <qregexp.h>
 
 #include <QDebug>
 #include <QFile>
@@ -30,7 +29,7 @@
                                    "anchor", "xref", "area",
                                    "footnoteref", "void", "inlinegraphic",
                                    "glosssee", "graphic", "xi:include",
-                                   0};
+                                   nullptr};
 static const char *cuttingtags[] = {"bridgehead", "trans_comment", "para", 
"title", "term",
                                     "entry", "contrib", "keyword", "example",
                                     "note", "footnote", "caution",
@@ -63,15 +62,15 @@
                                     "revdescription", "glossentry", "partinfo",
                                    "segmentedlist", "segtitle", "seg", 
"seglistitem", "screenco",
                                    "titleabbrev", "date", "authorinitials", 
"holder", "releaseinfo",
-                                    0};
+                                    nullptr};
 static const char *literaltags[] = {"literallayout", "synopsis", "screen",
-                                   "programlisting", 0};
+                                   "programlisting", nullptr};
 
 void StructureParser::startDocument()
 {
-    infos_reg = QRegExp("\\s*poxml_line=\"(\\d+)\" poxml_col=\"(\\d+)\"");
-    do_not_split_reg = QRegExp("\\s*condition=\"do-not-split\"");
-    message = "";
+    infos_reg = QRegularExpression(QStringLiteral("\\s*poxml_line=\"(\\d+)\" 
poxml_col=\"(\\d+)\""));
+    do_not_split_reg = 
QRegularExpression(QStringLiteral("\\s*condition=\"do-not-split\""));
+    message = QString();
     inside = 0;
 }
 
@@ -86,7 +85,7 @@
     return isLiteralTag(qName);
 }
 
-bool StructureParser::isSingleTag(const QStringRef &qName)
+bool StructureParser::isSingleTag(QStringView qName)
 {
     int index = 0;
     while (singletags[index]) {
@@ -108,13 +107,13 @@
     return false;
 }
 
-void StructureParser::skippedEntity ( const QStringRef & name )
+void StructureParser::skippedEntity ( QStringView name )
 {
     if (inside)
         message += QString::fromLatin1("&%1;").arg(name);
 }
 
-void StructureParser::startElement( int lineNumber, int columnNumber, const 
QStringRef& qName, const QXmlStreamAttributes & attr )
+void StructureParser::startElement( int lineNumber, int columnNumber, 
QStringView qName, const QXmlStreamAttributes & attr )
 {
     const QString tname = qName.toString().toLower();
 
@@ -133,7 +132,7 @@
 
     if (inside)
     {
-        QString tmp = '<' + tname;
+        QString tmp = QLatin1Char('<') + tname;
         for (int i = 0; i < attr.length(); i++) {
             tmp += QString::fromLatin1(" 
%1=\"%2\"").arg(attr[i].qualifiedName(), attr[i].value());
         }
@@ -143,19 +142,19 @@
         if (isSingleTag(qName))
             tmp += QString::fromLatin1("/>");
         else
-            tmp += '>';
+            tmp += QLatin1Char('>');
         message += tmp;
         if (first)
             startcol -= message.length();
     }
 
-    if (tname == QLatin1String("anchor") || tname.leftRef(4) == 
QLatin1String("sect") || tname == QLatin1String("chapter"))
+    if (tname == QLatin1String("anchor") || QStringView(tname).left(4) == 
QLatin1String("sect") || tname == QLatin1String("chapter"))
         if (!attr.value("id").isEmpty()) 
list.pc.addAnchor(attr.value("id").toString());
 }
 
 bool StructureParser::isClosure(const QString &message)
 {
-    assert(message.at(0) == '<');
+    assert(message.at(0) == QLatin1Char('<'));
     int endindex = 1;
     while (!message.at(endindex).isSpace() && message.at(endindex) != 
QLatin1Char('>'))
         endindex++;
@@ -174,8 +173,8 @@
     const int messageLength = message.length();
     while (true)
     {
-        int nextclose = 
message.indexOf(QRegExp(QString::fromLatin1("</%1[\\s>]").arg(tag)), index);
-        int nextstart = 
message.indexOf(QRegExp(QString::fromLatin1("<%1[>\\s]").arg(tag)), index);
+        int nextclose = 
message.indexOf(QRegularExpression(QString::fromLatin1("</%1[\\s>]").arg(tag)), 
index);
+        int nextstart = 
message.indexOf(QRegularExpression(QString::fromLatin1("<%1[>\\s]").arg(tag)), 
index);
         //  qDebug("finding %d %d %d %d", nextstart, nextclose, index, inside);
         if (nextclose == -1) {
 #ifdef POXML_DEBUG
@@ -220,19 +219,19 @@
             case '\t':
             case '\r':
                 if (!inside)
-                    message[index] = ' ';
+                    message[index] = QLatin1Char(' ');
             case ' ':
                 if (!inside && lastws)
-                    message[index] = '\010';
+                    message[index] = QLatin1Char('\010');
                 lastws = true;
                 break;
             case '<': {
                 int endindex = index+1;
                 while (endindex < message.length() && 
!message.at(endindex).isSpace() &&
-                       message.at(endindex) != '>')
+                       message.at(endindex) != QLatin1Char('>'))
                     endindex++;
                 QString tag = message.mid(index + 1, endindex - index - 1);
-                if (tag.at(0) == '/') {
+                if (tag.at(0) == QLatin1Char('/')) {
                     if (isLiteralTag(tag.mid(1)))
                         inside--;
                 } else
@@ -246,7 +245,7 @@
 
         index++;
     }
-    message.remove('\010');
+    message.remove(QLatin1Char('\010'));
 }
 
 bool StructureParser::formatMessage(MsgBlock &msg) const
@@ -272,7 +271,7 @@
         int slen = strlen(singletags[index]);
 
         if (!msg.msgid.isEmpty() &&
-            msg.msgid.at(0) == QLatin1Char('<') && msg.msgid.midRef(1, slen) 
== QLatin1String(singletags[index]) &&
+            msg.msgid.at(0) == QLatin1Char('<') && 
QStringView(msg.msgid).mid(1, slen) == QLatin1String(singletags[index]) &&
             !msg.msgid.at( slen + 1 ).isLetterOrNumber() )
         {
 #ifdef POXML_DEBUG
@@ -289,7 +288,7 @@
         }
     }
 
-    while (msg.msgid.right(2) == "/>" && 
msg.msgid.startsWith(QLatin1Char('<')))
+    while (msg.msgid.right(2) == QStringLiteral("/>") && 
msg.msgid.startsWith(QLatin1Char('<')))
     {
         int strindex = msg.msgid.length() - 2;
         strindex = msg.msgid.lastIndexOf(QLatin1Char('<'), strindex);
@@ -312,7 +311,7 @@
             strindex++;
         QString starttag = msg.msgid.mid(1, strindex - 1);
         int endindex = msg.msgid.length() - 2;
-        while (msg.msgid.at(endindex) != QLatin1Char('<') && 
msg.msgid.at(endindex + 1) != '/')
+        while (msg.msgid.at(endindex) != QLatin1Char('<') && 
msg.msgid.at(endindex + 1) != QLatin1Char('/'))
             endindex--;
 #ifdef POXML_DEBUG
         qDebug("endIndex %d", endindex);
@@ -332,7 +331,7 @@
             strindex = msg.msgid.indexOf(QLatin1Char('>'), 0);
             QString attr = msg.msgid.left(strindex);
             QString real_attr = attr.mid(starttag.length() + 1);
-            const int real_attr_infos_reg_pos = infos_reg.indexIn(real_attr);
+            const int real_attr_infos_reg_pos = 
infos_reg.match(real_attr).capturedStart();
             if (real_attr_infos_reg_pos >= 0) {
                 real_attr = real_attr.left(real_attr_infos_reg_pos);
             }
@@ -344,20 +343,20 @@
             stripWhiteSpace( msg.msgid );
             msg.tag = starttag;
 
-            if (infos_reg.indexIn(attr) >= 0) {
-                msg.lines.first().start_line = infos_reg.cap(1).toInt();
-                msg.lines.first().start_col = infos_reg.cap(2).toInt();
+            if (const auto match = infos_reg.match(attr); match.hasMatch()) {
+                msg.lines.first().start_line = match.capturedView(1).toInt();
+                msg.lines.first().start_col = match.capturedView(2).toInt();
 #ifdef POXML_DEBUG
                 qDebug("col %s %s %d", qPrintable(attr), 
qPrintable(msg.msgid), msg.lines.first().start_col);
 #endif
                 offset = 0;
 
-                if (infos_reg.indexIn(endtag_attr) >= 0) {
-                    msg.lines.first().end_line = infos_reg.cap(1).toInt();
-                    msg.lines.first().end_col = infos_reg.cap(2).toInt() + 1;
+                if (const auto match = infos_reg.match(endtag_attr); 
match.hasMatch()) {
+                    msg.lines.first().end_line = match.capturedView(1).toInt();
+                    msg.lines.first().end_col = match.capturedView(2).toInt() 
+ 1;
                 }
             }
-            if (do_not_split_reg.indexIn(attr) >= 0) {
+            if (do_not_split_reg.match(attr).hasMatch()) {
                 msg.do_not_split = true;
                 break;
             }
@@ -418,9 +417,9 @@
 #endif
 
                 // the exception for poxml_* attributes is made in the closing 
tag
-                int closing_index = 
message.indexOf(QRegExp(QString::fromLatin1("</%1[\\s>]").arg(tag)),
+                int closing_index = 
message.indexOf(QRegularExpression(QString::fromLatin1("</%1[\\s>]").arg(tag)),
                                                  strindex);
-                int starting_index = 
message.indexOf(QRegExp(QString::fromLatin1("<%1[\\s>]").arg(tag)),
+                int starting_index = 
message.indexOf(QRegularExpression(QString::fromLatin1("<%1[\\s>]").arg(tag)),
                                                   strindex);
 
 #ifdef POXML_DEBUG
@@ -529,9 +528,9 @@
                 qDebug("inside %s %d", qPrintable(message.mid(strindex, 35)), 
inside);
 #endif
 
-                int closing_index = 
message.lastIndexOf(QRegExp(QString::fromLatin1("</%1[\\s>]").arg(tag)),
+                int closing_index = 
message.lastIndexOf(QRegularExpression(QString::fromLatin1("</%1[\\s>]").arg(tag)),
                                                     strindex - 1);
-                int starting_index = 
message.lastIndexOf(QRegExp(QString::fromLatin1("<%1[\\s>]").arg(tag)),
+                int starting_index = 
message.lastIndexOf(QRegularExpression(QString::fromLatin1("<%1[\\s>]").arg(tag)),
                                                      strindex - 1);
 
 #ifdef POXML_DEBUG
@@ -593,7 +592,7 @@
     return result;
 }
 
-void StructureParser::endElement( int lineNumber, int columnNumber, const 
QStringRef& qName)
+void StructureParser::endElement( int lineNumber, int columnNumber, 
QStringView qName)
 {
     const QString tname = qName.toString().toLower();
 
@@ -632,9 +631,9 @@
                 // if the remaining text still starts with a tag, the poxml_ 
info
                 // is most probably more correct
                 if (!(*it).msgid.isEmpty() && (*it).msgid.at(0) == 
QLatin1Char('<') && isClosure((*it).msgid)) {
-                    if (infos_reg.indexIn((*it).msgid) >= 0) {
-                        (*it).lines.first().start_line = 
infos_reg.cap(1).toInt();
-                        (*it).lines.first().start_col =  
infos_reg.cap(2).toInt();;
+                    if (const auto match = infos_reg.match((*it).msgid); 
match.hasMatch()) {
+                        (*it).lines.first().start_line = 
match.capturedView(1).toInt();
+                        (*it).lines.first().start_col = 
match.capturedView(2).toInt();;
                         (*it).lines.first().offset = 0;
                     }
                 }
@@ -647,7 +646,7 @@
     }
 }
 
-void StructureParser::comment ( const QStringRef &c )
+void StructureParser::comment ( QStringView c )
 {
     if (c.left(7) != QLatin1String(" TRANS:"))
         return;
@@ -708,8 +707,8 @@
     contents.replace(QChar::fromLatin1('&'), 
QString::fromLatin1("!POXML_AMP!"));
 
     for (int index = 0; literaltags[index]; index++) {
-        QRegExp 
start(QString::fromLatin1("<%1[\\s>]").arg(literaltags[index]));
-        QRegExp end(QString::fromLatin1("</%1[\\s>]").arg(literaltags[index]));
+        const QRegularExpression 
start(QString::fromLatin1("<%1[\\s>]").arg(QString::fromLatin1(literaltags[index])));
+        const QRegularExpression 
end(QString::fromLatin1("</%1[\\s>]").arg(QString::fromLatin1(literaltags[index])));
         int strindex = 0;
         while (true) {
             strindex = contents.indexOf(start, strindex);
@@ -726,50 +725,53 @@
         }
     }
 
-    QRegExp unclosed("</(\\w*)\\s\\s*>");
-    int index = -1;
+    const QRegularExpression unclosed(QStringLiteral("</(\\w*)\\s\\s*>"));
+    int index = 0;
     while (true) {
-        index = unclosed.indexIn(contents, index + 1);
-        if (index < 0)
+        const auto match = unclosed.match(contents, index );
+        if (!match.hasMatch())
             break;
-        QString tag = unclosed.cap(1);
-        contents.replace(index, unclosed.matchedLength(), 
QString::fromLatin1("</%1>").arg(tag));
+        index = match.capturedStart();
+        QString tag = match.captured(1);
+        contents.replace(index, match.capturedLength(), 
QString::fromLatin1("</%1>").arg(tag));
     }
 
-    QRegExp start("<((\\s*[^<>\\s])*)\\s\\s*(/*)>");
-    start.setMinimal(true);
+    const QRegularExpression 
start(QStringLiteral("<((\\s*[^<>\\s])*)\\s\\s*(/*)>"), 
QRegularExpression::InvertedGreedinessOption);
 
     index = -1;
     while (true) {
-        index = start.indexIn(contents, index + 1);
-        if (index < 0)
+        const auto match = start.match(contents, index + 1);
+        if (!match.hasMatch())
             break;
-        QString tag = start.cap(1);
-       QString cut = start.capturedTexts().last();
+        index = match.capturedStart();
+        QString tag = match.captured(1);
+       QString cut = match.capturedTexts().last();
         // qDebug("UNCLO %s %d -%s- -%s-", qPrintable(start.cap(0)), index, 
qPrintable(tag), qPrintable(cut));
-        contents.replace(index, start.matchedLength(), 
QString::fromLatin1("<%1%2>").arg(tag, cut));
+        contents.replace(index, match.capturedLength(), 
QString::fromLatin1("<%1%2>").arg(tag, cut));
     }
-    QRegExp singletag("<(\\w*)\\s([^><]*)/>");
+    const QRegularExpression singletag(QStringLiteral("<(\\w*)\\s([^><]*)/>"));
 
     index = -1;
     while (true) {
-        index = singletag.indexIn(contents, index + 1);
-        if (index < 0)
+        const auto match = singletag.match(contents, index + 1);
+        if (!match.hasMatch())
             break;
-        const QString tag = singletag.cap(1);
-        if (!StructureParser::isSingleTag(QStringRef(&tag))) {
-            contents.replace(index, singletag.matchedLength(), 
QString::fromLatin1("<%1 %2></%3>").arg(tag, singletag.cap(2), tag));
+        index = match.capturedStart();
+        const QString tag = match.captured(1);
+        if (!StructureParser::isSingleTag(tag)) {
+            contents.replace(index, match.capturedLength(), 
QString::fromLatin1("<%1 %2></%3>").arg(tag, match.captured(2), tag));
         }
     }
 
-    QRegExp trans_comment("<!-- TRANS:([^<>]*)-->");
+    const QRegularExpression trans_comment(QStringLiteral("<!-- 
TRANS:([^<>]*)-->"));
     index = -1;
     while (true) {
-        index = trans_comment.indexIn(contents, index + 1);
-        if (index < 0)
+        const auto match = trans_comment.match(contents, index + 1);
+        if (!match.hasMatch())
             break;
-        QString msgid = trans_comment.cap(1);
-        contents.replace(index, trans_comment.matchedLength(), 
QString::fromLatin1("<trans_comment>%1</trans_comment>").arg(msgid));
+        index = match.capturedStart();
+        QString msgid = match.captured(1);
+        contents.replace(index, match.capturedLength(), 
QString::fromLatin1("<trans_comment>%1</trans_comment>").arg(msgid));
     }
 
 #ifdef POXML_DEBUG
@@ -782,14 +784,15 @@
 {
 //    qDebug("cont %s %s", qPrintable(contents), qPrintable(tag));
 
-    QRegExp empty(QString::fromLatin1("<%1[^>]*>[\\s\n]+</%2\\s*>").arg(tag, 
tag));
+    const QRegularExpression 
empty(QString::fromLatin1("<%1[^>]*>[\\s\n]+</%2\\s*>").arg(tag, tag));
     int strindex = 0;
     while (true) {
-        strindex = contents.indexOf(empty, strindex);
-        if (strindex < 0)
+        const auto match = empty.match(contents, strindex);
+        if (!match.hasMatch())
             break;
+        strindex = match.capturedStart();
         qDebug("found empty tag %s", qPrintable(tag));
-        contents.replace(strindex, empty.matchedLength(), ' ');
+        contents.replace(strindex, match.capturedLength(), QLatin1Char(' '));
         strindex++;
         return true;
     }
@@ -816,7 +819,7 @@
     } while (removed);
 }
 
-void StructureParser::characters(const QStringRef &ch)
+void StructureParser::characters(QStringView ch)
 {
     if (inside && !ch.isEmpty())
         message += ch;
@@ -858,7 +861,7 @@
                 // QXmlStreamReader is annoying and won't accept custom 
entities like &POXML_LINEFEED;
                 // unless the file has a DTD, so if we fail parsing, inject a 
DTD into the XML contents and parse again
                 if (!foundDtd) {
-                     const QRegularExpression 
xmlDeclarationRegExp("^.*<\\?xml.*?\\?>");
+                     const QRegularExpression 
xmlDeclarationRegExp(QStringLiteral("^.*<\\?xml.*?\\?>"));
                      const QRegularExpressionMatch match = 
xmlDeclarationRegExp.match(contents);
                      const QString fakeDTD = QStringLiteral("<!DOCTYPE fake 
PUBLIC \"fake\" \"fake\" []>");
                      if (match.hasMatch()) {
@@ -896,23 +899,28 @@
     {
         // find internal entities that start with "i18n-", and extract
         // their replacement texts:
-        QRegExp rx( "<!ENTITY\\s+([^\\s]+)\\s+([\"'])" );
-        for ( int index = rx.indexIn( contents, 0 ) ; index >= 0 ; index = 
rx.indexIn( contents, index ) ) {
-            const QString name = rx.cap( 1 );
-            const QChar delim = rx.cap( 2 ).at( 0 );
+        const QRegularExpression rx( 
QStringLiteral("<!ENTITY\\s+([^\\s]+)\\s+([\"'])") );
+        for ( int index = 0 ;; ) {
+            const auto match = rx.match(contents, index);
+            if (!match.hasMatch()) {
+                break;
+            }
+            index = match.capturedStart();
+            const QString name = match.captured( 1 );
+            const QChar delim = match.captured( 2 ).at( 0 );
             const int start = index;
-            index = contents.indexOf( delim, index + rx.matchedLength() );
-            index = contents.indexOf( '>', index );
+            index = contents.indexOf( delim, index + match.capturedLength() );
+            index = contents.indexOf( QLatin1Char('>'), index );
             if ( !name.startsWith( QLatin1String("i18n-") ) )
                 continue;
             const QString entity = contents.mid( start, index - start + 1 );
             MsgBlock block;
-            block.tag = "!ENTITY";
+            block.tag = QStringLiteral("!ENTITY");
             BlockInfo bi;
-            bi.start_line = countRev( contents, '\n', index ) + 1;
-            bi.start_col  = start - contents.lastIndexOf( '\n', start ) - 1;
-            bi.end_line   = bi.start_line + entity.count( '\n' );
-            bi.end_col    = index - contents.lastIndexOf( '\n', index ) + 1;
+            bi.start_line = countRev( contents, QLatin1Char('\n'), index ) + 1;
+            bi.start_col  = start - contents.lastIndexOf( QLatin1Char('\n'), 
start ) - 1;
+            bi.end_line   = bi.start_line + entity.count( QLatin1Char('\n') );
+            bi.end_col    = index - contents.lastIndexOf( QLatin1Char('\n'), 
index ) + 1;
 #ifdef POXML_DEBUG
             qDebug( "ENTITY %s @ i:%d l:%d c:%d->l:%d c:%d", qPrintable( name 
),
                     index, bi.start_line, bi.start_col, bi.end_line, 
bi.end_col );
@@ -925,13 +933,13 @@
 
     // Remove all entity definitions now:
     while (true) {
-        int index = contents.indexOf("<!ENTITY");
+        int index = contents.indexOf(QStringLiteral("<!ENTITY"));
         if (index < 0)
             break;
         int inside = 0;
         int endindex = index + 1;
-        QString replacement = "";
-        while (contents.at(endindex) != '>' || inside)
+        QString replacement;
+        while (contents.at(endindex) != QLatin1Char('>') || inside)
         {
             switch (contents.at(endindex).toLatin1()) {
                 case '<':
@@ -939,7 +947,7 @@
                 case '>':
                     inside--; break;
                 case '\n':
-                    replacement += '\n';
+                    replacement += QLatin1Char('\n');
                     break;
                 default:
                     break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/poxml-24.05.2/parser.h new/poxml-24.08.0/parser.h
--- old/poxml-24.05.2/parser.h  2024-06-19 05:38:20.000000000 +0200
+++ new/poxml-24.08.0/parser.h  2024-05-04 16:22:36.000000000 +0200
@@ -2,9 +2,9 @@
 #define PARSER_H
 
 #include <qmap.h>
-#include <qregexp.h>
 
 #include <QList>
+#include <QRegularExpression>
 
 class QXmlStreamAttributes;
 
@@ -69,7 +69,7 @@
 
     ParaCounter & operator+=( const ParaCounter & other ) {
         current += other.current;
-        anchors.unite( other.anchors );
+        anchors.insert( other.anchors );
         return *this;
     }
 
@@ -94,14 +94,14 @@
 {
 public:
     void startDocument();
-    void startElement( int lineNumber, int columnNumber, const QStringRef& 
qName, const QXmlStreamAttributes & attr );
-    void endElement( int lineNumber, int columnNumber, const QStringRef& 
qName);
-    void characters( const QStringRef &ch);
+    void startElement( int lineNumber, int columnNumber, QStringView qName, 
const QXmlStreamAttributes & attr );
+    void endElement( int lineNumber, int columnNumber, QStringView qName);
+    void characters( QStringView ch);
     static bool isCuttingTag(const QString &tag);
-    static bool isSingleTag(const QStringRef &qName);
+    static bool isSingleTag(QStringView qName);
     static bool isLiteralTag(const QString &qName);
-    void skippedEntity ( const QStringRef & name );
-    void comment ( const QStringRef & );
+    void skippedEntity ( QStringView name );
+    void comment ( QStringView );
     MsgList getList() const { return list; }
     MsgList splitMessage(const MsgBlock &message);
 
@@ -121,8 +121,8 @@
     int inside, startline, startcol;
     int line;
     MsgList list;
-    mutable QRegExp infos_reg;
-    mutable QRegExp do_not_split_reg;
+    QRegularExpression infos_reg;
+    QRegularExpression do_not_split_reg;
 };
 
 MsgList parseXML(const char *filename);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/poxml-24.05.2/po/sl/docs/poxml/man-po2xml.1.docbook 
new/poxml-24.08.0/po/sl/docs/poxml/man-po2xml.1.docbook
--- old/poxml-24.05.2/po/sl/docs/poxml/man-po2xml.1.docbook     2024-06-19 
05:38:20.000000000 +0200
+++ new/poxml-24.08.0/po/sl/docs/poxml/man-po2xml.1.docbook     1970-01-01 
01:00:00.000000000 +0100
@@ -1,100 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE refentry PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant 
V1.1//EN" "dtd/kdedbx45.dtd" [
-<!ENTITY % Slovenian "INCLUDE">
-]>
-
-<refentry lang="&language;">
-<refentryinfo>
-<author
-><personname
-><firstname
->Ben</firstname
-><surname
->Burton</surname
-></personname
-> <email
->[email protected]</email
-></author>
-<date
->08.04.2003</date>
-</refentryinfo>
-
-<refmeta>
-<refentrytitle
-><command
->po2xml</command
-></refentrytitle>
-<manvolnum
->1</manvolnum>
-</refmeta>
-
-<refnamediv>
-<refname
-><command
->po2xml</command
-></refname>
-<refpurpose
->Prevede datoteko DocBook XML z uporabo datoteke PO</refpurpose>
-</refnamediv>
-
-<refsynopsisdiv>
-<cmdsynopsis
-><command
->po2xml</command
-> <group
-><option
-><replaceable
->original-XML</replaceable
-> <replaceable
->translated-PO</replaceable
-></option
-></group
-> </cmdsynopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title
->Opis</title>
-
-<para
-><command
->po2xml</command
-> je orodje ukazne vrstice, ki prevaja datoteko DocBook XML <replaceable
->original-XML</replaceable
-> z uporabo datoteke sporočila gettext <replaceable
->translated-PO</replaceable
->. Nastala prevedena datoteka XML se pošlje na standardni izhod.</para>
-
-<para
->Ta pripomoček je del kompleta za razvoj programske opreme KDE.</para>
-
-</refsect1>
-
-<refsect1>
-<title
->Poglejte tudi</title>
-
-<para
->split2po(1), swappo(1), xml2pot(1)</para>
-
-</refsect1>
-
-<refsect1>
-<title
->Avtorji</title>
-<para
->Orodja PO-XML je napisal &Stephan.Kulow; &Stephan.Kulow.mail;</para>
-<para
->To stran priročnika je pripravil <personname
-><firstname
->Ben</firstname
-><surname
->Burton</surname
-></personname
-><email
->[email protected]</email
-></para>
-
-</refsect1>
-
-</refentry>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/poxml-24.05.2/po/sl/docs/poxml/man-split2po.1.docbook 
new/poxml-24.08.0/po/sl/docs/poxml/man-split2po.1.docbook
--- old/poxml-24.05.2/po/sl/docs/poxml/man-split2po.1.docbook   2024-06-19 
05:38:20.000000000 +0200
+++ new/poxml-24.08.0/po/sl/docs/poxml/man-split2po.1.docbook   1970-01-01 
01:00:00.000000000 +0100
@@ -1,108 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE refentry PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant 
V1.1//EN" "dtd/kdedbx45.dtd" [
-<!ENTITY % Slovenian "INCLUDE">
-]>
-
-<refentry lang="&language;">
-<refentryinfo>
-<author
-><personname
-><firstname
->Ben</firstname
-><surname
->Burton</surname
-></personname
-><email
->[email protected]</email
-></author>
-<date
->07.04.2003</date>
-</refentryinfo>
-
-<refmeta>
-<refentrytitle
-><command
->split2po</command
-></refentrytitle>
-<manvolnum
->1</manvolnum>
-</refmeta>
-
-<refnamediv>
-<refname
-><command
->split2po</command
-></refname>
-<refpurpose
->Ustvari datoteko po iz dveh datotek XML DocBook</refpurpose>
-</refnamediv>
-
-<refsynopsisdiv>
-<cmdsynopsis
-><command
->split2po</command
-> <group choice="req"
-><option
-><replaceable
->Original-XML</replaceable
-></option
-> <option
-><replaceable
->Translated-XML</replaceable
-></option
-> </group
-> </cmdsynopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title
->Opis</title>
-
-<para
-><command
->split2po</command
-> je orodje ukazne vrstice, ki vzame dve dani datoteki XML DocBook in ustvari 
datoteko sporočil <command
->gettext</command
-> (datoteko PO), ki predstavlja spremembe med njima. Nastala PO-datoteka se 
pošlje na standardni izhod.</para>
-
-<para
-><filename
->translated-XML</filename
-> mora biti rezultat prevoda <filename
->original-XML</filename
-> v drug jezik. Ta prevod bo predstavljala nastala datoteka PO.</para>
-
-<para
->Ta pripomoček je del kompleta za razvoj programske opreme KDE. </para>
-
-</refsect1>
-
-<refsect1>
-<title
->Poglejte tudi</title>
-
-<para
->po2xml(1), swappo(1), xml2pot(1)</para>
-
-</refsect1>
-
-<refsect1>
-<title
->Avtorji</title>
-
-<para
->Orodja PO XML je napisal &Stephan.Kulow; &Stephan.Kulow.mail;</para>
-<para
->To stran priročnika je pripravil <personname
-><firstname
->Ben</firstname
-><surname
->Burton</surname
-></personname
-><email
->[email protected]</email
-></para>
-
-</refsect1>
-
-</refentry>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/poxml-24.05.2/po/sl/docs/poxml/man-swappo.1.docbook 
new/poxml-24.08.0/po/sl/docs/poxml/man-swappo.1.docbook
--- old/poxml-24.05.2/po/sl/docs/poxml/man-swappo.1.docbook     2024-06-19 
05:38:20.000000000 +0200
+++ new/poxml-24.08.0/po/sl/docs/poxml/man-swappo.1.docbook     1970-01-01 
01:00:00.000000000 +0100
@@ -1,98 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE refentry PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant 
V1.1//EN" "dtd/kdedbx45.dtd" [
-<!ENTITY % Slovenian "INCLUDE">
-]>
-
-<refentry lang="&language;">
-<refentryinfo>
-<author
-><personname
-><firstname
->Ben</firstname
-><surname
->Burton</surname
-></personname
-><email
->[email protected]</email
-></author>
-<date
->07.04.2003</date>
-</refentryinfo>
-
-<refmeta>
-<refentrytitle
-><command
->swappo</command
-></refentrytitle>
-<manvolnum
->1</manvolnum>
-</refmeta>
-
-<refnamediv>
-<refname
-><command
->swappo</command
-></refname>
-<refpurpose
->zamenja polji msgid in msgstr v datoteki PO</refpurpose>
-</refnamediv>
-
-<refsynopsisdiv>
-<cmdsynopsis
-><command
->swappo</command
-> <group
-><option
-><replaceable
->filename.po</replaceable
-></option
-></group
-> </cmdsynopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title
->Opis</title>
-
-<para
-><command
->swappo</command
-> prebere dano datoteko PO in zamenja polji msgid in msgstr za vsako 
sporočilo. Rezultat je nova datoteka PO, ki se prevaja v nasprotno smer. Na 
primer, če se datoteka PO prevede iz angleščine v francoščino, se bo nova 
datoteka PO prevedla iz francoščine v angleščino.</para>
-
-<para
->Nova PO-datoteka bo zapisana na standardni izhod. Stara datoteka PO bo ostala 
nedotaknjena.</para>
-
-<para
->Ta pripomoček je del programa &kde; Komplet za razvoj programske opreme</para
-> 
-
-</refsect1>
-
-<refsect1>
-<title
->Poglejte tudi</title>
-
-<para
->po2xml(1), split2po(1), xml2pot(1)</para>
-
-</refsect1>
-
-<refsect1>
-<title
->Avtorji</title>
-<para
->Orodja PO-XML je napisal &Stephan.Kulow; &Stephan.Kulow.mail;</para>
-<para
->To stran priročnika je pripravil <personname
-><firstname
->Ben</firstname
-><surname
->Burton</surname
-></personname
-><email
->[email protected]</email
-></para>
-
-</refsect1>
-
-</refentry>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/poxml-24.05.2/po/sl/docs/poxml/man-xml2pot.1.docbook 
new/poxml-24.08.0/po/sl/docs/poxml/man-xml2pot.1.docbook
--- old/poxml-24.05.2/po/sl/docs/poxml/man-xml2pot.1.docbook    2024-06-19 
05:38:20.000000000 +0200
+++ new/poxml-24.08.0/po/sl/docs/poxml/man-xml2pot.1.docbook    1970-01-01 
01:00:00.000000000 +0100
@@ -1,103 +0,0 @@
-<?xml version="1.0" ?>
-<!DOCTYPE refentry PUBLIC "-//KDE//DTD DocBook XML V4.5-Based Variant 
V1.1//EN" "dtd/kdedbx45.dtd" [
-<!ENTITY % Slovenian "INCLUDE">
-]>
-
-<refentry lang="&language;">
-<refentryinfo>
-<author
-><personname
-><firstname
->Ben</firstname
-><surname
->Burton</surname
-></personname
-><email
->[email protected]</email
-></author>
-<date
->07.04.2003</date>
-</refentryinfo>
-
-<refmeta>
-<refentrytitle
-><command
->xml2pot</command
-></refentrytitle>
-<manvolnum
->1</manvolnum>
-</refmeta>
-
-<refnamediv>
-<refname
-><command
->xml2pot</command
-></refname>
-<refpurpose
->Ustvari datoteko predloge PO iz datoteke DocBook XML.</refpurpose>
-</refnamediv>
-
-<refsynopsisdiv>
-<cmdsynopsis
-><command
->xml2pot</command
-> <group
-><option
-><replaceable
->original-XML</replaceable
-></option
-></group
-> </cmdsynopsis>
-</refsynopsisdiv>
-
-<refsect1>
-<title
->Opis</title>
-
-<para
-><command
->xml2pot</command
-> je orodje ukazne vrstice, ki ustvari datoteko s predlogo sporočila gettext 
iz datoteke DocBook XML <filename
->original-XML</filename
->. Datoteka predloge se pošlje na standardni izhod.</para>
-
-<para
->Dobljeno datoteko predloge je mogoče uporabiti za ustvarjanje datotek 
gettext message (PO-datotek) za različne jezike. Te lahko nato uporabite v 
povezavi z <command
->po2xml</command
->(1) za prevajanje izvirne datoteke XML v te druge jezike.</para>
-
-
-<para
->Ta pripomoček je del kompleta za razvoj programske opreme KDE.</para
-> 
-
-</refsect1>
-
-<refsect1>
-<title
->Poglejte tudi</title>
-
-<para
->po2xml(1), split2po(1), swappo(1)</para>
-
-</refsect1>
-
-<refsect1>
-<title
->Avtorji</title>
-
-<para
->Orodja PO XML je napisal &Stephan.Kulow; &Stephan.Kulow.mail;</para>
-<para
->To stran priročnika je pripravil <personname
-><firstname
->Ben</firstname
-><surname
->Burton</surname
-></personname
-><email
->[email protected]</email
-></para>
-</refsect1>
-
-</refentry>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/poxml-24.05.2/po2xml.cpp new/poxml-24.08.0/po2xml.cpp
--- old/poxml-24.05.2/po2xml.cpp        2024-06-19 05:38:20.000000000 +0200
+++ new/poxml-24.08.0/po2xml.cpp        2024-05-04 16:22:36.000000000 +0200
@@ -5,10 +5,10 @@
 #include <stdlib.h>
 #include <iostream>
 #include <assert.h>
-#include <qregexp.h>
 
 #include <QFile>
 #include <QList>
+#include <QRegularExpression>
 #include <QTextStream>
 
 using namespace std;
@@ -35,12 +35,12 @@
 QString translate(QString xml, const QString &orig, const QString &translation)
 {
     QString prefix;
-    while (xml.at(0) == '<' && orig.at(0) != '<') {
+    while (xml.at(0) == QLatin1Char('<') && orig.at(0) != QLatin1Char('<')) {
         // a XML tag as prefix
-        int index = xml.indexOf('>');
+        int index = xml.indexOf(QLatin1Char('>'));
         assert(index != -1);
         index++;
-        while (xml.at(index) == ' ')
+        while (xml.at(index) == QLatin1Char(' '))
             index++;
         prefix = prefix + xml.left(index);
         xml = xml.mid(index, xml.length());
@@ -72,11 +72,11 @@
     }
 
     QMap<QString, QString> translations;
-    foreach (const MsgBlock &block, translated)
+    for (const MsgBlock &block : std::as_const(translated))
     {
         QString msgstr;
         const QString msgid = block.msgid;
-        if (block.comment.indexOf("fuzzy") < 0)
+        if (block.comment.indexOf(QStringLiteral("fuzzy")) < 0)
             msgstr = block.msgstr;
 
 #ifdef POXML_DEBUG
@@ -88,7 +88,7 @@
     QFile xml(QFile::decodeName(argv[1]));
     xml.open(QIODevice::ReadOnly);
     QTextStream ds(&xml);
-    ds.setCodec("UTF-8");
+    ds.setEncoding(QStringConverter::Utf8);
     QString xml_text = ds.readAll();
     xml.close();
     QString output;
@@ -99,7 +99,7 @@
     line_offsets.append(0);
     int index = 0;
     while (true) {
-        index = xml_text.indexOf('\n', index) + 1;
+        index = xml_text.indexOf(QLatin1Char('\n'), index) + 1;
         if (index <= 0)
             break;
         line_offsets.append(index);
@@ -148,13 +148,13 @@
         QString xml = xml_text.mid(start_pos, end_pos - start_pos);
         int positionOfCommentStart = 0;
         while (true) {
-            positionOfCommentStart = xml.indexOf("<!--");
+            positionOfCommentStart = xml.indexOf(QStringLiteral("<!--"));
             if (positionOfCommentStart == -1)
                 break;
             int end_index = positionOfCommentStart + 4;
-            while (xml.at(end_index) != '>' ||
-                   xml.at(end_index-1) != '-' ||
-                   xml.at(end_index-2) != '-')
+            while (xml.at(end_index) != QLatin1Char('>') ||
+                   xml.at(end_index-1) != QLatin1Char('-') ||
+                   xml.at(end_index-2) != QLatin1Char('-'))
             {
                 end_index++;
             }
@@ -170,40 +170,40 @@
         // assert(!descaped.isEmpty());
 #endif
 
-        if ((*it).msgid.at(0) == '<' &&  
StructureParser::isClosure((*it).msgid)) {
+        if ((*it).msgid.at(0) == QLatin1Char('<') &&  
StructureParser::isClosure((*it).msgid)) {
             // if the id starts with a tag, then we remembered the
             // correct line information and need to strip the target
             // now, so it fits
             int index = 0;
-            while ((*it).msgid.at(index) != '>')
+            while ((*it).msgid.at(index) != QLatin1Char('>'))
                 index++;
             index++;
-            while ((*it).msgid.at(index) == ' ')
+            while ((*it).msgid.at(index) == QLatin1Char(' '))
                 index++;
             QString omsgid = (*it).msgid;
             (*it).msgid = (*it).msgid.mid(index);
 
             index = (*it).msgid.length() - 1;
-            while ((*it).msgid.at(index) != '<')
+            while ((*it).msgid.at(index) != QLatin1Char('<'))
                 index--;
 
             (*it).msgid = (*it).msgid.left(index);
 
             if (!descaped.isEmpty()) {
-                if (descaped.at(0) != '<') {
+                if (descaped.at(0) != QLatin1Char('<')) {
                     qWarning("the translation of '%s' doesn't start with a 
tag.", qPrintable(omsgid));
                     exit(1);
                 }
                 index = 0;
-                while (index <= (int)descaped.length() && descaped.at(index) 
!= '>')
+                while (index <= (int)descaped.length() && descaped.at(index) 
!= QLatin1Char('>'))
                     index++;
                 index++;
-                while (descaped.at(index) == ' ')
+                while (descaped.at(index) == QLatin1Char(' '))
                     index++;
                 descaped = descaped.mid(index);
 
                 index = descaped.length() - 1;
-                while (index >= 0 && descaped.at(index) != '<')
+                while (index >= 0 && descaped.at(index) != QLatin1Char('<'))
                     index--;
 
                 descaped = descaped.left(index);
@@ -246,21 +246,21 @@
 
     ts << xml_text.mid(old_pos);
 
-    output.remove(QRegExp("<trans_comment\\s*>"));
-    output.remove(QRegExp("</trans_comment\\s*>"));
+    output.remove(QRegularExpression(QStringLiteral("<trans_comment\\s*>")));
+    output.remove(QRegularExpression(QStringLiteral("</trans_comment\\s*>")));
 
     StructureParser::removeEmptyTags(output);
 
     index = 0;
     while (true) {
-        index = output.indexOf(QRegExp(">[^\n]"), index );
+        index = output.indexOf(QRegularExpression(QStringLiteral(">[^\n]")), 
index );
         if ( index == -1 )
             break;
-        if ( output.at( index - 1 ) == '/' || output.at( index - 1 ) == '-' ||
-             output.at( index - 1 ) == ']' || output.at( index - 1 ) == '?' )
+        if ( output.at( index - 1 ) == QLatin1Char('/') || output.at( index - 
1 ) == QLatin1Char('-') ||
+             output.at( index - 1 ) == QLatin1Char(']') || output.at( index - 
1 ) == QLatin1Char('?') )
             index = index + 1;
         else {
-            output.replace( index, 1, "\n>" );
+            output.replace( index, 1, QStringLiteral("\n>") );
             index = index + 2;
         }
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/poxml-24.05.2/split.cpp new/poxml-24.08.0/split.cpp
--- old/poxml-24.05.2/split.cpp 2024-06-19 05:38:20.000000000 +0200
+++ new/poxml-24.08.0/split.cpp 2024-05-04 16:22:36.000000000 +0200
@@ -46,7 +46,7 @@
     // of the following ones
     for (int index = index2; index < j; ++index) {
         if (!list1[index1 - 1].msgstr.isEmpty()) {
-            list1[index1 - 1].msgstr += " ";
+            list1[index1 - 1].msgstr += QLatin1Char(' ');
         }
         list1[index1 - 1].msgstr += 
QString::fromLatin1("<%1>%2</%3>").arg(list2[index].tag, list2[index].msgid, 
list2[index].tag);
     }
@@ -167,13 +167,13 @@
         { "PO-Revision-Date", "YEAR-MO-DA HO:MI+ZONE" },
         { "Last-Translator", "FULL NAME <EMAIL@ADDRESS>" },
         { "Content-Type", "text/plain; charset=utf-8" },
-        { 0, 0 }
+        { nullptr, nullptr }
     };
     if (!createPOWithHeader(headers, NULL, &po, &out_it)) {
         return 1;
     }
 
-    foreach (const MsgBlock &block, english)
+    for (const MsgBlock &block : std::as_const(english))
     {
         po_message_t msg = po_message_create();
         if (!msg) {
@@ -182,7 +182,7 @@
             return 1;
         }
 
-        foreach (const BlockInfo &bi, block.lines) {
+        for (const BlockInfo &bi : block.lines) {
             po_message_add_filepos(msg, "index.docbook", bi.start_line);
         }
         po_message_set_msgid(msg, 
StructureParser::descapeLiterals(block.msgid).toUtf8().constData());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/poxml-24.05.2/tests/CMakeLists.txt 
new/poxml-24.08.0/tests/CMakeLists.txt
--- old/poxml-24.05.2/tests/CMakeLists.txt      2024-06-19 05:38:20.000000000 
+0200
+++ new/poxml-24.08.0/tests/CMakeLists.txt      2024-05-04 16:22:36.000000000 
+0200
@@ -5,7 +5,7 @@
 
 add_custom_command(
   OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lauri.pot
-  COMMAND checkXML5 ${lauri_xml}
+  COMMAND checkXML6 ${lauri_xml}
   COMMAND xml2pot ${lauri_xml} > lauri.pot
   COMMAND msgmerge -o lauri.pot lauri.pot lauri.pot
   DEPENDS ${lauri_xml}
@@ -38,7 +38,7 @@
 
 add_test(
   NAME lauri_de
-  COMMAND checkXML5 lauri_de.xml
+  COMMAND checkXML6 lauri_de.xml
   WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
 )
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/poxml-24.05.2/xml2pot.cpp 
new/poxml-24.08.0/xml2pot.cpp
--- old/poxml-24.05.2/xml2pot.cpp       2024-06-19 05:38:20.000000000 +0200
+++ new/poxml-24.08.0/xml2pot.cpp       2024-05-04 16:22:36.000000000 +0200
@@ -37,7 +37,7 @@
     }
 
     const QDateTime now = QDateTime::currentDateTime().toUTC();
-    const QByteArray datestring = now.toString("yyyy-MM-dd hh:mm").toUtf8() + 
"+0000";
+    const QByteArray datestring = now.toString(QStringLiteral("yyyy-MM-dd 
hh:mm")).toUtf8() + "+0000";
 
     po_file_t po = NULL;
     po_message_iterator_t out_it = NULL;
@@ -52,7 +52,7 @@
         { "MIME-Version", "1.0" },
         { "Content-Type", "text/plain; charset=UTF-8" },
         { "Content-Transfer-Encoding", "8bit" },
-        { 0, 0 }
+        { nullptr, nullptr }
     };
     const char headercomment[] = "SOME DESCRIPTIVE TITLE.\n"
                                   "FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.\n"
@@ -66,7 +66,7 @@
 
     const QByteArray fname = 
QFileInfo(QFile::decodeName(argv[1])).fileName().toUtf8();
 
-    foreach (const MsgBlock &block, english)
+    for (const MsgBlock &block : std::as_const(english))
     {
 #ifdef POXML_DEBUG
         qDebug("adding message: %s", qPrintable(block.msgid));
@@ -80,7 +80,7 @@
 
         const QByteArray tagstring = "Tag: " + block.tag.toUtf8();
         po_message_set_extracted_comments(msg, tagstring.constData());
-        foreach (const BlockInfo &bi, block.lines) {
+        for (const BlockInfo &bi : block.lines) {
             po_message_add_filepos(msg, fname.constData(), bi.start_line);
         }
         po_message_set_format(msg, "c-format", 0);

Reply via email to