digraph G { subgraph clusterNotcurses { labeljust="l"; label = "Notcurses context (one per terminal)" style = filled; color = lightgrey; compound = "true" subgraph clusterRedner { label="Rendering solves for the current frame. This\nframe is compared to the current state.\nDifferent cells are written to the terminal,\nand the current state is updated." style="filled" color="cadetblue:purple" LastFrame [ shape=rectangle label="Last rendered frame" style=filled color=yellow ] RenderArea [ shape=rectangle label="Render area\n(via stdout)" style=filled color=yellow ] labelloc="b" } subgraph clusterZaxis { label="Piles represent distinct collections of planes. Only the main pile gets rendered." style=filled; color="cadetblue:purple"; pileMain [ label="Main pile.\nContains standard plane.\nGets rendered." style="filled" fillcolor=darkseagreen1 shape=invtrapezium ] pile1 [ label="Extracted\npile 1" style="filled" fillcolor=darkolivegreen2 shape=invtrapezium ] pile2 [ label="Extracted\npile 2" style="filled" fillcolor=darkolivegreen2 shape=invtrapezium ] { rank=same; pileMain pile1 pile2 } } pileMain -> LastFrame LastFrame -> RenderArea subgraph clusterPlanes { labelloc="b" label="The planes of a pile are related two ways:\n1. Totally ordered along the pile's z-axis.\n2. Via a rooted n-ary tree of binding." style=filled; color="cadetblue:purple"; planeStd [ label="Standard plane" shape=rectangle color="lightgreen" style=filled ] plane1 [ label="Plane 1" shape=rectangle color="green" style=filled ] plane2 [ label="Plane 2" shape=rectangle color="green" style=filled ] plane3 [ label="Plane 3" shape=rectangle color="green" style=filled ] plane4 [ label="Plane 4" shape=rectangle color="green" style=filled ] plane5 [ label="Plane 5" shape=rectangle color="green" style=filled ] plane6 [ label="Plane 6" shape=rectangle color="green" style=filled ] pileMain -> planeStd planeStd -> plane1 planeStd -> plane2 plane1 -> plane3 pile1 -> plane4 plane4 -> plane5 pile2 -> plane6 } subgraph clusterMatrices { labelloc="b" label="A rectangular array of Cells, with one Cell per coordinate of the associated plane, backs each plane.\nThis is the plane's cell matrix. An EGCPool backs each cell matrix; they contain nul-terminated\nUTF8-encoded Extended Grapheme Clusters of arbitrary length." style=filled; color="cadetblue:purple"; cMatrix0 [ label="Cellmatrix 0" shape=rectangle style=filled ] cMatrix1 [ label="Cellmatrix 1" shape=rectangle style=filled ] cMatrix2 [ label="Cellmatrix 2" shape=rectangle style=filled ] cMatrix3 [ label="Cellmatrix 3" shape=rectangle style=filled ] plane1 -> cMatrix1 plane2 -> cMatrix2 plane3 -> cMatrix3 LastFrame -> cMatrix0 egcPool0 [ label="EGCPool 0" shape=rectangle style=filled ] egcPool1 [ label="EGCPool 1" shape=rectangle style=filled ] egcPool2 [ label="EGCPool 2" shape=rectangle style=filled ] egcPool3 [ label="EGCPool 3" shape=rectangle style=filled ] cMatrix0 -> egcPool0 cMatrix1 -> egcPool1 cMatrix2 -> egcPool2 cMatrix3 -> egcPool3 } } }