use MatchesSimpleExpression instead of janky regex

This commit is contained in:
Ell 2024-08-31 13:23:44 +02:00
parent 22730c7aa2
commit b410b81bca
2 changed files with 9 additions and 16 deletions

View file

@ -1,15 +1,13 @@
using System.Text.RegularExpressions; namespace Contentless;
namespace Contentless;
public class OverrideInfo { public class OverrideInfo {
public readonly Regex Regex; public readonly string Expression;
public readonly Override Override; public readonly Override Override;
public OverrideInfo(Regex regex, Override over) { public OverrideInfo(string expression, Override over) {
this.Regex = regex; this.Expression = expression;
this.Override = over; this.Override = over;
} }
} }

View file

@ -1,9 +1,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.IO.Enumeration;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Text.RegularExpressions;
using Microsoft.Build.Construction; using Microsoft.Build.Construction;
using Microsoft.Xna.Framework.Content.Pipeline; using Microsoft.Xna.Framework.Content.Pipeline;
using Newtonsoft.Json; using Newtonsoft.Json;
@ -143,7 +143,6 @@ public static class Program {
Console.WriteLine($"Found possible importer types {string.Join(", ", importers)}"); Console.WriteLine($"Found possible importer types {string.Join(", ", importers)}");
Console.WriteLine($"Found possible processor types {string.Join(", ", processors)}"); Console.WriteLine($"Found possible processor types {string.Join(", ", processors)}");
var excluded = config.ExcludedFiles.Select(Program.GlobbyRegex).ToArray();
var overrides = Program.GetOverrides(config.Overrides).ToArray(); var overrides = Program.GetOverrides(config.Overrides).ToArray();
foreach (var file in contentFile.Directory.EnumerateFiles("*", SearchOption.AllDirectories)) { foreach (var file in contentFile.Directory.EnumerateFiles("*", SearchOption.AllDirectories)) {
// is the file the content or config file? // is the file the content or config file?
@ -152,7 +151,7 @@ public static class Program {
var relative = Path.GetRelativePath(contentFile.DirectoryName, file.FullName).Replace('\\', '/'); var relative = Path.GetRelativePath(contentFile.DirectoryName, file.FullName).Replace('\\', '/');
// is the file in an excluded directory? // is the file in an excluded directory?
if (excluded.Any(e => e.IsMatch(relative))) { if (config.ExcludedFiles.Any(e => FileSystemName.MatchesSimpleExpression(e, relative))) {
if (config.LogSkipped) if (config.LogSkipped)
Console.WriteLine($"Skipping excluded file {relative}"); Console.WriteLine($"Skipping excluded file {relative}");
continue; continue;
@ -271,12 +270,12 @@ public static class Program {
private static IEnumerable<OverrideInfo> GetOverrides(Dictionary<string, Override> config) { private static IEnumerable<OverrideInfo> GetOverrides(Dictionary<string, Override> config) {
foreach (var entry in config) foreach (var entry in config)
yield return new OverrideInfo(Program.GlobbyRegex(entry.Key), entry.Value); yield return new OverrideInfo(entry.Key, entry.Value);
} }
private static OverrideInfo GetOverrideFor(string file, IEnumerable<OverrideInfo> overrides) { private static OverrideInfo GetOverrideFor(string file, IEnumerable<OverrideInfo> overrides) {
foreach (var over in overrides) { foreach (var over in overrides) {
if (over.Regex.IsMatch(file)) if (FileSystemName.MatchesSimpleExpression(over.Expression, file))
return over; return over;
} }
return null; return null;
@ -327,8 +326,4 @@ public static class Program {
Console.WriteLine($"Adding file {relative} with the Copy build action"); Console.WriteLine($"Adding file {relative} with the Copy build action");
} }
private static Regex GlobbyRegex(string s) {
return new Regex(s.Replace(".", "[.]").Replace("*", ".*").Replace("?", "."));
}
} }