diff --git a/lib/oto/commands/command.dart b/lib/oto/commands/command.dart index be77fae..238fa95 100644 --- a/lib/oto/commands/command.dart +++ b/lib/oto/commands/command.dart @@ -76,6 +76,8 @@ enum CommandType { SlackBuild, StringSub, StringReplace, + StringReplacePattern, + StringIndex, Jira, Zip, Shell, @@ -142,6 +144,8 @@ abstract class Command { CommandType.SlackBuild: () => SlackBuild(), CommandType.StringSub: () => StringSub(), CommandType.StringReplace: () => StringReplace(), + CommandType.StringReplacePattern: () => StringReplacePattern(), + CommandType.StringIndex: () => StringIndex(), CommandType.Jira: () => Jira(), CommandType.Zip: () => Zip(), CommandType.Shell: () => Shell(), diff --git a/lib/oto/commands/util/string_util.dart b/lib/oto/commands/util/string_util.dart index 317c25a..56a378f 100644 --- a/lib/oto/commands/util/string_util.dart +++ b/lib/oto/commands/util/string_util.dart @@ -47,3 +47,37 @@ class StringReplace extends Command { return await complete(exitCode, command); } } + +class StringReplacePattern extends Command { + @override + Future execute(DataCommand command) async { + var data = DataStringReplacePattern.fromJson(getParam(command)); + + var text = data.text; + var exitCode = 0; + + var start = text.indexOf(data.startPattern, data.startAt); + var end = text.indexOf(data.endPattern, start); + text = text.replaceRange(start, end, data.value); + + await setProperty(data.setValue, text, showPrint: data.showPrint); + + return await complete(exitCode, command); + } +} + +class StringIndex extends Command { + @override + Future execute(DataCommand command) async { + var data = DataStringIndex.fromJson(getParam(command)); + + var text = data.text; + var exitCode = 0; + var index = text.indexOf(data.value); + + await setProperty(data.setValue, index, showPrint: data.showPrint); + + return await complete(exitCode, command); + } +} + diff --git a/lib/oto/data/command_data.dart b/lib/oto/data/command_data.dart index a4d8e0e..93a77c6 100644 --- a/lib/oto/data/command_data.dart +++ b/lib/oto/data/command_data.dart @@ -950,6 +950,41 @@ class DataStringReplace extends DataParam { Map toJson() => _$DataStringReplaceToJson(this); } +//String Replace with Pattern +@JsonSerializable() +class DataStringReplacePattern extends DataParam { + DataStringReplacePattern(); + + int startAt = 0; + late String startPattern; //시작 패턴 + late String endPattern; //종료 패턴 + late String text; //원본 텍스트 + late String value; //교체될 값 + late String setValue; //결과 저장소 + + factory DataStringReplacePattern.fromJson(Map json) => + _$DataStringReplacePatternFromJson(json); + @override + Map toJson() => _$DataStringReplacePatternToJson(this); +} + +//String Find Index +@JsonSerializable() +class DataStringIndex extends DataParam { + DataStringIndex(); + + int startAt = 0; + late String text; + late String value; + late String setValue; + + factory DataStringIndex.fromJson(Map json) => + _$DataStringIndexFromJson(json); + @override + Map toJson() => _$DataStringIndexToJson(this); +} + + //Web String Replace Item @JsonSerializable() class DataStringReplacePair extends DataParam { diff --git a/lib/oto/data/command_data.g.dart b/lib/oto/data/command_data.g.dart index a4fa566..469e613 100644 --- a/lib/oto/data/command_data.g.dart +++ b/lib/oto/data/command_data.g.dart @@ -85,6 +85,8 @@ const _$CommandTypeEnumMap = { CommandType.SlackBuild: 'SlackBuild', CommandType.StringSub: 'StringSub', CommandType.StringReplace: 'StringReplace', + CommandType.StringReplacePattern: 'StringReplacePattern', + CommandType.StringIndex: 'StringIndex', CommandType.Jira: 'Jira', CommandType.Zip: 'Zip', CommandType.Shell: 'Shell', @@ -1594,6 +1596,66 @@ Map _$DataStringReplaceToJson(DataStringReplace instance) => 'pair': instance.pair, }; +DataStringReplacePattern _$DataStringReplacePatternFromJson( + Map json) => + DataStringReplacePattern() + ..workspace = json['workspace'] as String? + ..passExitCodes = (json['passExitCodes'] as List?) + ?.map((e) => (e as num).toInt()) + .toList() + ..setResult = json['setResult'] as String? + ..setExitCode = json['setExitCode'] as String? + ..showPrint = json['showPrint'] as bool? + ..startAt = (json['startAt'] as num).toInt() + ..startPattern = json['startPattern'] as String + ..endPattern = json['endPattern'] as String + ..text = json['text'] as String + ..value = json['value'] as String + ..setValue = json['setValue'] as String; + +Map _$DataStringReplacePatternToJson( + DataStringReplacePattern instance) => + { + 'workspace': instance.workspace, + 'passExitCodes': instance.passExitCodes, + 'setResult': instance.setResult, + 'setExitCode': instance.setExitCode, + 'showPrint': instance.showPrint, + 'startAt': instance.startAt, + 'startPattern': instance.startPattern, + 'endPattern': instance.endPattern, + 'text': instance.text, + 'value': instance.value, + 'setValue': instance.setValue, + }; + +DataStringIndex _$DataStringIndexFromJson(Map json) => + DataStringIndex() + ..workspace = json['workspace'] as String? + ..passExitCodes = (json['passExitCodes'] as List?) + ?.map((e) => (e as num).toInt()) + .toList() + ..setResult = json['setResult'] as String? + ..setExitCode = json['setExitCode'] as String? + ..showPrint = json['showPrint'] as bool? + ..startAt = (json['startAt'] as num).toInt() + ..text = json['text'] as String + ..value = json['value'] as String + ..setValue = json['setValue'] as String; + +Map _$DataStringIndexToJson(DataStringIndex instance) => + { + 'workspace': instance.workspace, + 'passExitCodes': instance.passExitCodes, + 'setResult': instance.setResult, + 'setExitCode': instance.setExitCode, + 'showPrint': instance.showPrint, + 'startAt': instance.startAt, + 'text': instance.text, + 'value': instance.value, + 'setValue': instance.setValue, + }; + DataStringReplacePair _$DataStringReplacePairFromJson( Map json) => DataStringReplacePair()