126 lines
4.6 KiB
C#
126 lines
4.6 KiB
C#
using ResourceString.Net.Logic.DomainObjects.Resx;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace ResourceString.Net.Logic.Factories;
|
|
|
|
internal static class CodeSnippetFactory
|
|
{
|
|
public static IResourceString CreateResourceMangerMemberCodeSnippet(string typeName)
|
|
{
|
|
return Properties.Resources.ResourceManagerMemberTemplate.From(
|
|
LiteralString.Factory(typeName)
|
|
);
|
|
}
|
|
|
|
public static IEnumerable<IResourceString> CreateMemberCodeSnippets(IEnumerable<Resource> resources)
|
|
{
|
|
return CreateMemberCodeSnippets(
|
|
resources,
|
|
Properties.Resources.DefaultPropertyName_ResourceManager
|
|
);
|
|
}
|
|
|
|
public static IEnumerable<IResourceString> CreateMemberCodeSnippets(
|
|
IEnumerable<Resource> resources,
|
|
IResourceString resourceManagerName
|
|
)
|
|
{
|
|
if (resources is null)
|
|
{
|
|
return Enumerable.Empty<IResourceString>();
|
|
}
|
|
|
|
var stringResourses = resources.Where(r => r.Type.Match(
|
|
v => typeof(string).IsAssignableFrom(Type.GetType(v.Trim(), false, true)),
|
|
() => true
|
|
));
|
|
|
|
return stringResourses.Select(r =>
|
|
{
|
|
var openBraces = r.Value
|
|
.Replace("{{", string.Empty)
|
|
.Replace("{{", string.Empty)
|
|
.Split('{')
|
|
.Skip(1)
|
|
.ToArray();
|
|
|
|
if (openBraces.Any())
|
|
{
|
|
var formatNames = new System.Collections.Generic.HashSet<string>(
|
|
openBraces.Select(b => b.Split('}').First())
|
|
);
|
|
|
|
var resolveParameterNames = r.Comment.Match(
|
|
c => c.Split(',')
|
|
.Select(str => str.Split('='))
|
|
.Where(parts => parts.Count() == 2)
|
|
.Select(parts => (
|
|
parts.First().Trim().Trim('{', '}').Split(' ').First(),
|
|
parts.Last().Trim().Split(' ').First()
|
|
)).Where(t => uint.TryParse(t.Item1, out var _))
|
|
.GroupBy(t => t.Item1)
|
|
.ToDictionary(k => k.Key, v => v.First().Item2),
|
|
() => new Dictionary<string, string>()
|
|
);
|
|
|
|
var parameterNames = formatNames.Select(
|
|
n => resolveParameterNames.TryGetValue(n.Trim(), out var paramName)
|
|
? paramName.Substring(0, 1).ToLower() + paramName.Substring(1)
|
|
: uint.TryParse(n, out var value) ? $"p{value + 1}" : n
|
|
).ToArray();
|
|
|
|
var from = Properties.Resources.ResourceFormatClassFromMethod.From(
|
|
new JoinedResourceString(
|
|
LiteralString.Factory(", "),
|
|
parameterNames.Select(n => LiteralString.Factory($"{nameof(IResourceString)} {n}")).ToArray()
|
|
),
|
|
new JoinedResourceString(
|
|
LiteralString.Factory($",{System.Environment.NewLine} "),
|
|
parameterNames.Select(n => LiteralString.Factory($"{n}")).ToArray()
|
|
)
|
|
);
|
|
return Properties.Resources.ResourceFormatClassMembers.From(
|
|
LiteralString.Factory(r.Name), resourceManagerName, from
|
|
);
|
|
}
|
|
return Properties.Resources.ResourceStringMembers.From(
|
|
LiteralString.Factory(r.Name), resourceManagerName
|
|
);
|
|
});
|
|
}
|
|
|
|
public static IResourceString CreateResourceClassCodeSnippet(
|
|
string namespaceString,
|
|
string resourceClassName,
|
|
IResourceString resourceManagerSnippet,
|
|
IEnumerable<IResourceString> memberSnippets
|
|
)
|
|
{
|
|
return Properties.Resources.ResourcesClassTemplate.From(
|
|
LiteralString.Factory(namespaceString),
|
|
LiteralString.Factory(resourceClassName),
|
|
resourceManagerSnippet,
|
|
new JoinedResourceString(
|
|
LiteralString.Empty,
|
|
memberSnippets?.ToArray() ?? Array.Empty<IResourceString>()
|
|
)
|
|
);
|
|
}
|
|
|
|
public static IResourceString CreateResourceClassCodeSnippet(
|
|
string namespaceString,
|
|
string resourceClassName,
|
|
IResourceString resourceManagerSnippet,
|
|
IEnumerable<Resource> resources
|
|
)
|
|
{
|
|
return CreateResourceClassCodeSnippet(
|
|
namespaceString,
|
|
resourceClassName,
|
|
resourceManagerSnippet,
|
|
CreateMemberCodeSnippets(resources)
|
|
);
|
|
}
|
|
} |