10
0
mirror of https://github.com/LCPQ/QUESTDB_website.git synced 2024-07-22 18:57:38 +02:00
QUESTDB_website/tools/datafileBuilder.py

60 lines
2.2 KiB
Python
Executable File

#!/usr/bin/env python3
import sys
import re
from enum import IntEnum,auto,unique
import numpy as np
from pathlib import Path
from lib import LaTeX
from lib.Format import Format
from TexSoup import TexSoup,TexCmd
from lib.data import dataFileBase,DataType,state
from collections import defaultdict
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--file', type=argparse.FileType('r'))
parser.add_argument('--debug', action='store_true', help='Debug mode')
args = parser.parse_args()
lines=args.file.readlines()
soup=TexSoup(lines)
opt=soup.dfbOptions
dfb_Opt= {"defaultType":DataType.ABS,"format":Format.LINE,"suffix":None,"firstStates":defaultdict(lambda : state(1,1,"A_1"))}
dfbDefaultTypeNode=opt.defaultType
if dfbDefaultTypeNode!=None:
dfbDefaultType=dfbDefaultTypeNode.expr
if type(dfbDefaultType) is TexCmd:
dfb_Opt["defaultType"]=DataType[dfbDefaultType.args[0].value.upper()]
dfbFormatNode=opt.format
if dfbFormatNode!=None:
dfbFormat=dfbFormatNode.expr
if type(dfbFormat) is TexCmd:
dfb_Opt["format"]=Format[dfbFormat.args[0].value.upper()]
dfbSuffixNode=opt.suffix
if dfbSuffixNode!=None:
dfbSuffix=dfbSuffixNode.expr
if type(dfbSuffix) is TexCmd:
dfb_Opt["suffix"]=dfbSuffix.args[0].value
dfbFirstStateNodes=list(opt.find_all("firstState"))
for node in dfbFirstStateNodes:
firstState=node.expr
if type(firstState) is TexCmd:
vRArgs=[arg.value for arg in firstState.args if arg.type=="required"]
vOArgs=[arg.value for arg in firstState.args if arg.type=="optional"]
if len(vOArgs)==0:
defaultstate=state.fromString(vRArgs[0])
dfb_Opt["firstStates"].default_factory=lambda : defaultstate
else:
mystate=state.fromString(vRArgs[0])
dfb_Opt["firstStates"][vOArgs[0]]=mystate
commands=[LaTeX.newCommand(cmd) for cmd in soup.find_all("newcommand")]
dat=LaTeX.tabularToData(soup.tabular,commands)
scriptpath=Path(sys.argv[0]).resolve()
datapath=scriptpath.parents[1]/"static"/"data"
if args.debug:
datapath=datapath/"test"
if not datapath.exists():
datapath.mkdir()
datalst=dataFileBase.readFromTable(dat,dfb_Opt["firstStates"],format=dfb_Opt["format"],default=dfb_Opt["defaultType"],commands=commands)
for data in datalst:
data.toFile(datapath,dfb_Opt["suffix"])