Terraria v1.4.4.9
Terraria source code documentation
All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Events Macros
MatcherBuilder.cs
Go to the documentation of this file.
4
5namespace System.Xml.Xsl.Xslt;
6
7internal sealed class MatcherBuilder
8{
9 private readonly XPathQilFactory _f;
10
12
13 private readonly InvokeGenerator _invkGen;
14
15 private int _priority = -1;
16
17 private readonly PatternBag _elementPatterns = new PatternBag();
18
19 private readonly PatternBag _attributePatterns = new PatternBag();
20
21 private readonly List<Pattern> _textPatterns = new List<Pattern>();
22
24
26
27 private readonly PatternBag _piPatterns = new PatternBag();
28
30
32
39
52
53 private void AddPatterns(List<TemplateMatch> matches)
54 {
55 foreach (TemplateMatch match in matches)
56 {
57 Pattern pattern = new Pattern(match, ++_priority);
58 switch (match.NodeKind)
59 {
60 case XmlNodeKindFlags.Element:
61 _elementPatterns.Add(pattern);
62 break;
63 case XmlNodeKindFlags.Attribute:
64 _attributePatterns.Add(pattern);
65 break;
66 case XmlNodeKindFlags.Text:
67 _textPatterns.Add(pattern);
68 break;
69 case XmlNodeKindFlags.Document:
70 _documentPatterns.Add(pattern);
71 break;
72 case XmlNodeKindFlags.Comment:
73 _commentPatterns.Add(pattern);
74 break;
75 case XmlNodeKindFlags.PI:
76 _piPatterns.Add(pattern);
77 break;
78 default:
80 break;
81 }
82 }
83 }
84
86 {
87 Stylesheet[] imports = sheet.Imports;
88 foreach (Stylesheet sheet2 in imports)
89 {
91 }
92 if (sheet.TemplateMatches.TryGetValue(mode, out var value))
93 {
96 }
97 }
98
100 {
101 Clear();
102 Stylesheet[] imports = sheet.Imports;
103 foreach (Stylesheet sheet2 in imports)
104 {
106 }
107 }
108
110 {
111 QilNode condition = match.Condition;
112 if (condition == null)
113 {
114 return _f.True();
115 }
116 condition = condition.DeepClone(_f.BaseFactory);
117 return _refReplacer.Replace(condition, match.Iterator, it);
118 }
119
121 {
122 QilNode qilNode = _f.Int32(-1);
123 foreach (Pattern pattern in patternList)
124 {
125 qilNode = _f.Conditional(MatchPattern(it, pattern.Match), _f.Int32(pattern.Priority), qilNode);
126 }
127 return qilNode;
128 }
129
138
140 {
141 if (matcher.NodeType == QilNodeType.LiteralInt32)
142 {
143 return true;
144 }
145 return false;
146 }
147
149 {
150 if (patternList.Count == 0)
151 {
152 return matcher;
153 }
154 if (IsNoMatch(matcher))
155 {
157 }
159 QilNode qilNode = _f.Int32(-1);
160 int num = -1;
161 foreach (Pattern pattern in patternList)
162 {
163 if (pattern.Priority > num + 1)
164 {
166 }
167 qilNode = _f.Conditional(MatchPattern(it, pattern.Match), _f.Int32(pattern.Priority), qilNode);
168 num = pattern.Priority;
169 }
170 if (num != _priority)
171 {
173 }
174 return _f.Loop(qilIterator, qilNode);
175 }
176
178 {
179 if (patternBag.FixedNamePatternsNames.Count == 0)
180 {
181 return MatchPatterns(it, xt, patternBag.NonFixedNamePatterns, otherwise);
182 }
183 QilNode qilNode = _f.Int32(-1);
184 foreach (QilName fixedNamePatternsName in patternBag.FixedNamePatternsNames)
185 {
187 }
190 }
191
218}
bool TryGetValue(TKey key, [MaybeNullWhen(false)] out TValue value)
void Add(TKey key, TValue value)
virtual QilNode DeepClone(QilFactory f)
Definition QilNode.cs:91
QilNode IsType(QilNode expr, XmlQueryType t)
QilNode Loop(QilIterator variable, QilNode body)
QilNode Conditional(QilNode condition, QilNode trueBranch, QilNode falseBranch)
QilIterator Let(QilNode binding)
QilList BranchList(params QilNode[] args)
QilNode Choice(QilNode expr, QilList branches)
QilNode Eq(QilNode left, QilNode right)
QilNode Gt(QilNode left, QilNode right)
static readonly XmlQueryType Text
static readonly XmlQueryType Attribute
static readonly XmlQueryType Element
static readonly XmlQueryType Comment
static readonly XmlQueryType PI
static readonly XmlQueryType Document
QilNode GenerateInvoke(QilFunction func, IList< XslNode > actualArgs)
QilNode BuildMatcher(QilIterator it, IList< XslNode > actualArgs, QilNode otherwise)
MatcherBuilder(XPathQilFactory f, ReferenceReplacer refReplacer, InvokeGenerator invkGen)
QilNode MatchPatterns(QilIterator it, XmlQueryType xt, List< Pattern > patternList, QilNode otherwise)
readonly List< Pattern > _documentPatterns
QilNode MatchPatterns(QilIterator it, XmlQueryType xt, PatternBag patternBag, QilNode otherwise)
readonly PatternBag _attributePatterns
QilNode MatchPattern(QilIterator it, TemplateMatch match)
readonly List< List< TemplateMatch > > _allMatches
readonly ReferenceReplacer _refReplacer
readonly XPathQilFactory _f
void AddPatterns(List< TemplateMatch > matches)
readonly List< Pattern > _heterogenousPatterns
readonly List< Pattern > _textPatterns
QilNode MatchPatterns(QilIterator it, List< Pattern > patternList)
void CollectPatterns(StylesheetLevel sheet, QilName mode)
void CollectPatternsInternal(Stylesheet sheet, QilName mode)
readonly List< Pattern > _commentPatterns
readonly InvokeGenerator _invkGen
QilNode MatchPatternsWhosePriorityGreater(QilIterator it, List< Pattern > patternList, QilNode matcher)
void Add(Pattern pattern)
Definition PatternBag.cs:21
QilNode Replace(QilNode expr, QilReference lookFor, QilReference replaceBy)