Skip to content

Commit 7d7f949

Browse files
committed
refactor(HandlebarsGenerator): toString customization is virtual function
1 parent eb464a3 commit 7d7f949

7 files changed

+58
-25
lines changed

src/lib/Gen/adoc/AdocGenerator.cpp

+11-9
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,19 @@ namespace adoc {
1818

1919
AdocGenerator::
2020
AdocGenerator()
21-
: hbs::HandlebarsGenerator("Asciidoc", "adoc", [](
22-
hbs::HandlebarsCorpus const& c,
23-
doc::Node const& I) -> std::string
24-
{
25-
std::string s;
26-
DocVisitor visitor(c, s);
27-
doc::visit(I, visitor);
28-
return s;
29-
})
21+
: hbs::HandlebarsGenerator("Asciidoc", "adoc")
3022
{}
3123

24+
std::string
25+
AdocGenerator::
26+
toString(hbs::HandlebarsCorpus const& c, doc::Node const& I) const
27+
{
28+
std::string s;
29+
DocVisitor visitor(c, s);
30+
doc::visit(I, visitor);
31+
return s;
32+
}
33+
3234
} // adoc
3335

3436
std::unique_ptr<Generator>

src/lib/Gen/adoc/AdocGenerator.hpp

+5
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ class AdocGenerator
2626
{
2727
public:
2828
AdocGenerator();
29+
30+
std::string
31+
toString(
32+
hbs::HandlebarsCorpus const&,
33+
doc::Node const&) const override;
2934
};
3035

3136
} // adoc

src/lib/Gen/hbs/Builder.hpp

+4
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,14 @@ class Builder
5555
Expected<std::string> renderSinglePageHeader();
5656
Expected<std::string> renderSinglePageFooter();
5757

58+
/** Render the contents for a symbol.
59+
*/
5860
template<class T>
5961
Expected<std::string>
6062
operator()(T const&);
6163

64+
/** Render the contents for an overload set.
65+
*/
6266
Expected<std::string>
6367
operator()(OverloadSet const&);
6468
};

src/lib/Gen/hbs/HandlebarsGenerator.cpp

+12-2
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,12 @@ build(
9292

9393
Options options = loadOptions(fileExtension(), corpus.config);
9494
HandlebarsCorpus domCorpus(
95-
corpus, std::move(options), fileExtension(), toStringFn);
95+
corpus,
96+
std::move(options),
97+
fileExtension(),
98+
[this](HandlebarsCorpus const& c, doc::Node const& n) {
99+
return this->toString(c, n);
100+
});
96101
auto ex = createExecutors(domCorpus);
97102
if (!ex)
98103
{
@@ -119,7 +124,12 @@ buildOne(
119124
auto options = loadOptions(fileExtension(), corpus.config);
120125

121126
HandlebarsCorpus domCorpus(
122-
corpus, std::move(options), fileExtension(), toStringFn);
127+
corpus,
128+
std::move(options),
129+
fileExtension(),
130+
[this](HandlebarsCorpus const& c, doc::Node const& n) {
131+
return this->toString(c, n);
132+
});
123133
auto ex = createExecutors(domCorpus);
124134
if (!ex)
125135
{

src/lib/Gen/hbs/HandlebarsGenerator.hpp

+10-5
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,13 @@ class HandlebarsGenerator
2828
{
2929
std::string displayName_;
3030
std::string fileExtension_;
31-
using JavadocToStringFn = std::function<std::string(HandlebarsCorpus const&, doc::Node const&)>;
32-
JavadocToStringFn toStringFn;
3331

3432
public:
3533
HandlebarsGenerator(
3634
std::string_view displayName,
37-
std::string_view fileExtension,
38-
JavadocToStringFn toStringFn)
35+
std::string_view fileExtension)
3936
: displayName_(displayName)
4037
, fileExtension_(fileExtension)
41-
, toStringFn(std::move(toStringFn))
4238
{}
4339

4440
std::string_view
@@ -68,6 +64,15 @@ class HandlebarsGenerator
6864
buildOne(
6965
std::ostream& os,
7066
Corpus const& corpus) const override;
67+
68+
/** Convert a Javadoc node to a string.
69+
*/
70+
virtual
71+
std::string
72+
toString(HandlebarsCorpus const&, doc::Node const&) const
73+
{
74+
return {};
75+
}
7176
};
7277

7378
} // hbs

src/lib/Gen/html/HTMLGenerator.cpp

+11-9
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,19 @@ namespace html {
1818

1919
HTMLGenerator::
2020
HTMLGenerator()
21-
: hbs::HandlebarsGenerator("HTML", "html", [](
22-
hbs::HandlebarsCorpus const& c,
23-
doc::Node const& I) -> std::string
24-
{
25-
std::string s;
26-
DocVisitor visitor(c, s);
27-
doc::visit(I, visitor);
28-
return s;
29-
})
21+
: hbs::HandlebarsGenerator("HTML", "html")
3022
{}
3123

24+
std::string
25+
HTMLGenerator::
26+
toString(hbs::HandlebarsCorpus const& c, doc::Node const& I) const
27+
{
28+
std::string s;
29+
DocVisitor visitor(c, s);
30+
doc::visit(I, visitor);
31+
return s;
32+
}
33+
3234
} // html
3335

3436
//------------------------------------------------

src/lib/Gen/html/HTMLGenerator.hpp

+5
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ class HTMLGenerator
2626
{
2727
public:
2828
HTMLGenerator();
29+
30+
std::string
31+
toString(
32+
hbs::HandlebarsCorpus const&,
33+
doc::Node const&) const override;
2934
};
3035

3136
} // html

0 commit comments

Comments
 (0)