10
0
mirror of https://github.com/LCPQ/QUESTDB_website.git synced 2024-11-05 05:33:55 +01:00
QUESTDB_website/tools/lib/dfbOptions.py

61 lines
2.3 KiB
Python
Raw Normal View History

2020-06-26 14:36:35 +02:00
from TexSoup import TexSoup,TexCmd
2020-07-03 14:51:12 +02:00
from . import formats
2020-06-26 14:36:35 +02:00
from .data import dataFileBase,DataType,state
from collections import defaultdict
class dfbOptions(object):
def __init__(self):
self.defaultType=DataType.ABS
2020-07-03 14:51:12 +02:00
self.format="line"
2020-06-26 14:36:35 +02:00
self.suffix=None
self.initialStates=defaultdict(lambda : state(1,1,"A_1"))
self.isDouble=False
2020-06-26 14:36:35 +02:00
@staticmethod
def readFromEnv(lateEnv):
dfb_Opt=dfbOptions()
dfbDefaultTypeNode=lateEnv.defaultType
if dfbDefaultTypeNode!=None:
dfbDefaultType=dfbDefaultTypeNode.expr
if type(dfbDefaultType) is TexCmd:
dfb_Opt.defaultType=DataType[dfbDefaultType.args[0].value.upper()]
dfbFormatNode=lateEnv.format
if dfbFormatNode!=None:
dfbFormat=dfbFormatNode.expr
if type(dfbFormat) is TexCmd:
2020-07-03 14:51:12 +02:00
dfb_Opt.format=dfbFormat.args[0].value
2020-06-26 14:36:35 +02:00
dfbSuffixNode=lateEnv.suffix
if dfbSuffixNode!=None:
dfbSuffix=dfbSuffixNode.expr
if type(dfbSuffix) is TexCmd:
dfb_Opt.suffix=dfbSuffix.args[0].value
dfbInitialStateNodes=list(lateEnv.find_all("initialState"))
for node in dfbInitialStateNodes:
initialState=node.expr
if type(initialState) is TexCmd:
vRArgs=[arg.value for arg in initialState.args if arg.type=="required"]
vOArgs=[arg.value for arg in initialState.args if arg.type=="optional"]
if len(vOArgs)==0:
defaultstate=state.fromString("1 "+vRArgs[0])
dfb_Opt.initialStates.default_factory=lambda : defaultstate
else:
mystate=state.fromString("1 "+vRArgs[0])
dfb_Opt.initialStates[vOArgs[0]]=mystate
dfbIsDouble=lateEnv.isDouble
if dfbIsDouble!=None:
dfbIsDouble=dfbIsDouble.expr
if type(dfbIsDouble) is TexCmd:
if len(dfbIsDouble.args)==0:
dfb_Opt.isDouble = True
elif len(dfbIsDouble.args)==1 and dfbIsDouble.args[0].type=="optional":
isDoubleStr=dfbIsDouble.args[0].value
if isDoubleStr == "true":
dfb_Opt.isDouble = True
elif isDoubleStr == "false":
isDouble = False
else:
raise ValueError("\isDouble must be 'true' or 'false'.")
else:
raise ValueError("Arguments error on '\isDouble'. Only one optional argument is supported.")
return dfb_Opt