<div dir="ltr"><div dir="ltr"></div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Aug 16, 2019 at 8:14 PM Julie Hockett <<a href="mailto:juliehockett@google.com">juliehockett@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">Hi,<div><br></div><div>Would you have the cmake invocation? I think it's a fairly easy fix, but I can't reproduce it locally so I don't know if I've actually solved it.</div></div></div></blockquote><div>I don't have the cmake invocation handy, but I got the compile command. Also, my description was not entirely accurate. It's a GCC 5.4.0 library, but the compiler is a build of Clang. I'm having trouble accessing the machine, and I'm trying to get a build tree going on another machine.<br></div><div><br></div><div>clang++  --gcc-toolchain=/usr  -DGTEST_HAS_RTTI=0 -D_DEBUG -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -Itools/clang/tools/extra/clang-doc -I/tmp/worker/LLVM-Master-Ubuntu-Release/llvm/clang-tools-extra/clang-doc -I/tmp/worker/LLVM-Master-Ubuntu-Release/llvm/clang/include -Itools/clang/include -Iinclude -I/tmp/worker/LLVM-Master-Ubuntu-Release/llvm/llvm/include -fPIC -fvisibility-inlines-hidden -Werror -Werror=date-time -Werror=unguarded-availability-new -std=c++14 -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wstring-conversion -fdiagnostics-color -ffunction-sections -fdata-sections -fno-common -Woverloaded-virtual -Wno-nested-anon-types -O3    -UNDEBUG  -fno-exceptions -fno-rtti -MMD -MT tools/clang/tools/extra/clang-doc/CMakeFiles/obj.clangDoc.dir/HTMLGenerator.cpp.o -MF tools/clang/tools/extra/clang-doc/CMakeFiles/obj.clangDoc.dir/HTMLGenerator.cpp.o.d -o tools/clang/tools/extra/clang-doc/CMakeFiles/obj.clangDoc.dir/HTMLGenerator.cpp.o -c /tmp/worker/LLVM-Master-Ubuntu-Release/llvm/clang-tools-extra/clang-doc/HTMLGenerator.cpp<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div><br></div><div>Thanks!</div><div>Julie</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Aug 16, 2019 at 4:43 PM Diego Astiazarán <<a href="mailto:diegoast@google.com" target="_blank">diegoast@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">---------- Forwarded message ---------<br>From: <b class="gmail_sendername" dir="auto">Diego Astiazarán</b> <span dir="auto"><<a href="mailto:diegoaat97@gmail.com" class="gmail-m_-231875145462630946cremed" target="_blank">diegoaat97@gmail.com</a>></span><br>Date: Fri, Aug 16, 2019 at 4:37 PM<br>Subject: Fwd: [clang-tools-extra] r369139 - [clang-doc] Redesign of generated HTML files<br>To:  <<a href="mailto:diegoast@google.com" class="gmail-m_-231875145462630946cremed" target="_blank">diegoast@google.com</a>><br></div><br><br><div dir="auto"></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">---------- Forwarded message ---------<br>From: <b class="gmail_sendername" dir="auto">Hubert Tong</b> <span dir="auto"><<a href="mailto:hubert.reinterpretcast@gmail.com" class="gmail-m_-231875145462630946cremed" target="_blank">hubert.reinterpretcast@gmail.com</a>></span><br>Date: Fri, Aug 16, 2019, 4:34 PM<br>Subject: Re: [clang-tools-extra] r369139 - [clang-doc] Redesign of generated HTML files<br>To: Diego Astiazaran <<a href="mailto:diegoaat97@gmail.com" class="gmail-m_-231875145462630946cremed" target="_blank">diegoaat97@gmail.com</a>><br>Cc: cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" class="gmail-m_-231875145462630946cremed" target="_blank">cfe-commits@lists.llvm.org</a>><br></div><br><br><div dir="ltr"><div>This patch broke our GCC 5.4.0 builder:</div><div>```</div><div>In file included from /tmp/worker/LLVM-Master-Ubuntu-Release/llvm/clang-tools-extra/clang-doc/HTMLGenerator.cpp:9:<br>In file included from /tmp/worker/LLVM-Master-Ubuntu-Release/llvm/clang-tools-extra/clang-doc/Generators.h:15:<br>In file included from /tmp/worker/LLVM-Master-Ubuntu-Release/llvm/clang-tools-extra/clang-doc/Representation.h:17:<br>In file included from /tmp/worker/LLVM-Master-Ubuntu-Release/llvm/clang/include/clang/AST/Type.h:20:<br>In file included from /tmp/worker/LLVM-Master-Ubuntu-Release/llvm/clang/include/clang/AST/NestedNameSpecifier.h:17:<br>In file included from /tmp/worker/LLVM-Master-Ubuntu-Release/llvm/clang/include/clang/Basic/Diagnostic.h:17:<br>In file included from /tmp/worker/LLVM-Master-Ubuntu-Release/llvm/clang/include/clang/Basic/DiagnosticIDs.h:17:<br>In file included from /tmp/worker/LLVM-Master-Ubuntu-Release/llvm/clang/include/clang/Basic/LLVM.h:21:<br>In file included from /tmp/worker/LLVM-Master-Ubuntu-Release/llvm/llvm/include/llvm/Support/Casting.h:20:<br>In file included from /usr/lib/gcc/powerpc64le-linux-gnu/5.4.0/../../../../include/c++/5.4.0/memory:63:<br>In file included from /usr/lib/gcc/powerpc64le-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/allocator.h:46:<br>In file included from /usr/lib/gcc/powerpc64le-linux-gnu/5.4.0/../../../../include/powerpc64le-linux-gnu/c++/5.4.0/bits/c++allocator.h:33:<br>/usr/lib/gcc/powerpc64le-linux-gnu/5.4.0/../../../../include/c++/5.4.0/ext/new_allocator.h:120:23: error: no matching constructor for initialization of 'std::pair<llvm::SmallString<16>, llvm::SmallString<16> >'<br>        { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }<br>                             ^   ~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>/usr/lib/gcc/powerpc64le-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/alloc_traits.h:530:8: note: in instantiation of function template specialization '__gnu_cxx::new_allocator<std::pair<llvm::SmallString<16>, llvm::SmallString<16> > >::construct<std::pair<llvm::SmallString<16>, llvm::SmallString<16> >, char const (&)[3], std::__cxx11::basic_string<char> >' requested here<br>        { __a.construct(__p, std::forward<_Args>(__args)...); }<br>              ^<br>/usr/lib/gcc/powerpc64le-linux-gnu/5.4.0/../../../../include/c++/5.4.0/bits/vector.tcc:96:21: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<std::pair<llvm::SmallString<16>, llvm::SmallString<16> > > >::construct<std::pair<llvm::SmallString<16>, llvm::SmallString<16> >, char const (&)[3], std::__cxx11::basic_string<char> >' requested here<br>            _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,<br>                           ^<br>/tmp/worker/LLVM-Master-Ubuntu-Release/llvm/clang-tools-extra/clang-doc/HTMLGenerator.cpp:647:26: note: in instantiation of function template specialization 'std::vector<std::pair<llvm::SmallString<16>, llvm::SmallString<16> >, std::allocator<std::pair<llvm::SmallString<16>, llvm::SmallString<16> > > >::emplace_back<char const (&)[3], std::__cxx11::basic_string<char> >' requested here<br>  Out.back()->Attributes.emplace_back("id",<br>                         ^</div><div>```</div><div><br></div><div>-- HT<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Aug 16, 2019 at 2:37 PM Diego Astiazaran via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" rel="noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">cfe-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Author: diegoastiazaran<br>
Date: Fri Aug 16 11:38:11 2019<br>
New Revision: 369139<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=369139&view=rev" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">http://llvm.org/viewvc/llvm-project?rev=369139&view=rev</a><br>
Log:<br>
[clang-doc] Redesign of generated HTML files<br>
<br>
The new design includes a header (contains the project name), a main section, and a footer.<br>
The main section is divided into three subsections. Left, middle, right. The left section contains the general index, the middle contains the info's data, and the right contains the index for the info's content.<br>
The CSS has been updated.<br>
A flag --project-name is added.<br>
The Attributes attribute of the TagNode struct is now a vector of pairs because these attributes should be rendered in the insertion order.<br>
The functions (cpp and js) that converts an Index tree structure into HTML were slightly modified; the first ul tag created is now a ol tag. The inner lists are still ul.<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D66353" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">https://reviews.llvm.org/D66353</a><br>
<br>
Modified:<br>
    clang-tools-extra/trunk/clang-doc/HTMLGenerator.cpp<br>
    clang-tools-extra/trunk/clang-doc/Representation.cpp<br>
    clang-tools-extra/trunk/clang-doc/Representation.h<br>
    clang-tools-extra/trunk/clang-doc/assets/clang-doc-default-stylesheet.css<br>
    clang-tools-extra/trunk/clang-doc/assets/index.js<br>
    clang-tools-extra/trunk/clang-doc/tool/ClangDocMain.cpp<br>
    clang-tools-extra/trunk/docs/clang-doc.rst<br>
    clang-tools-extra/trunk/unittests/clang-doc/HTMLGeneratorTest.cpp<br>
<br>
Modified: clang-tools-extra/trunk/clang-doc/HTMLGenerator.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-doc/HTMLGenerator.cpp?rev=369139&r1=369138&r2=369139&view=diff" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-doc/HTMLGenerator.cpp?rev=369139&r1=369138&r2=369139&view=diff</a><br>
==============================================================================<br>
--- clang-tools-extra/trunk/clang-doc/HTMLGenerator.cpp (original)<br>
+++ clang-tools-extra/trunk/clang-doc/HTMLGenerator.cpp Fri Aug 16 11:38:11 2019<br>
@@ -8,6 +8,7 @@<br>
<br>
 #include "Generators.h"<br>
 #include "Representation.h"<br>
+#include "clang/Basic/Version.h"<br>
 #include "llvm/ADT/StringExtras.h"<br>
 #include "llvm/ADT/StringRef.h"<br>
 #include "llvm/Support/FileSystem.h"<br>
