diff options
author | Venugopal Shivashankar <Venugopal.Shivashankar@qt.io> | 2022-11-07 11:06:41 +0100 |
---|---|---|
committer | Topi Reinio <topi.reinio@qt.io> | 2022-12-13 16:59:40 +0000 |
commit | 2400960842ff9ffdd634c7d3edd4685d59415acd (patch) | |
tree | 2f9bac3441c4c3c2e012003ac31b4f329998aa0d /src | |
parent | 9863678495def0f5044835c0d9b19f148589b5ea (diff) | |
download | qttools-2400960842ff9ffdd634c7d3edd4685d59415acd.tar.gz |
qdoc: Add translate attribute to HTML blocks
A browser translates everything by default, which means
even the <code>, <pre>, <table>s listing the class members,
and so on, are also translated. With this change, such HTML
blocks will include the "translate=no" attribute, indicating
that they should not be translated.
Fixes: QTBUG-106679
Done-with: Topi Reinio <topi.reinio@qt.io>
Change-Id: I446fe26c73b9e3fee2984297bd504ae72c555e73
Reviewed-by: Topi Reiniƶ <topi.reinio@qt.io>
(cherry picked from commit b7849d42efff91a4d247a4028d6c129f3742743a)
Diffstat (limited to 'src')
-rw-r--r-- | src/qdoc/htmlgenerator.cpp | 56 |
1 files changed, 30 insertions, 26 deletions
diff --git a/src/qdoc/htmlgenerator.cpp b/src/qdoc/htmlgenerator.cpp index 43c1f3247..34852bb2e 100644 --- a/src/qdoc/htmlgenerator.cpp +++ b/src/qdoc/htmlgenerator.cpp @@ -106,12 +106,12 @@ void HtmlGenerator::initializeGenerator() } defaults[] = { { ATOM_FORMATTING_BOLD, "<b>", "</b>" }, { ATOM_FORMATTING_INDEX, "<!--", "-->" }, { ATOM_FORMATTING_ITALIC, "<i>", "</i>" }, - { ATOM_FORMATTING_PARAMETER, "<i>", "</i>" }, + { ATOM_FORMATTING_PARAMETER, "<i translate=\"no\">", "</i>" }, { ATOM_FORMATTING_SUBSCRIPT, "<sub>", "</sub>" }, { ATOM_FORMATTING_SUPERSCRIPT, "<sup>", "</sup>" }, - { ATOM_FORMATTING_TELETYPE, "<code>", + { ATOM_FORMATTING_TELETYPE, "<code translate=\"no\">", "</code>" }, // <tt> tag is not supported in HTML5 - { ATOM_FORMATTING_UICONTROL, "<b>", "</b>" }, + { ATOM_FORMATTING_UICONTROL, "<b translate=\"no\">", "</b>" }, { ATOM_FORMATTING_UNDERLINE, "<u>", "</u>" }, { nullptr, nullptr, nullptr } }; @@ -352,7 +352,7 @@ qsizetype HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, Co } break; case Atom::Qml: - out() << "<pre class=\"qml\">" + out() << "<pre class=\"qml\" translate=\"no\">" << trimmedTrailing(highlightedCode(indent(m_codeIndent, atom->string()), relative, false, Node::QML), m_codePrefix, m_codeSuffix) @@ -366,13 +366,13 @@ qsizetype HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, Co << "</pre>\n"; break; case Atom::Code: - out() << "<pre class=\"cpp\">" + out() << "<pre class=\"cpp\" translate=\"no\">" << trimmedTrailing(highlightedCode(indent(m_codeIndent, atom->string()), relative), m_codePrefix, m_codeSuffix) << "</pre>\n"; break; case Atom::CodeBad: - out() << "<pre class=\"cpp plain\">" + out() << "<pre class=\"cpp plain\" translate=\"no\">" << trimmedTrailing(protectEnc(plainCode(indent(m_codeIndent, atom->string()))), m_codePrefix, m_codeSuffix) << "</pre>\n"; @@ -774,7 +774,7 @@ qsizetype HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, Co std::pair<QString, int> pair = getAtomListValue(atom); skipAhead = pair.second; QString t = protectEnc(plainCode(marker->markedUpEnumValue(pair.first, relative))); - out() << "<tr><td class=\"topAlign\"><code>" << t << "</code>"; + out() << "<tr><td class=\"topAlign\"><code translate=\"no\">" << t << "</code>"; if (relative->isEnumType()) { out() << "</td><td class=\"topAlign tblval\">"; @@ -783,7 +783,7 @@ qsizetype HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, Co if (itemValue.isEmpty()) out() << '?'; else - out() << "<code>" << protectEnc(itemValue) << "</code>"; + out() << "<code translate=\"no\">" << protectEnc(itemValue) << "</code>"; } } break; @@ -966,7 +966,7 @@ qsizetype HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, Co out() << "<b class=\"redFont\"><Missing HTML></b>"; break; case Atom::UnknownCommand: - out() << R"(<b class="redFont"><code>\)" << protectEnc(atom->string()) << "</code></b>"; + out() << R"(<b class="redFont"><code translate=\"no\">\)" << protectEnc(atom->string()) << "</code></b>"; break; case Atom::QmlText: case Atom::EndQmlText: @@ -1811,14 +1811,18 @@ void HtmlGenerator::generateTitle(const QString &title, const Text &subtitle, CodeMarker *marker) { out() << QString(m_prologue).replace("\\" + COMMAND_VERSION, m_qdb->version()); + QString attribute; + if (relative->genus() & Node::API) + attribute = R"( translate="no")"; + if (!title.isEmpty()) - out() << "<h1 class=\"title\">" << protectEnc(title) << "</h1>\n"; + out() << "<h1 class=\"title\"" << attribute << ">" << protectEnc(title) << "</h1>\n"; if (!subtitle.isEmpty()) { out() << "<span"; if (subTitleSize == SmallSubTitle) - out() << " class=\"small-subtitle\">"; + out() << " class=\"small-subtitle\"" << attribute << ">"; else - out() << " class=\"subtitle\">"; + out() << " class=\"subtitle\"" << attribute << ">"; generateText(subtitle, relative, marker); out() << "</span>\n"; } @@ -1888,7 +1892,7 @@ void HtmlGenerator::generateTheTable(const QStringList &requisiteOrder, const QString &headerText, const Aggregate *aggregate, CodeMarker *marker) { - out() << "<div class=\"table\"><table class=\"alignedsummary\">\n"; + out() << "<div class=\"table\"><table class=\"alignedsummary\" translate=\"no\">\n"; for (auto it = requisiteOrder.constBegin(); it != requisiteOrder.constEnd(); ++it) { @@ -2141,7 +2145,7 @@ void HtmlGenerator::generateQmlRequisites(QmlTypeNode *qcn, CodeMarker *marker) if (!requisites.isEmpty()) { // generate the table - out() << "<div class=\"table\"><table class=\"alignedsummary\">\n"; + out() << "<div class=\"table\"><table class=\"alignedsummary\" translate=\"no\">\n"; for (const auto &requisite : requisiteorder) { if (requisites.contains(requisite)) { @@ -2365,7 +2369,7 @@ QString HtmlGenerator::generateAllQmlMembersFile(const Sections §ions, CodeM continue; std::function<void(Node *)> generate = [&](Node *n) { - out() << "<li class=\"fn\">"; + out() << "<li class=\"fn\" translate=\"no\">"; generateQmlItem(n, aggregate, marker, true); if (n->isDefault()) out() << " [default]"; @@ -2941,7 +2945,7 @@ void HtmlGenerator::generateSection(const NodeVector &nv, const Node *relative, alignNames = false; } if (alignNames) { - out() << "<div class=\"table\"><table class=\"alignedsummary\">\n"; + out() << "<div class=\"table\"><table class=\"alignedsummary\" translate=\"no\">\n"; } else { if (twoColumn) out() << "<div class=\"table\"><table class=\"propsummary\">\n" @@ -2959,7 +2963,7 @@ void HtmlGenerator::generateSection(const NodeVector &nv, const Node *relative, } else { if (twoColumn && i == (nv.size() + 1) / 2) out() << "</ul></td><td class=\"topAlign\"><ul>\n"; - out() << "<li class=\"fn\">"; + out() << "<li class=\"fn\" translate=\"no\">"; } generateSynopsis(member, relative, marker, Section::Summary, alignNames); @@ -2997,10 +3001,10 @@ void HtmlGenerator::generateSectionList(const Section §ion, const Node *rela alignNames = false; } if (alignNames) { - out() << "<div class=\"table\"><table class=\"alignedsummary\">\n"; + out() << "<div class=\"table\"><table class=\"alignedsummary\" translate=\"no\">\n"; } else { if (twoColumn) - out() << "<div class=\"table\"><table class=\"propsummary\">\n" + out() << "<div class=\"table\"><table class=\"propsummary\" translate=\"no\">\n" << "<tr><td class=\"topAlign\">"; out() << "<ul>\n"; } @@ -3015,7 +3019,7 @@ void HtmlGenerator::generateSectionList(const Section §ion, const Node *rela } else { if (twoColumn && i == (members.size() + 1) / 2) out() << "</ul></td><td class=\"topAlign\"><ul>\n"; - out() << "<li class=\"fn\">"; + out() << "<li class=\"fn\" translate=\"no\">"; } QString prefix; @@ -3070,7 +3074,7 @@ void HtmlGenerator::generateSectionInheritedList(const Section §ion, const N { const QList<std::pair<Aggregate *, int>> &inheritedMembers = section.inheritedMembers(); for (const auto &member : inheritedMembers) { - out() << "<li class=\"fn\">"; + out() << "<li class=\"fn\" translate=\"no\">"; out() << member.second << ' '; if (member.second == 1) { out() << section.singular(); @@ -3112,7 +3116,7 @@ void HtmlGenerator::generateSynopsis(const Node *node, const Node *relative, Cod QRegularExpression::InvertedGreedinessOption); marked.remove(extraRegExp); } else { - marked.replace("<@extra>", "<code>"); + marked.replace("<@extra>", "<code translate=\"no\">"); marked.replace("</@extra>", "</code>"); } @@ -3381,7 +3385,7 @@ void HtmlGenerator::generateDetailedMember(const Node *node, const PageNode *rel out() << "<div class=\"fngroup\">\n"; for (const auto *sharedNode : collective) { nodeRef = refForNode(sharedNode); - out() << R"(<h3 class="fn fngroupitem" id=")" << nodeRef << "\">"; + out() << R"(<h3 class="fn fngroupitem" translate="no" id=")" << nodeRef << "\">"; generateSynopsis(sharedNode, relative, marker, Section::Details); out() << "</h3>"; } @@ -3397,7 +3401,7 @@ void HtmlGenerator::generateDetailedMember(const Node *node, const PageNode *rel generateSynopsis(etn->flagsType(), relative, marker, Section::Details); out() << "</h3>\n"; } else { - out() << R"(<h3 class="fn" id=")" << nodeRef << "\">"; + out() << R"(<h3 class="fn" translate="no" id=")" << nodeRef << "\">"; generateSynopsis(node, relative, marker, Section::Details); out() << "</h3>" << '\n'; } @@ -3498,7 +3502,7 @@ void HtmlGenerator::generateQmlSummary(const NodeVector &members, const Node *re if (!members.isEmpty()) { out() << "<ul>\n"; for (const auto &member : members) { - out() << "<li class=\"fn\">"; + out() << "<li class=\"fn\" translate=\"no\">"; generateQmlItem(member, relative, marker, true); if (member->isPropertyGroup()) { const auto *scn = static_cast<const SharedCommentNode *>(member); @@ -3507,7 +3511,7 @@ void HtmlGenerator::generateQmlSummary(const NodeVector &members, const Node *re const QList<Node *> &sharedNodes = scn->collective(); for (const auto &node : sharedNodes) { if (node->isQmlProperty()) { - out() << "<li class=\"fn\">"; + out() << "<li class=\"fn\" translate=\"no\">"; generateQmlItem(node, relative, marker, true); out() << "</li>\n"; } |