aboutsummaryrefslogtreecommitdiffstats
path: root/sources/shiboken6/generator/qtdoc/rstformat.h
diff options
context:
space:
mode:
Diffstat (limited to 'sources/shiboken6/generator/qtdoc/rstformat.h')
-rw-r--r--sources/shiboken6/generator/qtdoc/rstformat.h99
1 files changed, 99 insertions, 0 deletions
diff --git a/sources/shiboken6/generator/qtdoc/rstformat.h b/sources/shiboken6/generator/qtdoc/rstformat.h
new file mode 100644
index 000000000..8af7671fb
--- /dev/null
+++ b/sources/shiboken6/generator/qtdoc/rstformat.h
@@ -0,0 +1,99 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#ifndef RSTFORMAT_H
+#define RSTFORMAT_H
+
+#include <textstream.h>
+
+#include <QtCore/QByteArray>
+#include <QtCore/QString>
+#include <QtCore/QTextStream>
+#include <QtCore/QVersionNumber>
+
+struct rstVersionAdded
+{
+ explicit rstVersionAdded(const QVersionNumber &v) : m_version(v) {}
+
+ const QVersionNumber m_version;
+};
+
+inline TextStream &operator<<(TextStream &s, const rstVersionAdded &v)
+{
+ s << ".. versionadded:: "<< v.m_version.toString() << "\n\n";
+ return s;
+}
+
+inline QByteArray rstDeprecationNote(const char *what)
+{
+ return QByteArrayLiteral(".. note:: This ")
+ + what + QByteArrayLiteral(" is deprecated.\n\n");
+}
+
+template <class String>
+inline int writeEscapedRstText(TextStream &str, const String &s)
+{
+ int escaped = 0;
+ for (const QChar &c : s) {
+ switch (c.unicode()) {
+ case '*':
+ case '`':
+ case '_':
+ case '\\':
+ str << '\\';
+ ++escaped;
+ break;
+ }
+ str << c;
+ }
+ return s.size() + escaped;
+}
+
+class escape
+{
+public:
+ explicit escape(QStringView s) : m_string(s) {}
+
+ void write(TextStream &str) const { writeEscapedRstText(str, m_string); }
+
+private:
+ const QStringView m_string;
+};
+
+inline TextStream &operator<<(TextStream &str, const escape &e)
+{
+ e.write(str);
+ return str;
+}
+
+// RST anchor string: Anything else but letters, numbers, '_' or '.' replaced by '-'
+inline bool isValidRstLabelChar(QChar c)
+{
+ return c.isLetterOrNumber() || c == u'_' || c == u'.';
+}
+
+inline QString toRstLabel(QString s)
+{
+ for (int i = 0, size = s.size(); i < size; ++i) {
+ if (!isValidRstLabelChar(s.at(i)))
+ s[i] = u'-';
+ }
+ return s;
+}
+
+class rstLabel
+{
+public:
+ explicit rstLabel(const QString &l) : m_label(l) {}
+
+ friend TextStream &operator<<(TextStream &str, const rstLabel &a)
+ {
+ str << ".. _" << toRstLabel(a.m_label) << ":\n\n";
+ return str;
+ }
+
+private:
+ const QString &m_label;
+};
+
+#endif // RSTFORMAT_H