diff --git a/src/Elastic.Markdown/Helpers/SlugExtensions.cs b/src/Elastic.Markdown/Helpers/SlugExtensions.cs index 85816fc16..fa2edefef 100644 --- a/src/Elastic.Markdown/Helpers/SlugExtensions.cs +++ b/src/Elastic.Markdown/Helpers/SlugExtensions.cs @@ -8,8 +8,18 @@ namespace Elastic.Markdown.Helpers; public static class SlugExtensions { - private static readonly SlugHelper Instance = new(); + private static readonly SlugHelper Instance = InitSlugHelper(); + private static readonly SlugHelper InstanceWithDots = InitSlugHelper(true); - public static string Slugify(this string? text) => Instance.GenerateSlug(text); + private static SlugHelper InitSlugHelper(bool allowDots = false) + { + var config = new SlugHelperConfiguration(); + if (!allowDots) + _ = config.AllowedChars.Remove('.'); + return new SlugHelper(config); + } + public static string Slugify(this string? text, bool allowDots = false) => allowDots + ? InstanceWithDots.GenerateSlug(text) + : Instance.GenerateSlug(text); } diff --git a/src/Elastic.Markdown/Myst/SectionedHeadingRenderer.cs b/src/Elastic.Markdown/Myst/SectionedHeadingRenderer.cs index ae4a4e4e0..2efab2d23 100644 --- a/src/Elastic.Markdown/Myst/SectionedHeadingRenderer.cs +++ b/src/Elastic.Markdown/Myst/SectionedHeadingRenderer.cs @@ -37,6 +37,8 @@ protected override void Write(HtmlRenderer renderer, HeadingBlock obj) slugTarget = HeadingAnchorParser.InlineAnchors().Replace(slugTarget, ""); var slug = slugTarget.Slugify(); + if (anchor != null || slugTarget.Contains('$')) + slug = slugTarget.Slugify(true); _ = renderer.Write(@"