From 76f139f8132bba447a589cc7eecd190df1428755 Mon Sep 17 00:00:00 2001 From: alandefreitas Date: Mon, 25 Nov 2024 21:02:03 -0300 Subject: [PATCH 1/3] fix: HTML anchors are unescaped --- .../addons/generator/html/partials/symbols/alias.html.hbs | 2 +- .../addons/generator/html/partials/symbols/concept.html.hbs | 2 +- .../mrdocs/addons/generator/html/partials/symbols/enum.html.hbs | 2 +- .../addons/generator/html/partials/symbols/enumerator.html.hbs | 2 +- .../addons/generator/html/partials/symbols/field.html.hbs | 2 +- .../addons/generator/html/partials/symbols/friend.html.hbs | 2 +- .../addons/generator/html/partials/symbols/function.html.hbs | 2 +- .../addons/generator/html/partials/symbols/guide.html.hbs | 2 +- .../addons/generator/html/partials/symbols/namespace.html.hbs | 2 +- .../addons/generator/html/partials/symbols/record.html.hbs | 2 +- .../addons/generator/html/partials/symbols/typedef.html.hbs | 2 +- .../addons/generator/html/partials/symbols/using.html.hbs | 2 +- .../addons/generator/html/partials/symbols/variable.html.hbs | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/share/mrdocs/addons/generator/html/partials/symbols/alias.html.hbs b/share/mrdocs/addons/generator/html/partials/symbols/alias.html.hbs index 74cb773cb3..2a4af74f29 100644 --- a/share/mrdocs/addons/generator/html/partials/symbols/alias.html.hbs +++ b/share/mrdocs/addons/generator/html/partials/symbols/alias.html.hbs @@ -1,5 +1,5 @@ {{!-- alias --}} -
+

{{>types/nested-name-specifier symbol=symbol.parent}}{{symbol.name}}

{{{symbol.doc.brief}}} diff --git a/share/mrdocs/addons/generator/html/partials/symbols/concept.html.hbs b/share/mrdocs/addons/generator/html/partials/symbols/concept.html.hbs index 9474a70121..c66c717f97 100644 --- a/share/mrdocs/addons/generator/html/partials/symbols/concept.html.hbs +++ b/share/mrdocs/addons/generator/html/partials/symbols/concept.html.hbs @@ -1,5 +1,5 @@ {{!-- concept --}} -
+

{{>types/nested-name-specifier symbol=symbol.parent includeNamespace=true}}{{symbol.name}}

{{{symbol.doc.brief}}} diff --git a/share/mrdocs/addons/generator/html/partials/symbols/enum.html.hbs b/share/mrdocs/addons/generator/html/partials/symbols/enum.html.hbs index 47e1cbd707..76661f9866 100644 --- a/share/mrdocs/addons/generator/html/partials/symbols/enum.html.hbs +++ b/share/mrdocs/addons/generator/html/partials/symbols/enum.html.hbs @@ -1,5 +1,5 @@ {{!-- enum --}} -
+

