Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/xlwt/ExcelFormula.py: 43%

24 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2023-07-17 14:22 -0600

1# -*- coding: windows-1252 -*- 

2 

3from . import ExcelFormulaParser, ExcelFormulaLexer 

4import struct 

5from .antlr import ANTLRException 

6 

7 

8class Formula(object): 

9 __slots__ = ["__s", "__parser", "__sheet_refs", "__xcall_refs"] 

10 

11 

12 def __init__(self, s): 

13 try: 

14 self.__s = s 

15 lexer = ExcelFormulaLexer.Lexer(s) 

16 self.__parser = ExcelFormulaParser.Parser(lexer) 

17 self.__parser.formula() 

18 self.__sheet_refs = self.__parser.sheet_references 

19 self.__xcall_refs = self.__parser.xcall_references 

20 except ANTLRException as e: 

21 # print e 

22 raise ExcelFormulaParser.FormulaParseException("can't parse formula " + s) 

23 

24 def get_references(self): 

25 return self.__sheet_refs, self.__xcall_refs 

26 

27 def patch_references(self, patches): 

28 for offset, idx in patches: 

29 self.__parser.rpn = self.__parser.rpn[:offset] + struct.pack('<H', idx) + self.__parser.rpn[offset+2:] 

30 

31 def text(self): 

32 return self.__s 

33 

34 def rpn(self): 

35 ''' 

36 Offset Size Contents 

37 0 2 Size of the following formula data (sz) 

38 2 sz Formula data (RPN token array) 

39 [2+sz] var. (optional) Additional data for specific tokens 

40 

41 ''' 

42 return struct.pack("<H", len(self.__parser.rpn)) + self.__parser.rpn 

43