|
|
|
|
@ -632,41 +632,46 @@ namespace Godot
|
|
|
|
|
return instance.Length;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <summary>
|
|
|
|
|
// Do a simple expression match, where '*' matches zero or more arbitrary characters and '?' matches any single character except '.'.
|
|
|
|
|
// </summary>
|
|
|
|
|
public static bool ExprMatch(this string instance, string expr, bool caseSensitive)
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Do a simple expression match, where '*' matches zero or more arbitrary characters and '?' matches any single character except '.'.
|
|
|
|
|
/// </summary>
|
|
|
|
|
private static bool ExprMatch(this string instance, string expr, bool caseSensitive)
|
|
|
|
|
{
|
|
|
|
|
if (expr.Length == 0 || instance.Length == 0)
|
|
|
|
|
return false;
|
|
|
|
|
// case '\0':
|
|
|
|
|
if (expr.Length == 0)
|
|
|
|
|
return instance.Length == 0;
|
|
|
|
|
|
|
|
|
|
switch (expr[0])
|
|
|
|
|
{
|
|
|
|
|
case '\0':
|
|
|
|
|
return instance[0] == 0;
|
|
|
|
|
case '*':
|
|
|
|
|
return ExprMatch(expr + 1, instance, caseSensitive) || instance[0] != 0 && ExprMatch(expr, instance + 1, caseSensitive);
|
|
|
|
|
return ExprMatch(instance, expr.Substring(1), caseSensitive) || (instance.Length > 0 && ExprMatch(instance.Substring(1), expr, caseSensitive));
|
|
|
|
|
case '?':
|
|
|
|
|
return instance[0] != 0 && instance[0] != '.' && ExprMatch(expr + 1, instance + 1, caseSensitive);
|
|
|
|
|
return instance.Length > 0 && instance[0] != '.' && ExprMatch(instance.Substring(1), expr.Substring(1), caseSensitive);
|
|
|
|
|
default:
|
|
|
|
|
return (caseSensitive ? instance[0] == expr[0] : char.ToUpper(instance[0]) == char.ToUpper(expr[0])) &&
|
|
|
|
|
ExprMatch(expr + 1, instance + 1, caseSensitive);
|
|
|
|
|
if (instance.Length == 0) return false;
|
|
|
|
|
return (caseSensitive ? instance[0] == expr[0] : char.ToUpper(instance[0]) == char.ToUpper(expr[0])) && ExprMatch(instance.Substring(1), expr.Substring(1), caseSensitive);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <summary>
|
|
|
|
|
// Do a simple case sensitive expression match, using ? and * wildcards (see [method expr_match]).
|
|
|
|
|
// </summary>
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Do a simple case sensitive expression match, using ? and * wildcards (see [method expr_match]).
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static bool Match(this string instance, string expr, bool caseSensitive = true)
|
|
|
|
|
{
|
|
|
|
|
if (instance.Length == 0 || expr.Length == 0)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
return instance.ExprMatch(expr, caseSensitive);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <summary>
|
|
|
|
|
// Do a simple case insensitive expression match, using ? and * wildcards (see [method expr_match]).
|
|
|
|
|
// </summary>
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Do a simple case insensitive expression match, using ? and * wildcards (see [method expr_match]).
|
|
|
|
|
/// </summary>
|
|
|
|
|
public static bool MatchN(this string instance, string expr)
|
|
|
|
|
{
|
|
|
|
|
if (instance.Length == 0 || expr.Length == 0)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
return instance.ExprMatch(expr, caseSensitive: false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|