AI: markdown-to-C# converter for StarSystem and SystemMastery

This commit is contained in:
2026-09-29 18:21:21 +00:00
parent a7f5935b39
commit 3ee8532539
@@ -0,0 +1,45 @@
using System.Text.RegularExpressions;
using ZeroSpace.Model;
namespace ZeroSpace.Web.Services;
public static partial class ZeroSpaceLinks
{
private static readonly IReadOnlyDictionary<string, string> SystemUrls = StarSystems.All
.ToDictionary(static system => system.Name, static system => $"/StarSystem/{system.Id}", StringComparer.OrdinalIgnoreCase);
private static readonly IReadOnlyDictionary<string, string> MasteryUrls = SystemMasteries.All
.ToDictionary(static mastery => mastery.Name, static mastery => $"/SystemMastery/{mastery.Id}", StringComparer.OrdinalIgnoreCase);
public static string? UrlFor(string name)
{
if (SystemUrls.TryGetValue(name, out var systemUrl))
{
return systemUrl;
}
return MasteryUrls.TryGetValue(name, out var masteryUrl) ? masteryUrl : null;
}
public static string ResolveWikiLinks(string markdown)
{
return WikiLinkPattern().Replace(markdown, match =>
{
var name = match.Groups[1].Value.Trim();
var url = UrlFor(name);
return url is null ? name : $"[{name}]({url})";
});
}
public static string Humanize(string camelCase)
{
var spaced = CamelCasePattern().Replace(camelCase, " ");
return spaced.Length == 0 ? spaced : char.ToUpperInvariant(spaced[0]) + spaced[1..];
}
[GeneratedRegex(@"\[\[([^\]]+)\]\]")]
private static partial Regex WikiLinkPattern();
[GeneratedRegex("(?<=[a-z0-9])(?=[A-Z])")]
private static partial Regex CamelCasePattern();
}