-
Notifications
You must be signed in to change notification settings - Fork 38
Expand file tree
/
Copy pathJassToCSharpTranspiler.cs
More file actions
121 lines (100 loc) · 4.28 KB
/
Copy pathJassToCSharpTranspiler.cs
File metadata and controls
121 lines (100 loc) · 4.28 KB
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
namespace War3Net.CodeAnalysis.Transpilers
{
public partial class JassToCSharpTranspiler
{
private const int ArrayWhitespaceDiff = 3;
private const int PrefixWhitespaceDiff = -1;
public JassToCSharpTranspiler()
{
}
/// <summary>
/// Used when <see cref="ApplyCSharpLuaTemplateAttribute"/> is <see langword="true"/>.
/// </summary>
public JassToLuaTranspiler? JassToLuaTranspiler { get; set; }
public bool ApplyCSharpLuaTemplateAttribute { get; set; }
private SyntaxToken TokenWithSpace(SyntaxKind tokenKind)
{
return SyntaxFactory.Token(
SyntaxTriviaList.Empty,
tokenKind,
SyntaxTriviaList.Create(SyntaxFactory.ElasticSpace));
}
private SyntaxToken TokenWithSpace(JassSyntaxTriviaList leadingTrivia, SyntaxKind tokenKind)
{
return SyntaxFactory.Token(
Transpile(leadingTrivia),
tokenKind,
SyntaxTriviaList.Create(SyntaxFactory.ElasticSpace));
}
private SyntaxToken Token(SyntaxKind tokenKind, JassSyntaxTriviaList trailingTrivia)
{
return SyntaxFactory.Token(
SyntaxTriviaList.Empty,
tokenKind,
Transpile(trailingTrivia));
}
private SyntaxToken Token(SyntaxKind tokenKind, SyntaxTriviaList trailingTrivia)
{
return SyntaxFactory.Token(
SyntaxTriviaList.Empty,
tokenKind,
trailingTrivia);
}
private JassSyntaxTriviaList MergeTrivia(JassSyntaxToken discardedToken, JassSyntaxTriviaList leadingTrivia)
{
if (IsSingleSpace(discardedToken.TrailingTrivia, leadingTrivia))
{
return discardedToken.LeadingTrivia;
}
return JassSyntaxFactory.ConcatTriviaLists(discardedToken.LeadingTrivia, discardedToken.TrailingTrivia, leadingTrivia);
}
private JassSyntaxTriviaList MergeTrivia(JassSyntaxTriviaList trailingTrivia, JassSyntaxToken discardedToken)
{
if (IsSingleSpace(trailingTrivia, discardedToken.LeadingTrivia))
{
return discardedToken.TrailingTrivia;
}
return JassSyntaxFactory.ConcatTriviaLists(trailingTrivia, discardedToken.LeadingTrivia, discardedToken.TrailingTrivia);
}
private JassSyntaxTriviaList MergeTrivia(JassSyntaxTriviaList trailingTrivia, JassSyntaxTriviaList leadingTrivia)
{
if (IsSingleSpace(trailingTrivia, leadingTrivia))
{
return JassSyntaxTriviaList.Empty;
}
return JassSyntaxFactory.ConcatTriviaLists(trailingTrivia, leadingTrivia);
}
private SyntaxTriviaList MergeTrivia(SyntaxTriviaList trailingTrivia, SyntaxTriviaList leadingTrivia)
{
if (IsSingleSpace(trailingTrivia, leadingTrivia))
{
return SyntaxTriviaList.Empty;
}
return SyntaxFactory.TriviaList(trailingTrivia.Concat(leadingTrivia));
}
private bool IsSingleSpace(JassSyntaxTriviaList trailingTrivia, JassSyntaxTriviaList leadingTrivia)
{
if (trailingTrivia.Trivia.Length == 1 && leadingTrivia.Trivia.Length == 0)
{
return string.Equals(trailingTrivia.Trivia[0].Text, JassSymbol.Space, StringComparison.Ordinal);
}
if (trailingTrivia.Trivia.Length == 0 && leadingTrivia.Trivia.Length == 1)
{
return string.Equals(leadingTrivia.Trivia[0].Text, JassSymbol.Space, StringComparison.Ordinal);
}
return false;
}
private bool IsSingleSpace(SyntaxTriviaList trailingTrivia, SyntaxTriviaList leadingTrivia)
{
if (trailingTrivia.Count == 1 && leadingTrivia.Count == 0)
{
return string.Equals(trailingTrivia[0].ToFullString(), " ", StringComparison.Ordinal);
}
if (trailingTrivia.Count == 0 && leadingTrivia.Count == 1)
{
return string.Equals(leadingTrivia[0].ToFullString(), " ", StringComparison.Ordinal);
}
return false;
}
}
}