Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 6f9a69e

Browse filesBrowse files
ilovepiPeterChou1
andcommitted
[clang-doc] Implement setupTemplateValue for HTMLMustacheGenerator
This patch implements the business logic for setupTemplateValue, which was split from #133161. The implementation configures the relative path relationships between the various HTML components, and prepares them prior to their use in the generator. Co-authored-by: Peter Chou <peter.chou@mail.utoronto.ca>
1 parent 888f545 commit 6f9a69e
Copy full SHA for 6f9a69e

File tree

Expand file treeCollapse file tree

2 files changed

+73
-4
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+73
-4
lines changed

‎clang-tools-extra/clang-doc/HTMLMustacheGenerator.cpp

Copy file name to clipboardExpand all lines: clang-tools-extra/clang-doc/HTMLMustacheGenerator.cpp
+21-1Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,26 @@ static json::Value extractValue(const RecordInfo &I,
406406

407407
static Error setupTemplateValue(const ClangDocContext &CDCtx, json::Value &V,
408408
Info *I) {
409-
return createStringError(inconvertibleErrorCode(), "setupTemplateValue is unimplemented");
409+
V.getAsObject()->insert({"ProjectName", CDCtx.ProjectName});
410+
json::Value StylesheetArr = Array();
411+
auto InfoPath = I->getRelativeFilePath("");
412+
SmallString<128> RelativePath = computeRelativePath("", InfoPath);
413+
for (const auto &FilePath : CDCtx.UserStylesheets) {
414+
SmallString<128> StylesheetPath = RelativePath;
415+
sys::path::append(StylesheetPath, sys::path::filename(FilePath));
416+
sys::path::native(StylesheetPath, sys::path::Style::posix);
417+
StylesheetArr.getAsArray()->emplace_back(StylesheetPath);
418+
}
419+
V.getAsObject()->insert({"Stylesheets", StylesheetArr});
420+
421+
json::Value ScriptArr = Array();
422+
for (auto Script : CDCtx.JsScripts) {
423+
SmallString<128> JsPath = RelativePath;
424+
sys::path::append(JsPath, sys::path::filename(Script));
425+
ScriptArr.getAsArray()->emplace_back(JsPath);
426+
}
427+
V.getAsObject()->insert({"Scripts", ScriptArr});
428+
return Error::success();
410429
}
411430

412431
Error MustacheHTMLGenerator::generateDocForInfo(Info *I, raw_ostream &OS,
@@ -417,6 +436,7 @@ Error MustacheHTMLGenerator::generateDocForInfo(Info *I, raw_ostream &OS,
417436
extractValue(*static_cast<clang::doc::NamespaceInfo *>(I), CDCtx);
418437
if (auto Err = setupTemplateValue(CDCtx, V, I))
419438
return Err;
439+
assert(NamespaceTemplate && "NamespaceTemplate is nullptr.");
420440
NamespaceTemplate->render(V, OS);
421441
break;
422442
}

‎clang-tools-extra/unittests/clang-doc/HTMLMustacheGeneratorTest.cpp

Copy file name to clipboardExpand all lines: clang-tools-extra/unittests/clang-doc/HTMLMustacheGeneratorTest.cpp
+52-3Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,57 @@ TEST(HTMLMustacheGeneratorTest, generateDocsForInfo) {
159159
I.Children.Functions.back().Name = "OneFunction";
160160
I.Children.Enums.emplace_back();
161161

162-
EXPECT_THAT_ERROR(G->generateDocForInfo(&I, Actual, CDCtx), Failed());
162+
unittest::TempDir RootTestDirectory("generateDocForInfoTest",
163+
/*Unique=*/true);
164+
CDCtx.OutDirectory = RootTestDirectory.path();
165+
166+
getMustacheHtmlFiles("../../../../../share/clang-doc", CDCtx);
167+
168+
// FIXME: This is a terrible hack, since we can't initialize the templates
169+
// directly. We'll need to update the interfaces so that we can call
170+
// SetupTemplateFiles() from outsize of HTMLMustacheGenerator.cpp
171+
EXPECT_THAT_ERROR(G->generateDocs(RootTestDirectory.path(), {}, CDCtx),
172+
Succeeded())
173+
<< "Failed to generate docs.";
163174

164-
std::string Expected = R"raw()raw";
165-
EXPECT_THAT(Actual.str(), Eq(Expected));
175+
EXPECT_THAT_ERROR(G->generateDocForInfo(&I, Actual, CDCtx), Succeeded());
176+
177+
std::string Expected = R"raw(<!DOCTYPE html>
178+
<html lang="en-US">
179+
<head>
180+
<meta charset="utf-8"/>
181+
<title>namespace Namespace</title>
182+
<link rel="stylesheet" type="text/css" href="../clang-doc-mustache.css"/>
183+
<link rel="stylesheet" type="text/css" href="../"/>
184+
<script src="../mustache-index.js"></script>
185+
<script src="../"></script>
186+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/default.min.css">
187+
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
188+
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/cpp.min.js"></script>
189+
</head>
190+
<body>
191+
<nav class="navbar">
192+
Navbar
193+
</nav>
194+
<main>
195+
<div class="container">
196+
<div class="sidebar">
197+
Lorem ipsum dolor sit amet, consectetur adipiscing elit,
198+
sed do eiusmod tempor incididunt ut labore et dolore magna
199+
aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco
200+
laboris nisi ut aliquip ex ea commodo consequat.
201+
Duis aute irure dolor in reprehenderit in voluptate velit esse
202+
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
203+
cupidatat non proident, sunt in culpa qui officia deserunt mollit
204+
anim id est laborum
205+
</div>
206+
<div class="resizer" id="resizer"></div>
207+
<div class="content">
208+
Content
209+
</div>
210+
</div>
211+
</main>
212+
</body>
213+
</html>)raw";
214+
EXPECT_EQ(Actual.str(), Expected);
166215
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.