https://github.com/ilovepi created https://github.com/llvm/llvm-project/pull/138060
Split from #133161. This patch adds HTMLMustacheGenerator.cpp, and the most basic class defintion for the generator. Future patches will add functionality. Co-authored-by: Peter Chou <peter.c...@mail.utoronto.ca> >From 397d5dc9657733afa9511a072ef2750c746ef01b Mon Sep 17 00:00:00 2001 From: Paul Kirth <paulki...@google.com> Date: Wed, 30 Apr 2025 07:59:01 -0700 Subject: [PATCH] [clang-doc] Add HTMLMustacheGenerator.cpp Split from #133161. This patch adds HTMLMustacheGenerator.cpp, and the most basic class defintion for the generator. Future patches will add functionality. Co-authored-by: Peter Chou <peter.c...@mail.utoronto.ca> --- clang-tools-extra/clang-doc/CMakeLists.txt | 3 +- clang-tools-extra/clang-doc/Generators.cpp | 3 +- clang-tools-extra/clang-doc/Generators.h | 1 + .../clang-doc/HTMLMustacheGenerator.cpp | 83 +++++++++++++++++++ clang-tools-extra/clang-doc/Representation.h | 2 + 5 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 clang-tools-extra/clang-doc/HTMLMustacheGenerator.cpp diff --git a/clang-tools-extra/clang-doc/CMakeLists.txt b/clang-tools-extra/clang-doc/CMakeLists.txt index 915e14c3ee16d..79563c41435eb 100644 --- a/clang-tools-extra/clang-doc/CMakeLists.txt +++ b/clang-tools-extra/clang-doc/CMakeLists.txt @@ -16,6 +16,7 @@ add_clang_library(clangDoc STATIC Representation.cpp Serialize.cpp YAMLGenerator.cpp + HTMLMustacheGenerator.cpp DEPENDS omp_gen @@ -24,7 +25,7 @@ add_clang_library(clangDoc STATIC clang_target_link_libraries(clangDoc PRIVATE - clangDocSupport + clangDocSupport clangAnalysis clangAST clangASTMatchers diff --git a/clang-tools-extra/clang-doc/Generators.cpp b/clang-tools-extra/clang-doc/Generators.cpp index 4bb5366800f7f..a3c2773412cff 100644 --- a/clang-tools-extra/clang-doc/Generators.cpp +++ b/clang-tools-extra/clang-doc/Generators.cpp @@ -103,6 +103,7 @@ static int LLVM_ATTRIBUTE_UNUSED MDGeneratorAnchorDest = MDGeneratorAnchorSource; static int LLVM_ATTRIBUTE_UNUSED HTMLGeneratorAnchorDest = HTMLGeneratorAnchorSource; - +static int LLVM_ATTRIBUTE_UNUSED MHTMLGeneratorAnchorDest = + MHTMLGeneratorAnchorSource; } // namespace doc } // namespace clang diff --git a/clang-tools-extra/clang-doc/Generators.h b/clang-tools-extra/clang-doc/Generators.h index 2e71890389256..aee04b9d58d9d 100644 --- a/clang-tools-extra/clang-doc/Generators.h +++ b/clang-tools-extra/clang-doc/Generators.h @@ -57,6 +57,7 @@ std::string getTagType(TagTypeKind AS); extern volatile int YAMLGeneratorAnchorSource; extern volatile int MDGeneratorAnchorSource; extern volatile int HTMLGeneratorAnchorSource; +extern volatile int MHTMLGeneratorAnchorSource; } // namespace doc } // namespace clang diff --git a/clang-tools-extra/clang-doc/HTMLMustacheGenerator.cpp b/clang-tools-extra/clang-doc/HTMLMustacheGenerator.cpp new file mode 100644 index 0000000000000..65e8e34b581d2 --- /dev/null +++ b/clang-tools-extra/clang-doc/HTMLMustacheGenerator.cpp @@ -0,0 +1,83 @@ +//===-- HTMLMustacheGenerator.cpp - HTML Mustache Generator -----*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +#include "Generators.h" +#include "Representation.h" +#include "support/File.h" +#include "llvm/Support/MemoryBuffer.h" +#include "llvm/Support/Mustache.h" + +using namespace llvm; +using namespace llvm::json; +using namespace llvm::mustache; + +namespace clang { +namespace doc { + +class MustacheHTMLGenerator : public Generator { +public: + static const char *Format; + Error generateDocs(StringRef RootDir, + StringMap<std::unique_ptr<doc::Info>> Infos, + const ClangDocContext &CDCtx) override; + Error createResources(ClangDocContext &CDCtx) override; + Error generateDocForInfo(Info *I, raw_ostream &OS, + const ClangDocContext &CDCtx) override; +}; + +class MustacheTemplateFile : public Template { +public: + static ErrorOr<std::unique_ptr<MustacheTemplateFile>> + createMustacheFile(StringRef FileName) { + ErrorOr<std::unique_ptr<MemoryBuffer>> BufferOrError = + MemoryBuffer::getFile(FileName); + if (auto EC = BufferOrError.getError()) + return EC; + + std::unique_ptr<MemoryBuffer> Buffer = std::move(BufferOrError.get()); + StringRef FileContent = Buffer->getBuffer(); + return std::make_unique<MustacheTemplateFile>(FileContent); + } + + Error registerPartialFile(StringRef Name, StringRef FileName) { + ErrorOr<std::unique_ptr<MemoryBuffer>> BufferOrError = + MemoryBuffer::getFile(FileName); + if (auto EC = BufferOrError.getError()) + return createFileError("cannot open file", EC); + std::unique_ptr<MemoryBuffer> Buffer = std::move(BufferOrError.get()); + StringRef FileContent = Buffer->getBuffer(); + registerPartial(Name.str(), FileContent.str()); + return Error::success(); + } + + MustacheTemplateFile(StringRef TemplateStr) : Template(TemplateStr) {} +}; +Error MustacheHTMLGenerator::generateDocs( + StringRef RootDir, StringMap<std::unique_ptr<doc::Info>> Infos, + const clang::doc::ClangDocContext &CDCtx) { + return Error::success(); +} +Error MustacheHTMLGenerator::generateDocForInfo(Info *I, raw_ostream &OS, + const ClangDocContext &CDCtx) { + return Error::success(); +} +Error MustacheHTMLGenerator::createResources(ClangDocContext &CDCtx) { + Error Err = Error::success(); + return Error::success(); +} + +const char *MustacheHTMLGenerator::Format = "mhtml"; + +static GeneratorRegistry::Add<MustacheHTMLGenerator> + MHTML(MustacheHTMLGenerator::Format, "Generator for mustache HTML output."); + +// This anchor is used to force the linker to link in the generated object +// file and thus register the generator. +volatile int MHTMLGeneratorAnchorSource = 0; + +} // namespace doc +} // namespace clang diff --git a/clang-tools-extra/clang-doc/Representation.h b/clang-tools-extra/clang-doc/Representation.h index 1d5c4dcaeaf37..71377d10b2f40 100644 --- a/clang-tools-extra/clang-doc/Representation.h +++ b/clang-tools-extra/clang-doc/Representation.h @@ -535,6 +535,8 @@ struct ClangDocContext { // JavaScript files that will be imported in all HTML files. std::vector<std::string> JsScripts; StringRef Base; + // Mustache Template files + llvm::StringMap<std::string> MustacheTemplates; Index Idx; }; _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits