digraph { start [label="I:\nCode\nInput" style="dotted"] {rank=same; start S0} start -> S0 [style="invis"] S0 [label="S0:\nidle"] S0 -> P0_list_nameplates [label="start"] P0_list_nameplates [shape="box" label="L.refresh"] P0_list_nameplates -> S1 S1 [label="S1: typing\nnameplate" color="orange"] {rank=same; foo P0_list_nameplates} S1 -> foo [label="refresh_nameplates" color="orange" fontcolor="orange"] foo [style="dashed" label=""] foo -> P0_list_nameplates S1 -> P1_record [label="got_nameplates"] P1_record [shape="box" label="record\nnameplates"] P1_record -> S1 S1 -> P1_claim [label="choose_nameplate" color="orange" fontcolor="orange"] P1_claim [shape="box" label="stash nameplate\nC.got_nameplate"] P1_claim -> S2 S2 [label="S2: typing\ncode\n(no wordlist)"] S2 -> S2 [label="got_nameplates"] S2 -> P2_stash_wordlist [label="got_wordlist"] P2_stash_wordlist [shape="box" label="stash wordlist"] P2_stash_wordlist -> S3 S2 -> P_done [label="choose_words" color="orange" fontcolor="orange"] S3 [label="S3: typing\ncode\n(yes wordlist)"] S3 -> S3 [label="got_nameplates"] S3 -> P_done [label="choose_words" color="orange" fontcolor="orange"] P_done [shape="box" label="build code\nC.finished_input(code)"] P_done -> S4 S4 [label="S4: done" color="green"] S4 -> S4 [label="got_nameplates\ngot_wordlist"] other [shape="box" style="dotted" color="orange" fontcolor="orange" label="h.refresh_nameplates()\nh.get_nameplate_completions(prefix)\nh.choose_nameplate(nameplate)\nh.get_word_completions(prefix)\nh.choose_words(words)" ] {rank=same; S4 other} }