From 9d616256a3a78f9a8cfa1247df51296af75bbc98 Mon Sep 17 00:00:00 2001 From: Vinnie Falco Date: Thu, 27 Apr 2023 11:29:47 -0700 Subject: [PATCH] adoc work --- include/mrdox/Metadata/Overloads.hpp | 17 +++++++++++------ source/api/Corpus.cpp | 4 ++-- source/api/Metadata/Overloads.cpp | 13 ++++++++----- source/api/_adoc/AdocGenerator.hpp | 3 +++ source/api/_adoc/AdocMultiPageWriter.hpp | 3 +++ source/api/_adoc/AdocPagesBuilder.hpp | 14 -------------- source/api/_adoc/AdocSinglePageWriter.cpp | 16 ++++++++-------- source/api/_adoc/AdocSinglePageWriter.hpp | 2 +- source/api/_adoc/AdocWriter.cpp | 12 ++++++------ source/api/_adoc/AdocWriter.hpp | 7 +++++-- source/mrdox/ToolMain.cpp | 20 +++++++++++++------- 11 files changed, 60 insertions(+), 51 deletions(-) diff --git a/include/mrdox/Metadata/Overloads.hpp b/include/mrdox/Metadata/Overloads.hpp index 36c90c94d..6dfdafa95 100644 --- a/include/mrdox/Metadata/Overloads.hpp +++ b/include/mrdox/Metadata/Overloads.hpp @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -65,22 +66,26 @@ makeOverloadsSet( //------------------------------------------------ -struct Overloads_ +struct OverloadInfo { + /** The parent namespace or record. + */ + Info const* Parent; + /** The name for this set of functions. */ - std::string_view name; + std::string_view Name; /** The list of overloads. */ - std::span list; + std::span Functions; }; class MRDOX_VISIBLE NamespaceOverloads { public: - std::vector list; + std::vector list; /** Constructor. @@ -88,8 +93,8 @@ class MRDOX_VISIBLE `O(N * log(N))` in `data.size()`. */ MRDOX_DECL - explicit NamespaceOverloads( + NamespaceInfo const& I, std::vector data); private: @@ -110,7 +115,7 @@ class MRDOX_VISIBLE MRDOX_DECL NamespaceOverloads makeNamespaceOverloads( - std::vector const& list, + NamespaceInfo const& I, Corpus const& corpus); } // mrdox diff --git a/source/api/Corpus.cpp b/source/api/Corpus.cpp index 7d53c99bc..b1a9eb5a4 100644 --- a/source/api/Corpus.cpp +++ b/source/api/Corpus.cpp @@ -289,12 +289,12 @@ build( // Inject the global namespace { -#if 0 + // default-constructed NamespaceInfo + // describes the global namespace NamespaceInfo I; insertBitcode( *ex.getExecutionContext(), writeBitcode(I)); -#endif } // Collect the symbols. Each symbol will have diff --git a/source/api/Metadata/Overloads.cpp b/source/api/Metadata/Overloads.cpp index 49e5bf71f..45a8beb5b 100644 --- a/source/api/Metadata/Overloads.cpp +++ b/source/api/Metadata/Overloads.cpp @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -91,6 +92,7 @@ makeOverloadsSet( NamespaceOverloads:: NamespaceOverloads( + NamespaceInfo const& I, std::vector data) : data_(std::move(data)) { @@ -112,7 +114,8 @@ NamespaceOverloads( { return (*it0)->Name.compare_insensitive(I->Name) == 0; }); - list.push_back({ + list.emplace_back(OverloadInfo{ + &I, { (*it0)->Name.data(), (*it0)->Name.size() }, { it0, it } }); it0 = it; @@ -121,18 +124,18 @@ NamespaceOverloads( NamespaceOverloads makeNamespaceOverloads( - std::vector const& list, + NamespaceInfo const& I, Corpus const& corpus) { std::vector data; - data.reserve(list.size()); - for(auto const& ref : list) + data.reserve(I.Children.Functions.size()); + for(auto const& ref : I.Children.Functions) { auto const& I = corpus.get(ref.id); data.push_back(&I); } - return NamespaceOverloads(std::move(data)); + return NamespaceOverloads(I, std::move(data)); } } // mrdox diff --git a/source/api/_adoc/AdocGenerator.hpp b/source/api/_adoc/AdocGenerator.hpp index 49dd21259..00f29d6fc 100644 --- a/source/api/_adoc/AdocGenerator.hpp +++ b/source/api/_adoc/AdocGenerator.hpp @@ -23,6 +23,9 @@ namespace adoc { class AdocGenerator : public Generator { + struct MultiPageBuilder; + struct SinglePageBuilder; + public: llvm::StringRef name() const noexcept override diff --git a/source/api/_adoc/AdocMultiPageWriter.hpp b/source/api/_adoc/AdocMultiPageWriter.hpp index a0e8d5181..6ff566475 100644 --- a/source/api/_adoc/AdocMultiPageWriter.hpp +++ b/source/api/_adoc/AdocMultiPageWriter.hpp @@ -32,11 +32,14 @@ class AdocMultiPageWriter SafeNames const& names, Reporter& R) noexcept; + void build(NamespaceInfo const&); void build(RecordInfo const&); void build(FunctionInfo const&); void build(TypedefInfo const&); void build(EnumInfo const&); + void build(OverloadInfo const&); + private: void writeTitle(Info const& I); diff --git a/source/api/_adoc/AdocPagesBuilder.hpp b/source/api/_adoc/AdocPagesBuilder.hpp index 103fec1e9..5730cef4f 100644 --- a/source/api/_adoc/AdocPagesBuilder.hpp +++ b/source/api/_adoc/AdocPagesBuilder.hpp @@ -31,20 +31,6 @@ class AdocPagesBuilder Config::WorkGroup wg_; public: - struct Page - { - llvm::SmallString<0> fileName; - - explicit - Page( - llvm::StringRef s) - : fileName(s) - { - } - }; - - std::vector pages; - AdocPagesBuilder( llvm::StringRef outputPath, Corpus const& corpus, diff --git a/source/api/_adoc/AdocSinglePageWriter.cpp b/source/api/_adoc/AdocSinglePageWriter.cpp index cbdca410c..fe7321267 100644 --- a/source/api/_adoc/AdocSinglePageWriter.cpp +++ b/source/api/_adoc/AdocSinglePageWriter.cpp @@ -91,7 +91,7 @@ visit( beginSection(s); auto recordList = buildSortedList(I.Children.Records); - auto functionOverloads = makeNamespaceOverloads(I.Children.Functions, corpus_); + auto functionOverloads = makeNamespaceOverloads(I, corpus_); //auto typeList = ? //auto enumList = ? @@ -201,18 +201,18 @@ bool AdocSinglePageWriter:: visitOverloads( Info const& P, - Overloads_ const& t) + OverloadInfo const& I) { - Assert(! t.list.empty()); + Assert(! I.Functions.empty()); - beginSection(P, t); + beginSection(P, I); // Location - writeLocation(*t.list.front()); + writeLocation(*I.Functions.front()); // List of overloads os_ << '\n'; - for(auto const I : t.list) + for(auto const I : I.Functions) { os_ << ". `"; writeFunctionDeclaration(*I); @@ -221,10 +221,10 @@ visitOverloads( // Brief os_ << "\n//-\n"; - writeBrief(t.list.front()->javadoc, true); + writeBrief(I.Functions.front()->javadoc, true); // List of descriptions - for(auto const I : t.list) + for(auto const I : I.Functions) { os_ << ". "; if(I->javadoc) diff --git a/source/api/_adoc/AdocSinglePageWriter.hpp b/source/api/_adoc/AdocSinglePageWriter.hpp index 82b218f95..fd9c17c3a 100644 --- a/source/api/_adoc/AdocSinglePageWriter.hpp +++ b/source/api/_adoc/AdocSinglePageWriter.hpp @@ -48,7 +48,7 @@ class AdocSinglePageWriter bool visit(TypedefInfo const&) override; bool visit(EnumInfo const&) override; - bool visitOverloads(Info const& P, Overloads_ const&); + bool visitOverloads(Info const& P, OverloadInfo const&); }; } // adoc diff --git a/source/api/_adoc/AdocWriter.cpp b/source/api/_adoc/AdocWriter.cpp index ce80311f5..aecbfca08 100644 --- a/source/api/_adoc/AdocWriter.cpp +++ b/source/api/_adoc/AdocWriter.cpp @@ -315,15 +315,15 @@ llvm::StringRef AdocWriter:: linkFor( Info const& P, - Overloads_ const& t) + OverloadInfo const& I) { static thread_local std::string temp; temp.clear(); llvm::raw_string_ostream os(temp); std::string s; os << "xref:#" << - names_.getOverload(P, t.name, '-', s) << - "[" << t.name << "]"; + names_.getOverload(P, I.Name, '-', s) << + "[" << I.Name << "]"; return temp; } @@ -722,7 +722,7 @@ void AdocWriter:: beginSection( Info const& P, - Overloads_ const& F) + OverloadInfo const& I) { sect_.level++; if(sect_.level <= 6) @@ -730,8 +730,8 @@ beginSection( std::string temp; os_ << "\n" << - "[\"#" << names_.getOverload(P, F.name, '-', temp) << "\"]\n" << - sect_.markup << ' ' << F.name << "\n"; + "[\"#" << names_.getOverload(P, I.Name, '-', temp) << "\"]\n" << + sect_.markup << ' ' << I.Name << "\n"; } void AdocWriter:: diff --git a/source/api/_adoc/AdocWriter.hpp b/source/api/_adoc/AdocWriter.hpp index 6fa27f5e1..b774f84ad 100644 --- a/source/api/_adoc/AdocWriter.hpp +++ b/source/api/_adoc/AdocWriter.hpp @@ -63,7 +63,7 @@ class AdocWriter void write(EnumInfo const& I); virtual llvm::StringRef linkFor(Info const&); - virtual llvm::StringRef linkFor(Info const&, Overloads_ const&); + virtual llvm::StringRef linkFor(Info const&, OverloadInfo const&); void writeBase( BaseRecordInfo const& I); @@ -112,8 +112,11 @@ class AdocWriter FormalParam formalParam(FieldTypeInfo const& ft); TypeName typeName(TypeInfo const& ti); + void beginPage(); + void endPage(); + void beginSection(Info const& I); - void beginSection(Info const& P, Overloads_ const& F); + void beginSection(Info const& P, OverloadInfo const& F); void beginSection(llvm::StringRef name); void endSection(); diff --git a/source/mrdox/ToolMain.cpp b/source/mrdox/ToolMain.cpp index 8cc3a60ec..0e8919456 100644 --- a/source/mrdox/ToolMain.cpp +++ b/source/mrdox/ToolMain.cpp @@ -132,15 +132,21 @@ toolMain( llvm::outs() << "Generating docs...\n"; if((*corpus)->config()->singlePage()) { - if(! generator->buildSinglePageFile( - (*config)->outputPath(), **corpus, R)) - return; + auto err = generator->buildSinglePageFile( + (*config)->outputPath(), **corpus, R); + if(R.error(err, + "generate '", (*config)->outputPath(), "'")) + { + } } else { - if(! generator->buildPages( - (*config)->outputPath(), **corpus, R)) - return; + auto err = generator->buildPages( + (*config)->outputPath(), **corpus, R); + if(R.error(err, + "generate pages in '", (*config)->outputPath(), "'")) + { + } } } @@ -155,7 +161,7 @@ int main(int argc, char const** argv) debugEnableHeapChecking(); llvm::sys::PrintStackTraceOnErrorSignal(argv[0]); - + Reporter R; toolMain(argc, argv, R); return R.getExitCode();