scripts
This commit is contained in:
@@ -0,0 +1,239 @@
|
||||
using System;
|
||||
|
||||
namespace System.IO
|
||||
{
|
||||
// Token: 0x0200012A RID: 298
|
||||
internal class SearchPattern2
|
||||
{
|
||||
// Token: 0x06000A5D RID: 2653 RVA: 0x0001D540 File Offset: 0x0001B740
|
||||
public SearchPattern2(string pattern)
|
||||
: this(pattern, false)
|
||||
{
|
||||
}
|
||||
|
||||
// Token: 0x06000A5E RID: 2654 RVA: 0x0001D54C File Offset: 0x0001B74C
|
||||
public SearchPattern2(string pattern, bool ignore)
|
||||
{
|
||||
this.ignore = ignore;
|
||||
this.pattern = pattern;
|
||||
this.Compile(pattern);
|
||||
}
|
||||
|
||||
// Token: 0x06000A60 RID: 2656 RVA: 0x0001D5AC File Offset: 0x0001B7AC
|
||||
public bool IsMatch(string text, bool ignorecase)
|
||||
{
|
||||
if (this.hasWildcard)
|
||||
{
|
||||
return this.Match(this.ops, text, 0);
|
||||
}
|
||||
bool flag = string.Compare(this.pattern, text, ignorecase) == 0;
|
||||
if (flag)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
int num = text.LastIndexOf('/');
|
||||
if (num == -1)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
num++;
|
||||
return num != text.Length && string.Compare(this.pattern, text.Substring(num), ignorecase) == 0;
|
||||
}
|
||||
|
||||
// Token: 0x06000A61 RID: 2657 RVA: 0x0001D628 File Offset: 0x0001B828
|
||||
public bool IsMatch(string text)
|
||||
{
|
||||
return this.IsMatch(text, this.ignore);
|
||||
}
|
||||
|
||||
// Token: 0x170002A0 RID: 672
|
||||
// (get) Token: 0x06000A62 RID: 2658 RVA: 0x0001D638 File Offset: 0x0001B838
|
||||
public bool HasWildcard
|
||||
{
|
||||
get
|
||||
{
|
||||
return this.hasWildcard;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x06000A63 RID: 2659 RVA: 0x0001D640 File Offset: 0x0001B840
|
||||
private void Compile(string pattern)
|
||||
{
|
||||
if (pattern == null || pattern.IndexOfAny(SearchPattern2.InvalidChars) >= 0)
|
||||
{
|
||||
throw new ArgumentException("Invalid search pattern: '" + pattern + "'");
|
||||
}
|
||||
if (pattern == "*")
|
||||
{
|
||||
this.ops = new SearchPattern2.Op(SearchPattern2.OpCode.True);
|
||||
this.hasWildcard = true;
|
||||
return;
|
||||
}
|
||||
this.ops = null;
|
||||
int i = 0;
|
||||
SearchPattern2.Op op = null;
|
||||
while (i < pattern.Length)
|
||||
{
|
||||
char c = pattern[i];
|
||||
SearchPattern2.Op op2;
|
||||
if (c != '*')
|
||||
{
|
||||
if (c != '?')
|
||||
{
|
||||
op2 = new SearchPattern2.Op(SearchPattern2.OpCode.ExactString);
|
||||
int num = pattern.IndexOfAny(SearchPattern2.WildcardChars, i);
|
||||
if (num < 0)
|
||||
{
|
||||
num = pattern.Length;
|
||||
}
|
||||
op2.Argument = pattern.Substring(i, num - i);
|
||||
if (this.ignore)
|
||||
{
|
||||
op2.Argument = op2.Argument.ToLower();
|
||||
}
|
||||
i = num;
|
||||
}
|
||||
else
|
||||
{
|
||||
op2 = new SearchPattern2.Op(SearchPattern2.OpCode.AnyChar);
|
||||
i++;
|
||||
this.hasWildcard = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
op2 = new SearchPattern2.Op(SearchPattern2.OpCode.AnyString);
|
||||
i++;
|
||||
this.hasWildcard = true;
|
||||
}
|
||||
if (op == null)
|
||||
{
|
||||
this.ops = op2;
|
||||
}
|
||||
else
|
||||
{
|
||||
op.Next = op2;
|
||||
}
|
||||
op = op2;
|
||||
}
|
||||
if (op == null)
|
||||
{
|
||||
this.ops = new SearchPattern2.Op(SearchPattern2.OpCode.End);
|
||||
}
|
||||
else
|
||||
{
|
||||
op.Next = new SearchPattern2.Op(SearchPattern2.OpCode.End);
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x06000A64 RID: 2660 RVA: 0x0001D79C File Offset: 0x0001B99C
|
||||
private bool Match(SearchPattern2.Op op, string text, int ptr)
|
||||
{
|
||||
while (op != null)
|
||||
{
|
||||
switch (op.Code)
|
||||
{
|
||||
case SearchPattern2.OpCode.ExactString:
|
||||
{
|
||||
int length = op.Argument.Length;
|
||||
if (ptr + length > text.Length)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
string text2 = text.Substring(ptr, length);
|
||||
if (this.ignore)
|
||||
{
|
||||
text2 = text2.ToLower();
|
||||
}
|
||||
if (text2 != op.Argument)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
ptr += length;
|
||||
break;
|
||||
}
|
||||
case SearchPattern2.OpCode.AnyChar:
|
||||
if (++ptr > text.Length)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case SearchPattern2.OpCode.AnyString:
|
||||
while (ptr <= text.Length)
|
||||
{
|
||||
if (this.Match(op.Next, text, ptr))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
ptr++;
|
||||
}
|
||||
return false;
|
||||
case SearchPattern2.OpCode.End:
|
||||
return ptr == text.Length;
|
||||
case SearchPattern2.OpCode.True:
|
||||
return true;
|
||||
}
|
||||
op = op.Next;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// Token: 0x04000ABF RID: 2751
|
||||
private SearchPattern2.Op ops;
|
||||
|
||||
// Token: 0x04000AC0 RID: 2752
|
||||
private bool ignore;
|
||||
|
||||
// Token: 0x04000AC1 RID: 2753
|
||||
private bool hasWildcard;
|
||||
|
||||
// Token: 0x04000AC2 RID: 2754
|
||||
private string pattern;
|
||||
|
||||
// Token: 0x04000AC3 RID: 2755
|
||||
internal static readonly char[] WildcardChars = new char[] { '*', '?' };
|
||||
|
||||
// Token: 0x04000AC4 RID: 2756
|
||||
internal static readonly char[] InvalidChars = new char[]
|
||||
{
|
||||
Path.DirectorySeparatorChar,
|
||||
Path.AltDirectorySeparatorChar
|
||||
};
|
||||
|
||||
// Token: 0x0200012B RID: 299
|
||||
private class Op
|
||||
{
|
||||
// Token: 0x06000A65 RID: 2661 RVA: 0x0001D890 File Offset: 0x0001BA90
|
||||
public Op(SearchPattern2.OpCode code)
|
||||
{
|
||||
this.Code = code;
|
||||
this.Argument = null;
|
||||
this.Next = null;
|
||||
}
|
||||
|
||||
// Token: 0x04000AC5 RID: 2757
|
||||
public SearchPattern2.OpCode Code;
|
||||
|
||||
// Token: 0x04000AC6 RID: 2758
|
||||
public string Argument;
|
||||
|
||||
// Token: 0x04000AC7 RID: 2759
|
||||
public SearchPattern2.Op Next;
|
||||
}
|
||||
|
||||
// Token: 0x0200012C RID: 300
|
||||
private enum OpCode
|
||||
{
|
||||
// Token: 0x04000AC9 RID: 2761
|
||||
ExactString,
|
||||
// Token: 0x04000ACA RID: 2762
|
||||
AnyChar,
|
||||
// Token: 0x04000ACB RID: 2763
|
||||
AnyString,
|
||||
// Token: 0x04000ACC RID: 2764
|
||||
End,
|
||||
// Token: 0x04000ACD RID: 2765
|
||||
True
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user