diff --git a/autodoc/doc_state.py b/autodoc/doc_state.py index e42d082..4a9fc78 100644 --- a/autodoc/doc_state.py +++ b/autodoc/doc_state.py @@ -1,5 +1,7 @@ +import copy import logging import os +import re import common as doc @@ -10,9 +12,9 @@ def __doc_obj__(label, obj, id): def __doc_common_gam__(name, obj, edges, thread): - inputs = "" - outputs = "" - if "InputSignals" in obj: + inputs = "" + outputs = "
" + if "InputSignals" in obj and len(obj["InputSignals"]): for i, (l, sig) in enumerate(obj["InputSignals"].items()): alias = doc.signal_alias(l, sig) mtype = doc.signal_type(sig) @@ -25,9 +27,11 @@ def __doc_common_gam__(name, obj, edges, thread): ) ) if i != 0: - inputs += " | " - inputs += f" {l}" - if "OutputSignals" in obj: + inputs += "
" + inputs += f"
" + else: + inputs += "" + if "OutputSignals" in obj and len(obj["OutputSignals"]): for i, (l, sig) in enumerate(obj["OutputSignals"].items()): alias = doc.signal_alias(l, sig) mtype = doc.signal_type(sig) @@ -40,51 +44,41 @@ def __doc_common_gam__(name, obj, edges, thread): ) ) if i != 0: - outputs += " | " - outputs += f" {l}" - return "{ {" + inputs + " } | { " + outputs + "} }", edges + outputs += "
" + outputs += f"
" + else: + outputs += "" + return ( + "
{l}
{l}
" + inputs + "
" + outputs + "", + edges, + ) -def __doc_triggered_iogam__(name, obj, edges, thread): - signals = "" - if "InputSignals" in obj: - for i, (l, sig) in enumerate(obj["InputSignals"].items()): - alias = doc.signal_alias(l, sig) - mtype = doc.signal_type(sig) - datasrc = sig["DataSource"] - edges.append( - doc.edge( - doc.signal(datasrc, alias, mtype), - doc.signal(name, l, mtype), - thread, - ) +def __doc_triggered_iogam__(id, obj, edges, thread): + node = "" + + if len(obj["InputSignals"]) > 0: + name = id[2:] + node = __gam__(id, name, "TriggeredIOGAM") + + recl = copy.deepcopy(obj) + trg = list(obj["InputSignals"].keys())[0] + sig = obj["InputSignals"][trg] + alias = doc.signal_alias(trg, sig) + mtype = doc.signal_type(sig) + datasrc = sig["DataSource"] + edges.append( + doc.edge( + doc.signal(datasrc, alias, mtype), + doc.signal(id, trg, mtype), + thread, ) - if i > 1: - signals += " | " - signals += f" " - - if i == 0: - signals += "Trigger | { { " - else: - signals += f"{l}" - signals += " } | { " - if "OutputSignals" in obj: - for i, (l, sig) in enumerate(obj["OutputSignals"].items()): - alias = doc.signal_alias(l, sig) - mtype = doc.signal_type(sig) - datasrc = sig["DataSource"] - edges.append( - doc.edge( - doc.signal(name, l, mtype), - doc.signal(datasrc, alias, mtype), - thread, - ) - ) - if i != 0: - signals += " | " - signals += f" {l} " - signals += " } }" - node = f'{name} [tooltip=" TriggeredIOGAM::{name} ", label="{name}\nTriggeredIOGAM | {signals}", style=filled, fillcolor="#eee"];\n' + ) + node += f"Trigger
" + del recl["InputSignals"][trg] + sigs, edges = __doc_common_gam__(id, recl, edges, thread) + node += sigs + node += ">];" return node, edges @@ -170,22 +164,22 @@ def __doc_iogam__(id, obj, edges, thread): inode = f"{id}_{counter} [shape=plaintext," inode += f'tooltip=" IOGAM::{id} ", label=<' - inode += "" + inode += "
" if bold: for i in range(total): inode += "" if i < len(irows): - inode += f'" + inode += "" if i < len(orows): - inode += f'
len(irows): inode += f' rowspan="{len(orows)}"' inode += ">" inode += f'' inode += irows[i] - inode += "" + node = f" {id} [shape=plaintext, label=<" node += f"" if "OutputSignals" in obj: @@ -226,8 +220,9 @@ def __doc_constgam__(id, obj, edges, thread): thread, ) ) - node += f'' - node += f'' + node += f'' node += "
{id[2:]}
{obj['Class']}
{doc.type_to_string(mtype)}
{l}
' + node += "
" + node += f'
{doc.type_to_string(mtype)}
{l}
' node += f'{sig["Default"]}
>];\n" return node, edges @@ -297,18 +292,42 @@ def __doc_events__(id, obj, edges, thread): def __sanitize__(expression): + expression = expression.strip() + expression = re.sub(" +", " ", expression) if expression[0] == "\n": expression = expression[1:] - return expression.replace(">", ">").replace("<", "<").replace("\n", "\n") + if expression[-1] == "\n": + expression = expression[:-1] + + expression = ( + expression.replace("&", "&") + .replace(">", ">") + .replace("<", "<") + .replace("\n", "
") + ) + return expression + + +def __gam__(id, label, cls): + node = f" {id} [shape=plaintext, label=<" + node += f"
" + return node def __doc_mathgam__(id, obj, edges, thread): label = id[2:] - node = f' {id} [label="{label}\n{obj["Class"]} | ' - node += __sanitize__(obj["Expression"]) + " | " + import sys + + node = __gam__(id, label, obj["Class"]) + node += ( + "
" + ) + sigs, edges = __doc_common_gam__(id, obj, edges, thread) if sigs: - node += sigs + '"];' + node += sigs + "
{label}
{cls}
" + + __sanitize__(obj["Expression"]) + + "
>];" else: node = "" return node, edges @@ -328,10 +347,10 @@ def __doc_gam__(label, obj, edges, thread, classfilter=True): cls = obj["Class"] if classfilter and cls in __gams_fns__: return __gams_fns__[cls](id, obj, edges, thread) - node = f' {id} [label="{label}\n{obj["Class"]} | ' + node = __gam__(id, label, cls) sigs, edges = __doc_common_gam__(id, obj, edges, thread) if sigs: - node += sigs + '"];' + node += sigs + "
>];" else: node = "" return node, edges @@ -494,6 +513,7 @@ def __state_full_graph__(label, state, app): graph = f"digraph {label[1:]}" + "{\n" graph += "ranksep = 2;\n" graph += "nodesep = 0.05;\n" + graph += 'fontname="mono"\n' graph += "rankdir = LR;\n" graph += "node [shape=Mrecord];\n" graph += f"label={label[1:]}>;\n"