# from .Problem import Problem
|
from .Generators import VariableGeneratorFactory
|
|
|
class BerkiParse:
|
def __init__(self, text=None):
|
self.text = text.split("\n")
|
self.introduction = None
|
self.picture=None
|
self.parsedPicture=None
|
self.subproblems = []
|
self.solutions = None
|
self.parsedSolutions = None
|
self.variables = []
|
self.parsedVariables = None
|
self.variableGenerator = None
|
self._Error = []
|
self._Warning = []
|
self._Info = []
|
|
def findStartEndMarkers(self, marker):
|
start = -1
|
end = -1
|
for i, l in enumerate(self.text):
|
if l.strip("\n\r") == "#Start" + marker:
|
start = i + 1
|
if l.strip("\n\r") == "#End" + marker:
|
end = i
|
if start >= 0 and end >= 0:
|
yield (start, end)
|
start = -1
|
end = -1
|
|
def findIntroduction(self):
|
gen = self.findStartEndMarkers("Uvod")
|
try:
|
(start, end) = next(gen)
|
except StopIteration:
|
return None
|
return "\n".join(self.text[start:end])
|
|
def findVariables(self):
|
gen = self.findStartEndMarkers("Skalar")
|
varlist = []
|
for start, end in gen:
|
varlist.append("\n".join(self.text[start:end]))
|
return varlist
|
|
def findSubproblems(self):
|
gen = self.findStartEndMarkers("Podnaloga")
|
varlist = []
|
for start, end in gen:
|
varlist.append("\n".join(self.text[start:end]))
|
return varlist
|
|
def findSolutions(self):
|
gen = self.findStartEndMarkers("Rezultat")
|
varlist = []
|
for start, end in gen:
|
varlist.append("\n".join(self.text[start:end]))
|
return varlist
|
|
def findPicture(self):
|
gen = self.findStartEndMarkers("Pic")
|
varlist = []
|
for stat, end in gen:
|
varlist.append("\n".join(self.text[start:end]))
|
return varlist
|
|
def parseSections(self):
|
self.introduction = self.findIntroduction()
|
self.subproblems = self.findSubproblems()
|
self.solutions = self.findSolutions()
|
self.parsedSolutions = self.parseSolutions()
|
self.variables = self.findVariables()
|
self.parsedVariables = self.parseVariables()
|
self.variableGenerator = self.prepareGenerators()
|
self.picture = self.findPicture()
|
self.parsedPicture = self.parsePicture()
|
|
def parsePicture(self):
|
parsedPictures = []
|
for p in self.picture:
|
retval = {"filename": [], "size:": [], "position": []}
|
for r in p.split("\n"):
|
sp = r.split(":")
|
if sp[0].strip("\n\t'") == "ime":
|
retval["filename"].append(sp[1].strip("\n\t"))
|
elif sp[0].strip("\n\t'") == "sirina":
|
retval["size"].append(sp[1].strip("\n\t"))
|
elif sp[0].strip("\n\t'") == "polozaj":
|
retval["position"].append(sp[1].strip("\n\t"))
|
parsedPictures.append(retval)
|
return parsedPictures
|
|
def parseSolutions(self):
|
parsedSolutions = []
|
for s in self.solutions:
|
retval = {
|
"correct": [],
|
"wrong": [],
|
"glyph": None,
|
"type": None,
|
"unit": None,
|
}
|
for r in s.split("\n"):
|
sp = r.split(":", 1)
|
if sp[0].strip("\n\t'") == "formula":
|
retval["correct"].append(sp[1].strip("\n\t"))
|
elif sp[0].strip() == "napacna":
|
retval["wrong"].append(sp[1].strip("\n\t"))
|
elif sp[0].strip() == "izpis":
|
retval["type"] = sp[1].strip("\n\t'")
|
elif sp[0].strip() == "enota":
|
retval["unit"] = sp[1].strip("\n\t")
|
elif sp[0].strip() == "TeX":
|
retval["glyph"] = sp[1].strip("\n\t")
|
parsedSolutions.append(retval)
|
return parsedSolutions
|
|
def parseVariables(self):
|
parsedVariables = {}
|
for v in self.variables:
|
retval = {
|
"name": None,
|
"type": None,
|
"generator_type": None,
|
"generator": None,
|
}
|
for r in v.split("\n"):
|
sp = r.split(":", 1)
|
if sp[0].strip("\n\t'") == "ime":
|
name = sp[1].strip("\n\t'")
|
retval["name"] = name
|
elif sp[0].strip("\n\t'") == "izpis":
|
retval["type"] = sp[1].strip("\n\t'")
|
elif sp[0].strip("\n\t'") == "nacin":
|
retval["generator_type"] = sp[1].strip("\n\t'")
|
parsedVariables[name] = retval
|
return parsedVariables
|
|
def prepareGenerators(self):
|
variableGenerator = {}
|
for key, value in self.parsedVariables.items():
|
variableGenerator[key] = VariableGeneratorFactory.get_generator(
|
value["generator_type"]
|
)
|
return variableGenerator
|
|
def get_parsed_sections(self):
|
return (
|
self.introduction,
|
self.parsedPicture,
|
self.subproblems,
|
self.parsedVariables,
|
self.parsedSolutions,
|
self.variableGenerator,
|
)
|