[clang-tools-extra] r367050 - [clang-doc] Fix output format of html
Diego Astiazaran via cfe-commits
cfe-commits at lists.llvm.org
Thu Jul 25 13:49:00 PDT 2019
Author: diegoastiazaran
Date: Thu Jul 25 13:49:00 2019
New Revision: 367050
URL: http://llvm.org/viewvc/llvm-project?rev=367050&view=rev
Log:
[clang-doc] Fix output format of html
The children of a TagNode are rendered in the same line as the parent only if they are all TextNodes.
When children are not inline; two text nodes that are adjacent won't have a new line between them, each tag node is rendered in its own line.
Differential Revision: https://reviews.llvm.org/D65005
Modified:
clang-tools-extra/trunk/clang-doc/HTMLGenerator.cpp
clang-tools-extra/trunk/unittests/clang-doc/HTMLGeneratorTest.cpp
Modified: clang-tools-extra/trunk/clang-doc/HTMLGenerator.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-doc/HTMLGenerator.cpp?rev=367050&r1=367049&r2=367050&view=diff
==============================================================================
--- clang-tools-extra/trunk/clang-doc/HTMLGenerator.cpp (original)
+++ clang-tools-extra/trunk/clang-doc/HTMLGenerator.cpp Thu Jul 25 13:49:00 2019
@@ -44,9 +44,6 @@ public:
operator bool() = delete;
bool IsSelfClosing() const;
-
- bool HasInlineChildren() const;
-
llvm::SmallString<16> ToString() const;
private:
@@ -67,29 +64,20 @@ struct HTMLNode {
};
struct TextNode : public HTMLNode {
- TextNode(const Twine &Text, bool Indented = true)
- : HTMLNode(NodeType::NODE_TEXT), Text(Text.str()), Indented(Indented) {}
+ TextNode(const Twine &Text)
+ : HTMLNode(NodeType::NODE_TEXT), Text(Text.str()) {}
std::string Text; // Content of node
- bool Indented; // Indicates if an indentation must be rendered before the text
void Render(llvm::raw_ostream &OS, int IndentationLevel) override;
};
struct TagNode : public HTMLNode {
- TagNode(HTMLTag Tag)
- : HTMLNode(NodeType::NODE_TAG), Tag(Tag),
- InlineChildren(Tag.HasInlineChildren()),
- SelfClosing(Tag.IsSelfClosing()) {}
+ TagNode(HTMLTag Tag) : HTMLNode(NodeType::NODE_TAG), Tag(Tag) {}
TagNode(HTMLTag Tag, const Twine &Text) : TagNode(Tag) {
- Children.emplace_back(
- llvm::make_unique<TextNode>(Text.str(), !InlineChildren));
+ Children.emplace_back(llvm::make_unique<TextNode>(Text.str()));
}
- HTMLTag Tag; // Name of HTML Tag (p, div, h1)
- bool InlineChildren; // Indicates if children nodes are rendered in the same
- // line as itself or if children must rendered in the
- // next line and with additional indentation
- bool SelfClosing; // Indicates if tag is self-closing
+ HTMLTag Tag; // Name of HTML Tag (p, div, h1)
std::vector<std::unique_ptr<HTMLNode>> Children; // List of child nodes
llvm::StringMap<llvm::SmallString<16>>
Attributes; // List of key-value attributes for tag
@@ -130,24 +118,6 @@ bool HTMLTag::IsSelfClosing() const {
llvm_unreachable("Unhandled HTMLTag::TagType");
}
-bool HTMLTag::HasInlineChildren() const {
- switch (Value) {
- case HTMLTag::TAG_META:
- case HTMLTag::TAG_TITLE:
- case HTMLTag::TAG_H1:
- case HTMLTag::TAG_H2:
- case HTMLTag::TAG_H3:
- case HTMLTag::TAG_LI:
- case HTMLTag::TAG_A:
- return true;
- case HTMLTag::TAG_DIV:
- case HTMLTag::TAG_P:
- case HTMLTag::TAG_UL:
- return false;
- }
- llvm_unreachable("Unhandled HTMLTag::TagType");
-}
-
llvm::SmallString<16> HTMLTag::ToString() const {
switch (Value) {
case HTMLTag::TAG_META:
@@ -175,17 +145,23 @@ llvm::SmallString<16> HTMLTag::ToString(
}
void TextNode::Render(llvm::raw_ostream &OS, int IndentationLevel) {
- if (Indented)
- OS.indent(IndentationLevel * 2);
+ OS.indent(IndentationLevel * 2);
printHTMLEscaped(Text, OS);
}
void TagNode::Render(llvm::raw_ostream &OS, int IndentationLevel) {
+ // Children nodes are rendered in the same line if all of them are text nodes
+ bool InlineChildren = true;
+ for (const auto &C : Children)
+ if (C->Type == NodeType::NODE_TAG) {
+ InlineChildren = false;
+ break;
+ }
OS.indent(IndentationLevel * 2);
OS << "<" << Tag.ToString();
for (const auto &A : Attributes)
OS << " " << A.getKey() << "=\"" << A.getValue() << "\"";
- if (SelfClosing) {
+ if (Tag.IsSelfClosing()) {
OS << "/>";
return;
}
@@ -385,7 +361,7 @@ static std::unique_ptr<HTMLNode> genHTML
} else if (I.Kind == "TextComment") {
if (I.Text == "")
return nullptr;
- return llvm::make_unique<TextNode>(I.Text, true);
+ return llvm::make_unique<TextNode>(I.Text);
}
return nullptr;
}
Modified: clang-tools-extra/trunk/unittests/clang-doc/HTMLGeneratorTest.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clang-doc/HTMLGeneratorTest.cpp?rev=367050&r1=367049&r2=367050&view=diff
==============================================================================
--- clang-tools-extra/trunk/unittests/clang-doc/HTMLGeneratorTest.cpp (original)
+++ clang-tools-extra/trunk/unittests/clang-doc/HTMLGeneratorTest.cpp Thu Jul 25 13:49:00 2019
@@ -56,9 +56,7 @@ TEST(HTMLGeneratorTest, emitNamespaceHTM
<h2>Functions</h2>
<div>
<h3>OneFunction</h3>
- <p>
- OneFunction()
- </p>
+ <p>OneFunction()</p>
</div>
<h2>Enums</h2>
<div>
@@ -107,9 +105,7 @@ TEST(HTMLGeneratorTest, emitRecordHTML)
<title>class r</title>
<div>
<h1>class r</h1>
- <p>
- Defined at line 10 of test.cpp
- </p>
+ <p>Defined at line 10 of test.cpp</p>
<p>
Inherits from
<a href=")raw" + std::string(PathToF.str()) +
@@ -118,8 +114,12 @@ TEST(HTMLGeneratorTest, emitRecordHTML)
</p>
<h2>Members</h2>
<ul>
- <li>private <a href=")raw" +
- std::string(PathToInt.str()) + R"raw(">int</a> X</li>
+ <li>
+ private
+ <a href=")raw" + std::string(PathToInt.str()) +
+ R"raw(">int</a>
+ X
+ </li>
</ul>
<h2>Records</h2>
<ul>
@@ -128,9 +128,7 @@ TEST(HTMLGeneratorTest, emitRecordHTML)
<h2>Functions</h2>
<div>
<h3>OneFunction</h3>
- <p>
- OneFunction()
- </p>
+ <p>OneFunction()</p>
</div>
<h2>Enums</h2>
<div>
@@ -180,9 +178,7 @@ TEST(HTMLGeneratorTest, emitFunctionHTML
R"raw(">int</a>
P)
</p>
- <p>
- Defined at line 10 of test.cpp
- </p>
+ <p>Defined at line 10 of test.cpp</p>
</div>
)raw";
@@ -214,9 +210,7 @@ TEST(HTMLGeneratorTest, emitEnumHTML) {
<ul>
<li>X</li>
</ul>
- <p>
- Defined at line 10 of test.cpp
- </p>
+ <p>Defined at line 10 of test.cpp</p>
</div>
)raw";
@@ -280,23 +274,13 @@ TEST(HTMLGeneratorTest, emitCommentHTML)
<title></title>
<div>
<h3>f</h3>
- <p>
- void f(int I, int J)
- </p>
- <p>
- Defined at line 10 of test.cpp
- </p>
+ <p>void f(int I, int J)</p>
+ <p>Defined at line 10 of test.cpp</p>
<div>
<div>
- <p>
- Brief description.
- </p>
- <p>
- Extended description that continues onto the next line.
- </p>
- <p>
- Comment with html entities: &, <, >, ", '.
- </p>
+ <p> Brief description.</p>
+ <p> Extended description that continues onto the next line.</p>
+ <p> Comment with html entities: &, <, >, ", '.</p>
</div>
</div>
</div>
More information about the cfe-commits
mailing list