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

1from antlr4 import * 

2 

3 

4class CSharpLexerBase(Lexer): 

5 def __init__(self, input, output): 

6 Lexer.__init__(self, input, output) 

7 

8 self.interpolatedStringLevel = 0 

9 self.interpolatedVerbatiums = [] 

10 self.curlyLevels = [] 

11 self.verbatium = False 

12 

13 def OnInterpolatedRegularStringStart(self): 

14 self.interpolatedStringLevel += 1 

15 self.interpolatedVerbatiums.append(False) 

16 verbatium = False 

17 

18 def OnInterpolatedVerbatiumStringStart(self): 

19 self.interpolatedStringLevel += 1 

20 self.interpolatedVerbatiums.append(True) 

21 self.verbatium = True 

22 

23 def OnOpenBrace(self): 

24 if self.interpolatedStringLevel > 0: 

25 self.curlyLevels.append(curlyLevels.pop() + 1) 

26 

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() 

34 

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) 

46 

47 def OpenBraceInside(self): 

48 self.curlyLevels.append(1) 

49 

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 

55 

56 def OnCloseBraceInside(self): 

57 self.curlyLevels.pop() 

58 

59 def IsRegularCharInside(self): 

60 return not self.verbatium 

61 

62 def IsVerbatiumDoubleQuoteInside(self): 

63 return self.verbatium