using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
internal static class Utils
{
public static string PascalToCamel (string pascalCase)
{
if (string.IsNullOrEmpty (pascalCase))
return pascalCase;
// 已经是小驼峰或首字母小写,直接返回
if (char.IsLower (pascalCase [0]))
return pascalCase;
// 按大写字母边界拆分单词(处理连续大写字母作为一个单词)
// 正则解释:
// (?<=[a-z])(?=[A-Z]) 小写后跟大写 -> 分割
// | 或
// (?<=[A-Z])(?=[A-Z][a-z]) 大写后跟大写+小写(如 XMLR 中的 X 和 MLR)-> 分割
string [] words = Regex.Split (pascalCase, @"(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])");
StringBuilder result = new StringBuilder ();
for (int i = 0; i < words.Length; i++)
{
string word = words [i];
if (string.IsNullOrEmpty (word))
continue;
if (i == 0)
{
// 第一个单词:全部转为小写
result.Append (word.ToLowerInvariant ());
}
else
{
// 后续单词:首字母大写,其余小写
result.Append (char.ToUpperInvariant (word [0]));
if (word.Length > 1)
result.Append (word.Substring (1).ToLowerInvariant ());
}
}
return result.ToString ();
}
///
/// 表示应用清单中用于定义文件/资源路径的属性名称
///
public static readonly List AppFileProperties = new List
{
"Executable",
"LockScreenLogo",
"Logo",
"SmallLogo",
"Square150x150Logo",
"Square30x30Logo",
"Square310x310Logo",
"Square44x44Logo",
"Square70x70Logo",
"Square71x71Logo",
"StartPage",
"Tall150x310Logo",
"WideLogo",
"Wide310x150Logo"
};
}