/// <summary> /// 文字列の定数の一覧を返す関数の中身のコードを生成して返します /// </summary> private static string GetGetValuesContents(ConstStringCodeGeneratorOptions options) { var builder = new StringBuilder(); foreach (var element in options.Elements) { var name = element.Name; builder.Append("\t\t\t").AppendFormat(@"yield return {0};", name).AppendLine(); } return(builder.ToString().TrimEnd()); }
/// <summary> /// コードを生成します /// </summary> public static void Create(string codeTemplate, string outputAssetPath) { var labels = AddressableAssetSettingsDefaultObject.Settings.GetLabels(); var values = labels .Where(x => !string.IsNullOrWhiteSpace(x)) .Select ( x => new ConstStringCodeGeneratorOptions.Element { Name = x.ToUpper(), Comment = x, Value = x, } ) .ToArray() ; var options = new ConstStringCodeGeneratorOptions { Template = codeTemplate, Elements = values, }; var code = ConstStringCodeGenerator .Generate(options) .Replace("\t", " ") .Replace("\r\n", "#NEW_LINE#") .Replace("\r", "#NEW_LINE#") .Replace("\n", "#NEW_LINE#") .Replace("#NEW_LINE#", "\r\n") ; ConstStringCodeGenerator.Write(outputAssetPath, code); AssetDatabase.Refresh(); var filename = Path.GetFileName(outputAssetPath); var asset = AssetDatabase.LoadAssetAtPath <TextAsset>(outputAssetPath); EditorUtility.DisplayDialog ( AddressablesLabelConstCreatorSettings.PACKAGE_NAME, $"{filename} の作成が完了しました。", "OK" ); EditorGUIUtility.PingObject(asset); }
/// <summary> /// 文字列の定数のコードを表現する文字列を生成して返します /// </summary> public static string Generate(ConstStringCodeGeneratorOptions options) { var template = options.Template; var namespaceName = options.NamespaceName; var className = options.ClassName; var classComment = options.ClassComment; var length = options.Elements.Length; var values = GetValuesText(options); var getValuesContents = GetGetValuesContents(options); var output = template; output = output.Replace(TAG_NAMESPACE_NAME, namespaceName); output = output.Replace(TAG_CLASS_NAME, className); output = output.Replace(TAG_CLASS_COMMENT, classComment); output = output.Replace(TAG_VALUES, values); output = output.Replace(TAG_LENGTH, length.ToString()); output = output.Replace(TAG_GET_VALUES_CONTENTS, getValuesContents); return(output); }
/// <summary> /// 文字列の定数の要素を定義するコードを生成して返します /// </summary> private static string GetValuesText(ConstStringCodeGeneratorOptions options) { var builder = new StringBuilder(); foreach (var element in options.Elements) { var comment = element.Comment; var name = element.Name; var value = element.Value; // コメントが複数行の場合も考慮 builder.Append("\t\t").AppendLine("///<summary>"); foreach (var n in comment.Split('\n')) { builder.Append("\t\t").AppendFormat("///<para>{0}</para>", n).AppendLine(); } builder.Append("\t\t").AppendLine("///</summary>"); builder.Append("\t\t").AppendFormat(@"public const string {0} = ""{1}"";", name, value).AppendLine(); } return(builder.ToString().TrimEnd()); }
//================================================================================ // 関数(static) //================================================================================ /// <summary> /// 指定されたパスに文字列の定数のコードを書き込みます /// </summary> public static void Write(string path, ConstStringCodeGeneratorOptions options) { var code = Generate(options); Write(path, code); }