diff --git a/src/SheetMe.Core/Catalog/TagSearch.cs b/src/SheetMe.Core/Catalog/TagSearch.cs index 5caeaf7..581a6bc 100644 --- a/src/SheetMe.Core/Catalog/TagSearch.cs +++ b/src/SheetMe.Core/Catalog/TagSearch.cs @@ -46,6 +46,28 @@ public static class TagSearch }; } + /// + /// 같은 값을 다른 형식으로 내는 태그들 — PAT_주민번호 → _Dash · _Blind. + /// 목업의 '관련 필드' 자리를 이것으로 채운다. 없는 개념을 흉내내는 대신 + /// 지금 데이터로 계산되는 진짜 관계를 쓴다 — 마지막 밑줄 앞까지가 같으면 한 갈래다. + /// + public static List VariantsOf(string tag, IEnumerable all) + { + var cut = tag.LastIndexOf('_'); + var stem = cut > 0 ? tag[..cut] : tag; + // 밑줄이 하나뿐이면 그건 접두어 경계다(PAT_이름) — 줄기가 'PAT' 이 되어 분류 전체가 변형으로 딸려 온다 + if (stem.Length == 0 || !stem.Contains('_')) + { + return new List(); + } + return all + .Where(t => !string.Equals(t, tag, StringComparison.Ordinal) + && (string.Equals(t, stem, StringComparison.Ordinal) + || t.StartsWith(stem + "_", StringComparison.Ordinal))) + .OrderBy(t => t, StringComparer.Ordinal) + .ToList(); + } + /// /// 분류 안의 소분류 — 두 번째 토큰. PAT_주민번호_Dash → "주민번호". /// 같은 뿌리에서 갈라진 변형(_Dash, _Blind, _Refer)이 흩어지지 않고 붙어 보이게 한다. diff --git a/src/SheetMe.Designer/Views/TagPickerDialogView.xaml b/src/SheetMe.Designer/Views/TagPickerDialogView.xaml index 8e5aea6..50f420a 100644 --- a/src/SheetMe.Designer/Views/TagPickerDialogView.xaml +++ b/src/SheetMe.Designer/Views/TagPickerDialogView.xaml @@ -1,70 +1,145 @@ + - + + + - + - - - - - - - - - - - + + + + + + + + + + + + + + - + + + + + - + - - + + + + + + + + + + + + + + + + + - - -