-
Notifications
You must be signed in to change notification settings - Fork 0
/
TemplateTokens.cs
158 lines (130 loc) · 3.17 KB
/
TemplateTokens.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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
using System;
using System.Collections.Generic;
public enum TemplateTokenType
{
ForCue,
EndForCue,
IfCue,
ElifCue,
ElseCue,
EndIfCue,
BlockCue,
EndBlockCue,
Render,
Extends,
EOF,
}
public class TemplateToken
{
public Position posStart;
public TemplateTokenType tokType;
public Position posEnd;
public TemplateToken(TemplateTokenType type_, Position start, Position end)
{
tokType = type_;
posStart = start;
posEnd = end;
}
public static TemplateToken EOFToken()
{
return new TemplateToken(TemplateTokenType.EOF, Position.Nothing(), Position.Nothing());
}
public virtual Tuple<List<Token>, Node> GetForCueContent()
{
throw new Exception("This is not a for cue...");
}
public virtual Node GetRenderNode()
{
throw new Exception("This is not a render node...");
}
public virtual string GetExtendsStrng()
{
throw new Exception("This is not a block node...");
}
public virtual string GetBlockString()
{
throw new Exception("This is not a block node...");
}
public virtual Node GetIfCueCond()
{
throw new Exception("This is not an IfCue...");
}
public virtual Node GetElifCueCond()
{
throw new Exception("This is not an IfCue...");
}
}
public class ExtendsToken : TemplateToken
{
public string extension;
public ExtendsToken(string str, Position start, Position end) : base(TemplateTokenType.Extends, start, end)
{
extension = str;
}
override public string GetExtendsStrng()
{
return extension;
}
}
public class RenderToken : TemplateToken
{
public Node node;
public RenderToken(Node n, Position start, Position end) : base(TemplateTokenType.Render, start, end)
{
node = n;
}
override public Node GetRenderNode()
{
return node;
}
}
public class ForCue : TemplateToken
{
public Node iteratorNode;
public List<Token> identifiers;
public ForCue(List<Token> idents, Node node, Position start, Position end) : base(TemplateTokenType.ForCue, start, end)
{
iteratorNode = node;
identifiers = idents;
}
override public Tuple<List<Token>, Node> GetForCueContent()
{
return Tuple.Create<List<Token>, Node>(identifiers, iteratorNode);
}
}
public class BlockCue : TemplateToken
{
public string name;
public BlockCue(string str, Position start, Position end) : base(TemplateTokenType.BlockCue, start, end)
{
name = str;
}
override public string GetBlockString()
{
return name;
}
}
public class IfCue : TemplateToken
{
public Node cond;
public IfCue(Node c, Position start, Position end) : base(TemplateTokenType.IfCue, start, end)
{
cond = c;
}
override public Node GetIfCueCond()
{
return cond;
}
}
public class ElifCue : TemplateToken
{
public Node cond;
public ElifCue(Node c, Position start, Position end) : base(TemplateTokenType.ElifCue, start, end)
{
cond = c;
}
override public Node GetElifCueCond()
{
return cond;
}
}