diff --git a/OngekiFumenEditor/Kernel/ArgProcesser/DefaultImp/DefaultArgProcessManager.cs b/OngekiFumenEditor/Kernel/ArgProcesser/DefaultImp/DefaultArgProcessManager.cs index 84d30ecf..03566018 100644 --- a/OngekiFumenEditor/Kernel/ArgProcesser/DefaultImp/DefaultArgProcessManager.cs +++ b/OngekiFumenEditor/Kernel/ArgProcesser/DefaultImp/DefaultArgProcessManager.cs @@ -152,12 +152,9 @@ private async Task ProcessConvertCommand(FumenConvertOption opt) if (CheckRelativePaths(opt.InputFumenFilePath, opt.OutputFumenFilePath)) return; - var converter = IoC.Get(); - var parserManager = IoC.Get(); - var result = await FumenConverterWrapper.Generate(opt); if (!result.IsSuccess) { - await Console.Error.WriteLineAsync($"{Resources.ConvertFail}: {result.Message}"); + await Console.Error.WriteLineAsync($"{Resources.ConvertFail} {result.Message}"); Exit(1); return; } @@ -179,7 +176,7 @@ private async Task ProcessJacketCommand(JacketGenerateOption arg) } if (!result.IsSuccess) { - await Console.Error.WriteLineAsync($"Failed to generate jacket: {result.Message}"); + await Console.Error.WriteLineAsync($"{Resources.GenerateJacketFileFail} {result.Message}"); Exit(1); return; } @@ -201,7 +198,7 @@ private async Task ProcessAcbCommand(AcbGenerateOption arg) } if (!result.IsSuccess) { - await Console.Error.WriteLineAsync($"Failed to generate audio: {result.Message}"); + await Console.Error.WriteLineAsync($"{Resources.GenerateAudioFileFail} {result.Message}"); Exit(1); return; } diff --git a/OngekiFumenEditor/Modules/FumenConverter/FumenConvertOption.cs b/OngekiFumenEditor/Modules/FumenConverter/FumenConvertOption.cs index 6de36a93..6872cffa 100644 --- a/OngekiFumenEditor/Modules/FumenConverter/FumenConvertOption.cs +++ b/OngekiFumenEditor/Modules/FumenConverter/FumenConvertOption.cs @@ -6,8 +6,11 @@ namespace OngekiFumenEditor.Modules.FumenConverter; public class FumenConvertOption { [LocalizableOptionBinding("inputFile", nameof(Resources.ProgramOptionInputFile), default, Require = true)] - public string InputFumenFilePath { get; set; } - + public string InputFumenFilePath { get; set; } + [LocalizableOptionBinding("outputFile", nameof(Resources.ProgramOptionOutputFile), default, Require = true)] public string OutputFumenFilePath { get; set; } + + [LocalizableOptionBinding("standardize", nameof(Resources.ProgramOptionStandardizeFumen), default)] + public bool IsStandarizeFumen { get; set; } = false; } \ No newline at end of file diff --git a/OngekiFumenEditor/Modules/FumenConverter/Kernel/FumenConverterWrapper.cs b/OngekiFumenEditor/Modules/FumenConverter/Kernel/FumenConverterWrapper.cs index 805c2062..6efa9343 100644 --- a/OngekiFumenEditor/Modules/FumenConverter/Kernel/FumenConverterWrapper.cs +++ b/OngekiFumenEditor/Modules/FumenConverter/Kernel/FumenConverterWrapper.cs @@ -7,6 +7,7 @@ using OngekiFumenEditor.Parser; using OngekiFumenEditor.Parser.DefaultImpl; using OngekiFumenEditor.Properties; +using OngekiFumenEditor.Utils.Ogkr; namespace OngekiFumenEditor.Modules.FumenConverter.Kernel; @@ -35,6 +36,19 @@ public static async Task Generate(FumenConvertOption option, Ong if (string.IsNullOrWhiteSpace(option.OutputFumenFilePath)) return new(false, Resources.OutputFumenFileNotSelect); + if (option.IsStandarizeFumen) { + if (Path.GetExtension(option.OutputFumenFilePath) != ".ogkr") { + return new(false, Resources.OutputFumenStandardizeFormatNotSupported); + } + + var res = await StandardizeFormat.Process(fumen); + if (!res.IsSuccess) { + return new(false, res.Message); + } + + fumen = res.SerializedFumen; + } + var converter = IoC.Get(); try { var output = await converter.ConvertFumenAsync(fumen, option.OutputFumenFilePath); diff --git a/OngekiFumenEditor/Properties/Resources.Designer.cs b/OngekiFumenEditor/Properties/Resources.Designer.cs index b30244a6..1c542a4a 100644 --- a/OngekiFumenEditor/Properties/Resources.Designer.cs +++ b/OngekiFumenEditor/Properties/Resources.Designer.cs @@ -1,4 +1,4 @@ -//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ // // 此代码由工具生成。 // 运行时版本:4.0.30319.42000 @@ -2122,7 +2122,7 @@ public static string GenerateAssemblyFileFail { } /// - /// 查找类似 Generate audio file failed: 的本地化字符串。 + /// 查找类似 Failed to generate audio file: 的本地化字符串。 /// public static string GenerateAudioFileFail { get { @@ -2140,7 +2140,7 @@ public static string GenerateAudioSuccess { } /// - /// 查找类似 Generate jacket files fail: 的本地化字符串。 + /// 查找类似 Failed to generate jacket files: 的本地化字符串。 /// public static string GenerateJacketFileFail { get { @@ -3138,6 +3138,15 @@ public static string OutputFumenNotSupport { } } + /// + /// 查找类似 Cannot standardize for the selected output format 的本地化字符串。 + /// + public static string OutputFumenStandardizeFormatNotSupported { + get { + return ResourceManager.GetString("OutputFumenStandardizeFormatNotSupported", resourceCulture); + } + } + /// /// 查找类似 Output OpenGL logs (may affect performance, and errors will be thrown as exceptions) 的本地化字符串。 /// @@ -3453,6 +3462,15 @@ public static string ProgramOptionPreviewEnd { } } + /// + /// 查找类似 standardize the fumen output (only for .ogkr) 的本地化字符串。 + /// + public static string ProgramOptionStandardizeFumen { + get { + return ResourceManager.GetString("ProgramOptionStandardizeFumen", resourceCulture); + } + } + /// /// 查找类似 maximum X grid bounds 的本地化字符串。 /// diff --git a/OngekiFumenEditor/Properties/Resources.resx b/OngekiFumenEditor/Properties/Resources.resx index 06078585..818dcdd9 100644 --- a/OngekiFumenEditor/Properties/Resources.resx +++ b/OngekiFumenEditor/Properties/Resources.resx @@ -793,13 +793,13 @@ Generate .dll file fail: - Generate audio file failed: + Failed to generate audio file: Generate audio file successfully, open output folder? - Generate jacket files fail: + Failed to generate jacket files: Generate jacket files successfully, open output folder? @@ -1665,4 +1665,10 @@ Save + + standardize the fumen output (only for .ogkr) + + + Cannot standardize for the selected output format + \ No newline at end of file