|
2 | 2 | using System.Collections.Generic; |
3 | 3 | using System.IO; |
4 | 4 | using System.Linq; |
| 5 | +using System.Text.RegularExpressions; |
5 | 6 |
|
6 | 7 | namespace pyRevitExtensionParser |
7 | 8 | { |
@@ -65,55 +66,37 @@ public ComponentIcon(string filePath) |
65 | 66 | SizeSpecification = ExtractSizeFromFilename(); |
66 | 67 | } |
67 | 68 |
|
| 69 | + /// <summary> |
| 70 | + /// Regex pattern to detect dark icon variants in filenames. |
| 71 | + /// Matches patterns like: .dark., _dark., -dark., _dark_, -dark-, or ending with _dark, -dark, .dark |
| 72 | + /// Excludes filenames that start with "dark" to avoid false positives like "dark_icon.png" |
| 73 | + /// </summary> |
| 74 | + private static readonly Regex DarkIconPattern = new Regex( |
| 75 | + @"(?<!^dark)([._-]dark[._-]|[._-]dark$)", |
| 76 | + RegexOptions.IgnoreCase | RegexOptions.Compiled); |
| 77 | + |
| 78 | + /// <summary> |
| 79 | + /// Regex pattern to remove dark indicators from filenames for base type detection. |
| 80 | + /// </summary> |
| 81 | + private static readonly Regex DarkIndicatorRemovalPattern = new Regex( |
| 82 | + @"[._-]dark(?=[._-]|$)", |
| 83 | + RegexOptions.IgnoreCase | RegexOptions.Compiled); |
| 84 | + |
68 | 85 | /// <summary> |
69 | 86 | /// Detects if this icon is a dark theme variant based on filename patterns |
70 | 87 | /// </summary> |
71 | 88 | private bool DetectDarkIcon() |
72 | 89 | { |
73 | | - var fileName = FileName.ToLowerInvariant(); |
74 | | - var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); |
75 | | - |
76 | | - // Common dark icon patterns - check various positions and separators |
77 | | - return fileName.Contains(".dark.") || // icon.dark.png |
78 | | - fileName.Contains("_dark.") || // icon_dark.png |
79 | | - fileName.Contains("-dark.") || // icon-dark.png |
80 | | - fileName.Contains("_dark_") || // icon_dark_theme.png |
81 | | - fileName.Contains("-dark-") || // icon-dark-theme.png |
82 | | - fileNameWithoutExtension.EndsWith("_dark") || // icon_dark.png |
83 | | - fileNameWithoutExtension.EndsWith("-dark") || // icon-dark.png |
84 | | - fileNameWithoutExtension.EndsWith(".dark") || // icon.dark.png |
85 | | - (fileNameWithoutExtension.Contains("_dark") && !fileNameWithoutExtension.StartsWith("dark")) || // icon_dark_theme but not dark_icon |
86 | | - (fileNameWithoutExtension.Contains("-dark") && !fileNameWithoutExtension.StartsWith("dark")); // icon-dark-theme but not dark-icon |
| 90 | + var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(FileName); |
| 91 | + return DarkIconPattern.IsMatch(fileNameWithoutExtension); |
87 | 92 | } |
88 | 93 |
|
89 | 94 | private IconType DetermineIconType() |
90 | 95 | { |
91 | | - var fileName = FileName.ToLowerInvariant(); |
92 | | - var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName); |
| 96 | + var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(FileName).ToLowerInvariant(); |
93 | 97 |
|
94 | 98 | // Remove dark indicators for type detection to get base type |
95 | | - var baseFileName = fileName |
96 | | - .Replace(".dark.", ".") |
97 | | - .Replace("_dark.", ".") |
98 | | - .Replace("-dark.", ".") |
99 | | - .Replace("_dark_", "_") |
100 | | - .Replace("-dark-", "-") |
101 | | - .Replace(".dark" + Extension.ToLowerInvariant(), Extension.ToLowerInvariant()) |
102 | | - .Replace("_dark" + Extension.ToLowerInvariant(), Extension.ToLowerInvariant()) |
103 | | - .Replace("-dark" + Extension.ToLowerInvariant(), Extension.ToLowerInvariant()); |
104 | | - |
105 | | - // Also handle dark indicators in the middle of filenames |
106 | | - var baseFileNameWithoutExt = Path.GetFileNameWithoutExtension(baseFileName); |
107 | | - if (fileNameWithoutExtension.Contains("_dark") && !fileNameWithoutExtension.StartsWith("dark")) |
108 | | - { |
109 | | - baseFileNameWithoutExt = fileNameWithoutExtension.Replace("_dark", ""); |
110 | | - baseFileName = baseFileNameWithoutExt + Extension.ToLowerInvariant(); |
111 | | - } |
112 | | - else if (fileNameWithoutExtension.Contains("-dark") && !fileNameWithoutExtension.StartsWith("dark")) |
113 | | - { |
114 | | - baseFileNameWithoutExt = fileNameWithoutExtension.Replace("-dark", ""); |
115 | | - baseFileName = baseFileNameWithoutExt + Extension.ToLowerInvariant(); |
116 | | - } |
| 99 | + var baseFileName = DarkIndicatorRemovalPattern.Replace(fileNameWithoutExtension, ""); |
117 | 100 |
|
118 | 101 | if (baseFileName.Contains("large")) |
119 | 102 | return IsDark ? IconType.DarkLarge : IconType.Large; |
|
0 commit comments