Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
XslAstAnalyzer.cs
Go to the documentation of this file.
8
9namespace System.Xml.Xsl.Xslt;
10
11internal sealed class XslAstAnalyzer : XslVisitor<XslFlags>
12{
13 internal sealed class Graph<V> : Dictionary<V, List<V>> where V : XslNode
14 {
15 private static readonly IList<V> s_empty = new List<V>().AsReadOnly();
16
18 {
19 if (TryGetValue(v, out var value) && value != null)
20 {
21 return value;
22 }
23 return s_empty;
24 }
25
26 public void AddEdge(V v1, V v2)
27 {
28 if (v1 != v2)
29 {
30 if (!TryGetValue(v1, out var value) || value == null)
31 {
32 List<V> list2 = (base[v1] = new List<V>());
33 value = list2;
34 }
35 value.Add(v2);
36 if (!TryGetValue(v2, out value))
37 {
38 base[v2] = null;
39 }
40 }
41 }
42
43 public void PropagateFlag(XslFlags flag)
44 {
45 foreach (V key in base.Keys)
46 {
47 key.Flags &= ~XslFlags.Stop;
48 }
49 foreach (V key2 in base.Keys)
50 {
51 if ((key2.Flags & XslFlags.Stop) == 0 && (key2.Flags & flag) != 0)
52 {
54 }
55 }
56 }
57
58 private void DepthFirstSearch(V v, XslFlags flag)
59 {
60 v.Flags |= flag | XslFlags.Stop;
61 foreach (V adj in GetAdjList(v))
62 {
63 if ((adj.Flags & XslFlags.Stop) == 0)
64 {
65 DepthFirstSearch(adj, flag);
66 }
67 }
68 }
69 }
70
71 internal struct ModeName
72 {
73 public QilName Mode;
74
75 public QilName Name;
76
77 public ModeName(QilName mode, QilName name)
78 {
79 Mode = mode;
80 Name = name;
81 }
82
83 public override int GetHashCode()
84 {
85 return Mode.GetHashCode() ^ Name.GetHashCode();
86 }
87 }
88
89 [StructLayout(LayoutKind.Sequential, Size = 1)]
90 internal readonly struct NullErrorHelper : IErrorHelper
91 {
92 public void ReportError(string res, params string[] args)
93 {
94 }
95 }
96
97 internal sealed class XPathAnalyzer : IXPathBuilder<XslFlags>
98 {
100
102
103 private readonly Compiler _compiler;
104
105 private bool _xsltCurrentNeeded;
106
108
109 private static readonly XslFlags[] s_operatorType = new XslFlags[16]
110 {
111 XslFlags.TypeFilter,
112 XslFlags.Boolean,
113 XslFlags.Boolean,
114 XslFlags.Boolean,
115 XslFlags.Boolean,
116 XslFlags.Boolean,
117 XslFlags.Boolean,
118 XslFlags.Boolean,
119 XslFlags.Boolean,
120 XslFlags.Number,
121 XslFlags.Number,
122 XslFlags.Number,
123 XslFlags.Number,
124 XslFlags.Number,
125 XslFlags.Number,
127 };
128
129 private static readonly XslFlags[] s_XPathFunctionFlags = new XslFlags[27]
130 {
132 XslFlags.Number | XslFlags.Position,
133 XslFlags.Number,
134 XslFlags.String,
135 XslFlags.String,
136 XslFlags.String,
137 XslFlags.String,
138 XslFlags.Number,
139 XslFlags.Boolean,
140 XslFlags.Boolean,
141 XslFlags.Boolean,
142 XslFlags.Boolean,
143 XslFlags.Nodeset | XslFlags.Current,
144 XslFlags.String,
145 XslFlags.Boolean,
146 XslFlags.Boolean,
147 XslFlags.String,
148 XslFlags.String,
149 XslFlags.String,
150 XslFlags.Number,
151 XslFlags.String,
152 XslFlags.String,
153 XslFlags.Boolean | XslFlags.Current,
154 XslFlags.Number,
155 XslFlags.Number,
156 XslFlags.Number,
158 };
159
160 private static readonly XslFlags[] s_xsltFunctionFlags = new XslFlags[9]
161 {
162 XslFlags.Node,
163 XslFlags.Nodeset,
164 XslFlags.Nodeset | XslFlags.Current,
165 XslFlags.String,
166 XslFlags.String,
167 XslFlags.String,
168 XslFlags.String | XslFlags.Number,
169 XslFlags.Boolean,
171 };
172
174
180
182 {
183 _typeDonor = null;
184 if (xpathExpr == null)
185 {
186 return XslFlags.None;
187 }
188 try
189 {
190 _xsltCurrentNeeded = false;
194 {
195 xslFlags |= XslFlags.Current;
196 }
197 return xslFlags;
198 }
199 catch (XslLoadException)
200 {
201 return XslFlags.TypeFilter | XslFlags.FocusFilter;
202 }
203 }
204
206 {
207 _typeDonor = null;
208 if (source == null)
209 {
210 return XslFlags.None;
211 }
212 try
213 {
214 _xsltCurrentNeeded = false;
216 int num = 0;
217 while (num < source.Length)
218 {
219 num = source.IndexOf('{', num);
220 if (num == -1)
221 {
222 break;
223 }
224 num++;
225 if (num < source.Length && source[num] == '{')
226 {
227 num++;
228 }
229 else if (num < source.Length)
230 {
233 num = xPathScanner.LexStart + 1;
234 }
235 }
237 {
238 xslFlags |= XslFlags.Current;
239 }
240 return xslFlags & ~XslFlags.TypeFilter;
241 }
242 catch (XslLoadException)
243 {
244 return XslFlags.FocusFilter;
245 }
246 }
247
248 private VarPar ResolveVariable(string prefix, string name)
249 {
250 string text = ResolvePrefix(prefix);
251 if (text == null)
252 {
253 return null;
254 }
255 return _scope.LookupVariable(name, text);
256 }
257
258 private string ResolvePrefix(string prefix)
259 {
260 if (prefix.Length == 0)
261 {
262 return string.Empty;
263 }
264 return _scope.LookupNamespace(prefix);
265 }
266
267 public void StartBuild()
268 {
269 }
270
272 {
273 return result;
274 }
275
276 public XslFlags String(string value)
277 {
278 _typeDonor = null;
279 return XslFlags.String;
280 }
281
282 public XslFlags Number(double value)
283 {
284 _typeDonor = null;
285 return XslFlags.Number;
286 }
287
289 {
290 _typeDonor = null;
291 XslFlags xslFlags = (left | right) & ~XslFlags.TypeFilter;
292 return xslFlags | s_operatorType[(int)op];
293 }
294
295 public XslFlags Axis(XPathAxis xpathAxis, XPathNodeType nodeType, string prefix, string name)
296 {
297 _typeDonor = null;
298 if (xpathAxis == XPathAxis.Self && nodeType == XPathNodeType.All && prefix == null && name == null)
299 {
300 return XslFlags.Node | XslFlags.Current;
301 }
302 return XslFlags.Nodeset | XslFlags.Current;
303 }
304
305 public XslFlags JoinStep(XslFlags left, XslFlags right)
306 {
307 _typeDonor = null;
308 return (left & ~XslFlags.TypeFilter) | XslFlags.Nodeset;
309 }
310
312 {
313 _typeDonor = null;
314 return (nodeset & ~XslFlags.TypeFilter) | XslFlags.Nodeset | (predicate & XslFlags.SideEffects);
315 }
316
317 public XslFlags Variable(string prefix, string name)
318 {
320 if (_typeDonor == null)
321 {
322 return XslFlags.TypeFilter;
323 }
324 return XslFlags.None;
325 }
326
327 [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", Justification = "Supressing warning about not having the RequiresUnreferencedCode attribute since xsl Scripts are not supported in .NET Core")]
328 public XslFlags Function(string prefix, string name, IList<XslFlags> args)
329 {
330 _typeDonor = null;
332 foreach (XslFlags arg in args)
333 {
334 xslFlags |= arg;
335 }
337 if (prefix.Length == 0)
338 {
340 if (XPathBuilder.FunctionTable.TryGetValue(name, out var value))
341 {
344 if (args.Count == 0 && (id == XPathBuilder.FuncId.LocalName || id == XPathBuilder.FuncId.NamespaceUri || id == XPathBuilder.FuncId.Name || id == XPathBuilder.FuncId.String || id == XPathBuilder.FuncId.Number || id == XPathBuilder.FuncId.StringLength || id == XPathBuilder.FuncId.Normalize))
345 {
346 xslFlags2 |= XslFlags.Current;
347 }
348 }
349 else if (QilGenerator.FunctionTable.TryGetValue(name, out value2))
350 {
353 switch (id2)
354 {
355 case QilGenerator.FuncId.Current:
356 _xsltCurrentNeeded = true;
357 break;
358 case QilGenerator.FuncId.GenerateId:
359 if (args.Count == 0)
360 {
361 xslFlags2 |= XslFlags.Current;
362 }
363 break;
364 }
365 }
366 }
367 else
368 {
369 string text = ResolvePrefix(prefix);
370 if (text == "urn:schemas-microsoft-com:xslt")
371 {
372 switch (name)
373 {
374 case "node-set":
375 xslFlags2 = XslFlags.Nodeset;
376 break;
377 case "string-compare":
378 xslFlags2 = XslFlags.Number;
379 break;
380 case "utc":
381 xslFlags2 = XslFlags.String;
382 break;
383 case "format-date":
384 xslFlags2 = XslFlags.String;
385 break;
386 case "format-time":
387 xslFlags2 = XslFlags.String;
388 break;
389 case "local-name":
390 xslFlags2 = XslFlags.String;
391 break;
392 case "namespace-uri":
394 break;
395 case "number":
396 xslFlags2 = XslFlags.Number;
397 break;
398 }
399 }
400 else if (text == "http://exslt.org/common")
401 {
402 if (!(name == "node-set"))
403 {
404 if (name == "object-type")
405 {
406 xslFlags2 = XslFlags.String;
407 }
408 }
409 else
410 {
411 xslFlags2 = XslFlags.Nodeset;
412 }
413 }
414 if (xslFlags2 == XslFlags.None)
415 {
416 xslFlags2 = XslFlags.TypeFilter;
417 if (_compiler.Settings.EnableScript && text != null)
418 {
420 if (xmlExtensionFunction != null)
421 {
424 {
425 xslFlags2 = XslFlags.String;
426 }
428 {
429 xslFlags2 = XslFlags.Number;
430 }
432 {
433 xslFlags2 = XslFlags.Boolean;
434 }
436 {
437 xslFlags2 = XslFlags.Node;
438 }
440 {
441 xslFlags2 = XslFlags.Nodeset;
442 }
444 {
445 xslFlags2 = XslFlags.TypeFilter;
446 }
448 {
449 xslFlags2 = XslFlags.Nodeset;
450 }
451 }
452 }
453 xslFlags2 |= XslFlags.SideEffects;
454 }
455 }
456 return (xslFlags & ~XslFlags.TypeFilter) | xslFlags2;
457 }
458 }
459
461
463
464 private int _forEachDepth;
465
467
469
471
473
475
477
479
481
483
485 {
489 foreach (VarPar externalPar in compiler.ExternalPars)
490 {
491 _scope.AddVariable(externalPar.Name, externalPar);
492 }
493 foreach (VarPar globalVar in compiler.GlobalVars)
494 {
495 _scope.AddVariable(globalVar.Name, globalVar);
496 }
497 foreach (VarPar externalPar2 in compiler.ExternalPars)
498 {
500 externalPar2.Flags |= XslFlags.TypeFilter;
501 }
502 foreach (VarPar globalVar2 in compiler.GlobalVars)
503 {
505 }
507 foreach (ProtoTemplate allTemplate in compiler.AllTemplates)
508 {
510 }
511 foreach (ProtoTemplate allTemplate2 in compiler.AllTemplates)
512 {
513 foreach (XslNode item in allTemplate2.Content)
514 {
515 if (item.NodeType != XslNodeType.Text)
516 {
517 if (item.NodeType != XslNodeType.Param)
518 {
519 break;
520 }
522 if ((varPar.Flags & XslFlags.MayBeDefault) != 0)
523 {
524 varPar.Flags |= varPar.DefValueFlags;
525 }
526 }
527 }
528 }
529 for (int num = 32; num != 0; num >>= 1)
530 {
531 _dataFlow.PropagateFlag((XslFlags)num);
532 }
533 _dataFlow = null;
535 {
536 Stylesheet[] imports = item2.Value.Imports;
537 foreach (Stylesheet sheet in imports)
538 {
540 }
541 }
543 if ((xslFlags & XslFlags.Current) != 0)
544 {
545 _revCall0Graph.PropagateFlag(XslFlags.Current);
546 }
547 if ((xslFlags & XslFlags.Position) != 0)
548 {
549 _revCall0Graph.PropagateFlag(XslFlags.Position);
550 }
551 if ((xslFlags & XslFlags.Last) != 0)
552 {
553 _revCall0Graph.PropagateFlag(XslFlags.Last);
554 }
555 if ((xslFlags & XslFlags.SideEffects) != 0)
556 {
558 }
559 _revCall0Graph = null;
560 _revCall1Graph = null;
562 FillModeFlags(compiler.Root.ModeFlags, compiler.Root.Imports[0]);
563 return xslFlags;
564 }
565
567 {
568 foreach (Template template in sheet.Templates)
569 {
570 if (template.Mode.Equals(focusDonor.Mode))
571 {
572 _revCall0Graph.AddEdge(template, focusDonor);
573 }
574 }
575 Stylesheet[] imports = sheet.Imports;
576 foreach (Stylesheet sheet2 in imports)
577 {
579 }
580 }
581
583 {
584 Stylesheet[] imports = sheet.Imports;
585 foreach (Stylesheet sheet2 in imports)
586 {
587 FillModeFlags(sheet.ModeFlags, sheet2);
588 }
589 foreach (KeyValuePair<QilName, XslFlags> modeFlag in sheet.ModeFlags)
590 {
592 {
593 value = XslFlags.None;
594 }
595 parentModeFlags[modeFlag.Key] = value | modeFlag.Value;
596 }
597 foreach (Template template in sheet.Templates)
598 {
600 if (xslFlags != 0)
601 {
602 if (!parentModeFlags.TryGetValue(template.Mode, out var value2))
603 {
604 value2 = XslFlags.None;
605 }
606 parentModeFlags[template.Mode] = value2 | xslFlags;
607 }
608 }
609 }
610
611 protected override XslFlags Visit(XslNode node)
612 {
613 _scope.EnterScope(node.Namespaces);
614 XslFlags result = base.Visit(node);
615 _scope.ExitScope();
616 if (_currentTemplate != null && (node.NodeType == XslNodeType.Variable || node.NodeType == XslNodeType.Param))
617 {
618 _scope.AddVariable(node.Name, (VarPar)node);
619 }
620 return result;
621 }
622
623 protected override XslFlags VisitChildren(XslNode node)
624 {
626 foreach (XslNode item in node.Content)
627 {
628 xslFlags |= Visit(item);
629 }
630 return xslFlags;
631 }
632
634 {
636 return node.Flags;
637 }
638
640 {
642 return node.Flags;
643 }
644
650
652 {
654 foreach (XslNode item in node.Content)
655 {
656 xslFlags |= Visit(item);
657 if (item.NodeType == XslNodeType.WithParam)
658 {
659 ModeName key = new ModeName(node.Name, item.Name);
661 {
663 value = varPar2;
664 }
665 if (_typeDonor != null)
666 {
667 _dataFlow.AddEdge(_typeDonor, value);
668 }
669 else
670 {
671 value.Flags |= item.Flags & XslFlags.TypeFilter;
672 }
673 }
674 }
675 if (_currentTemplate != null)
676 {
678 }
680 }
681
683 {
684 return XslFlags.Rtf | ProcessAvt(node.NameAvt) | ProcessAvt(node.NsAvt) | VisitChildren(node);
685 }
686
688 {
691 {
692 if (_forEachDepth == 0)
693 {
695 }
696 else
697 {
699 }
700 }
701 VarPar[] array = new VarPar[node.Content.Count];
702 int num = 0;
703 foreach (XslNode item in node.Content)
704 {
705 xslFlags |= Visit(item);
706 array[num++] = _typeDonor;
707 }
708 if (value != null)
709 {
710 foreach (XslNode item2 in value.Content)
711 {
712 if (item2.NodeType == XslNodeType.Text)
713 {
714 continue;
715 }
716 if (item2.NodeType != XslNodeType.Param)
717 {
718 break;
719 }
721 VarPar varPar2 = null;
722 num = 0;
723 foreach (XslNode item3 in node.Content)
724 {
725 if (item3.Name.Equals(varPar.Name))
726 {
728 _typeDonor = array[num];
729 break;
730 }
731 num++;
732 }
733 if (varPar2 != null)
734 {
735 if (_typeDonor != null)
736 {
737 _dataFlow.AddEdge(_typeDonor, varPar);
738 }
739 else
740 {
741 varPar.Flags |= varPar2.Flags & XslFlags.TypeFilter;
742 }
743 }
744 else
745 {
746 varPar.Flags |= XslFlags.MayBeDefault;
747 }
748 }
749 }
751 }
752
753 protected override XslFlags VisitComment(XslNode node)
754 {
756 }
757
758 protected override XslFlags VisitCopy(XslNode node)
759 {
761 }
762
763 protected override XslFlags VisitCopyOf(XslNode node)
764 {
765 return XslFlags.Rtf | ProcessExpr(node.Select);
766 }
767
768 protected override XslFlags VisitElement(NodeCtor node)
769 {
770 return XslFlags.Rtf | ProcessAvt(node.NameAvt) | ProcessAvt(node.NsAvt) | VisitChildren(node);
771 }
772
773 protected override XslFlags VisitError(XslNode node)
774 {
775 return (VisitChildren(node) & ~XslFlags.TypeFilter) | XslFlags.SideEffects;
776 }
777
778 protected override XslFlags VisitForEach(XslNode node)
779 {
782 foreach (XslNode item in node.Content)
783 {
784 xslFlags = ((item.NodeType != XslNodeType.Sort) ? (xslFlags | (Visit(item) & ~XslFlags.FocusFilter)) : (xslFlags | Visit(item)));
785 }
787 return xslFlags;
788 }
789
790 protected override XslFlags VisitIf(XslNode node)
791 {
792 return ProcessExpr(node.Select) | VisitChildren(node);
793 }
794
796 {
797 return XslFlags.Rtf | ProcessAvt(node.Select) | VisitChildren(node);
798 }
799
801 {
803 }
804
805 protected override XslFlags VisitMessage(XslNode node)
806 {
807 return (VisitChildren(node) & ~XslFlags.TypeFilter) | XslFlags.SideEffects;
808 }
809
810 protected override XslFlags VisitNumber(Number node)
811 {
812 return XslFlags.Rtf | ProcessPattern(node.Count) | ProcessPattern(node.From) | ((node.Value != null) ? ProcessExpr(node.Value) : XslFlags.Current) | ProcessAvt(node.Format) | ProcessAvt(node.Lang) | ProcessAvt(node.LetterValue) | ProcessAvt(node.GroupingSeparator) | ProcessAvt(node.GroupingSize);
813 }
814
815 protected override XslFlags VisitPI(XslNode node)
816 {
817 return XslFlags.Rtf | ProcessAvt(node.Select) | VisitChildren(node);
818 }
819
820 protected override XslFlags VisitSort(Sort node)
821 {
822 return (ProcessExpr(node.Select) & ~XslFlags.FocusFilter) | ProcessAvt(node.Lang) | ProcessAvt(node.DataType) | ProcessAvt(node.Order) | ProcessAvt(node.CaseOrder);
823 }
824
825 protected override XslFlags VisitText(Text node)
826 {
828 }
829
831 {
833 {
834 if (_forEachDepth == 0)
835 {
837 }
838 else
839 {
841 }
842 }
843 return XslFlags.Rtf | XslFlags.HasCalls;
844 }
845
846 protected override XslFlags VisitValueOf(XslNode node)
847 {
848 return XslFlags.Rtf | ProcessExpr(node.Select);
849 }
850
852 {
853 return XslFlags.Rtf | ProcessExpr(node.Select);
854 }
855
856 protected override XslFlags VisitParam(VarPar node)
857 {
858 if (_currentTemplate is Template { Match: not null } template)
859 {
860 node.Flags |= XslFlags.MayBeDefault;
861 ModeName key = new ModeName(template.Mode, node.Name);
863 {
865 value = varPar2;
866 }
867 _dataFlow.AddEdge(value, node);
868 }
870 return node.DefValueFlags & ~XslFlags.TypeFilter;
871 }
872
873 protected override XslFlags VisitVariable(VarPar node)
874 {
876 return node.Flags & ~XslFlags.TypeFilter;
877 }
878
879 protected override XslFlags VisitWithParam(VarPar node)
880 {
882 return node.Flags & ~XslFlags.TypeFilter;
883 }
884
886 {
887 XslFlags result;
888 if (node.Select != null)
889 {
890 if (node.Content.Count != 0)
891 {
892 result = _xpathAnalyzer.Analyze(node.Select) | VisitChildren(node) | XslFlags.TypeFilter;
893 _typeDonor = null;
894 }
895 else
896 {
897 result = _xpathAnalyzer.Analyze(node.Select);
899 if (_typeDonor != null && node.NodeType != XslNodeType.WithParam)
900 {
901 _dataFlow.AddEdge(_typeDonor, node);
902 }
903 }
904 }
905 else if (node.Content.Count != 0)
906 {
907 result = XslFlags.Rtf | VisitChildren(node);
908 _typeDonor = null;
909 }
910 else
911 {
912 result = XslFlags.String;
913 _typeDonor = null;
914 }
915 return result;
916 }
917
918 private XslFlags ProcessExpr(string expr)
919 {
920 return _xpathAnalyzer.Analyze(expr) & ~XslFlags.TypeFilter;
921 }
922
923 private XslFlags ProcessAvt(string avt)
924 {
925 return _xpathAnalyzer.AnalyzeAvt(avt) & ~XslFlags.TypeFilter;
926 }
927
928 private XslFlags ProcessPattern(string pattern)
929 {
930 return _xpathAnalyzer.Analyze(pattern) & ~XslFlags.TypeFilter & ~XslFlags.FocusFilter;
931 }
932
934 {
936 {
939 }
940 else if (value[value.Count - 1] == dependentTemplate)
941 {
942 return;
943 }
945 }
946
948 {
950 {
951 key.Flags &= ~XslFlags.Stop;
952 }
954 {
955 key2.Flags &= ~XslFlags.Stop;
956 }
958 {
959 if ((key3.Flags & XslFlags.Stop) == 0 && (key3.Flags & XslFlags.SideEffects) != 0)
960 {
962 }
963 }
965 {
966 if ((key4.Flags & XslFlags.Stop) == 0 && (key4.Flags & XslFlags.SideEffects) != 0)
967 {
969 }
970 }
971 }
972
974 {
976 foreach (ProtoTemplate adj in _revCall0Graph.GetAdjList(t))
977 {
978 if ((adj.Flags & XslFlags.Stop) == 0)
979 {
981 }
982 }
983 foreach (ProtoTemplate adj2 in _revCall1Graph.GetAdjList(t))
984 {
985 if ((adj2.Flags & XslFlags.Stop) == 0)
986 {
988 }
989 }
990 if (!(t is Template template) || !_revApplyTemplatesGraph.TryGetValue(template.Mode, out var value))
991 {
992 return;
993 }
994 _revApplyTemplatesGraph.Remove(template.Mode);
995 foreach (ProtoTemplate item in value)
996 {
997 if ((item.Flags & XslFlags.Stop) == 0)
998 {
1000 }
1001 }
1002 }
1003}
bool TryGetValue(TKey key,[MaybeNullWhen(false)] out TValue value)
bool ICollection< KeyValuePair< TKey, TValue > >. Remove(KeyValuePair< TKey, TValue > keyValuePair)
void Add(TKey key, TValue value)
override int GetHashCode()
Definition QilName.cs:73
static Dictionary< string, FunctionInfo< FuncId > > FunctionTable
Node Parse(XPathScanner scanner, IXPathBuilder< Node > builder, LexKind endLex)
static readonly XmlQueryType NodeSDod
static readonly XmlQueryType DoubleX
static readonly XmlQueryType StringX
static readonly XmlQueryType ItemS
static readonly XmlQueryType BooleanX
static readonly XmlQueryType NodeNotRtf
static readonly XmlQueryType Empty
static VarPar WithParam(QilName name)
Dictionary< QilName, AttributeSet > AttributeSets
Definition Compiler.cs:99
Dictionary< QilName, Template > NamedTemplates
Definition Compiler.cs:97
static Dictionary< string, XPathBuilder.FunctionInfo< FuncId > > FunctionTable
XmlExtensionFunction ResolveFunction(string name, string ns, int numArgs, IErrorHelper errorHelper)
Definition Scripts.cs:58
void DepthFirstSearch(V v, XslFlags flag)
XPathAnalyzer(Compiler compiler, CompilerScopeManager< VarPar > scope)
VarPar ResolveVariable(string prefix, string name)
XslFlags Operator(XPathOperator op, XslFlags left, XslFlags right)
XslFlags Axis(XPathAxis xpathAxis, XPathNodeType nodeType, string prefix, string name)
XslFlags Predicate(XslFlags nodeset, XslFlags predicate, bool isReverseStep)
readonly CompilerScopeManager< VarPar > _scope
XslFlags Function(string prefix, string name, IList< XslFlags > args)
XslFlags JoinStep(XslFlags left, XslFlags right)
readonly XPathParser< XslFlags > _xpathParser
XslFlags Variable(string prefix, string name)
override XslFlags VisitError(XslNode node)
override XslFlags VisitNumber(Number node)
override XslFlags VisitMessage(XslNode node)
override XslFlags VisitComment(XslNode node)
override XslFlags VisitIf(XslNode node)
override XslFlags VisitWithParam(VarPar node)
override XslFlags VisitParam(VarPar node)
override XslFlags VisitChildren(XslNode node)
override XslFlags VisitCopy(XslNode node)
override XslFlags VisitApplyTemplates(XslNode node)
override XslFlags VisitUseAttributeSet(XslNode node)
override XslFlags Visit(XslNode node)
override XslFlags VisitForEach(XslNode node)
void FillModeFlags(Dictionary< QilName, XslFlags > parentModeFlags, Stylesheet sheet)
override XslFlags VisitLiteralAttribute(XslNode node)
override XslFlags VisitApplyImports(XslNode node)
CompilerScopeManager< VarPar > _scope
override XslFlags VisitVariable(VarPar node)
override XslFlags VisitAttribute(NodeCtor node)
void AddApplyTemplatesEdge(QilName mode, ProtoTemplate dependentTemplate)
override XslFlags VisitValueOf(XslNode node)
Dictionary< Template, Stylesheet > _fwdApplyImportsGraph
XslFlags ProcessVarPar(VarPar node)
Dictionary< QilName, List< ProtoTemplate > > _revApplyTemplatesGraph
readonly Dictionary< ModeName, VarPar > _applyTemplatesParams
override XslFlags VisitPI(XslNode node)
override XslFlags VisitElement(NodeCtor node)
XslFlags Analyze(Compiler compiler)
override XslFlags VisitText(Text node)
override XslFlags VisitAttributeSet(AttributeSet node)
override XslFlags VisitValueOfDoe(XslNode node)
void AddImportDependencies(Stylesheet sheet, Template focusDonor)
override XslFlags VisitLiteralElement(XslNode node)
Graph< ProtoTemplate > _revCall0Graph
XslFlags ProcessPattern(string pattern)
override XslFlags VisitTemplate(Template node)
void DepthFirstSearch(ProtoTemplate t)
override XslFlags VisitSort(Sort node)
override XslFlags VisitCallTemplate(XslNode node)
Graph< ProtoTemplate > _revCall1Graph
override XslFlags VisitCopyOf(XslNode node)
void ReportError(string res, params string[] args)