scripts
This commit is contained in:
@@ -0,0 +1,164 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
|
||||
namespace System.Text.RegularExpressions.Syntax
|
||||
{
|
||||
// Token: 0x020002DB RID: 731
|
||||
internal class Group : CompositeExpression
|
||||
{
|
||||
// Token: 0x17000826 RID: 2086
|
||||
// (get) Token: 0x06001AA7 RID: 6823 RVA: 0x0006250C File Offset: 0x0006070C
|
||||
// (set) Token: 0x06001AA8 RID: 6824 RVA: 0x0006251C File Offset: 0x0006071C
|
||||
public Expression Expression
|
||||
{
|
||||
get
|
||||
{
|
||||
return base.Expressions[0];
|
||||
}
|
||||
set
|
||||
{
|
||||
base.Expressions[0] = value;
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x06001AA9 RID: 6825 RVA: 0x0006252C File Offset: 0x0006072C
|
||||
public void AppendExpression(Expression e)
|
||||
{
|
||||
base.Expressions.Add(e);
|
||||
}
|
||||
|
||||
// Token: 0x06001AAA RID: 6826 RVA: 0x0006253C File Offset: 0x0006073C
|
||||
public override void Compile(ICompiler cmp, bool reverse)
|
||||
{
|
||||
int count = base.Expressions.Count;
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
Expression expression;
|
||||
if (reverse)
|
||||
{
|
||||
expression = base.Expressions[count - i - 1];
|
||||
}
|
||||
else
|
||||
{
|
||||
expression = base.Expressions[i];
|
||||
}
|
||||
expression.Compile(cmp, reverse);
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x06001AAB RID: 6827 RVA: 0x00062598 File Offset: 0x00060798
|
||||
public override void GetWidth(out int min, out int max)
|
||||
{
|
||||
min = 0;
|
||||
max = 0;
|
||||
foreach (object obj in base.Expressions)
|
||||
{
|
||||
Expression expression = (Expression)obj;
|
||||
int num;
|
||||
int num2;
|
||||
expression.GetWidth(out num, out num2);
|
||||
min += num;
|
||||
if (max == 2147483647 || num2 == 2147483647)
|
||||
{
|
||||
max = int.MaxValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
max += num2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Token: 0x06001AAC RID: 6828 RVA: 0x00062644 File Offset: 0x00060844
|
||||
public override AnchorInfo GetAnchorInfo(bool reverse)
|
||||
{
|
||||
int fixedWidth = base.GetFixedWidth();
|
||||
ArrayList arrayList = new ArrayList();
|
||||
IntervalCollection intervalCollection = new IntervalCollection();
|
||||
int num = 0;
|
||||
int count = base.Expressions.Count;
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
Expression expression;
|
||||
if (reverse)
|
||||
{
|
||||
expression = base.Expressions[count - i - 1];
|
||||
}
|
||||
else
|
||||
{
|
||||
expression = base.Expressions[i];
|
||||
}
|
||||
AnchorInfo anchorInfo = expression.GetAnchorInfo(reverse);
|
||||
arrayList.Add(anchorInfo);
|
||||
if (anchorInfo.IsPosition)
|
||||
{
|
||||
return new AnchorInfo(this, num + anchorInfo.Offset, fixedWidth, anchorInfo.Position);
|
||||
}
|
||||
if (anchorInfo.IsSubstring)
|
||||
{
|
||||
intervalCollection.Add(anchorInfo.GetInterval(num));
|
||||
}
|
||||
if (anchorInfo.IsUnknownWidth)
|
||||
{
|
||||
break;
|
||||
}
|
||||
num += anchorInfo.Width;
|
||||
}
|
||||
intervalCollection.Normalize();
|
||||
Interval interval = Interval.Empty;
|
||||
foreach (object obj in intervalCollection)
|
||||
{
|
||||
Interval interval2 = (Interval)obj;
|
||||
if (interval2.Size > interval.Size)
|
||||
{
|
||||
interval = interval2;
|
||||
}
|
||||
}
|
||||
if (interval.IsEmpty)
|
||||
{
|
||||
return new AnchorInfo(this, fixedWidth);
|
||||
}
|
||||
bool flag = false;
|
||||
int num2 = 0;
|
||||
num = 0;
|
||||
for (int j = 0; j < arrayList.Count; j++)
|
||||
{
|
||||
AnchorInfo anchorInfo2 = (AnchorInfo)arrayList[j];
|
||||
if (anchorInfo2.IsSubstring && interval.Contains(anchorInfo2.GetInterval(num)))
|
||||
{
|
||||
flag |= anchorInfo2.IgnoreCase;
|
||||
arrayList[num2++] = anchorInfo2;
|
||||
}
|
||||
if (anchorInfo2.IsUnknownWidth)
|
||||
{
|
||||
break;
|
||||
}
|
||||
num += anchorInfo2.Width;
|
||||
}
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
for (int k = 0; k < num2; k++)
|
||||
{
|
||||
AnchorInfo anchorInfo3;
|
||||
if (reverse)
|
||||
{
|
||||
anchorInfo3 = (AnchorInfo)arrayList[num2 - k - 1];
|
||||
}
|
||||
else
|
||||
{
|
||||
anchorInfo3 = (AnchorInfo)arrayList[k];
|
||||
}
|
||||
stringBuilder.Append(anchorInfo3.Substring);
|
||||
}
|
||||
if (stringBuilder.Length == interval.Size)
|
||||
{
|
||||
return new AnchorInfo(this, interval.low, fixedWidth, stringBuilder.ToString(), flag);
|
||||
}
|
||||
if (stringBuilder.Length > interval.Size)
|
||||
{
|
||||
Console.Error.WriteLine("overlapping?");
|
||||
return new AnchorInfo(this, fixedWidth);
|
||||
}
|
||||
throw new SystemException("Shouldn't happen");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user