diff --git a/CaseConverter/CaseConverter.csproj b/CaseConverter/CaseConverter.csproj index d13b53f..98a58fa 100644 --- a/CaseConverter/CaseConverter.csproj +++ b/CaseConverter/CaseConverter.csproj @@ -59,6 +59,7 @@ + diff --git a/CaseConverter/Converters/SpacedPascalCaseConverter.cs b/CaseConverter/Converters/SpacedPascalCaseConverter.cs new file mode 100644 index 0000000..9dae555 --- /dev/null +++ b/CaseConverter/Converters/SpacedPascalCaseConverter.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; +using System.Globalization; +using System.Linq; +using CaseConverter.Utils; + +namespace CaseConverter.Converters +{ + /// + /// 文字列をスネークケースに変換するクラスです。 + /// + public class SpacedPascalCaseConverter : ICaseConverter + { + /// + public string Convert(IEnumerable words) + { + if (words == null) + { + return string.Empty; + } + + return string.Join(" ", words.Select(StringUtil.ToFirstUpper)); + } + } +} diff --git a/CaseConverter/Converters/StringCaseConverter.cs b/CaseConverter/Converters/StringCaseConverter.cs index f74510d..6653f04 100644 --- a/CaseConverter/Converters/StringCaseConverter.cs +++ b/CaseConverter/Converters/StringCaseConverter.cs @@ -21,7 +21,8 @@ public static class StringCaseConverter [StringCasePattern.SnakeCase] = new SnakeCaseConverter(), [StringCasePattern.PascalSnakeCase] = new PascalSnakeCaseConverter(), [StringCasePattern.ScreamingSnakeCase] = new ScreamingSnakeCaseConverter(), - [StringCasePattern.KebabCase] = new KebabCaseConverter() + [StringCasePattern.KebabCase] = new KebabCaseConverter(), + [StringCasePattern.SpacedPascalCase] = new SpacedPascalCaseConverter() }; /// @@ -84,6 +85,10 @@ internal static StringCasePattern GetCasePattern(string input) { return StringCasePattern.KebabCase; } + else if (input.Contains(' ')) + { + return StringCasePattern.SpacedPascalCase; + } else if (char.IsUpper(input[0])) { return 1 < input.Length && input.Skip(1).All(x => char.IsUpper(x)) ? StringCasePattern.ScreamingSnakeCase : StringCasePattern.PascalCase; diff --git a/CaseConverter/Converters/StringCasePattern.cs b/CaseConverter/Converters/StringCasePattern.cs index 9c76b8b..3350997 100644 --- a/CaseConverter/Converters/StringCasePattern.cs +++ b/CaseConverter/Converters/StringCasePattern.cs @@ -33,6 +33,11 @@ public enum StringCasePattern /// /// ケバブケースです。 /// - KebabCase + KebabCase, + + /// + /// スペースを含むパスカルケース。 + /// + SpacedPascalCase } } diff --git a/CaseConverter/Options/StringCasePatternConverter.cs b/CaseConverter/Options/StringCasePatternConverter.cs index 8465fa9..1816bfd 100644 --- a/CaseConverter/Options/StringCasePatternConverter.cs +++ b/CaseConverter/Options/StringCasePatternConverter.cs @@ -22,7 +22,8 @@ public class StringCasePatternConverter : EnumConverter [StringCasePattern.SnakeCase] = "snake_case", [StringCasePattern.PascalSnakeCase] = "Pascal_Snake_Case", [StringCasePattern.ScreamingSnakeCase] = "SCREAMING_SNAKE_CASE", - [StringCasePattern.KebabCase] = "kebab-case" + [StringCasePattern.KebabCase] = "kebab-case", + [StringCasePattern.SpacedPascalCase] = "Spaced Pascal Case" }; /// diff --git a/Test.CaseConverter/Converters/SpacedPascalCaseConverterTest.cs b/Test.CaseConverter/Converters/SpacedPascalCaseConverterTest.cs new file mode 100644 index 0000000..ddea015 --- /dev/null +++ b/Test.CaseConverter/Converters/SpacedPascalCaseConverterTest.cs @@ -0,0 +1,18 @@ +using CaseConverter.Converters; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace Test.CaseConverter.Converters +{ + /// + /// のテストクラスです。 + /// + [TestClass] + public class SpacedPascalCaseConverterTest : CaseConverterTestBase + { + [TestMethod] + public void ConvertTest() + { + ConvertTest("Hoge Fuga Piyo", "Hoge", "H"); + } + } +} diff --git a/Test.CaseConverter/Test.CaseConverter.csproj b/Test.CaseConverter/Test.CaseConverter.csproj index 29bc14d..a23c49b 100644 --- a/Test.CaseConverter/Test.CaseConverter.csproj +++ b/Test.CaseConverter/Test.CaseConverter.csproj @@ -59,6 +59,7 @@ +