{{#if symbol.name}}Enum {{>types/nested-name-specifier symbol=symbol.parent}}{{symbol.name}}{{else}}Unnamed enum{{/if}}

{{{symbol.doc.brief}}} diff --git a/share/mrdocs/addons/generator/html/partials/symbols/enumerator.html.hbs b/share/mrdocs/addons/generator/html/partials/symbols/enumerator.html.hbs index 0e562f6536..ed28a9cc1d 100644 --- a/share/mrdocs/addons/generator/html/partials/symbols/enumerator.html.hbs +++ b/share/mrdocs/addons/generator/html/partials/symbols/enumerator.html.hbs @@ -1,5 +1,5 @@ {{!-- enumerator --}} -
+

Enumerator {{>types/nested-name-specifier symbol=symbol.parent}}{{symbol.name}}

{{{symbol.doc.brief}}} diff --git a/share/mrdocs/addons/generator/html/partials/symbols/field.html.hbs b/share/mrdocs/addons/generator/html/partials/symbols/field.html.hbs index 481bf60d4a..739b820190 100644 --- a/share/mrdocs/addons/generator/html/partials/symbols/field.html.hbs +++ b/share/mrdocs/addons/generator/html/partials/symbols/field.html.hbs @@ -1,5 +1,5 @@ {{!-- field --}} -
+

{{>types/nested-name-specifier symbol=symbol.parent}}{{symbol.name}}

{{{symbol.doc.brief}}} diff --git a/share/mrdocs/addons/generator/html/partials/symbols/friend.html.hbs b/share/mrdocs/addons/generator/html/partials/symbols/friend.html.hbs index a7549cd2dc..029d0d12ce 100644 --- a/share/mrdocs/addons/generator/html/partials/symbols/friend.html.hbs +++ b/share/mrdocs/addons/generator/html/partials/symbols/friend.html.hbs @@ -1,5 +1,5 @@ {{!-- friend --}} -
+

Friend {{#if symbol.symbol}}{{symbol.symbol.name}}{{else}}{{symbol.type.name}}{{/if}}

{{{symbol.doc.brief}}} diff --git a/share/mrdocs/addons/generator/html/partials/symbols/function.html.hbs b/share/mrdocs/addons/generator/html/partials/symbols/function.html.hbs index e73ae70987..682824c86f 100644 --- a/share/mrdocs/addons/generator/html/partials/symbols/function.html.hbs +++ b/share/mrdocs/addons/generator/html/partials/symbols/function.html.hbs @@ -1,5 +1,5 @@ {{!-- function --}} -
+

Function {{>types/nested-name-specifier symbol=symbol.parent}}{{symbol.name}}

{{{symbol.doc.brief}}} diff --git a/share/mrdocs/addons/generator/html/partials/symbols/guide.html.hbs b/share/mrdocs/addons/generator/html/partials/symbols/guide.html.hbs index 2946d69c18..9826a669b1 100644 --- a/share/mrdocs/addons/generator/html/partials/symbols/guide.html.hbs +++ b/share/mrdocs/addons/generator/html/partials/symbols/guide.html.hbs @@ -1,5 +1,5 @@ {{!-- guides --}} -
+

Deduction guide {{>types/nested-name-specifier symbol=symbol.parent}}{{symbol.name}}

{{{symbol.doc.brief}}} diff --git a/share/mrdocs/addons/generator/html/partials/symbols/namespace.html.hbs b/share/mrdocs/addons/generator/html/partials/symbols/namespace.html.hbs index 43de63bda5..2436f6c571 100644 --- a/share/mrdocs/addons/generator/html/partials/symbols/namespace.html.hbs +++ b/share/mrdocs/addons/generator/html/partials/symbols/namespace.html.hbs @@ -1,5 +1,5 @@ {{!-- namespace --}} -
+

{{#if symbol.name}}Namespace {{>types/nested-name-specifier symbol=symbol.parent}}{{symbol.name}}{{else if symbol.parent}}Unnamed namespace{{else}}Global namespace{{/if}}

diff --git a/share/mrdocs/addons/generator/html/partials/symbols/record.html.hbs b/share/mrdocs/addons/generator/html/partials/symbols/record.html.hbs index cdea000515..effd6a64e6 100644 --- a/share/mrdocs/addons/generator/html/partials/symbols/record.html.hbs +++ b/share/mrdocs/addons/generator/html/partials/symbols/record.html.hbs @@ -1,5 +1,5 @@ {{!-- record --}} -
+

{{#if symbol.name}}Class {{>types/nested-name-specifier symbol=symbol.parent}}{{symbol.name}}{{else}}Unnamed class{{/if}}

{{{symbol.doc.brief}}} diff --git a/share/mrdocs/addons/generator/html/partials/symbols/typedef.html.hbs b/share/mrdocs/addons/generator/html/partials/symbols/typedef.html.hbs index 3d8fa678ea..51567149e8 100644 --- a/share/mrdocs/addons/generator/html/partials/symbols/typedef.html.hbs +++ b/share/mrdocs/addons/generator/html/partials/symbols/typedef.html.hbs @@ -1,5 +1,5 @@ {{!-- typedef --}} -
+

{{>types/nested-name-specifier symbol=symbol.parent}}{{symbol.name}}

{{{symbol.doc.brief}}} diff --git a/share/mrdocs/addons/generator/html/partials/symbols/using.html.hbs b/share/mrdocs/addons/generator/html/partials/symbols/using.html.hbs index b63c0fdb4f..a5f9756d96 100644 --- a/share/mrdocs/addons/generator/html/partials/symbols/using.html.hbs +++ b/share/mrdocs/addons/generator/html/partials/symbols/using.html.hbs @@ -1,5 +1,5 @@ {{!-- symbols/using.html.hbs --}} -
+

Using {{#if (eq symbol.class "namespace")}}Directive: {{symbol.qualifier.name}}{{else}}Declaration: {{symbol.name}}{{/if}}

{{{symbol.doc.brief}}} diff --git a/share/mrdocs/addons/generator/html/partials/symbols/variable.html.hbs b/share/mrdocs/addons/generator/html/partials/symbols/variable.html.hbs index cf5bb15466..0d68f9f086 100644 --- a/share/mrdocs/addons/generator/html/partials/symbols/variable.html.hbs +++ b/share/mrdocs/addons/generator/html/partials/symbols/variable.html.hbs @@ -1,5 +1,5 @@ {{!-- variable --}} -
+

{{>types/nested-name-specifier symbol=symbol.parent}}{{symbol.name}}

{{{symbol.doc.brief}}} From 12ea8359a27f368f0bbfe75665d2127f20895558 Mon Sep 17 00:00:00 2001 From: alandefreitas Date: Mon, 25 Nov 2024 21:14:34 -0300 Subject: [PATCH 2/3] fix: overload set overview is unescaped --- .../adoc/layouts/index-overload-set.adoc.hbs | 14 +++++++------- .../html/layouts/index-overload-set.html.hbs | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/share/mrdocs/addons/generator/adoc/layouts/index-overload-set.adoc.hbs b/share/mrdocs/addons/generator/adoc/layouts/index-overload-set.adoc.hbs index 591c185d8c..07f9e6b0c5 100644 --- a/share/mrdocs/addons/generator/adoc/layouts/index-overload-set.adoc.hbs +++ b/share/mrdocs/addons/generator/adoc/layouts/index-overload-set.adoc.hbs @@ -6,7 +6,7 @@ {{#if symbol.members.[0].doc.brief}} -{{symbol.members.[0].doc.brief}} +{{{symbol.members.[0].doc.brief}}} {{/if}} @@ -23,7 +23,7 @@ {{#if symbol.members.[0].doc.description}} =={{#unless @root.config.multipage}}={{/unless}} Description -{{symbol.members.[0].doc.description}} +{{{symbol.members.[0].doc.description}}} {{/if}} {{#with (flattenUnique symbol.members "doc.exceptions" "exception") as |allExceptions|}} @@ -35,7 +35,7 @@ {{#each allExceptions as |exception|}} | `{{exception.exception}}` -| {{exception.description}} +| {{{exception.description}}} {{/each}} |=== {{/if}} @@ -44,7 +44,7 @@ {{#if symbol.members.[0].doc.returns}} =={{#unless @root.config.multipage}}={{/unless}} Return Value -{{symbol.members.[0].doc.returns}} +{{{symbol.members.[0].doc.returns}}} {{/if}} @@ -67,7 +67,7 @@ =={{#unless @root.config.multipage}}={{/unless}} Preconditions {{#each symbol.members.[0].doc.preconditions}} -{{.}} +{{{.}}} {{/each}} {{/if}} @@ -76,7 +76,7 @@ =={{#unless @root.config.multipage}}={{/unless}} Postconditions {{#each symbol.members.[0].doc.postconditions}} -{{.}} +{{{.}}} {{/each}} {{/if}} @@ -85,7 +85,7 @@ =={{#unless @root.config.multipage}}={{/unless}} See Also {{#each symbol.members.[0].doc.see}} -{{.}} +{{{.}}} {{/each}} {{/if}} diff --git a/share/mrdocs/addons/generator/html/layouts/index-overload-set.html.hbs b/share/mrdocs/addons/generator/html/layouts/index-overload-set.html.hbs index 0153eb7694..d93852e01a 100644 --- a/share/mrdocs/addons/generator/html/layouts/index-overload-set.html.hbs +++ b/share/mrdocs/addons/generator/html/layouts/index-overload-set.html.hbs @@ -7,7 +7,7 @@ {{#each symbol.members as |member|}} -

{{member.doc.brief}}

+

{{{member.doc.brief}}}

{{> (concat 'signature' '/' (lookup member 'kind')) symbol=member}};
ยป more... From f8ec122461b30ede7dd36e6bd17e706cc9387733 Mon Sep 17 00:00:00 2001 From: alandefreitas Date: Mon, 25 Nov 2024 21:20:15 -0300 Subject: [PATCH 3/3] feat(Handlebars): concat helper variadic arguments --- src/lib/Support/Handlebars.cpp | 86 +++++++++++++++++++++++----------- 1 file changed, 59 insertions(+), 27 deletions(-) diff --git a/src/lib/Support/Handlebars.cpp b/src/lib/Support/Handlebars.cpp index 22a87bb71b..97a697c92b 100644 --- a/src/lib/Support/Handlebars.cpp +++ b/src/lib/Support/Handlebars.cpp @@ -4014,48 +4014,80 @@ at_fn(dom::Value range, dom::Value field, dom::Value options) } } -dom::Value -concat_fn( - dom::Value range1, - dom::Value sep, - dom::Value range2, - dom::Value options) +Expected +concat_fn(dom::Array const& arguments) { - auto isBlock = options.isUndefined() && static_cast(range2.get("fn")); + dom::Value options = arguments.back(); + dom::Value fn = options.get("fn"); + auto const isBlock = static_cast(fn); if (isBlock) { - options = range2; - range2 = sep; - sep = range1; - range1 = options.get("fn")(); + // Block overload: concatenate the contents of the + // block with the contents of the arguments as strings. + std::string str = static_cast(fn()); + for (std::size_t i = 0; i < arguments.size() - 1; ++i) + { + str += toString(arguments.get(i)); + } + return str; } - if (range1.isString() || range2.isString()) + // Check if we have at least one argument besides the options + if (arguments.size() == 1) { - return range1 + sep + range2; + return Unexpected(Error("#concat requires at least one argument")); } - else if (range1.isArray() && sep.isArray()) + + dom::Value firstArg = arguments.get(0); + + // Array overload: concatenate all arguments a single array. + if (firstArg.isArray()) { - options = range2; - range2 = sep; dom::Array res; - for (dom::Value item : range1.getArray()) + for (std::size_t i = 0; i < arguments.size() - 1; ++i) { - res.emplace_back(item); + dom::Value arg = arguments.get(i); + if (arg.isArray()) + { + for (dom::Value item : arg.getArray()) + { + res.emplace_back(item); + } + } + else + { + res.emplace_back(arg); + } } - for (dom::Value item : range2.getArray()) + return res; + } + + // Object overload: concatenate all arguments into a single object. + if (firstArg.isObject()) + { + dom::Object res = firstArg.getObject(); + for (std::size_t i = 1; i < arguments.size() - 1; ++i) { - res.emplace_back(item); + dom::Value arg = arguments.get(i); + if (arg.isObject()) + { + res = createFrame(arg.getObject(), res); + } + else + { + return Unexpected(Error("All arguments to #concat must be objects")); + } } return res; } - else if (range1.isObject() && sep.isObject()) + + // String overload: concatenate all arguments as strings. + std::string str; + for (std::size_t i = 0; i < arguments.size() - 1; ++i) { - options = range2; - range2 = sep; - return createFrame(range1.getObject(), range2.getObject()); + str += toString(arguments.get(i)); } - return range1 + range2; + return str; } std::int64_t @@ -5107,7 +5139,7 @@ registerStringHelpers(Handlebars& hbs) hbs.registerHelper("join", join_fn); hbs.registerHelper("implode", join_fn); - hbs.registerHelper("concat", dom::makeInvocable(concat_fn)); + hbs.registerHelper("concat", dom::makeVariadicInvocable(concat_fn)); static auto strip_fn = dom::makeVariadicInvocable([]( dom::Array const& arguments) @@ -6570,7 +6602,7 @@ registerContainerHelpers(Handlebars& hbs) return res2; })); - hbs.registerHelper("concat", dom::makeInvocable(concat_fn)); + hbs.registerHelper("concat", dom::makeVariadicInvocable(concat_fn)); static auto flatten_fn = dom::makeInvocable([](dom::Value const& collection, dom::Value const& key) -> dom::Value {