Skip to content

Commit 149b849

Browse files
committed
fix: simplify text search with regex
1 parent 4132e3c commit 149b849

File tree

1 file changed

+21
-38
lines changed

1 file changed

+21
-38
lines changed

dev/pyRevitLoader/pyRevitExtensionParser/ComponentIcon.cs

Lines changed: 21 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.IO;
44
using System.Linq;
5+
using System.Text.RegularExpressions;
56

67
namespace pyRevitExtensionParser
78
{
@@ -65,55 +66,37 @@ public ComponentIcon(string filePath)
6566
SizeSpecification = ExtractSizeFromFilename();
6667
}
6768

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+
6885
/// <summary>
6986
/// Detects if this icon is a dark theme variant based on filename patterns
7087
/// </summary>
7188
private bool DetectDarkIcon()
7289
{
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);
8792
}
8893

8994
private IconType DetermineIconType()
9095
{
91-
var fileName = FileName.ToLowerInvariant();
92-
var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName);
96+
var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(FileName).ToLowerInvariant();
9397

9498
// 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, "");
117100

118101
if (baseFileName.Contains("large"))
119102
return IsDark ? IconType.DarkLarge : IconType.Large;

0 commit comments

Comments
 (0)