forked from frankc123/RustSource
/
dfMarkupToken.cs
129 lines (110 loc) · 3.11 KB
/
dfMarkupToken.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Runtime.CompilerServices;
public class dfMarkupToken
{
private static List<dfMarkupToken> pool = new List<dfMarkupToken>();
private static int poolIndex = 0;
private int startAttributeIndex;
private string value;
protected dfMarkupToken()
{
}
internal void AddAttribute(dfMarkupToken key, dfMarkupToken value)
{
dfMarkupTokenAttribute attribute = dfMarkupTokenAttribute.Obtain(key, value);
if (this.AttributeCount == 0)
{
this.startAttributeIndex = attribute.Index;
}
this.AttributeCount++;
}
public dfMarkupTokenAttribute GetAttribute(int index)
{
if (index < this.AttributeCount)
{
return dfMarkupTokenAttribute.GetAttribute(this.startAttributeIndex + index);
}
return null;
}
public bool Matches(string text)
{
if (this.Length != text.Length)
{
return false;
}
int length = text.Length;
for (int i = 0; i < length; i++)
{
if (char.ToLowerInvariant(text[i]) != char.ToLowerInvariant(this[i]))
{
return false;
}
}
return true;
}
public static dfMarkupToken Obtain(string source, dfMarkupTokenType type, int startIndex, int endIndex)
{
if (poolIndex >= (pool.Count - 1))
{
pool.Add(new dfMarkupToken());
}
dfMarkupToken token = pool[poolIndex++];
token.Source = source;
token.TokenType = type;
token.value = null;
token.StartOffset = startIndex;
token.EndOffset = endIndex;
token.AttributeCount = 0;
token.startAttributeIndex = 0;
token.Width = 0;
token.Height = 0;
return token;
}
public static void Reset()
{
poolIndex = 0;
}
public override string ToString()
{
return base.ToString();
}
public int AttributeCount { get; private set; }
public int EndOffset { get; private set; }
public int Height { get; set; }
public char this[int index]
{
get
{
if ((index >= 0) && ((this.StartOffset + index) <= (this.Source.Length - 1)))
{
return this.Source[this.StartOffset + index];
}
return '\0';
}
}
public int Length
{
get
{
return ((this.EndOffset - this.StartOffset) + 1);
}
}
public string Source { get; private set; }
public int StartOffset { get; private set; }
public dfMarkupTokenType TokenType { get; private set; }
public string Value
{
get
{
if (this.value == null)
{
int length = Math.Min((int) ((this.EndOffset - this.StartOffset) + 1), (int) (this.Source.Length - this.StartOffset));
this.value = this.Source.Substring(this.StartOffset, length);
}
return this.value;
}
}
public int Width { get; internal set; }
}