[PATCH] D65107: [clang-doc] Fix html entities in rendered text
This revision was automatically updated to reflect the committed changes. Closed by commit rL367045: [clang-doc] Fix html entities in rendered text (authored by DiegoAstiazaran, committed by ). Herald added a project: LLVM. Herald added a subscriber: llvm-commits. Changed prior to commit: https://reviews.llvm.org/D65107?vs=211201=211806#toc Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D65107/new/ https://reviews.llvm.org/D65107 Files: clang-tools-extra/trunk/clang-doc/HTMLGenerator.cpp clang-tools-extra/trunk/unittests/clang-doc/HTMLGeneratorTest.cpp Index: clang-tools-extra/trunk/unittests/clang-doc/HTMLGeneratorTest.cpp === --- clang-tools-extra/trunk/unittests/clang-doc/HTMLGeneratorTest.cpp +++ clang-tools-extra/trunk/unittests/clang-doc/HTMLGeneratorTest.cpp @@ -258,6 +258,15 @@ Extended->Children.back()->Kind = "TextComment"; Extended->Children.back()->Text = " continues onto the next line."; + Top.Children.emplace_back(llvm::make_unique()); + CommentInfo *Entities = Top.Children.back().get(); + Entities->Kind = "ParagraphComment"; + Entities->Children.emplace_back(llvm::make_unique()); + Entities->Children.back()->Kind = "TextComment"; + Entities->Children.back()->Name = "ParagraphComment"; + Entities->Children.back()->Text = + " Comment with html entities: &, <, >, \", \'."; + I.Description.emplace_back(std::move(Top)); auto G = getHTMLGenerator(); @@ -285,6 +294,9 @@ Extended description that continues onto the next line. + + Comment with html entities: , , , , . + Index: clang-tools-extra/trunk/clang-doc/HTMLGenerator.cpp === --- clang-tools-extra/trunk/clang-doc/HTMLGenerator.cpp +++ clang-tools-extra/trunk/clang-doc/HTMLGenerator.cpp @@ -8,6 +8,7 @@ #include "Generators.h" #include "Representation.h" +#include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/Path.h" @@ -176,7 +177,7 @@ void TextNode::Render(llvm::raw_ostream , int IndentationLevel) { if (Indented) OS.indent(IndentationLevel * 2); - OS << Text; + printHTMLEscaped(Text, OS); } void TagNode::Render(llvm::raw_ostream , int IndentationLevel) { Index: clang-tools-extra/trunk/unittests/clang-doc/HTMLGeneratorTest.cpp === --- clang-tools-extra/trunk/unittests/clang-doc/HTMLGeneratorTest.cpp +++ clang-tools-extra/trunk/unittests/clang-doc/HTMLGeneratorTest.cpp @@ -258,6 +258,15 @@ Extended->Children.back()->Kind = "TextComment"; Extended->Children.back()->Text = " continues onto the next line."; + Top.Children.emplace_back(llvm::make_unique()); + CommentInfo *Entities = Top.Children.back().get(); + Entities->Kind = "ParagraphComment"; + Entities->Children.emplace_back(llvm::make_unique()); + Entities->Children.back()->Kind = "TextComment"; + Entities->Children.back()->Name = "ParagraphComment"; + Entities->Children.back()->Text = + " Comment with html entities: &, <, >, \", \'."; + I.Description.emplace_back(std::move(Top)); auto G = getHTMLGenerator(); @@ -285,6 +294,9 @@ Extended description that continues onto the next line. + + Comment with html entities: , , , , . + Index: clang-tools-extra/trunk/clang-doc/HTMLGenerator.cpp === --- clang-tools-extra/trunk/clang-doc/HTMLGenerator.cpp +++ clang-tools-extra/trunk/clang-doc/HTMLGenerator.cpp @@ -8,6 +8,7 @@ #include "Generators.h" #include "Representation.h" +#include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/Path.h" @@ -176,7 +177,7 @@ void TextNode::Render(llvm::raw_ostream , int IndentationLevel) { if (Indented) OS.indent(IndentationLevel * 2); - OS << Text; + printHTMLEscaped(Text, OS); } void TagNode::Render(llvm::raw_ostream , int IndentationLevel) { ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D65107: [clang-doc] Fix html entities in rendered text
juliehockett accepted this revision. juliehockett added a comment. This revision is now accepted and ready to land. LGTM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D65107/new/ https://reviews.llvm.org/D65107 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D65107: [clang-doc] Fix html entities in rendered text
DiegoAstiazaran updated this revision to Diff 211201. DiegoAstiazaran marked an inline comment as done. DiegoAstiazaran edited the summary of this revision. DiegoAstiazaran added a comment. Use printHTMLEscaped() in ADT/StringExtras.h to write HTML entities. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D65107/new/ https://reviews.llvm.org/D65107 Files: clang-tools-extra/clang-doc/HTMLGenerator.cpp clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp Index: clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp === --- clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp +++ clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp @@ -258,6 +258,15 @@ Extended->Children.back()->Kind = "TextComment"; Extended->Children.back()->Text = " continues onto the next line."; + Top.Children.emplace_back(llvm::make_unique()); + CommentInfo *Entities = Top.Children.back().get(); + Entities->Kind = "ParagraphComment"; + Entities->Children.emplace_back(llvm::make_unique()); + Entities->Children.back()->Kind = "TextComment"; + Entities->Children.back()->Name = "ParagraphComment"; + Entities->Children.back()->Text = + " Comment with html entities: &, <, >, \", \'."; + I.Description.emplace_back(std::move(Top)); auto G = getHTMLGenerator(); @@ -285,6 +294,9 @@ Extended description that continues onto the next line. + + Comment with html entities: , , , , . + Index: clang-tools-extra/clang-doc/HTMLGenerator.cpp === --- clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -8,6 +8,7 @@ #include "Generators.h" #include "Representation.h" +#include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/Path.h" @@ -176,7 +177,7 @@ void TextNode::Render(llvm::raw_ostream , int IndentationLevel) { if (Indented) OS.indent(IndentationLevel * 2); - OS << Text; + printHTMLEscaped(Text, OS); } void TagNode::Render(llvm::raw_ostream , int IndentationLevel) { Index: clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp === --- clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp +++ clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp @@ -258,6 +258,15 @@ Extended->Children.back()->Kind = "TextComment"; Extended->Children.back()->Text = " continues onto the next line."; + Top.Children.emplace_back(llvm::make_unique()); + CommentInfo *Entities = Top.Children.back().get(); + Entities->Kind = "ParagraphComment"; + Entities->Children.emplace_back(llvm::make_unique()); + Entities->Children.back()->Kind = "TextComment"; + Entities->Children.back()->Name = "ParagraphComment"; + Entities->Children.back()->Text = + " Comment with html entities: &, <, >, \", \'."; + I.Description.emplace_back(std::move(Top)); auto G = getHTMLGenerator(); @@ -285,6 +294,9 @@ Extended description that continues onto the next line. + + Comment with html entities: , , , , . + Index: clang-tools-extra/clang-doc/HTMLGenerator.cpp === --- clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -8,6 +8,7 @@ #include "Generators.h" #include "Representation.h" +#include "llvm/ADT/StringExtras.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/Path.h" @@ -176,7 +177,7 @@ void TextNode::Render(llvm::raw_ostream , int IndentationLevel) { if (Indented) OS.indent(IndentationLevel * 2); - OS << Text; + printHTMLEscaped(Text, OS); } void TagNode::Render(llvm::raw_ostream , int IndentationLevel) { ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D65107: [clang-doc] Fix html entities in rendered text
Eugene.Zelenko added inline comments. Comment at: clang-tools-extra/clang-doc/HTMLGenerator.cpp:181 +std::string TextNode::getHTMLEntity(const char ) { + switch (C) { There is printHTMLEscaped() in ADT/StringExtras.h. May b it could be used or common code moved into other function in ADT/StringExtras.h? CHANGES SINCE LAST ACTION https://reviews.llvm.org/D65107/new/ https://reviews.llvm.org/D65107 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D65107: [clang-doc] Fix html entities in rendered text
DiegoAstiazaran created this revision. DiegoAstiazaran added reviewers: jakehehrlich, juliehockett. DiegoAstiazaran added a project: clang-tools-extra. Replace <, > and " with its corresponding html entities before rendering text nodes. https://reviews.llvm.org/D65107 Files: clang-tools-extra/clang-doc/HTMLGenerator.cpp clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp Index: clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp === --- clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp +++ clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp @@ -258,6 +258,14 @@ Extended->Children.back()->Kind = "TextComment"; Extended->Children.back()->Text = " continues onto the next line."; + Top.Children.emplace_back(llvm::make_unique()); + CommentInfo *Entities = Top.Children.back().get(); + Entities->Kind = "ParagraphComment"; + Entities->Children.emplace_back(llvm::make_unique()); + Entities->Children.back()->Kind = "TextComment"; + Entities->Children.back()->Name = "ParagraphComment"; + Entities->Children.back()->Text = " Comment with html entities: <, > and \"."; + I.Description.emplace_back(std::move(Top)); auto G = getHTMLGenerator(); @@ -285,6 +293,9 @@ Extended description that continues onto the next line. + + Comment with html entities: , and . + Index: clang-tools-extra/clang-doc/HTMLGenerator.cpp === --- clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -71,7 +71,12 @@ std::string Text; // Content of node bool Indented; // Indicates if an indentation must be rendered before the text + + void FixText(); void Render(llvm::raw_ostream , int IndentationLevel) override; + +private: + std::string getHTMLEntity(const char ); }; struct TagNode : public HTMLNode { @@ -173,7 +178,30 @@ llvm_unreachable("Unhandled HTMLTag::TagType"); } +std::string TextNode::getHTMLEntity(const char ) { + switch (C) { + case '<': +return ""; + case '>': +return ""; + case '"': +return ""; + default: +return std::string(, 1); + } +} + +void TextNode::FixText() { + static const std::string CharactersToReplace = "<>\""; + std::size_t found = Text.find_first_of(CharactersToReplace); + while (found != std::string::npos) { +Text.replace(found, 1, getHTMLEntity(Text[found])); +found = Text.find_first_of(CharactersToReplace, found + 1); + } +} + void TextNode::Render(llvm::raw_ostream , int IndentationLevel) { + FixText(); if (Indented) OS.indent(IndentationLevel * 2); OS << Text; Index: clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp === --- clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp +++ clang-tools-extra/unittests/clang-doc/HTMLGeneratorTest.cpp @@ -258,6 +258,14 @@ Extended->Children.back()->Kind = "TextComment"; Extended->Children.back()->Text = " continues onto the next line."; + Top.Children.emplace_back(llvm::make_unique()); + CommentInfo *Entities = Top.Children.back().get(); + Entities->Kind = "ParagraphComment"; + Entities->Children.emplace_back(llvm::make_unique()); + Entities->Children.back()->Kind = "TextComment"; + Entities->Children.back()->Name = "ParagraphComment"; + Entities->Children.back()->Text = " Comment with html entities: <, > and \"."; + I.Description.emplace_back(std::move(Top)); auto G = getHTMLGenerator(); @@ -285,6 +293,9 @@ Extended description that continues onto the next line. + + Comment with html entities: , and . + Index: clang-tools-extra/clang-doc/HTMLGenerator.cpp === --- clang-tools-extra/clang-doc/HTMLGenerator.cpp +++ clang-tools-extra/clang-doc/HTMLGenerator.cpp @@ -71,7 +71,12 @@ std::string Text; // Content of node bool Indented; // Indicates if an indentation must be rendered before the text + + void FixText(); void Render(llvm::raw_ostream , int IndentationLevel) override; + +private: + std::string getHTMLEntity(const char ); }; struct TagNode : public HTMLNode { @@ -173,7 +178,30 @@ llvm_unreachable("Unhandled HTMLTag::TagType"); } +std::string TextNode::getHTMLEntity(const char ) { + switch (C) { + case '<': +return ""; + case '>': +return ""; + case '"': +return ""; + default: +return std::string(, 1); + } +} + +void TextNode::FixText() { + static const std::string CharactersToReplace = "<>\""; + std::size_t found = Text.find_first_of(CharactersToReplace); + while (found != std::string::npos) { +Text.replace(found, 1, getHTMLEntity(Text[found])); +found = Text.find_first_of(CharactersToReplace, found + 1); + } +} + void