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 @@
+