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"| {l} |
"
+ 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"| {l} |
"
+ else:
+ outputs += " |
"
+ return (
+ "| " + 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'| len(irows):
inode += f' rowspan="{len(orows)}"'
inode += ">"
inode += f''
inode += irows[i]
- inode += " | "
+ inode += ""
if i < len(orows):
- inode += f'"
@@ -193,9 +187,9 @@ def __doc_iogam__(id, obj, edges, thread):
inode += orows[i]
inode += " | "
inode += "
"
- else:
- inode += " | "
- inode += " |
"
+ if i < total - 1:
+ inode += "
"
+
inode += "
>"
inode += "];\n"
if not bold:
@@ -211,7 +205,7 @@ def __doc_iogam__(id, obj, edges, thread):
def __doc_constgam__(id, obj, edges, thread):
- node = f" {id} [shape=plaintext, label=<"
+ node = f" {id} [shape=plaintext, label=<"
node += f"{id[2:]} {obj['Class']} |
"
if "OutputSignals" in obj:
@@ -226,8 +220,9 @@ def __doc_constgam__(id, obj, edges, thread):
thread,
)
)
- node += f'{doc.type_to_string(mtype)} {l} | '
- node += f''
+ node += " "
+ node += f' |
{doc.type_to_string(mtype)} {l} | '
+ node += f''
node += f'{sig["Default"]} |
'
node += "
>];\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"{label} {cls} |
"
+ 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 += (
+ "| "
+ + __sanitize__(obj["Expression"])
+ + " |
"
+ )
+
sigs, edges = __doc_common_gam__(id, obj, edges, thread)
if sigs:
- node += sigs + '"];'
+ node += sigs + "
>];"
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"