Coverage for src/pyensae/languages/CSharpLexerBase.py: 43%
49 statements
« prev ^ index » next coverage.py v7.2.7, created at 2023-07-03 02:16 +0200
« prev ^ index » next coverage.py v7.2.7, created at 2023-07-03 02:16 +0200
1from antlr4 import *
4class CSharpLexerBase(Lexer):
5 def __init__(self, input, output):
6 Lexer.__init__(self, input, output)
8 self.interpolatedStringLevel = 0
9 self.interpolatedVerbatiums = []
10 self.curlyLevels = []
11 self.verbatium = False
13 def OnInterpolatedRegularStringStart(self):
14 self.interpolatedStringLevel += 1
15 self.interpolatedVerbatiums.append(False)
16 verbatium = False
18 def OnInterpolatedVerbatiumStringStart(self):
19 self.interpolatedStringLevel += 1
20 self.interpolatedVerbatiums.append(True)
21 self.verbatium = True
23 def OnOpenBrace(self):
24 if self.interpolatedStringLevel > 0:
25 self.curlyLevels.append(curlyLevels.pop() + 1)
27 def OnCloseBrace(self):
28 if self.interpolatedStringLevel > 0:
29 self.curlyLevels.append(curlyLevels.pop() - 1)
30 if self.curlyLevels.Peek() == 0:
31 self.curlyLevels.pop()
32 self.Skip()
33 popMode()
35 def OnColon(self):
36 if self.interpolatedStringLevel > 0:
37 ind = 1
38 switchToFormatString = True
39 while _input.La(ind) != '}':
40 if _input.La(ind) == ':' or _input.La(ind) == ')':
41 switchToFormatString = False
42 break
43 ind += 1
44 if switchToFormatString:
45 self.Mode(Test.CSharpLexer.INTERPOLATION_FORMAT)
47 def OpenBraceInside(self):
48 self.curlyLevels.append(1)
50 def OnDoubleQuoteInside(self):
51 self.interpolatedStringLevel -= 1
52 self.interpolatedVerbatiums.pop()
53 self.verbatium = self.interpolatedVerbatiums.Peek(
54 ) if self.interpolatedVerbatiums.Count() > 0 else False
56 def OnCloseBraceInside(self):
57 self.curlyLevels.pop()
59 def IsRegularCharInside(self):
60 return not self.verbatium
62 def IsVerbatiumDoubleQuoteInside(self):
63 return self.verbatium