Skip to content

Commit

Permalink
adoc work
Browse files Browse the repository at this point in the history
  • Loading branch information
vinniefalco committed Apr 27, 2023
1 parent f9ce927 commit 9d61625
Show file tree
Hide file tree
Showing 11 changed files with 60 additions and 51 deletions.
17 changes: 11 additions & 6 deletions include/mrdox/Metadata/Overloads.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

#include <mrdox/Platform.hpp>
#include <mrdox/Metadata/Function.hpp>
#include <mrdox/MetadataFwd.hpp>
#include <clang/Basic/Specifiers.h>
#include <llvm/ADT/StringRef.h>
#include <span>
Expand Down Expand Up @@ -65,31 +66,35 @@ 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<FunctionInfo const*> list;
std::span<FunctionInfo const*> Functions;
};

class MRDOX_VISIBLE
NamespaceOverloads
{
public:
std::vector<Overloads_> list;
std::vector<OverloadInfo> list;

/** Constructor.
@par Complexity
`O(N * log(N))` in `data.size()`.
*/
MRDOX_DECL
explicit
NamespaceOverloads(
NamespaceInfo const& I,
std::vector<FunctionInfo const*> data);

private:
Expand All @@ -110,7 +115,7 @@ class MRDOX_VISIBLE
MRDOX_DECL
NamespaceOverloads
makeNamespaceOverloads(
std::vector<Reference> const& list,
NamespaceInfo const& I,
Corpus const& corpus);

} // mrdox
Expand Down
4 changes: 2 additions & 2 deletions source/api/Corpus.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
13 changes: 8 additions & 5 deletions source/api/Metadata/Overloads.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@

#include <mrdox/Corpus.hpp>
#include <mrdox/Metadata/Function.hpp>
#include <mrdox/Metadata/Namespace.hpp>
#include <mrdox/Metadata/Overloads.hpp>
#include <mrdox/Metadata/Scope.hpp>
#include <llvm/ADT/STLExtras.h>
Expand Down Expand Up @@ -91,6 +92,7 @@ makeOverloadsSet(

NamespaceOverloads::
NamespaceOverloads(
NamespaceInfo const& I,
std::vector<FunctionInfo const*> data)
: data_(std::move(data))
{
Expand All @@ -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;
Expand All @@ -121,18 +124,18 @@ NamespaceOverloads(

NamespaceOverloads
makeNamespaceOverloads(
std::vector<Reference> const& list,
NamespaceInfo const& I,
Corpus const& corpus)
{
std::vector<FunctionInfo const*> 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<FunctionInfo>(ref.id);
data.push_back(&I);
}

return NamespaceOverloads(std::move(data));
return NamespaceOverloads(I, std::move(data));
}

} // mrdox
Expand Down
3 changes: 3 additions & 0 deletions source/api/_adoc/AdocGenerator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ namespace adoc {
class AdocGenerator
: public Generator
{
struct MultiPageBuilder;
struct SinglePageBuilder;

public:
llvm::StringRef
name() const noexcept override
Expand Down
3 changes: 3 additions & 0 deletions source/api/_adoc/AdocMultiPageWriter.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
14 changes: 0 additions & 14 deletions source/api/_adoc/AdocPagesBuilder.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<Page> pages;

AdocPagesBuilder(
llvm::StringRef outputPath,
Corpus const& corpus,
Expand Down
16 changes: 8 additions & 8 deletions source/api/_adoc/AdocSinglePageWriter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ visit(
beginSection(s);

auto recordList = buildSortedList<RecordInfo>(I.Children.Records);
auto functionOverloads = makeNamespaceOverloads(I.Children.Functions, corpus_);
auto functionOverloads = makeNamespaceOverloads(I, corpus_);
//auto typeList = ?
//auto enumList = ?

Expand Down Expand Up @@ -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);
Expand All @@ -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)
Expand Down
2 changes: 1 addition & 1 deletion source/api/_adoc/AdocSinglePageWriter.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
12 changes: 6 additions & 6 deletions source/api/_adoc/AdocWriter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down Expand Up @@ -722,16 +722,16 @@ void
AdocWriter::
beginSection(
Info const& P,
Overloads_ const& F)
OverloadInfo const& I)
{
sect_.level++;
if(sect_.level <= 6)
sect_.markup.push_back('=');
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::
Expand Down
7 changes: 5 additions & 2 deletions source/api/_adoc/AdocWriter.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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();

Expand Down
20 changes: 13 additions & 7 deletions source/mrdox/ToolMain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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(), "'"))
{
}
}
}

Expand All @@ -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();
Expand Down

0 comments on commit 9d61625

Please sign in to comment.