@@ -29,12 +30,16 @@ public:<br>
   enum TagType {<br>
     TAG_A,<br>
     TAG_DIV,<br>
+    TAG_FOOTER,<br>
     TAG_H1,<br>
     TAG_H2,<br>
     TAG_H3,<br>
+    TAG_HEADER,<br>
     TAG_LI,<br>
     TAG_LINK,<br>
+    TAG_MAIN,<br>
     TAG_META,<br>
+    TAG_OL,<br>
     TAG_P,<br>
     TAG_SCRIPT,<br>
     TAG_SPAN,<br>
@@ -84,7 +89,7 @@ struct TagNode : public HTMLNode {<br>
<br>
   HTMLTag Tag; // Name of HTML Tag (p, div, h1)<br>
   std::vector<std::unique_ptr<HTMLNode>> Children; // List of child nodes<br>
-  llvm::StringMap<llvm::SmallString<16>><br>
+  std::vector<std::pair<llvm::SmallString<16>, llvm::SmallString<16>>><br>
       Attributes; // List of key-value attributes for tag<br>
<br>
   void Render(llvm::raw_ostream &OS, int IndentationLevel) override;<br>
@@ -112,10 +117,14 @@ bool HTMLTag::IsSelfClosing() const {<br>
     return true;<br>
   case HTMLTag::TAG_A:<br>
   case HTMLTag::TAG_DIV:<br>
+  case HTMLTag::TAG_FOOTER:<br>
   case HTMLTag::TAG_H1:<br>
   case HTMLTag::TAG_H2:<br>
   case HTMLTag::TAG_H3:<br>
+  case HTMLTag::TAG_HEADER:<br>
   case HTMLTag::TAG_LI:<br>
+  case HTMLTag::TAG_MAIN:<br>
+  case HTMLTag::TAG_OL:<br>
   case HTMLTag::TAG_P:<br>
   case HTMLTag::TAG_SCRIPT:<br>
   case HTMLTag::TAG_SPAN:<br>
@@ -132,18 +141,26 @@ llvm::SmallString<16> HTMLTag::ToString(<br>
     return llvm::SmallString<16>("a");<br>
   case HTMLTag::TAG_DIV:<br>
     return llvm::SmallString<16>("div");<br>
+  case HTMLTag::TAG_FOOTER:<br>
+    return llvm::SmallString<16>("footer");<br>
   case HTMLTag::TAG_H1:<br>
     return llvm::SmallString<16>("h1");<br>
   case HTMLTag::TAG_H2:<br>
     return llvm::SmallString<16>("h2");<br>
   case HTMLTag::TAG_H3:<br>
     return llvm::SmallString<16>("h3");<br>
+  case HTMLTag::TAG_HEADER:<br>
+    return llvm::SmallString<16>("header");<br>
   case HTMLTag::TAG_LI:<br>
     return llvm::SmallString<16>("li");<br>
   case HTMLTag::TAG_LINK:<br>
     return llvm::SmallString<16>("link");<br>
+  case HTMLTag::TAG_MAIN:<br>
+    return llvm::SmallString<16>("main");<br>
   case HTMLTag::TAG_META:<br>
     return llvm::SmallString<16>("meta");<br>
+  case HTMLTag::TAG_OL:<br>
+    return llvm::SmallString<16>("ol");<br>
   case HTMLTag::TAG_P:<br>
     return llvm::SmallString<16>("p");<br>
   case HTMLTag::TAG_SCRIPT:<br>
@@ -174,7 +191,7 @@ void TagNode::Render(llvm::raw_ostream &<br>
   OS.indent(IndentationLevel * 2);<br>
   OS << "<" << Tag.ToString();<br>
   for (const auto &A : Attributes)<br>
-    OS << " " << A.getKey() << "=\"" << A.getValue() << "\"";<br>
+    OS << " " << A.first << "=\"" << A.second << "\"";<br>
   if (Tag.IsSelfClosing()) {<br>
     OS << "/>";<br>
     return;<br>
@@ -255,13 +272,13 @@ genStylesheetsHTML(StringRef InfoPath, c<br>
   std::vector<std::unique_ptr<TagNode>> Out;<br>
   for (const auto &FilePath : CDCtx.UserStylesheets) {<br>
     auto LinkNode = std::make_unique<TagNode>(HTMLTag::TAG_LINK);<br>
-    LinkNode->Attributes.try_emplace("rel", "stylesheet");<br>
+    LinkNode->Attributes.emplace_back("rel", "stylesheet");<br>
     SmallString<128> StylesheetPath = computeRelativePath("", InfoPath);<br>
     llvm::sys::path::append(StylesheetPath,<br>
                             llvm::sys::path::filename(FilePath));<br>
     // Paths in HTML must be in posix-style<br>
     llvm::sys::path::native(StylesheetPath, llvm::sys::path::Style::posix);<br>
-    LinkNode->Attributes.try_emplace("href", StylesheetPath);<br>
+    LinkNode->Attributes.emplace_back("href", StylesheetPath);<br>
     Out.emplace_back(std::move(LinkNode));<br>
   }<br>
   return Out;<br>
@@ -276,7 +293,7 @@ genJsScriptsHTML(StringRef InfoPath, con<br>
     llvm::sys::path::append(ScriptPath, llvm::sys::path::filename(FilePath));<br>
     // Paths in HTML must be in posix-style<br>
     llvm::sys::path::native(ScriptPath, llvm::sys::path::Style::posix);<br>
-    ScriptNode->Attributes.try_emplace("src", ScriptPath);<br>
+    ScriptNode->Attributes.emplace_back("src", ScriptPath);<br>
     Out.emplace_back(std::move(ScriptNode));<br>
   }<br>
   return Out;<br>
@@ -284,7 +301,7 @@ genJsScriptsHTML(StringRef InfoPath, con<br>
<br>
 static std::unique_ptr<TagNode> genLink(const Twine &Text, const Twine &Link) {<br>
   auto LinkNode = std::make_unique<TagNode>(HTMLTag::TAG_A, Text);<br>
-  LinkNode->Attributes.try_emplace("href", Link.str());<br>
+  LinkNode->Attributes.emplace_back("href", Link.str());<br>
   return LinkNode;<br>
 }<br>
<br>
@@ -333,7 +350,7 @@ genEnumsBlock(const std::vector<EnumInfo<br>
<br>
   std::vector<std::unique_ptr<TagNode>> Out;<br>
   Out.emplace_back(std::make_unique<TagNode>(HTMLTag::TAG_H2, "Enums"));<br>
-  Out.back()->Attributes.try_emplace("id", "Enums");<br>
+  Out.back()->Attributes.emplace_back("id", "Enums");<br>
   Out.emplace_back(std::make_unique<TagNode>(HTMLTag::TAG_DIV));<br>
   auto &DivBody = Out.back();<br>
   for (const auto &E : Enums) {<br>
@@ -362,7 +379,7 @@ genFunctionsBlock(const std::vector<Func<br>
<br>
   std::vector<std::unique_ptr<TagNode>> Out;<br>
   Out.emplace_back(std::make_unique<TagNode>(HTMLTag::TAG_H2, "Functions"));<br>
-  Out.back()->Attributes.try_emplace("id", "Functions");<br>
+  Out.back()->Attributes.emplace_back("id", "Functions");<br>
   Out.emplace_back(std::make_unique<TagNode>(HTMLTag::TAG_DIV));<br>
   auto &DivBody = Out.back();<br>
   for (const auto &F : Functions) {<br>
@@ -381,7 +398,7 @@ genRecordMembersBlock(const llvm::SmallV<br>
<br>
   std::vector<std::unique_ptr<TagNode>> Out;<br>
   Out.emplace_back(std::make_unique<TagNode>(HTMLTag::TAG_H2, "Members"));<br>
-  Out.back()->Attributes.try_emplace("id", "Members");<br>
+  Out.back()->Attributes.emplace_back("id", "Members");<br>
   Out.emplace_back(std::make_unique<TagNode>(HTMLTag::TAG_UL));<br>
   auto &ULBody = Out.back();<br>
   for (const auto &M : Members) {<br>
@@ -405,7 +422,7 @@ genReferencesBlock(const std::vector<Ref<br>
<br>
   std::vector<std::unique_ptr<TagNode>> Out;<br>
   Out.emplace_back(std::make_unique<TagNode>(HTMLTag::TAG_H2, Title));<br>
-  Out.back()->Attributes.try_emplace("id", Title);<br>
+  Out.back()->Attributes.emplace_back("id", Title);<br>
   Out.emplace_back(std::make_unique<TagNode>(HTMLTag::TAG_UL));<br>
   auto &ULBody = Out.back();<br>
   for (const auto &R : References) {<br>
@@ -431,23 +448,29 @@ writeFileDefinition(const Location &L,<br>
       std::make_unique<TagNode>(HTMLTag::TAG_A, std::to_string(L.LineNumber));<br>
   // The links to a specific line in the source code use the github /<br>
   // googlesource notation so it won't work for all hosting pages.<br>
-  LocNumberNode->Attributes.try_emplace(<br>
+  LocNumberNode->Attributes.emplace_back(<br>
       "href", (FileURL + "#" + std::to_string(L.LineNumber)).str());<br>
   Node->Children.emplace_back(std::move(LocNumberNode));<br>
   Node->Children.emplace_back(std::make_unique<TextNode>(" of file "));<br>
   auto LocFileNode = std::make_unique<TagNode>(<br>
       HTMLTag::TAG_A, llvm::sys::path::filename(FileURL));<br>
-  LocFileNode->Attributes.try_emplace("href", FileURL);<br>
+  LocFileNode->Attributes.emplace_back("href", FileURL);<br>
   Node->Children.emplace_back(std::move(LocFileNode));<br>
   return Node;<br>
 }<br>
<br>
 static std::vector<std::unique_ptr<TagNode>><br>
-genCommonFileNodes(StringRef Title, StringRef InfoPath,<br>
-                   const ClangDocContext &CDCtx) {<br>
+genHTML(const Index &Index, StringRef InfoPath, bool IsOutermostList);<br>
+<br>
+// Generates a list of child nodes for the HTML head tag<br>
+// It contains a meta node, link nodes to import CSS files, and script nodes to<br>
+// import JS files<br>
+static std::vector<std::unique_ptr<TagNode>><br>
+genFileHeadNodes(StringRef Title, StringRef InfoPath,<br>
+                 const ClangDocContext &CDCtx) {<br>
   std::vector<std::unique_ptr<TagNode>> Out;<br>
   auto MetaNode = std::make_unique<TagNode>(HTMLTag::TAG_META);<br>
-  MetaNode->Attributes.try_emplace("charset", "utf-8");<br>
+  MetaNode->Attributes.emplace_back("charset", "utf-8");<br>
   Out.emplace_back(std::move(MetaNode));<br>
   Out.emplace_back(std::make_unique<TagNode>(HTMLTag::TAG_TITLE, Title));<br>
   std::vector<std::unique_ptr<TagNode>> StylesheetsNodes =<br>
@@ -456,14 +479,87 @@ genCommonFileNodes(StringRef Title, Stri<br>
   std::vector<std::unique_ptr<TagNode>> JsNodes =<br>
       genJsScriptsHTML(InfoPath, CDCtx);<br>
   AppendVector(std::move(JsNodes), Out);<br>
-  // An empty <div> is generated but the index will be then rendered here<br>
-  auto IndexNode = std::make_unique<TagNode>(HTMLTag::TAG_DIV);<br>
-  IndexNode->Attributes.try_emplace("id", "index");<br>
-  IndexNode->Attributes.try_emplace("path", InfoPath);<br>
-  Out.emplace_back(std::move(IndexNode));<br>
   return Out;<br>
 }<br>
<br>
+// Generates a header HTML node that can be used for any file<br>
+// It contains the project name<br>
+static std::unique_ptr<TagNode> genFileHeaderNode(StringRef ProjectName) {<br>
+  auto HeaderNode = std::make_unique<TagNode>(HTMLTag::TAG_HEADER, ProjectName);<br>
+  HeaderNode->Attributes.emplace_back("id", "project-title");<br>
+  return HeaderNode;<br>
+}<br>
+<br>
+// Generates a main HTML node that has all the main content of an info file<br>
+// It contains both indexes and the info's documented information<br>
+// This function should only be used for the info files (not for the file that<br>
+// only has the general index)<br>
+static std::unique_ptr<TagNode> genInfoFileMainNode(<br>
+    StringRef InfoPath,<br>
+    std::vector<std::unique_ptr<TagNode>> &MainContentInnerNodes,<br>
+    const Index &InfoIndex) {<br>
+  auto MainNode = std::make_unique<TagNode>(HTMLTag::TAG_MAIN);<br>
+<br>
+  auto LeftSidebarNode = std::make_unique<TagNode>(HTMLTag::TAG_DIV);<br>
+  LeftSidebarNode->Attributes.emplace_back("id", "sidebar-left");<br>
+  LeftSidebarNode->Attributes.emplace_back("path", InfoPath);<br>
+  LeftSidebarNode->Attributes.emplace_back(<br>
+      "class", "col-xs-6 col-sm-3 col-md-2 sidebar sidebar-offcanvas-left");<br>
+<br>
+  auto MainContentNode = std::make_unique<TagNode>(HTMLTag::TAG_DIV);<br>
+  MainContentNode->Attributes.emplace_back("id", "main-content");<br>
+  MainContentNode->Attributes.emplace_back(<br>
+      "class", "col-xs-12 col-sm-9 col-md-8 main-content");<br>
+  AppendVector(std::move(MainContentInnerNodes), MainContentNode->Children);<br>
+<br>
+  auto RightSidebarNode = std::make_unique<TagNode>(HTMLTag::TAG_DIV);<br>
+  RightSidebarNode->Attributes.emplace_back("id", "sidebar-right");<br>
+  RightSidebarNode->Attributes.emplace_back(<br>
+      "class", "col-xs-6 col-sm-6 col-md-2 sidebar sidebar-offcanvas-right");<br>
+  std::vector<std::unique_ptr<TagNode>> InfoIndexHTML =<br>
+      genHTML(InfoIndex, InfoPath, true);<br>
+  AppendVector(std::move(InfoIndexHTML), RightSidebarNode->Children);<br>
+<br>
+  MainNode->Children.emplace_back(std::move(LeftSidebarNode));<br>
+  MainNode->Children.emplace_back(std::move(MainContentNode));<br>
+  MainNode->Children.emplace_back(std::move(RightSidebarNode));<br>
+<br>
+  return MainNode;<br>
+}<br>
+<br>
+// Generates a footer HTML node that can be used for any file<br>
+// It contains clang-doc's version<br>
+static std::unique_ptr<TagNode> genFileFooterNode() {<br>
+  auto FooterNode = std::make_unique<TagNode>(HTMLTag::TAG_FOOTER);<br>
+  auto SpanNode = std::make_unique<TagNode>(<br>
+      HTMLTag::TAG_SPAN, clang::getClangToolFullVersion("clang-doc"));<br>
+  SpanNode->Attributes.emplace_back("class", "no-break");<br>
+  FooterNode->Children.emplace_back(std::move(SpanNode));<br>
+  return FooterNode;<br>
+}<br>
+<br>
+// Generates a complete HTMLFile for an Info<br>
+static HTMLFile<br>
+genInfoFile(StringRef Title, StringRef InfoPath,<br>
+            std::vector<std::unique_ptr<TagNode>> &MainContentNodes,<br>
+            const Index &InfoIndex, const ClangDocContext &CDCtx) {<br>
+  HTMLFile F;<br>
+<br>
+  std::vector<std::unique_ptr<TagNode>> HeadNodes =<br>
+      genFileHeadNodes(Title, InfoPath, CDCtx);<br>
+  std::unique_ptr<TagNode> HeaderNode = genFileHeaderNode(CDCtx.ProjectName);<br>
+  std::unique_ptr<TagNode> MainNode =<br>
+      genInfoFileMainNode(InfoPath, MainContentNodes, InfoIndex);<br>
+  std::unique_ptr<TagNode> FooterNode = genFileFooterNode();<br>
+<br>
+  AppendVector(std::move(HeadNodes), F.Children);<br>
+  F.Children.emplace_back(std::move(HeaderNode));<br>
+  F.Children.emplace_back(std::move(MainNode));<br>
+  F.Children.emplace_back(std::move(FooterNode));<br>
+<br>
+  return F;<br>
+}<br>
+<br>
 template <typename T,<br>
           typename = std::enable_if<std::is_base_of<T, Info>::value>><br>
 static Index genInfoIndexItem(const std::vector<T> &Infos, StringRef Title) {<br>
@@ -474,8 +570,8 @@ static Index genInfoIndexItem(const std:<br>
   return Idx;<br>
 }<br>
<br>
-static std::vector<std::unique_ptr<TagNode>> genHTML(const Index &Index,<br>
-                                                     StringRef InfoPath) {<br>
+static std::vector<std::unique_ptr<TagNode>><br>
+genHTML(const Index &Index, StringRef InfoPath, bool IsOutermostList) {<br>
   std::vector<std::unique_ptr<TagNode>> Out;<br>
   if (!Index.Name.empty()) {<br>
     Out.emplace_back(std::make_unique<TagNode>(HTMLTag::TAG_SPAN));<br>
@@ -488,11 +584,13 @@ static std::vector<std::unique_ptr<TagNo<br>
   }<br>
   if (Index.Children.empty())<br>
     return Out;<br>
-  Out.emplace_back(std::make_unique<TagNode>(HTMLTag::TAG_UL));<br>
+  // Only the outermost list should use ol, the others should use ul<br>
+  HTMLTag ListHTMLTag = IsOutermostList ? HTMLTag::TAG_OL : HTMLTag::TAG_UL;<br>
+  Out.emplace_back(std::make_unique<TagNode>(ListHTMLTag));<br>
   const auto &UlBody = Out.back();<br>
   for (const auto &C : Index.Children) {<br>
     auto LiBody = std::make_unique<TagNode>(HTMLTag::TAG_LI);<br>
-    std::vector<std::unique_ptr<TagNode>> Nodes = genHTML(C, InfoPath);<br>
+    std::vector<std::unique_ptr<TagNode>> Nodes = genHTML(C, InfoPath, false);<br>
     AppendVector(std::move(Nodes), LiBody->Children);<br>
     UlBody->Children.emplace_back(std::move(LiBody));<br>
   }<br>
@@ -546,8 +644,8 @@ genHTML(const EnumInfo &I, const ClangDo<br>
<br>
   Out.emplace_back(<br>
       std::make_unique<TagNode>(HTMLTag::TAG_H3, EnumType + I.Name));<br>
-  Out.back()->Attributes.try_emplace("id",<br>
-                                     llvm::toHex(llvm::toStringRef(I.USR)));<br>
+  Out.back()->Attributes.emplace_back("id",<br>
+                                      llvm::toHex(llvm::toStringRef(I.USR)));<br>
<br>
   std::unique_ptr<TagNode> Node = genEnumMembersBlock(I.Members);<br>
   if (Node)<br>
@@ -575,8 +673,8 @@ genHTML(const FunctionInfo &I, const Cla<br>
   Out.emplace_back(std::make_unique<TagNode>(HTMLTag::TAG_H3, I.Name));<br>
   // USR is used as id for functions instead of name to disambiguate function<br>
   // overloads.<br>
-  Out.back()->Attributes.try_emplace("id",<br>
-                                     llvm::toHex(llvm::toStringRef(I.USR)));<br>
+  Out.back()->Attributes.emplace_back("id",<br>
+                                      llvm::toHex(llvm::toStringRef(I.USR)));<br>
<br>
   Out.emplace_back(std::make_unique<TagNode>(HTMLTag::TAG_P));<br>
   auto &FunctionHeader = Out.back();<br>
@@ -738,48 +836,32 @@ const char *HTMLGenerator::Format = "htm<br>
<br>
 llvm::Error HTMLGenerator::generateDocForInfo(Info *I, llvm::raw_ostream &OS,<br>
                                               const ClangDocContext &CDCtx) {<br>
-  HTMLFile F;<br>
   std::string InfoTitle;<br>
-  auto MainContentNode = std::make_unique<TagNode>(HTMLTag::TAG_DIV);<br>
+  std::vector<std::unique_ptr<TagNode>> MainContentNodes;<br>
   Index InfoIndex;<br>
   switch (I->IT) {<br>
-  case InfoType::IT_namespace: {<br>
-    std::vector<std::unique_ptr<TagNode>> Nodes =<br>
-        genHTML(*static_cast<clang::doc::NamespaceInfo *>(I), InfoIndex, CDCtx,<br>
-                InfoTitle);<br>
-    AppendVector(std::move(Nodes), MainContentNode->Children);<br>
+  case InfoType::IT_namespace:<br>
+    MainContentNodes = genHTML(*static_cast<clang::doc::NamespaceInfo *>(I),<br>
+                               InfoIndex, CDCtx, InfoTitle);<br>
     break;<br>
-  }<br>
-  case InfoType::IT_record: {<br>
-    std::vector<std::unique_ptr<TagNode>> Nodes = genHTML(<br>
-        *static_cast<clang::doc::RecordInfo *>(I), InfoIndex, CDCtx, InfoTitle);<br>
-    AppendVector(std::move(Nodes), MainContentNode->Children);<br>
+  case InfoType::IT_record:<br>
+    MainContentNodes = genHTML(*static_cast<clang::doc::RecordInfo *>(I),<br>
+                               InfoIndex, CDCtx, InfoTitle);<br>
     break;<br>
-  }<br>
-  case InfoType::IT_enum: {<br>
-    std::vector<std::unique_ptr<TagNode>> Nodes =<br>
-        genHTML(*static_cast<clang::doc::EnumInfo *>(I), CDCtx);<br>
-    AppendVector(std::move(Nodes), MainContentNode->Children);<br>
+  case InfoType::IT_enum:<br>
+    MainContentNodes = genHTML(*static_cast<clang::doc::EnumInfo *>(I), CDCtx);<br>
     break;<br>
-  }<br>
-  case InfoType::IT_function: {<br>
-    std::vector<std::unique_ptr<TagNode>> Nodes =<br>
+  case InfoType::IT_function:<br>
+    MainContentNodes =<br>
         genHTML(*static_cast<clang::doc::FunctionInfo *>(I), CDCtx, "");<br>
-    AppendVector(std::move(Nodes), MainContentNode->Children);<br>
     break;<br>
-  }<br>
   case InfoType::IT_default:<br>
     return llvm::make_error<llvm::StringError>("Unexpected info type.\n",<br>
                                                llvm::inconvertibleErrorCode());<br>
   }<br>
<br>
-  std::vector<std::unique_ptr<TagNode>> BasicNodes =<br>
-      genCommonFileNodes(InfoTitle, I->Path, CDCtx);<br>
-  AppendVector(std::move(BasicNodes), F.Children);<br>
-  std::vector<std::unique_ptr<TagNode>> InfoIndexHTML =<br>
-      genHTML(InfoIndex, I->Path);<br>
-  AppendVector(std::move(InfoIndexHTML), F.Children);<br>
-  F.Children.emplace_back(std::move(MainContentNode));<br>
+  HTMLFile F =<br>
+      genInfoFile(InfoTitle, I->Path, MainContentNodes, InfoIndex, CDCtx);<br>
   F.Render(OS);<br>
<br>
   return llvm::Error::success();<br>
@@ -832,6 +914,24 @@ static bool SerializeIndex(ClangDocConte<br>
   return true;<br>
 }<br>
<br>
+// Generates a main HTML node that has the main content of the file that shows<br>
+// only the general index<br>
+// It contains the general index with links to all the generated files<br>
+static std::unique_ptr<TagNode> genIndexFileMainNode() {<br>
+  auto MainNode = std::make_unique<TagNode>(HTMLTag::TAG_MAIN);<br>
+<br>
+  auto LeftSidebarNode = std::make_unique<TagNode>(HTMLTag::TAG_DIV);<br>
+  LeftSidebarNode->Attributes.emplace_back("id", "sidebar-left");<br>
+  LeftSidebarNode->Attributes.emplace_back("path", "");<br>
+  LeftSidebarNode->Attributes.emplace_back(<br>
+      "class", "col-xs-6 col-sm-3 col-md-2 sidebar sidebar-offcanvas-left");<br>
+  LeftSidebarNode->Attributes.emplace_back("style", "flex: 0 100%;");<br>
+<br>
+  MainNode->Children.emplace_back(std::move(LeftSidebarNode));<br>
+<br>
+  return MainNode;<br>
+}<br>
+<br>
 static bool GenIndex(const ClangDocContext &CDCtx) {<br>
   std::error_code FileErr, OK;<br>
   llvm::SmallString<128> IndexPath;<br>
@@ -842,11 +942,22 @@ static bool GenIndex(const ClangDocConte<br>
     llvm::errs() << "Error creating main index: " << FileErr.message() << "\n";<br>
     return false;<br>
   }<br>
+<br>
   HTMLFile F;<br>
-  std::vector<std::unique_ptr<TagNode>> BasicNodes =<br>
-      genCommonFileNodes("Index", "", CDCtx);<br>
-  AppendVector(std::move(BasicNodes), F.Children);<br>
+<br>
+  std::vector<std::unique_ptr<TagNode>> HeadNodes =<br>
+      genFileHeadNodes("Index", "", CDCtx);<br>
+  std::unique_ptr<TagNode> HeaderNode = genFileHeaderNode(CDCtx.ProjectName);<br>
+  std::unique_ptr<TagNode> MainNode = genIndexFileMainNode();<br>
+  std::unique_ptr<TagNode> FooterNode = genFileFooterNode();<br>
+<br>
+  AppendVector(std::move(HeadNodes), F.Children);<br>
+  F.Children.emplace_back(std::move(HeaderNode));<br>
+  F.Children.emplace_back(std::move(MainNode));<br>
+  F.Children.emplace_back(std::move(FooterNode));<br>
+<br>
   F.Render(IndexOS);<br>
+<br>
   return true;<br>
 }<br>
<br>
<br>
Modified: clang-tools-extra/trunk/clang-doc/Representation.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-doc/Representation.cpp?rev=369139&r1=369138&r2=369139&view=diff" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-doc/Representation.cpp?rev=369139&r1=369138&r2=369139&view=diff</a><br>
==============================================================================<br>
--- clang-tools-extra/trunk/clang-doc/Representation.cpp (original)<br>
+++ clang-tools-extra/trunk/clang-doc/Representation.cpp Fri Aug 16 11:38:11 2019<br>
@@ -274,12 +274,14 @@ void Index::sort() {<br>
 }<br>
<br>
 ClangDocContext::ClangDocContext(tooling::ExecutionContext *ECtx,<br>
-                                 bool PublicOnly, StringRef OutDirectory,<br>
-                                 StringRef SourceRoot, StringRef RepositoryUrl,<br>
+                                 StringRef ProjectName, bool PublicOnly,<br>
+                                 StringRef OutDirectory, StringRef SourceRoot,<br>
+                                 StringRef RepositoryUrl,<br>
                                  std::vector<std::string> UserStylesheets,<br>
                                  std::vector<std::string> JsScripts)<br>
-    : ECtx(ECtx), PublicOnly(PublicOnly), OutDirectory(OutDirectory),<br>
-      UserStylesheets(UserStylesheets), JsScripts(JsScripts) {<br>
+    : ECtx(ECtx), ProjectName(ProjectName), PublicOnly(PublicOnly),<br>
+      OutDirectory(OutDirectory), UserStylesheets(UserStylesheets),<br>
+      JsScripts(JsScripts) {<br>
   llvm::SmallString<128> SourceRootDir(SourceRoot);<br>
   if (SourceRoot.empty())<br>
     // If no SourceRoot was provided the current path is used as the default<br>
<br>
Modified: clang-tools-extra/trunk/clang-doc/Representation.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-doc/Representation.h?rev=369139&r1=369138&r2=369139&view=diff" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-doc/Representation.h?rev=369139&r1=369138&r2=369139&view=diff</a><br>
==============================================================================<br>
--- clang-tools-extra/trunk/clang-doc/Representation.h (original)<br>
+++ clang-tools-extra/trunk/clang-doc/Representation.h Fri Aug 16 11:38:11 2019<br>
@@ -413,12 +413,13 @@ mergeInfos(std::vector<std::unique_ptr<I<br>
<br>
 struct ClangDocContext {<br>
   ClangDocContext() = default;<br>
-  ClangDocContext(tooling::ExecutionContext *ECtx, bool PublicOnly,<br>
-                  StringRef OutDirectory, StringRef SourceRoot,<br>
+  ClangDocContext(tooling::ExecutionContext *ECtx, StringRef ProjectName,<br>
+                  bool PublicOnly, StringRef OutDirectory, StringRef SourceRoot,<br>
                   StringRef RepositoryUrl,<br>
                   std::vector<std::string> UserStylesheets,<br>
                   std::vector<std::string> JsScripts);<br>
   tooling::ExecutionContext *ECtx;<br>
+  std::string ProjectName; // Name of project clang-doc is documenting.<br>
   bool PublicOnly; // Indicates if only public declarations are documented.<br>
   std::string OutDirectory; // Directory for outputting generated files.<br>
   std::string SourceRoot;   // Directory where processed files are stored. Links<br>
<br>
Modified: clang-tools-extra/trunk/clang-doc/assets/clang-doc-default-stylesheet.css<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-doc/assets/clang-doc-default-stylesheet.css?rev=369139&r1=369138&r2=369139&view=diff" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-doc/assets/clang-doc-default-stylesheet.css?rev=369139&r1=369138&r2=369139&view=diff</a><br>
==============================================================================<br>
--- clang-tools-extra/trunk/clang-doc/assets/clang-doc-default-stylesheet.css (original)<br>
+++ clang-tools-extra/trunk/clang-doc/assets/clang-doc-default-stylesheet.css Fri Aug 16 11:38:11 2019<br>
@@ -1,205 +1,969 @@<br>
-body,div {<br>
+.dark-primary-color    { background: #1976D2; }<br>
+.default-primary-color { background: #2196F3; }<br>
+.light-primary-color   { background: #BBDEFB; }<br>
+.text-primary-color    { color: #FFFFFF; }<br>
+.accent-color          { background: #00BCD4; }<br>
+.primary-text-color    { color: #212121; }<br>
+.secondary-text-color  { color: #727272; }<br>
+.divider-color         { border-color: #B6B6B6; }<br>
+<br>
+/* for layout */<br>
+html,<br>
+body {<br>
   margin: 0;<br>
   padding: 0;<br>
+  height: 100%;<br>
+  width: 100%;<br>
+  overflow: hidden;<br>
+  box-sizing: border-box;<br>
 }<br>
<br>
-body[no-overflow] {<br>
-  overflow: hidden;<br>
+*, *:before, *:after {<br>
+  box-sizing: inherit;<br>
 }<br>
<br>
-li>p:first-child {<br>
-  margin-top: 0;<br>
+body {<br>
+  display: flex;<br>
+  flex-direction: column;<br>
+  min-height: 100vh;<br>
+}<br>
+<br>
+header {<br>
+  flex: 0 0 50px;<br>
+  display: flex;<br>
+  flex-direction: row;<br>
+  align-items: center;<br>
+  padding-left: 30px;<br>
 }<br>
<br>
-li>p:last-child {<br>
-  margin-bottom: 0;<br>
+header ol {<br>
+  list-style: none;<br>
+  margin: 0;<br>
+  padding: 0;<br>
 }<br>
<br>
-html {<br>
-  -webkit-box-sizing: border-box;<br>
-  box-sizing: border-box;<br>
+header ol li {<br>
+  display: inline;<br>
 }<br>
<br>
-*,*::before,*::after {<br>
-  -webkit-box-sizing: inherit;<br>
-  box-sizing: inherit;<br>
+header form {<br>
+  display: flex;<br>
+  flex: 1;<br>
+  justify-content: flex-end;<br>
+  padding-right: 30px;<br>
 }<br>
<br>
-body,html {<br>
-  color: #202124;<br>
-  font: 400 16px/24px Roboto,sans-serif;<br>
-  -moz-osx-font-smoothing: grayscale;<br>
-  -webkit-font-smoothing: antialiased;<br>
-  height: 100%;<br>
-  margin: 36px;<br>
-  -webkit-text-size-adjust: 100%;<br>
-  -moz-text-size-adjust: 100%;<br>
-  -ms-text-size-adjust: 100%;<br>
-  text-size-adjust: 100%;<br>
+header#header-search-sidebar {<br>
+  height: 50px;<br>
+  margin-bottom: 25px;<br>
 }<br>
<br>
-body[devsite-framebox] {<br>
-  overflow: hidden;<br>
+footer {<br>
+  flex: 0 0 16px;<br>
+  text-align: center;<br>
+  padding: 16px 20px;<br>
+}<br>
+<br>
+main {<br>
+  flex: 1;<br>
+  display: flex;<br>
+  flex-direction: row;<br>
   padding: 20px;<br>
+  min-height: 0;<br>
 }<br>
<br>
-body[sitemask--active] {<br>
-  overflow: hidden;<br>
+.sidebar-offcanvas-left {<br>
+  flex: 0 1 230px;<br>
+  overflow-y: scroll;<br>
+  padding: 20px 0 15px 30px;<br>
+  margin: 5px 20px 0 0;<br>
+  visibility: visible; /* shown by Javascript after scroll position restore */<br>
 }<br>
<br>
-p {<br>
-  margin: 16px 0;<br>
+::-webkit-scrollbar-button{ display: none; height: 13px; border-radius: 0px; background-color: #AAA; }<br>
+::-webkit-scrollbar-button:hover{ background-color: #AAA; }<br>
+::-webkit-scrollbar-thumb{ background-color: #CCC; }<br>
+::-webkit-scrollbar-thumb:hover{ background-color: #CCC; }<br>
+::-webkit-scrollbar{ width: 4px; }<br>
+/* ::-webkit-overflow-scrolling: touch; */<br>
+<br>
+.main-content::-webkit-scrollbar{ width: 8px; }<br>
+<br>
+.main-content {<br>
+  flex: 1;<br>
+  overflow-y: scroll;<br>
+  padding: 10px 20px 0 20px;<br>
+  visibility: visible; /* shown by Javascript after scroll position restore */<br>
+}<br>
+<br>
+.sidebar-offcanvas-right {<br>
+  flex: 0 1 12em;<br>
+  overflow-y: scroll;<br>
+  padding: 20px 15px 15px 15px;<br>
+  margin-top: 5px;<br>
+  margin-right: 20px;<br>
+  visibility: visible; /* shown by Javascript after scroll position restore */<br>
+}<br>
+/* end for layout */<br>
+<br>
+body {<br>
+  -webkit-text-size-adjust: 100%;<br>
+  overflow-x: hidden;<br>
+  font-family: Roboto, sans-serif;<br>
+  font-size: 16px;<br>
+  line-height: 1.42857143;<br>
+  color: #111111;<br>
+  background-color: #fff;<br>
+}<br>
+<br>
+/* some of this is to reset bootstrap */<br>
+nav.navbar {<br>
+  background-color: inherit;<br>
+  min-height: 50px;<br>
+  border: 0;<br>
+}<br>
+<br>
+@media (max-width: 768px) {<br>
+  .hidden-xs {<br>
+    display: none !important;<br>
+  }<br>
+}<br>
+<br>
+@media (min-width: 769px) {<br>
+  .hidden-l {<br>
+    display: none !important;<br>
+  }<br>
+}<br>
+<br>
+nav.navbar .row {<br>
+  padding-top: 8px;<br>
+}<br>
+<br>
+nav .container {<br>
+  white-space: nowrap;<br>
+}<br>
+<br>
+header {<br>
+  background-color: #eeeeee;<br>
+  box-shadow: 0 3px 5px rgba(0,0,0,0.1);<br>
+}<br>
+<br>
+header#project-title {<br>
+  background-color: #fff;<br>
+  font-size: 200%;<br>
+  padding-top: 0.25em;<br>
+  padding-bottom: 0.25em;<br>
+  /* padding: 0em; */<br>
+}<br>
+<br>
+header.header-fixed nav.navbar-fixed-top {<br>
+  box-shadow: 0 3px 5px rgba(0,0,0,0.1);<br>
+}<br>
+<br>
+header.container-fluid {<br>
   padding: 0;<br>
 }<br>
<br>
-:link,:visited {<br>
-  color: #039be5;<br>
-  outline: 0;<br>
+header .masthead {<br>
+  padding-top: 64px;<br>
+}<br>
+<br>
+header .contents {<br>
+  padding: 0;<br>
+}<br>
+<br>
+@media screen and (max-width:768px) {<br>
+  header .contents {<br>
+    padding-left: 15px;<br>
+    padding-right: 15px;<br>
+  }<br>
+}<br>
+<br>
+a {<br>
   text-decoration: none;<br>
 }<br>
<br>
-ul {<br>
+.body {<br>
+  margin-top: 90px;<br>
+}<br>
+<br>
+section {<br>
+  margin-bottom: 36px;<br>
+}<br>
+<br>
+dl {<br>
   margin: 0;<br>
-  padding-left: 40px;<br>
 }<br>
<br>
-ul {<br>
-  list-style: disc outside;<br>
+h1,<br>
+h2,<br>
+h3,<br>
+h4,<br>
+h5,<br>
+h6 {<br>
+  font-family: Roboto, sans-serif;<br>
+  font-weight: 400;<br>
+  margin-top: 1.5em;<br>
+  color: #111111;<br>
 }<br>
<br>
-li,li p {<br>
-  margin: 12px 0;<br>
-  padding: 0;<br>
+h1.title {<br>
+  overflow: hidden;<br>
+  text-overflow: ellipsis;<br>
 }<br>
<br>
-*[visually-hidden] {<br>
-  opacity: 0 !important;<br>
-  pointer-events: none !important;<br>
-  visibility: hidden !important;<br>
+h1 {<br>
+  font-size: 37px;<br>
+  margin-top: 0;<br>
+  margin-bottom: 0.67em;<br>
 }<br>
<br>
-*[hidden] {<br>
-  display: none !important;<br>
+h2 {<br>
+  font-size: 28px;<br>
 }<br>
<br>
-[render-hidden] {<br>
-  display: inline !important;<br>
-  position: absolute !important;<br>
-  visibility: hidden !important;<br>
+h5 {<br>
+  font-size: 16px;<br>
 }<br>
<br>
-*[no-scroll] {<br>
-  overflow: hidden;<br>
+.subtitle {<br>
+  font-size: 17px;<br>
+  min-height: 1.4em;<br>
+}<br>
+<br>
+.title-description .subtitle {<br>
+  white-space: nowrap;<br>
+  overflow-x: hidden;<br>
+  text-overflow: ellipsis;<br>
+}<br>
+<br>
+p {<br>
+  margin-bottom: 1em;<br>
+  margin-top: 0;<br>
+}<br>
+<br>
+a {<br>
+  color: #0175C2;<br>
+}<br>
+<br>
+a:hover {<br>
+  color: #13B9FD;<br>
+}<br>
+<br>
+pre.prettyprint {<br>
+  font-family: 'Source Code Pro', Menlo, monospace;<br>
+  color: black;<br>
+  border-radius: 0;<br>
+  font-size: 15px;<br>
+  word-wrap: normal;<br>
+  line-height: 1.4;<br>
+  border: 0;<br>
+  margin: 16px 0 16px 0;<br>
+  padding: 8px;<br>
+}<br>
+<br>
+pre code {<br>
+  white-space: pre;<br>
+  word-wrap: initial;<br>
+  font-size: 100%<br>
+}<br>
+<br>
+.fixed {<br>
+  white-space: pre;<br>
+}<br>
+<br>
+pre {<br>
+  border: 1px solid #ddd;<br>
+  background-color: #eee;<br>
+  font-size: 14px;<br>
+}<br>
+<br>
+code {<br>
+  font-family: 'Source Code Pro', Menlo, monospace;<br>
+  /* overriding bootstrap */<br>
+  color: inherit;<br>
+  padding: 0.2em 0.4em;<br>
+  font-size: 85%;<br>
+  background-color: rgba(27,31,35,0.05);<br>
+  border-radius: 3px;<br>
 }<br>
<br>
-@supports (display: flex) {<br>
-  body[ready] .devsite-wrapper {<br>
-    display: -webkit-box;<br>
-    display: -ms-flexbox;<br>
-    display: flex;<br>
-    -webkit-box-orient: vertical;<br>
-    -webkit-box-direction: normal;<br>
-    -ms-flex-direction: column;<br>
-    flex-direction: column;<br>
+@media(max-width: 768px) {<br>
+  nav .container {<br>
+    width: 100%<br>
+  }<br>
+<br>
+  h1 {<br>
+    font-size: 24px;<br>
+  }<br>
+<br>
+  pre {<br>
+    margin: 16px 0;<br>
   }<br>
 }<br>
<br>
-@media screen and (max-width: 840px) {<br>
-  body[devsite-book-nav--open] {<br>
-    overflow: hidden;<br>
+@media (min-width: 768px) {<br>
+  ul.subnav li {<br>
+    font-size: 17px;<br>
   }<br>
 }<br>
<br>
-h1,h2,h3,h4,h5,h6 {<br>
-  overflow: hidden;<br>
-  padding: 0;<br>
+header h1 {<br>
+  font-weight: 400;<br>
+  margin-bottom: 16px;<br>
+}<br>
+<br>
+header a,<br>
+header p,<br>
+header li {<br>
+  color: #111111;<br>
+}<br>
+<br>
+header a:hover {<br>
+  color: #0175C2;<br>
+}<br>
+<br>
+header h1 .kind {<br>
+  color: #555;<br>
+}<br>
+<br>
+dt {<br>
+  font-weight: normal;<br>
+}<br>
+<br>
+dd {<br>
+  color: #212121;<br>
+  margin-bottom: 1em;<br>
+  margin-left: 0;<br>
+}<br>
+<br>
+dd.callable, dd.constant, dd.property {<br>
+  margin-bottom: 24px;<br>
+}<br>
+<br>
+dd p {<br>
+  overflow-x: hidden;<br>
   text-overflow: ellipsis;<br>
+  margin-bottom: 0;<br>
 }<br>
<br>
-h1 {<br>
-  color: #80868b;<br>
-  font: 300 34px/40px Roboto,sans-serif;<br>
-  letter-spacing: -0.01em;<br>
-  margin: 40px 0 20px;<br>
+/* indents wrapped lines */<br>
+section.summary dt {<br>
+  margin-left: 24px;<br>
+  text-indent: -24px;<br>
 }<br>
<br>
-[layout=docs] h2 {<br>
-  border-bottom: 1px solid #e8eaed;<br>
-  padding-bottom: 3px;<br>
+.dl-horizontal dd {<br>
+  margin-left: initial;<br>
 }<br>
<br>
-h2 {<br>
-  font: 300 24px/32px Roboto,sans-serif;<br>
-  letter-spacing: -0.01em;<br>
-  margin: 40px 0 20px;<br>
+dl.dl-horizontal dt {<br>
+  font-style: normal;<br>
+  text-align: left;<br>
+  color: #727272;<br>
+  margin-right: 20px;<br>
+  width: initial;<br>
 }<br>
<br>
-h3 {<br>
-  font: 400 20px/32px Roboto,sans-serif;<br>
-  margin: 32px 0 16px;<br>
+dt .name {<br>
+  font-weight: 500;<br>
 }<br>
<br>
-h4,h5,h6 {<br>
-  margin: 32px 0 16px;<br>
+dl dt.callable .name {<br>
+  float: none;<br>
+  width: auto;<br>
 }<br>
<br>
-h4 {<br>
-  font: 500 16px/24px Roboto,sans-serif;<br>
+.parameter {<br>
+  white-space: nowrap;<br>
 }<br>
<br>
-h5 {<br>
-  font: 700 14px/24px Roboto,sans-serif;<br>
+.type-parameter {<br>
+  white-space: nowrap;<br>
 }<br>
<br>
-h6 {<br>
-  font: 500 14px/24px Roboto,sans-serif;<br>
+.multi-line-signature .type-parameter .parameter {<br>
+  margin-left: 0px;<br>
+  display: unset;<br>
 }<br>
<br>
-h1+h1,h1+h2,h1+h3,h1+h4,h1+h5,h1+h6,h2+h1,h2+h2,h2+h3,h2+h4,h2+h5,h2+h6,h3+h1,h3+h2,h3+h3,h3+h4,h3+h5,h3+h6,h4+h1,h4+h2,h4+h3,h4+h4,h4+h5,h4+h6,h5+h1,h5+h2,h5+h3,h5+h4,h5+h5,h5+h6,h6+h1,h6+h2,h6+h3,h6+h4,h6+h5,h6+h6 {<br>
-  margin-top: 0;<br>
+.signature {<br>
+  color: #727272;<br>
 }<br>
<br>
-@media screen and (max-width: 600px) {<br>
-  h1 {<br>
-    font: 300 24px/32px Roboto,sans-serif;<br>
+.signature a {<br>
+  /* 50% mix of default-primary-color and primary-text-color. */<br>
+  color: #4674a2;<br>
+}<br>
+<br>
+.optional {<br>
+  font-style: italic;<br>
+}<br>
+<br>
+.undocumented {<br>
+  font-style: italic;<br>
+}<br>
+<br>
+.is-const {<br>
+  font-style: italic;<br>
+}<br>
+<br>
+.deprecated {<br>
+  text-decoration: line-through;<br>
+}<br>
+<br>
+.category.linked {<br>
+  font-weight: bold;<br>
+  opacity: 1;<br>
+}<br>
+<br>
+/* Colors for category based on categoryOrder in dartdoc_options.config. */<br>
+.category.cp-0 {<br>
+  background-color: #54b7c4<br>
+}<br>
+<br>
+.category.cp-1 {<br>
+  background-color: #54c47f<br>
+}<br>
+<br>
+.category.cp-2 {<br>
+  background-color: #c4c254<br>
+}<br>
+<br>
+.category.cp-3 {<br>
+  background-color: #c49f54<br>
+}<br>
+<br>
+.category.cp-4 {<br>
+  background-color: #c45465<br>
+}<br>
+<br>
+.category.cp-5 {<br>
+  background-color: #c454c4<br>
+}<br>
+<br>
+.category a {<br>
+  color: white;<br>
+}<br>
+<br>
+.category {<br>
+  padding: 2px 4px;<br>
+  font-size: 12px;<br>
+  border-radius: 4px;<br>
+  background-color: #999;<br>
+  text-transform: uppercase;<br>
+  color: white;<br>
+  opacity: .5;<br>
+}<br>
+<br>
+h1 .category {<br>
+  vertical-align: middle;<br>
+}<br>
+<br>
+.source-link {<br>
+  padding: 18px 4px;<br>
+  vertical-align: middle;<br>
+}<br>
+<br>
+.source-link .material-icons {<br>
+  font-size: 18px;<br>
+}<br>
+<br>
+@media (max-width: 768px) {<br>
+  .source-link {<br>
+    padding: 7px 2px;<br>
+    font-size: 10px;<br>
   }<br>
 }<br>
<br>
-[scrollbars]::-webkit-scrollbar {<br>
-  height: 8px;<br>
-  width: 8px;<br>
+#external-links {<br>
+  float: right;<br>
 }<br>
<br>
-[scrollbars]::-webkit-scrollbar-thumb {<br>
-  background: rgba(128,134,139,.26);<br>
-  border-radius: 8px;<br>
+.btn-group {<br>
+  position: relative;<br>
+  display: inline-flex;<br>
+  vertical-align: middle;<br>
 }<br>
<br>
-[no-horizontal-scrollbars]::-webkit-scrollbar {<br>
-  height: 0;<br>
-  width: 0;<br>
+p.firstline {<br>
+  font-weight: bold;<br>
 }<br>
<br>
-[scrollbars]::-webkit-scrollbar-corner {<br>
-  background: 0;<br>
+footer {<br>
+  color: #fff;<br>
+  background-color: #111111;<br>
+  width: 100%;<br>
 }<br>
<br>
-[background] h2 {<br>
+footer p {<br>
+  margin: 0;<br>
+}<br>
+<br>
+footer .no-break {<br>
+  white-space: nowrap;<br>
+}<br>
+<br>
+footer .container,<br>
+footer .container-fluid {<br>
+  padding-left: 0;<br>
+  padding-right: 0;<br>
+}<br>
+<br>
+footer a, footer a:hover {<br>
   color: #fff;<br>
 }<br>
<br>
-@media print {<br>
-  body,  html,  :link,  :visited,  h1,  h2,  h3,  h4,  h5,  h6 {<br>
-    color: #000 !important;<br>
-    padding-left: 0 !important;<br>
-    padding-right: 0 !important;<br>
+.markdown.desc {<br>
+  max-width: 700px;<br>
+}<br>
+<br>
+.markdown h1 {<br>
+  font-size: 24px;<br>
+  margin-bottom: 8px;<br>
+}<br>
+<br>
+.markdown h2 {<br>
+  font-size: 20px;<br>
+  margin-top: 24px;<br>
+  margin-bottom: 8px;<br>
+}<br>
+<br>
+.markdown h3 {<br>
+  font-size: 18px;<br>
+  margin-bottom: 8px;<br>
+}<br>
+<br>
+.markdown h4 {<br>
+  font-size: 16px;<br>
+  margin-bottom: 0;<br>
+}<br>
+<br>
+.markdown li p {<br>
+  margin: 0;<br>
+}<br>
+<br>
+.gt-separated {<br>
+  list-style: none;<br>
+  padding: 0;<br>
+  margin: 0;<br>
+}<br>
+<br>
+.gt-separated li {<br>
+  display: inline-block;<br>
+}<br>
+<br>
+.gt-separated li:before {<br>
+  background-image: url("data:image/svg+xml;utf8,<svg xmlns='<a href="http://www.w3.org/2000/svg" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">http://www.w3.org/2000/svg</a>' width='16' height='16' viewBox='0 0 16 16'><path fill='%23DDDDDD' d='M6.7,4L5.7,4.9L8.8,8l-3.1,3.1L6.7,12l4-4L6.7,4z'/></svg>");<br>
+  background-position: center;<br>
+  content: "\00a0";<br>
+  margin: 0 6px 0 4px;<br>
+  padding: 0 3px 0 0;<br>
+}<br>
+<br>
+.gt-separated.dark li:before {<br>
+  background-image: url("data:image/svg+xml;utf8,<svg xmlns='<a href="http://www.w3.org/2000/svg" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">http://www.w3.org/2000/svg</a>' width='16' height='16' viewBox='0 0 16 16'><path fill='%23727272' d='M6.7,4L5.7,4.9L8.8,8l-3.1,3.1L6.7,12l4-4L6.7,4z'/></svg>");<br>
+}<br>
+<br>
+.gt-separated li:first-child:before {<br>
+  background-image: none;<br>
+  content: "";<br>
+  margin: 0;<br>
+}<br>
+<br>
+/* The slug line under a declaration for things like "const", "read-only", etc. */<br>
+.features {<br>
+  font-style: italic;<br>
+  color: #727272;<br>
+}<br>
+<br>
+.multi-line-signature {<br>
+  font-size: 17px;<br>
+  color: #727272;<br>
+}<br>
+<br>
+.multi-line-signature .parameter {<br>
+  margin-left: 24px;<br>
+  display: block;<br>
+}<br>
+<br>
+.breadcrumbs {<br>
+  padding: 0;<br>
+  margin: 8px 0 8px 0;<br>
+  white-space: nowrap;<br>
+  line-height: 1;<br>
+}<br>
+<br>
+@media screen and (min-width: 768px) {<br>
+  nav ol.breadcrumbs {<br>
+    float: left;<br>
   }<br>
+}<br>
<br>
-  :link,  :visited {<br>
-    text-decoration: underline;<br>
+@media screen and (max-width: 768px) {<br>
+  .breadcrumbs {<br>
+    margin: 0 0 24px 0;<br>
+    overflow-x: hidden;<br>
   }<br>
 }<br>
<br>
-@page {<br>
-  margin: .75in;<br>
+.self-crumb {<br>
+  color: #555;<br>
+}<br>
+<br>
+.self-name {<br>
+  color: #555;<br>
+  display: none;<br>
 }<br>
+<br>
+.annotation-list {<br>
+  list-style: none;<br>
+  padding: 0;<br>
+  display: inline;<br>
+}<br>
+<br>
+.comma-separated {<br>
+  list-style: none;<br>
+  padding: 0;<br>
+  display: inline;<br>
+}<br>
+<br>
+.comma-separated li {<br>
+  display: inline;<br>
+}<br>
+<br>
+.comma-separated li:after {<br>
+  content: ", ";<br>
+}<br>
+<br>
+.comma-separated li:last-child:after {<br>
+  content: "";<br>
+}<br>
+<br>
+.end-with-period li:last-child:after {<br>
+  content: ".";<br>
+}<br>
+<br>
+.container > section:first-child {<br>
+  border: 0;<br>
+}<br>
+<br>
+.constructor-modifier {<br>
+  font-style: italic;<br>
+}<br>
+<br>
+section.multi-line-signature div.parameters {<br>
+  margin-left: 24px;<br>
+}<br>
+<br>
+/* subnav styles */<br>
+<br>
+ul.subnav {<br>
+  overflow: auto;<br>
+  white-space: nowrap;<br>
+  padding-left: 0;<br>
+  min-height: 25px;<br>
+}<br>
+<br>
+ul.subnav::-webkit-scrollbar {<br>
+  display: none;<br>
+}<br>
+<br>
+ul.subnav li {<br>
+  display: inline-block;<br>
+  text-transform: uppercase;<br>
+}<br>
+<br>
+ul.subnav li a {<br>
+  color: #111;<br>
+}<br>
+<br>
+ul.subnav li {<br>
+  margin-right: 24px;<br>
+}<br>
+<br>
+ul.subnav li:last-of-type {<br>
+  margin-right: 0;<br>
+}<br>
+<br>
+@media(max-width: 768px) {<br>
+  ul.subnav li {<br>
+    margin-right: 16px;<br>
+  }<br>
+}<br>
+<br>
+/* sidebar styles */<br>
+<br>
+.sidebar ol {<br>
+  list-style: none;<br>
+  line-height: 22px;<br>
+  margin-top: 0;<br>
+  margin-bottom: 0;<br>
+  padding: 0 0 15px 0;<br>
+}<br>
+<br>
+.sidebar h5 a,<br>
+.sidebar h5 a:hover {<br>
+  color: #727272;<br>
+}<br>
+<br>
+.sidebar h5,<br>
+.sidebar ol li {<br>
+  text-overflow: ellipsis;<br>
+  overflow: hidden;<br>
+  padding: 3px 0;<br>
+}<br>
+<br>
+.sidebar h5 {<br>
+  color: #727272;<br>
+  font-size: 18px;<br>
+  margin: 0 0 25px 0;<br>
+  padding-top: 0;<br>
+}<br>
+<br>
+.sidebar ol li.section-title {<br>
+  font-size: 18px;<br>
+  font-weight: normal;<br>
+  text-transform: uppercase;<br>
+  padding-top: 25px;<br>
+}<br>
+<br>
+.sidebar ol li.section-subtitle a {<br>
+  color: inherit;<br>
+}<br>
+<br>
+.sidebar ol li.section-subtitle {<br>
+  font-weight: 400;<br>
+  text-transform: uppercase;<br>
+}<br>
+<br>
+.sidebar ol li.section-subitem {<br>
+  margin-left: 12px;<br>
+}<br>
+<br>
+.sidebar ol li:first-child {<br>
+  padding-top: 0;<br>
+  margin-top: 0;<br>
+}<br>
+<br>
+button {<br>
+  padding: 0;<br>
+}<br>
+<br>
+#sidenav-left-toggle {<br>
+  display: none;<br>
+  vertical-align: text-bottom;<br>
+  padding: 0;<br>
+}<br>
+<br>
+/* left-nav disappears, and can transition in from the left */<br>
+@media screen and (max-width:768px) {<br>
+  #sidenav-left-toggle {<br>
+    display: inline;<br>
+    background: no-repeat url("data:image/svg+xml;utf8,<svg xmlns='<a href="http://www.w3.org/2000/svg" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">http://www.w3.org/2000/svg</a>' width='24' height='24' viewBox='0 0 24 24'><path fill='%23111' d='M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z'/></svg>");<br>
+    background-position: center;<br>
+    width: 24px;<br>
+    height: 24px;<br>
+    border: none;<br>
+    margin-right: 24px;<br>
+  }<br>
+<br>
+  #overlay-under-drawer.active {<br>
+    opacity: 0.4;<br>
+    height: 100%;<br>
+    z-index: 1999;<br>
+    position: fixed;<br>
+    top: 0;<br>
+    left: 0;<br>
+    right: 0;<br>
+    bottom: 0;<br>
+    background-color: black;<br>
+    display: block;<br>
+  }<br>
+<br>
+  .sidebar-offcanvas-left {<br>
+    left: -100%;<br>
+    position: fixed;<br>
+    -webkit-transition:all .25s ease-out;<br>
+    -o-transition:all .25s ease-out;<br>
+    transition:all .25s ease-out;<br>
+    z-index: 2000;<br>
+    top: 0;<br>
+    width: 280px; /* works all the way down to an iphone 4 */<br>
+    height: 90%;<br>
+    background-color: white;<br>
+    overflow-y: scroll; /* TODO: how to hide scroll bars? */<br>
+    padding: 10px;<br>
+    margin: 10px 10px;<br>
+    box-shadow: 5px 5px 5px 5px #444444;<br>
+    visibility: hidden; /* shown by Javascript after scroll position restore */<br>
+  }<br>
+<br>
+  ol#sidebar-nav {<br>
+    font-size: 18px;<br>
+    white-space: pre-line;<br>
+  }<br>
+<br>
+  .sidebar-offcanvas-left.active {<br>
+    left: 0; /* this animates our drawer into the page */<br>
+  }<br>
+<br>
+  .self-name {<br>
+    display: inline-block;<br>
+  }<br>
+}<br>
+<br>
+.sidebar-offcanvas-left h5 {<br>
+  margin-bottom: 10px;<br>
+}<br>
+<br>
+.sidebar-offcanvas-left h5:last-of-type {<br>
+  border: 0;<br>
+  margin-bottom: 25px;<br>
+}<br>
+<br>
+/* the right nav disappears out of view when the window shrinks */<br>
+@media screen and (max-width: 992px) {<br>
+  .sidebar-offcanvas-right {<br>
+     display: none;<br>
+   }<br>
+}<br>
+<br>
+#overlay-under-drawer {<br>
+  display: none;<br>
+}<br>
+<br>
+/* find-as-you-type search box */<br>
+<br>
+/* override bootstrap defaults */<br>
+.form-control {<br>
+  border-radius: 0;<br>
+  border: 0;<br>
+}<br>
+<br>
+@media screen and (max-width: 768px) {<br>
+  form.search {<br>
+    display: none;<br>
+  }<br>
+}<br>
+<br>
+.typeahead,<br>
+.tt-query,<br>
+.tt-hint {<br>
+  width: 200px;<br>
+  height: 20px;<br>
+  padding: 2px 7px 1px 7px;<br>
+  line-height: 20px;<br>
+  outline: none;<br>
+}<br>
+<br>
+.typeahead {<br>
+  background-color: #fff;<br>
+  border-radius: 2px;<br>
+}<br>
+<br>
+.tt-query {<br>
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);<br>
+     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);<br>
+          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);<br>
+}<br>
+<br>
+.tt-hint {<br>
+  color: #999<br>
+}<br>
+<br>
+.navbar-right .tt-menu {<br>
+  right:0;<br>
+  left: inherit !important;<br>
+  width: 422px;<br>
+  max-height: 250px;<br>
+  overflow-y: scroll;<br>
+}<br>
+<br>
+.tt-menu {<br>
+  font-size: 14px;<br>
+  margin: 0;<br>
+  padding: 8px 0;<br>
+  background-color: #fff;<br>
+  border: 1px solid #ccc;<br>
+  border: 1px solid rgba(0, 0, 0, 0.2);<br>
+  -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);<br>
+     -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);<br>
+          box-shadow: 0 5px 10px rgba(0,0,0,.2);<br>
+}<br>
+<br>
+.tt-suggestion {<br>
+  padding: 3px 20px;<br>
+  color: #212121;<br>
+}<br>
+<br>
+.tt-suggestion:hover {<br>
+  cursor: pointer;<br>
+  color: #fff;<br>
+  background-color: #0097cf;<br>
+}<br>
+<br>
+.tt-suggestion:hover .search-from-lib {<br>
+  color: #ddd;<br>
+}<br>
+<br>
+.tt-suggestion.tt-cursor {<br>
+  color: #fff;<br>
+  background-color: #0097cf;<br>
+}<br>
+<br>
+.tt-suggestion.tt-cursor .search-from-lib {<br>
+  color: #ddd;<br>
+}<br>
+<br>
+.tt-suggestion p {<br>
+  margin: 0;<br>
+}<br>
+<br>
+.search-from-lib {<br>
+  font-style: italic;<br>
+  color: gray;<br>
+}<br>
+<br>
+#search-box {<br>
+  background-color: #ffffff;<br>
+}<br>
+<br>
+.search-body {<br>
+  border: 1px solid #7f7f7f;<br>
+  max-width: 400px;<br>
+  box-shadow: 3px 3px 5px rgba(0,0,0,0.1);<br>
+}<br>
+<br>
+section#setter {<br>
+  border-top: 1px solid #ddd;<br>
+  padding-top: 36px;<br>
+}<br>
+<br>
+li.inherited a {<br>
+  opacity: 0.65;<br>
+  font-style: italic;<br>
+}<br>
+<br>
+#instance-methods dt.inherited .name,<br>
+#instance-properties dt.inherited .name,<br>
+#operators dt.inherited .name {<br>
+  font-weight: 300;<br>
+  font-style: italic;<br>
+}<br>
+<br>
+#instance-methods dt.inherited .signature,<br>
+#instance-properties dt.inherited .signature,<br>
+#operators dt.inherited .signature {<br>
+  font-weight: 300;<br>
+}<br>
+<br>
+@media print {<br>
+  .subnav, .sidebar {<br>
+    display:none;<br>
+  }<br>
+<br>
+  a[href]:after {<br>
+   content:"" !important;<br>
+  }<br>
+}<br>
\ No newline at end of file<br>
<br>
Modified: clang-tools-extra/trunk/clang-doc/assets/index.js<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-doc/assets/index.js?rev=369139&r1=369138&r2=369139&view=diff" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-doc/assets/index.js?rev=369139&r1=369138&r2=369139&view=diff</a><br>
==============================================================================<br>
--- clang-tools-extra/trunk/clang-doc/assets/index.js (original)<br>
+++ clang-tools-extra/trunk/clang-doc/assets/index.js Fri Aug 16 11:38:11 2019<br>
@@ -39,7 +39,7 @@ function genLink(Ref, CurrentDirectory)<br>
   return ANode;<br>
 }<br>
<br>
-function genHTMLOfIndex(Index, CurrentDirectory) {<br>
+function genHTMLOfIndex(Index, CurrentDirectory, IsOutermostList) {<br>
   // Out will store the HTML elements that Index requires to be generated<br>
   var Out = [];<br>
   if (Index.Name) {<br>
@@ -50,24 +50,26 @@ function genHTMLOfIndex(Index, CurrentDi<br>
   }<br>
   if (Index.Children.length == 0)<br>
     return Out;<br>
-  var UlNode = document.createElement("ul");<br>
+  // Only the outermost list should use ol, the others should use ul<br>
+  var ListNodeName = IsOutermostList ? "ol" : "ul";<br>
+  var ListNode = document.createElement(ListNodeName);<br>
   for (Child of Index.Children) {<br>
     var LiNode = document.createElement("li");<br>
-    ChildNodes = genHTMLOfIndex(Child, CurrentDirectory);<br>
+    ChildNodes = genHTMLOfIndex(Child, CurrentDirectory, false);<br>
     for (Node of ChildNodes)<br>
       LiNode.appendChild(Node);<br>
-    UlNode.appendChild(LiNode);<br>
+    ListNode.appendChild(LiNode);<br>
   }<br>
-  Out.push(UlNode);<br>
+  Out.push(ListNode);<br>
   return Out;<br>
 }<br>
<br>
 function createIndex(Index) {<br>
   // Get the DOM element where the index will be created<br>
-  var IndexDiv = document.getElementById("index");<br>
+  var IndexDiv = document.getElementById("sidebar-left");<br>
   // Get the relative path of this file<br>
   CurrentDirectory = IndexDiv.getAttribute("path");<br>
-  var IndexNodes = genHTMLOfIndex(Index, CurrentDirectory);<br>
+  var IndexNodes = genHTMLOfIndex(Index, CurrentDirectory, true);<br>
   for (Node of IndexNodes)<br>
     IndexDiv.appendChild(Node);<br>
 }<br>
<br>
Modified: clang-tools-extra/trunk/clang-doc/tool/ClangDocMain.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-doc/tool/ClangDocMain.cpp?rev=369139&r1=369138&r2=369139&view=diff" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-doc/tool/ClangDocMain.cpp?rev=369139&r1=369138&r2=369139&view=diff</a><br>
==============================================================================<br>
--- clang-tools-extra/trunk/clang-doc/tool/ClangDocMain.cpp (original)<br>
+++ clang-tools-extra/trunk/clang-doc/tool/ClangDocMain.cpp Fri Aug 16 11:38:11 2019<br>
@@ -52,6 +52,10 @@ using namespace clang;<br>
 static llvm::cl::extrahelp CommonHelp(CommonOptionsParser::HelpMessage);<br>
 static llvm::cl::OptionCategory ClangDocCategory("clang-doc options");<br>
<br>
+static llvm::cl::opt<std::string><br>
+    ProjectName("project-name", llvm::cl::desc("Name of project."),<br>
+                llvm::cl::cat(ClangDocCategory));<br>
+<br>
 static llvm::cl::opt<bool> IgnoreMappingFailures(<br>
     "ignore-map-errors",<br>
     llvm::cl::desc("Continue if files are not mapped correctly."),<br>
@@ -205,6 +209,7 @@ int main(int argc, const char **argv) {<br>
<br>
   clang::doc::ClangDocContext CDCtx = {<br>
       Exec->get()->getExecutionContext(),<br>
+      ProjectName,<br>
       PublicOnly,<br>
       OutDirectory,<br>
       SourceRoot,<br>
<br>
Modified: clang-tools-extra/trunk/docs/clang-doc.rst<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/clang-doc.rst?rev=369139&r1=369138&r2=369139&view=diff" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/docs/clang-doc.rst?rev=369139&r1=369138&r2=369139&view=diff</a><br>
==============================================================================<br>
--- clang-tools-extra/trunk/docs/clang-doc.rst (original)<br>
+++ clang-tools-extra/trunk/docs/clang-doc.rst Fri Aug 16 11:38:11 2019<br>
@@ -89,6 +89,7 @@ Options<br>
     --ignore-map-errors         - Continue if files are not mapped correctly.<br>
     --output=<string>           - Directory for outputting generated files.<br>
     -p=<string>                 - Build path<br>
+    --project-name=<string>     - Name of project.<br>
     --public                    - Document only public declarations.<br>
     --repository=<string>       -<br>
                                   URL of repository that hosts code.<br>
<br>
Modified: clang-tools-extra/trunk/unittests/clang-doc/HTMLGeneratorTest.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clang-doc/HTMLGeneratorTest.cpp?rev=369139&r1=369138&r2=369139&view=diff" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clang-doc/HTMLGeneratorTest.cpp?rev=369139&r1=369138&r2=369139&view=diff</a><br>
==============================================================================<br>
--- clang-tools-extra/trunk/unittests/clang-doc/HTMLGeneratorTest.cpp (original)<br>
+++ clang-tools-extra/trunk/unittests/clang-doc/HTMLGeneratorTest.cpp Fri Aug 16 11:38:11 2019<br>
@@ -10,11 +10,15 @@<br>
 #include "Generators.h"<br>
 #include "Representation.h"<br>
 #include "Serialize.h"<br>
+#include "clang/Basic/Version.h"<br>
 #include "gtest/gtest.h"<br>
<br>
 namespace clang {<br>
 namespace doc {<br>
<br>
+static const std::string ClangDocVersion =<br>
+    clang::getClangToolFullVersion("clang-doc");<br>
+<br>
 std::unique_ptr<Generator> getHTMLGenerator() {<br>
   auto G = doc::findGeneratorByName("html");<br>
   if (!G)<br>
@@ -25,7 +29,8 @@ std::unique_ptr<Generator> getHTMLGenera<br>
 ClangDocContext<br>
 getClangDocContext(std::vector<std::string> UserStylesheets = {},<br>
                    StringRef RepositoryUrl = "") {<br>
-  ClangDocContext CDCtx{{}, {}, {}, {}, RepositoryUrl, UserStylesheets, {}};<br>
+  ClangDocContext CDCtx{<br>
+      {}, "test-project", {}, {}, {}, RepositoryUrl, UserStylesheets, {}};<br>
   CDCtx.UserStylesheets.insert(<br>
       CDCtx.UserStylesheets.begin(),<br>
       "../share/clang/clang-doc-default-stylesheet.css");<br>
@@ -61,67 +66,76 @@ TEST(HTMLGeneratorTest, emitNamespaceHTM<br>
 <link rel="stylesheet" href="clang-doc-default-stylesheet.css"/><br>
 <link rel="stylesheet" href="user-provided-stylesheet.css"/><br>
 <script src="index.js"></script><br>
-<div id="index" path=""></div><br>
-<ul><br>
-  <li><br>
-    <span><br>
-      <a href="#Namespaces">Namespaces</a><br>
-    </span><br>
-  </li><br>
-  <li><br>
-    <span><br>
-      <a href="#Records">Records</a><br>
-    </span><br>
-  </li><br>
-  <li><br>
-    <span><br>
-      <a href="#Functions">Functions</a><br>
-    </span><br>
+<header id="project-title">test-project</header><br>
+<main><br>
+  <div id="sidebar-left" path="" class="col-xs-6 col-sm-3 col-md-2 sidebar sidebar-offcanvas-left"></div><br>
+  <div id="main-content" class="col-xs-12 col-sm-9 col-md-8 main-content"><br>
+    <h1>namespace Namespace</h1><br>
+    <h2 id="Namespaces">Namespaces</h2><br>
     <ul><br>
       <li><br>
-        <span><br>
-          <a href="#0000000000000000000000000000000000000000">OneFunction</a><br>
-        </span><br>
+        <a href="Namespace/ChildNamespace.html">ChildNamespace</a><br>
       </li><br>
     </ul><br>
-  </li><br>
-  <li><br>
-    <span><br>
-      <a href="#Enums">Enums</a><br>
-    </span><br>
+    <h2 id="Records">Records</h2><br>
     <ul><br>
       <li><br>
-        <span><br>
-          <a href="#0000000000000000000000000000000000000000">OneEnum</a><br>
-        </span><br>
+        <a href="Namespace/ChildStruct.html">ChildStruct</a><br>
       </li><br>
     </ul><br>
-  </li><br>
-</ul><br>
-<div><br>
-  <h1>namespace Namespace</h1><br>
-  <h2 id="Namespaces">Namespaces</h2><br>
-  <ul><br>
-    <li><br>
-      <a href="Namespace/ChildNamespace.html">ChildNamespace</a><br>
-    </li><br>
-  </ul><br>
-  <h2 id="Records">Records</h2><br>
-  <ul><br>
-    <li><br>
-      <a href="Namespace/ChildStruct.html">ChildStruct</a><br>
-    </li><br>
-  </ul><br>
-  <h2 id="Functions">Functions</h2><br>
-  <div><br>
-    <h3 id="0000000000000000000000000000000000000000">OneFunction</h3><br>
-    <p>OneFunction()</p><br>
+    <h2 id="Functions">Functions</h2><br>
+    <div><br>
+      <h3 id="0000000000000000000000000000000000000000">OneFunction</h3><br>
+      <p>OneFunction()</p><br>
+    </div><br>
+    <h2 id="Enums">Enums</h2><br>
+    <div><br>
+      <h3 id="0000000000000000000000000000000000000000">enum OneEnum</h3><br>
+    </div><br>
   </div><br>
-  <h2 id="Enums">Enums</h2><br>
-  <div><br>
-    <h3 id="0000000000000000000000000000000000000000">enum OneEnum</h3><br>
+  <div id="sidebar-right" class="col-xs-6 col-sm-6 col-md-2 sidebar sidebar-offcanvas-right"><br>
+    <ol><br>
+      <li><br>
+        <span><br>
+          <a href="#Namespaces">Namespaces</a><br>
+        </span><br>
+      </li><br>
+      <li><br>
+        <span><br>
+          <a href="#Records">Records</a><br>
+        </span><br>
+      </li><br>
+      <li><br>
+        <span><br>
+          <a href="#Functions">Functions</a><br>
+        </span><br>
+        <ul><br>
+          <li><br>
+            <span><br>
+              <a href="#0000000000000000000000000000000000000000">OneFunction</a><br>
+            </span><br>
+          </li><br>
+        </ul><br>
+      </li><br>
+      <li><br>
+        <span><br>
+          <a href="#Enums">Enums</a><br>
+        </span><br>
+        <ul><br>
+          <li><br>
+            <span><br>
+              <a href="#0000000000000000000000000000000000000000">OneEnum</a><br>
+            </span><br>
+          </li><br>
+        </ul><br>
+      </li><br>
+    </ol><br>
   </div><br>
-</div><br>
+</main><br>
+<footer><br>
+  <span class="no-break">)raw" +<br>
+                         ClangDocVersion + R"raw(</span><br>
+</footer><br>
 )raw";<br>
<br>
   EXPECT_EQ(Expected, Actual.str());<br>
@@ -162,80 +176,89 @@ TEST(HTMLGeneratorTest, emitRecordHTML)<br>
 <title>class r</title><br>
 <link rel="stylesheet" href="../../../clang-doc-default-stylesheet.css"/><br>
 <script src="../../../index.js"></script><br>
-<div id="index" path="X/Y/Z"></div><br>
-<ul><br>
-  <li><br>
-    <span><br>
-      <a href="#Members">Members</a><br>
-    </span><br>
-  </li><br>
-  <li><br>
-    <span><br>
-      <a href="#Records">Records</a><br>
-    </span><br>
-  </li><br>
-  <li><br>
-    <span><br>
-      <a href="#Functions">Functions</a><br>
-    </span><br>
+<header id="project-title">test-project</header><br>
+<main><br>
+  <div id="sidebar-left" path="X/Y/Z" class="col-xs-6 col-sm-3 col-md-2 sidebar sidebar-offcanvas-left"></div><br>
+  <div id="main-content" class="col-xs-12 col-sm-9 col-md-8 main-content"><br>
+    <h1>class r</h1><br>
+    <p><br>
+      Defined at line <br>
+      <a href="<a href="http://www.repository.com/dir/test.cpp#10" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">http://www.repository.com/dir/test.cpp#10</a>">10</a><br>
+       of file <br>
+      <a href="<a href="http://www.repository.com/dir/test.cpp" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">http://www.repository.com/dir/test.cpp</a>">test.cpp</a><br>
+    </p><br>
+    <p><br>
+      Inherits from <br>
+      <a href="../../../path/to/F.html">F</a><br>
+      , G<br>
+    </p><br>
+    <h2 id="Members">Members</h2><br>
     <ul><br>
       <li><br>
-        <span><br>
-          <a href="#0000000000000000000000000000000000000000">OneFunction</a><br>
-        </span><br>
+        private <br>
+        <a href="../int.html">int</a><br>
+         X<br>
       </li><br>
     </ul><br>
-  </li><br>
-  <li><br>
-    <span><br>
-      <a href="#Enums">Enums</a><br>
-    </span><br>
+    <h2 id="Records">Records</h2><br>
     <ul><br>
       <li><br>
-        <span><br>
-          <a href="#0000000000000000000000000000000000000000">OneEnum</a><br>
-        </span><br>
+        <a href="r/ChildStruct.html">ChildStruct</a><br>
       </li><br>
     </ul><br>
-  </li><br>
-</ul><br>
-<div><br>
-  <h1>class r</h1><br>
-  <p><br>
-    Defined at line <br>
-    <a href="<a href="http://www.repository.com/dir/test.cpp#10" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">http://www.repository.com/dir/test.cpp#10</a>">10</a><br>
-     of file <br>
-    <a href="<a href="http://www.repository.com/dir/test.cpp" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">http://www.repository.com/dir/test.cpp</a>">test.cpp</a><br>
-  </p><br>
-  <p><br>
-    Inherits from <br>
-    <a href="../../../path/to/F.html">F</a><br>
-    , G<br>
-  </p><br>
-  <h2 id="Members">Members</h2><br>
-  <ul><br>
-    <li><br>
-      private <br>
-      <a href="../int.html">int</a><br>
-       X<br>
-    </li><br>
-  </ul><br>
-  <h2 id="Records">Records</h2><br>
-  <ul><br>
-    <li><br>
-      <a href="r/ChildStruct.html">ChildStruct</a><br>
-    </li><br>
-  </ul><br>
-  <h2 id="Functions">Functions</h2><br>
-  <div><br>
-    <h3 id="0000000000000000000000000000000000000000">OneFunction</h3><br>
-    <p>public OneFunction()</p><br>
+    <h2 id="Functions">Functions</h2><br>
+    <div><br>
+      <h3 id="0000000000000000000000000000000000000000">OneFunction</h3><br>
+      <p>public OneFunction()</p><br>
+    </div><br>
+    <h2 id="Enums">Enums</h2><br>
+    <div><br>
+      <h3 id="0000000000000000000000000000000000000000">enum OneEnum</h3><br>
+    </div><br>
   </div><br>
-  <h2 id="Enums">Enums</h2><br>
-  <div><br>
-    <h3 id="0000000000000000000000000000000000000000">enum OneEnum</h3><br>
+  <div id="sidebar-right" class="col-xs-6 col-sm-6 col-md-2 sidebar sidebar-offcanvas-right"><br>
+    <ol><br>
+      <li><br>
+        <span><br>
+          <a href="#Members">Members</a><br>
+        </span><br>
+      </li><br>
+      <li><br>
+        <span><br>
+          <a href="#Records">Records</a><br>
+        </span><br>
+      </li><br>
+      <li><br>
+        <span><br>
+          <a href="#Functions">Functions</a><br>
+        </span><br>
+        <ul><br>
+          <li><br>
+            <span><br>
+              <a href="#0000000000000000000000000000000000000000">OneFunction</a><br>
+            </span><br>
+          </li><br>
+        </ul><br>
+      </li><br>
+      <li><br>
+        <span><br>
+          <a href="#Enums">Enums</a><br>
+        </span><br>
+        <ul><br>
+          <li><br>
+            <span><br>
+              <a href="#0000000000000000000000000000000000000000">OneEnum</a><br>
+            </span><br>
+          </li><br>
+        </ul><br>
+      </li><br>
+    </ol><br>
   </div><br>
-</div><br>
+</main><br>
+<footer><br>
+  <span class="no-break">)raw" +<br>
+                         ClangDocVersion + R"raw(</span><br>
+</footer><br>
 )raw";<br>
<br>
   EXPECT_EQ(Expected, Actual.str());<br>
@@ -270,17 +293,25 @@ TEST(HTMLGeneratorTest, emitFunctionHTML<br>
 <title></title><br>
 <link rel="stylesheet" href="clang-doc-default-stylesheet.css"/><br>
 <script src="index.js"></script><br>
-<div id="index" path=""></div><br>
-<div><br>
-  <h3 id="0000000000000000000000000000000000000000">f</h3><br>
-  <p><br>
-    <a href="path/to/float.html">float</a><br>
-     f(<br>
-    <a href="path/to/int.html">int</a><br>
-     P)<br>
-  </p><br>
-  <p>Defined at line 10 of file dir/test.cpp</p><br>
-</div><br>
+<header id="project-title">test-project</header><br>
+<main><br>
+  <div id="sidebar-left" path="" class="col-xs-6 col-sm-3 col-md-2 sidebar sidebar-offcanvas-left"></div><br>
+  <div id="main-content" class="col-xs-12 col-sm-9 col-md-8 main-content"><br>
+    <h3 id="0000000000000000000000000000000000000000">f</h3><br>
+    <p><br>
+      <a href="path/to/float.html">float</a><br>
+       f(<br>
+      <a href="path/to/int.html">int</a><br>
+       P)<br>
+    </p><br>
+    <p>Defined at line 10 of file dir/test.cpp</p><br>
+  </div><br>
+  <div id="sidebar-right" class="col-xs-6 col-sm-6 col-md-2 sidebar sidebar-offcanvas-right"></div><br>
+</main><br>
+<footer><br>
+  <span class="no-break">)raw" +<br>
+                         ClangDocVersion + R"raw(</span><br>
+</footer><br>
 )raw";<br>
<br>
   EXPECT_EQ(Expected, Actual.str());<br>
@@ -309,19 +340,27 @@ TEST(HTMLGeneratorTest, emitEnumHTML) {<br>
 <title></title><br>
 <link rel="stylesheet" href="clang-doc-default-stylesheet.css"/><br>
 <script src="index.js"></script><br>
-<div id="index" path=""></div><br>
-<div><br>
-  <h3 id="0000000000000000000000000000000000000000">enum class e</h3><br>
-  <ul><br>
-    <li>X</li><br>
-  </ul><br>
-  <p><br>
-    Defined at line <br>
-    <a href="<a href="https://www.repository.com/test.cpp#10" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">https://www.repository.com/test.cpp#10</a>">10</a><br>
-     of file <br>
-    <a href="<a href="https://www.repository.com/test.cpp" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">https://www.repository.com/test.cpp</a>">test.cpp</a><br>
-  </p><br>
-</div><br>
+<header id="project-title">test-project</header><br>
+<main><br>
+  <div id="sidebar-left" path="" class="col-xs-6 col-sm-3 col-md-2 sidebar sidebar-offcanvas-left"></div><br>
+  <div id="main-content" class="col-xs-12 col-sm-9 col-md-8 main-content"><br>
+    <h3 id="0000000000000000000000000000000000000000">enum class e</h3><br>
+    <ul><br>
+      <li>X</li><br>
+    </ul><br>
+    <p><br>
+      Defined at line <br>
+      <a href="<a href="https://www.repository.com/test.cpp#10" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">https://www.repository.com/test.cpp#10</a>">10</a><br>
+       of file <br>
+      <a href="<a href="https://www.repository.com/test.cpp" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">https://www.repository.com/test.cpp</a>">test.cpp</a><br>
+    </p><br>
+  </div><br>
+  <div id="sidebar-right" class="col-xs-6 col-sm-6 col-md-2 sidebar sidebar-offcanvas-right"></div><br>
+</main><br>
+<footer><br>
+  <span class="no-break">)raw" +<br>
+                         ClangDocVersion + R"raw(</span><br>
+</footer><br>
 )raw";<br>
<br>
   EXPECT_EQ(Expected, Actual.str());<br>
@@ -386,19 +425,27 @@ TEST(HTMLGeneratorTest, emitCommentHTML)<br>
 <title></title><br>
 <link rel="stylesheet" href="clang-doc-default-stylesheet.css"/><br>
 <script src="index.js"></script><br>
-<div id="index" path=""></div><br>
-<div><br>
-  <h3 id="0000000000000000000000000000000000000000">f</h3><br>
-  <p>void f(int I, int J)</p><br>
-  <p>Defined at line 10 of file test.cpp</p><br>
-  <div><br>
+<header id="project-title">test-project</header><br>
+<main><br>
+  <div id="sidebar-left" path="" class="col-xs-6 col-sm-3 col-md-2 sidebar sidebar-offcanvas-left"></div><br>
+  <div id="main-content" class="col-xs-12 col-sm-9 col-md-8 main-content"><br>
+    <h3 id="0000000000000000000000000000000000000000">f</h3><br>
+    <p>void f(int I, int J)</p><br>
+    <p>Defined at line 10 of file test.cpp</p><br>
     <div><br>
-      <p> Brief description.</p><br>
-      <p> Extended description that continues onto the next line.</p><br>
-      <p> Comment with html entities: &amp;, &lt;, &gt;, &quot;, &apos;.</p><br>
+      <div><br>
+        <p> Brief description.</p><br>
+        <p> Extended description that continues onto the next line.</p><br>
+        <p> Comment with html entities: &amp;, &lt;, &gt;, &quot;, &apos;.</p><br>
+      </div><br>
     </div><br>
   </div><br>
-</div><br>
+  <div id="sidebar-right" class="col-xs-6 col-sm-6 col-md-2 sidebar sidebar-offcanvas-right"></div><br>
+</main><br>
+<footer><br>
+  <span class="no-break">)raw" +<br>
+                         ClangDocVersion + R"raw(</span><br>
+</footer><br>
 )raw";<br>
<br>
   EXPECT_EQ(Expected, Actual.str());<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" rel="noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer noreferrer" class="gmail-m_-231875145462630946cremed" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div>
</div>
</div><br clear="all"><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><table dir="ltr" style="color:rgb(136,136,136);font-size:13px;table-layout:fixed;font-family:arial,sans,sans-serif;border-collapse:collapse;border:1px solid rgb(204,204,204)" cellspacing="0" cellpadding="0" border="1"><tbody><tr style="height:48px"><td style="padding:2px 3px;border:1px solid rgb(255,255,255);vertical-align:middle;text-align:center"><img width="96" height="65"></td><td style="padding:2px 3px;border-top:1px solid rgb(255,255,255);border-right:1px solid rgb(255,255,255);border-bottom:1px solid rgb(255,255,255);vertical-align:middle;text-align:center"><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"></blockquote></td><td style="padding:2px 3px;vertical-align:bottom;border-top:1px solid rgb(255,255,255);border-right:1px solid rgb(255,255,255);border-bottom:1px solid rgb(255,255,255)"><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><b style="font-size:small;color:rgb(61,133,198);font-family:arial">  •  </b><b style="font-size:small;font-family:arial"><font color="#666666">Diego Astiazar</font></b><font size="2" face="arial" color="#666666"><b>á</b></font><b style="font-size:small;font-family:arial"><font color="#666666">n</font></b></blockquote><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><b style="color:rgb(255,0,0);font-family:arial;font-size:small">  •  </b><b style="font-family:arial;font-size:small"><font color="#666666">Software Engineer Intern</font></b><font size="2" face="arial" color="#ff0000"><b><br></b></font><b style="color:rgb(255,204,51);font-size:12.8px">  •  </b><font color="#666666">Google, Inc.</font><font color="#ffcc33"><span style="font-size:12.8px"><b><br></b></span></font><b style="color:rgb(61,133,198);font-family:arial;font-size:small">  •  </b><span style="color:rgb(61,133,198);font-family:arial;font-size:small"><a href="mailto:diegoast@google.com" style="color:rgb(17,85,204)" class="gmail-m_-231875145462630946cremed" target="_blank">diegoast@google.com</a></span></blockquote></td></tr></tbody></table></div></div></div></div></div></div>
</blockquote></div></div>
</blockquote></div></div>