95 lines
2.9 KiB
Python
95 lines
2.9 KiB
Python
|
from plantuml import PlantUML
|
||
|
from os.path import abspath
|
||
|
|
||
|
|
||
|
class Request:
|
||
|
def __init__(self):
|
||
|
self.server = PlantUML(url='http://www.plantuml.com/plantuml/svg/')
|
||
|
self.clear()
|
||
|
|
||
|
def _startUML(self):
|
||
|
self.reqArr.append('@startuml')
|
||
|
|
||
|
def _endUML(self):
|
||
|
self.reqArr.append('@enduml')
|
||
|
|
||
|
def clear(self):
|
||
|
self.timestamps = {}
|
||
|
self.reqArr = []
|
||
|
self.variables = []
|
||
|
self.lineStyles = {}
|
||
|
self.stringUML = ''
|
||
|
self._startUML()
|
||
|
|
||
|
def addAnalog(self, name, string):
|
||
|
self.variables.append(f'analog "{string}" as {name}')
|
||
|
|
||
|
def addBinary(self, name, string, style = ''):
|
||
|
if style: name = name + '<<' + style + '>>'
|
||
|
self.variables.append(f'binary "{string}" as {name}')
|
||
|
|
||
|
def addClock(self, name, string):
|
||
|
self.variables.append(f'clock "{string}" as {name}')
|
||
|
|
||
|
def addConcise(self, name, string):
|
||
|
self.variables.append(f'concise "{string}" as {name}')
|
||
|
|
||
|
def addRobust(self, name, string):
|
||
|
self.variables.append(f'robust "{string}" as {name}')
|
||
|
|
||
|
def appendStr(self, string = ''):
|
||
|
self.variables.append(string)
|
||
|
|
||
|
def addLineStyle(self, name, color = 'green', thicknes = 1):
|
||
|
self.lineStyles[name] = [f'LineColor {color}', f'LineThickness {thicknes}']
|
||
|
|
||
|
def generateSVG(self):
|
||
|
self._compileUML()
|
||
|
filename = abspath('UML.txt')
|
||
|
self.server.processes_file(filename, outfile='UML.svg')
|
||
|
#result = self.server.processes(self.stringUML)
|
||
|
#return result
|
||
|
|
||
|
def setTimestamps(self, name, input):
|
||
|
for time, state in input:
|
||
|
try:
|
||
|
self.timestamps[f'@{time}'].append(f'{name} is {state}')
|
||
|
except KeyError:
|
||
|
self.timestamps[f'@{time}'] = [f'{name} is {state}']
|
||
|
|
||
|
def _addTimestamp(self, timecode, vars):
|
||
|
self.reqArr.append(timecode)
|
||
|
for var in vars:
|
||
|
self.reqArr.append(var)
|
||
|
|
||
|
def _addHeader(self):
|
||
|
self.reqArr.append('<style>')
|
||
|
if self.lineStyles:
|
||
|
self.reqArr.append('timingDiagram {')
|
||
|
for name, style in self.lineStyles.items():
|
||
|
self.reqArr.append(f' .{name} ' + '{')
|
||
|
for param in style: self.reqArr.append(' ' + str(param))
|
||
|
self.reqArr.append(' }')
|
||
|
self.reqArr.append('}')
|
||
|
|
||
|
self.reqArr.append('</style>')
|
||
|
|
||
|
def _addVariables(self):
|
||
|
for var in self.variables: self.reqArr.append(str(var))
|
||
|
|
||
|
def _compileUML(self):
|
||
|
self._addHeader()
|
||
|
self._addVariables()
|
||
|
|
||
|
if self.timestamps:
|
||
|
for key, item in self.timestamps.items():
|
||
|
self._addTimestamp(key, item)
|
||
|
|
||
|
self._endUML()
|
||
|
self.stringUML = [line + '\n' for line in self.reqArr]
|
||
|
with open('UML.txt', 'w', encoding='utf-8') as file:
|
||
|
file.writelines(self.stringUML)
|
||
|
|
||
|
|
||
|
|