diff options
Diffstat (limited to 'ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters')
3 files changed, 212 insertions, 0 deletions
diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/HtmlFormatter.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/HtmlFormatter.cs new file mode 100644 index 0000000..c557199 --- /dev/null +++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/HtmlFormatter.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +namespace CsvHelper.DocsGenerator.Formatters +{ + public class HtmlFormatter + { + public string Format(Type type, bool generateLinks = false, bool isCodeBlock = false) + { + var symbols = isCodeBlock ? Symbols.Code : Symbols.Html; + + var @namespace = type.Namespace; + var name = type.Name; + + if (type.IsByRef) + { + name = name.TrimEnd('&'); + } + + if (generateLinks) + { + if (@namespace.StartsWith("CsvHelper")) + { + name = $"[{name}](/api/{@namespace}/{name})"; + } + else + { + name = $"[{name}](https://docs.microsoft.com/en-us/dotnet/api/{@namespace.ToLower()}.{name.ToLower()})"; + } + } + + var genericArgumentsText = string.Empty; + var genericArguments = type.GetGenericArguments().ToList(); + if (genericArguments.Count > 0) + { + name = name.Substring(0, name.IndexOf('`')); + genericArgumentsText = $"{symbols["<"]}{string.Join(", ", genericArguments.Select(a => Format(a)))}{symbols[">"]}"; + } + + return $"{name}{genericArgumentsText}"; + } + + public string Format(MethodBase methodInfo, bool generateLinks = false, bool isCodeBlock = false) + { + var symbols = isCodeBlock ? Symbols.Code : Symbols.Html; + + var @namespace = methodInfo.DeclaringType.Namespace; + var typeName = methodInfo.DeclaringType.Name; + var methodName = methodInfo.Name; + + var name = methodInfo.IsConstructor ? typeName : methodName; + + var genericArgumentsText = string.Empty; + var genericArguments = new List<Type>(); + if (!methodInfo.IsConstructor) + { + genericArguments = methodInfo.GetGenericArguments().ToList(); + if (genericArguments.Count > 0) + { + genericArgumentsText = $"{symbols["<"]}{string.Join(", ", genericArguments.Select(a => Format(a)))}{symbols[">"]}"; + } + } + + var parametersText = string.Empty; + var parameters = methodInfo.GetParameters().ToList(); + if (parameters.Count > 0) + { + var typeGenericArguments = methodInfo.DeclaringType.GetGenericArguments(); + + parametersText = string.Join(", ", parameters.Select(p => + { + // Don't generate links if the type is a generic parameter. + var shouldGenerateLinks = generateLinks && + !( + typeGenericArguments.Any(a => $"{a.Namespace}.{a.Name}" == $"{p.ParameterType.Namespace}.{p.ParameterType.Name}") || + genericArguments.Any(a => $"{a.Namespace}.{a.Name}" == $"{p.ParameterType.Namespace}.{p.ParameterType.Name}") + ); + + var outText = p.IsOut ? "out " : string.Empty; + return $"{outText}{Format(p.ParameterType, shouldGenerateLinks)}"; + })); + } + + return $"{name}{genericArgumentsText}({parametersText})"; + } + + public string Format(MemberInfo memberInfo, bool generateLinks = false, bool isCodeBlock = false) + { + return memberInfo.Name; + } + } +} diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/Symbols.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/Symbols.cs new file mode 100644 index 0000000..52b4846 --- /dev/null +++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/Symbols.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using System.Linq; + +namespace CsvHelper.DocsGenerator.Formatters +{ + public static class Symbols + { + public static readonly Dictionary<string, string> Html = new Dictionary<string, string> + { + { "<", "<" }, + { ">", ">" }, + { "[", "[" }, + { "]", "]" } + }; + + public static readonly Dictionary<string, string> Code = new Dictionary<string, string>(Html.Select(pair => new KeyValuePair<string, string>(pair.Key, pair.Key))); + } +} diff --git a/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/XmlDocFormatter.cs b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/XmlDocFormatter.cs new file mode 100644 index 0000000..5d24338 --- /dev/null +++ b/ThirdParty/CsvHelper-master/docs-src/CsvHelper.DocsGenerator/Formatters/XmlDocFormatter.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; + +namespace CsvHelper.DocsGenerator.Formatters +{ + public class XmlDocFormatter + { + public string Format(Type type) + { + return $"T:{FormatType(type)}"; + } + + public string Format(MethodBase methodInfo) + { + return $"M:{FormatMethod(methodInfo)}"; + } + + private string FormatType(Type type) + { + var @namespace = type.Namespace; + var name = type.Name; + + return $"{@namespace}.{name}"; + } + + private string FormatMethod(MethodBase methodInfo) + { + var typeText = FormatType(methodInfo.DeclaringType); + + var methodName = methodInfo.Name.Replace('.', '#'); + + var typeGenericArguments = methodInfo.DeclaringType.GetGenericArguments().ToList(); + + var methodGenericArguments = new List<Type>(); + if (!methodInfo.IsConstructor) + { + methodGenericArguments = methodInfo.GetGenericArguments().ToList(); + if (methodGenericArguments.Count > 0) + { + methodName = $"{methodName}``{methodGenericArguments.Count}"; + } + } + + var parametersText = string.Empty; + var parameters = methodInfo.GetParameters().ToList(); + if (parameters.Count > 0) + { + parametersText = $"({string.Join(",", parameters.Select(p => FormatParameter(p.ParameterType, typeGenericArguments, methodGenericArguments)))})"; + } + + return $"{typeText}.{methodName}{parametersText}"; + } + + private string FormatParameter(Type parameterType, List<Type> typeGenericParameters, List<Type> methodGenericParameters) + { + var @namespace = parameterType.Namespace; + var name = parameterType.Name; + + if (parameterType.IsByRef) + { + name = name.TrimEnd('&'); + } + + var typeName = $"{@namespace}.{name}"; + + // Check if the parameter is a generic argument of a type. + var index = typeGenericParameters.FindIndex(t => $"{t.Namespace}.{t.Name}" == typeName); + if (index >= 0) + { + var refText = parameterType.IsByRef ? "@" : string.Empty; + return $"`{index}{refText}"; + } + + // Check if the parameter is a generic argument of a method. + index = methodGenericParameters.FindIndex(t => $"{t.Namespace}.{t.Name}" == typeName); + if (index >= 0) + { + var refText = parameterType.IsByRef ? "@" : string.Empty; + return $"``{index}{refText}"; + } + + var genericArgumentsText = string.Empty; + var genericArguments = parameterType.GetGenericArguments().ToList(); + if (genericArguments.Count > 0) + { + name = name.Substring(0, name.IndexOf('`')); + genericArgumentsText = $"{{{string.Join(",", genericArguments.Select(a => FormatParameter(a, typeGenericParameters, methodGenericParameters)))}}}"; + } + + if (parameterType.IsByRef) + { + name += "@"; + } + + return $"{@namespace}.{name}{genericArgumentsText}"; + } + } +} |